boreal-ui 0.0.26 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/{Footer-CcSbV-IP.js → Footer-CPg_4j5r.js} +2 -2
- package/dist/core/{Footer-CcSbV-IP.js.map → Footer-CPg_4j5r.js.map} +1 -1
- package/dist/core/{Footer-C0xaMboS.cjs → Footer-kLL_3Qc-.cjs} +2 -2
- package/dist/core/{Footer-C0xaMboS.cjs.map → Footer-kLL_3Qc-.cjs.map} +1 -1
- package/dist/core/Footer.cjs.js +1 -1
- package/dist/core/Footer.js +1 -1
- package/dist/{next/ThemeContext-Bo0vLczy.js → core/ThemeContext-B-z-faEj.js} +30 -30
- package/dist/core/ThemeContext-B-z-faEj.js.map +1 -0
- package/dist/core/{ThemeContext-CtZXUeeU.cjs → ThemeContext-CtNdJ7LK.cjs} +29 -29
- package/dist/core/ThemeContext-CtNdJ7LK.cjs.map +1 -0
- package/dist/core/ThemeProvider.cjs.js +1 -1
- package/dist/core/ThemeProvider.js +1 -1
- package/dist/core/index.cjs.js +2 -2
- package/dist/core/index.js +2 -2
- package/dist/next/{Avatar-B3eTb_Xz.js → Avatar-CKByQz4V.js} +3 -3
- package/dist/next/{Avatar-B3eTb_Xz.js.map → Avatar-CKByQz4V.js.map} +1 -1
- package/dist/next/{Avatar-BX8mh_3b.cjs → Avatar-Cd_TqEqJ.cjs} +3 -3
- package/dist/next/{Avatar-BX8mh_3b.cjs.map → Avatar-Cd_TqEqJ.cjs.map} +1 -1
- package/dist/next/Avatar.cjs.js +1 -1
- package/dist/next/Avatar.js +1 -1
- package/dist/next/{Breadcrumbs-BM-yj_kq.js → Breadcrumbs-CsQGqIFq.js} +3 -3
- package/dist/next/{Breadcrumbs-BM-yj_kq.js.map → Breadcrumbs-CsQGqIFq.js.map} +1 -1
- package/dist/next/{Breadcrumbs-7MNPobUi.cjs → Breadcrumbs-pw9Ow6LT.cjs} +3 -3
- package/dist/next/{Breadcrumbs-7MNPobUi.cjs.map → Breadcrumbs-pw9Ow6LT.cjs.map} +1 -1
- package/dist/next/Breadcrumbs.cjs.js +1 -1
- package/dist/next/Breadcrumbs.js +1 -1
- package/dist/next/{Button-G1PFBSqU.cjs → Button-CksDHAGT.cjs} +2 -2
- package/dist/next/{Button-G1PFBSqU.cjs.map → Button-CksDHAGT.cjs.map} +1 -1
- package/dist/next/{Button-ClWB5gZW.js → Button-DUYFGciR.js} +2 -2
- package/dist/next/{Button-ClWB5gZW.js.map → Button-DUYFGciR.js.map} +1 -1
- package/dist/next/Button.cjs.js +1 -1
- package/dist/next/Button.js +1 -1
- package/dist/next/{Card-B_USybKk.js → Card-DFKVGnWo.js} +4 -4
- package/dist/next/{Card-B_USybKk.js.map → Card-DFKVGnWo.js.map} +1 -1
- package/dist/next/{Card-Bg9EknRD.cjs → Card-HHvgocCd.cjs} +4 -4
- package/dist/next/{Card-Bg9EknRD.cjs.map → Card-HHvgocCd.cjs.map} +1 -1
- package/dist/next/Card.cjs.js +1 -1
- package/dist/next/Card.js +1 -1
- package/dist/next/{Chip-DoRB7LBO.cjs → Chip-CPe_ATTn.cjs} +2 -2
- package/dist/next/{Chip-DoRB7LBO.cjs.map → Chip-CPe_ATTn.cjs.map} +1 -1
- package/dist/next/{Chip-CMP-naRw.js → Chip-DngJ3Nsm.js} +2 -2
- package/dist/next/{Chip-CMP-naRw.js.map → Chip-DngJ3Nsm.js.map} +1 -1
- package/dist/next/Chip.cjs.js +1 -1
- package/dist/next/Chip.js +1 -1
- package/dist/next/{CommandPalette-DjR2pE5m.cjs → CommandPalette-BExinZ-y.cjs} +2 -2
- package/dist/next/{CommandPalette-DjR2pE5m.cjs.map → CommandPalette-BExinZ-y.cjs.map} +1 -1
- package/dist/next/{CommandPalette-BaJ9KSob.js → CommandPalette-BKamGmgu.js} +2 -2
- package/dist/next/{CommandPalette-BaJ9KSob.js.map → CommandPalette-BKamGmgu.js.map} +1 -1
- package/dist/next/CommandPalette.cjs.js +1 -1
- package/dist/next/CommandPalette.js +1 -1
- package/dist/next/{Dropdown-CzQhdSD7.js → Dropdown-B2xAwrlF.js} +2 -2
- package/dist/next/{Dropdown-CzQhdSD7.js.map → Dropdown-B2xAwrlF.js.map} +1 -1
- package/dist/next/{Dropdown-BHd5BuCB.cjs → Dropdown-COJxJqzC.cjs} +2 -2
- package/dist/next/{Dropdown-BHd5BuCB.cjs.map → Dropdown-COJxJqzC.cjs.map} +1 -1
- package/dist/next/Dropdown.cjs.js +1 -1
- package/dist/next/Dropdown.js +1 -1
- package/dist/next/{EmptyState-BbuuFZCb.js → EmptyState-DeYWnFaJ.js} +2 -2
- package/dist/next/{EmptyState-BbuuFZCb.js.map → EmptyState-DeYWnFaJ.js.map} +1 -1
- package/dist/next/{EmptyState-edgOQ6GW.cjs → EmptyState-DepuL2N8.cjs} +2 -2
- package/dist/next/{EmptyState-edgOQ6GW.cjs.map → EmptyState-DepuL2N8.cjs.map} +1 -1
- package/dist/next/EmptyState.cjs.js +1 -1
- package/dist/next/EmptyState.js +1 -1
- package/dist/next/{FileUpload-D7qdf0y5.js → FileUpload-C91Pd8t7.js} +3 -3
- package/dist/next/{FileUpload-D7qdf0y5.js.map → FileUpload-C91Pd8t7.js.map} +1 -1
- package/dist/next/{FileUpload-BeTvsLw-.cjs → FileUpload-tiwkr7n-.cjs} +3 -3
- package/dist/next/{FileUpload-BeTvsLw-.cjs.map → FileUpload-tiwkr7n-.cjs.map} +1 -1
- package/dist/next/FileUpload.cjs.js +1 -1
- package/dist/next/FileUpload.js +1 -1
- package/dist/next/{Footer-CQhcAscy.cjs → Footer-BkA5H1MS.cjs} +5 -5
- package/dist/next/{Footer-CQhcAscy.cjs.map → Footer-BkA5H1MS.cjs.map} +1 -1
- package/dist/next/{Footer-Rshwlhwo.js → Footer-BvTet1LG.js} +5 -5
- package/dist/next/{Footer-Rshwlhwo.js.map → Footer-BvTet1LG.js.map} +1 -1
- package/dist/next/Footer.cjs.js +1 -1
- package/dist/next/Footer.js +1 -1
- package/dist/next/{IconButton-Dk8EDf4Z.js → IconButton-BjZZm2hJ.js} +2 -2
- package/dist/next/{IconButton-Dk8EDf4Z.js.map → IconButton-BjZZm2hJ.js.map} +1 -1
- package/dist/next/{IconButton-SZdNlqIZ.cjs → IconButton-DvfiteNA.cjs} +2 -2
- package/dist/next/{IconButton-SZdNlqIZ.cjs.map → IconButton-DvfiteNA.cjs.map} +1 -1
- package/dist/next/IconButton.cjs.js +1 -1
- package/dist/next/IconButton.js +1 -1
- package/dist/next/{MessagePopUp-D6QdsrUO.cjs → MessagePopUp-8Jk_jkt_.cjs} +3 -3
- package/dist/next/{MessagePopUp-D6QdsrUO.cjs.map → MessagePopUp-8Jk_jkt_.cjs.map} +1 -1
- package/dist/next/{MessagePopUp-DEbsvN19.js → MessagePopUp-DCP7uPnZ.js} +3 -3
- package/dist/next/{MessagePopUp-DEbsvN19.js.map → MessagePopUp-DCP7uPnZ.js.map} +1 -1
- package/dist/next/MessagePopUp.cjs.js +1 -1
- package/dist/next/MessagePopUp.js +1 -1
- package/dist/next/{Modal-BmAYw3X9.cjs → Modal-C2aLpohd.cjs} +2 -2
- package/dist/next/{Modal-BmAYw3X9.cjs.map → Modal-C2aLpohd.cjs.map} +1 -1
- package/dist/next/{Modal-BOaNai97.js → Modal-DFnJUiOY.js} +2 -2
- package/dist/next/{Modal-BOaNai97.js.map → Modal-DFnJUiOY.js.map} +1 -1
- package/dist/next/Modal.cjs.js +1 -1
- package/dist/next/Modal.js +1 -1
- package/dist/next/{NavBar-CO4v6_28.cjs → NavBar-CqPh60CY.cjs} +3 -3
- package/dist/next/{NavBar-CO4v6_28.cjs.map → NavBar-CqPh60CY.cjs.map} +1 -1
- package/dist/next/{NavBar-CKo-nom2.js → NavBar-CtpkmbXJ.js} +3 -3
- package/dist/next/{NavBar-CKo-nom2.js.map → NavBar-CtpkmbXJ.js.map} +1 -1
- package/dist/next/NavBar.cjs.js +1 -1
- package/dist/next/NavBar.js +1 -1
- package/dist/next/{NotificationCenter-BIuJj-PB.cjs → NotificationCenter-ChaO0Xu5.cjs} +3 -3
- package/dist/next/{NotificationCenter-BIuJj-PB.cjs.map → NotificationCenter-ChaO0Xu5.cjs.map} +1 -1
- package/dist/next/{NotificationCenter-DCE8DuOm.js → NotificationCenter-ySBsv_F4.js} +3 -3
- package/dist/next/{NotificationCenter-DCE8DuOm.js.map → NotificationCenter-ySBsv_F4.js.map} +1 -1
- package/dist/next/NotificationCenter.cjs.js +1 -1
- package/dist/next/NotificationCenter.js +1 -1
- package/dist/next/{Pager-DiZtB-Df.js → Pager-BYY7KOKU.js} +3 -3
- package/dist/next/{Pager-DiZtB-Df.js.map → Pager-BYY7KOKU.js.map} +1 -1
- package/dist/next/{Pager-BADOS4cm.cjs → Pager-Bbbq04I_.cjs} +3 -3
- package/dist/next/{Pager-BADOS4cm.cjs.map → Pager-Bbbq04I_.cjs.map} +1 -1
- package/dist/next/Pager.cjs.js +1 -1
- package/dist/next/Pager.js +1 -1
- package/dist/next/{Sidebar-R1NSvWHu.js → Sidebar-CB2Lm-J-.js} +3 -3
- package/dist/next/{Sidebar-R1NSvWHu.js.map → Sidebar-CB2Lm-J-.js.map} +1 -1
- package/dist/next/{Sidebar-C_zefcbg.cjs → Sidebar-hBHcsbrg.cjs} +3 -3
- package/dist/next/{Sidebar-C_zefcbg.cjs.map → Sidebar-hBHcsbrg.cjs.map} +1 -1
- package/dist/next/Sidebar.cjs.js +1 -1
- package/dist/next/Sidebar.js +1 -1
- package/dist/next/{Stepper-C_qUO4sd.cjs → Stepper-DOdGXz4_.cjs} +2 -2
- package/dist/next/{Stepper-C_qUO4sd.cjs.map → Stepper-DOdGXz4_.cjs.map} +1 -1
- package/dist/next/{Stepper-De9foUOK.js → Stepper-tDpx2gnl.js} +2 -2
- package/dist/next/{Stepper-De9foUOK.js.map → Stepper-tDpx2gnl.js.map} +1 -1
- package/dist/next/Stepper.cjs.js +1 -1
- package/dist/next/Stepper.js +1 -1
- package/dist/next/{TagInput-B_VOR8-r.js → TagInput-BqNnh1L9.js} +3 -3
- package/dist/next/{TagInput-B_VOR8-r.js.map → TagInput-BqNnh1L9.js.map} +1 -1
- package/dist/next/{TagInput-BVng78ON.cjs → TagInput-DUD9_g1b.cjs} +3 -3
- package/dist/next/{TagInput-BVng78ON.cjs.map → TagInput-DUD9_g1b.cjs.map} +1 -1
- package/dist/next/TagInput.cjs.js +1 -1
- package/dist/next/TagInput.js +1 -1
- package/dist/next/{TextInput-B00XEBiM.js → TextInput-BQPtN14M.js} +2 -2
- package/dist/next/{TextInput-B00XEBiM.js.map → TextInput-BQPtN14M.js.map} +1 -1
- package/dist/next/{TextInput-D0rdRASC.cjs → TextInput-k8U0_lSm.cjs} +2 -2
- package/dist/next/{TextInput-D0rdRASC.cjs.map → TextInput-k8U0_lSm.cjs.map} +1 -1
- package/dist/next/TextInput.cjs.js +1 -1
- package/dist/next/TextInput.js +1 -1
- package/dist/{core/ThemeContext-Bo0vLczy.js → next/ThemeContext-B-z-faEj.js} +30 -30
- package/dist/next/ThemeContext-B-z-faEj.js.map +1 -0
- package/dist/next/{ThemeContext-BNR3_OIq.cjs → ThemeContext-BHzkqvlv.cjs} +29 -29
- package/dist/next/ThemeContext-BHzkqvlv.cjs.map +1 -0
- package/dist/next/ThemeInitScript-CIctCIv1.js +385 -0
- package/dist/next/ThemeInitScript-CIctCIv1.js.map +1 -0
- package/dist/next/ThemeInitScript-DqO2SVvW.cjs +384 -0
- package/dist/next/ThemeInitScript-DqO2SVvW.cjs.map +1 -0
- package/dist/next/ThemeInitScript.cjs.js +4 -0
- package/dist/next/ThemeInitScript.cjs.js.map +1 -0
- package/dist/next/ThemeInitScript.js +5 -0
- package/dist/next/ThemeInitScript.js.map +1 -0
- package/dist/next/ThemeProvider.cjs.js +1 -1
- package/dist/next/ThemeProvider.js +1 -1
- package/dist/next/{Toolbar-DleUmVkR.cjs → Toolbar-Bu_meSGb.cjs} +2 -2
- package/dist/next/{Toolbar-DleUmVkR.cjs.map → Toolbar-Bu_meSGb.cjs.map} +1 -1
- package/dist/next/{Toolbar-Dme9QqMY.js → Toolbar-Dd6pf5wP.js} +2 -2
- package/dist/next/{Toolbar-Dme9QqMY.js.map → Toolbar-Dd6pf5wP.js.map} +1 -1
- package/dist/next/Toolbar.cjs.js +1 -1
- package/dist/next/Toolbar.js +1 -1
- package/dist/next/head-manager-context.shared-runtime-7_8Oqhy0.js +30 -0
- package/dist/next/head-manager-context.shared-runtime-7_8Oqhy0.js.map +1 -0
- package/dist/next/head-manager-context.shared-runtime-Cgj8ROpJ.cjs +29 -0
- package/dist/next/head-manager-context.shared-runtime-Cgj8ROpJ.cjs.map +1 -0
- package/dist/next/{image-VX9Ty9NQ.cjs → image-MEZ6sESv.cjs} +13 -35
- package/dist/next/image-MEZ6sESv.cjs.map +1 -0
- package/dist/next/{image-CEz9QtOW.js → image-h6PDRhrT.js} +4 -26
- package/dist/next/image-h6PDRhrT.js.map +1 -0
- package/dist/next/index.cjs.js +24 -22
- package/dist/next/index.cjs.js.map +1 -1
- package/dist/next/index.js +38 -36
- package/dist/next/index.js.map +1 -1
- package/dist/next/{link-Bik5xH00.js → link-BY93bHEw.js} +9 -92
- package/dist/next/link-BY93bHEw.js.map +1 -0
- package/dist/next/{link-hxAaLm0Q.cjs → link-Dyf-9ObB.cjs} +10 -93
- package/dist/next/link-Dyf-9ObB.cjs.map +1 -0
- package/dist/next/{navigation-m012syo9.cjs → navigation-CcfNESvg.cjs} +5 -4
- package/dist/next/{navigation-m012syo9.cjs.map → navigation-CcfNESvg.cjs.map} +1 -1
- package/dist/next/{navigation-DTwYCgCL.js → navigation-ChnNGxEG.js} +3 -2
- package/dist/next/{navigation-DTwYCgCL.js.map → navigation-ChnNGxEG.js.map} +1 -1
- package/dist/next/request-idle-callback-B3JHNaij.js +88 -0
- package/dist/next/request-idle-callback-B3JHNaij.js.map +1 -0
- package/dist/next/request-idle-callback-BIq6SiN0.cjs +87 -0
- package/dist/next/request-idle-callback-BIq6SiN0.cjs.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/context/ThemeContext.d.ts +3 -1
- package/dist/types/context/ThemeContext.d.ts.map +1 -1
- package/dist/types/context/ThemeContext.types.d.ts +6 -0
- package/dist/types/context/ThemeContext.types.d.ts.map +1 -1
- package/dist/types/context/ThemeInitScript.d.ts +3 -0
- package/dist/types/context/ThemeInitScript.d.ts.map +1 -0
- package/dist/types/index.next.d.ts +1 -0
- package/dist/types/index.next.d.ts.map +1 -1
- package/package.json +6 -1
- package/dist/core/ThemeContext-Bo0vLczy.js.map +0 -1
- package/dist/core/ThemeContext-CtZXUeeU.cjs.map +0 -1
- package/dist/next/ThemeContext-BNR3_OIq.cjs.map +0 -1
- package/dist/next/ThemeContext-Bo0vLczy.js.map +0 -1
- package/dist/next/image-CEz9QtOW.js.map +0 -1
- package/dist/next/image-VX9Ty9NQ.cjs.map +0 -1
- package/dist/next/link-Bik5xH00.js.map +0 -1
- package/dist/next/link-hxAaLm0Q.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagInput-BVng78ON.cjs","sources":["../../src/components/TagInput/TagInputBase.tsx","../../src/components/TagInput/next/TagInput.tsx"],"sourcesContent":["import React, {\r\n useId,\r\n useState,\r\n KeyboardEvent,\r\n useMemo,\r\n useEffect,\r\n} from \"react\";\r\nimport { TagInputProps } from \"./Taginput.types\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultSize,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst TagInputBase: React.FC<\r\n TagInputProps & {\r\n classMap: Record<string, string>;\r\n IconButton: React.FC<any>;\r\n TextInput: React.FC<any>;\r\n }\r\n> = ({\r\n tags = [],\r\n onChange,\r\n fetchSuggestions,\r\n debounceMs = 300,\r\n placeholder = \"Add a tag...\",\r\n theme = getDefaultTheme(),\r\n state = \"\",\r\n size = getDefaultSize(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n \"data-testid\": testId = \"tag-input\",\r\n ariaDescription = \"Type a tag and press Enter or comma to add. Existing tags can be removed using the remove button next to each tag.\",\r\n classMap,\r\n IconButton,\r\n TextInput,\r\n}) => {\r\n const inputId = useId();\r\n const descId = `${inputId}-desc`;\r\n const labelId = `${inputId}-label`;\r\n\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [tagList, setTagList] = useState<string[]>(tags);\r\n const [lastAction, setLastAction] = useState<string>(\"\");\r\n\r\n const [suggestions, setSuggestions] = useState<string[]>([]);\r\n const [debounceTimeout, setDebounceTimeout] = useState<NodeJS.Timeout | null>(\r\n null\r\n );\r\n\r\n useEffect(() => {\r\n if (!fetchSuggestions || !inputValue.trim()) {\r\n setSuggestions([]);\r\n return;\r\n }\r\n\r\n if (debounceTimeout) {\r\n clearTimeout(debounceTimeout);\r\n }\r\n\r\n const timeout = setTimeout(async () => {\r\n try {\r\n const result = await fetchSuggestions(inputValue);\r\n setSuggestions(result);\r\n } catch (error) {\r\n console.error(\"Failed to fetch tag suggestions:\", error);\r\n }\r\n }, debounceMs);\r\n\r\n setDebounceTimeout(timeout);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [inputValue, fetchSuggestions, debounceMs]);\r\n\r\n const handleAddTag = (event: KeyboardEvent<HTMLInputElement>) => {\r\n if (\r\n (event.key === \"Enter\" || event.key === \",\") &&\r\n inputValue.trim() !== \"\"\r\n ) {\r\n event.preventDefault();\r\n const newTag = inputValue.trim();\r\n if (!tagList.includes(newTag)) {\r\n const updated = [...tagList, newTag];\r\n setTagList(updated);\r\n onChange?.(updated);\r\n setLastAction(`Added tag ${newTag}`);\r\n }\r\n setInputValue(\"\");\r\n }\r\n };\r\n\r\n const handleRemoveTag = (tag: string) => {\r\n const updated = tagList.filter((t) => t !== tag);\r\n setTagList(updated);\r\n onChange?.(updated);\r\n setLastAction(`Removed tag ${tag}`);\r\n };\r\n\r\n const wrapperClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.tagInput,\r\n classMap[theme],\r\n classMap[state],\r\n classMap[size]\r\n ),\r\n [classMap, theme, state, size]\r\n );\r\n\r\n const tagClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.tag,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`]\r\n ),\r\n [classMap]\r\n );\r\n\r\n return (\r\n <div\r\n className={wrapperClass}\r\n role=\"group\"\r\n aria-labelledby={labelId}\r\n aria-describedby={descId}\r\n data-testid={testId}\r\n >\r\n <label id={labelId} className=\"sr_only\">\r\n Tag Input\r\n </label>\r\n <div\r\n id={descId}\r\n className=\"sr_only\"\r\n data-testid={`${testId}-description`}\r\n >\r\n {ariaDescription}\r\n </div>\r\n\r\n <ul\r\n className={classMap.tagContainer}\r\n aria-live=\"polite\"\r\n aria-relevant=\"additions removals\"\r\n data-testid={`${testId}-list`}\r\n >\r\n {tagList.map((tag, index) => (\r\n <li\r\n key={tag}\r\n className={tagClass}\r\n role=\"listitem\"\r\n data-testid={`${testId}-tag-${index}`}\r\n >\r\n <span className={classMap.tagLabel}>{tag}</span>\r\n <IconButton\r\n type=\"button\"\r\n aria-label={`Remove tag ${tag}`}\r\n className={classMap.removeButton}\r\n onClick={() => handleRemoveTag(tag)}\r\n data-testid={`${testId}-remove-${index}`}\r\n icon={CloseIcon}\r\n size=\"small\"\r\n theme=\"clear\"\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <div className={classMap.inputWrapper}>\r\n <TextInput\r\n id={inputId}\r\n type=\"text\"\r\n theme={theme}\r\n state={state}\r\n rounding={rounding}\r\n shadow={shadow}\r\n className={classMap.input}\r\n value={inputValue}\r\n placeholder={tagList.length === 0 ? placeholder : \"\"}\r\n onChange={(e: { target: { value: string } }) =>\r\n setInputValue(e.target.value)\r\n }\r\n onKeyDown={handleAddTag}\r\n aria-label=\"Add new tag\"\r\n aria-describedby={descId}\r\n data-testid={`${testId}-input`}\r\n />\r\n </div>\r\n {suggestions.length > 0 && (\r\n <ul\r\n className={classMap.suggestionList}\r\n role=\"listbox\"\r\n id={`${inputId}-listbox`}\r\n title=\"suggestions\"\r\n data-testid={`${testId}-suggestions`}\r\n >\r\n {suggestions.map((suggestion, index) => (\r\n <li\r\n key={index}\r\n className={classMap.suggestionItem}\r\n onClick={() => {\r\n if (!tagList.includes(suggestion)) {\r\n const updated = [...tagList, suggestion];\r\n setTagList(updated);\r\n onChange?.(updated);\r\n setLastAction(`Added tag ${suggestion}`);\r\n }\r\n setInputValue(\"\");\r\n setSuggestions([]);\r\n }}\r\n role=\"option\"\r\n data-testid={`${testId}-suggestion-${index}`}\r\n >\r\n {suggestion}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n\r\n <div aria-live=\"polite\" className=\"sr_only\">\r\n {lastAction}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TagInputBase;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport styles from \"./Taginput.module.scss\";\r\nimport { IconButton, TextInput } from \"@/index.next\";\r\nimport TagInputBase from \"../TagInputBase\";\r\nimport { TagInputProps } from \"../Taginput.types\";\r\n\r\nconst TagInput: React.FC<TagInputProps> = (props) => {\r\n return (\r\n <TagInputBase\r\n {...props}\r\n classMap={styles}\r\n IconButton={IconButton}\r\n TextInput={TextInput}\r\n />\r\n );\r\n};\r\n\r\nexport default TagInput;\r\n"],"names":["getDefaultTheme","getDefaultSize","getDefaultRounding","getDefaultShadow","IconButton","TextInput","useId","useState","useEffect","error","tag","useMemo","combineClassNames","capitalize","jsxs","jsx","CloseIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TagInput-DUD9_g1b.cjs","sources":["../../src/components/TagInput/TagInputBase.tsx","../../src/components/TagInput/next/TagInput.tsx"],"sourcesContent":["import React, {\r\n useId,\r\n useState,\r\n KeyboardEvent,\r\n useMemo,\r\n useEffect,\r\n} from \"react\";\r\nimport { TagInputProps } from \"./Taginput.types\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultSize,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst TagInputBase: React.FC<\r\n TagInputProps & {\r\n classMap: Record<string, string>;\r\n IconButton: React.FC<any>;\r\n TextInput: React.FC<any>;\r\n }\r\n> = ({\r\n tags = [],\r\n onChange,\r\n fetchSuggestions,\r\n debounceMs = 300,\r\n placeholder = \"Add a tag...\",\r\n theme = getDefaultTheme(),\r\n state = \"\",\r\n size = getDefaultSize(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n \"data-testid\": testId = \"tag-input\",\r\n ariaDescription = \"Type a tag and press Enter or comma to add. Existing tags can be removed using the remove button next to each tag.\",\r\n classMap,\r\n IconButton,\r\n TextInput,\r\n}) => {\r\n const inputId = useId();\r\n const descId = `${inputId}-desc`;\r\n const labelId = `${inputId}-label`;\r\n\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [tagList, setTagList] = useState<string[]>(tags);\r\n const [lastAction, setLastAction] = useState<string>(\"\");\r\n\r\n const [suggestions, setSuggestions] = useState<string[]>([]);\r\n const [debounceTimeout, setDebounceTimeout] = useState<NodeJS.Timeout | null>(\r\n null\r\n );\r\n\r\n useEffect(() => {\r\n if (!fetchSuggestions || !inputValue.trim()) {\r\n setSuggestions([]);\r\n return;\r\n }\r\n\r\n if (debounceTimeout) {\r\n clearTimeout(debounceTimeout);\r\n }\r\n\r\n const timeout = setTimeout(async () => {\r\n try {\r\n const result = await fetchSuggestions(inputValue);\r\n setSuggestions(result);\r\n } catch (error) {\r\n console.error(\"Failed to fetch tag suggestions:\", error);\r\n }\r\n }, debounceMs);\r\n\r\n setDebounceTimeout(timeout);\r\n\r\n return () => clearTimeout(timeout);\r\n }, [inputValue, fetchSuggestions, debounceMs]);\r\n\r\n const handleAddTag = (event: KeyboardEvent<HTMLInputElement>) => {\r\n if (\r\n (event.key === \"Enter\" || event.key === \",\") &&\r\n inputValue.trim() !== \"\"\r\n ) {\r\n event.preventDefault();\r\n const newTag = inputValue.trim();\r\n if (!tagList.includes(newTag)) {\r\n const updated = [...tagList, newTag];\r\n setTagList(updated);\r\n onChange?.(updated);\r\n setLastAction(`Added tag ${newTag}`);\r\n }\r\n setInputValue(\"\");\r\n }\r\n };\r\n\r\n const handleRemoveTag = (tag: string) => {\r\n const updated = tagList.filter((t) => t !== tag);\r\n setTagList(updated);\r\n onChange?.(updated);\r\n setLastAction(`Removed tag ${tag}`);\r\n };\r\n\r\n const wrapperClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.tagInput,\r\n classMap[theme],\r\n classMap[state],\r\n classMap[size]\r\n ),\r\n [classMap, theme, state, size]\r\n );\r\n\r\n const tagClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.tag,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`]\r\n ),\r\n [classMap]\r\n );\r\n\r\n return (\r\n <div\r\n className={wrapperClass}\r\n role=\"group\"\r\n aria-labelledby={labelId}\r\n aria-describedby={descId}\r\n data-testid={testId}\r\n >\r\n <label id={labelId} className=\"sr_only\">\r\n Tag Input\r\n </label>\r\n <div\r\n id={descId}\r\n className=\"sr_only\"\r\n data-testid={`${testId}-description`}\r\n >\r\n {ariaDescription}\r\n </div>\r\n\r\n <ul\r\n className={classMap.tagContainer}\r\n aria-live=\"polite\"\r\n aria-relevant=\"additions removals\"\r\n data-testid={`${testId}-list`}\r\n >\r\n {tagList.map((tag, index) => (\r\n <li\r\n key={tag}\r\n className={tagClass}\r\n role=\"listitem\"\r\n data-testid={`${testId}-tag-${index}`}\r\n >\r\n <span className={classMap.tagLabel}>{tag}</span>\r\n <IconButton\r\n type=\"button\"\r\n aria-label={`Remove tag ${tag}`}\r\n className={classMap.removeButton}\r\n onClick={() => handleRemoveTag(tag)}\r\n data-testid={`${testId}-remove-${index}`}\r\n icon={CloseIcon}\r\n size=\"small\"\r\n theme=\"clear\"\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <div className={classMap.inputWrapper}>\r\n <TextInput\r\n id={inputId}\r\n type=\"text\"\r\n theme={theme}\r\n state={state}\r\n rounding={rounding}\r\n shadow={shadow}\r\n className={classMap.input}\r\n value={inputValue}\r\n placeholder={tagList.length === 0 ? placeholder : \"\"}\r\n onChange={(e: { target: { value: string } }) =>\r\n setInputValue(e.target.value)\r\n }\r\n onKeyDown={handleAddTag}\r\n aria-label=\"Add new tag\"\r\n aria-describedby={descId}\r\n data-testid={`${testId}-input`}\r\n />\r\n </div>\r\n {suggestions.length > 0 && (\r\n <ul\r\n className={classMap.suggestionList}\r\n role=\"listbox\"\r\n id={`${inputId}-listbox`}\r\n title=\"suggestions\"\r\n data-testid={`${testId}-suggestions`}\r\n >\r\n {suggestions.map((suggestion, index) => (\r\n <li\r\n key={index}\r\n className={classMap.suggestionItem}\r\n onClick={() => {\r\n if (!tagList.includes(suggestion)) {\r\n const updated = [...tagList, suggestion];\r\n setTagList(updated);\r\n onChange?.(updated);\r\n setLastAction(`Added tag ${suggestion}`);\r\n }\r\n setInputValue(\"\");\r\n setSuggestions([]);\r\n }}\r\n role=\"option\"\r\n data-testid={`${testId}-suggestion-${index}`}\r\n >\r\n {suggestion}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n\r\n <div aria-live=\"polite\" className=\"sr_only\">\r\n {lastAction}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TagInputBase;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport styles from \"./Taginput.module.scss\";\r\nimport { IconButton, TextInput } from \"@/index.next\";\r\nimport TagInputBase from \"../TagInputBase\";\r\nimport { TagInputProps } from \"../Taginput.types\";\r\n\r\nconst TagInput: React.FC<TagInputProps> = (props) => {\r\n return (\r\n <TagInputBase\r\n {...props}\r\n classMap={styles}\r\n IconButton={IconButton}\r\n TextInput={TextInput}\r\n />\r\n );\r\n};\r\n\r\nexport default TagInput;\r\n"],"names":["getDefaultTheme","getDefaultSize","getDefaultRounding","getDefaultShadow","IconButton","TextInput","useId","useState","useEffect","error","tag","useMemo","combineClassNames","capitalize","jsxs","jsx","CloseIcon"],"mappings":"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"}
|
package/dist/next/TagInput.js
CHANGED
|
@@ -3,7 +3,7 @@ import { forwardRef, useState, useId, useMemo } from "react";
|
|
|
3
3
|
import { c as combineClassNames } from "./classNames-AS8QjFq7.js";
|
|
4
4
|
import { c as capitalize } from "./capitalize-C0TSQSPh.js";
|
|
5
5
|
import { a as getDefaultRounding, b as getDefaultShadow, d as getDefaultTheme } from "./boreal-style-config-BILmxkZG.js";
|
|
6
|
-
import { I as IconButton } from "./IconButton-
|
|
6
|
+
import { I as IconButton } from "./IconButton-BjZZm2hJ.js";
|
|
7
7
|
const EyeIcon = (props) => /* @__PURE__ */ jsxs(
|
|
8
8
|
"svg",
|
|
9
9
|
{
|
|
@@ -279,4 +279,4 @@ TextInput.displayName = "TextInput";
|
|
|
279
279
|
export {
|
|
280
280
|
TextInput as T
|
|
281
281
|
};
|
|
282
|
-
//# sourceMappingURL=TextInput-
|
|
282
|
+
//# sourceMappingURL=TextInput-BQPtN14M.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput-
|
|
1
|
+
{"version":3,"file":"TextInput-BQPtN14M.js","sources":["../../src/Icons/EyeIcon.tsx","../../src/Icons/EyeSlashIcon.tsx","../../src/components/TextInput/TextInputBase.tsx","../../src/components/TextInput/next/TextInput.tsx"],"sourcesContent":["const EyeIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\r\n <svg\r\n width=\"24px\"\r\n height=\"24px\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n color=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M3 13C6.6 5 17.4 5 21 13\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M12 17C10.3431 17 9 15.6569 9 14C9 12.3431 10.3431 11 12 11C13.6569 11 15 12.3431 15 14C15 15.6569 13.6569 17 12 17Z\"\r\n fill=\"currentColor\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n </svg>\r\n);\r\n\r\nexport default EyeIcon;\r\n","const EyeSlashIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\r\n <svg\r\n width=\"24px\"\r\n height=\"24px\"\r\n viewBox=\"0 0 24 24\"\r\n strokeWidth=\"1.5\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n color=\"currentColor\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M19.5 16L17.0248 12.6038\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M12 17.5V14\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M4.5 16L6.96895 12.6124\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M3 8C6.6 16 17.4 16 21 8\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n </svg>\r\n);\r\n\r\nexport default EyeSlashIcon;\r\n","import {\r\n forwardRef,\r\n useState,\r\n useId,\r\n InputHTMLAttributes,\r\n useMemo,\r\n} from \"react\";\r\nimport { EyeIcon, EyeSlashIcon } from \"../../Icons\";\r\nimport { TextInputProps } from \"./TextInput.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst TextInputBase = forwardRef<\r\n HTMLInputElement,\r\n TextInputProps & {\r\n classMap: Record<string, string>;\r\n IconButton: React.FC<any>;\r\n }\r\n>(\r\n (\r\n {\r\n icon: Icon,\r\n placeholder = \"Enter text\",\r\n password = false,\r\n readOnly = false,\r\n ariaLabel,\r\n ariaDescription,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n disabled = false,\r\n autocomplete = false,\r\n \"data-testid\": testId = \"text-input\",\r\n classMap,\r\n outline = false,\r\n IconButton,\r\n className = \"\",\r\n ...rest\r\n },\r\n ref\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n const inputId = useId();\r\n const descId = `${inputId}-description`;\r\n\r\n const togglePasswordVisibility = () => setShowPassword((prev) => !prev);\r\n\r\n const wrapperClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.container,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline,\r\n disabled && classMap.disabled,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n className\r\n ),\r\n [classMap, theme, state, outline, disabled]\r\n );\r\n\r\n return (\r\n <div\r\n className={wrapperClass}\r\n data-testid={`${testId}-wrapper`}\r\n aria-disabled={disabled}\r\n >\r\n {Icon && (\r\n <div\r\n className={classMap.iconContainer}\r\n aria-hidden=\"true\"\r\n data-testid={`${testId}-icon`}\r\n >\r\n <Icon />\r\n </div>\r\n )}\r\n\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n type={password && !showPassword ? \"password\" : \"text\"}\r\n className={`${classMap.textInput} ${classMap[theme]}`}\r\n placeholder={placeholder}\r\n aria-label={ariaLabel || placeholder}\r\n aria-describedby={ariaDescription ? descId : undefined}\r\n autoComplete={autocomplete ? \"on\" : \"off\"}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n data-testid={testId}\r\n {...(rest as InputHTMLAttributes<HTMLInputElement>)}\r\n />\r\n\r\n {password && (\r\n <IconButton\r\n type=\"button\"\r\n className={classMap.togglePassword}\r\n onClick={togglePasswordVisibility}\r\n theme=\"clear\"\r\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\r\n data-testid={`${testId}-password-toggle`}\r\n icon={showPassword ? EyeIcon : EyeSlashIcon}\r\n />\r\n )}\r\n\r\n {ariaDescription && (\r\n <span\r\n id={descId}\r\n className={\"sr_only\"}\r\n data-testid={`${testId}-input-description`}\r\n >\r\n {ariaDescription}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextInputBase.displayName = \"TextInputBase\";\r\nexport default TextInputBase;\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport styles from \"./TextInput.module.scss\";\r\nimport { TextInputProps } from \"../TextInput.types\";\r\nimport TextInputBase from \"../TextInputBase\";\r\nimport { IconButton } from \"@/index.next\";\r\n\r\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>((props, ref) => {\r\n return (\r\n <TextInputBase\r\n {...props}\r\n IconButton={IconButton}\r\n ref={ref}\r\n classMap={styles}\r\n />\r\n );\r\n});\r\n\r\nTextInput.displayName = \"TextInput\";\r\nexport default TextInput;\r\n"],"names":["disabled","outline","IconButton"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ const React = require("react");
|
|
|
4
4
|
const classNames = require("./classNames-BcWMx052.cjs");
|
|
5
5
|
const capitalize = require("./capitalize-DoV-nOmN.cjs");
|
|
6
6
|
const borealStyleConfig = require("./boreal-style-config-Rr5d5Qts.cjs");
|
|
7
|
-
const IconButton = require("./IconButton-
|
|
7
|
+
const IconButton = require("./IconButton-DvfiteNA.cjs");
|
|
8
8
|
const EyeIcon = (props) => /* @__PURE__ */ require$$2.jsxs(
|
|
9
9
|
"svg",
|
|
10
10
|
{
|
|
@@ -278,4 +278,4 @@ const TextInput = React.forwardRef((props, ref) => {
|
|
|
278
278
|
});
|
|
279
279
|
TextInput.displayName = "TextInput";
|
|
280
280
|
exports.TextInput = TextInput;
|
|
281
|
-
//# sourceMappingURL=TextInput-
|
|
281
|
+
//# sourceMappingURL=TextInput-k8U0_lSm.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput-D0rdRASC.cjs","sources":["../../src/Icons/EyeIcon.tsx","../../src/Icons/EyeSlashIcon.tsx","../../src/components/TextInput/TextInputBase.tsx","../../src/components/TextInput/next/TextInput.tsx"],"sourcesContent":["const EyeIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\r\n <svg\r\n width=\"24px\"\r\n height=\"24px\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n color=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M3 13C6.6 5 17.4 5 21 13\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M12 17C10.3431 17 9 15.6569 9 14C9 12.3431 10.3431 11 12 11C13.6569 11 15 12.3431 15 14C15 15.6569 13.6569 17 12 17Z\"\r\n fill=\"currentColor\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n </svg>\r\n);\r\n\r\nexport default EyeIcon;\r\n","const EyeSlashIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\r\n <svg\r\n width=\"24px\"\r\n height=\"24px\"\r\n viewBox=\"0 0 24 24\"\r\n strokeWidth=\"1.5\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n color=\"currentColor\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M19.5 16L17.0248 12.6038\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M12 17.5V14\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M4.5 16L6.96895 12.6124\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M3 8C6.6 16 17.4 16 21 8\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n </svg>\r\n);\r\n\r\nexport default EyeSlashIcon;\r\n","import {\r\n forwardRef,\r\n useState,\r\n useId,\r\n InputHTMLAttributes,\r\n useMemo,\r\n} from \"react\";\r\nimport { EyeIcon, EyeSlashIcon } from \"../../Icons\";\r\nimport { TextInputProps } from \"./TextInput.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst TextInputBase = forwardRef<\r\n HTMLInputElement,\r\n TextInputProps & {\r\n classMap: Record<string, string>;\r\n IconButton: React.FC<any>;\r\n }\r\n>(\r\n (\r\n {\r\n icon: Icon,\r\n placeholder = \"Enter text\",\r\n password = false,\r\n readOnly = false,\r\n ariaLabel,\r\n ariaDescription,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n disabled = false,\r\n autocomplete = false,\r\n \"data-testid\": testId = \"text-input\",\r\n classMap,\r\n outline = false,\r\n IconButton,\r\n className = \"\",\r\n ...rest\r\n },\r\n ref\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n const inputId = useId();\r\n const descId = `${inputId}-description`;\r\n\r\n const togglePasswordVisibility = () => setShowPassword((prev) => !prev);\r\n\r\n const wrapperClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.container,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline,\r\n disabled && classMap.disabled,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n className\r\n ),\r\n [classMap, theme, state, outline, disabled]\r\n );\r\n\r\n return (\r\n <div\r\n className={wrapperClass}\r\n data-testid={`${testId}-wrapper`}\r\n aria-disabled={disabled}\r\n >\r\n {Icon && (\r\n <div\r\n className={classMap.iconContainer}\r\n aria-hidden=\"true\"\r\n data-testid={`${testId}-icon`}\r\n >\r\n <Icon />\r\n </div>\r\n )}\r\n\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n type={password && !showPassword ? \"password\" : \"text\"}\r\n className={`${classMap.textInput} ${classMap[theme]}`}\r\n placeholder={placeholder}\r\n aria-label={ariaLabel || placeholder}\r\n aria-describedby={ariaDescription ? descId : undefined}\r\n autoComplete={autocomplete ? \"on\" : \"off\"}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n data-testid={testId}\r\n {...(rest as InputHTMLAttributes<HTMLInputElement>)}\r\n />\r\n\r\n {password && (\r\n <IconButton\r\n type=\"button\"\r\n className={classMap.togglePassword}\r\n onClick={togglePasswordVisibility}\r\n theme=\"clear\"\r\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\r\n data-testid={`${testId}-password-toggle`}\r\n icon={showPassword ? EyeIcon : EyeSlashIcon}\r\n />\r\n )}\r\n\r\n {ariaDescription && (\r\n <span\r\n id={descId}\r\n className={\"sr_only\"}\r\n data-testid={`${testId}-input-description`}\r\n >\r\n {ariaDescription}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextInputBase.displayName = \"TextInputBase\";\r\nexport default TextInputBase;\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport styles from \"./TextInput.module.scss\";\r\nimport { TextInputProps } from \"../TextInput.types\";\r\nimport TextInputBase from \"../TextInputBase\";\r\nimport { IconButton } from \"@/index.next\";\r\n\r\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>((props, ref) => {\r\n return (\r\n <TextInputBase\r\n {...props}\r\n IconButton={IconButton}\r\n ref={ref}\r\n classMap={styles}\r\n />\r\n );\r\n});\r\n\r\nTextInput.displayName = \"TextInput\";\r\nexport default TextInput;\r\n"],"names":["jsxs","jsx","forwardRef","getDefaultTheme","getDefaultRounding","getDefaultShadow","disabled","outline","IconButton","useState","useId","useMemo","combineClassNames","capitalize"],"mappings":";;;;;;;AAAA,MAAM,UAAmD,CAAC,UACxDA,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IACN,OAAM;AAAA,IACN,aAAY;AAAA,IACX,GAAG;AAAA,IAEJ,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjBA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA,UACL,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IAChB;AAAA,EAAA;AACH;AC1BF,MAAM,eAAwD,CAAC,UAC7DD,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,aAAY;AAAA,IACZ,MAAK;AAAA,IACL,OAAM;AAAA,IACN,OAAM;AAAA,IACL,GAAG;AAAA,IAEJ,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjBA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjBA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjBA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA,UACZ,eAAc;AAAA,UACd,gBAAe;AAAA,QAAA;AAAA,MAAA;AAAA,IAChB;AAAA,EAAA;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBF,MAAM,gBAAgBC,MAAAA;AAAAA,EAOpB,CACE;AAAA,IACE,MAAM;AAAA,IACN,cAAc;AAAA,IACd,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,QAAQC,kBAAAA,gBAAA;AAAA,IACR,WAAWC,kBAAAA,mBAAA;AAAA,IACX,SAASC,kBAAAA,iBAAA;AAAA,IACT,QAAQ;AAAA,IACR,UAAAC,YAAW;AAAA,IACX,eAAe;AAAA,IACf,eAAe,SAAS;AAAA,IACxB;AAAA,IACA,SAAAC,WAAU;AAAA,IACV,YAAAC;AAAA,IACA,YAAY;AAAA,IACZ,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,CAAC,cAAc,eAAe,IAAIC,MAAAA,SAAS,KAAK;AACtD,UAAM,UAAUC,MAAAA,MAAA;AAChB,UAAM,SAAS,GAAG,OAAO;AAEzB,UAAM,2BAA2B,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI;AAEtE,UAAM,eAAeC,MAAAA;AAAAA,MACnB,MACEC,WAAAA;AAAAA,QACE,SAAS;AAAA,QACT,SAAS,KAAK;AAAA,QACd,SAAS,KAAK;AAAA,QACdL,YAAW,SAAS;AAAA,QACpBD,aAAY,SAAS;AAAA,QACrB,UAAU,SAAS,SAASO,WAAAA,WAAW,MAAM,CAAC,EAAE;AAAA,QAChD,YAAY,SAAS,QAAQA,WAAAA,WAAW,QAAQ,CAAC,EAAE;AAAA,QACnD;AAAA,MAAA;AAAA,MAEJ,CAAC,UAAU,OAAO,OAAON,UAASD,SAAQ;AAAA,IAAA;AAG5C,WACEN,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,eAAa,GAAG,MAAM;AAAA,QACtB,iBAAeM;AAAA,QAEd,UAAA;AAAA,UAAA,QACCL,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,SAAS;AAAA,cACpB,eAAY;AAAA,cACZ,eAAa,GAAG,MAAM;AAAA,cAEtB,yCAAC,MAAA,CAAA,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAIVA,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,IAAI;AAAA,cACJ,MAAM,YAAY,CAAC,eAAe,aAAa;AAAA,cAC/C,WAAW,GAAG,SAAS,SAAS,IAAI,SAAS,KAAK,CAAC;AAAA,cACnD;AAAA,cACA,cAAY,aAAa;AAAA,cACzB,oBAAkB,kBAAkB,SAAS;AAAA,cAC7C,cAAc,eAAe,OAAO;AAAA,cACpC;AAAA,cACA,UAAAK;AAAA,cACA,eAAa;AAAA,cACZ,GAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAGN,YACCL,2BAAAA;AAAAA,YAACO;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAW,SAAS;AAAA,cACpB,SAAS;AAAA,cACT,OAAM;AAAA,cACN,cAAY,eAAe,kBAAkB;AAAA,cAC7C,eAAa,GAAG,MAAM;AAAA,cACtB,MAAM,eAAe,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAIlC,mBACCP,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,cACJ,WAAW;AAAA,cACX,eAAa,GAAG,MAAM;AAAA,cAErB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEA,cAAc,cAAc;ACrH5B,MAAM,YAAYC,MAAAA,WAA6C,CAAC,OAAO,QAAQ;AAC7E,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MAAA,YACJO,WAAAA;AAAAA,MACA;AAAA,MACA,UAAU;AAAA,IAAA;AAAA,EAAA;AAGhB,CAAC;AAED,UAAU,cAAc;;"}
|
|
1
|
+
{"version":3,"file":"TextInput-k8U0_lSm.cjs","sources":["../../src/Icons/EyeIcon.tsx","../../src/Icons/EyeSlashIcon.tsx","../../src/components/TextInput/TextInputBase.tsx","../../src/components/TextInput/next/TextInput.tsx"],"sourcesContent":["const EyeIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\r\n <svg\r\n width=\"24px\"\r\n height=\"24px\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n color=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M3 13C6.6 5 17.4 5 21 13\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M12 17C10.3431 17 9 15.6569 9 14C9 12.3431 10.3431 11 12 11C13.6569 11 15 12.3431 15 14C15 15.6569 13.6569 17 12 17Z\"\r\n fill=\"currentColor\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n </svg>\r\n);\r\n\r\nexport default EyeIcon;\r\n","const EyeSlashIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\r\n <svg\r\n width=\"24px\"\r\n height=\"24px\"\r\n viewBox=\"0 0 24 24\"\r\n strokeWidth=\"1.5\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n color=\"currentColor\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M19.5 16L17.0248 12.6038\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M12 17.5V14\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M4.5 16L6.96895 12.6124\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n <path\r\n d=\"M3 8C6.6 16 17.4 16 21 8\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n ></path>\r\n </svg>\r\n);\r\n\r\nexport default EyeSlashIcon;\r\n","import {\r\n forwardRef,\r\n useState,\r\n useId,\r\n InputHTMLAttributes,\r\n useMemo,\r\n} from \"react\";\r\nimport { EyeIcon, EyeSlashIcon } from \"../../Icons\";\r\nimport { TextInputProps } from \"./TextInput.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst TextInputBase = forwardRef<\r\n HTMLInputElement,\r\n TextInputProps & {\r\n classMap: Record<string, string>;\r\n IconButton: React.FC<any>;\r\n }\r\n>(\r\n (\r\n {\r\n icon: Icon,\r\n placeholder = \"Enter text\",\r\n password = false,\r\n readOnly = false,\r\n ariaLabel,\r\n ariaDescription,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n disabled = false,\r\n autocomplete = false,\r\n \"data-testid\": testId = \"text-input\",\r\n classMap,\r\n outline = false,\r\n IconButton,\r\n className = \"\",\r\n ...rest\r\n },\r\n ref\r\n ) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n const inputId = useId();\r\n const descId = `${inputId}-description`;\r\n\r\n const togglePasswordVisibility = () => setShowPassword((prev) => !prev);\r\n\r\n const wrapperClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.container,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline,\r\n disabled && classMap.disabled,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n className\r\n ),\r\n [classMap, theme, state, outline, disabled]\r\n );\r\n\r\n return (\r\n <div\r\n className={wrapperClass}\r\n data-testid={`${testId}-wrapper`}\r\n aria-disabled={disabled}\r\n >\r\n {Icon && (\r\n <div\r\n className={classMap.iconContainer}\r\n aria-hidden=\"true\"\r\n data-testid={`${testId}-icon`}\r\n >\r\n <Icon />\r\n </div>\r\n )}\r\n\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n type={password && !showPassword ? \"password\" : \"text\"}\r\n className={`${classMap.textInput} ${classMap[theme]}`}\r\n placeholder={placeholder}\r\n aria-label={ariaLabel || placeholder}\r\n aria-describedby={ariaDescription ? descId : undefined}\r\n autoComplete={autocomplete ? \"on\" : \"off\"}\r\n readOnly={readOnly}\r\n disabled={disabled}\r\n data-testid={testId}\r\n {...(rest as InputHTMLAttributes<HTMLInputElement>)}\r\n />\r\n\r\n {password && (\r\n <IconButton\r\n type=\"button\"\r\n className={classMap.togglePassword}\r\n onClick={togglePasswordVisibility}\r\n theme=\"clear\"\r\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\r\n data-testid={`${testId}-password-toggle`}\r\n icon={showPassword ? EyeIcon : EyeSlashIcon}\r\n />\r\n )}\r\n\r\n {ariaDescription && (\r\n <span\r\n id={descId}\r\n className={\"sr_only\"}\r\n data-testid={`${testId}-input-description`}\r\n >\r\n {ariaDescription}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextInputBase.displayName = \"TextInputBase\";\r\nexport default TextInputBase;\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport styles from \"./TextInput.module.scss\";\r\nimport { TextInputProps } from \"../TextInput.types\";\r\nimport TextInputBase from \"../TextInputBase\";\r\nimport { IconButton } from \"@/index.next\";\r\n\r\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>((props, ref) => {\r\n return (\r\n <TextInputBase\r\n {...props}\r\n IconButton={IconButton}\r\n ref={ref}\r\n classMap={styles}\r\n />\r\n );\r\n});\r\n\r\nTextInput.displayName = \"TextInput\";\r\nexport default TextInput;\r\n"],"names":["jsxs","jsx","forwardRef","getDefaultTheme","getDefaultRounding","getDefaultShadow","disabled","outline","IconButton","useState","useId","useMemo","combineClassNames","capitalize"],"mappings":"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"}
|
package/dist/next/TextInput.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useState, useEffect } from "react";
|
|
2
|
+
import { createContext, useState, useEffect, useLayoutEffect } from "react";
|
|
3
3
|
import { r as registerColorScheme, g as getAllColorSchemes } from "./registerColorSheme-BPX0H7hl.js";
|
|
4
4
|
import { g as getDefaultColorSchemeName } from "./boreal-style-config-BILmxkZG.js";
|
|
5
5
|
import { colorSchemes } from "./colorSchemes.js";
|
|
@@ -10,29 +10,31 @@ const fallbackIndex = colorSchemes.findIndex(
|
|
|
10
10
|
(scheme) => scheme.name === getDefaultColorSchemeName()
|
|
11
11
|
);
|
|
12
12
|
const defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
customSchemes = []
|
|
16
|
-
}) => {
|
|
17
|
-
const [selectedScheme, setSelectedScheme] = useState(defaultIndex);
|
|
13
|
+
const STORAGE_KEY = "boreal:selectedScheme";
|
|
14
|
+
const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
18
15
|
if (fallbackIndex === -1 && process.env.NODE_ENV === "development") {
|
|
19
16
|
console.warn(
|
|
20
17
|
`Default color scheme "${getDefaultColorSchemeName()}" not found. Falling back to index 0.`
|
|
21
18
|
);
|
|
22
19
|
}
|
|
20
|
+
const [selectedScheme, setSelectedScheme] = useState(() => {
|
|
21
|
+
if (typeof initialScheme === "number") return initialScheme;
|
|
22
|
+
if (typeof window !== "undefined") {
|
|
23
|
+
try {
|
|
24
|
+
const saved = localStorage.getItem(STORAGE_KEY);
|
|
25
|
+
if (saved != null) return parseInt(saved, 10);
|
|
26
|
+
} catch {
|
|
27
|
+
console.error("Failed to load saved theme index");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return defaultIndex;
|
|
31
|
+
});
|
|
23
32
|
useEffect(() => {
|
|
24
33
|
registerColorScheme(customSchemes);
|
|
25
34
|
}, [customSchemes]);
|
|
26
|
-
|
|
27
|
-
const savedScheme = localStorage.getItem("selectedScheme");
|
|
28
|
-
if (savedScheme) {
|
|
29
|
-
setSelectedScheme(parseInt(savedScheme, 10));
|
|
30
|
-
} else {
|
|
31
|
-
setSelectedScheme(defaultIndex);
|
|
32
|
-
}
|
|
33
|
-
}, []);
|
|
34
|
-
useEffect(() => {
|
|
35
|
+
useLayoutEffect(() => {
|
|
35
36
|
const allSchemes = getAllColorSchemes();
|
|
37
|
+
const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];
|
|
36
38
|
const {
|
|
37
39
|
primaryColor,
|
|
38
40
|
secondaryColor,
|
|
@@ -40,7 +42,7 @@ const ThemeProvider = ({
|
|
|
40
42
|
quaternaryColor,
|
|
41
43
|
backgroundColor,
|
|
42
44
|
forceTextColor
|
|
43
|
-
} =
|
|
45
|
+
} = scheme;
|
|
44
46
|
const hexToHSL = (hex) => {
|
|
45
47
|
const r = parseInt(hex.slice(1, 3), 16) / 255;
|
|
46
48
|
const g = parseInt(hex.slice(3, 5), 16) / 255;
|
|
@@ -91,17 +93,15 @@ const ThemeProvider = ({
|
|
|
91
93
|
});
|
|
92
94
|
return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];
|
|
93
95
|
};
|
|
94
|
-
const contrastRatio = (
|
|
95
|
-
const lum1 = relativeLuminance(
|
|
96
|
-
const lum2 = relativeLuminance(
|
|
96
|
+
const contrastRatio = (a, b) => {
|
|
97
|
+
const lum1 = relativeLuminance(a);
|
|
98
|
+
const lum2 = relativeLuminance(b);
|
|
97
99
|
const lighter = Math.max(lum1, lum2);
|
|
98
100
|
const darker = Math.min(lum1, lum2);
|
|
99
101
|
return (lighter + 0.05) / (darker + 0.05);
|
|
100
102
|
};
|
|
101
|
-
const getAccessibleTextColor = (
|
|
102
|
-
|
|
103
|
-
};
|
|
104
|
-
const variants = {
|
|
103
|
+
const getAccessibleTextColor = (bg) => contrastRatio(bg, "#000000") >= 4.5 ? "#000000" : "#FFFFFF";
|
|
104
|
+
const vars = {
|
|
105
105
|
"--primary-color": primaryColor,
|
|
106
106
|
"--primary-color-light": adjustLightness(primaryColor, 10),
|
|
107
107
|
"--primary-color-hover": adjustLightness(primaryColor, -10),
|
|
@@ -131,12 +131,12 @@ const ThemeProvider = ({
|
|
|
131
131
|
"--link-hover-color-primary": adjustLightness(primaryColor, -10),
|
|
132
132
|
"--link-hover-color-secondary": adjustLightness(secondaryColor, -10)
|
|
133
133
|
};
|
|
134
|
-
const
|
|
135
|
-
for (const [
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
134
|
+
const rootStyle = document.documentElement.style;
|
|
135
|
+
for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);
|
|
136
|
+
try {
|
|
137
|
+
localStorage.setItem(STORAGE_KEY, String(selectedScheme));
|
|
138
|
+
} catch {
|
|
139
|
+
console.error("Failed to save theme index");
|
|
140
140
|
}
|
|
141
141
|
}, [selectedScheme]);
|
|
142
142
|
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { selectedScheme, setSelectedScheme }, children });
|
|
@@ -145,4 +145,4 @@ export {
|
|
|
145
145
|
ThemeProvider as T,
|
|
146
146
|
ThemeContext as a
|
|
147
147
|
};
|
|
148
|
-
//# sourceMappingURL=ThemeContext-
|
|
148
|
+
//# sourceMappingURL=ThemeContext-B-z-faEj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext-B-z-faEj.js","sources":["../../src/context/ThemeContext.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * ---------------------------------------------------------------------\r\n * ThemeProvider.tsx\r\n * ---------------------------------------------------------------------\r\n * Provides a React context for managing and applying color schemes\r\n * dynamically across the Boreal UI system.\r\n *\r\n * Responsibilities:\r\n * - Registers any custom color schemes at runtime\r\n * - Sets the active color scheme based on `localStorage` or fallback default\r\n * - Dynamically updates CSS custom properties (`--*`) on the `:root`\r\n * to reflect the selected theme's color values\r\n * - Ensures text color contrast by calculating luminance and WCAG ratios\r\n *\r\n * Includes:\r\n * - Lightness adjustment utilities for generating `*-light` and `*-hover` variants\r\n * - Contrast checking and accessible text color fallbacks\r\n * - `ThemeContext` with `selectedScheme` index and setter\r\n *\r\n * Hooks:\r\n * - `useEffect` to register schemes and sync saved theme index\r\n * - `useEffect` to apply all computed color variables to `document.documentElement`\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <ThemeProvider customSchemes={[customTheme]}>\r\n * <App />\r\n * </ThemeProvider>\r\n * ```\r\n *\r\n * Access via context:\r\n * ```ts\r\n * const { selectedScheme, setSelectedScheme } = useContext(ThemeContext);\r\n * ```\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport {\r\n getAllColorSchemes,\r\n registerColorScheme,\r\n} from \"../styles/colorSchemeRegistry\";\r\nimport { getDefaultColorSchemeName } from \"../config/boreal-style-config\";\r\nimport { colorSchemes } from \"../styles/Themes\";\r\nimport { ThemeContextType, ThemeProviderProps } from \"./ThemeContext.types\";\r\n\r\nexport const ThemeContext = createContext<ThemeContextType | undefined>(\r\n undefined\r\n);\r\n\r\nconst fallbackIndex = colorSchemes.findIndex(\r\n (scheme) => scheme.name === getDefaultColorSchemeName()\r\n);\r\nconst defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;\r\n\r\nconst STORAGE_KEY = \"boreal:selectedScheme\";\r\n\r\nconst ThemeProvider: React.FC<\r\n ThemeProviderProps & { initialScheme?: number }\r\n> = ({ children, customSchemes = [], initialScheme }) => {\r\n if (fallbackIndex === -1 && process.env.NODE_ENV === \"development\") {\r\n console.warn(\r\n `Default color scheme \"${getDefaultColorSchemeName()}\" not found. Falling back to index 0.`\r\n );\r\n }\r\n\r\n const [selectedScheme, setSelectedScheme] = useState<number>(() => {\r\n if (typeof initialScheme === \"number\") return initialScheme;\r\n\r\n if (typeof window !== \"undefined\") {\r\n try {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n if (saved != null) return parseInt(saved, 10);\r\n } catch {\r\n console.error(\"Failed to load saved theme index\");\r\n }\r\n }\r\n return defaultIndex;\r\n });\r\n\r\n useEffect(() => {\r\n registerColorScheme(customSchemes);\r\n }, [customSchemes]);\r\n\r\n useLayoutEffect(() => {\r\n const allSchemes = getAllColorSchemes();\r\n const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];\r\n\r\n const {\r\n primaryColor,\r\n secondaryColor,\r\n tertiaryColor,\r\n quaternaryColor,\r\n backgroundColor,\r\n forceTextColor,\r\n } = scheme;\r\n\r\n const hexToHSL = (hex: string) => {\r\n const r = parseInt(hex.slice(1, 3), 16) / 255;\r\n const g = parseInt(hex.slice(3, 5), 16) / 255;\r\n const b = parseInt(hex.slice(5, 7), 16) / 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0;\r\n const l = (max + min) / 2;\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n };\r\n\r\n const hslToHex = (h: number, s: number, l: number): string => {\r\n s /= 100;\r\n l /= 100;\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n Math.round(\r\n 255 *\r\n (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))))\r\n );\r\n return `#${[f(0), f(8), f(4)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n };\r\n\r\n const adjustLightness = (hex: string, percent: number): string => {\r\n const { h, s, l } = hexToHSL(hex);\r\n return hslToHex(h, s, Math.min(100, Math.max(0, l + percent)));\r\n };\r\n\r\n const relativeLuminance = (hex: string): number => {\r\n const rgb = [1, 3, 5].map((i) => {\r\n const c = parseInt(hex.slice(i, i + 2), 16) / 255;\r\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n });\r\n return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];\r\n };\r\n\r\n const contrastRatio = (a: string, b: string): number => {\r\n const lum1 = relativeLuminance(a);\r\n const lum2 = relativeLuminance(b);\r\n const lighter = Math.max(lum1, lum2);\r\n const darker = Math.min(lum1, lum2);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n };\r\n\r\n const getAccessibleTextColor = (bg: string): string =>\r\n contrastRatio(bg, \"#000000\") >= 4.5 ? \"#000000\" : \"#FFFFFF\";\r\n\r\n const vars = {\r\n \"--primary-color\": primaryColor,\r\n \"--primary-color-light\": adjustLightness(primaryColor, 10),\r\n \"--primary-color-hover\": adjustLightness(primaryColor, -10),\r\n \"--text-color-primary\":\r\n forceTextColor ?? getAccessibleTextColor(primaryColor),\r\n\r\n \"--secondary-color\": secondaryColor,\r\n \"--secondary-color-light\": adjustLightness(secondaryColor, 10),\r\n \"--secondary-color-hover\": adjustLightness(secondaryColor, -10),\r\n \"--text-color-secondary\": getAccessibleTextColor(secondaryColor),\r\n\r\n \"--tertiary-color\": tertiaryColor,\r\n \"--tertiary-color-light\": adjustLightness(tertiaryColor, 10),\r\n \"--tertiary-color-hover\": adjustLightness(tertiaryColor, -10),\r\n \"--text-color-tertiary\": getAccessibleTextColor(tertiaryColor),\r\n\r\n \"--quaternary-color\": quaternaryColor,\r\n \"--quaternary-color-light\": adjustLightness(quaternaryColor, 10),\r\n \"--quaternary-color-hover\": adjustLightness(quaternaryColor, -10),\r\n \"--text-color-quaternary\": getAccessibleTextColor(quaternaryColor),\r\n\r\n \"--background-color\": backgroundColor,\r\n \"--background-color-dark\": adjustLightness(backgroundColor, -10),\r\n \"--background-color-darker\": adjustLightness(backgroundColor, -25),\r\n \"--background-color-light\": adjustLightness(backgroundColor, 10),\r\n \"--background-color-lighter\": adjustLightness(backgroundColor, 20),\r\n\r\n \"--link-color\": getAccessibleTextColor(backgroundColor),\r\n \"--link-color-hover\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n -20\r\n ),\r\n \"--link-hover-color-primary\": adjustLightness(primaryColor, -10),\r\n \"--link-hover-color-secondary\": adjustLightness(secondaryColor, -10),\r\n } as const;\r\n\r\n const rootStyle = document.documentElement.style;\r\n for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, String(selectedScheme));\r\n } catch {\r\n console.error(\"Failed to save theme index\");\r\n }\r\n }, [selectedScheme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ selectedScheme, setSelectedScheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -11,29 +11,31 @@ const fallbackIndex = colorSchemes.colorSchemes.findIndex(
|
|
|
11
11
|
(scheme) => scheme.name === borealStyleConfig.getDefaultColorSchemeName()
|
|
12
12
|
);
|
|
13
13
|
const defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
customSchemes = []
|
|
17
|
-
}) => {
|
|
18
|
-
const [selectedScheme, setSelectedScheme] = React.useState(defaultIndex);
|
|
14
|
+
const STORAGE_KEY = "boreal:selectedScheme";
|
|
15
|
+
const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
19
16
|
if (fallbackIndex === -1 && process.env.NODE_ENV === "development") {
|
|
20
17
|
console.warn(
|
|
21
18
|
`Default color scheme "${borealStyleConfig.getDefaultColorSchemeName()}" not found. Falling back to index 0.`
|
|
22
19
|
);
|
|
23
20
|
}
|
|
21
|
+
const [selectedScheme, setSelectedScheme] = React.useState(() => {
|
|
22
|
+
if (typeof initialScheme === "number") return initialScheme;
|
|
23
|
+
if (typeof window !== "undefined") {
|
|
24
|
+
try {
|
|
25
|
+
const saved = localStorage.getItem(STORAGE_KEY);
|
|
26
|
+
if (saved != null) return parseInt(saved, 10);
|
|
27
|
+
} catch {
|
|
28
|
+
console.error("Failed to load saved theme index");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return defaultIndex;
|
|
32
|
+
});
|
|
24
33
|
React.useEffect(() => {
|
|
25
34
|
registerColorSheme.registerColorScheme(customSchemes);
|
|
26
35
|
}, [customSchemes]);
|
|
27
|
-
React.
|
|
28
|
-
const savedScheme = localStorage.getItem("selectedScheme");
|
|
29
|
-
if (savedScheme) {
|
|
30
|
-
setSelectedScheme(parseInt(savedScheme, 10));
|
|
31
|
-
} else {
|
|
32
|
-
setSelectedScheme(defaultIndex);
|
|
33
|
-
}
|
|
34
|
-
}, []);
|
|
35
|
-
React.useEffect(() => {
|
|
36
|
+
React.useLayoutEffect(() => {
|
|
36
37
|
const allSchemes = registerColorSheme.getAllColorSchemes();
|
|
38
|
+
const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];
|
|
37
39
|
const {
|
|
38
40
|
primaryColor,
|
|
39
41
|
secondaryColor,
|
|
@@ -41,7 +43,7 @@ const ThemeProvider = ({
|
|
|
41
43
|
quaternaryColor,
|
|
42
44
|
backgroundColor,
|
|
43
45
|
forceTextColor
|
|
44
|
-
} =
|
|
46
|
+
} = scheme;
|
|
45
47
|
const hexToHSL = (hex) => {
|
|
46
48
|
const r = parseInt(hex.slice(1, 3), 16) / 255;
|
|
47
49
|
const g = parseInt(hex.slice(3, 5), 16) / 255;
|
|
@@ -92,17 +94,15 @@ const ThemeProvider = ({
|
|
|
92
94
|
});
|
|
93
95
|
return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];
|
|
94
96
|
};
|
|
95
|
-
const contrastRatio = (
|
|
96
|
-
const lum1 = relativeLuminance(
|
|
97
|
-
const lum2 = relativeLuminance(
|
|
97
|
+
const contrastRatio = (a, b) => {
|
|
98
|
+
const lum1 = relativeLuminance(a);
|
|
99
|
+
const lum2 = relativeLuminance(b);
|
|
98
100
|
const lighter = Math.max(lum1, lum2);
|
|
99
101
|
const darker = Math.min(lum1, lum2);
|
|
100
102
|
return (lighter + 0.05) / (darker + 0.05);
|
|
101
103
|
};
|
|
102
|
-
const getAccessibleTextColor = (
|
|
103
|
-
|
|
104
|
-
};
|
|
105
|
-
const variants = {
|
|
104
|
+
const getAccessibleTextColor = (bg) => contrastRatio(bg, "#000000") >= 4.5 ? "#000000" : "#FFFFFF";
|
|
105
|
+
const vars = {
|
|
106
106
|
"--primary-color": primaryColor,
|
|
107
107
|
"--primary-color-light": adjustLightness(primaryColor, 10),
|
|
108
108
|
"--primary-color-hover": adjustLightness(primaryColor, -10),
|
|
@@ -132,16 +132,16 @@ const ThemeProvider = ({
|
|
|
132
132
|
"--link-hover-color-primary": adjustLightness(primaryColor, -10),
|
|
133
133
|
"--link-hover-color-secondary": adjustLightness(secondaryColor, -10)
|
|
134
134
|
};
|
|
135
|
-
const
|
|
136
|
-
for (const [
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
const rootStyle = document.documentElement.style;
|
|
136
|
+
for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);
|
|
137
|
+
try {
|
|
138
|
+
localStorage.setItem(STORAGE_KEY, String(selectedScheme));
|
|
139
|
+
} catch {
|
|
140
|
+
console.error("Failed to save theme index");
|
|
141
141
|
}
|
|
142
142
|
}, [selectedScheme]);
|
|
143
143
|
return /* @__PURE__ */ require$$2.jsx(ThemeContext.Provider, { value: { selectedScheme, setSelectedScheme }, children });
|
|
144
144
|
};
|
|
145
145
|
exports.ThemeContext = ThemeContext;
|
|
146
146
|
exports.ThemeProvider = ThemeProvider;
|
|
147
|
-
//# sourceMappingURL=ThemeContext-
|
|
147
|
+
//# sourceMappingURL=ThemeContext-BHzkqvlv.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext-BHzkqvlv.cjs","sources":["../../src/context/ThemeContext.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * ---------------------------------------------------------------------\r\n * ThemeProvider.tsx\r\n * ---------------------------------------------------------------------\r\n * Provides a React context for managing and applying color schemes\r\n * dynamically across the Boreal UI system.\r\n *\r\n * Responsibilities:\r\n * - Registers any custom color schemes at runtime\r\n * - Sets the active color scheme based on `localStorage` or fallback default\r\n * - Dynamically updates CSS custom properties (`--*`) on the `:root`\r\n * to reflect the selected theme's color values\r\n * - Ensures text color contrast by calculating luminance and WCAG ratios\r\n *\r\n * Includes:\r\n * - Lightness adjustment utilities for generating `*-light` and `*-hover` variants\r\n * - Contrast checking and accessible text color fallbacks\r\n * - `ThemeContext` with `selectedScheme` index and setter\r\n *\r\n * Hooks:\r\n * - `useEffect` to register schemes and sync saved theme index\r\n * - `useEffect` to apply all computed color variables to `document.documentElement`\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <ThemeProvider customSchemes={[customTheme]}>\r\n * <App />\r\n * </ThemeProvider>\r\n * ```\r\n *\r\n * Access via context:\r\n * ```ts\r\n * const { selectedScheme, setSelectedScheme } = useContext(ThemeContext);\r\n * ```\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport {\r\n getAllColorSchemes,\r\n registerColorScheme,\r\n} from \"../styles/colorSchemeRegistry\";\r\nimport { getDefaultColorSchemeName } from \"../config/boreal-style-config\";\r\nimport { colorSchemes } from \"../styles/Themes\";\r\nimport { ThemeContextType, ThemeProviderProps } from \"./ThemeContext.types\";\r\n\r\nexport const ThemeContext = createContext<ThemeContextType | undefined>(\r\n undefined\r\n);\r\n\r\nconst fallbackIndex = colorSchemes.findIndex(\r\n (scheme) => scheme.name === getDefaultColorSchemeName()\r\n);\r\nconst defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;\r\n\r\nconst STORAGE_KEY = \"boreal:selectedScheme\";\r\n\r\nconst ThemeProvider: React.FC<\r\n ThemeProviderProps & { initialScheme?: number }\r\n> = ({ children, customSchemes = [], initialScheme }) => {\r\n if (fallbackIndex === -1 && process.env.NODE_ENV === \"development\") {\r\n console.warn(\r\n `Default color scheme \"${getDefaultColorSchemeName()}\" not found. Falling back to index 0.`\r\n );\r\n }\r\n\r\n const [selectedScheme, setSelectedScheme] = useState<number>(() => {\r\n if (typeof initialScheme === \"number\") return initialScheme;\r\n\r\n if (typeof window !== \"undefined\") {\r\n try {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n if (saved != null) return parseInt(saved, 10);\r\n } catch {\r\n console.error(\"Failed to load saved theme index\");\r\n }\r\n }\r\n return defaultIndex;\r\n });\r\n\r\n useEffect(() => {\r\n registerColorScheme(customSchemes);\r\n }, [customSchemes]);\r\n\r\n useLayoutEffect(() => {\r\n const allSchemes = getAllColorSchemes();\r\n const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];\r\n\r\n const {\r\n primaryColor,\r\n secondaryColor,\r\n tertiaryColor,\r\n quaternaryColor,\r\n backgroundColor,\r\n forceTextColor,\r\n } = scheme;\r\n\r\n const hexToHSL = (hex: string) => {\r\n const r = parseInt(hex.slice(1, 3), 16) / 255;\r\n const g = parseInt(hex.slice(3, 5), 16) / 255;\r\n const b = parseInt(hex.slice(5, 7), 16) / 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0;\r\n const l = (max + min) / 2;\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n };\r\n\r\n const hslToHex = (h: number, s: number, l: number): string => {\r\n s /= 100;\r\n l /= 100;\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n Math.round(\r\n 255 *\r\n (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))))\r\n );\r\n return `#${[f(0), f(8), f(4)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n };\r\n\r\n const adjustLightness = (hex: string, percent: number): string => {\r\n const { h, s, l } = hexToHSL(hex);\r\n return hslToHex(h, s, Math.min(100, Math.max(0, l + percent)));\r\n };\r\n\r\n const relativeLuminance = (hex: string): number => {\r\n const rgb = [1, 3, 5].map((i) => {\r\n const c = parseInt(hex.slice(i, i + 2), 16) / 255;\r\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n });\r\n return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];\r\n };\r\n\r\n const contrastRatio = (a: string, b: string): number => {\r\n const lum1 = relativeLuminance(a);\r\n const lum2 = relativeLuminance(b);\r\n const lighter = Math.max(lum1, lum2);\r\n const darker = Math.min(lum1, lum2);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n };\r\n\r\n const getAccessibleTextColor = (bg: string): string =>\r\n contrastRatio(bg, \"#000000\") >= 4.5 ? \"#000000\" : \"#FFFFFF\";\r\n\r\n const vars = {\r\n \"--primary-color\": primaryColor,\r\n \"--primary-color-light\": adjustLightness(primaryColor, 10),\r\n \"--primary-color-hover\": adjustLightness(primaryColor, -10),\r\n \"--text-color-primary\":\r\n forceTextColor ?? getAccessibleTextColor(primaryColor),\r\n\r\n \"--secondary-color\": secondaryColor,\r\n \"--secondary-color-light\": adjustLightness(secondaryColor, 10),\r\n \"--secondary-color-hover\": adjustLightness(secondaryColor, -10),\r\n \"--text-color-secondary\": getAccessibleTextColor(secondaryColor),\r\n\r\n \"--tertiary-color\": tertiaryColor,\r\n \"--tertiary-color-light\": adjustLightness(tertiaryColor, 10),\r\n \"--tertiary-color-hover\": adjustLightness(tertiaryColor, -10),\r\n \"--text-color-tertiary\": getAccessibleTextColor(tertiaryColor),\r\n\r\n \"--quaternary-color\": quaternaryColor,\r\n \"--quaternary-color-light\": adjustLightness(quaternaryColor, 10),\r\n \"--quaternary-color-hover\": adjustLightness(quaternaryColor, -10),\r\n \"--text-color-quaternary\": getAccessibleTextColor(quaternaryColor),\r\n\r\n \"--background-color\": backgroundColor,\r\n \"--background-color-dark\": adjustLightness(backgroundColor, -10),\r\n \"--background-color-darker\": adjustLightness(backgroundColor, -25),\r\n \"--background-color-light\": adjustLightness(backgroundColor, 10),\r\n \"--background-color-lighter\": adjustLightness(backgroundColor, 20),\r\n\r\n \"--link-color\": getAccessibleTextColor(backgroundColor),\r\n \"--link-color-hover\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n -20\r\n ),\r\n \"--link-hover-color-primary\": adjustLightness(primaryColor, -10),\r\n \"--link-hover-color-secondary\": adjustLightness(secondaryColor, -10),\r\n } as const;\r\n\r\n const rootStyle = document.documentElement.style;\r\n for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, String(selectedScheme));\r\n } catch {\r\n console.error(\"Failed to save theme index\");\r\n }\r\n }, [selectedScheme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ selectedScheme, setSelectedScheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":["createContext","colorSchemes","getDefaultColorSchemeName","useState","useEffect","registerColorScheme","useLayoutEffect","getAllColorSchemes","jsx"],"mappings":"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"}
|