@purpur/library 9.7.5 → 9.8.1
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/CHANGELOG.json +54 -0
- package/CHANGELOG.md +25 -1
- package/dist/LICENSE.txt +7 -7
- package/dist/{RichText-yobCUjTD.js → RichText-BAVZadzi.js} +2 -2
- package/dist/{RichText-yobCUjTD.js.map → RichText-BAVZadzi.js.map} +1 -1
- package/dist/{RichText-jZ-sHV-u.mjs → RichText-D4vznH1B.mjs} +2 -2
- package/dist/{RichText-jZ-sHV-u.mjs.map → RichText-D4vznH1B.mjs.map} +1 -1
- package/dist/{ThemeProvider-DiDBfyFA.mjs → ThemeProvider-BJ25_asg.mjs} +13 -13
- package/dist/{ThemeProvider-DiDBfyFA.mjs.map → ThemeProvider-BJ25_asg.mjs.map} +1 -1
- package/dist/{ThemeProvider-D7oXcAde.js → ThemeProvider-BJGm3zai.js} +2 -2
- package/dist/{ThemeProvider-D7oXcAde.js.map → ThemeProvider-BJGm3zai.js.map} +1 -1
- package/dist/{accordion-CIU4U8-4.mjs → accordion-B6OoQ4uZ.mjs} +2 -2
- package/dist/{accordion-CIU4U8-4.mjs.map → accordion-B6OoQ4uZ.mjs.map} +1 -1
- package/dist/{accordion-DyhOG54L.js → accordion-BfpN5h4C.js} +2 -2
- package/dist/{accordion-DyhOG54L.js.map → accordion-BfpN5h4C.js.map} +1 -1
- package/dist/accordion.cjs.js +1 -1
- package/dist/accordion.es.js +1 -1
- package/dist/{autocomplete-3kV1btuI.js → autocomplete-CcVDJbwS.js} +2 -2
- package/dist/{autocomplete-3kV1btuI.js.map → autocomplete-CcVDJbwS.js.map} +1 -1
- package/dist/{autocomplete-BEGRn-Wh.mjs → autocomplete-DF17Zm7Q.mjs} +3 -3
- package/dist/{autocomplete-BEGRn-Wh.mjs.map → autocomplete-DF17Zm7Q.mjs.map} +1 -1
- package/dist/autocomplete.cjs.js +1 -1
- package/dist/autocomplete.es.js +1 -1
- package/dist/avatar-BDF2KuEh.mjs +28 -0
- package/dist/avatar-BDF2KuEh.mjs.map +1 -0
- package/dist/avatar-nDQ8fk-2.js +2 -0
- package/dist/avatar-nDQ8fk-2.js.map +1 -0
- package/dist/avatar.cjs.js +1 -1
- package/dist/avatar.es.js +1 -1
- package/dist/{card-DFdUs5RG.js → card-pdsBEJif.js} +2 -2
- package/dist/{card-DFdUs5RG.js.map → card-pdsBEJif.js.map} +1 -1
- package/dist/{card-C2mdp-ur.mjs → card-t2ZkZ82G.mjs} +2 -2
- package/dist/{card-C2mdp-ur.mjs.map → card-t2ZkZ82G.mjs.map} +1 -1
- package/dist/card.cjs.js +1 -1
- package/dist/card.es.js +1 -1
- package/dist/{checkbox-BHTx89JQ.mjs → checkbox-DaRtZXrE.mjs} +2 -2
- package/dist/{checkbox-BHTx89JQ.mjs.map → checkbox-DaRtZXrE.mjs.map} +1 -1
- package/dist/{checkbox-CDNcNv6d.js → checkbox-qjWQEoa5.js} +2 -2
- package/dist/{checkbox-CDNcNv6d.js.map → checkbox-qjWQEoa5.js.map} +1 -1
- package/dist/checkbox.cjs.js +1 -1
- package/dist/checkbox.es.js +1 -1
- package/dist/comparison-table-DHFpydbq.js +2 -0
- package/dist/comparison-table-DHFpydbq.js.map +1 -0
- package/dist/comparison-table-DQJL1IVC.mjs +293 -0
- package/dist/comparison-table-DQJL1IVC.mjs.map +1 -0
- package/dist/comparison-table.cjs.js +1 -1
- package/dist/comparison-table.es.js +1 -1
- package/dist/components/accordion/src/accordion.visual.fixtures.d.ts +13 -0
- package/dist/components/accordion/src/accordion.visual.fixtures.d.ts.map +1 -0
- package/dist/components/alert-badge/src/alert-badge.visual.fixtures.d.ts +15 -0
- package/dist/components/alert-badge/src/alert-badge.visual.fixtures.d.ts.map +1 -0
- package/dist/components/avatar/src/avatar.d.ts +2 -2
- package/dist/components/avatar/src/avatar.d.ts.map +1 -1
- package/dist/components/avatar/src/avatar.visual.fixtures.d.ts +14 -0
- package/dist/components/avatar/src/avatar.visual.fixtures.d.ts.map +1 -0
- package/dist/components/badge/src/badge.visual.fixtures.d.ts +13 -0
- package/dist/components/badge/src/badge.visual.fixtures.d.ts.map +1 -0
- package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts +1 -1
- package/dist/components/comparison-table/src/components/OptionCard/option-card.d.ts.map +1 -1
- package/dist/components/countdown/src/countdown.d.ts.map +1 -1
- package/dist/components/countdown/src/countdown.types.d.ts +10 -0
- package/dist/components/countdown/src/countdown.types.d.ts.map +1 -1
- package/dist/components/countdown/src/countdown.visual.fixtures.d.ts +13 -0
- package/dist/components/countdown/src/countdown.visual.fixtures.d.ts.map +1 -0
- package/dist/components/countdown/src/utils.d.ts +1 -1
- package/dist/components/countdown/src/utils.d.ts.map +1 -1
- package/dist/components/footer/src/telia-logo.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner-types.d.ts +48 -0
- package/dist/components/hero-banner/src/hero-banner-types.d.ts.map +1 -0
- package/dist/components/hero-banner/src/hero-banner.d.ts +5 -48
- package/dist/components/hero-banner/src/hero-banner.d.ts.map +1 -1
- package/dist/components/hero-banner/src/hero-banner.visual.fixtures.d.ts +1 -1
- package/dist/components/hero-banner/src/hero-banner.visual.fixtures.d.ts.map +1 -1
- package/dist/components/search-field/src/search-field.visual.fixtures.d.ts +14 -0
- package/dist/components/search-field/src/search-field.visual.fixtures.d.ts.map +1 -0
- package/dist/components-metadata.js +2 -2
- package/dist/{content-block-CakKeJtN.mjs → content-block-CDMrz41K.mjs} +2 -2
- package/dist/{content-block-CakKeJtN.mjs.map → content-block-CDMrz41K.mjs.map} +1 -1
- package/dist/{content-block-CrekbIfe.js → content-block-DyYAnL2e.js} +2 -2
- package/dist/{content-block-CrekbIfe.js.map → content-block-DyYAnL2e.js.map} +1 -1
- package/dist/content-block.cjs.js +1 -1
- package/dist/content-block.es.js +1 -1
- package/dist/countdown-5Ni6OlVY.mjs +189 -0
- package/dist/countdown-5Ni6OlVY.mjs.map +1 -0
- package/dist/countdown-CGXJyzB2.js +2 -0
- package/dist/countdown-CGXJyzB2.js.map +1 -0
- package/dist/countdown.cjs.js +1 -1
- package/dist/countdown.es.js +1 -1
- package/dist/{date-field-BKKty89_.js → date-field-CKxEWHG3.js} +2 -2
- package/dist/{date-field-BKKty89_.js.map → date-field-CKxEWHG3.js.map} +1 -1
- package/dist/{date-field-Cv5CKR1y.mjs → date-field-HEFdHIxk.mjs} +2 -2
- package/dist/{date-field-Cv5CKR1y.mjs.map → date-field-HEFdHIxk.mjs.map} +1 -1
- package/dist/date-field.cjs.js +1 -1
- package/dist/date-field.es.js +1 -1
- package/dist/{date-picker-CIizn3Pv.js → date-picker-CDBwkAJI.js} +2 -2
- package/dist/{date-picker-CIizn3Pv.js.map → date-picker-CDBwkAJI.js.map} +1 -1
- package/dist/{date-picker-DixxW60s.mjs → date-picker-cQewKIMN.mjs} +6 -6
- package/dist/{date-picker-DixxW60s.mjs.map → date-picker-cQewKIMN.mjs.map} +1 -1
- package/dist/date-picker.cjs.js +1 -1
- package/dist/date-picker.es.js +1 -1
- package/dist/{date-range-field-D8vLeSwp.js → date-range-field-D7Hn9FGN.js} +2 -2
- package/dist/{date-range-field-D8vLeSwp.js.map → date-range-field-D7Hn9FGN.js.map} +1 -1
- package/dist/{date-range-field-CFcjprIl.mjs → date-range-field-_WctWD29.mjs} +2 -2
- package/dist/{date-range-field-CFcjprIl.mjs.map → date-range-field-_WctWD29.mjs.map} +1 -1
- package/dist/date-range-field.cjs.js +1 -1
- package/dist/date-range-field.es.js +1 -1
- package/dist/{drawer-DyhsP34o.js → drawer-DyLQfvEh.js} +2 -2
- package/dist/{drawer-DyhsP34o.js.map → drawer-DyLQfvEh.js.map} +1 -1
- package/dist/{drawer-BzkRd9F0.mjs → drawer-cIUx6WSZ.mjs} +3 -3
- package/dist/{drawer-BzkRd9F0.mjs.map → drawer-cIUx6WSZ.mjs.map} +1 -1
- package/dist/drawer.cjs.js +1 -1
- package/dist/drawer.es.js +1 -1
- package/dist/{dropdown-CMO_VD5e.mjs → dropdown-CDK_eRm3.mjs} +3 -3
- package/dist/{dropdown-CMO_VD5e.mjs.map → dropdown-CDK_eRm3.mjs.map} +1 -1
- package/dist/{dropdown-DJKNQnuo.js → dropdown-_FLHLyPL.js} +2 -2
- package/dist/{dropdown-DJKNQnuo.js.map → dropdown-_FLHLyPL.js.map} +1 -1
- package/dist/dropdown.cjs.js +1 -1
- package/dist/dropdown.es.js +1 -1
- package/dist/footer-CS6ZfztM.js +2 -0
- package/dist/footer-CS6ZfztM.js.map +1 -0
- package/dist/{footer-DenAcikt.mjs → footer-OJXbTn1e.mjs} +87 -97
- package/dist/footer-OJXbTn1e.mjs.map +1 -0
- package/dist/footer.cjs.js +1 -1
- package/dist/footer.es.js +1 -1
- package/dist/hero-banner--v-ezYMr.js +2 -0
- package/dist/hero-banner--v-ezYMr.js.map +1 -0
- package/dist/{hero-banner-B7xrDfzN.mjs → hero-banner-n9K-Jsdz.mjs} +78 -78
- package/dist/hero-banner-n9K-Jsdz.mjs.map +1 -0
- package/dist/hero-banner.cjs.js +1 -1
- package/dist/hero-banner.es.js +1 -1
- package/dist/library.cjs.js +1 -1
- package/dist/library.es.js +39 -39
- package/dist/{listbox-i6BQQ-NZ.mjs → listbox-CtV-Vcmy.mjs} +2 -2
- package/dist/{listbox-i6BQQ-NZ.mjs.map → listbox-CtV-Vcmy.mjs.map} +1 -1
- package/dist/{listbox-ATP4hOWF.js → listbox-lXO21cJV.js} +2 -2
- package/dist/{listbox-ATP4hOWF.js.map → listbox-lXO21cJV.js.map} +1 -1
- package/dist/listbox.cjs.js +1 -1
- package/dist/listbox.es.js +1 -1
- package/dist/{loading-Dwtkjstg.js → loading-B_0NjCnh.js} +2 -2
- package/dist/{loading-Dwtkjstg.js.map → loading-B_0NjCnh.js.map} +1 -1
- package/dist/{loading-r23nxJSz.mjs → loading-DqZBpMaa.mjs} +2 -2
- package/dist/{loading-r23nxJSz.mjs.map → loading-DqZBpMaa.mjs.map} +1 -1
- package/dist/loading.cjs.js +1 -1
- package/dist/loading.es.js +1 -1
- package/dist/{message-D9CDwcw9.mjs → message-CeXuAhmb.mjs} +3 -3
- package/dist/{message-D9CDwcw9.mjs.map → message-CeXuAhmb.mjs.map} +1 -1
- package/dist/{message-0yTS5pOF.js → message-DsGB-JFh.js} +2 -2
- package/dist/{message-0yTS5pOF.js.map → message-DsGB-JFh.js.map} +1 -1
- package/dist/message.cjs.js +1 -1
- package/dist/message.es.js +1 -1
- package/dist/{modal-EIP36327.mjs → modal-Bu1Zv5Ic.mjs} +4 -4
- package/dist/{modal-EIP36327.mjs.map → modal-Bu1Zv5Ic.mjs.map} +1 -1
- package/dist/{modal-DJn9idcw.js → modal-D0Qxrvx5.js} +2 -2
- package/dist/{modal-DJn9idcw.js.map → modal-D0Qxrvx5.js.map} +1 -1
- package/dist/modal.cjs.js +1 -1
- package/dist/modal.es.js +1 -1
- package/dist/{notification-B5bNNq86.js → notification-D2oClkX2.js} +2 -2
- package/dist/{notification-B5bNNq86.js.map → notification-D2oClkX2.js.map} +1 -1
- package/dist/{notification-BbQCmsnY.mjs → notification-DiVdy6E_.mjs} +2 -2
- package/dist/{notification-BbQCmsnY.mjs.map → notification-DiVdy6E_.mjs.map} +1 -1
- package/dist/notification.cjs.js +1 -1
- package/dist/notification.es.js +1 -1
- package/dist/{pagination-rFRdkHII.js → pagination-BDfaybj3.js} +2 -2
- package/dist/{pagination-rFRdkHII.js.map → pagination-BDfaybj3.js.map} +1 -1
- package/dist/{pagination-Cc_4zCQA.mjs → pagination-Bm38GKga.mjs} +2 -2
- package/dist/{pagination-Cc_4zCQA.mjs.map → pagination-Bm38GKga.mjs.map} +1 -1
- package/dist/pagination.cjs.js +1 -1
- package/dist/pagination.es.js +1 -1
- package/dist/{paragraph-By4jMjnH.js → paragraph-B8HFdNne.js} +2 -2
- package/dist/{paragraph-By4jMjnH.js.map → paragraph-B8HFdNne.js.map} +1 -1
- package/dist/{paragraph-DSxXmX_0.mjs → paragraph-CwAdFoIm.mjs} +3 -3
- package/dist/{paragraph-DSxXmX_0.mjs.map → paragraph-CwAdFoIm.mjs.map} +1 -1
- package/dist/paragraph.cjs.js +1 -1
- package/dist/paragraph.es.js +1 -1
- package/dist/{popover-DnGgzfQr.js → popover-BFozkeS3.js} +2 -2
- package/dist/{popover-DnGgzfQr.js.map → popover-BFozkeS3.js.map} +1 -1
- package/dist/{popover-DERrvReO.mjs → popover-DFPGkVJ6.mjs} +4 -4
- package/dist/{popover-DERrvReO.mjs.map → popover-DFPGkVJ6.mjs.map} +1 -1
- package/dist/popover.cjs.js +1 -1
- package/dist/popover.es.js +1 -1
- package/dist/{product-card-Bt-F0wKr.mjs → product-card-CxfHfJVV.mjs} +3 -3
- package/dist/{product-card-Bt-F0wKr.mjs.map → product-card-CxfHfJVV.mjs.map} +1 -1
- package/dist/{product-card-8X-Ld2d_.js → product-card-XxBwuxM-.js} +2 -2
- package/dist/{product-card-8X-Ld2d_.js.map → product-card-XxBwuxM-.js.map} +1 -1
- package/dist/product-card.cjs.js +1 -1
- package/dist/product-card.es.js +1 -1
- package/dist/{promotion-card-DKc2Cx1h.js → promotion-card-C1UoxzcV.js} +2 -2
- package/dist/{promotion-card-DKc2Cx1h.js.map → promotion-card-C1UoxzcV.js.map} +1 -1
- package/dist/{promotion-card-BnzIVNQ4.mjs → promotion-card-CooYPpFo.mjs} +38 -38
- package/dist/{promotion-card-BnzIVNQ4.mjs.map → promotion-card-CooYPpFo.mjs.map} +1 -1
- package/dist/promotion-card.cjs.js +1 -1
- package/dist/promotion-card.es.js +1 -1
- package/dist/purpur.css +1 -1
- package/dist/{quantity-selector-CvBvnMeB.mjs → quantity-selector-B4YnfmNb.mjs} +2 -2
- package/dist/{quantity-selector-CvBvnMeB.mjs.map → quantity-selector-B4YnfmNb.mjs.map} +1 -1
- package/dist/{quantity-selector-CDSfcTb1.js → quantity-selector-CTBoxiPO.js} +2 -2
- package/dist/{quantity-selector-CDSfcTb1.js.map → quantity-selector-CTBoxiPO.js.map} +1 -1
- package/dist/quantity-selector.cjs.js +1 -1
- package/dist/quantity-selector.es.js +1 -1
- package/dist/{radio-card-group-nrDi5EPK.js → radio-card-group-BXwkIIEw.js} +2 -2
- package/dist/{radio-card-group-nrDi5EPK.js.map → radio-card-group-BXwkIIEw.js.map} +1 -1
- package/dist/{radio-card-group-ZBXjYcQs.mjs → radio-card-group-Bn6SK0Wc.mjs} +2 -2
- package/dist/{radio-card-group-ZBXjYcQs.mjs.map → radio-card-group-Bn6SK0Wc.mjs.map} +1 -1
- package/dist/radio-card-group.cjs.js +1 -1
- package/dist/radio-card-group.es.js +1 -1
- package/dist/rich-text.cjs.js +1 -1
- package/dist/rich-text.es.js +1 -1
- package/dist/{search-field-DKyNh7pE.mjs → search-field-BPLzy3RR.mjs} +3 -3
- package/dist/{search-field-DKyNh7pE.mjs.map → search-field-BPLzy3RR.mjs.map} +1 -1
- package/dist/{search-field-2vdDbiT0.js → search-field-Dx4qCcrh.js} +2 -2
- package/dist/{search-field-2vdDbiT0.js.map → search-field-Dx4qCcrh.js.map} +1 -1
- package/dist/search-field.cjs.js +1 -1
- package/dist/search-field.es.js +1 -1
- package/dist/{stepper-e0qicwqd.mjs → stepper-DSl-YCMe.mjs} +2 -2
- package/dist/{stepper-e0qicwqd.mjs.map → stepper-DSl-YCMe.mjs.map} +1 -1
- package/dist/{stepper-5qMo_shq.js → stepper-eaxkBC7o.js} +2 -2
- package/dist/{stepper-5qMo_shq.js.map → stepper-eaxkBC7o.js.map} +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.es.js +1 -1
- package/dist/{table-i1Gs9e0e.mjs → table-D9MKkbPO.mjs} +9 -9
- package/dist/{table-i1Gs9e0e.mjs.map → table-D9MKkbPO.mjs.map} +1 -1
- package/dist/{table-BOCcBzSO.js → table-rS3hITtj.js} +2 -2
- package/dist/{table-BOCcBzSO.js.map → table-rS3hITtj.js.map} +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.es.js +1 -1
- package/dist/{text-area-D0truMT1.js → text-area-9RUldq6W.js} +2 -2
- package/dist/{text-area-D0truMT1.js.map → text-area-9RUldq6W.js.map} +1 -1
- package/dist/{text-area-IVH-k4MM.mjs → text-area-C58aZEPa.mjs} +3 -3
- package/dist/{text-area-IVH-k4MM.mjs.map → text-area-C58aZEPa.mjs.map} +1 -1
- package/dist/text-area.cjs.js +1 -1
- package/dist/text-area.es.js +1 -1
- package/dist/text-field-C2W13n15.js +2 -0
- package/dist/{text-field-CYJzQG3h.js.map → text-field-C2W13n15.js.map} +1 -1
- package/dist/{text-field-BQfxJobW.mjs → text-field-D8MMa6ij.mjs} +114 -114
- package/dist/{text-field-BQfxJobW.mjs.map → text-field-D8MMa6ij.mjs.map} +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.es.js +1 -1
- package/dist/theme.cjs.js +1 -1
- package/dist/theme.es.js +3 -3
- package/dist/{toggle-B8ZLUVar.js → toggle-BgrfdtmN.js} +2 -2
- package/dist/{toggle-B8ZLUVar.js.map → toggle-BgrfdtmN.js.map} +1 -1
- package/dist/{toggle-CY3J8BRX.mjs → toggle-Cg1KFa_2.mjs} +2 -2
- package/dist/{toggle-CY3J8BRX.mjs.map → toggle-Cg1KFa_2.mjs.map} +1 -1
- package/dist/toggle.cjs.js +1 -1
- package/dist/toggle.es.js +1 -1
- package/dist/tokens/color/variables.css +1 -1
- package/dist/tokens/color/variables.dark.css +1 -1
- package/dist/tokens/color/variables.dark.js +1 -1
- package/dist/tokens/color/variables.dark.json +1 -1
- package/dist/tokens/color/variables.dark.scss +1 -1
- package/dist/tokens/color/variables.js +1 -1
- package/dist/tokens/color/variables.json +1 -1
- package/dist/tokens/color/variables.scss +1 -1
- package/dist/tokens.cjs.js +1 -1
- package/dist/tokens.es.js +1 -1
- package/dist/{tooltip-CJGmJDFQ.js → tooltip-B-11qk-0.js} +2 -2
- package/dist/{tooltip-CJGmJDFQ.js.map → tooltip-B-11qk-0.js.map} +1 -1
- package/dist/{tooltip-RA-03bKs.mjs → tooltip-DngYHn5W.mjs} +4 -4
- package/dist/{tooltip-RA-03bKs.mjs.map → tooltip-DngYHn5W.mjs.map} +1 -1
- package/dist/tooltip.cjs.js +1 -1
- package/dist/tooltip.es.js +1 -1
- package/dist/{useColorScheme-B9DWd-LN.mjs → useColorScheme-B7lGBSe4.mjs} +2 -2
- package/dist/{useColorScheme-B9DWd-LN.mjs.map → useColorScheme-B7lGBSe4.mjs.map} +1 -1
- package/dist/useColorScheme-BHhPgv9q.js +2 -0
- package/dist/{useColorScheme-DbTQjxNB.js.map → useColorScheme-BHhPgv9q.js.map} +1 -1
- package/dist/useThemePortalContainer-CUcqV327.js +2 -0
- package/dist/{useThemePortalContainer-D9BYjEvT.js.map → useThemePortalContainer-CUcqV327.js.map} +1 -1
- package/dist/useThemePortalContainer-D13Xx24N.mjs +9 -0
- package/dist/{useThemePortalContainer-tFLTaYKN.mjs.map → useThemePortalContainer-D13Xx24N.mjs.map} +1 -1
- package/dist/{variables-B5hbV0Uy.mjs → variables-BrsAsWIF.mjs} +2 -2
- package/dist/{variables-B5hbV0Uy.mjs.map → variables-BrsAsWIF.mjs.map} +1 -1
- package/dist/{variables-DoI78zZc.js → variables-D1vNo1lO.js} +2 -2
- package/dist/{variables-DoI78zZc.js.map → variables-D1vNo1lO.js.map} +1 -1
- package/package.json +21 -21
- package/tokens/color/variables.css +1 -1
- package/tokens/color/variables.dark.css +1 -1
- package/tokens/color/variables.dark.js +1 -1
- package/tokens/color/variables.dark.json +1 -1
- package/tokens/color/variables.dark.scss +1 -1
- package/tokens/color/variables.js +1 -1
- package/tokens/color/variables.json +1 -1
- package/tokens/color/variables.scss +1 -1
- package/dist/avatar-CYnD57o4.js +0 -2
- package/dist/avatar-CYnD57o4.js.map +0 -1
- package/dist/avatar-CzbDD1MK.mjs +0 -27
- package/dist/avatar-CzbDD1MK.mjs.map +0 -1
- package/dist/comparison-table-0UDB2BTU.js +0 -2
- package/dist/comparison-table-0UDB2BTU.js.map +0 -1
- package/dist/comparison-table-CjTE-fHN.mjs +0 -292
- package/dist/comparison-table-CjTE-fHN.mjs.map +0 -1
- package/dist/countdown-BsLsEZBv.mjs +0 -179
- package/dist/countdown-BsLsEZBv.mjs.map +0 -1
- package/dist/countdown-hYrFLmRg.js +0 -2
- package/dist/countdown-hYrFLmRg.js.map +0 -1
- package/dist/footer-3Y-664-8.js +0 -2
- package/dist/footer-3Y-664-8.js.map +0 -1
- package/dist/footer-DenAcikt.mjs.map +0 -1
- package/dist/hero-banner-B7xrDfzN.mjs.map +0 -1
- package/dist/hero-banner-DthITuQ7.js +0 -2
- package/dist/hero-banner-DthITuQ7.js.map +0 -1
- package/dist/text-field-CYJzQG3h.js +0 -2
- package/dist/useColorScheme-DbTQjxNB.js +0 -2
- package/dist/useThemePortalContainer-D9BYjEvT.js +0 -2
- package/dist/useThemePortalContainer-tFLTaYKN.mjs +0 -9
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@purpur/library",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "9.8.1",
|
|
6
|
+
"tag": "@purpur/library_v9.8.1",
|
|
7
|
+
"date": "Thu, 18 Jun 2026 08:35:11 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"none": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "ComparisonTable: Update OptionCard description type to ReactNode for better flexibility"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"comment": "Paragraph: cascade custom className passed to <Paragraph> to the end of classList, thus increasing specificity of custom styling"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"comment": "PromotionCard: Add more specific selector from parent to additional text paragraph"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"comment": "Avatar: Add visual regression tests"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"comment": "AlertBadge: Add visual regression tests"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"comment": "Countdown: Add support for visual regression tests"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"version": "9.8.0",
|
|
33
|
+
"tag": "@purpur/library_v9.8.0",
|
|
34
|
+
"date": "Thu, 11 Jun 2026 14:09:06 GMT",
|
|
35
|
+
"comments": {
|
|
36
|
+
"none": [
|
|
37
|
+
{
|
|
38
|
+
"comment": "HeroBanner: Fixes the double margin top if only actions are passed as children. Also fixes hmr/vite issues"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"comment": "Footer: Add accessible name for Telia logo for screen readers"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"comment": "HeroBanner: Turn off autoPlay for HeroBanner video in Storybook"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"comment": "TextField: Correctly apply styling for autofill"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"comment": "Tokens: Update the color for autofill from blue to purple"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"comment": "Accordion: Add visual regression tests covering Accordion showcase, negative, FAQ schema, and titleTag/titleVariant combinations across mobile, tablet, and desktop viewports."
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
4
58
|
{
|
|
5
59
|
"version": "9.7.5",
|
|
6
60
|
"tag": "@purpur/library_v9.7.5",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
# Change Log - @purpur/library
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Thu, 18 Jun 2026 08:35:11 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 9.8.1
|
|
6
|
+
Thu, 18 Jun 2026 08:35:11 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- ComparisonTable: Update OptionCard description type to ReactNode for better flexibility
|
|
11
|
+
- Paragraph: cascade custom className passed to <Paragraph> to the end of classList, thus increasing specificity of custom styling
|
|
12
|
+
- PromotionCard: Add more specific selector from parent to additional text paragraph
|
|
13
|
+
- Avatar: Add visual regression tests
|
|
14
|
+
- AlertBadge: Add visual regression tests
|
|
15
|
+
- Countdown: Add support for visual regression tests
|
|
16
|
+
|
|
17
|
+
## 9.8.0
|
|
18
|
+
Thu, 11 Jun 2026 14:09:06 GMT
|
|
19
|
+
|
|
20
|
+
### Updates
|
|
21
|
+
|
|
22
|
+
- HeroBanner: Fixes the double margin top if only actions are passed as children. Also fixes hmr/vite issues
|
|
23
|
+
- Footer: Add accessible name for Telia logo for screen readers
|
|
24
|
+
- HeroBanner: Turn off autoPlay for HeroBanner video in Storybook
|
|
25
|
+
- TextField: Correctly apply styling for autofill
|
|
26
|
+
- Tokens: Update the color for autofill from blue to purple
|
|
27
|
+
- Accordion: Add visual regression tests covering Accordion showcase, negative, FAQ schema, and titleTag/titleVariant combinations across mobile, tablet, and desktop viewports.
|
|
4
28
|
|
|
5
29
|
## 9.7.5
|
|
6
30
|
Fri, 05 Jun 2026 19:50:32 GMT
|
package/dist/LICENSE.txt
CHANGED
|
@@ -835,13 +835,6 @@ Private: false
|
|
|
835
835
|
|
|
836
836
|
---
|
|
837
837
|
|
|
838
|
-
Name: @purpur/hero-banner
|
|
839
|
-
Version: 8.21.0
|
|
840
|
-
License: AGPL-3.0-only
|
|
841
|
-
Private: false
|
|
842
|
-
|
|
843
|
-
---
|
|
844
|
-
|
|
845
838
|
Name: @purpur/radio-card-group
|
|
846
839
|
Version: 8.21.0
|
|
847
840
|
License: AGPL-3.0-only
|
|
@@ -879,6 +872,13 @@ Private: false
|
|
|
879
872
|
|
|
880
873
|
---
|
|
881
874
|
|
|
875
|
+
Name: @purpur/hero-banner
|
|
876
|
+
Version: 8.21.0
|
|
877
|
+
License: AGPL-3.0-only
|
|
878
|
+
Private: false
|
|
879
|
+
|
|
880
|
+
---
|
|
881
|
+
|
|
882
882
|
Name: @purpur/notification
|
|
883
883
|
Version: 8.21.0
|
|
884
884
|
License: AGPL-3.0-only
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const n=require("react/jsx-runtime"),I=require("react"),h=require("./heading-drD5ugCC.js"),d=require("./link-DhWVrkTz.js"),H=require("./paragraph-
|
|
2
|
-
//# sourceMappingURL=RichText-
|
|
1
|
+
"use strict";const n=require("react/jsx-runtime"),I=require("react"),h=require("./heading-drD5ugCC.js"),d=require("./link-DhWVrkTz.js"),H=require("./paragraph-B8HFdNne.js"),j=require("./text-spacing-CiGPZHuB.js"),f={HYPERLINK:"hyperlink",ENTRY_HYPERLINK:"entry-hyperlink",ASSET_HYPERLINK:"asset-hyperlink",RESOURCE_HYPERLINK:"resource-hyperlink",EMBEDDED_ENTRY:"embedded-entry-inline"},s={DOCUMENT:"document",PARAGRAPH:"paragraph",TEXT:"text",HYPERLINK:"hyperlink",ENTRY_HYPERLINK:"entry-hyperlink",HEADER_1:"header-1",HEADER_2:"header-2",HEADER_3:"header-3",HEADER_4:"header-4",HEADER_5:"header-5",HEADER_6:"header-6",HEADING_1:"heading-1",HEADING_2:"heading-2",HEADING_3:"heading-3",HEADING_4:"heading-4",HEADING_5:"heading-5",HEADING_6:"heading-6",TABLE:"table",TABLE_ROW:"table-row",TABLE_HEADER_CELL:"table-header-cell",TABLE_CELL:"table-cell",TABLE_BODY:"table-body",OL_LIST:"ordered-list",UL_LIST:"unordered-list",LIST_ITEM:"list-item",HR:"horizontal-row",QUOTE:"blockquote",EMBEDDED_ENTRY:"embedded-entity",EMBEDDED_ASSET:"embedded-asset-block",IMAGE:"image",VIDEO:"video",RICHTEXTDOCUMENT:"rich-text-document",TEASER:"teaser"},_={BOLD:"bold",ITALIC:"italic",UNDERLINE:"underline",CODE:"code"},N=e=>e.type===s.TABLE_ROW&&!!e.content?.every(i=>i.type===s.TABLE_HEADER_CELL),b=(e,i)=>{if(e.type!==s.TABLE)return i;const{content:l}=e,[r,t]=(l||[]).reduce(([u,a],o)=>N(o)?[[...u,o],a]:[u,[...a,o]],[[],[]]),E=i.slice(0,r.length),c=i.slice(r.length,i.length);return n.jsx("div",{className:"purpur-rich-text-table-scroll-container",children:n.jsx("div",{className:"purpur-rich-text-table-inner-scroll-container",children:n.jsxs("table",{children:[r.length>0&&n.jsx("thead",{children:E}),t.length>0&&n.jsx("tbody",{children:c})]})})})},x=(e,i)=>Object.values(e).includes(i),L=e=>e?.type==="text",T=e=>!g(e)&&!L(e)&&x(s,e?.type),g=e=>x(f,e?.type),O=e=>{try{return JSON.parse(e)}catch{return null}},A=(e,i=" ")=>{const l=O(e);return!l||!l.content?"":l.content.reduce((r,t,E)=>{let c="";if(L(t))c=t.value;else if((T(t)||g(t))&&(c=A(JSON.stringify(t),i),!c.length))return r;const u=l?.content?.[E+1],a=T(u)?i:"";return r+c+a},"")};function v(e){return e.type===s.IMAGE&&typeof e.value=="object"&&e?.value&&"image"in e.value&&e?.value?.image?.url?{...e,value:{...e.value,url:e.value.image.url}}:e.type===s.VIDEO&&typeof e.value=="object"&&e?.value&&"video"in e.value&&e.value.video?.url?{...e,value:{...e.value,url:e.value.video.url}}:e}const B={[_.BOLD]:e=>n.jsx("b",{children:e}),[_.ITALIC]:e=>n.jsx("i",{children:e}),[_.UNDERLINE]:e=>n.jsx("u",{children:e}),[_.CODE]:e=>n.jsx("code",{children:e})},y=e=>{const i=e.type??e.nodeType;return i.startsWith("heading-")?i.replace("heading-","header-"):i.startsWith("entry-hyperlink")?i.replace("entry-hyperlink","hyperlink"):i};function m(e,i,l){return{[s.RICHTEXTDOCUMENT]:(r,t)=>t,[s.DOCUMENT]:(r,t)=>t,[s.PARAGRAPH]:(r,t)=>n.jsx(H.Paragraph,{variant:"paragraph-200",children:t}),[s.TEXT]:r=>{const{value:t,marks:E}=r,c=typeof t=="string"?t.replace(/\n/g,"<br />"):t,u=n.jsx("span",{dangerouslySetInnerHTML:{__html:c}});return E?E.reduce((a,o)=>B[typeof o=="string"?o:o.type](a),u):u},[s.HYPERLINK]:(r,t)=>{const E=r.uri??r.data?.uri;return e?n.jsx(d.Link,{variant:"text",children:e(t,E)}):n.jsx(d.Link,{variant:"text",children:n.jsx("a",{href:E,children:t})})},[s.HR]:()=>n.jsx("hr",{}),[s.HEADER_2]:(r,t)=>n.jsx(h.Heading,{tag:"h2",variant:"title-300",children:t}),[s.HEADER_3]:(r,t)=>n.jsx(h.Heading,{tag:"h3",variant:"title-200",children:t}),[s.HEADER_4]:(r,t)=>n.jsx(h.Heading,{tag:"h4",variant:"title-100",children:t}),[s.HEADER_5]:(r,t)=>n.jsx(h.Heading,{tag:"h5",variant:"title-100",children:t}),[s.HEADER_6]:(r,t)=>n.jsx(h.Heading,{tag:"h6",variant:"title-100",children:t}),[s.TABLE]:b,[s.TABLE_ROW]:(r,t)=>n.jsx("tr",{children:t}),[s.TABLE_HEADER_CELL]:(r,t)=>n.jsx("th",{scope:"col",children:t}),[s.TABLE_CELL]:(r,t)=>n.jsx("td",{children:t}),[s.TABLE_BODY]:(r,t)=>n.jsx("tbody",{children:t}),[s.LIST_ITEM]:(r,t)=>n.jsx("li",{children:t}),[s.OL_LIST]:(r,t)=>n.jsx("ol",{children:t}),[s.UL_LIST]:(r,t)=>n.jsx("ul",{children:t}),[s.QUOTE]:(r,t)=>n.jsxs("blockquote",{children:["“",t,"”"]}),[s.EMBEDDED_ENTRY]:(r,t)=>t,[s.EMBEDDED_ASSET]:(r,t)=>t,[s.IMAGE]:({value:r})=>typeof r=="object"&&r&&"url"in r&&r.url?i?i(r.url,r.altText,r.image?.contentType):n.jsx("img",{src:r.url,alt:r.altText??"",loading:"lazy"}):null,[s.VIDEO]:({value:r})=>{if(typeof r=="object"&&r&&"posterImage"in r){const t=r.posterImage?.url;return n.jsx("video",{"data-testid":"rich text video",controls:!0,src:r.url,poster:l&&t?l(t):t})}return null}}}const p=e=>!e.replace(/\s+/g,""),C=e=>{const{content:i,value:l}=e;if(!i)return typeof l=="string"&&p(l);for(const r of i)if(y(r)===s.HYPERLINK)return!1;return i.length>0&&typeof i[0].value=="string"&&p(i[0].value)},R=(e,i,l,r,t)=>{let E=0;const c={...m(l,r,t),...i},u=a=>{const o=c[y(a)];if(typeof o>"u"||C(a))return null;const D=a.content?a.content.map(u):[];return n.jsx(I.Fragment,{children:o(v(a),D)},E++)};return u(e)};function S({data:e,className:i,customNodeTypes:l,noTextSpacing:r=!1,link:t,image:E,videoPoster:c,element:u="div",...a}){return e?r?n.jsx(u,{className:i,...a,children:R(e,l,t,E,c)}):n.jsx(j.TextSpacing,{className:i,element:u,...a,children:R(e,l,t,E,c)}):null}exports.RichText=S;exports.richToPlainText=A;
|
|
2
|
+
//# sourceMappingURL=RichText-BAVZadzi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichText-yobCUjTD.js","sources":["../../../components/rich-text/src/constants.ts","../../../components/rich-text/src/renderers.tsx","../../../components/rich-text/src/utils.ts","../../../components/rich-text/src/RichText.tsx"],"sourcesContent":["export const INLINE = {\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n ASSET_HYPERLINK: \"asset-hyperlink\",\n RESOURCE_HYPERLINK: \"resource-hyperlink\",\n EMBEDDED_ENTRY: \"embedded-entry-inline\",\n} as const;\n\nexport const BLOCK = {\n DOCUMENT: \"document\",\n PARAGRAPH: \"paragraph\",\n TEXT: \"text\",\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n\n HEADER_1: \"header-1\",\n HEADER_2: \"header-2\",\n HEADER_3: \"header-3\",\n HEADER_4: \"header-4\",\n HEADER_5: \"header-5\",\n HEADER_6: \"header-6\",\n\n HEADING_1: \"heading-1\",\n HEADING_2: \"heading-2\",\n HEADING_3: \"heading-3\",\n HEADING_4: \"heading-4\",\n HEADING_5: \"heading-5\",\n HEADING_6: \"heading-6\",\n\n TABLE: \"table\",\n TABLE_ROW: \"table-row\",\n TABLE_HEADER_CELL: \"table-header-cell\",\n TABLE_CELL: \"table-cell\",\n TABLE_BODY: \"table-body\",\n\n OL_LIST: \"ordered-list\",\n UL_LIST: \"unordered-list\",\n LIST_ITEM: \"list-item\",\n\n HR: \"horizontal-row\",\n QUOTE: \"blockquote\",\n\n EMBEDDED_ENTRY: \"embedded-entity\",\n EMBEDDED_ASSET: \"embedded-asset-block\",\n\n IMAGE: \"image\",\n VIDEO: \"video\",\n RICHTEXTDOCUMENT: \"rich-text-document\",\n TEASER: \"teaser\",\n} as const;\n\nexport const MARK = {\n BOLD: \"bold\",\n ITALIC: \"italic\",\n UNDERLINE: \"underline\",\n CODE: \"code\",\n} as const;\n\nexport const ELEMENT = {\n DIV: \"div\",\n SPAN: \"span\",\n} as const;\n","import React, { type ReactNode } from \"react\";\n\nimport { BLOCK } from \"./constants\";\nimport { type RichTextNode } from \"./types\";\n\nconst isHeaderRow = (row: RichTextNode): boolean =>\n row.type === BLOCK.TABLE_ROW &&\n !!row.content?.every((node) => node.type === BLOCK.TABLE_HEADER_CELL);\n\n/**\n * Wrap the first rows with <thead /> if it consists of only <th> elements.\n * Wrap the rest of the rows with <tbody />.\n */\nexport const tableRenderer = (richTextNode: RichTextNode, children: ReactNode[]) => {\n if (richTextNode.type !== BLOCK.TABLE) {\n return children;\n }\n const { content: tableContent } = richTextNode;\n const [headerRows, bodyRows] = (tableContent || []).reduce<[RichTextNode[], RichTextNode[]]>(\n ([headers, body], row) => {\n return isHeaderRow(row) ? [[...headers, row], body] : [headers, [...body, row]];\n },\n [[], []]\n );\n const headerRowChildren = children.slice(0, headerRows.length);\n const bodyRowChildren = children.slice(headerRows.length, children.length);\n return (\n <div className=\"purpur-rich-text-table-scroll-container\">\n <div className=\"purpur-rich-text-table-inner-scroll-container\">\n <table>\n {headerRows.length > 0 && <thead>{headerRowChildren}</thead>}\n {bodyRows.length > 0 && <tbody>{bodyRowChildren}</tbody>}\n </table>\n </div>\n </div>\n );\n};\n","import { BLOCK, INLINE } from \"./constants\";\nimport { type Block, type Inline, type Mark, type RichTextNode, type Value } from \"./types\";\n\nexport type MarkNode = {\n type: Mark;\n};\n\ntype TextNode<T> = RichTextNode<T> & {\n type: \"text\";\n value: string;\n marks: MarkNode[];\n};\n\ntype InlineNode<T> = RichTextNode<T> & {\n type: Inline;\n content: Array<Inline | Text>;\n};\n\ntype BlockNode<T> = RichTextNode<T> & {\n type: Block;\n content: Array<Block | Inline | Text>;\n};\n\nconst hasValue = (obj: Record<string, unknown>, value: unknown) =>\n Object.values(obj).includes(value);\n\nconst isText = <T>(node: RichTextNode<T> | undefined): node is TextNode<T> => node?.type === \"text\";\n\nconst isBlock = <T>(node: RichTextNode<T> | undefined): node is BlockNode<T> =>\n !isInline(node) && !isText(node) && hasValue(BLOCK, node?.type);\n\nconst isInline = <T>(node: RichTextNode<T> | undefined): node is InlineNode<T> =>\n hasValue(INLINE, node?.type);\n\nexport const safeJsonParse = <T>(jsonString: string): T | null => {\n try {\n return JSON.parse(jsonString);\n } catch {\n return null;\n }\n};\n\n// This is equivalent to https://github.com/contentful/rich-text/tree/master/packages/rich-text-plain-text-renderer\nexport const richToPlainText = <T>(data: string, blockDivisor = \" \"): string => {\n const rootNode = safeJsonParse<RichTextNode<T>>(data);\n\n if (!rootNode || !rootNode.content) {\n return \"\";\n }\n\n return rootNode.content.reduce((acc: string, node: RichTextNode<T>, i) => {\n let nodeTextValue = \"\";\n\n if (isText(node)) {\n nodeTextValue = node.value;\n } else if (isBlock(node) || isInline(node)) {\n nodeTextValue = richToPlainText(JSON.stringify(node), blockDivisor);\n if (!nodeTextValue.length) {\n return acc;\n }\n }\n\n const nextNode = rootNode?.content?.[i + 1];\n const divisor = isBlock(nextNode) ? blockDivisor : \"\";\n\n return acc + nodeTextValue + divisor;\n }, \"\");\n};\n\nexport function normalizeNode<T = Value>(node: RichTextNode<T>) {\n if (\n node.type === BLOCK.IMAGE &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"image\" in node.value &&\n node?.value?.image?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.image.url } };\n }\n\n if (\n node.type === BLOCK.VIDEO &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"video\" in node.value &&\n node.value.video?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.video.url } };\n }\n\n return node;\n}\n","import React, { Fragment, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport { Link } from \"@purpur/link\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { TextSpacing } from \"@purpur/text-spacing\";\n\nimport { BLOCK, MARK } from \"./constants\";\nimport { tableRenderer } from \"./renderers\";\nimport type {\n ImageProp,\n LinkProp,\n Mark,\n NodeTypes,\n RichTextNode,\n RichTextProps,\n Value,\n VideoPosterProp,\n} from \"./types\";\nimport { normalizeNode } from \"./utils\";\n\n// Inspired by https://github.com/contentful/rich-text/blob/master/packages/rich-text-react-renderer/src/index.tsx\nconst MARK_TYPES = {\n [MARK.BOLD]: (children: ReactNode) => <b>{children}</b>,\n [MARK.ITALIC]: (children: ReactNode) => <i>{children}</i>,\n [MARK.UNDERLINE]: (children: ReactNode) => <u>{children}</u>,\n [MARK.CODE]: (children: ReactNode) => <code>{children}</code>,\n};\n\nconst getNodeType = (node: RichTextNode) => {\n const type = node.type ?? node.nodeType!;\n if (type.startsWith(\"heading-\")) return type.replace(\"heading-\", \"header-\");\n if (type.startsWith(\"entry-hyperlink\")) return type.replace(\"entry-hyperlink\", \"hyperlink\");\n return type;\n};\n\nfunction getNodeTypes<T = Value>(\n link: LinkProp,\n image: ImageProp,\n videoPoster: VideoPosterProp\n): NodeTypes<T> {\n return {\n [BLOCK.RICHTEXTDOCUMENT]: (_, children) => children,\n [BLOCK.DOCUMENT]: (_, children) => children,\n [BLOCK.PARAGRAPH]: (_, children) => <Paragraph variant=\"paragraph-200\">{children}</Paragraph>,\n [BLOCK.TEXT]: (node) => {\n const { value: nodeValue, marks } = node;\n const value = typeof nodeValue === \"string\" ? nodeValue.replace(/\\n/g, \"<br />\") : nodeValue;\n\n const element = <span dangerouslySetInnerHTML={{ __html: value as string }} />;\n\n if (!marks) {\n return element;\n }\n return marks.reduce((accumulator: ReactNode, currentValue: Mark | { type: Mark }) => {\n return MARK_TYPES[typeof currentValue === \"string\" ? currentValue : currentValue.type](\n accumulator\n );\n }, element);\n },\n [BLOCK.HYPERLINK]: (node, children) => {\n const uri = node.uri ?? (node.data?.uri as string);\n\n if (link) {\n return <Link variant=\"text\">{link(children, uri)}</Link>;\n }\n return (\n <Link variant=\"text\">\n <a href={uri}>{children}</a>\n </Link>\n );\n },\n [BLOCK.HR]: () => <hr />,\n [BLOCK.HEADER_2]: (_, children) => (\n <Heading tag=\"h2\" variant=\"title-300\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_3]: (_, children) => (\n <Heading tag=\"h3\" variant=\"title-200\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_4]: (_, children) => (\n <Heading tag=\"h4\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_5]: (_, children) => (\n <Heading tag=\"h5\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_6]: (_, children) => (\n <Heading tag=\"h6\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.TABLE]: tableRenderer,\n [BLOCK.TABLE_ROW]: (_, children) => <tr>{children}</tr>,\n [BLOCK.TABLE_HEADER_CELL]: (_, children) => <th scope=\"col\">{children}</th>,\n [BLOCK.TABLE_CELL]: (_, children) => {\n return <td>{children}</td>;\n },\n [BLOCK.TABLE_BODY]: (_, children) => <tbody>{children}</tbody>,\n [BLOCK.LIST_ITEM]: (_, children) => <li>{children}</li>,\n [BLOCK.OL_LIST]: (_, children) => <ol>{children}</ol>,\n [BLOCK.UL_LIST]: (_, children) => <ul>{children}</ul>,\n [BLOCK.QUOTE]: (_, children) => <blockquote>“{children}”</blockquote>,\n [BLOCK.EMBEDDED_ENTRY]: (_, children) => children,\n [BLOCK.EMBEDDED_ASSET]: (_, children) => children,\n [BLOCK.IMAGE]: ({ value }) => {\n if (typeof value === \"object\" && value && \"url\" in value && value.url) {\n if (image) {\n return image(value.url, value.altText, value.image?.contentType);\n }\n return <img src={value.url} alt={value.altText ?? \"\"} loading=\"lazy\" />;\n }\n return null;\n },\n [BLOCK.VIDEO]: ({ value }) => {\n if (typeof value === \"object\" && value && \"posterImage\" in value) {\n const posterImage = value.posterImage?.url;\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n data-testid=\"rich text video\"\n controls\n src={value.url}\n poster={videoPoster && posterImage ? videoPoster(posterImage) : posterImage}\n />\n );\n }\n return null;\n },\n };\n}\n\nconst isValueWhitespaceOnly = (value: string): boolean => {\n return !value.replace(/\\s+/g, \"\");\n};\n\n/**\n * Strictly checks if a singular node value OR nested node content is an empty element.\n */\n\nconst isNodeOrContentEmpty = <T,>(node: RichTextNode<T>): boolean => {\n const { content, value } = node;\n\n if (!content) {\n return typeof value === \"string\" && isValueWhitespaceOnly(value);\n }\n\n for (const item of content) {\n if (getNodeType(item) === BLOCK.HYPERLINK) {\n return false;\n }\n }\n\n return (\n content.length > 0 &&\n typeof content[0].value === \"string\" &&\n isValueWhitespaceOnly(content[0].value)\n );\n};\n\nconst serializeRichText = <T,>(\n node: RichTextNode<T>,\n customNodeTypes?: NodeTypes<T>,\n link?: LinkProp,\n image?: ImageProp,\n videoPoster?: VideoPosterProp\n): ReactNode => {\n let index = 0; // nodes in rich text does not contain ids, we'll use index as keys for react\n\n const nodes = {\n ...getNodeTypes(link, image, videoPoster),\n ...customNodeTypes,\n };\n\n const renderNode = (node: RichTextNode<T>): ReactNode => {\n const renderFunc = nodes[getNodeType(node)];\n\n // node types that are missing from both default NODE_TYPES and custom are never rendered\n if (typeof renderFunc === \"undefined\") {\n return null;\n }\n\n if (isNodeOrContentEmpty(node)) {\n return null;\n }\n\n const children = node.content ? node.content.map(renderNode) : [];\n\n return <Fragment key={index++}>{renderFunc(normalizeNode(node), children)}</Fragment>;\n };\n\n return renderNode(node);\n};\n\n/* Not using a arrow function here since the default generic will mess with the highlighting\n and it still needs a eslint-disable-next-line because it still lints incorrect */\n\nfunction RichText<T = Value>({\n data,\n className,\n customNodeTypes,\n noTextSpacing = false,\n link,\n image,\n videoPoster,\n element: ElementTag = \"div\",\n ...rest\n}: RichTextProps<T>) {\n return data ? (\n noTextSpacing ? (\n <ElementTag className={className} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </ElementTag>\n ) : (\n <TextSpacing className={className} element={ElementTag} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </TextSpacing>\n )\n ) : null;\n}\n\nexport { getNodeTypes, RichText, serializeRichText };\n"],"names":["INLINE","BLOCK","MARK","isHeaderRow","row","node","tableRenderer","richTextNode","children","tableContent","headerRows","bodyRows","headers","body","headerRowChildren","bodyRowChildren","jsx","jsxs","hasValue","obj","value","isText","isBlock","isInline","safeJsonParse","jsonString","richToPlainText","data","blockDivisor","rootNode","acc","i","nodeTextValue","nextNode","divisor","normalizeNode","MARK_TYPES","getNodeType","type","getNodeTypes","link","image","videoPoster","_","Paragraph","nodeValue","marks","element","accumulator","currentValue","uri","Link","Heading","posterImage","isValueWhitespaceOnly","isNodeOrContentEmpty","content","item","serializeRichText","customNodeTypes","index","nodes","renderNode","renderFunc","Fragment","RichText","className","noTextSpacing","ElementTag","rest","TextSpacing"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RichText-BAVZadzi.js","sources":["../../../components/rich-text/src/constants.ts","../../../components/rich-text/src/renderers.tsx","../../../components/rich-text/src/utils.ts","../../../components/rich-text/src/RichText.tsx"],"sourcesContent":["export const INLINE = {\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n ASSET_HYPERLINK: \"asset-hyperlink\",\n RESOURCE_HYPERLINK: \"resource-hyperlink\",\n EMBEDDED_ENTRY: \"embedded-entry-inline\",\n} as const;\n\nexport const BLOCK = {\n DOCUMENT: \"document\",\n PARAGRAPH: \"paragraph\",\n TEXT: \"text\",\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n\n HEADER_1: \"header-1\",\n HEADER_2: \"header-2\",\n HEADER_3: \"header-3\",\n HEADER_4: \"header-4\",\n HEADER_5: \"header-5\",\n HEADER_6: \"header-6\",\n\n HEADING_1: \"heading-1\",\n HEADING_2: \"heading-2\",\n HEADING_3: \"heading-3\",\n HEADING_4: \"heading-4\",\n HEADING_5: \"heading-5\",\n HEADING_6: \"heading-6\",\n\n TABLE: \"table\",\n TABLE_ROW: \"table-row\",\n TABLE_HEADER_CELL: \"table-header-cell\",\n TABLE_CELL: \"table-cell\",\n TABLE_BODY: \"table-body\",\n\n OL_LIST: \"ordered-list\",\n UL_LIST: \"unordered-list\",\n LIST_ITEM: \"list-item\",\n\n HR: \"horizontal-row\",\n QUOTE: \"blockquote\",\n\n EMBEDDED_ENTRY: \"embedded-entity\",\n EMBEDDED_ASSET: \"embedded-asset-block\",\n\n IMAGE: \"image\",\n VIDEO: \"video\",\n RICHTEXTDOCUMENT: \"rich-text-document\",\n TEASER: \"teaser\",\n} as const;\n\nexport const MARK = {\n BOLD: \"bold\",\n ITALIC: \"italic\",\n UNDERLINE: \"underline\",\n CODE: \"code\",\n} as const;\n\nexport const ELEMENT = {\n DIV: \"div\",\n SPAN: \"span\",\n} as const;\n","import React, { type ReactNode } from \"react\";\n\nimport { BLOCK } from \"./constants\";\nimport { type RichTextNode } from \"./types\";\n\nconst isHeaderRow = (row: RichTextNode): boolean =>\n row.type === BLOCK.TABLE_ROW &&\n !!row.content?.every((node) => node.type === BLOCK.TABLE_HEADER_CELL);\n\n/**\n * Wrap the first rows with <thead /> if it consists of only <th> elements.\n * Wrap the rest of the rows with <tbody />.\n */\nexport const tableRenderer = (richTextNode: RichTextNode, children: ReactNode[]) => {\n if (richTextNode.type !== BLOCK.TABLE) {\n return children;\n }\n const { content: tableContent } = richTextNode;\n const [headerRows, bodyRows] = (tableContent || []).reduce<[RichTextNode[], RichTextNode[]]>(\n ([headers, body], row) => {\n return isHeaderRow(row) ? [[...headers, row], body] : [headers, [...body, row]];\n },\n [[], []]\n );\n const headerRowChildren = children.slice(0, headerRows.length);\n const bodyRowChildren = children.slice(headerRows.length, children.length);\n return (\n <div className=\"purpur-rich-text-table-scroll-container\">\n <div className=\"purpur-rich-text-table-inner-scroll-container\">\n <table>\n {headerRows.length > 0 && <thead>{headerRowChildren}</thead>}\n {bodyRows.length > 0 && <tbody>{bodyRowChildren}</tbody>}\n </table>\n </div>\n </div>\n );\n};\n","import { BLOCK, INLINE } from \"./constants\";\nimport { type Block, type Inline, type Mark, type RichTextNode, type Value } from \"./types\";\n\nexport type MarkNode = {\n type: Mark;\n};\n\ntype TextNode<T> = RichTextNode<T> & {\n type: \"text\";\n value: string;\n marks: MarkNode[];\n};\n\ntype InlineNode<T> = RichTextNode<T> & {\n type: Inline;\n content: Array<Inline | Text>;\n};\n\ntype BlockNode<T> = RichTextNode<T> & {\n type: Block;\n content: Array<Block | Inline | Text>;\n};\n\nconst hasValue = (obj: Record<string, unknown>, value: unknown) =>\n Object.values(obj).includes(value);\n\nconst isText = <T>(node: RichTextNode<T> | undefined): node is TextNode<T> => node?.type === \"text\";\n\nconst isBlock = <T>(node: RichTextNode<T> | undefined): node is BlockNode<T> =>\n !isInline(node) && !isText(node) && hasValue(BLOCK, node?.type);\n\nconst isInline = <T>(node: RichTextNode<T> | undefined): node is InlineNode<T> =>\n hasValue(INLINE, node?.type);\n\nexport const safeJsonParse = <T>(jsonString: string): T | null => {\n try {\n return JSON.parse(jsonString);\n } catch {\n return null;\n }\n};\n\n// This is equivalent to https://github.com/contentful/rich-text/tree/master/packages/rich-text-plain-text-renderer\nexport const richToPlainText = <T>(data: string, blockDivisor = \" \"): string => {\n const rootNode = safeJsonParse<RichTextNode<T>>(data);\n\n if (!rootNode || !rootNode.content) {\n return \"\";\n }\n\n return rootNode.content.reduce((acc: string, node: RichTextNode<T>, i) => {\n let nodeTextValue = \"\";\n\n if (isText(node)) {\n nodeTextValue = node.value;\n } else if (isBlock(node) || isInline(node)) {\n nodeTextValue = richToPlainText(JSON.stringify(node), blockDivisor);\n if (!nodeTextValue.length) {\n return acc;\n }\n }\n\n const nextNode = rootNode?.content?.[i + 1];\n const divisor = isBlock(nextNode) ? blockDivisor : \"\";\n\n return acc + nodeTextValue + divisor;\n }, \"\");\n};\n\nexport function normalizeNode<T = Value>(node: RichTextNode<T>) {\n if (\n node.type === BLOCK.IMAGE &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"image\" in node.value &&\n node?.value?.image?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.image.url } };\n }\n\n if (\n node.type === BLOCK.VIDEO &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"video\" in node.value &&\n node.value.video?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.video.url } };\n }\n\n return node;\n}\n","import React, { Fragment, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport { Link } from \"@purpur/link\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { TextSpacing } from \"@purpur/text-spacing\";\n\nimport { BLOCK, MARK } from \"./constants\";\nimport { tableRenderer } from \"./renderers\";\nimport type {\n ImageProp,\n LinkProp,\n Mark,\n NodeTypes,\n RichTextNode,\n RichTextProps,\n Value,\n VideoPosterProp,\n} from \"./types\";\nimport { normalizeNode } from \"./utils\";\n\n// Inspired by https://github.com/contentful/rich-text/blob/master/packages/rich-text-react-renderer/src/index.tsx\nconst MARK_TYPES = {\n [MARK.BOLD]: (children: ReactNode) => <b>{children}</b>,\n [MARK.ITALIC]: (children: ReactNode) => <i>{children}</i>,\n [MARK.UNDERLINE]: (children: ReactNode) => <u>{children}</u>,\n [MARK.CODE]: (children: ReactNode) => <code>{children}</code>,\n};\n\nconst getNodeType = (node: RichTextNode) => {\n const type = node.type ?? node.nodeType!;\n if (type.startsWith(\"heading-\")) return type.replace(\"heading-\", \"header-\");\n if (type.startsWith(\"entry-hyperlink\")) return type.replace(\"entry-hyperlink\", \"hyperlink\");\n return type;\n};\n\nfunction getNodeTypes<T = Value>(\n link: LinkProp,\n image: ImageProp,\n videoPoster: VideoPosterProp\n): NodeTypes<T> {\n return {\n [BLOCK.RICHTEXTDOCUMENT]: (_, children) => children,\n [BLOCK.DOCUMENT]: (_, children) => children,\n [BLOCK.PARAGRAPH]: (_, children) => <Paragraph variant=\"paragraph-200\">{children}</Paragraph>,\n [BLOCK.TEXT]: (node) => {\n const { value: nodeValue, marks } = node;\n const value = typeof nodeValue === \"string\" ? nodeValue.replace(/\\n/g, \"<br />\") : nodeValue;\n\n const element = <span dangerouslySetInnerHTML={{ __html: value as string }} />;\n\n if (!marks) {\n return element;\n }\n return marks.reduce((accumulator: ReactNode, currentValue: Mark | { type: Mark }) => {\n return MARK_TYPES[typeof currentValue === \"string\" ? currentValue : currentValue.type](\n accumulator\n );\n }, element);\n },\n [BLOCK.HYPERLINK]: (node, children) => {\n const uri = node.uri ?? (node.data?.uri as string);\n\n if (link) {\n return <Link variant=\"text\">{link(children, uri)}</Link>;\n }\n return (\n <Link variant=\"text\">\n <a href={uri}>{children}</a>\n </Link>\n );\n },\n [BLOCK.HR]: () => <hr />,\n [BLOCK.HEADER_2]: (_, children) => (\n <Heading tag=\"h2\" variant=\"title-300\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_3]: (_, children) => (\n <Heading tag=\"h3\" variant=\"title-200\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_4]: (_, children) => (\n <Heading tag=\"h4\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_5]: (_, children) => (\n <Heading tag=\"h5\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_6]: (_, children) => (\n <Heading tag=\"h6\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.TABLE]: tableRenderer,\n [BLOCK.TABLE_ROW]: (_, children) => <tr>{children}</tr>,\n [BLOCK.TABLE_HEADER_CELL]: (_, children) => <th scope=\"col\">{children}</th>,\n [BLOCK.TABLE_CELL]: (_, children) => {\n return <td>{children}</td>;\n },\n [BLOCK.TABLE_BODY]: (_, children) => <tbody>{children}</tbody>,\n [BLOCK.LIST_ITEM]: (_, children) => <li>{children}</li>,\n [BLOCK.OL_LIST]: (_, children) => <ol>{children}</ol>,\n [BLOCK.UL_LIST]: (_, children) => <ul>{children}</ul>,\n [BLOCK.QUOTE]: (_, children) => <blockquote>“{children}”</blockquote>,\n [BLOCK.EMBEDDED_ENTRY]: (_, children) => children,\n [BLOCK.EMBEDDED_ASSET]: (_, children) => children,\n [BLOCK.IMAGE]: ({ value }) => {\n if (typeof value === \"object\" && value && \"url\" in value && value.url) {\n if (image) {\n return image(value.url, value.altText, value.image?.contentType);\n }\n return <img src={value.url} alt={value.altText ?? \"\"} loading=\"lazy\" />;\n }\n return null;\n },\n [BLOCK.VIDEO]: ({ value }) => {\n if (typeof value === \"object\" && value && \"posterImage\" in value) {\n const posterImage = value.posterImage?.url;\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n data-testid=\"rich text video\"\n controls\n src={value.url}\n poster={videoPoster && posterImage ? videoPoster(posterImage) : posterImage}\n />\n );\n }\n return null;\n },\n };\n}\n\nconst isValueWhitespaceOnly = (value: string): boolean => {\n return !value.replace(/\\s+/g, \"\");\n};\n\n/**\n * Strictly checks if a singular node value OR nested node content is an empty element.\n */\n\nconst isNodeOrContentEmpty = <T,>(node: RichTextNode<T>): boolean => {\n const { content, value } = node;\n\n if (!content) {\n return typeof value === \"string\" && isValueWhitespaceOnly(value);\n }\n\n for (const item of content) {\n if (getNodeType(item) === BLOCK.HYPERLINK) {\n return false;\n }\n }\n\n return (\n content.length > 0 &&\n typeof content[0].value === \"string\" &&\n isValueWhitespaceOnly(content[0].value)\n );\n};\n\nconst serializeRichText = <T,>(\n node: RichTextNode<T>,\n customNodeTypes?: NodeTypes<T>,\n link?: LinkProp,\n image?: ImageProp,\n videoPoster?: VideoPosterProp\n): ReactNode => {\n let index = 0; // nodes in rich text does not contain ids, we'll use index as keys for react\n\n const nodes = {\n ...getNodeTypes(link, image, videoPoster),\n ...customNodeTypes,\n };\n\n const renderNode = (node: RichTextNode<T>): ReactNode => {\n const renderFunc = nodes[getNodeType(node)];\n\n // node types that are missing from both default NODE_TYPES and custom are never rendered\n if (typeof renderFunc === \"undefined\") {\n return null;\n }\n\n if (isNodeOrContentEmpty(node)) {\n return null;\n }\n\n const children = node.content ? node.content.map(renderNode) : [];\n\n return <Fragment key={index++}>{renderFunc(normalizeNode(node), children)}</Fragment>;\n };\n\n return renderNode(node);\n};\n\n/* Not using a arrow function here since the default generic will mess with the highlighting\n and it still needs a eslint-disable-next-line because it still lints incorrect */\n\nfunction RichText<T = Value>({\n data,\n className,\n customNodeTypes,\n noTextSpacing = false,\n link,\n image,\n videoPoster,\n element: ElementTag = \"div\",\n ...rest\n}: RichTextProps<T>) {\n return data ? (\n noTextSpacing ? (\n <ElementTag className={className} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </ElementTag>\n ) : (\n <TextSpacing className={className} element={ElementTag} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </TextSpacing>\n )\n ) : null;\n}\n\nexport { getNodeTypes, RichText, serializeRichText };\n"],"names":["INLINE","BLOCK","MARK","isHeaderRow","row","node","tableRenderer","richTextNode","children","tableContent","headerRows","bodyRows","headers","body","headerRowChildren","bodyRowChildren","jsx","jsxs","hasValue","obj","value","isText","isBlock","isInline","safeJsonParse","jsonString","richToPlainText","data","blockDivisor","rootNode","acc","i","nodeTextValue","nextNode","divisor","normalizeNode","MARK_TYPES","getNodeType","type","getNodeTypes","link","image","videoPoster","_","Paragraph","nodeValue","marks","element","accumulator","currentValue","uri","Link","Heading","posterImage","isValueWhitespaceOnly","isNodeOrContentEmpty","content","item","serializeRichText","customNodeTypes","index","nodes","renderNode","renderFunc","Fragment","RichText","className","noTextSpacing","ElementTag","rest","TextSpacing"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsx as l, jsxs as L } from "react/jsx-runtime";
|
|
|
2
2
|
import { Fragment as I } from "react";
|
|
3
3
|
import { H as h } from "./heading-xwBuT_-9.mjs";
|
|
4
4
|
import { a as p } from "./link-DY5WLpyc.mjs";
|
|
5
|
-
import { P as H } from "./paragraph-
|
|
5
|
+
import { P as H } from "./paragraph-CwAdFoIm.mjs";
|
|
6
6
|
import { T as N } from "./text-spacing-BU0mkEf9.mjs";
|
|
7
7
|
const m = {
|
|
8
8
|
HYPERLINK: "hyperlink",
|
|
@@ -186,4 +186,4 @@ export {
|
|
|
186
186
|
j as R,
|
|
187
187
|
B as r
|
|
188
188
|
};
|
|
189
|
-
//# sourceMappingURL=RichText-
|
|
189
|
+
//# sourceMappingURL=RichText-D4vznH1B.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichText-jZ-sHV-u.mjs","sources":["../../../components/rich-text/src/constants.ts","../../../components/rich-text/src/renderers.tsx","../../../components/rich-text/src/utils.ts","../../../components/rich-text/src/RichText.tsx"],"sourcesContent":["export const INLINE = {\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n ASSET_HYPERLINK: \"asset-hyperlink\",\n RESOURCE_HYPERLINK: \"resource-hyperlink\",\n EMBEDDED_ENTRY: \"embedded-entry-inline\",\n} as const;\n\nexport const BLOCK = {\n DOCUMENT: \"document\",\n PARAGRAPH: \"paragraph\",\n TEXT: \"text\",\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n\n HEADER_1: \"header-1\",\n HEADER_2: \"header-2\",\n HEADER_3: \"header-3\",\n HEADER_4: \"header-4\",\n HEADER_5: \"header-5\",\n HEADER_6: \"header-6\",\n\n HEADING_1: \"heading-1\",\n HEADING_2: \"heading-2\",\n HEADING_3: \"heading-3\",\n HEADING_4: \"heading-4\",\n HEADING_5: \"heading-5\",\n HEADING_6: \"heading-6\",\n\n TABLE: \"table\",\n TABLE_ROW: \"table-row\",\n TABLE_HEADER_CELL: \"table-header-cell\",\n TABLE_CELL: \"table-cell\",\n TABLE_BODY: \"table-body\",\n\n OL_LIST: \"ordered-list\",\n UL_LIST: \"unordered-list\",\n LIST_ITEM: \"list-item\",\n\n HR: \"horizontal-row\",\n QUOTE: \"blockquote\",\n\n EMBEDDED_ENTRY: \"embedded-entity\",\n EMBEDDED_ASSET: \"embedded-asset-block\",\n\n IMAGE: \"image\",\n VIDEO: \"video\",\n RICHTEXTDOCUMENT: \"rich-text-document\",\n TEASER: \"teaser\",\n} as const;\n\nexport const MARK = {\n BOLD: \"bold\",\n ITALIC: \"italic\",\n UNDERLINE: \"underline\",\n CODE: \"code\",\n} as const;\n\nexport const ELEMENT = {\n DIV: \"div\",\n SPAN: \"span\",\n} as const;\n","import React, { type ReactNode } from \"react\";\n\nimport { BLOCK } from \"./constants\";\nimport { type RichTextNode } from \"./types\";\n\nconst isHeaderRow = (row: RichTextNode): boolean =>\n row.type === BLOCK.TABLE_ROW &&\n !!row.content?.every((node) => node.type === BLOCK.TABLE_HEADER_CELL);\n\n/**\n * Wrap the first rows with <thead /> if it consists of only <th> elements.\n * Wrap the rest of the rows with <tbody />.\n */\nexport const tableRenderer = (richTextNode: RichTextNode, children: ReactNode[]) => {\n if (richTextNode.type !== BLOCK.TABLE) {\n return children;\n }\n const { content: tableContent } = richTextNode;\n const [headerRows, bodyRows] = (tableContent || []).reduce<[RichTextNode[], RichTextNode[]]>(\n ([headers, body], row) => {\n return isHeaderRow(row) ? [[...headers, row], body] : [headers, [...body, row]];\n },\n [[], []]\n );\n const headerRowChildren = children.slice(0, headerRows.length);\n const bodyRowChildren = children.slice(headerRows.length, children.length);\n return (\n <div className=\"purpur-rich-text-table-scroll-container\">\n <div className=\"purpur-rich-text-table-inner-scroll-container\">\n <table>\n {headerRows.length > 0 && <thead>{headerRowChildren}</thead>}\n {bodyRows.length > 0 && <tbody>{bodyRowChildren}</tbody>}\n </table>\n </div>\n </div>\n );\n};\n","import { BLOCK, INLINE } from \"./constants\";\nimport { type Block, type Inline, type Mark, type RichTextNode, type Value } from \"./types\";\n\nexport type MarkNode = {\n type: Mark;\n};\n\ntype TextNode<T> = RichTextNode<T> & {\n type: \"text\";\n value: string;\n marks: MarkNode[];\n};\n\ntype InlineNode<T> = RichTextNode<T> & {\n type: Inline;\n content: Array<Inline | Text>;\n};\n\ntype BlockNode<T> = RichTextNode<T> & {\n type: Block;\n content: Array<Block | Inline | Text>;\n};\n\nconst hasValue = (obj: Record<string, unknown>, value: unknown) =>\n Object.values(obj).includes(value);\n\nconst isText = <T>(node: RichTextNode<T> | undefined): node is TextNode<T> => node?.type === \"text\";\n\nconst isBlock = <T>(node: RichTextNode<T> | undefined): node is BlockNode<T> =>\n !isInline(node) && !isText(node) && hasValue(BLOCK, node?.type);\n\nconst isInline = <T>(node: RichTextNode<T> | undefined): node is InlineNode<T> =>\n hasValue(INLINE, node?.type);\n\nexport const safeJsonParse = <T>(jsonString: string): T | null => {\n try {\n return JSON.parse(jsonString);\n } catch {\n return null;\n }\n};\n\n// This is equivalent to https://github.com/contentful/rich-text/tree/master/packages/rich-text-plain-text-renderer\nexport const richToPlainText = <T>(data: string, blockDivisor = \" \"): string => {\n const rootNode = safeJsonParse<RichTextNode<T>>(data);\n\n if (!rootNode || !rootNode.content) {\n return \"\";\n }\n\n return rootNode.content.reduce((acc: string, node: RichTextNode<T>, i) => {\n let nodeTextValue = \"\";\n\n if (isText(node)) {\n nodeTextValue = node.value;\n } else if (isBlock(node) || isInline(node)) {\n nodeTextValue = richToPlainText(JSON.stringify(node), blockDivisor);\n if (!nodeTextValue.length) {\n return acc;\n }\n }\n\n const nextNode = rootNode?.content?.[i + 1];\n const divisor = isBlock(nextNode) ? blockDivisor : \"\";\n\n return acc + nodeTextValue + divisor;\n }, \"\");\n};\n\nexport function normalizeNode<T = Value>(node: RichTextNode<T>) {\n if (\n node.type === BLOCK.IMAGE &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"image\" in node.value &&\n node?.value?.image?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.image.url } };\n }\n\n if (\n node.type === BLOCK.VIDEO &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"video\" in node.value &&\n node.value.video?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.video.url } };\n }\n\n return node;\n}\n","import React, { Fragment, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport { Link } from \"@purpur/link\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { TextSpacing } from \"@purpur/text-spacing\";\n\nimport { BLOCK, MARK } from \"./constants\";\nimport { tableRenderer } from \"./renderers\";\nimport type {\n ImageProp,\n LinkProp,\n Mark,\n NodeTypes,\n RichTextNode,\n RichTextProps,\n Value,\n VideoPosterProp,\n} from \"./types\";\nimport { normalizeNode } from \"./utils\";\n\n// Inspired by https://github.com/contentful/rich-text/blob/master/packages/rich-text-react-renderer/src/index.tsx\nconst MARK_TYPES = {\n [MARK.BOLD]: (children: ReactNode) => <b>{children}</b>,\n [MARK.ITALIC]: (children: ReactNode) => <i>{children}</i>,\n [MARK.UNDERLINE]: (children: ReactNode) => <u>{children}</u>,\n [MARK.CODE]: (children: ReactNode) => <code>{children}</code>,\n};\n\nconst getNodeType = (node: RichTextNode) => {\n const type = node.type ?? node.nodeType!;\n if (type.startsWith(\"heading-\")) return type.replace(\"heading-\", \"header-\");\n if (type.startsWith(\"entry-hyperlink\")) return type.replace(\"entry-hyperlink\", \"hyperlink\");\n return type;\n};\n\nfunction getNodeTypes<T = Value>(\n link: LinkProp,\n image: ImageProp,\n videoPoster: VideoPosterProp\n): NodeTypes<T> {\n return {\n [BLOCK.RICHTEXTDOCUMENT]: (_, children) => children,\n [BLOCK.DOCUMENT]: (_, children) => children,\n [BLOCK.PARAGRAPH]: (_, children) => <Paragraph variant=\"paragraph-200\">{children}</Paragraph>,\n [BLOCK.TEXT]: (node) => {\n const { value: nodeValue, marks } = node;\n const value = typeof nodeValue === \"string\" ? nodeValue.replace(/\\n/g, \"<br />\") : nodeValue;\n\n const element = <span dangerouslySetInnerHTML={{ __html: value as string }} />;\n\n if (!marks) {\n return element;\n }\n return marks.reduce((accumulator: ReactNode, currentValue: Mark | { type: Mark }) => {\n return MARK_TYPES[typeof currentValue === \"string\" ? currentValue : currentValue.type](\n accumulator\n );\n }, element);\n },\n [BLOCK.HYPERLINK]: (node, children) => {\n const uri = node.uri ?? (node.data?.uri as string);\n\n if (link) {\n return <Link variant=\"text\">{link(children, uri)}</Link>;\n }\n return (\n <Link variant=\"text\">\n <a href={uri}>{children}</a>\n </Link>\n );\n },\n [BLOCK.HR]: () => <hr />,\n [BLOCK.HEADER_2]: (_, children) => (\n <Heading tag=\"h2\" variant=\"title-300\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_3]: (_, children) => (\n <Heading tag=\"h3\" variant=\"title-200\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_4]: (_, children) => (\n <Heading tag=\"h4\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_5]: (_, children) => (\n <Heading tag=\"h5\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_6]: (_, children) => (\n <Heading tag=\"h6\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.TABLE]: tableRenderer,\n [BLOCK.TABLE_ROW]: (_, children) => <tr>{children}</tr>,\n [BLOCK.TABLE_HEADER_CELL]: (_, children) => <th scope=\"col\">{children}</th>,\n [BLOCK.TABLE_CELL]: (_, children) => {\n return <td>{children}</td>;\n },\n [BLOCK.TABLE_BODY]: (_, children) => <tbody>{children}</tbody>,\n [BLOCK.LIST_ITEM]: (_, children) => <li>{children}</li>,\n [BLOCK.OL_LIST]: (_, children) => <ol>{children}</ol>,\n [BLOCK.UL_LIST]: (_, children) => <ul>{children}</ul>,\n [BLOCK.QUOTE]: (_, children) => <blockquote>“{children}”</blockquote>,\n [BLOCK.EMBEDDED_ENTRY]: (_, children) => children,\n [BLOCK.EMBEDDED_ASSET]: (_, children) => children,\n [BLOCK.IMAGE]: ({ value }) => {\n if (typeof value === \"object\" && value && \"url\" in value && value.url) {\n if (image) {\n return image(value.url, value.altText, value.image?.contentType);\n }\n return <img src={value.url} alt={value.altText ?? \"\"} loading=\"lazy\" />;\n }\n return null;\n },\n [BLOCK.VIDEO]: ({ value }) => {\n if (typeof value === \"object\" && value && \"posterImage\" in value) {\n const posterImage = value.posterImage?.url;\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n data-testid=\"rich text video\"\n controls\n src={value.url}\n poster={videoPoster && posterImage ? videoPoster(posterImage) : posterImage}\n />\n );\n }\n return null;\n },\n };\n}\n\nconst isValueWhitespaceOnly = (value: string): boolean => {\n return !value.replace(/\\s+/g, \"\");\n};\n\n/**\n * Strictly checks if a singular node value OR nested node content is an empty element.\n */\n\nconst isNodeOrContentEmpty = <T,>(node: RichTextNode<T>): boolean => {\n const { content, value } = node;\n\n if (!content) {\n return typeof value === \"string\" && isValueWhitespaceOnly(value);\n }\n\n for (const item of content) {\n if (getNodeType(item) === BLOCK.HYPERLINK) {\n return false;\n }\n }\n\n return (\n content.length > 0 &&\n typeof content[0].value === \"string\" &&\n isValueWhitespaceOnly(content[0].value)\n );\n};\n\nconst serializeRichText = <T,>(\n node: RichTextNode<T>,\n customNodeTypes?: NodeTypes<T>,\n link?: LinkProp,\n image?: ImageProp,\n videoPoster?: VideoPosterProp\n): ReactNode => {\n let index = 0; // nodes in rich text does not contain ids, we'll use index as keys for react\n\n const nodes = {\n ...getNodeTypes(link, image, videoPoster),\n ...customNodeTypes,\n };\n\n const renderNode = (node: RichTextNode<T>): ReactNode => {\n const renderFunc = nodes[getNodeType(node)];\n\n // node types that are missing from both default NODE_TYPES and custom are never rendered\n if (typeof renderFunc === \"undefined\") {\n return null;\n }\n\n if (isNodeOrContentEmpty(node)) {\n return null;\n }\n\n const children = node.content ? node.content.map(renderNode) : [];\n\n return <Fragment key={index++}>{renderFunc(normalizeNode(node), children)}</Fragment>;\n };\n\n return renderNode(node);\n};\n\n/* Not using a arrow function here since the default generic will mess with the highlighting\n and it still needs a eslint-disable-next-line because it still lints incorrect */\n\nfunction RichText<T = Value>({\n data,\n className,\n customNodeTypes,\n noTextSpacing = false,\n link,\n image,\n videoPoster,\n element: ElementTag = \"div\",\n ...rest\n}: RichTextProps<T>) {\n return data ? (\n noTextSpacing ? (\n <ElementTag className={className} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </ElementTag>\n ) : (\n <TextSpacing className={className} element={ElementTag} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </TextSpacing>\n )\n ) : null;\n}\n\nexport { getNodeTypes, RichText, serializeRichText };\n"],"names":["INLINE","BLOCK","MARK","isHeaderRow","row","node","tableRenderer","richTextNode","children","tableContent","headerRows","bodyRows","headers","body","headerRowChildren","bodyRowChildren","jsx","jsxs","hasValue","obj","value","isText","isBlock","isInline","safeJsonParse","jsonString","richToPlainText","data","blockDivisor","rootNode","acc","i","nodeTextValue","nextNode","divisor","normalizeNode","MARK_TYPES","getNodeType","type","getNodeTypes","link","image","videoPoster","_","Paragraph","nodeValue","marks","element","accumulator","currentValue","uri","Link","Heading","posterImage","isValueWhitespaceOnly","isNodeOrContentEmpty","content","item","serializeRichText","customNodeTypes","index","nodes","renderNode","renderFunc","Fragment","RichText","className","noTextSpacing","ElementTag","rest","TextSpacing"],"mappings":";;;;;;AAAO,MAAMA,IAAS;AAAA,EACpB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,gBAAgB;AAClB,GAEaC,IAAQ;AAAA,EACnB,UAAU;AAAA,EACV,WAAW;AAAA,EACX,MAAM;AAAA,EACN,WAAW;AAAA,EACX,iBAAiB;AAAA,EAEjB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EAEV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EAEX,OAAO;AAAA,EACP,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,YAAY;AAAA,EAEZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EAEX,IAAI;AAAA,EACJ,OAAO;AAAA,EAEP,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAEhB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,QAAQ;AACV,GAEaC,IAAO;AAAA,EAClB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM;AACR,GCnDMC,IAAc,CAACC,MACnBA,EAAI,SAASH,EAAM,aACnB,CAAC,CAACG,EAAI,SAAS,MAAM,CAACC,MAASA,EAAK,SAASJ,EAAM,iBAAiB,GAMzDK,IAAgB,CAACC,GAA4BC,MAA0B;AAClF,MAAID,EAAa,SAASN,EAAM;AAC9B,WAAOO;AAET,QAAM,EAAE,SAASC,EAAA,IAAiBF,GAC5B,CAACG,GAAYC,CAAQ,KAAKF,KAAgB,CAAA,GAAI;AAAA,IAClD,CAAC,CAACG,GAASC,CAAI,GAAGT,MACTD,EAAYC,CAAG,IAAI,CAAC,CAAC,GAAGQ,GAASR,CAAG,GAAGS,CAAI,IAAI,CAACD,GAAS,CAAC,GAAGC,GAAMT,CAAG,CAAC;AAAA,IAEhF,CAAC,CAAA,GAAI,CAAA,CAAE;AAAA,EAAA,GAEHU,IAAoBN,EAAS,MAAM,GAAGE,EAAW,MAAM,GACvDK,IAAkBP,EAAS,MAAME,EAAW,QAAQF,EAAS,MAAM;AACzE,SACE,gBAAAQ,EAAC,SAAI,WAAU,2CACb,4BAAC,OAAA,EAAI,WAAU,iDACb,UAAA,gBAAAC,EAAC,SAAA,EACE,UAAA;AAAA,IAAAP,EAAW,SAAS,KAAK,gBAAAM,EAAC,SAAA,EAAO,UAAAF,GAAkB;AAAA,IACnDH,EAAS,SAAS,KAAK,gBAAAK,EAAC,WAAO,UAAAD,EAAA,CAAgB;AAAA,EAAA,EAAA,CAClD,GACF,GACF;AAEJ,GCbMG,IAAW,CAACC,GAA8BC,MAC9C,OAAO,OAAOD,CAAG,EAAE,SAASC,CAAK,GAE7BC,IAAS,CAAIhB,MAA2DA,GAAM,SAAS,QAEvFiB,IAAU,CAAIjB,MAClB,CAACkB,EAASlB,CAAI,KAAK,CAACgB,EAAOhB,CAAI,KAAKa,EAASjB,GAAOI,GAAM,IAAI,GAE1DkB,IAAW,CAAIlB,MACnBa,EAASlB,GAAQK,GAAM,IAAI,GAEhBmB,IAAgB,CAAIC,MAAiC;AAChE,MAAI;AACF,WAAO,KAAK,MAAMA,CAAU;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF,GAGaC,IAAkB,CAAIC,GAAcC,IAAe,QAAgB;AAC9E,QAAMC,IAAWL,EAA+BG,CAAI;AAEpD,SAAI,CAACE,KAAY,CAACA,EAAS,UAClB,KAGFA,EAAS,QAAQ,OAAO,CAACC,GAAazB,GAAuB0B,MAAM;AACxE,QAAIC,IAAgB;AAEpB,QAAIX,EAAOhB,CAAI;AACb,MAAA2B,IAAgB3B,EAAK;AAAA,cACZiB,EAAQjB,CAAI,KAAKkB,EAASlB,CAAI,OACvC2B,IAAgBN,EAAgB,KAAK,UAAUrB,CAAI,GAAGuB,CAAY,GAC9D,CAACI,EAAc;AACjB,aAAOF;AAIX,UAAMG,IAAWJ,GAAU,UAAUE,IAAI,CAAC,GACpCG,IAAUZ,EAAQW,CAAQ,IAAIL,IAAe;AAEnD,WAAOE,IAAME,IAAgBE;AAAA,EAC/B,GAAG,EAAE;AACP;AAEO,SAASC,EAAyB9B,GAAuB;AAC9D,SACEA,EAAK,SAASJ,EAAM,SACpB,OAAOI,EAAK,SAAU,YACtBA,GAAM,SACN,WAAWA,EAAK,SAChBA,GAAM,OAAO,OAAO,MAEb,EAAE,GAAGA,GAAM,OAAO,EAAE,GAAGA,EAAK,OAAO,KAAKA,EAAK,MAAM,MAAM,MAAI,IAIpEA,EAAK,SAASJ,EAAM,SACpB,OAAOI,EAAK,SAAU,YACtBA,GAAM,SACN,WAAWA,EAAK,SAChBA,EAAK,MAAM,OAAO,MAEX,EAAE,GAAGA,GAAM,OAAO,EAAE,GAAGA,EAAK,OAAO,KAAKA,EAAK,MAAM,MAAM,MAAI,IAG/DA;AACT;ACtEA,MAAM+B,IAAa;AAAA,EACjB,CAAClC,EAAK,IAAI,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,OAAG,UAAAR,GAAS;AAAA,EACnD,CAACN,EAAK,MAAM,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,OAAG,UAAAR,GAAS;AAAA,EACrD,CAACN,EAAK,SAAS,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,OAAG,UAAAR,GAAS;AAAA,EACxD,CAACN,EAAK,IAAI,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,UAAM,UAAAR,EAAA,CAAS;AACxD,GAEM6B,IAAc,CAAChC,MAAuB;AAC1C,QAAMiC,IAAOjC,EAAK,QAAQA,EAAK;AAC/B,SAAIiC,EAAK,WAAW,UAAU,IAAUA,EAAK,QAAQ,YAAY,SAAS,IACtEA,EAAK,WAAW,iBAAiB,IAAUA,EAAK,QAAQ,mBAAmB,WAAW,IACnFA;AACT;AAEA,SAASC,EACPC,GACAC,GACAC,GACc;AACd,SAAO;AAAA,IACL,CAACzC,EAAM,gBAAgB,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IAC3C,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IACnC,CAACP,EAAM,SAAS,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC4B,GAAA,EAAU,SAAQ,iBAAiB,UAAApC,EAAA,CAAS;AAAA,IACjF,CAACP,EAAM,IAAI,GAAG,CAACI,MAAS;AACtB,YAAM,EAAE,OAAOwC,GAAW,OAAAC,EAAA,IAAUzC,GAC9Be,IAAQ,OAAOyB,KAAc,WAAWA,EAAU,QAAQ,OAAO,QAAQ,IAAIA,GAE7EE,IAAU,gBAAA/B,EAAC,QAAA,EAAK,yBAAyB,EAAE,QAAQI,KAAmB;AAE5E,aAAK0B,IAGEA,EAAM,OAAO,CAACE,GAAwBC,MACpCb,EAAW,OAAOa,KAAiB,WAAWA,IAAeA,EAAa,IAAI;AAAA,QACnFD;AAAA,MAAA,GAEDD,CAAO,IANDA;AAAA,IAOX;AAAA,IACA,CAAC9C,EAAM,SAAS,GAAG,CAACI,GAAMG,MAAa;AACrC,YAAM0C,IAAM7C,EAAK,OAAQA,EAAK,MAAM;AAEpC,aAAImC,sBACMW,GAAA,EAAK,SAAQ,QAAQ,UAAAX,EAAKhC,GAAU0C,CAAG,GAAE,IAGjD,gBAAAlC,EAACmC,KAAK,SAAQ,QACZ,4BAAC,KAAA,EAAE,MAAMD,GAAM,UAAA1C,EAAA,CAAS,EAAA,CAC1B;AAAA,IAEJ;AAAA,IACA,CAACP,EAAM,EAAE,GAAG,wBAAO,MAAA,CAAA,CAAG;AAAA,IACtB,CAACA,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,KAAK,GAAGK;AAAA,IACf,CAACL,EAAM,SAAS,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAClD,CAACP,EAAM,iBAAiB,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAG,OAAM,OAAO,UAAAR,EAAA,CAAS;AAAA,IACtE,CAACP,EAAM,UAAU,GAAG,CAAC0C,GAAGnC,MACf,gBAAAQ,EAAC,QAAI,UAAAR,GAAS;AAAA,IAEvB,CAACP,EAAM,UAAU,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,SAAA,EAAO,UAAAR,GAAS;AAAA,IACtD,CAACP,EAAM,SAAS,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAClD,CAACP,EAAM,OAAO,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAChD,CAACP,EAAM,OAAO,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAChD,CAACP,EAAM,KAAK,GAAG,CAAC0C,GAAGnC,wBAAc,cAAA,EAAW,UAAA;AAAA,MAAA;AAAA,MAAQA;AAAA,MAAS;AAAA,IAAA,GAAO;AAAA,IACpE,CAACP,EAAM,cAAc,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IACzC,CAACP,EAAM,cAAc,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IACzC,CAACP,EAAM,KAAK,GAAG,CAAC,EAAE,OAAAmB,QACZ,OAAOA,KAAU,YAAYA,KAAS,SAASA,KAASA,EAAM,MAC5DqB,IACKA,EAAMrB,EAAM,KAAKA,EAAM,SAASA,EAAM,OAAO,WAAW,IAE1D,gBAAAJ,EAAC,OAAA,EAAI,KAAKI,EAAM,KAAK,KAAKA,EAAM,WAAW,IAAI,SAAQ,OAAA,CAAO,IAEhE;AAAA,IAET,CAACnB,EAAM,KAAK,GAAG,CAAC,EAAE,OAAAmB,QAAY;AAC5B,UAAI,OAAOA,KAAU,YAAYA,KAAS,iBAAiBA,GAAO;AAChE,cAAMiC,IAAcjC,EAAM,aAAa;AAEvC;AAAA;AAAA,UAEE,gBAAAJ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,UAAQ;AAAA,cACR,KAAKI,EAAM;AAAA,cACX,QAAQsB,KAAeW,IAAcX,EAAYW,CAAW,IAAIA;AAAA,YAAA;AAAA,UAAA;AAAA;AAAA,MAGtE;AACA,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;AAEA,MAAMC,IAAwB,CAAClC,MACtB,CAACA,EAAM,QAAQ,QAAQ,EAAE,GAO5BmC,IAAuB,CAAKlD,MAAmC;AACnE,QAAM,EAAE,SAAAmD,GAAS,OAAApC,EAAA,IAAUf;AAE3B,MAAI,CAACmD;AACH,WAAO,OAAOpC,KAAU,YAAYkC,EAAsBlC,CAAK;AAGjE,aAAWqC,KAAQD;AACjB,QAAInB,EAAYoB,CAAI,MAAMxD,EAAM;AAC9B,aAAO;AAIX,SACEuD,EAAQ,SAAS,KACjB,OAAOA,EAAQ,CAAC,EAAE,SAAU,YAC5BF,EAAsBE,EAAQ,CAAC,EAAE,KAAK;AAE1C,GAEME,IAAoB,CACxBrD,GACAsD,GACAnB,GACAC,GACAC,MACc;AACd,MAAIkB,IAAQ;AAEZ,QAAMC,IAAQ;AAAA,IACZ,GAAGtB,EAAaC,GAAMC,GAAOC,CAAW;AAAA,IACxC,GAAGiB;AAAA,EAAA,GAGCG,IAAa,CAACzD,MAAqC;AACvD,UAAM0D,IAAaF,EAAMxB,EAAYhC,CAAI,CAAC;AAO1C,QAJI,OAAO0D,IAAe,OAItBR,EAAqBlD,CAAI;AAC3B,aAAO;AAGT,UAAMG,IAAWH,EAAK,UAAUA,EAAK,QAAQ,IAAIyD,CAAU,IAAI,CAAA;AAE/D,WAAO,gBAAA9C,EAACgD,KAAwB,UAAAD,EAAW5B,EAAc9B,CAAI,GAAGG,CAAQ,KAAlDoD,GAAoD;AAAA,EAC5E;AAEA,SAAOE,EAAWzD,CAAI;AACxB;AAKA,SAAS4D,EAAoB;AAAA,EAC3B,MAAAtC;AAAA,EACA,WAAAuC;AAAA,EACA,iBAAAP;AAAA,EACA,eAAAQ,IAAgB;AAAA,EAChB,MAAA3B;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAS0B,IAAa;AAAA,EACtB,GAAGC;AACL,GAAqB;AACnB,SAAO1C,IACLwC,IACE,gBAAAnD,EAACoD,GAAA,EAAW,WAAAF,GAAuB,GAAGG,GACnC,UAAAX,EAAkB/B,GAAMgC,GAAiBnB,GAAMC,GAAOC,CAAW,EAAA,CACpE,IAEA,gBAAA1B,EAACsD,GAAA,EAAY,WAAAJ,GAAsB,SAASE,GAAa,GAAGC,GACzD,UAAAX,EAAkB/B,GAAMgC,GAAiBnB,GAAMC,GAAOC,CAAW,GACpE,IAEA;AACN;"}
|
|
1
|
+
{"version":3,"file":"RichText-D4vznH1B.mjs","sources":["../../../components/rich-text/src/constants.ts","../../../components/rich-text/src/renderers.tsx","../../../components/rich-text/src/utils.ts","../../../components/rich-text/src/RichText.tsx"],"sourcesContent":["export const INLINE = {\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n ASSET_HYPERLINK: \"asset-hyperlink\",\n RESOURCE_HYPERLINK: \"resource-hyperlink\",\n EMBEDDED_ENTRY: \"embedded-entry-inline\",\n} as const;\n\nexport const BLOCK = {\n DOCUMENT: \"document\",\n PARAGRAPH: \"paragraph\",\n TEXT: \"text\",\n HYPERLINK: \"hyperlink\",\n ENTRY_HYPERLINK: \"entry-hyperlink\",\n\n HEADER_1: \"header-1\",\n HEADER_2: \"header-2\",\n HEADER_3: \"header-3\",\n HEADER_4: \"header-4\",\n HEADER_5: \"header-5\",\n HEADER_6: \"header-6\",\n\n HEADING_1: \"heading-1\",\n HEADING_2: \"heading-2\",\n HEADING_3: \"heading-3\",\n HEADING_4: \"heading-4\",\n HEADING_5: \"heading-5\",\n HEADING_6: \"heading-6\",\n\n TABLE: \"table\",\n TABLE_ROW: \"table-row\",\n TABLE_HEADER_CELL: \"table-header-cell\",\n TABLE_CELL: \"table-cell\",\n TABLE_BODY: \"table-body\",\n\n OL_LIST: \"ordered-list\",\n UL_LIST: \"unordered-list\",\n LIST_ITEM: \"list-item\",\n\n HR: \"horizontal-row\",\n QUOTE: \"blockquote\",\n\n EMBEDDED_ENTRY: \"embedded-entity\",\n EMBEDDED_ASSET: \"embedded-asset-block\",\n\n IMAGE: \"image\",\n VIDEO: \"video\",\n RICHTEXTDOCUMENT: \"rich-text-document\",\n TEASER: \"teaser\",\n} as const;\n\nexport const MARK = {\n BOLD: \"bold\",\n ITALIC: \"italic\",\n UNDERLINE: \"underline\",\n CODE: \"code\",\n} as const;\n\nexport const ELEMENT = {\n DIV: \"div\",\n SPAN: \"span\",\n} as const;\n","import React, { type ReactNode } from \"react\";\n\nimport { BLOCK } from \"./constants\";\nimport { type RichTextNode } from \"./types\";\n\nconst isHeaderRow = (row: RichTextNode): boolean =>\n row.type === BLOCK.TABLE_ROW &&\n !!row.content?.every((node) => node.type === BLOCK.TABLE_HEADER_CELL);\n\n/**\n * Wrap the first rows with <thead /> if it consists of only <th> elements.\n * Wrap the rest of the rows with <tbody />.\n */\nexport const tableRenderer = (richTextNode: RichTextNode, children: ReactNode[]) => {\n if (richTextNode.type !== BLOCK.TABLE) {\n return children;\n }\n const { content: tableContent } = richTextNode;\n const [headerRows, bodyRows] = (tableContent || []).reduce<[RichTextNode[], RichTextNode[]]>(\n ([headers, body], row) => {\n return isHeaderRow(row) ? [[...headers, row], body] : [headers, [...body, row]];\n },\n [[], []]\n );\n const headerRowChildren = children.slice(0, headerRows.length);\n const bodyRowChildren = children.slice(headerRows.length, children.length);\n return (\n <div className=\"purpur-rich-text-table-scroll-container\">\n <div className=\"purpur-rich-text-table-inner-scroll-container\">\n <table>\n {headerRows.length > 0 && <thead>{headerRowChildren}</thead>}\n {bodyRows.length > 0 && <tbody>{bodyRowChildren}</tbody>}\n </table>\n </div>\n </div>\n );\n};\n","import { BLOCK, INLINE } from \"./constants\";\nimport { type Block, type Inline, type Mark, type RichTextNode, type Value } from \"./types\";\n\nexport type MarkNode = {\n type: Mark;\n};\n\ntype TextNode<T> = RichTextNode<T> & {\n type: \"text\";\n value: string;\n marks: MarkNode[];\n};\n\ntype InlineNode<T> = RichTextNode<T> & {\n type: Inline;\n content: Array<Inline | Text>;\n};\n\ntype BlockNode<T> = RichTextNode<T> & {\n type: Block;\n content: Array<Block | Inline | Text>;\n};\n\nconst hasValue = (obj: Record<string, unknown>, value: unknown) =>\n Object.values(obj).includes(value);\n\nconst isText = <T>(node: RichTextNode<T> | undefined): node is TextNode<T> => node?.type === \"text\";\n\nconst isBlock = <T>(node: RichTextNode<T> | undefined): node is BlockNode<T> =>\n !isInline(node) && !isText(node) && hasValue(BLOCK, node?.type);\n\nconst isInline = <T>(node: RichTextNode<T> | undefined): node is InlineNode<T> =>\n hasValue(INLINE, node?.type);\n\nexport const safeJsonParse = <T>(jsonString: string): T | null => {\n try {\n return JSON.parse(jsonString);\n } catch {\n return null;\n }\n};\n\n// This is equivalent to https://github.com/contentful/rich-text/tree/master/packages/rich-text-plain-text-renderer\nexport const richToPlainText = <T>(data: string, blockDivisor = \" \"): string => {\n const rootNode = safeJsonParse<RichTextNode<T>>(data);\n\n if (!rootNode || !rootNode.content) {\n return \"\";\n }\n\n return rootNode.content.reduce((acc: string, node: RichTextNode<T>, i) => {\n let nodeTextValue = \"\";\n\n if (isText(node)) {\n nodeTextValue = node.value;\n } else if (isBlock(node) || isInline(node)) {\n nodeTextValue = richToPlainText(JSON.stringify(node), blockDivisor);\n if (!nodeTextValue.length) {\n return acc;\n }\n }\n\n const nextNode = rootNode?.content?.[i + 1];\n const divisor = isBlock(nextNode) ? blockDivisor : \"\";\n\n return acc + nodeTextValue + divisor;\n }, \"\");\n};\n\nexport function normalizeNode<T = Value>(node: RichTextNode<T>) {\n if (\n node.type === BLOCK.IMAGE &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"image\" in node.value &&\n node?.value?.image?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.image.url } };\n }\n\n if (\n node.type === BLOCK.VIDEO &&\n typeof node.value === \"object\" &&\n node?.value &&\n \"video\" in node.value &&\n node.value.video?.url\n ) {\n return { ...node, value: { ...node.value, url: node.value.video.url } };\n }\n\n return node;\n}\n","import React, { Fragment, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport { Link } from \"@purpur/link\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport { TextSpacing } from \"@purpur/text-spacing\";\n\nimport { BLOCK, MARK } from \"./constants\";\nimport { tableRenderer } from \"./renderers\";\nimport type {\n ImageProp,\n LinkProp,\n Mark,\n NodeTypes,\n RichTextNode,\n RichTextProps,\n Value,\n VideoPosterProp,\n} from \"./types\";\nimport { normalizeNode } from \"./utils\";\n\n// Inspired by https://github.com/contentful/rich-text/blob/master/packages/rich-text-react-renderer/src/index.tsx\nconst MARK_TYPES = {\n [MARK.BOLD]: (children: ReactNode) => <b>{children}</b>,\n [MARK.ITALIC]: (children: ReactNode) => <i>{children}</i>,\n [MARK.UNDERLINE]: (children: ReactNode) => <u>{children}</u>,\n [MARK.CODE]: (children: ReactNode) => <code>{children}</code>,\n};\n\nconst getNodeType = (node: RichTextNode) => {\n const type = node.type ?? node.nodeType!;\n if (type.startsWith(\"heading-\")) return type.replace(\"heading-\", \"header-\");\n if (type.startsWith(\"entry-hyperlink\")) return type.replace(\"entry-hyperlink\", \"hyperlink\");\n return type;\n};\n\nfunction getNodeTypes<T = Value>(\n link: LinkProp,\n image: ImageProp,\n videoPoster: VideoPosterProp\n): NodeTypes<T> {\n return {\n [BLOCK.RICHTEXTDOCUMENT]: (_, children) => children,\n [BLOCK.DOCUMENT]: (_, children) => children,\n [BLOCK.PARAGRAPH]: (_, children) => <Paragraph variant=\"paragraph-200\">{children}</Paragraph>,\n [BLOCK.TEXT]: (node) => {\n const { value: nodeValue, marks } = node;\n const value = typeof nodeValue === \"string\" ? nodeValue.replace(/\\n/g, \"<br />\") : nodeValue;\n\n const element = <span dangerouslySetInnerHTML={{ __html: value as string }} />;\n\n if (!marks) {\n return element;\n }\n return marks.reduce((accumulator: ReactNode, currentValue: Mark | { type: Mark }) => {\n return MARK_TYPES[typeof currentValue === \"string\" ? currentValue : currentValue.type](\n accumulator\n );\n }, element);\n },\n [BLOCK.HYPERLINK]: (node, children) => {\n const uri = node.uri ?? (node.data?.uri as string);\n\n if (link) {\n return <Link variant=\"text\">{link(children, uri)}</Link>;\n }\n return (\n <Link variant=\"text\">\n <a href={uri}>{children}</a>\n </Link>\n );\n },\n [BLOCK.HR]: () => <hr />,\n [BLOCK.HEADER_2]: (_, children) => (\n <Heading tag=\"h2\" variant=\"title-300\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_3]: (_, children) => (\n <Heading tag=\"h3\" variant=\"title-200\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_4]: (_, children) => (\n <Heading tag=\"h4\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_5]: (_, children) => (\n <Heading tag=\"h5\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.HEADER_6]: (_, children) => (\n <Heading tag=\"h6\" variant=\"title-100\">\n {children}\n </Heading>\n ),\n [BLOCK.TABLE]: tableRenderer,\n [BLOCK.TABLE_ROW]: (_, children) => <tr>{children}</tr>,\n [BLOCK.TABLE_HEADER_CELL]: (_, children) => <th scope=\"col\">{children}</th>,\n [BLOCK.TABLE_CELL]: (_, children) => {\n return <td>{children}</td>;\n },\n [BLOCK.TABLE_BODY]: (_, children) => <tbody>{children}</tbody>,\n [BLOCK.LIST_ITEM]: (_, children) => <li>{children}</li>,\n [BLOCK.OL_LIST]: (_, children) => <ol>{children}</ol>,\n [BLOCK.UL_LIST]: (_, children) => <ul>{children}</ul>,\n [BLOCK.QUOTE]: (_, children) => <blockquote>“{children}”</blockquote>,\n [BLOCK.EMBEDDED_ENTRY]: (_, children) => children,\n [BLOCK.EMBEDDED_ASSET]: (_, children) => children,\n [BLOCK.IMAGE]: ({ value }) => {\n if (typeof value === \"object\" && value && \"url\" in value && value.url) {\n if (image) {\n return image(value.url, value.altText, value.image?.contentType);\n }\n return <img src={value.url} alt={value.altText ?? \"\"} loading=\"lazy\" />;\n }\n return null;\n },\n [BLOCK.VIDEO]: ({ value }) => {\n if (typeof value === \"object\" && value && \"posterImage\" in value) {\n const posterImage = value.posterImage?.url;\n\n return (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n data-testid=\"rich text video\"\n controls\n src={value.url}\n poster={videoPoster && posterImage ? videoPoster(posterImage) : posterImage}\n />\n );\n }\n return null;\n },\n };\n}\n\nconst isValueWhitespaceOnly = (value: string): boolean => {\n return !value.replace(/\\s+/g, \"\");\n};\n\n/**\n * Strictly checks if a singular node value OR nested node content is an empty element.\n */\n\nconst isNodeOrContentEmpty = <T,>(node: RichTextNode<T>): boolean => {\n const { content, value } = node;\n\n if (!content) {\n return typeof value === \"string\" && isValueWhitespaceOnly(value);\n }\n\n for (const item of content) {\n if (getNodeType(item) === BLOCK.HYPERLINK) {\n return false;\n }\n }\n\n return (\n content.length > 0 &&\n typeof content[0].value === \"string\" &&\n isValueWhitespaceOnly(content[0].value)\n );\n};\n\nconst serializeRichText = <T,>(\n node: RichTextNode<T>,\n customNodeTypes?: NodeTypes<T>,\n link?: LinkProp,\n image?: ImageProp,\n videoPoster?: VideoPosterProp\n): ReactNode => {\n let index = 0; // nodes in rich text does not contain ids, we'll use index as keys for react\n\n const nodes = {\n ...getNodeTypes(link, image, videoPoster),\n ...customNodeTypes,\n };\n\n const renderNode = (node: RichTextNode<T>): ReactNode => {\n const renderFunc = nodes[getNodeType(node)];\n\n // node types that are missing from both default NODE_TYPES and custom are never rendered\n if (typeof renderFunc === \"undefined\") {\n return null;\n }\n\n if (isNodeOrContentEmpty(node)) {\n return null;\n }\n\n const children = node.content ? node.content.map(renderNode) : [];\n\n return <Fragment key={index++}>{renderFunc(normalizeNode(node), children)}</Fragment>;\n };\n\n return renderNode(node);\n};\n\n/* Not using a arrow function here since the default generic will mess with the highlighting\n and it still needs a eslint-disable-next-line because it still lints incorrect */\n\nfunction RichText<T = Value>({\n data,\n className,\n customNodeTypes,\n noTextSpacing = false,\n link,\n image,\n videoPoster,\n element: ElementTag = \"div\",\n ...rest\n}: RichTextProps<T>) {\n return data ? (\n noTextSpacing ? (\n <ElementTag className={className} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </ElementTag>\n ) : (\n <TextSpacing className={className} element={ElementTag} {...rest}>\n {serializeRichText(data, customNodeTypes, link, image, videoPoster)}\n </TextSpacing>\n )\n ) : null;\n}\n\nexport { getNodeTypes, RichText, serializeRichText };\n"],"names":["INLINE","BLOCK","MARK","isHeaderRow","row","node","tableRenderer","richTextNode","children","tableContent","headerRows","bodyRows","headers","body","headerRowChildren","bodyRowChildren","jsx","jsxs","hasValue","obj","value","isText","isBlock","isInline","safeJsonParse","jsonString","richToPlainText","data","blockDivisor","rootNode","acc","i","nodeTextValue","nextNode","divisor","normalizeNode","MARK_TYPES","getNodeType","type","getNodeTypes","link","image","videoPoster","_","Paragraph","nodeValue","marks","element","accumulator","currentValue","uri","Link","Heading","posterImage","isValueWhitespaceOnly","isNodeOrContentEmpty","content","item","serializeRichText","customNodeTypes","index","nodes","renderNode","renderFunc","Fragment","RichText","className","noTextSpacing","ElementTag","rest","TextSpacing"],"mappings":";;;;;;AAAO,MAAMA,IAAS;AAAA,EACpB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,gBAAgB;AAClB,GAEaC,IAAQ;AAAA,EACnB,UAAU;AAAA,EACV,WAAW;AAAA,EACX,MAAM;AAAA,EACN,WAAW;AAAA,EACX,iBAAiB;AAAA,EAEjB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EAEV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EAEX,OAAO;AAAA,EACP,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,YAAY;AAAA,EAEZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EAEX,IAAI;AAAA,EACJ,OAAO;AAAA,EAEP,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAEhB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,kBAAkB;AAAA,EAClB,QAAQ;AACV,GAEaC,IAAO;AAAA,EAClB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM;AACR,GCnDMC,IAAc,CAACC,MACnBA,EAAI,SAASH,EAAM,aACnB,CAAC,CAACG,EAAI,SAAS,MAAM,CAACC,MAASA,EAAK,SAASJ,EAAM,iBAAiB,GAMzDK,IAAgB,CAACC,GAA4BC,MAA0B;AAClF,MAAID,EAAa,SAASN,EAAM;AAC9B,WAAOO;AAET,QAAM,EAAE,SAASC,EAAA,IAAiBF,GAC5B,CAACG,GAAYC,CAAQ,KAAKF,KAAgB,CAAA,GAAI;AAAA,IAClD,CAAC,CAACG,GAASC,CAAI,GAAGT,MACTD,EAAYC,CAAG,IAAI,CAAC,CAAC,GAAGQ,GAASR,CAAG,GAAGS,CAAI,IAAI,CAACD,GAAS,CAAC,GAAGC,GAAMT,CAAG,CAAC;AAAA,IAEhF,CAAC,CAAA,GAAI,CAAA,CAAE;AAAA,EAAA,GAEHU,IAAoBN,EAAS,MAAM,GAAGE,EAAW,MAAM,GACvDK,IAAkBP,EAAS,MAAME,EAAW,QAAQF,EAAS,MAAM;AACzE,SACE,gBAAAQ,EAAC,SAAI,WAAU,2CACb,4BAAC,OAAA,EAAI,WAAU,iDACb,UAAA,gBAAAC,EAAC,SAAA,EACE,UAAA;AAAA,IAAAP,EAAW,SAAS,KAAK,gBAAAM,EAAC,SAAA,EAAO,UAAAF,GAAkB;AAAA,IACnDH,EAAS,SAAS,KAAK,gBAAAK,EAAC,WAAO,UAAAD,EAAA,CAAgB;AAAA,EAAA,EAAA,CAClD,GACF,GACF;AAEJ,GCbMG,IAAW,CAACC,GAA8BC,MAC9C,OAAO,OAAOD,CAAG,EAAE,SAASC,CAAK,GAE7BC,IAAS,CAAIhB,MAA2DA,GAAM,SAAS,QAEvFiB,IAAU,CAAIjB,MAClB,CAACkB,EAASlB,CAAI,KAAK,CAACgB,EAAOhB,CAAI,KAAKa,EAASjB,GAAOI,GAAM,IAAI,GAE1DkB,IAAW,CAAIlB,MACnBa,EAASlB,GAAQK,GAAM,IAAI,GAEhBmB,IAAgB,CAAIC,MAAiC;AAChE,MAAI;AACF,WAAO,KAAK,MAAMA,CAAU;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF,GAGaC,IAAkB,CAAIC,GAAcC,IAAe,QAAgB;AAC9E,QAAMC,IAAWL,EAA+BG,CAAI;AAEpD,SAAI,CAACE,KAAY,CAACA,EAAS,UAClB,KAGFA,EAAS,QAAQ,OAAO,CAACC,GAAazB,GAAuB0B,MAAM;AACxE,QAAIC,IAAgB;AAEpB,QAAIX,EAAOhB,CAAI;AACb,MAAA2B,IAAgB3B,EAAK;AAAA,cACZiB,EAAQjB,CAAI,KAAKkB,EAASlB,CAAI,OACvC2B,IAAgBN,EAAgB,KAAK,UAAUrB,CAAI,GAAGuB,CAAY,GAC9D,CAACI,EAAc;AACjB,aAAOF;AAIX,UAAMG,IAAWJ,GAAU,UAAUE,IAAI,CAAC,GACpCG,IAAUZ,EAAQW,CAAQ,IAAIL,IAAe;AAEnD,WAAOE,IAAME,IAAgBE;AAAA,EAC/B,GAAG,EAAE;AACP;AAEO,SAASC,EAAyB9B,GAAuB;AAC9D,SACEA,EAAK,SAASJ,EAAM,SACpB,OAAOI,EAAK,SAAU,YACtBA,GAAM,SACN,WAAWA,EAAK,SAChBA,GAAM,OAAO,OAAO,MAEb,EAAE,GAAGA,GAAM,OAAO,EAAE,GAAGA,EAAK,OAAO,KAAKA,EAAK,MAAM,MAAM,MAAI,IAIpEA,EAAK,SAASJ,EAAM,SACpB,OAAOI,EAAK,SAAU,YACtBA,GAAM,SACN,WAAWA,EAAK,SAChBA,EAAK,MAAM,OAAO,MAEX,EAAE,GAAGA,GAAM,OAAO,EAAE,GAAGA,EAAK,OAAO,KAAKA,EAAK,MAAM,MAAM,MAAI,IAG/DA;AACT;ACtEA,MAAM+B,IAAa;AAAA,EACjB,CAAClC,EAAK,IAAI,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,OAAG,UAAAR,GAAS;AAAA,EACnD,CAACN,EAAK,MAAM,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,OAAG,UAAAR,GAAS;AAAA,EACrD,CAACN,EAAK,SAAS,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,OAAG,UAAAR,GAAS;AAAA,EACxD,CAACN,EAAK,IAAI,GAAG,CAACM,MAAwB,gBAAAQ,EAAC,UAAM,UAAAR,EAAA,CAAS;AACxD,GAEM6B,IAAc,CAAChC,MAAuB;AAC1C,QAAMiC,IAAOjC,EAAK,QAAQA,EAAK;AAC/B,SAAIiC,EAAK,WAAW,UAAU,IAAUA,EAAK,QAAQ,YAAY,SAAS,IACtEA,EAAK,WAAW,iBAAiB,IAAUA,EAAK,QAAQ,mBAAmB,WAAW,IACnFA;AACT;AAEA,SAASC,EACPC,GACAC,GACAC,GACc;AACd,SAAO;AAAA,IACL,CAACzC,EAAM,gBAAgB,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IAC3C,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IACnC,CAACP,EAAM,SAAS,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC4B,GAAA,EAAU,SAAQ,iBAAiB,UAAApC,EAAA,CAAS;AAAA,IACjF,CAACP,EAAM,IAAI,GAAG,CAACI,MAAS;AACtB,YAAM,EAAE,OAAOwC,GAAW,OAAAC,EAAA,IAAUzC,GAC9Be,IAAQ,OAAOyB,KAAc,WAAWA,EAAU,QAAQ,OAAO,QAAQ,IAAIA,GAE7EE,IAAU,gBAAA/B,EAAC,QAAA,EAAK,yBAAyB,EAAE,QAAQI,KAAmB;AAE5E,aAAK0B,IAGEA,EAAM,OAAO,CAACE,GAAwBC,MACpCb,EAAW,OAAOa,KAAiB,WAAWA,IAAeA,EAAa,IAAI;AAAA,QACnFD;AAAA,MAAA,GAEDD,CAAO,IANDA;AAAA,IAOX;AAAA,IACA,CAAC9C,EAAM,SAAS,GAAG,CAACI,GAAMG,MAAa;AACrC,YAAM0C,IAAM7C,EAAK,OAAQA,EAAK,MAAM;AAEpC,aAAImC,sBACMW,GAAA,EAAK,SAAQ,QAAQ,UAAAX,EAAKhC,GAAU0C,CAAG,GAAE,IAGjD,gBAAAlC,EAACmC,KAAK,SAAQ,QACZ,4BAAC,KAAA,EAAE,MAAMD,GAAM,UAAA1C,EAAA,CAAS,EAAA,CAC1B;AAAA,IAEJ;AAAA,IACA,CAACP,EAAM,EAAE,GAAG,wBAAO,MAAA,CAAA,CAAG;AAAA,IACtB,CAACA,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,QAAQ,GAAG,CAAC0C,GAAGnC,MACpB,gBAAAQ,EAACoC,GAAA,EAAQ,KAAI,MAAK,SAAQ,aACvB,UAAA5C,EAAA,CACH;AAAA,IAEF,CAACP,EAAM,KAAK,GAAGK;AAAA,IACf,CAACL,EAAM,SAAS,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAClD,CAACP,EAAM,iBAAiB,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAG,OAAM,OAAO,UAAAR,EAAA,CAAS;AAAA,IACtE,CAACP,EAAM,UAAU,GAAG,CAAC0C,GAAGnC,MACf,gBAAAQ,EAAC,QAAI,UAAAR,GAAS;AAAA,IAEvB,CAACP,EAAM,UAAU,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,SAAA,EAAO,UAAAR,GAAS;AAAA,IACtD,CAACP,EAAM,SAAS,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAClD,CAACP,EAAM,OAAO,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAChD,CAACP,EAAM,OAAO,GAAG,CAAC0C,GAAGnC,MAAa,gBAAAQ,EAAC,MAAA,EAAI,UAAAR,GAAS;AAAA,IAChD,CAACP,EAAM,KAAK,GAAG,CAAC0C,GAAGnC,wBAAc,cAAA,EAAW,UAAA;AAAA,MAAA;AAAA,MAAQA;AAAA,MAAS;AAAA,IAAA,GAAO;AAAA,IACpE,CAACP,EAAM,cAAc,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IACzC,CAACP,EAAM,cAAc,GAAG,CAAC0C,GAAGnC,MAAaA;AAAA,IACzC,CAACP,EAAM,KAAK,GAAG,CAAC,EAAE,OAAAmB,QACZ,OAAOA,KAAU,YAAYA,KAAS,SAASA,KAASA,EAAM,MAC5DqB,IACKA,EAAMrB,EAAM,KAAKA,EAAM,SAASA,EAAM,OAAO,WAAW,IAE1D,gBAAAJ,EAAC,OAAA,EAAI,KAAKI,EAAM,KAAK,KAAKA,EAAM,WAAW,IAAI,SAAQ,OAAA,CAAO,IAEhE;AAAA,IAET,CAACnB,EAAM,KAAK,GAAG,CAAC,EAAE,OAAAmB,QAAY;AAC5B,UAAI,OAAOA,KAAU,YAAYA,KAAS,iBAAiBA,GAAO;AAChE,cAAMiC,IAAcjC,EAAM,aAAa;AAEvC;AAAA;AAAA,UAEE,gBAAAJ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,UAAQ;AAAA,cACR,KAAKI,EAAM;AAAA,cACX,QAAQsB,KAAeW,IAAcX,EAAYW,CAAW,IAAIA;AAAA,YAAA;AAAA,UAAA;AAAA;AAAA,MAGtE;AACA,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;AAEA,MAAMC,IAAwB,CAAClC,MACtB,CAACA,EAAM,QAAQ,QAAQ,EAAE,GAO5BmC,IAAuB,CAAKlD,MAAmC;AACnE,QAAM,EAAE,SAAAmD,GAAS,OAAApC,EAAA,IAAUf;AAE3B,MAAI,CAACmD;AACH,WAAO,OAAOpC,KAAU,YAAYkC,EAAsBlC,CAAK;AAGjE,aAAWqC,KAAQD;AACjB,QAAInB,EAAYoB,CAAI,MAAMxD,EAAM;AAC9B,aAAO;AAIX,SACEuD,EAAQ,SAAS,KACjB,OAAOA,EAAQ,CAAC,EAAE,SAAU,YAC5BF,EAAsBE,EAAQ,CAAC,EAAE,KAAK;AAE1C,GAEME,IAAoB,CACxBrD,GACAsD,GACAnB,GACAC,GACAC,MACc;AACd,MAAIkB,IAAQ;AAEZ,QAAMC,IAAQ;AAAA,IACZ,GAAGtB,EAAaC,GAAMC,GAAOC,CAAW;AAAA,IACxC,GAAGiB;AAAA,EAAA,GAGCG,IAAa,CAACzD,MAAqC;AACvD,UAAM0D,IAAaF,EAAMxB,EAAYhC,CAAI,CAAC;AAO1C,QAJI,OAAO0D,IAAe,OAItBR,EAAqBlD,CAAI;AAC3B,aAAO;AAGT,UAAMG,IAAWH,EAAK,UAAUA,EAAK,QAAQ,IAAIyD,CAAU,IAAI,CAAA;AAE/D,WAAO,gBAAA9C,EAACgD,KAAwB,UAAAD,EAAW5B,EAAc9B,CAAI,GAAGG,CAAQ,KAAlDoD,GAAoD;AAAA,EAC5E;AAEA,SAAOE,EAAWzD,CAAI;AACxB;AAKA,SAAS4D,EAAoB;AAAA,EAC3B,MAAAtC;AAAA,EACA,WAAAuC;AAAA,EACA,iBAAAP;AAAA,EACA,eAAAQ,IAAgB;AAAA,EAChB,MAAA3B;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAS0B,IAAa;AAAA,EACtB,GAAGC;AACL,GAAqB;AACnB,SAAO1C,IACLwC,IACE,gBAAAnD,EAACoD,GAAA,EAAW,WAAAF,GAAuB,GAAGG,GACnC,UAAAX,EAAkB/B,GAAMgC,GAAiBnB,GAAMC,GAAOC,CAAW,EAAA,CACpE,IAEA,gBAAA1B,EAACsD,GAAA,EAAY,WAAAJ,GAAsB,SAASE,GAAa,GAAGC,GACzD,UAAAX,EAAkB/B,GAAMgC,GAAiBnB,GAAMC,GAAOC,CAAW,GACpE,IAEA;AACN;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as B } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect as p, createContext as x, useContext as m, useState as l, useMemo as f } from "react";
|
|
3
|
-
import { aC as N, az as y, aB as $, aA as P, aD as E, ay as O, au as
|
|
4
|
-
const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4741", Je = "#3b332d", Ue = "#ffffff", Xe = "#202022", Ye = "rgba(255, 255, 255, 0.95)", Ze = "rgba(255, 255, 255, 0.66)", Ve = "rgba(255, 255, 255, 0.37)", _e = "rgba(0, 0, 0, 0.8)", ro = "rgba(0, 0, 0, 0.54)", eo = "rgba(0, 0, 0, 0.44)", oo = "#f4e0ff", to = "#faf0ff", ao = "#ffffff", co = "#4e0174", uo = "#ffffff", no = "#6d02a3", io = "#4e0174", so = "#29003e", lo = "#ffffff", po = "#ffffff", vo = "#29003e", go = "#ffffff", Bo = "#29003e", So = "#ffffff", Co = "#ffffff", Io = "#d58df9", To = "#d58df9", ko = "#ffafc9", xo = "#980233", mo = "#fb4885", fo = "#e4175c", No = "#79d9a7", yo = "#02562b", $o = "#1fa15e", Po = "#f9bb5b", Eo = "#f39200", Oo = "#a86602",
|
|
3
|
+
import { aC as N, az as y, aB as $, aA as P, aD as E, ay as O, au as A, av as b, an as H, ap as M, aq as W, ar as D, at as h, as as F, aj as L, ak as w, am as R, ao as Q, al as j, aF as q, ax as z, aH as G, aE as K, aw as J, aG as U, W as X, Y, X as Z, V, K as _, U as rr, R as er, H as or, G as tr, O as ar, N as cr, J as ur, I as nr, T as ir, S as sr, Q as lr, P as pr, M as vr, L as gr, v as dr, m as Br, e as Sr, x as Cr, z as Ir, h as Tr, j as kr, k as xr, q as mr, s as fr, t as Nr, p as yr, b as $r, c as Pr, a as Er, l as Or, u as Ar, d as br, w as Hr, y as Mr, g as Wr, i as Dr, f as hr, o as Fr, r as Lr, n as wr, B as Rr, F as Qr, D as jr, A as qr, E as zr, C as Gr, cG as Kr, cF as Jr, cE as Ur, cC as Xr, cs as Yr, cq as Zr, cA as Vr, cn as _r, co as re, cm as ee, cw as oe, cv as te, cr as ae, cp as ce, cD as ue, cB as ne, cz as ie, cx as se, cu as le, ct as pe, c6 as ve, c8 as ge, c9 as de, cb as Be, ce as Se, cg as Ce, ch as Ie, ci as Te, c3 as ke, c5 as xe, c7 as me, c4 as fe, ca as Ne, cd as ye, cf as $e, cc as Pe, cI as Ee, cl as Oe, c2 as Ae, cH as be, ck as He, c1 as Me, aP as We, aO as De, aM as he, aI as Fe, aK as Le, aN as we, aJ as Re, aL as Qe } from "./variables-BrsAsWIF.mjs";
|
|
4
|
+
const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4741", Je = "#3b332d", Ue = "#ffffff", Xe = "#202022", Ye = "rgba(255, 255, 255, 0.95)", Ze = "rgba(255, 255, 255, 0.66)", Ve = "rgba(255, 255, 255, 0.37)", _e = "rgba(0, 0, 0, 0.8)", ro = "rgba(0, 0, 0, 0.54)", eo = "rgba(0, 0, 0, 0.44)", oo = "#f4e0ff", to = "#faf0ff", ao = "#ffffff", co = "#4e0174", uo = "#ffffff", no = "#6d02a3", io = "#4e0174", so = "#29003e", lo = "#ffffff", po = "#ffffff", vo = "#29003e", go = "#ffffff", Bo = "#29003e", So = "#ffffff", Co = "#ffffff", Io = "#d58df9", To = "#d58df9", ko = "#ffafc9", xo = "#980233", mo = "#fb4885", fo = "#e4175c", No = "#79d9a7", yo = "#02562b", $o = "#1fa15e", Po = "#f9bb5b", Eo = "#f39200", Oo = "#a86602", Ao = "#91cdf4", bo = "#3694d3", Ho = "#ffffff", Mo = "#ffffff", Wo = "#4e0174", Do = "#202022", ho = "#29003e", Fo = "#f4e0ff", Lo = "#ffffff", wo = "#121212", Ro = "#ffffff", Qo = "#202022", jo = "#f5f5fa", qo = "rgba(0, 0, 0, 0.71)", zo = "rgba(255, 255, 255, 0.84)", Go = "#4e0174", Ko = "#f4e0ff", Jo = "#e4b6fb", Uo = "#d58df9", Xo = "#4e0174", Yo = "#6d02a3", Zo = "#8c07d0", Vo = "#990ae3", _o = "#c461f7", rt = "#d58df9", et = "#990ae3", ot = "#6d02a3", tt = "#4e0174", at = "rgba(255, 255, 255, 0.11)", ct = "rgba(0, 0, 0, 0.1)", ut = "#4e0174", nt = "#e4b6fb", it = "#6d02a3", st = "#d58df9", lt = "rgba(255, 255, 255, 0.16)", pt = "rgba(0, 0, 0, 0.05)", vt = "rgba(255, 255, 255, 0.07)", gt = "rgba(0, 0, 0, 0.05)", dt = "#e4175c", Bt = "#c00543", St = "#980233", Ct = "#03385b", It = "#62b2e7", Tt = "#003e1e", kt = "#3dbf7c", xt = "#1fa15e", mt = "#700025", ft = "#ff80ab", Nt = "#fb4885", yt = "#4c2f03", $t = "#f39200", Pt = "#f39200", Et = "#353537", Ot = "#6d02a3", At = "#f4e0ff", bt = "#ffffff", Ht = "#f4e0ff", Mt = "#29003e", Wt = "#4f4741", Dt = "#2d2824", ht = "rgba(255, 255, 255, 0.29)", Ft = "rgba(0, 0, 0, 0.33)", Lt = "rgba(255, 255, 255, 0.46)", wt = "rgba(0, 0, 0, 0.54)", Rt = "rgba(255, 255, 255, 0.16)", Qt = "rgba(0, 0, 0, 0.16)", jt = "#c461f7", qt = "#f4e0ff", zt = "#6d02a3", Gt = "#faf0ff", Kt = "#ffffff", Jt = "#4e0174", Ut = "#29003e", Xt = "#990ae3", Yt = "#d58df9", Zt = "rgba(255, 255, 255, 0.37)", Vt = "rgba(0, 0, 0, 0.44)", _t = "#e4b6fb", ra = "#6d02a3", ea = "#fb4885", oa = "#e4175c", ta = "#f39200", aa = "#3694d3", ca = "#1fa15e", ua = "#018842", na = {
|
|
5
5
|
colorBrandDeepPurple: je,
|
|
6
6
|
colorBrandCorePurple: qe,
|
|
7
7
|
colorBrandLightPurple: ze,
|
|
@@ -32,8 +32,8 @@ const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4
|
|
|
32
32
|
colorTextInteractiveOnExpressiveNegative: po,
|
|
33
33
|
colorTextInteractiveOnExpressiveHoverNegative: go,
|
|
34
34
|
colorTextInteractiveOnExpressiveActiveNegative: So,
|
|
35
|
-
colorTextStatusInfoMedium:
|
|
36
|
-
colorTextStatusInfoStrong:
|
|
35
|
+
colorTextStatusInfoMedium: bo,
|
|
36
|
+
colorTextStatusInfoStrong: Ao,
|
|
37
37
|
colorTextStatusSuccessMedium: $o,
|
|
38
38
|
colorTextStatusSuccessStrong: No,
|
|
39
39
|
colorTextStatusWarningMedium: Eo,
|
|
@@ -94,8 +94,8 @@ const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4
|
|
|
94
94
|
colorBackgroundStatusErrorStrong: ft,
|
|
95
95
|
colorBackgroundStatusNeutral: Et,
|
|
96
96
|
colorBackgroundStatusSpecial: Ot,
|
|
97
|
-
colorBackgroundStatusAttention:
|
|
98
|
-
colorBackgroundStatusBlackFriday:
|
|
97
|
+
colorBackgroundStatusAttention: At,
|
|
98
|
+
colorBackgroundStatusBlackFriday: bt,
|
|
99
99
|
colorBackgroundStatusSuccessStrongNegative: xt,
|
|
100
100
|
colorBackgroundStatusWarningStrongNegative: Pt,
|
|
101
101
|
colorBackgroundStatusErrorStrongNegative: Nt,
|
|
@@ -139,8 +139,8 @@ const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4
|
|
|
139
139
|
colorBrandWhite: We,
|
|
140
140
|
colorTextDefault: Me,
|
|
141
141
|
colorTextMedium: He,
|
|
142
|
-
colorTextWeak:
|
|
143
|
-
colorTextDefaultNegative:
|
|
142
|
+
colorTextWeak: be,
|
|
143
|
+
colorTextDefaultNegative: Ae,
|
|
144
144
|
colorTextMediumNegative: Oe,
|
|
145
145
|
colorTextWeakNegative: Ee,
|
|
146
146
|
colorTextInteractivePrimary: Pe,
|
|
@@ -193,8 +193,8 @@ const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4
|
|
|
193
193
|
colorBackgroundInteractiveExpressiveActive: Wr,
|
|
194
194
|
colorBackgroundInteractiveTransparentHover: Mr,
|
|
195
195
|
colorBackgroundInteractiveTransparentActive: Hr,
|
|
196
|
-
colorBackgroundInteractiveDisabled:
|
|
197
|
-
colorBackgroundInteractiveReadOnly:
|
|
196
|
+
colorBackgroundInteractiveDisabled: br,
|
|
197
|
+
colorBackgroundInteractiveReadOnly: Ar,
|
|
198
198
|
colorBackgroundInteractiveInactive: Or,
|
|
199
199
|
colorBackgroundInteractiveDestructive: Er,
|
|
200
200
|
colorBackgroundInteractiveDestructiveHover: Pr,
|
|
@@ -247,8 +247,8 @@ const je = "#f4e0ff", qe = "#c461f7", ze = "#29003e", Ge = "#ede1d8", Ke = "#4f4
|
|
|
247
247
|
colorBorderInteractivePrimaryNegative: W,
|
|
248
248
|
colorBorderInteractivePrimaryHoverNegative: M,
|
|
249
249
|
colorBorderInteractivePrimaryActiveNegative: H,
|
|
250
|
-
colorBorderInteractiveSubtleNegative:
|
|
251
|
-
colorBorderInteractiveSubtleHoverNegative:
|
|
250
|
+
colorBorderInteractiveSubtleNegative: b,
|
|
251
|
+
colorBorderInteractiveSubtleHoverNegative: A,
|
|
252
252
|
colorBorderStatusError: O,
|
|
253
253
|
colorBorderStatusWarning: E,
|
|
254
254
|
colorBorderStatusInfo: P,
|
|
@@ -345,4 +345,4 @@ export {
|
|
|
345
345
|
S as t,
|
|
346
346
|
la as u
|
|
347
347
|
};
|
|
348
|
-
//# sourceMappingURL=ThemeProvider-
|
|
348
|
+
//# sourceMappingURL=ThemeProvider-BJ25_asg.mjs.map
|