boreal-ui 0.0.61 → 0.0.63
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-Ch4Cp02K.cjs → Footer-D7XF9Pd_.cjs} +2 -2
- package/dist/core/{Footer-Ch4Cp02K.cjs.map → Footer-D7XF9Pd_.cjs.map} +1 -1
- package/dist/core/{Footer-DuwO0Wo3.js → Footer-DIqYxkhA.js} +2 -2
- package/dist/core/{Footer-DuwO0Wo3.js.map → Footer-DIqYxkhA.js.map} +1 -1
- package/dist/core/Footer.cjs.js +1 -1
- package/dist/core/Footer.js +1 -1
- package/dist/core/Modal-Bxr3hpdX.js.map +1 -1
- package/dist/core/Modal-FSXyuUVq.cjs.map +1 -1
- package/dist/core/{STT-Bdm78oOs.js → ScrollToTop-Bdm78oOs.js} +1 -1
- package/dist/core/ScrollToTop-Bdm78oOs.js.map +1 -0
- package/dist/core/{STT-DKOwe6z3.cjs → ScrollToTop-DKOwe6z3.cjs} +1 -1
- package/dist/core/ScrollToTop-DKOwe6z3.cjs.map +1 -0
- package/dist/core/ScrollToTop.cjs.js +2 -2
- package/dist/core/ScrollToTop.js +1 -1
- package/dist/core/{ThemeContext-DSYDwr2m.js → ThemeContext-BEYRgPZ9.js} +17 -3
- package/dist/core/ThemeContext-BEYRgPZ9.js.map +1 -0
- package/dist/core/{ThemeContext-D1AV88GN.cjs → ThemeContext-C-0mwEv4.cjs} +17 -3
- package/dist/core/ThemeContext-C-0mwEv4.cjs.map +1 -0
- package/dist/core/ThemeProvider.cjs.js +1 -1
- package/dist/core/ThemeProvider.js +1 -1
- package/dist/core/Typography-CrSonr_W.cjs +177 -0
- package/dist/core/Typography-CrSonr_W.cjs.map +1 -0
- package/dist/core/Typography-DFXpv9CF.js +178 -0
- package/dist/core/Typography-DFXpv9CF.js.map +1 -0
- package/dist/core/Typography.cjs.js +4 -0
- package/dist/core/Typography.cjs.js.map +1 -0
- package/dist/core/Typography.js +5 -0
- package/dist/core/Typography.js.map +1 -0
- package/dist/core/boreal-ui.css +10295 -6207
- package/dist/core/index.cjs.js +6 -4
- package/dist/core/index.cjs.js.map +1 -1
- package/dist/core/index.js +21 -19
- package/dist/core/index.js.map +1 -1
- package/dist/next/{Accordion-CrUmV-HM.js → Accordion-Dn_TH9Fi.js} +51 -51
- package/dist/next/{Accordion-CrUmV-HM.js.map → Accordion-Dn_TH9Fi.js.map} +1 -1
- package/dist/next/{Accordion-ugkSb5dI.cjs → Accordion-DwVQe79s.cjs} +51 -51
- package/dist/next/{Accordion-ugkSb5dI.cjs.map → Accordion-DwVQe79s.cjs.map} +1 -1
- package/dist/next/Accordion.cjs.js +1 -1
- package/dist/next/Accordion.js +1 -1
- package/dist/next/{Avatar-B24bFFqY.js → Avatar-D3l1T_H7.js} +40 -40
- package/dist/next/{Avatar-B24bFFqY.js.map → Avatar-D3l1T_H7.js.map} +1 -1
- package/dist/next/{Avatar-CPaxiA0r.cjs → Avatar-aNqEuazN.cjs} +40 -40
- package/dist/next/{Avatar-CPaxiA0r.cjs.map → Avatar-aNqEuazN.cjs.map} +1 -1
- package/dist/next/Avatar.cjs.js +1 -1
- package/dist/next/Avatar.js +1 -1
- package/dist/next/{Badge-BZNYm0IU.js → Badge-DxwCU8MI.js} +31 -31
- package/dist/next/{Badge-BZNYm0IU.js.map → Badge-DxwCU8MI.js.map} +1 -1
- package/dist/next/{Badge-dTyh833r.cjs → Badge-QK8EwBZC.cjs} +31 -31
- package/dist/next/{Badge-dTyh833r.cjs.map → Badge-QK8EwBZC.cjs.map} +1 -1
- package/dist/next/Badge.cjs.js +1 -1
- package/dist/next/Badge.js +1 -1
- package/dist/next/{Breadcrumbs-DBT6uVwY.cjs → Breadcrumbs-3XEDzKbm.cjs} +38 -38
- package/dist/next/{Breadcrumbs-DBT6uVwY.cjs.map → Breadcrumbs-3XEDzKbm.cjs.map} +1 -1
- package/dist/next/{Breadcrumbs-hXIVEQX-.js → Breadcrumbs-BsNWBc-h.js} +38 -38
- package/dist/next/{Breadcrumbs-hXIVEQX-.js.map → Breadcrumbs-BsNWBc-h.js.map} +1 -1
- package/dist/next/Breadcrumbs.cjs.js +1 -1
- package/dist/next/Breadcrumbs.js +1 -1
- package/dist/next/{Button-DPoX7ahh.cjs → Button-BxKYm6hW.cjs} +46 -46
- package/dist/next/{Button-DPoX7ahh.cjs.map → Button-BxKYm6hW.cjs.map} +1 -1
- package/dist/next/{Button-DhH3Gy0J.js → Button-CbLs7Xb_.js} +46 -46
- package/dist/next/{Button-DhH3Gy0J.js.map → Button-CbLs7Xb_.js.map} +1 -1
- package/dist/next/Button.cjs.js +1 -1
- package/dist/next/Button.js +1 -1
- package/dist/next/{Card-DhCmEAPL.js → Card--Vnbkx_t.js} +63 -65
- package/dist/next/{Card-DhCmEAPL.js.map → Card--Vnbkx_t.js.map} +1 -1
- package/dist/next/{Card-CTHQTLQ2.cjs → Card-F3Rcxsp7.cjs} +63 -65
- package/dist/next/{Card-CTHQTLQ2.cjs.map → Card-F3Rcxsp7.cjs.map} +1 -1
- package/dist/next/Card.cjs.js +1 -1
- package/dist/next/Card.js +1 -1
- package/dist/next/CheckBox.cjs.js +1 -1
- package/dist/next/CheckBox.js +1 -1
- package/dist/next/{Checkbox-DBidsakA.js → Checkbox-DCP9e_zW.js} +44 -44
- package/dist/next/{Checkbox-DBidsakA.js.map → Checkbox-DCP9e_zW.js.map} +1 -1
- package/dist/next/{Checkbox-hA321207.cjs → Checkbox-V_yJTGLJ.cjs} +44 -44
- package/dist/next/{Checkbox-hA321207.cjs.map → Checkbox-V_yJTGLJ.cjs.map} +1 -1
- package/dist/next/{Chip-CqvlZI-K.cjs → Chip-DZJSDzXr.cjs} +51 -51
- package/dist/next/{Chip-CqvlZI-K.cjs.map → Chip-DZJSDzXr.cjs.map} +1 -1
- package/dist/next/{Chip-BqMZEDW_.js → Chip-RMMKC89X.js} +51 -51
- package/dist/next/{Chip-BqMZEDW_.js.map → Chip-RMMKC89X.js.map} +1 -1
- package/dist/next/Chip.cjs.js +1 -1
- package/dist/next/Chip.js +1 -1
- package/dist/next/{CircularProgress-BegWxawm.cjs → CircularProgress-D7VkwZME.cjs} +37 -37
- package/dist/next/{CircularProgress-BegWxawm.cjs.map → CircularProgress-D7VkwZME.cjs.map} +1 -1
- package/dist/next/{CircularProgress-wBHZUhul.js → CircularProgress-DDzPH1aF.js} +37 -37
- package/dist/next/{CircularProgress-wBHZUhul.js.map → CircularProgress-DDzPH1aF.js.map} +1 -1
- package/dist/next/CircularProgress.cjs.js +1 -1
- package/dist/next/CircularProgress.js +1 -1
- package/dist/next/{ColorPicker-Tla92spe.cjs → ColorPicker-D5SYdLA9.cjs} +38 -38
- package/dist/next/{ColorPicker-Tla92spe.cjs.map → ColorPicker-D5SYdLA9.cjs.map} +1 -1
- package/dist/next/{ColorPicker-Dd9iz-i8.js → ColorPicker-llWz1lyd.js} +38 -38
- package/dist/next/{ColorPicker-Dd9iz-i8.js.map → ColorPicker-llWz1lyd.js.map} +1 -1
- package/dist/next/ColorPicker.cjs.js +1 -1
- package/dist/next/ColorPicker.js +1 -1
- package/dist/next/{CommandPalette-C4Bchj4Y.js → CommandPalette-BKXggOFe.js} +42 -42
- package/dist/next/{CommandPalette-C4Bchj4Y.js.map → CommandPalette-BKXggOFe.js.map} +1 -1
- package/dist/next/{CommandPalette-DzEKlStj.cjs → CommandPalette-DVwb5WCx.cjs} +42 -42
- package/dist/next/{CommandPalette-DzEKlStj.cjs.map → CommandPalette-DVwb5WCx.cjs.map} +1 -1
- package/dist/next/CommandPalette.cjs.js +1 -1
- package/dist/next/CommandPalette.js +1 -1
- package/dist/next/{DataTable-j8nWsbeg.cjs → DataTable-DdbfhIs4.cjs} +40 -40
- package/dist/next/{DataTable-j8nWsbeg.cjs.map → DataTable-DdbfhIs4.cjs.map} +1 -1
- package/dist/next/{DataTable-D2QUuLab.js → DataTable-v0Tuwx7T.js} +40 -40
- package/dist/next/{DataTable-D2QUuLab.js.map → DataTable-v0Tuwx7T.js.map} +1 -1
- package/dist/next/DataTable.cjs.js +1 -1
- package/dist/next/DataTable.js +1 -1
- package/dist/next/{DateTimePicker-CphfYmZ8.js → DateTimePicker-BBF5R9-X.js} +46 -46
- package/dist/next/{DateTimePicker-CphfYmZ8.js.map → DateTimePicker-BBF5R9-X.js.map} +1 -1
- package/dist/next/{DateTimePicker-DwS2xQNw.cjs → DateTimePicker-DVo9uK3q.cjs} +46 -46
- package/dist/next/{DateTimePicker-DwS2xQNw.cjs.map → DateTimePicker-DVo9uK3q.cjs.map} +1 -1
- package/dist/next/DateTimePicker.cjs.js +1 -1
- package/dist/next/DateTimePicker.js +1 -1
- package/dist/next/{Divider-kiaQzYbi.js → Divider-SOFRGXN4.js} +28 -28
- package/dist/next/{Divider-kiaQzYbi.js.map → Divider-SOFRGXN4.js.map} +1 -1
- package/dist/next/{Divider-cx8e80sS.cjs → Divider-qisY9Yx8.cjs} +28 -28
- package/dist/next/{Divider-cx8e80sS.cjs.map → Divider-qisY9Yx8.cjs.map} +1 -1
- package/dist/next/Divider.cjs.js +1 -1
- package/dist/next/Divider.js +1 -1
- package/dist/next/{Dropdown-IW2Ph6-e.cjs → Dropdown-BkgFTyAd.cjs} +22 -22
- package/dist/next/{Dropdown-IW2Ph6-e.cjs.map → Dropdown-BkgFTyAd.cjs.map} +1 -1
- package/dist/next/{Dropdown-BjxT8ivq.js → Dropdown-VXFj_bFP.js} +22 -22
- package/dist/next/{Dropdown-BjxT8ivq.js.map → Dropdown-VXFj_bFP.js.map} +1 -1
- package/dist/next/Dropdown.cjs.js +1 -1
- package/dist/next/Dropdown.js +1 -1
- package/dist/next/{EmptyState-D_Gcrj_3.js → EmptyState-AM8RgRxl.js} +31 -31
- package/dist/next/{EmptyState-D_Gcrj_3.js.map → EmptyState-AM8RgRxl.js.map} +1 -1
- package/dist/next/{EmptyState-BS6-CuHp.cjs → EmptyState-BbasdxVa.cjs} +31 -31
- package/dist/next/{EmptyState-BS6-CuHp.cjs.map → EmptyState-BbasdxVa.cjs.map} +1 -1
- package/dist/next/EmptyState.cjs.js +1 -1
- package/dist/next/EmptyState.js +1 -1
- package/dist/next/{FileUpload-Cj99fQhe.cjs → FileUpload-Cz5Cmf7D.cjs} +52 -52
- package/dist/next/{FileUpload-Cj99fQhe.cjs.map → FileUpload-Cz5Cmf7D.cjs.map} +1 -1
- package/dist/next/{FileUpload-St2eEaTn.js → FileUpload-vAtZJfmM.js} +52 -52
- package/dist/next/{FileUpload-St2eEaTn.js.map → FileUpload-vAtZJfmM.js.map} +1 -1
- package/dist/next/FileUpload.cjs.js +1 -1
- package/dist/next/FileUpload.js +1 -1
- package/dist/next/{Footer-DMT3GtKq.js → Footer-BeALudhE.js} +43 -43
- package/dist/next/{Footer-DMT3GtKq.js.map → Footer-BeALudhE.js.map} +1 -1
- package/dist/next/{Footer-2VxzlCzU.cjs → Footer-CX_AJG0N.cjs} +43 -43
- package/dist/next/{Footer-2VxzlCzU.cjs.map → Footer-CX_AJG0N.cjs.map} +1 -1
- package/dist/next/Footer.cjs.js +1 -1
- package/dist/next/Footer.js +1 -1
- package/dist/next/{FormGroup-Bg2QlTu7.cjs → FormGroup-ZIcoxpF7.cjs} +31 -31
- package/dist/next/{FormGroup-Bg2QlTu7.cjs.map → FormGroup-ZIcoxpF7.cjs.map} +1 -1
- package/dist/next/{FormGroup-DmQChKxA.js → FormGroup-dDYVBjuL.js} +31 -31
- package/dist/next/{FormGroup-DmQChKxA.js.map → FormGroup-dDYVBjuL.js.map} +1 -1
- package/dist/next/FormGroup.cjs.js +1 -1
- package/dist/next/FormGroup.js +1 -1
- package/dist/next/{IconButton-Ct3YtlG9.js → IconButton-Cl0mZxov.js} +30 -30
- package/dist/next/{IconButton-Ct3YtlG9.js.map → IconButton-Cl0mZxov.js.map} +1 -1
- package/dist/next/{IconButton-aF7cTy19.cjs → IconButton-D3MIvof0.cjs} +30 -30
- package/dist/next/{IconButton-aF7cTy19.cjs.map → IconButton-D3MIvof0.cjs.map} +1 -1
- package/dist/next/IconButton.cjs.js +1 -1
- package/dist/next/IconButton.js +1 -1
- package/dist/next/{MarkdownRenderer-l6hdKOt0.cjs → MarkdownRenderer-BxR_D4HC.cjs} +12 -12
- package/dist/next/{MarkdownRenderer-l6hdKOt0.cjs.map → MarkdownRenderer-BxR_D4HC.cjs.map} +1 -1
- package/dist/next/{MarkdownRenderer-B8_D0j7d.js → MarkdownRenderer-yVj97cUU.js} +12 -12
- package/dist/next/{MarkdownRenderer-B8_D0j7d.js.map → MarkdownRenderer-yVj97cUU.js.map} +1 -1
- package/dist/next/MarkdownRenderer.cjs.js +1 -1
- package/dist/next/MarkdownRenderer.js +1 -1
- package/dist/next/{MessagePopup-DscxGBLP.js → MessagePopup-Cb98cQsc.js} +22 -22
- package/dist/next/{MessagePopup-DscxGBLP.js.map → MessagePopup-Cb98cQsc.js.map} +1 -1
- package/dist/next/{MessagePopup-DJ2V-ad5.cjs → MessagePopup-CdGMtQjq.cjs} +22 -22
- package/dist/next/{MessagePopup-DJ2V-ad5.cjs.map → MessagePopup-CdGMtQjq.cjs.map} +1 -1
- package/dist/next/MessagePopup.cjs.js +1 -1
- package/dist/next/MessagePopup.js +1 -1
- package/dist/next/{MetricBox-ozSXEeEf.js → MetricBox-BgErSHJ2.js} +47 -47
- package/dist/next/{MetricBox-ozSXEeEf.js.map → MetricBox-BgErSHJ2.js.map} +1 -1
- package/dist/next/{MetricBox-7AdEqlvh.cjs → MetricBox-DnKSec6I.cjs} +47 -47
- package/dist/next/{MetricBox-7AdEqlvh.cjs.map → MetricBox-DnKSec6I.cjs.map} +1 -1
- package/dist/next/MetricBox.cjs.js +1 -1
- package/dist/next/MetricBox.js +1 -1
- package/dist/next/{Modal-BykHn4WN.cjs → Modal-C2b5gSAI.cjs} +17 -17
- package/dist/next/{Modal-BykHn4WN.cjs.map → Modal-C2b5gSAI.cjs.map} +1 -1
- package/dist/next/{Modal-BaW3Kw7r.js → Modal-DIMVFaMZ.js} +17 -17
- package/dist/next/{Modal-BaW3Kw7r.js.map → Modal-DIMVFaMZ.js.map} +1 -1
- package/dist/next/Modal.cjs.js +1 -1
- package/dist/next/Modal.js +1 -1
- package/dist/next/{NavBar-DyI3rKSN.js → NavBar-B5mwxdyF.js} +37 -37
- package/dist/next/{NavBar-DyI3rKSN.js.map → NavBar-B5mwxdyF.js.map} +1 -1
- package/dist/next/{NavBar-DDu46bCF.cjs → NavBar-MdBgi_nF.cjs} +37 -37
- package/dist/next/{NavBar-DDu46bCF.cjs.map → NavBar-MdBgi_nF.cjs.map} +1 -1
- package/dist/next/NavBar.cjs.js +1 -1
- package/dist/next/NavBar.js +1 -1
- package/dist/next/{NotificationCenter-CzdOOnWg.cjs → NotificationCenter-Caz3jxdn.cjs} +43 -43
- package/dist/next/{NotificationCenter-CzdOOnWg.cjs.map → NotificationCenter-Caz3jxdn.cjs.map} +1 -1
- package/dist/next/{NotificationCenter-BIuKaeXk.js → NotificationCenter-_XsQhE7s.js} +43 -43
- package/dist/next/{NotificationCenter-BIuKaeXk.js.map → NotificationCenter-_XsQhE7s.js.map} +1 -1
- package/dist/next/NotificationCenter.cjs.js +1 -1
- package/dist/next/NotificationCenter.js +1 -1
- package/dist/next/{Pager-C6vww_Lf.cjs → Pager-B8F1r2e2.cjs} +7 -7
- package/dist/next/{Pager-C6vww_Lf.cjs.map → Pager-B8F1r2e2.cjs.map} +1 -1
- package/dist/next/{Pager-DkXLe3dd.js → Pager-DvKe6hJy.js} +7 -7
- package/dist/next/{Pager-DkXLe3dd.js.map → Pager-DvKe6hJy.js.map} +1 -1
- package/dist/next/Pager.cjs.js +1 -1
- package/dist/next/Pager.js +1 -1
- package/dist/next/{PopOver-gQfgHe9e.cjs → PopOver-DKO8mxAQ.cjs} +40 -40
- package/dist/next/{PopOver-gQfgHe9e.cjs.map → PopOver-DKO8mxAQ.cjs.map} +1 -1
- package/dist/next/{PopOver-qSTx5y8g.js → PopOver-RQs7wnzJ.js} +40 -40
- package/dist/next/{PopOver-qSTx5y8g.js.map → PopOver-RQs7wnzJ.js.map} +1 -1
- package/dist/next/PopOver.cjs.js +1 -1
- package/dist/next/PopOver.js +1 -1
- package/dist/next/{ProgressBar-CDhjp_gn.cjs → ProgressBar-C2RB6irR.cjs} +56 -56
- package/dist/next/{ProgressBar-CDhjp_gn.cjs.map → ProgressBar-C2RB6irR.cjs.map} +1 -1
- package/dist/next/{ProgressBar-BM0Rp63R.js → ProgressBar-CpPnKp50.js} +56 -56
- package/dist/next/{ProgressBar-BM0Rp63R.js.map → ProgressBar-CpPnKp50.js.map} +1 -1
- package/dist/next/ProgressBar.cjs.js +1 -1
- package/dist/next/ProgressBar.js +1 -1
- package/dist/next/{RadioButton-D6oyNmVU.cjs → RadioButton-D0653S8V.cjs} +38 -38
- package/dist/next/{RadioButton-D6oyNmVU.cjs.map → RadioButton-D0653S8V.cjs.map} +1 -1
- package/dist/next/{RadioButton-CEvIACkL.js → RadioButton-y2Gj8oA8.js} +38 -38
- package/dist/next/{RadioButton-CEvIACkL.js.map → RadioButton-y2Gj8oA8.js.map} +1 -1
- package/dist/next/RadioButton.cjs.js +1 -1
- package/dist/next/RadioButton.js +1 -1
- package/dist/next/{Rating-umLbRaAb.js → Rating-CdLx5K9F.js} +34 -34
- package/dist/next/{Rating-umLbRaAb.js.map → Rating-CdLx5K9F.js.map} +1 -1
- package/dist/next/{Rating-BbqxsFU9.cjs → Rating-Dwl39FBy.cjs} +34 -34
- package/dist/next/{Rating-BbqxsFU9.cjs.map → Rating-Dwl39FBy.cjs.map} +1 -1
- package/dist/next/Rating.cjs.js +1 -1
- package/dist/next/Rating.js +1 -1
- package/dist/next/{STT-GyAuX3-m.cjs → ScrollToTop-B_-WfAAW.cjs} +14 -14
- package/dist/next/ScrollToTop-B_-WfAAW.cjs.map +1 -0
- package/dist/next/{STT-CFFr1_Ls.js → ScrollToTop-goObm3qq.js} +14 -14
- package/dist/next/ScrollToTop-goObm3qq.js.map +1 -0
- package/dist/next/ScrollToTop.cjs.js +2 -2
- package/dist/next/ScrollToTop.js +1 -1
- package/dist/next/{Select-1sLV4ar_.js → Select-CItGjqiA.js} +31 -47
- package/dist/next/{Select-1sLV4ar_.js.map → Select-CItGjqiA.js.map} +1 -1
- package/dist/next/{Select-BDse5K69.cjs → Select-CY0pPJEK.cjs} +31 -47
- package/dist/next/{Select-BDse5K69.cjs.map → Select-CY0pPJEK.cjs.map} +1 -1
- package/dist/next/Select.cjs.js +1 -1
- package/dist/next/Select.js +1 -1
- package/dist/next/{Sidebar-CBC-Gu5d.cjs → Sidebar-CXu2pmRX.cjs} +47 -47
- package/dist/next/{Sidebar-CBC-Gu5d.cjs.map → Sidebar-CXu2pmRX.cjs.map} +1 -1
- package/dist/next/{Sidebar-oJzZMxwu.js → Sidebar-DIJSf6Np.js} +47 -47
- package/dist/next/{Sidebar-oJzZMxwu.js.map → Sidebar-DIJSf6Np.js.map} +1 -1
- package/dist/next/Sidebar.cjs.js +1 -1
- package/dist/next/Sidebar.js +1 -1
- package/dist/next/{Skeleton-C6wW8eyR.cjs → Skeleton-B1CXIUtq.cjs} +26 -26
- package/dist/next/{Skeleton-C6wW8eyR.cjs.map → Skeleton-B1CXIUtq.cjs.map} +1 -1
- package/dist/next/{Skeleton-DC4LJ059.js → Skeleton-BrqgG8hs.js} +26 -26
- package/dist/next/{Skeleton-DC4LJ059.js.map → Skeleton-BrqgG8hs.js.map} +1 -1
- package/dist/next/Skeleton.cjs.js +1 -1
- package/dist/next/Skeleton.js +1 -1
- package/dist/next/{Slider-g41Qvh6s.cjs → Slider-CIRshlPG.cjs} +43 -43
- package/dist/next/{Slider-g41Qvh6s.cjs.map → Slider-CIRshlPG.cjs.map} +1 -1
- package/dist/next/{Slider-wAbg8hOH.js → Slider-DsMR0_ku.js} +43 -43
- package/dist/next/{Slider-wAbg8hOH.js.map → Slider-DsMR0_ku.js.map} +1 -1
- package/dist/next/Slider.cjs.js +1 -1
- package/dist/next/Slider.js +1 -1
- package/dist/next/{Spinner-D3OQ29U9.js → Spinner-CJ-iu7ef.js} +37 -37
- package/dist/next/{Spinner-D3OQ29U9.js.map → Spinner-CJ-iu7ef.js.map} +1 -1
- package/dist/next/{Spinner-Y53Z6fwK.cjs → Spinner-DmsSt_pC.cjs} +37 -37
- package/dist/next/{Spinner-Y53Z6fwK.cjs.map → Spinner-DmsSt_pC.cjs.map} +1 -1
- package/dist/next/Spinner.cjs.js +1 -1
- package/dist/next/Spinner.js +1 -1
- package/dist/next/{Stepper-DBwramgz.js → Stepper-COpAZ9L5.js} +40 -40
- package/dist/next/{Stepper-DBwramgz.js.map → Stepper-COpAZ9L5.js.map} +1 -1
- package/dist/next/{Stepper-YQqjSOG0.cjs → Stepper-DuwfXoUQ.cjs} +40 -40
- package/dist/next/{Stepper-YQqjSOG0.cjs.map → Stepper-DuwfXoUQ.cjs.map} +1 -1
- package/dist/next/Stepper.cjs.js +1 -1
- package/dist/next/Stepper.js +1 -1
- package/dist/next/{Tabs-BEskeiYq.js → Tabs-B9ZCknnG.js} +29 -29
- package/dist/next/{Tabs-BEskeiYq.js.map → Tabs-B9ZCknnG.js.map} +1 -1
- package/dist/next/{Tabs-bFqyifwl.cjs → Tabs-DqeWKCtM.cjs} +29 -29
- package/dist/next/{Tabs-bFqyifwl.cjs.map → Tabs-DqeWKCtM.cjs.map} +1 -1
- package/dist/next/Tabs.cjs.js +1 -1
- package/dist/next/Tabs.js +1 -1
- package/dist/next/{TagInput-CHNJ9Cdh.js → TagInput-Calu7rmv.js} +48 -48
- package/dist/next/{TagInput-CHNJ9Cdh.js.map → TagInput-Calu7rmv.js.map} +1 -1
- package/dist/next/{TagInput-DjX8Z4-o.cjs → TagInput-UXdEhgt6.cjs} +48 -48
- package/dist/next/{TagInput-DjX8Z4-o.cjs.map → TagInput-UXdEhgt6.cjs.map} +1 -1
- package/dist/next/TagInput.cjs.js +1 -1
- package/dist/next/TagInput.js +1 -1
- package/dist/next/{TextArea-BHJx395o.js → TextArea-D1tyvK9I.js} +27 -27
- package/dist/next/{TextArea-BHJx395o.js.map → TextArea-D1tyvK9I.js.map} +1 -1
- package/dist/next/{TextArea-Bux5Ojjs.cjs → TextArea-DstXzsQz.cjs} +27 -27
- package/dist/next/{TextArea-Bux5Ojjs.cjs.map → TextArea-DstXzsQz.cjs.map} +1 -1
- package/dist/next/TextArea.cjs.js +1 -1
- package/dist/next/TextArea.js +1 -1
- package/dist/next/{TextInput-CKv7Umxo.cjs → TextInput-BnvakI1-.cjs} +26 -26
- package/dist/next/{TextInput-CKv7Umxo.cjs.map → TextInput-BnvakI1-.cjs.map} +1 -1
- package/dist/next/{TextInput-D0zTOb7y.js → TextInput-DgWD3y-H.js} +26 -26
- package/dist/next/{TextInput-D0zTOb7y.js.map → TextInput-DgWD3y-H.js.map} +1 -1
- package/dist/next/TextInput.cjs.js +1 -1
- package/dist/next/TextInput.js +1 -1
- package/dist/next/{ThemeContext-DSYDwr2m.js → ThemeContext-BEYRgPZ9.js} +17 -3
- package/dist/next/ThemeContext-BEYRgPZ9.js.map +1 -0
- package/dist/next/{ThemeContext-npFEznyu.cjs → ThemeContext-GXlhpxO0.cjs} +17 -3
- package/dist/next/ThemeContext-GXlhpxO0.cjs.map +1 -0
- package/dist/next/ThemeProvider.cjs.js +1 -1
- package/dist/next/ThemeProvider.js +1 -1
- package/dist/next/{Timeline-Dknnqv8w.cjs → Timeline-1gGPeWoc.cjs} +28 -28
- package/dist/next/{Timeline-Dknnqv8w.cjs.map → Timeline-1gGPeWoc.cjs.map} +1 -1
- package/dist/next/{Timeline-DOB2jvQw.js → Timeline-BJq3RTWG.js} +28 -28
- package/dist/next/{Timeline-DOB2jvQw.js.map → Timeline-BJq3RTWG.js.map} +1 -1
- package/dist/next/Timeline.cjs.js +1 -1
- package/dist/next/Timeline.js +1 -1
- package/dist/next/{Toggle-C60HtU15.js → Toggle-BDiAYcT4.js} +30 -30
- package/dist/next/{Toggle-C60HtU15.js.map → Toggle-BDiAYcT4.js.map} +1 -1
- package/dist/next/{Toggle-XcxNC4zl.cjs → Toggle-D_g5fvKG.cjs} +30 -30
- package/dist/next/{Toggle-XcxNC4zl.cjs.map → Toggle-D_g5fvKG.cjs.map} +1 -1
- package/dist/next/Toggle.cjs.js +1 -1
- package/dist/next/Toggle.js +1 -1
- package/dist/next/{Toolbar-DHyc9uqa.js → Toolbar-C9Zkjg6l.js} +35 -35
- package/dist/next/{Toolbar-DHyc9uqa.js.map → Toolbar-C9Zkjg6l.js.map} +1 -1
- package/dist/next/{Toolbar-B-APlNjI.cjs → Toolbar-Dx_lsHnl.cjs} +35 -35
- package/dist/next/{Toolbar-B-APlNjI.cjs.map → Toolbar-Dx_lsHnl.cjs.map} +1 -1
- package/dist/next/Toolbar.cjs.js +1 -1
- package/dist/next/Toolbar.js +1 -1
- package/dist/next/{Tooltip-DPFnMhUd.cjs → Tooltip-BLWL7U26.cjs} +39 -39
- package/dist/next/{Tooltip-DPFnMhUd.cjs.map → Tooltip-BLWL7U26.cjs.map} +1 -1
- package/dist/next/{Tooltip-_GVlUXAq.js → Tooltip-DO95QNH2.js} +39 -39
- package/dist/next/{Tooltip-_GVlUXAq.js.map → Tooltip-DO95QNH2.js.map} +1 -1
- package/dist/next/Tooltip.cjs.js +1 -1
- package/dist/next/Tooltip.js +1 -1
- package/dist/next/Typography-Dg4Vc3Tm.cjs +215 -0
- package/dist/next/Typography-Dg4Vc3Tm.cjs.map +1 -0
- package/dist/next/Typography-SgeXdVdI.js +216 -0
- package/dist/next/Typography-SgeXdVdI.js.map +1 -0
- package/dist/next/Typography.cjs.js +4 -0
- package/dist/next/Typography.cjs.js.map +1 -0
- package/dist/next/Typography.js +5 -0
- package/dist/next/Typography.js.map +1 -0
- package/dist/next/boreal-ui.css +12326 -8688
- package/dist/next/index.cjs.js +73 -71
- package/dist/next/index.cjs.js.map +1 -1
- package/dist/next/index.js +80 -78
- package/dist/next/index.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/components/Modal/ModalBase.d.ts.map +1 -1
- package/dist/types/components/ScrollToTop/core/{STT.d.ts → ScrollToTop.d.ts} +1 -1
- package/dist/types/components/ScrollToTop/core/ScrollToTop.d.ts.map +1 -0
- package/dist/types/components/ScrollToTop/next/{STT.d.ts → ScrollToTop.d.ts} +1 -1
- package/dist/types/components/ScrollToTop/next/ScrollToTop.d.ts.map +1 -0
- package/dist/types/components/Typography/Typography.types.d.ts +28 -0
- package/dist/types/components/Typography/Typography.types.d.ts.map +1 -0
- package/dist/types/components/Typography/TypographyBase.d.ts +8 -0
- package/dist/types/components/Typography/TypographyBase.d.ts.map +1 -0
- package/dist/types/components/Typography/core/Typography.d.ts +6 -0
- package/dist/types/components/Typography/core/Typography.d.ts.map +1 -0
- package/dist/types/components/Typography/next/Typography.d.ts +5 -0
- package/dist/types/components/Typography/next/Typography.d.ts.map +1 -0
- package/dist/types/context/ThemeContext.d.ts.map +1 -1
- package/dist/types/index.core.d.ts +2 -1
- package/dist/types/index.core.d.ts.map +1 -1
- package/dist/types/index.next.d.ts +2 -1
- package/dist/types/index.next.d.ts.map +1 -1
- package/dist/types/public.types.d.ts +1 -0
- package/package.json +68 -91
- package/dist/core/STT-Bdm78oOs.js.map +0 -1
- package/dist/core/STT-DKOwe6z3.cjs.map +0 -1
- package/dist/core/ThemeContext-D1AV88GN.cjs.map +0 -1
- package/dist/core/ThemeContext-DSYDwr2m.js.map +0 -1
- package/dist/next/STT-CFFr1_Ls.js.map +0 -1
- package/dist/next/STT-GyAuX3-m.cjs.map +0 -1
- package/dist/next/ThemeContext-DSYDwr2m.js.map +0 -1
- package/dist/next/ThemeContext-npFEznyu.cjs.map +0 -1
- package/dist/types/components/ScrollToTop/core/STT.d.ts.map +0 -1
- package/dist/types/components/ScrollToTop/next/STT.d.ts.map +0 -1
|
@@ -6,7 +6,7 @@ const borealStyleConfig = require("./boreal-style-config-Rr5d5Qts.cjs");
|
|
|
6
6
|
const capitalize = require("./capitalize-DoV-nOmN.cjs");
|
|
7
7
|
const IconButton = require("./IconButton-Bio6Azm-.cjs");
|
|
8
8
|
const Select = require("./Select-CeGp-Feb.cjs");
|
|
9
|
-
const ThemeContext = require("./ThemeContext-
|
|
9
|
+
const ThemeContext = require("./ThemeContext-C-0mwEv4.cjs");
|
|
10
10
|
const UserThemeSettings = React.forwardRef(
|
|
11
11
|
({
|
|
12
12
|
theme = borealStyleConfig.getDefaultTheme(),
|
|
@@ -214,4 +214,4 @@ const Footer = (props) => {
|
|
|
214
214
|
Footer.displayName = "Footer";
|
|
215
215
|
exports.Footer = Footer;
|
|
216
216
|
exports.UserThemeSettings = UserThemeSettings;
|
|
217
|
-
//# sourceMappingURL=Footer-
|
|
217
|
+
//# sourceMappingURL=Footer-D7XF9Pd_.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer-Ch4Cp02K.cjs","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["forwardRef","getDefaultTheme","getDefaultShadow","getDefaultRounding","useContext","ThemeContext","useMemo","jsx","Select","IconButton","combineClassNames","capitalize","jsxs","ThemeSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Footer-D7XF9Pd_.cjs","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["forwardRef","getDefaultTheme","getDefaultShadow","getDefaultRounding","useContext","ThemeContext","useMemo","jsx","Select","IconButton","combineClassNames","capitalize","jsxs","ThemeSelect"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { a as getDefaultRounding, b as getDefaultShadow, d as getDefaultTheme }
|
|
|
5
5
|
import { c as capitalize } from "./capitalize-C0TSQSPh.js";
|
|
6
6
|
import { I as IconButton } from "./IconButton-BMZhwYXB.js";
|
|
7
7
|
import { S as Select } from "./Select-DnCmFsPq.js";
|
|
8
|
-
import { a as ThemeContext } from "./ThemeContext-
|
|
8
|
+
import { a as ThemeContext } from "./ThemeContext-BEYRgPZ9.js";
|
|
9
9
|
const UserThemeSettings = forwardRef(
|
|
10
10
|
({
|
|
11
11
|
theme = getDefaultTheme(),
|
|
@@ -215,4 +215,4 @@ export {
|
|
|
215
215
|
Footer as F,
|
|
216
216
|
UserThemeSettings as U
|
|
217
217
|
};
|
|
218
|
-
//# sourceMappingURL=Footer-
|
|
218
|
+
//# sourceMappingURL=Footer-DIqYxkhA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer-DuwO0Wo3.js","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["IconButton","ThemeSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Footer-DIqYxkhA.js","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["IconButton","ThemeSelect"],"mappings":"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"}
|
package/dist/core/Footer.cjs.js
CHANGED
package/dist/core/Footer.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal-Bxr3hpdX.js","sources":["../../src/components/Modal/ModalBase.tsx","../../src/components/Modal/core/Modal.tsx"],"sourcesContent":["import React, {\r\n useEffect,\r\n useRef,\r\n useState,\r\n useId,\r\n KeyboardEvent,\r\n useCallback,\r\n} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { BaseModalProps } from \"./Modal.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst BaseModal: React.FC<BaseModalProps> = ({\r\n className = \"\",\r\n children,\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n open,\r\n onClose,\r\n \"data-testid\": testId = \"modal\",\r\n IconButton,\r\n classMap,\r\n portalId = \"widget-portal\",\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [portalElement, setPortalElement] = useState<HTMLElement | null>(null);\r\n const [isRendered, setIsRendered] = useState(false);\r\n\r\n const isControlled = typeof open === \"boolean\";\r\n const shouldBeOpen = isControlled ? open : true;\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const closeBtnRef = useRef<HTMLButtonElement>(null);\r\n const openerRef = useRef<HTMLElement | null>(null);\r\n const focusablesRef = useRef<HTMLElement[]>([]);\r\n\r\n const uid = useId();\r\n const labelId = `${uid}-label`;\r\n\r\n const handleClose = useCallback(() => {\r\n setIsVisible(false);\r\n window.setTimeout(() => onClose(), 200);\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n openerRef.current = (document.activeElement as HTMLElement) ?? null;\r\n\r\n let portal = document.getElementById(portalId);\r\n if (!portal) {\r\n portal = document.createElement(\"div\");\r\n portal.id = portalId;\r\n document.body.appendChild(portal);\r\n }\r\n setPortalElement(portal);\r\n document.body.classList.add(\"noScroll\");\r\n\r\n const siblings = Array.from(document.body.children) as HTMLElement[];\r\n const hidden: HTMLElement[] = [];\r\n siblings.forEach((el) => {\r\n if (el !== portal && !el.hasAttribute(\"aria-hidden\")) {\r\n el.setAttribute(\"aria-hidden\", \"true\");\r\n hidden.push(el);\r\n }\r\n });\r\n\r\n const handleEsc = (e: globalThis.KeyboardEvent) => {\r\n if (e.key === \"Escape\") handleClose();\r\n };\r\n document.addEventListener(\"keydown\", handleEsc);\r\n\r\n return () => {\r\n document.body.classList.remove(\"noScroll\");\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n hidden.forEach((el) => el.removeAttribute(\"aria-hidden\"));\r\n openerRef.current?.focus?.();\r\n setPortalElement(null);\r\n };\r\n }, [isRendered, portalId, handleClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n\r\n if (dialogRef.current) {\r\n focusablesRef.current = Array.from(\r\n dialogRef.current.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\r\n }\r\n\r\n (\r\n focusablesRef.current[0] ??\r\n closeBtnRef.current ??\r\n dialogRef.current\r\n )?.focus?.();\r\n });\r\n }, [isRendered]);\r\n\r\n useEffect(() => {\r\n if (shouldBeOpen) {\r\n setIsRendered(true);\r\n } else if (isControlled) {\r\n setIsVisible(false);\r\n const t = window.setTimeout(() => setIsRendered(false), 200);\r\n return () => window.clearTimeout(t);\r\n } else {\r\n setIsRendered(false);\r\n }\r\n }, [shouldBeOpen, isControlled]);\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== \"Tab\") return;\r\n const list = focusablesRef.current;\r\n if (!list.length) return;\r\n\r\n const first = list[0];\r\n const last = list[list.length - 1];\r\n\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n if (!isRendered || !portalElement) return null;\r\n\r\n const contentClassName = combineClassNames(\r\n classMap.content,\r\n className,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n );\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n ref={overlayRef}\r\n className={combineClassNames(\r\n classMap.overlay,\r\n isVisible ? classMap.visible : classMap.hidden,\r\n )}\r\n onClick={handleClose}\r\n role=\"presentation\"\r\n data-testid={testId}\r\n >\r\n <div\r\n ref={dialogRef}\r\n className={contentClassName}\r\n onClick={(e) => e.stopPropagation()}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={labelId}\r\n tabIndex={-1}\r\n onKeyDown={handleKeyDown}\r\n data-testid={`${testId}-content`}\r\n >\r\n <h2 id={labelId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Modal Dialog\r\n </h2>\r\n\r\n <IconButton\r\n ref={closeBtnRef}\r\n className={classMap.closeButton}\r\n state=\"error\"\r\n size=\"small\"\r\n icon={CloseIcon}\r\n ariaLabel=\"Close modal\"\r\n onClick={(e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n handleClose();\r\n }}\r\n title=\"Close\"\r\n data-testid={`${testId}-close`}\r\n type=\"button\"\r\n />\r\n\r\n {children}\r\n </div>\r\n </div>,\r\n portalElement,\r\n );\r\n};\r\n\r\nBaseModal.displayName = \"BaseModal\";\r\nexport default BaseModal;\r\n","import React from \"react\";\r\nimport BaseModal from \"../ModalBase\";\r\nimport \"./Modal.scss\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport { ModalProps } from \"../Modal.types\";\r\n\r\nconst classes = {\r\n overlay: \"modal_overlay\",\r\n visible: \"modal_visible\",\r\n hidden: \"modal_hidden\",\r\n content: \"modal_content\",\r\n closeButton: \"modal_close_button\",\r\n\r\n shadowNone: \"modal_shadow-None\",\r\n shadowLight: \"modal_shadow-Light\",\r\n shadowMedium: \"modal_shadow-Medium\",\r\n shadowStrong: \"modal_shadow-Strong\",\r\n shadowIntense: \"modal_shadow-Intense\",\r\n\r\n roundNone: \"modal_round-None\",\r\n roundSmall: \"modal_round-Small\",\r\n roundMedium: \"modal_round-Medium\",\r\n roundLarge: \"modal_round-Large\",\r\n};\r\n\r\nconst Modal: React.FC<ModalProps> = (props) => {\r\n return <BaseModal {...props} IconButton={IconButton} classMap={classes} />;\r\n};\r\nModal.displayName = \"Modal\";\r\nexport default Modal;\r\n"],"names":["IconButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Modal-Bxr3hpdX.js","sources":["../../src/components/Modal/ModalBase.tsx","../../src/components/Modal/core/Modal.tsx"],"sourcesContent":["import React, {\r\n useEffect,\r\n useRef,\r\n useState,\r\n useId,\r\n KeyboardEvent,\r\n useCallback,\r\n} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { BaseModalProps } from \"./Modal.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst BaseModal: React.FC<BaseModalProps> = ({\r\n className = \"\",\r\n children,\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n open,\r\n onClose,\r\n \"data-testid\": testId = \"modal\",\r\n IconButton,\r\n classMap,\r\n portalId = \"widget-portal\",\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [portalElement, setPortalElement] = useState<HTMLElement | null>(null);\r\n const [isRendered, setIsRendered] = useState(false);\r\n\r\n const isControlled = typeof open === \"boolean\";\r\n const shouldBeOpen = isControlled ? open : true;\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const closeBtnRef = useRef<HTMLButtonElement>(null);\r\n const openerRef = useRef<HTMLElement | null>(null);\r\n const focusablesRef = useRef<HTMLElement[]>([]);\r\n\r\n const uid = useId();\r\n const labelId = `${uid}-label`;\r\n\r\n const handleClose = useCallback(() => {\r\n setIsVisible(false);\r\n window.setTimeout(() => onClose(), 200);\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n openerRef.current = (document.activeElement as HTMLElement) ?? null;\r\n\r\n let portal = document.getElementById(portalId);\r\n if (!portal) {\r\n portal = document.createElement(\"div\");\r\n portal.id = portalId;\r\n document.body.appendChild(portal);\r\n }\r\n setPortalElement(portal);\r\n document.body.classList.add(\"noScroll\");\r\n\r\n const siblings = Array.from(document.body.children) as HTMLElement[];\r\n const hidden: HTMLElement[] = [];\r\n siblings.forEach((el) => {\r\n if (el !== portal && !el.hasAttribute(\"aria-hidden\")) {\r\n el.setAttribute(\"aria-hidden\", \"true\");\r\n hidden.push(el);\r\n }\r\n });\r\n\r\n const handleEsc = (e: globalThis.KeyboardEvent) => {\r\n if (e.key === \"Escape\") handleClose();\r\n };\r\n document.addEventListener(\"keydown\", handleEsc);\r\n\r\n return () => {\r\n document.body.classList.remove(\"noScroll\");\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n hidden.forEach((el) => el.removeAttribute(\"aria-hidden\"));\r\n openerRef.current?.focus?.();\r\n setPortalElement(null);\r\n };\r\n }, [isRendered, portalId, handleClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n\r\n if (dialogRef.current) {\r\n focusablesRef.current = Array.from(\r\n dialogRef.current.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\r\n }\r\n\r\n (\r\n focusablesRef.current[0] ??\r\n closeBtnRef.current ??\r\n dialogRef.current\r\n )?.focus?.();\r\n });\r\n }, [isRendered]);\r\n\r\n useEffect(() => {\r\n if (shouldBeOpen) {\r\n setIsRendered(true);\r\n } else if (isControlled) {\r\n setIsVisible(false);\r\n const t = window.setTimeout(() => setIsRendered(false), 200);\r\n return () => window.clearTimeout(t);\r\n } else {\r\n setIsRendered(false);\r\n }\r\n }, [shouldBeOpen, isControlled]);\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== \"Tab\") return;\r\n const list = focusablesRef.current;\r\n if (!list.length) return;\r\n\r\n const first = list[0];\r\n const last = list[list.length - 1];\r\n\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n if (!isRendered || !portalElement) return null;\r\n\r\n const contentClassName = combineClassNames(\r\n classMap.content,\r\n className,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n );\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n ref={overlayRef}\r\n className={combineClassNames(\r\n classMap.overlay,\r\n isVisible ? classMap.visible : classMap.hidden,\r\n )}\r\n onClick={handleClose}\r\n role=\"presentation\"\r\n data-testid={testId}\r\n >\r\n <div\r\n ref={dialogRef}\r\n className={contentClassName}\r\n onClick={(e) => e.stopPropagation()}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={labelId}\r\n tabIndex={-1}\r\n onKeyDown={handleKeyDown}\r\n data-testid={`${testId}-content`}\r\n >\r\n <h2 id={labelId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Modal Dialog\r\n </h2>\r\n <IconButton\r\n ref={closeBtnRef}\r\n className={classMap.closeButton}\r\n state=\"error\"\r\n size=\"small\"\r\n icon={CloseIcon}\r\n ariaLabel=\"Close modal\"\r\n onClick={(e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n handleClose();\r\n }}\r\n title=\"Close\"\r\n data-testid={`${testId}-close`}\r\n type=\"button\"\r\n />\r\n\r\n {children}\r\n </div>\r\n </div>,\r\n portalElement,\r\n );\r\n};\r\n\r\nBaseModal.displayName = \"BaseModal\";\r\nexport default BaseModal;\r\n","import React from \"react\";\r\nimport BaseModal from \"../ModalBase\";\r\nimport \"./Modal.scss\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport { ModalProps } from \"../Modal.types\";\r\n\r\nconst classes = {\r\n overlay: \"modal_overlay\",\r\n visible: \"modal_visible\",\r\n hidden: \"modal_hidden\",\r\n content: \"modal_content\",\r\n closeButton: \"modal_close_button\",\r\n\r\n shadowNone: \"modal_shadow-None\",\r\n shadowLight: \"modal_shadow-Light\",\r\n shadowMedium: \"modal_shadow-Medium\",\r\n shadowStrong: \"modal_shadow-Strong\",\r\n shadowIntense: \"modal_shadow-Intense\",\r\n\r\n roundNone: \"modal_round-None\",\r\n roundSmall: \"modal_round-Small\",\r\n roundMedium: \"modal_round-Medium\",\r\n roundLarge: \"modal_round-Large\",\r\n};\r\n\r\nconst Modal: React.FC<ModalProps> = (props) => {\r\n return <BaseModal {...props} IconButton={IconButton} classMap={classes} />;\r\n};\r\nModal.displayName = \"Modal\";\r\nexport default Modal;\r\n"],"names":["IconButton"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal-FSXyuUVq.cjs","sources":["../../src/components/Modal/ModalBase.tsx","../../src/components/Modal/core/Modal.tsx"],"sourcesContent":["import React, {\r\n useEffect,\r\n useRef,\r\n useState,\r\n useId,\r\n KeyboardEvent,\r\n useCallback,\r\n} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { BaseModalProps } from \"./Modal.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst BaseModal: React.FC<BaseModalProps> = ({\r\n className = \"\",\r\n children,\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n open,\r\n onClose,\r\n \"data-testid\": testId = \"modal\",\r\n IconButton,\r\n classMap,\r\n portalId = \"widget-portal\",\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [portalElement, setPortalElement] = useState<HTMLElement | null>(null);\r\n const [isRendered, setIsRendered] = useState(false);\r\n\r\n const isControlled = typeof open === \"boolean\";\r\n const shouldBeOpen = isControlled ? open : true;\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const closeBtnRef = useRef<HTMLButtonElement>(null);\r\n const openerRef = useRef<HTMLElement | null>(null);\r\n const focusablesRef = useRef<HTMLElement[]>([]);\r\n\r\n const uid = useId();\r\n const labelId = `${uid}-label`;\r\n\r\n const handleClose = useCallback(() => {\r\n setIsVisible(false);\r\n window.setTimeout(() => onClose(), 200);\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n openerRef.current = (document.activeElement as HTMLElement) ?? null;\r\n\r\n let portal = document.getElementById(portalId);\r\n if (!portal) {\r\n portal = document.createElement(\"div\");\r\n portal.id = portalId;\r\n document.body.appendChild(portal);\r\n }\r\n setPortalElement(portal);\r\n document.body.classList.add(\"noScroll\");\r\n\r\n const siblings = Array.from(document.body.children) as HTMLElement[];\r\n const hidden: HTMLElement[] = [];\r\n siblings.forEach((el) => {\r\n if (el !== portal && !el.hasAttribute(\"aria-hidden\")) {\r\n el.setAttribute(\"aria-hidden\", \"true\");\r\n hidden.push(el);\r\n }\r\n });\r\n\r\n const handleEsc = (e: globalThis.KeyboardEvent) => {\r\n if (e.key === \"Escape\") handleClose();\r\n };\r\n document.addEventListener(\"keydown\", handleEsc);\r\n\r\n return () => {\r\n document.body.classList.remove(\"noScroll\");\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n hidden.forEach((el) => el.removeAttribute(\"aria-hidden\"));\r\n openerRef.current?.focus?.();\r\n setPortalElement(null);\r\n };\r\n }, [isRendered, portalId, handleClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n\r\n if (dialogRef.current) {\r\n focusablesRef.current = Array.from(\r\n dialogRef.current.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\r\n }\r\n\r\n (\r\n focusablesRef.current[0] ??\r\n closeBtnRef.current ??\r\n dialogRef.current\r\n )?.focus?.();\r\n });\r\n }, [isRendered]);\r\n\r\n useEffect(() => {\r\n if (shouldBeOpen) {\r\n setIsRendered(true);\r\n } else if (isControlled) {\r\n setIsVisible(false);\r\n const t = window.setTimeout(() => setIsRendered(false), 200);\r\n return () => window.clearTimeout(t);\r\n } else {\r\n setIsRendered(false);\r\n }\r\n }, [shouldBeOpen, isControlled]);\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== \"Tab\") return;\r\n const list = focusablesRef.current;\r\n if (!list.length) return;\r\n\r\n const first = list[0];\r\n const last = list[list.length - 1];\r\n\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n if (!isRendered || !portalElement) return null;\r\n\r\n const contentClassName = combineClassNames(\r\n classMap.content,\r\n className,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n );\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n ref={overlayRef}\r\n className={combineClassNames(\r\n classMap.overlay,\r\n isVisible ? classMap.visible : classMap.hidden,\r\n )}\r\n onClick={handleClose}\r\n role=\"presentation\"\r\n data-testid={testId}\r\n >\r\n <div\r\n ref={dialogRef}\r\n className={contentClassName}\r\n onClick={(e) => e.stopPropagation()}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={labelId}\r\n tabIndex={-1}\r\n onKeyDown={handleKeyDown}\r\n data-testid={`${testId}-content`}\r\n >\r\n <h2 id={labelId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Modal Dialog\r\n </h2>\r\n\r\n <IconButton\r\n ref={closeBtnRef}\r\n className={classMap.closeButton}\r\n state=\"error\"\r\n size=\"small\"\r\n icon={CloseIcon}\r\n ariaLabel=\"Close modal\"\r\n onClick={(e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n handleClose();\r\n }}\r\n title=\"Close\"\r\n data-testid={`${testId}-close`}\r\n type=\"button\"\r\n />\r\n\r\n {children}\r\n </div>\r\n </div>,\r\n portalElement,\r\n );\r\n};\r\n\r\nBaseModal.displayName = \"BaseModal\";\r\nexport default BaseModal;\r\n","import React from \"react\";\r\nimport BaseModal from \"../ModalBase\";\r\nimport \"./Modal.scss\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport { ModalProps } from \"../Modal.types\";\r\n\r\nconst classes = {\r\n overlay: \"modal_overlay\",\r\n visible: \"modal_visible\",\r\n hidden: \"modal_hidden\",\r\n content: \"modal_content\",\r\n closeButton: \"modal_close_button\",\r\n\r\n shadowNone: \"modal_shadow-None\",\r\n shadowLight: \"modal_shadow-Light\",\r\n shadowMedium: \"modal_shadow-Medium\",\r\n shadowStrong: \"modal_shadow-Strong\",\r\n shadowIntense: \"modal_shadow-Intense\",\r\n\r\n roundNone: \"modal_round-None\",\r\n roundSmall: \"modal_round-Small\",\r\n roundMedium: \"modal_round-Medium\",\r\n roundLarge: \"modal_round-Large\",\r\n};\r\n\r\nconst Modal: React.FC<ModalProps> = (props) => {\r\n return <BaseModal {...props} IconButton={IconButton} classMap={classes} />;\r\n};\r\nModal.displayName = \"Modal\";\r\nexport default Modal;\r\n"],"names":["getDefaultRounding","getDefaultShadow","IconButton","useState","useRef","useId","useCallback","useEffect","combineClassNames","capitalize","jsx","jsxs","CloseIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Modal-FSXyuUVq.cjs","sources":["../../src/components/Modal/ModalBase.tsx","../../src/components/Modal/core/Modal.tsx"],"sourcesContent":["import React, {\r\n useEffect,\r\n useRef,\r\n useState,\r\n useId,\r\n KeyboardEvent,\r\n useCallback,\r\n} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { BaseModalProps } from \"./Modal.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst BaseModal: React.FC<BaseModalProps> = ({\r\n className = \"\",\r\n children,\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n open,\r\n onClose,\r\n \"data-testid\": testId = \"modal\",\r\n IconButton,\r\n classMap,\r\n portalId = \"widget-portal\",\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [portalElement, setPortalElement] = useState<HTMLElement | null>(null);\r\n const [isRendered, setIsRendered] = useState(false);\r\n\r\n const isControlled = typeof open === \"boolean\";\r\n const shouldBeOpen = isControlled ? open : true;\r\n const overlayRef = useRef<HTMLDivElement>(null);\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const closeBtnRef = useRef<HTMLButtonElement>(null);\r\n const openerRef = useRef<HTMLElement | null>(null);\r\n const focusablesRef = useRef<HTMLElement[]>([]);\r\n\r\n const uid = useId();\r\n const labelId = `${uid}-label`;\r\n\r\n const handleClose = useCallback(() => {\r\n setIsVisible(false);\r\n window.setTimeout(() => onClose(), 200);\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n openerRef.current = (document.activeElement as HTMLElement) ?? null;\r\n\r\n let portal = document.getElementById(portalId);\r\n if (!portal) {\r\n portal = document.createElement(\"div\");\r\n portal.id = portalId;\r\n document.body.appendChild(portal);\r\n }\r\n setPortalElement(portal);\r\n document.body.classList.add(\"noScroll\");\r\n\r\n const siblings = Array.from(document.body.children) as HTMLElement[];\r\n const hidden: HTMLElement[] = [];\r\n siblings.forEach((el) => {\r\n if (el !== portal && !el.hasAttribute(\"aria-hidden\")) {\r\n el.setAttribute(\"aria-hidden\", \"true\");\r\n hidden.push(el);\r\n }\r\n });\r\n\r\n const handleEsc = (e: globalThis.KeyboardEvent) => {\r\n if (e.key === \"Escape\") handleClose();\r\n };\r\n document.addEventListener(\"keydown\", handleEsc);\r\n\r\n return () => {\r\n document.body.classList.remove(\"noScroll\");\r\n document.removeEventListener(\"keydown\", handleEsc);\r\n hidden.forEach((el) => el.removeAttribute(\"aria-hidden\"));\r\n openerRef.current?.focus?.();\r\n setPortalElement(null);\r\n };\r\n }, [isRendered, portalId, handleClose]);\r\n\r\n useEffect(() => {\r\n if (!isRendered) return;\r\n\r\n requestAnimationFrame(() => {\r\n setIsVisible(true);\r\n\r\n if (dialogRef.current) {\r\n focusablesRef.current = Array.from(\r\n dialogRef.current.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\r\n }\r\n\r\n (\r\n focusablesRef.current[0] ??\r\n closeBtnRef.current ??\r\n dialogRef.current\r\n )?.focus?.();\r\n });\r\n }, [isRendered]);\r\n\r\n useEffect(() => {\r\n if (shouldBeOpen) {\r\n setIsRendered(true);\r\n } else if (isControlled) {\r\n setIsVisible(false);\r\n const t = window.setTimeout(() => setIsRendered(false), 200);\r\n return () => window.clearTimeout(t);\r\n } else {\r\n setIsRendered(false);\r\n }\r\n }, [shouldBeOpen, isControlled]);\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== \"Tab\") return;\r\n const list = focusablesRef.current;\r\n if (!list.length) return;\r\n\r\n const first = list[0];\r\n const last = list[list.length - 1];\r\n\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n if (!isRendered || !portalElement) return null;\r\n\r\n const contentClassName = combineClassNames(\r\n classMap.content,\r\n className,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n );\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n ref={overlayRef}\r\n className={combineClassNames(\r\n classMap.overlay,\r\n isVisible ? classMap.visible : classMap.hidden,\r\n )}\r\n onClick={handleClose}\r\n role=\"presentation\"\r\n data-testid={testId}\r\n >\r\n <div\r\n ref={dialogRef}\r\n className={contentClassName}\r\n onClick={(e) => e.stopPropagation()}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={labelId}\r\n tabIndex={-1}\r\n onKeyDown={handleKeyDown}\r\n data-testid={`${testId}-content`}\r\n >\r\n <h2 id={labelId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Modal Dialog\r\n </h2>\r\n <IconButton\r\n ref={closeBtnRef}\r\n className={classMap.closeButton}\r\n state=\"error\"\r\n size=\"small\"\r\n icon={CloseIcon}\r\n ariaLabel=\"Close modal\"\r\n onClick={(e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n handleClose();\r\n }}\r\n title=\"Close\"\r\n data-testid={`${testId}-close`}\r\n type=\"button\"\r\n />\r\n\r\n {children}\r\n </div>\r\n </div>,\r\n portalElement,\r\n );\r\n};\r\n\r\nBaseModal.displayName = \"BaseModal\";\r\nexport default BaseModal;\r\n","import React from \"react\";\r\nimport BaseModal from \"../ModalBase\";\r\nimport \"./Modal.scss\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport { ModalProps } from \"../Modal.types\";\r\n\r\nconst classes = {\r\n overlay: \"modal_overlay\",\r\n visible: \"modal_visible\",\r\n hidden: \"modal_hidden\",\r\n content: \"modal_content\",\r\n closeButton: \"modal_close_button\",\r\n\r\n shadowNone: \"modal_shadow-None\",\r\n shadowLight: \"modal_shadow-Light\",\r\n shadowMedium: \"modal_shadow-Medium\",\r\n shadowStrong: \"modal_shadow-Strong\",\r\n shadowIntense: \"modal_shadow-Intense\",\r\n\r\n roundNone: \"modal_round-None\",\r\n roundSmall: \"modal_round-Small\",\r\n roundMedium: \"modal_round-Medium\",\r\n roundLarge: \"modal_round-Large\",\r\n};\r\n\r\nconst Modal: React.FC<ModalProps> = (props) => {\r\n return <BaseModal {...props} IconButton={IconButton} classMap={classes} />;\r\n};\r\nModal.displayName = \"Modal\";\r\nexport default Modal;\r\n"],"names":["getDefaultRounding","getDefaultShadow","IconButton","useState","useRef","useId","useCallback","useEffect","combineClassNames","capitalize","jsx","jsxs","CloseIcon"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollToTop-Bdm78oOs.js","sources":["../../src/Icons/ArrowUpIcon.tsx","../../src/components/ScrollToTop/ScrollToTopBase.tsx","../../src/components/ScrollToTop/core/ScrollToTop.tsx"],"sourcesContent":["const ArrowUpIcon: 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=\"M12 21L12 3M12 3L20.5 11.5M12 3L3.5 11.5\"\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 ArrowUpIcon;\r\n","import React, { useEffect, useState, useMemo } from \"react\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\nimport { ScrollToTopBaseProps } from \"./ScrollToTop.types\";\r\n\r\nconst ScrollToTopBase: React.FC<ScrollToTopBaseProps> = ({\r\n classMap,\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n IconComponent,\r\n offset = 300,\r\n className = \"\",\r\n \"data-testid\": testId = \"scroll\",\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n let ticking = false;\r\n\r\n const update = () => {\r\n setIsVisible(window.scrollY > offset);\r\n ticking = false;\r\n };\r\n\r\n const onScroll = () => {\r\n if (!ticking) {\r\n ticking = true;\r\n requestAnimationFrame(update);\r\n }\r\n };\r\n\r\n update();\r\n\r\n window.addEventListener(\"scroll\", onScroll, { passive: true });\r\n return () => window.removeEventListener(\"scroll\", onScroll);\r\n }, [offset]);\r\n\r\n const scrollToTop = () => {\r\n if (typeof window === \"undefined\") return;\r\n const prefersReduced = window.matchMedia?.(\r\n \"(prefers-reduced-motion: reduce)\"\r\n ).matches;\r\n window.scrollTo({ top: 0, behavior: prefersReduced ? \"auto\" : \"smooth\" });\r\n };\r\n\r\n const buttonClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.button,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`]\r\n ),\r\n [classMap, shadow, rounding]\r\n );\r\n\r\n const iconClass = useMemo(() => combineClassNames(classMap.icon), [classMap]);\r\n\r\n return (\r\n <div\r\n className={combineClassNames(classMap.wrapper, className)}\r\n data-testid={testId}\r\n >\r\n {isVisible && (\r\n <button\r\n type=\"button\"\r\n onClick={scrollToTop}\r\n className={buttonClass}\r\n aria-label=\"Scroll to top\"\r\n title=\"Scroll to top\"\r\n data-testid={`${testId}-button`}\r\n >\r\n <IconComponent\r\n className={iconClass}\r\n aria-hidden=\"true\"\r\n focusable={false}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nScrollToTopBase.displayName = \"ScrollToTopBase\";\r\nexport default ScrollToTopBase;\r\n","import React from \"react\";\r\nimport ScrollToTopBase from \"../ScrollToTopBase\";\r\nimport \"./STT.scss\";\r\nimport { ArrowUpIcon } from \"@/Icons\";\r\nimport { ScrollToTopProps } from \"../ScrollToTop.types\";\r\n\r\nconst classes = {\r\n wrapper: \"scrollToTop\",\r\n button: \"scrollToTop_button\",\r\n icon: \"scrollToTop_icon\",\r\n\r\n shadowNone: \"scrollToTop_shadow-None\",\r\n shadowLight: \"scrollToTop_shadow-Light\",\r\n shadowMedium: \"scrollToTop_shadow-Medium\",\r\n shadowStrong: \"scrollToTop_shadow-Strong\",\r\n shadowIntense: \"scrollToTop_shadow-Intense\",\r\n\r\n roundNone: \"scrollToTop_round-None\",\r\n roundSmall: \"scrollToTop_round-Small\",\r\n roundMedium: \"scrollToTop_round-Medium\",\r\n roundLarge: \"scrollToTop_round-Large\",\r\n};\r\n\r\nconst ScrollToTopButton: React.FC<ScrollToTopProps> = (props) => (\r\n <ScrollToTopBase {...props} classMap={classes} IconComponent={ArrowUpIcon} />\r\n);\r\nScrollToTopButton.displayName = \"ScrollToTopButton\";\r\nexport default ScrollToTopButton;\r\n"],"names":[],"mappings":";;;;;AAAA,MAAM,cAAuD,CAAC,UAC5D;AAAA,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,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB;AACH;ACTF,MAAM,kBAAkD,CAAC;AAAA,EACvD;AAAA,EACA,WAAW,mBAAA;AAAA,EACX,SAAS,iBAAA;AAAA,EACT;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe,SAAS;AAC1B,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,YAAa;AAEnC,QAAI,UAAU;AAEd,UAAM,SAAS,MAAM;AACnB,mBAAa,OAAO,UAAU,MAAM;AACpC,gBAAU;AAAA,IACZ;AAEA,UAAM,WAAW,MAAM;AACrB,UAAI,CAAC,SAAS;AACZ,kBAAU;AACV,8BAAsB,MAAM;AAAA,MAC9B;AAAA,IACF;AAEA,WAAA;AAEA,WAAO,iBAAiB,UAAU,UAAU,EAAE,SAAS,MAAM;AAC7D,WAAO,MAAM,OAAO,oBAAoB,UAAU,QAAQ;AAAA,EAC5D,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,cAAc,MAAM;;AACxB,QAAI,OAAO,WAAW,YAAa;AACnC,UAAM,kBAAiB,YAAO,eAAP;AAAA;AAAA,MACrB;AAAA,MACA;AACF,WAAO,SAAS,EAAE,KAAK,GAAG,UAAU,iBAAiB,SAAS,UAAU;AAAA,EAC1E;AAEA,QAAM,cAAc;AAAA,IAClB,MACE;AAAA,MACE,SAAS;AAAA,MACT,UAAU,SAAS,SAAS,WAAW,MAAM,CAAC,EAAE;AAAA,MAChD,YAAY,SAAS,QAAQ,WAAW,QAAQ,CAAC,EAAE;AAAA,IAAA;AAAA,IAEvD,CAAC,UAAU,QAAQ,QAAQ;AAAA,EAAA;AAG7B,QAAM,YAAY,QAAQ,MAAM,kBAAkB,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC;AAE5E,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,kBAAkB,SAAS,SAAS,SAAS;AAAA,MACxD,eAAa;AAAA,MAEZ,UAAA,aACC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAW;AAAA,UACX,cAAW;AAAA,UACX,OAAM;AAAA,UACN,eAAa,GAAG,MAAM;AAAA,UAEtB,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,cACX,eAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QACb;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAIR;AAEA,gBAAgB,cAAc;AClF9B,MAAM,UAAU;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EAEN,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EAEf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AACd;AAEA,MAAM,oBAAgD,CAAC,UACrD,oBAAC,iBAAA,EAAiB,GAAG,OAAO,UAAU,SAAS,eAAe,YAAA,CAAa;AAE7E,kBAAkB,cAAc;"}
|
|
@@ -117,4 +117,4 @@ const classes = {
|
|
|
117
117
|
const ScrollToTopButton = (props) => /* @__PURE__ */ jsxRuntime.jsx(ScrollToTopBase, { ...props, classMap: classes, IconComponent: ArrowUpIcon });
|
|
118
118
|
ScrollToTopButton.displayName = "ScrollToTopButton";
|
|
119
119
|
exports.ScrollToTopButton = ScrollToTopButton;
|
|
120
|
-
//# sourceMappingURL=
|
|
120
|
+
//# sourceMappingURL=ScrollToTop-DKOwe6z3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollToTop-DKOwe6z3.cjs","sources":["../../src/Icons/ArrowUpIcon.tsx","../../src/components/ScrollToTop/ScrollToTopBase.tsx","../../src/components/ScrollToTop/core/ScrollToTop.tsx"],"sourcesContent":["const ArrowUpIcon: 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=\"M12 21L12 3M12 3L20.5 11.5M12 3L3.5 11.5\"\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 ArrowUpIcon;\r\n","import React, { useEffect, useState, useMemo } from \"react\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\nimport { ScrollToTopBaseProps } from \"./ScrollToTop.types\";\r\n\r\nconst ScrollToTopBase: React.FC<ScrollToTopBaseProps> = ({\r\n classMap,\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n IconComponent,\r\n offset = 300,\r\n className = \"\",\r\n \"data-testid\": testId = \"scroll\",\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n if (typeof window === \"undefined\") return;\r\n\r\n let ticking = false;\r\n\r\n const update = () => {\r\n setIsVisible(window.scrollY > offset);\r\n ticking = false;\r\n };\r\n\r\n const onScroll = () => {\r\n if (!ticking) {\r\n ticking = true;\r\n requestAnimationFrame(update);\r\n }\r\n };\r\n\r\n update();\r\n\r\n window.addEventListener(\"scroll\", onScroll, { passive: true });\r\n return () => window.removeEventListener(\"scroll\", onScroll);\r\n }, [offset]);\r\n\r\n const scrollToTop = () => {\r\n if (typeof window === \"undefined\") return;\r\n const prefersReduced = window.matchMedia?.(\r\n \"(prefers-reduced-motion: reduce)\"\r\n ).matches;\r\n window.scrollTo({ top: 0, behavior: prefersReduced ? \"auto\" : \"smooth\" });\r\n };\r\n\r\n const buttonClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.button,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`]\r\n ),\r\n [classMap, shadow, rounding]\r\n );\r\n\r\n const iconClass = useMemo(() => combineClassNames(classMap.icon), [classMap]);\r\n\r\n return (\r\n <div\r\n className={combineClassNames(classMap.wrapper, className)}\r\n data-testid={testId}\r\n >\r\n {isVisible && (\r\n <button\r\n type=\"button\"\r\n onClick={scrollToTop}\r\n className={buttonClass}\r\n aria-label=\"Scroll to top\"\r\n title=\"Scroll to top\"\r\n data-testid={`${testId}-button`}\r\n >\r\n <IconComponent\r\n className={iconClass}\r\n aria-hidden=\"true\"\r\n focusable={false}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nScrollToTopBase.displayName = \"ScrollToTopBase\";\r\nexport default ScrollToTopBase;\r\n","import React from \"react\";\r\nimport ScrollToTopBase from \"../ScrollToTopBase\";\r\nimport \"./STT.scss\";\r\nimport { ArrowUpIcon } from \"@/Icons\";\r\nimport { ScrollToTopProps } from \"../ScrollToTop.types\";\r\n\r\nconst classes = {\r\n wrapper: \"scrollToTop\",\r\n button: \"scrollToTop_button\",\r\n icon: \"scrollToTop_icon\",\r\n\r\n shadowNone: \"scrollToTop_shadow-None\",\r\n shadowLight: \"scrollToTop_shadow-Light\",\r\n shadowMedium: \"scrollToTop_shadow-Medium\",\r\n shadowStrong: \"scrollToTop_shadow-Strong\",\r\n shadowIntense: \"scrollToTop_shadow-Intense\",\r\n\r\n roundNone: \"scrollToTop_round-None\",\r\n roundSmall: \"scrollToTop_round-Small\",\r\n roundMedium: \"scrollToTop_round-Medium\",\r\n roundLarge: \"scrollToTop_round-Large\",\r\n};\r\n\r\nconst ScrollToTopButton: React.FC<ScrollToTopProps> = (props) => (\r\n <ScrollToTopBase {...props} classMap={classes} IconComponent={ArrowUpIcon} />\r\n);\r\nScrollToTopButton.displayName = \"ScrollToTopButton\";\r\nexport default ScrollToTopButton;\r\n"],"names":["jsx","getDefaultRounding","getDefaultShadow","useState","useEffect","useMemo","combineClassNames","capitalize"],"mappings":"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"}
|
package/dist/core/ScrollToTop.js
CHANGED
|
@@ -128,6 +128,16 @@ const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
|
128
128
|
"--primary-color-light": adjustLightness(primaryColor, 10),
|
|
129
129
|
"--primary-color-hover": adjustLightness(primaryColor, -10),
|
|
130
130
|
"--text-color-primary": forceTextColor ?? getAccessibleTextColor(primaryColor),
|
|
131
|
+
"--text-color-primary-contrast": forceTextColor ?? getAccessibleTextColor(backgroundColor),
|
|
132
|
+
"--text-color": getAccessibleTextColor(backgroundColor),
|
|
133
|
+
"--text-color-light": adjustLightness(
|
|
134
|
+
getAccessibleTextColor(backgroundColor),
|
|
135
|
+
20
|
|
136
|
+
),
|
|
137
|
+
"--text-color-lighter": adjustLightness(
|
|
138
|
+
getAccessibleTextColor(backgroundColor),
|
|
139
|
+
40
|
|
140
|
+
),
|
|
131
141
|
"--secondary-color": secondaryColor,
|
|
132
142
|
"--secondary-color-light": adjustLightness(secondaryColor, 10),
|
|
133
143
|
"--secondary-color-hover": adjustLightness(secondaryColor, -10),
|
|
@@ -146,12 +156,16 @@ const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
|
146
156
|
"--background-color-light": adjustLightness(backgroundColor, 10),
|
|
147
157
|
"--background-color-lighter": adjustLightness(backgroundColor, 20),
|
|
148
158
|
"--link-color": getAccessibleTextColor(backgroundColor),
|
|
149
|
-
"--link-color
|
|
159
|
+
"--link-hover-color": adjustLightness(
|
|
150
160
|
getAccessibleTextColor(backgroundColor),
|
|
151
161
|
-20
|
|
152
162
|
),
|
|
153
163
|
"--link-hover-color-primary": adjustLightness(primaryColor, -10),
|
|
154
|
-
"--link-hover-color-secondary": adjustLightness(secondaryColor, -10)
|
|
164
|
+
"--link-hover-color-secondary": adjustLightness(secondaryColor, -10),
|
|
165
|
+
"--link-hover-color-tertiary": adjustLightness(tertiaryColor, -10),
|
|
166
|
+
"--link-hover-color-quaternary": adjustLightness(quaternaryColor, -10),
|
|
167
|
+
"--focus-outline-color": getAccessibleTextColor(backgroundColor),
|
|
168
|
+
"--divider-color": adjustLightness(backgroundColor, -10)
|
|
155
169
|
};
|
|
156
170
|
const rootStyle = document.documentElement.style;
|
|
157
171
|
for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);
|
|
@@ -173,4 +187,4 @@ export {
|
|
|
173
187
|
ThemeProvider as T,
|
|
174
188
|
ThemeContext as a
|
|
175
189
|
};
|
|
176
|
-
//# sourceMappingURL=ThemeContext-
|
|
190
|
+
//# sourceMappingURL=ThemeContext-BEYRgPZ9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext-BEYRgPZ9.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 useMemo,\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\nfunction shallowEqualByName(a: { name: string }[], b: { name: string }[]) {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i].name !== b[i].name) return false;\r\n }\r\n return true;\r\n}\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 const [schemes, setSchemes] = useState(() => getAllColorSchemes());\r\n\r\n const customSchemesKey = useMemo(\r\n () => JSON.stringify(customSchemes ?? []),\r\n [customSchemes],\r\n );\r\n\r\n useEffect(() => {\r\n try {\r\n const parsed = JSON.parse(customSchemesKey);\r\n if (Array.isArray(parsed) && parsed.length > 0) {\r\n registerColorScheme(parsed);\r\n }\r\n } catch {\r\n console.error(\"Failed to parse custom schemes\");\r\n }\r\n\r\n const next = getAllColorSchemes();\r\n setSchemes((prev) => (shallowEqualByName(prev, next) ? prev : next));\r\n }, [customSchemesKey]);\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 \"--text-color-primary-contrast\":\r\n forceTextColor ?? getAccessibleTextColor(backgroundColor),\r\n \"--text-color\": getAccessibleTextColor(backgroundColor),\r\n \"--text-color-light\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n 20,\r\n ),\r\n \"--text-color-lighter\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n 40,\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-hover-color\": 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 \"--link-hover-color-tertiary\": adjustLightness(tertiaryColor, -10),\r\n \"--link-hover-color-quaternary\": adjustLightness(quaternaryColor, -10),\r\n\r\n \"--focus-outline-color\": getAccessibleTextColor(backgroundColor),\r\n \"--divider-color\": adjustLightness(backgroundColor, -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\r\n value={{ selectedScheme, setSelectedScheme, schemes }}\r\n >\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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"}
|
|
@@ -129,6 +129,16 @@ const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
|
129
129
|
"--primary-color-light": adjustLightness(primaryColor, 10),
|
|
130
130
|
"--primary-color-hover": adjustLightness(primaryColor, -10),
|
|
131
131
|
"--text-color-primary": forceTextColor ?? getAccessibleTextColor(primaryColor),
|
|
132
|
+
"--text-color-primary-contrast": forceTextColor ?? getAccessibleTextColor(backgroundColor),
|
|
133
|
+
"--text-color": getAccessibleTextColor(backgroundColor),
|
|
134
|
+
"--text-color-light": adjustLightness(
|
|
135
|
+
getAccessibleTextColor(backgroundColor),
|
|
136
|
+
20
|
|
137
|
+
),
|
|
138
|
+
"--text-color-lighter": adjustLightness(
|
|
139
|
+
getAccessibleTextColor(backgroundColor),
|
|
140
|
+
40
|
|
141
|
+
),
|
|
132
142
|
"--secondary-color": secondaryColor,
|
|
133
143
|
"--secondary-color-light": adjustLightness(secondaryColor, 10),
|
|
134
144
|
"--secondary-color-hover": adjustLightness(secondaryColor, -10),
|
|
@@ -147,12 +157,16 @@ const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
|
147
157
|
"--background-color-light": adjustLightness(backgroundColor, 10),
|
|
148
158
|
"--background-color-lighter": adjustLightness(backgroundColor, 20),
|
|
149
159
|
"--link-color": getAccessibleTextColor(backgroundColor),
|
|
150
|
-
"--link-color
|
|
160
|
+
"--link-hover-color": adjustLightness(
|
|
151
161
|
getAccessibleTextColor(backgroundColor),
|
|
152
162
|
-20
|
|
153
163
|
),
|
|
154
164
|
"--link-hover-color-primary": adjustLightness(primaryColor, -10),
|
|
155
|
-
"--link-hover-color-secondary": adjustLightness(secondaryColor, -10)
|
|
165
|
+
"--link-hover-color-secondary": adjustLightness(secondaryColor, -10),
|
|
166
|
+
"--link-hover-color-tertiary": adjustLightness(tertiaryColor, -10),
|
|
167
|
+
"--link-hover-color-quaternary": adjustLightness(quaternaryColor, -10),
|
|
168
|
+
"--focus-outline-color": getAccessibleTextColor(backgroundColor),
|
|
169
|
+
"--divider-color": adjustLightness(backgroundColor, -10)
|
|
156
170
|
};
|
|
157
171
|
const rootStyle = document.documentElement.style;
|
|
158
172
|
for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);
|
|
@@ -172,4 +186,4 @@ const ThemeProvider = ({ children, customSchemes = [], initialScheme }) => {
|
|
|
172
186
|
};
|
|
173
187
|
exports.ThemeContext = ThemeContext;
|
|
174
188
|
exports.ThemeProvider = ThemeProvider;
|
|
175
|
-
//# sourceMappingURL=ThemeContext-
|
|
189
|
+
//# sourceMappingURL=ThemeContext-C-0mwEv4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeContext-C-0mwEv4.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 useMemo,\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\nfunction shallowEqualByName(a: { name: string }[], b: { name: string }[]) {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i].name !== b[i].name) return false;\r\n }\r\n return true;\r\n}\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 const [schemes, setSchemes] = useState(() => getAllColorSchemes());\r\n\r\n const customSchemesKey = useMemo(\r\n () => JSON.stringify(customSchemes ?? []),\r\n [customSchemes],\r\n );\r\n\r\n useEffect(() => {\r\n try {\r\n const parsed = JSON.parse(customSchemesKey);\r\n if (Array.isArray(parsed) && parsed.length > 0) {\r\n registerColorScheme(parsed);\r\n }\r\n } catch {\r\n console.error(\"Failed to parse custom schemes\");\r\n }\r\n\r\n const next = getAllColorSchemes();\r\n setSchemes((prev) => (shallowEqualByName(prev, next) ? prev : next));\r\n }, [customSchemesKey]);\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 \"--text-color-primary-contrast\":\r\n forceTextColor ?? getAccessibleTextColor(backgroundColor),\r\n \"--text-color\": getAccessibleTextColor(backgroundColor),\r\n \"--text-color-light\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n 20,\r\n ),\r\n \"--text-color-lighter\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n 40,\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-hover-color\": 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 \"--link-hover-color-tertiary\": adjustLightness(tertiaryColor, -10),\r\n \"--link-hover-color-quaternary\": adjustLightness(quaternaryColor, -10),\r\n\r\n \"--focus-outline-color\": getAccessibleTextColor(backgroundColor),\r\n \"--divider-color\": adjustLightness(backgroundColor, -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\r\n value={{ selectedScheme, setSelectedScheme, schemes }}\r\n >\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":["createContext","colorSchemes","getDefaultColorSchemeName","useState","getAllColorSchemes","useMemo","useEffect","registerColorScheme","useLayoutEffect","jsx"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const ThemeContext = require("./ThemeContext-
|
|
3
|
+
const ThemeContext = require("./ThemeContext-C-0mwEv4.cjs");
|
|
4
4
|
exports.ThemeContext = ThemeContext.ThemeContext;
|
|
5
5
|
exports.ThemeProvider = ThemeContext.ThemeProvider;
|
|
6
6
|
//# sourceMappingURL=ThemeProvider.cjs.js.map
|