feat(new tools): IES Guidelines and Illuminance converter

IES Guidelines searcher and Illuminance units converter

Fix #1475
This commit is contained in:
sharevb 2025-03-02 22:07:40 +01:00 committed by ShareVB
parent 80e46c9292
commit 37693a57ec
9 changed files with 977 additions and 31 deletions

34
components.d.ts vendored
View File

@ -88,29 +88,19 @@ declare module '@vue/runtime-core' {
HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default']
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
'IconMdi:contentCopy': typeof import('~icons/mdi/content-copy')['default']
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default']
IconMdiArrowRight: typeof import('~icons/mdi/arrow-right')['default']
IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
IconMdiCamera: typeof import('~icons/mdi/camera')['default']
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
IconMdiClose: typeof import('~icons/mdi/close')['default']
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
IconMdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default']
IconMdiDownload: typeof import('~icons/mdi/download')['default']
IconMdiEye: typeof import('~icons/mdi/eye')['default']
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
IconMdiPause: typeof import('~icons/mdi/pause')['default']
IconMdiPlay: typeof import('~icons/mdi/play')['default']
IconMdiRecord: typeof import('~icons/mdi/record')['default']
IconMdiRefresh: typeof import('~icons/mdi/refresh')['default']
IconMdiSearch: typeof import('~icons/mdi/search')['default']
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
IconMdiVideo: typeof import('~icons/mdi/video')['default']
IesLightingGuidelines: typeof import('./src/tools/ies-lighting-guidelines/ies-lighting-guidelines.vue')['default']
IlluminanceConverter: typeof import('./src/tools/illuminance-converter/illuminance-converter.vue')['default']
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']
@ -137,42 +127,26 @@ declare module '@vue/runtime-core' {
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default']
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
NAlert: typeof import('naive-ui')['NAlert']
NA: typeof import('naive-ui')['NA']
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
NCheckbox: typeof import('naive-ui')['NCheckbox']
NCode: typeof import('naive-ui')['NCode']
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
NColorPicker: typeof import('naive-ui')['NColorPicker']
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
NDatePicker: typeof import('naive-ui')['NDatePicker']
NDivider: typeof import('naive-ui')['NDivider']
NDynamicInput: typeof import('naive-ui')['NDynamicInput']
NEllipsis: typeof import('naive-ui')['NEllipsis']
NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem']
NGi: typeof import('naive-ui')['NGi']
NGrid: typeof import('naive-ui')['NGrid']
NH1: typeof import('naive-ui')['NH1']
NH2: typeof import('naive-ui')['NH2']
NH3: typeof import('naive-ui')['NH3']
NIcon: typeof import('naive-ui')['NIcon']
NImage: typeof import('naive-ui')['NImage']
NInputGroup: typeof import('naive-ui')['NInputGroup']
NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
NInputNumber: typeof import('naive-ui')['NInputNumber']
NLayout: typeof import('naive-ui')['NLayout']
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
NMenu: typeof import('naive-ui')['NMenu']
NProgress: typeof import('naive-ui')['NProgress']
NScrollbar: typeof import('naive-ui')['NScrollbar']
NSlider: typeof import('naive-ui')['NSlider']
NStatistic: typeof import('naive-ui')['NStatistic']
NSwitch: typeof import('naive-ui')['NSwitch']
NP: typeof import('naive-ui')['NP']
NTable: typeof import('naive-ui')['NTable']
NTag: typeof import('naive-ui')['NTag']
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
NUpload: typeof import('naive-ui')['NUpload']
NUploadDragger: typeof import('naive-ui')['NUploadDragger']
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']
PdfSignatureChecker: typeof import('./src/tools/pdf-signature-checker/pdf-signature-checker.vue')['default']

View File

@ -0,0 +1,21 @@
import _ from 'lodash';
function useDebouncedRef<T>(initialValue: T, delay: number, immediate: boolean = false) {
const state = ref(initialValue);
const debouncedRef = customRef((track, trigger) => ({
get() {
track();
return state.value;
},
set: _.debounce(
(value) => {
state.value = value;
trigger();
},
delay,
{ leading: immediate },
),
}));
return debouncedRef;
}
export default useDebouncedRef;

View File

@ -0,0 +1,740 @@
[
{
"industryType": "Airplane Manufacturing",
"industryApplication": "Drilling, riveting, screw fastening",
"footCandlesRange": "75",
"recommendedLighting": "High Bay"
},
{
"industryType": "Airplane Manufacturing",
"industryApplication": "Final assembly, hangar",
"footCandlesRange": "100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Airplane Manufacturing",
"industryApplication": "Inspection",
"footCandlesRange": "50-200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Airplane Manufacturing",
"industryApplication": "Welding",
"footCandlesRange": "50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Assembly",
"industryApplication": "Rough easy seeing",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Assembly",
"industryApplication": "Rough difficult seeing",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Assembly",
"industryApplication": "Medium",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Auditoriums",
"industryApplication": "Social Activities",
"footCandlesRange": "05-oct",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Auditoriums",
"industryApplication": "Assembly Only",
"footCandlesRange": "oct-20",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Auditoriums",
"industryApplication": "Exhibitions",
"footCandlesRange": "15-25",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Automotive Manufacturing",
"industryApplication": "Frame Assembly",
"footCandlesRange": "50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Automotive Manufacturing",
"industryApplication": "Body & chassis assembly",
"footCandlesRange": "100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Automotive Manufacturing",
"industryApplication": "Body parts assembly",
"footCandlesRange": "100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Automotive Manufacturing",
"industryApplication": "Final Assembly, finishing, inspecting",
"footCandlesRange": "200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Banks",
"industryApplication": "Lobby General",
"footCandlesRange": "oct-50",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Banks",
"industryApplication": "Writing Areas",
"footCandlesRange": "20-70",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Banks",
"industryApplication": "Teller Stations, Posting & Keypunch",
"footCandlesRange": "50-150",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Barber Shop",
"industryApplication": "Beauty Parlors",
"footCandlesRange": "50-100",
"recommendedLighting": "Flat Panel"
},
{
"industryType": "Chemical Works",
"industryApplication": "Chemical Works",
"footCandlesRange": "30",
"recommendedLighting": "Vapor Tight/Hazardous"
},
{
"industryType": "Clothing Manufacturer",
"industryApplication": "Receiving, storing, shipping, winding, measuring",
"footCandlesRange": "20-50",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Clothing Manufacturer",
"industryApplication": "Pattern making, trimming",
"footCandlesRange": "50-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Clothing Manufacturer",
"industryApplication": "Shops, Marking",
"footCandlesRange": "50-200",
"recommendedLighting": "Flat Panel/Troffer/High Bay"
},
{
"industryType": "Clothing Manufacturer",
"industryApplication": "Cutting, Pressing",
"footCandlesRange": "100-500",
"recommendedLighting": "Flat Panel/Troffer/High Bay"
},
{
"industryType": "Clothing Manufacturer",
"industryApplication": "Sewing, Inspection",
"footCandlesRange": "200-500",
"recommendedLighting": "Flat Panel/Troffer/High Bay"
},
{
"industryType": "Electrical Equipment Manufacturing",
"industryApplication": "Impregnating",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Electrical Equipment Manufacturing",
"industryApplication": "Insulating coil winding, testing",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Food Service Facility",
"industryApplication": "Dining areas, cashier",
"footCandlesRange": "20-50",
"recommendedLighting": "Troffer/Recessed"
},
{
"industryType": "Food Service Facility",
"industryApplication": "Cleaning",
"footCandlesRange": "oct-20",
"recommendedLighting": "Recessed"
},
{
"industryType": "Food Service Facility",
"industryApplication": "Dining",
"footCandlesRange": "mai-20",
"recommendedLighting": "Troffer/Recessed"
},
{
"industryType": "Food Service Facility",
"industryApplication": "Food Displays",
"footCandlesRange": "30-100",
"recommendedLighting": "Recessed"
},
{
"industryType": "Food Service Facility",
"industryApplication": "Kitchen",
"footCandlesRange": "50-100",
"recommendedLighting": "IP65 High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Annealing Furnaces",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Cleaning",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Core Making",
"footCandlesRange": "50-200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Inspection Fine",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Inspection Medium",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Molding",
"footCandlesRange": "50-200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Foundries",
"industryApplication": "Pouring, Sorting",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay/Hazardous"
},
{
"industryType": "Garages-Motor Vehicles",
"industryApplication": "Storage",
"footCandlesRange": "5",
"recommendedLighting": "Garage"
},
{
"industryType": "Garages-Motor Vehicles",
"industryApplication": "Parking Garage",
"footCandlesRange": "10",
"recommendedLighting": "Garage /.Strip"
},
{
"industryType": "Garages-Motor Vehicles",
"industryApplication": "Service Garage",
"footCandlesRange": "oct-20",
"recommendedLighting": "Garage"
},
{
"industryType": "Garages-Motor Vehicles",
"industryApplication": "Entrances",
"footCandlesRange": "50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Garages-Motor Vehicles",
"industryApplication": "Repair Area",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Gymnasiums",
"industryApplication": "Assemblies",
"footCandlesRange": "10",
"recommendedLighting": "Flat Panel/High Bay"
},
{
"industryType": "Gymnasiums",
"industryApplication": "General Exercise & Recreation",
"footCandlesRange": "30",
"recommendedLighting": "Flat Panel/High Bay"
},
{
"industryType": "Gymnasiums",
"industryApplication": "Exhibitions, Matches",
"footCandlesRange": "50",
"recommendedLighting": "Flat Panel/High Bay"
},
{
"industryType": "Hospitals",
"industryApplication": "Rooms",
"footCandlesRange": "oct-30",
"recommendedLighting": "Troffer/Flat Panel"
},
{
"industryType": "Hospitals",
"industryApplication": "Corridors",
"footCandlesRange": "mai-30",
"recommendedLighting": "Troffer/Flat Panel"
},
{
"industryType": "Hospitals",
"industryApplication": "Emergency Rooms",
"footCandlesRange": "50-100",
"recommendedLighting": "NA"
},
{
"industryType": "Hospitals",
"industryApplication": "Operating Rooms",
"footCandlesRange": "100-200",
"recommendedLighting": "NA"
},
{
"industryType": "Hotels",
"industryApplication": "Bathrooms",
"footCandlesRange": "20-50",
"recommendedLighting": "Recessed"
},
{
"industryType": "Hotels",
"industryApplication": "Bedrooms for Reading",
"footCandlesRange": "oct-20",
"recommendedLighting": "NA"
},
{
"industryType": "Hotels",
"industryApplication": "Corridors, elevators and stairs",
"footCandlesRange": "oct-20",
"recommendedLighting": "Recessed"
},
{
"industryType": "Hotels",
"industryApplication": "Front Desk",
"footCandlesRange": "50-100",
"recommendedLighting": "Recessed"
},
{
"industryType": "Hotels",
"industryApplication": "Linen Room: Sewing",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Hotels",
"industryApplication": "Linen Room: General",
"footCandlesRange": "oct-20",
"recommendedLighting": "High Bay"
},
{
"industryType": "Hotels",
"industryApplication": "Lobby: General Lighting",
"footCandlesRange": "oct-20",
"recommendedLighting": "Recessed"
},
{
"industryType": "Hotels",
"industryApplication": "Lobby: Reading and working areas",
"footCandlesRange": "20-50",
"recommendedLighting": "Recessed/Flat Panel"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Stock, hot top, checker, cellar, calcining",
"footCandlesRange": "oct-30",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Building, slag pits, Stripping yard",
"footCandlesRange": "20",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Control platform, repairs, mixer building",
"footCandlesRange": "30",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Rolling mills",
"footCandlesRange": "30-50",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Shearing",
"footCandlesRange": "50",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Tin Plate",
"footCandlesRange": "50",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Motor Room, Machine Room",
"footCandlesRange": "30",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Iron & Steel Manufacturing",
"industryApplication": "Inspection",
"footCandlesRange": "100",
"recommendedLighting": "UFO/Hazardous/Flood"
},
{
"industryType": "Library",
"industryApplication": "Ordinary Reading, Stacks",
"footCandlesRange": "20-50",
"recommendedLighting": "Troffer/Flat Panel"
},
{
"industryType": "Library",
"industryApplication": "Book Repair and Binding",
"footCandlesRange": "20-50",
"recommendedLighting": "Troffer/Flat Panel"
},
{
"industryType": "Library",
"industryApplication": "Study & Notes, Cataloging",
"footCandlesRange": "20-100",
"recommendedLighting": "Troffer/Flat Panel"
},
{
"industryType": "Library",
"industryApplication": "Card Files, Check Desk",
"footCandlesRange": "20-100",
"recommendedLighting": "Troffer/Flat Panel"
},
{
"industryType": "Laundries",
"industryApplication": "Washing",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Laundries",
"industryApplication": "Ironing",
"footCandlesRange": "20-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Machine Shops",
"industryApplication": "Rough Bench",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Machine Shops",
"industryApplication": "Medium Bench, Rough Grinding, Buffing",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Machine Shops",
"industryApplication": "Fine Bench and Work",
"footCandlesRange": "200-500",
"recommendedLighting": "High Bay"
},
{
"industryType": "Materials Handling",
"industryApplication": "Loading Trucking",
"footCandlesRange": "oct-20",
"recommendedLighting": "High Bay/Temporary"
},
{
"industryType": "Materials Handling",
"industryApplication": "Picking Stock Classifying",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Materials Handling",
"industryApplication": "Wrapping, Packing, Labeling",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Offices",
"industryApplication": "Accounting",
"footCandlesRange": "50-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Audio-Visual Areas",
"footCandlesRange": "20-50",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Conference Areas",
"footCandlesRange": "20-70",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Corridors, Stairways",
"footCandlesRange": "20",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Drafting",
"footCandlesRange": "50-200",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "General and Private Offices",
"footCandlesRange": "50-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Lobbies, Lounges, & Reception Areas",
"footCandlesRange": "mai-20",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Mail Sorting",
"footCandlesRange": "50-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Offices",
"industryApplication": "Off-set printing & duplicating areas",
"footCandlesRange": "20-50",
"recommendedLighting": "Flat Panel/Troffer/High Bay"
},
{
"industryType": "Offices",
"industryApplication": "Spaces with VDT's",
"footCandlesRange": "75",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Paint Shop",
"industryApplication": "Spraying, Rubbing",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Paint Shop",
"industryApplication": "Hand Art, Stencil",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Paint Shop",
"industryApplication": "Fine Hand Painting & Finishing",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Paper Manufacturing",
"industryApplication": "Beaters, Grinding",
"footCandlesRange": "20-50",
"recommendedLighting": "UFO"
},
{
"industryType": "Paper Manufacturing",
"industryApplication": "Finishing, Cutting",
"footCandlesRange": "50-100",
"recommendedLighting": "UFO"
},
{
"industryType": "Paper Manufacturing",
"industryApplication": "Hand Counting",
"footCandlesRange": "50-100",
"recommendedLighting": "UFO"
},
{
"industryType": "Paper Manufacturing",
"industryApplication": "Paper machine reel, Inspection",
"footCandlesRange": "100-200",
"recommendedLighting": "UFO"
},
{
"industryType": "Paper Manufacturing",
"industryApplication": "Rewinder",
"footCandlesRange": "100-200",
"recommendedLighting": "UFO"
},
{
"industryType": "Printing",
"industryApplication": "Welding",
"footCandlesRange": "50",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Printing",
"industryApplication": "Color Inspecting",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Printing",
"industryApplication": "Presses",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Printing",
"industryApplication": "Proofreading",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Printing",
"industryApplication": "Composing Room",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Schools",
"industryApplication": "Reading",
"footCandlesRange": "20-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Schools",
"industryApplication": "Typing",
"footCandlesRange": "20-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Schools",
"industryApplication": "Demonstrations",
"footCandlesRange": "100-200",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Schools",
"industryApplication": "Sewing",
"footCandlesRange": "20-100",
"recommendedLighting": "Flat Panel/Troffer"
},
{
"industryType": "Sheet Metal Works",
"industryApplication": "General",
"footCandlesRange": "100",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Sheet Metal Works",
"industryApplication": "Tin Plate Inspection",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Sheet Metal Works",
"industryApplication": "Galvanizing, Scribing",
"footCandlesRange": "100-200",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Stores",
"industryApplication": "Circulation Area Stockroom",
"footCandlesRange": "oct-30",
"recommendedLighting": "Recessed"
},
{
"industryType": "Stores",
"industryApplication": "Merchandising, Servicing",
"footCandlesRange": "30-100",
"recommendedLighting": "Recessed/Troffer"
},
{
"industryType": "Stores",
"industryApplication": "Merchandising, Self-Servicing",
"footCandlesRange": "200",
"recommendedLighting": "Recessed/Troffer"
},
{
"industryType": "Textile Mills",
"industryApplication": "Cotton Picking, Carding, Roving, Spinning",
"footCandlesRange": "50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Textile Mills",
"industryApplication": "Beaming & Slashing",
"footCandlesRange": "150",
"recommendedLighting": "High Bay"
},
{
"industryType": "Textile Mills",
"industryApplication": "Drawing",
"footCandlesRange": "200",
"recommendedLighting": "High Bay"
},
{
"industryType": "Textile Mills",
"industryApplication": "Others",
"footCandlesRange": "100",
"recommendedLighting": "High Bay"
},
{
"industryType": "Warehouse & Storage",
"industryApplication": "Inactive",
"footCandlesRange": "05-oct",
"recommendedLighting": "High Bay"
},
{
"industryType": "Warehouse & Storage",
"industryApplication": "Active Rough Bulky",
"footCandlesRange": "oct-20",
"recommendedLighting": "High Bay"
},
{
"industryType": "Warehouse & Storage",
"industryApplication": "Active Medium",
"footCandlesRange": "20",
"recommendedLighting": "High Bay"
},
{
"industryType": "Warehouse & Storage",
"industryApplication": "Active Fine",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay"
},
{
"industryType": "Welding",
"industryApplication": "General",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay/Flood"
},
{
"industryType": "Woodworking",
"industryApplication": "Sizing, planning, rough sanding, medium quality machine and bench work, gluing, veneering, cooperage",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay/Strip"
},
{
"industryType": "Woodworking",
"industryApplication": "Fine bench and machine work, fine sanding and finishing",
"footCandlesRange": "50-100",
"recommendedLighting": "High Bay/Strip"
},
{
"industryType": "Woodworking",
"industryApplication": "Rough sawing and bench work",
"footCandlesRange": "20-50",
"recommendedLighting": "High Bay/Strip"
}
]

View File

@ -0,0 +1,84 @@
<script setup lang="ts">
import iesData from './ies-lighting-data.json';
import { useFuzzySearch } from '@/composable/fuzzySearch';
import useDebouncedRef from '@/composable/debouncedref';
const data = iesData.map(i => ({ ...i, all: `${i.industryType} - ${i.industryApplication}` }));
const searchQuery = useDebouncedRef('', 500);
const { searchResult } = useFuzzySearch({
search: searchQuery,
data,
options: {
keys: ['all'],
threshold: 0.2,
isCaseSensitive: false,
minMatchCharLength: 3,
useExtendedSearch: true,
filterEmpty: false,
},
});
</script>
<template>
<div mx-auto max-w-2400px important:flex-1>
<div flex items-center gap-3>
<c-input-text
v-model:value="searchQuery"
placeholder="Search IES recommandation by industry or application"
mx-auto max-w-600px
>
<template #prefix>
<icon-mdi-search mr-6px color-black op-70 dark:color-white />
</template>
</c-input-text>
</div>
<n-p style="text-align: center">
Individual applications will determine exact foot-candle levels. Please refer to the <n-a href="https://www.ies.org/standards/lighting-library/" target="_blank">
IES Lighting Handbook
</n-a> for a more detailed evaluation
</n-p>
<div>
<div
v-if="searchResult.length === 0"
mt-4 text-center text-20px font-bold
>
No results
</div>
<div v-else>
<div mt-4 text-20px font-bold>
Search result
</div>
<n-table>
<thead>
<th>Industry</th>
<th>Application</th>
<th>Foot Candles</th>
<th>Lighting type</th>
</thead>
<tbody>
<tr v-for="(result, ix) in searchResult" :key="ix">
<td>
<input-copyable :value="result.industryType" />
</td>
<td>
<input-copyable :value="result.industryApplication" />
</td>
<td>
<input-copyable :value="result.footCandlesRange" />
</td>
<td>
<input-copyable :value="result.recommendedLighting" />
</td>
</tr>
</tbody>
</n-table>
</div>
</div>
</div>
</template>

View File

@ -0,0 +1,12 @@
import { BuildingLighthouse } from '@vicons/tabler';
import { defineTool } from '../tool';
export const tool = defineTool({
name: 'IES Lighting Guidelines',
path: '/ies-lighting-guidelines',
description: 'Search in the Illuminating Engineering Societys (IES) current illuminance recommendations.',
keywords: ['ies', 'illuminance', 'lighting', 'guideline'],
component: () => import('./ies-lighting-guidelines.vue'),
icon: BuildingLighthouse,
createdAt: new Date('2025-02-09'),
});

View File

@ -0,0 +1,11 @@
export const convertNoxToLux = (illuminance: number) => illuminance * 0.001;
export const convertLuxToNox = (illuminance: number) => illuminance * 1000;
export const convertFootCandlesToLux = (illuminance: number) => illuminance * 10.7639104167;
export const convertLuxToFootCandles = (illuminance: number) => illuminance * 0.09290304;
export const convertFlameToLux = (illuminance: number) => illuminance * 43.0556416668;
export const convertLuxToFlame = (illuminance: number) => illuminance * 0.02322576;
export const convertPhotToLux = (illuminance: number) => illuminance * 10000;
export const convertLuxToPhot = (illuminance: number) => illuminance * 0.0001;

View File

@ -0,0 +1,84 @@
<script setup lang="ts">
import _ from 'lodash';
import { convertFlameToLux, convertFootCandlesToLux, convertLuxToFlame, convertLuxToFootCandles, convertLuxToNox, convertLuxToPhot, convertNoxToLux, convertPhotToLux } from './illuminance-converter.service';
type IlluminanceScale = 'lux' | 'footcandles' | 'nox' | 'phot' | 'flame';
const units = reactive<
Record<
string | IlluminanceScale,
{ title: string; unit: string; ref: number; toLux: (v: number) => number; fromLux: (v: number) => number }
>
>({
lux: {
title: 'Lux',
unit: 'lx',
ref: 20000,
toLux: _.identity,
fromLux: _.identity,
},
footcandles: {
title: 'Foot-Candles',
unit: 'ft*c, fc',
ref: 0,
toLux: convertFootCandlesToLux,
fromLux: convertLuxToFootCandles,
},
nox: {
title: 'Nox',
unit: 'nox',
ref: 0,
toLux: convertNoxToLux,
fromLux: convertLuxToNox,
},
phot: {
title: 'Phot',
unit: 'ph',
ref: 0,
toLux: convertPhotToLux,
fromLux: convertLuxToPhot,
},
flame: {
title: 'Flame',
unit: 'flame',
ref: 0,
toLux: convertFlameToLux,
fromLux: convertLuxToFlame,
},
});
function update(key: IlluminanceScale) {
const { ref: value, toLux } = units[key];
const luxs = toLux(value) ?? 0;
_.chain(units)
.omit(key)
.forEach(({ fromLux }, index) => {
units[index].ref = Math.floor((fromLux(luxs) ?? 0) * 1000000) / 1000000;
})
.value();
}
update('lux');
</script>
<template>
<div>
<n-input-group v-for="[key, { title, unit }] in Object.entries(units)" :key="key" mb-3 w-full>
<n-input-group-label style="width: 100px">
{{ title }}
</n-input-group-label>
<n-input-number
v-model:value="units[key].ref"
style="flex: 1"
@update:value="() => update(key as IlluminanceScale)"
/>
<n-input-group-label style="width: 75px">
{{ unit }}
</n-input-group-label>
</n-input-group>
</div>
</template>

View File

@ -0,0 +1,12 @@
import { Brightness2 } from '@vicons/tabler';
import { defineTool } from '../tool';
export const tool = defineTool({
name: 'Illuminance Converter',
path: '/illuminance-converter',
description: 'Illuminance units converter (Lux, Foot Candles, Nox, Phot, Flame)',
keywords: ['illuminance', 'converter', 'lux', 'lx', 'foot', 'candles', 'fc', 'flame', 'nox', 'phot'],
component: () => import('./illuminance-converter.vue'),
icon: Brightness2,
createdAt: new Date('2025-02-09'),
});

View File

@ -1,6 +1,8 @@
import { tool as base64FileConverter } from './base64-file-converter';
import { tool as base64StringConverter } from './base64-string-converter';
import { tool as basicAuthGenerator } from './basic-auth-generator';
import { tool as iesLightingGuidelines } from './ies-lighting-guidelines';
import { tool as illuminanceConverter } from './illuminance-converter';
import { tool as pdfSignatureChecker } from './pdf-signature-checker';
import { tool as numeronymGenerator } from './numeronym-generator';
import { tool as macAddressGenerator } from './mac-address-generator';
@ -151,7 +153,13 @@ export const toolsByCategory: ToolCategory[] = [
},
{
name: 'Measurement',
components: [chronometer, temperatureConverter, benchmarkBuilder],
components: [
chronometer,
temperatureConverter,
benchmarkBuilder,
iesLightingGuidelines,
illuminanceConverter,
],
},
{
name: 'Text',