@commercetools/nimbus 0.0.0-canary-20251204164506 → 0.0.0-canary-20251204203333
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{Button-BjcDZ5eb.es.js → Button-CmpJG0ec.es.js} +7 -7
- package/dist/chunks/{Button-BjcDZ5eb.es.js.map → Button-CmpJG0ec.es.js.map} +1 -1
- package/dist/chunks/{CollectionBuilder-BnYe2z4W.es.js → CollectionBuilder-BqQjeKfi.es.js} +2 -2
- package/dist/chunks/{CollectionBuilder-BnYe2z4W.es.js.map → CollectionBuilder-BqQjeKfi.es.js.map} +1 -1
- package/dist/chunks/{DateField-C5JgBb30.es.js → DateField-Bpk0AwB2.es.js} +21 -21
- package/dist/chunks/{DateField-C5JgBb30.es.js.map → DateField-Bpk0AwB2.es.js.map} +1 -1
- package/dist/chunks/{DatePicker-9m2POezC.es.js → DatePicker-CUW1A5A8.es.js} +17 -17
- package/dist/chunks/{DatePicker-9m2POezC.es.js.map → DatePicker-CUW1A5A8.es.js.map} +1 -1
- package/dist/chunks/{Dialog-DcnmO0xr.es.js → Dialog-BYVU-i0Y.es.js} +24 -24
- package/dist/chunks/{Dialog-DcnmO0xr.es.js.map → Dialog-BYVU-i0Y.es.js.map} +1 -1
- package/dist/chunks/{FocusScope-CqEZq7sr.es.js → FocusScope-bj_mamFe.es.js} +36 -36
- package/dist/chunks/{FocusScope-CqEZq7sr.es.js.map → FocusScope-bj_mamFe.es.js.map} +1 -1
- package/dist/chunks/{Group-BQc9LuMT.es.js → Group-C9jsb9_m.es.js} +8 -8
- package/dist/chunks/{Group-BQc9LuMT.es.js.map → Group-C9jsb9_m.es.js.map} +1 -1
- package/dist/chunks/{Header-CliQVNVa.es.js → Header-CNoClAau.es.js} +5 -5
- package/dist/chunks/{Header-CliQVNVa.es.js.map → Header-CNoClAau.es.js.map} +1 -1
- package/dist/chunks/{Heading-D7Ut7eK3.es.js → Heading-D804NNml.es.js} +14 -14
- package/dist/chunks/{Heading-D7Ut7eK3.es.js.map → Heading-D804NNml.es.js.map} +1 -1
- package/dist/chunks/{Input-Cmg08oRP.es.js → Input-aKSXZBAh.es.js} +5 -5
- package/dist/chunks/{Input-Cmg08oRP.es.js.map → Input-aKSXZBAh.es.js.map} +1 -1
- package/dist/chunks/{Label-DIseLESi.es.js → Label-Bu5lTMzy.es.js} +2 -2
- package/dist/chunks/{Label-DIseLESi.es.js.map → Label-Bu5lTMzy.es.js.map} +1 -1
- package/dist/chunks/{ListBox-CcSs4yTw.es.js → ListBox-DYbGAoet.es.js} +15 -15
- package/dist/chunks/{ListBox-CcSs4yTw.es.js.map → ListBox-DYbGAoet.es.js.map} +1 -1
- package/dist/chunks/{Modal-3QPNDzpi.es.js → Modal-2TttSPy4.es.js} +7 -7
- package/dist/chunks/{Modal-3QPNDzpi.es.js.map → Modal-2TttSPy4.es.js.map} +1 -1
- package/dist/chunks/{OverlayArrow-BIjbCSXk.es.js → OverlayArrow-qm-lnjhS.es.js} +2 -2
- package/dist/chunks/{OverlayArrow-BIjbCSXk.es.js.map → OverlayArrow-qm-lnjhS.es.js.map} +1 -1
- package/dist/chunks/{ProgressBar-Dm2Ge45l.es.js → ProgressBar-DogfCeuX.es.js} +5 -5
- package/dist/chunks/{ProgressBar-Dm2Ge45l.es.js.map → ProgressBar-DogfCeuX.es.js.map} +1 -1
- package/dist/chunks/{SelectionManager-B0Cb1kHW.es.js → SelectionManager-CXicxYqF.es.js} +10 -10
- package/dist/chunks/{SelectionManager-B0Cb1kHW.es.js.map → SelectionManager-CXicxYqF.es.js.map} +1 -1
- package/dist/chunks/{Separator-DP89PKAS.es.js → Separator-WCa1iR4U.es.js} +4 -4
- package/dist/chunks/{Separator-DP89PKAS.es.js.map → Separator-WCa1iR4U.es.js.map} +1 -1
- package/dist/chunks/{TextArea-CXEdUjgW.es.js → TextArea-JHqAZ7HD.es.js} +5 -5
- package/dist/chunks/{TextArea-CXEdUjgW.es.js.map → TextArea-JHqAZ7HD.es.js.map} +1 -1
- package/dist/chunks/{ToggleButton-BqW-X6iJ.es.js → ToggleButton-B-feHlsu.es.js} +7 -7
- package/dist/chunks/{ToggleButton-BqW-X6iJ.es.js.map → ToggleButton-B-feHlsu.es.js.map} +1 -1
- package/dist/chunks/{VisuallyHidden-BLRzeMsq.es.js → VisuallyHidden-BIA5VRNP.es.js} +3 -3
- package/dist/chunks/{VisuallyHidden-BLRzeMsq.es.js.map → VisuallyHidden-BIA5VRNP.es.js.map} +1 -1
- package/dist/chunks/{accordion-qzbckNub.cjs.js → accordion-B978Ssd8.cjs.js} +2 -2
- package/dist/chunks/{accordion-qzbckNub.cjs.js.map → accordion-B978Ssd8.cjs.js.map} +1 -1
- package/dist/chunks/{accordion-BacJkt5n.es.js → accordion-_4Vtr930.es.js} +2 -2
- package/dist/chunks/{accordion-BacJkt5n.es.js.map → accordion-_4Vtr930.es.js.map} +1 -1
- package/dist/chunks/accordion.content-Bd2PESBz.cjs.js +2 -0
- package/dist/chunks/{accordion.content-Cslx-S6p.cjs.js.map → accordion.content-Bd2PESBz.cjs.js.map} +1 -1
- package/dist/chunks/{accordion.content-SFS_lHjk.es.js → accordion.content-YkB30Nl0.es.js} +24 -23
- package/dist/chunks/{accordion.content-SFS_lHjk.es.js.map → accordion.content-YkB30Nl0.es.js.map} +1 -1
- package/dist/chunks/{alert-D6ENEy8f.cjs.js → alert-55tm3vfU.cjs.js} +2 -2
- package/dist/chunks/{alert-D6ENEy8f.cjs.js.map → alert-55tm3vfU.cjs.js.map} +1 -1
- package/dist/chunks/{alert-CoJ8asOZ.es.js → alert-_J_dHFj_.es.js} +2 -2
- package/dist/chunks/{alert-CoJ8asOZ.es.js.map → alert-_J_dHFj_.es.js.map} +1 -1
- package/dist/chunks/badge-DUiqk6w9.es.js +17 -0
- package/dist/chunks/{badge-CgYpum7D.es.js.map → badge-DUiqk6w9.es.js.map} +1 -1
- package/dist/chunks/{button-CxL9YuuF.cjs.js → button-CvWz8q1N.cjs.js} +2 -2
- package/dist/chunks/{button-CxL9YuuF.cjs.js.map → button-CvWz8q1N.cjs.js.map} +1 -1
- package/dist/chunks/{button-DZew_Si4.es.js → button-DTxnOPiN.es.js} +6 -6
- package/dist/chunks/{button-DZew_Si4.es.js.map → button-DTxnOPiN.es.js.map} +1 -1
- package/dist/chunks/{calendar-CDVjB0zo.es.js → calendar-C0WVsTa4.es.js} +9 -9
- package/dist/chunks/{calendar-CDVjB0zo.es.js.map → calendar-C0WVsTa4.es.js.map} +1 -1
- package/dist/chunks/{calendar-Dx5LLOml.cjs.js → calendar-CMCE8As1.cjs.js} +2 -2
- package/dist/chunks/{calendar-Dx5LLOml.cjs.js.map → calendar-CMCE8As1.cjs.js.map} +1 -1
- package/dist/chunks/{card-DB6gUcAw.cjs.js → card-D9xReN37.cjs.js} +2 -2
- package/dist/chunks/{card-DB6gUcAw.cjs.js.map → card-D9xReN37.cjs.js.map} +1 -1
- package/dist/chunks/{card-ydiSozha.es.js → card-DSxEwCmQ.es.js} +2 -2
- package/dist/chunks/{card-ydiSozha.es.js.map → card-DSxEwCmQ.es.js.map} +1 -1
- package/dist/chunks/{checkbox-fwmjQ4Uk.cjs.js → checkbox-CdXKptM4.cjs.js} +2 -2
- package/dist/chunks/{checkbox-fwmjQ4Uk.cjs.js.map → checkbox-CdXKptM4.cjs.js.map} +1 -1
- package/dist/chunks/{checkbox-DuPKJsWQ.es.js → checkbox-DMpI_oaX.es.js} +10 -10
- package/dist/chunks/{checkbox-DuPKJsWQ.es.js.map → checkbox-DMpI_oaX.es.js.map} +1 -1
- package/dist/chunks/{collapsible-motion-BiF9lLAN.cjs.js → collapsible-motion-CA8uQuKZ.cjs.js} +2 -2
- package/dist/chunks/{collapsible-motion-BiF9lLAN.cjs.js.map → collapsible-motion-CA8uQuKZ.cjs.js.map} +1 -1
- package/dist/chunks/{collapsible-motion-B5YFRwO4.es.js → collapsible-motion-Dw8EugiR.es.js} +5 -5
- package/dist/chunks/{collapsible-motion-B5YFRwO4.es.js.map → collapsible-motion-Dw8EugiR.es.js.map} +1 -1
- package/dist/chunks/{combobox-BobLAXh8.es.js → combobox-BMpAKWKs.es.js} +74 -74
- package/dist/chunks/{combobox-BobLAXh8.es.js.map → combobox-BMpAKWKs.es.js.map} +1 -1
- package/dist/chunks/{combobox-CEyLEi9S.cjs.js → combobox-DPZmJZJF.cjs.js} +2 -2
- package/dist/chunks/{combobox-CEyLEi9S.cjs.js.map → combobox-DPZmJZJF.cjs.js.map} +1 -1
- package/dist/chunks/{data-table-DpRmr71N.cjs.js → data-table-B5tlvmbJ.cjs.js} +2 -2
- package/dist/chunks/{data-table-DpRmr71N.cjs.js.map → data-table-B5tlvmbJ.cjs.js.map} +1 -1
- package/dist/chunks/{data-table-uvxFiIVK.es.js → data-table-Ch0tFro2.es.js} +37 -37
- package/dist/chunks/{data-table-uvxFiIVK.es.js.map → data-table-Ch0tFro2.es.js.map} +1 -1
- package/dist/chunks/{date-input-C_dX1XXD.es.js → date-input-COUAItnm.es.js} +4 -4
- package/dist/chunks/{date-input-C_dX1XXD.es.js.map → date-input-COUAItnm.es.js.map} +1 -1
- package/dist/chunks/{date-input-BDkIVUEJ.cjs.js → date-input-lsbLlxie.cjs.js} +2 -2
- package/dist/chunks/{date-input-BDkIVUEJ.cjs.js.map → date-input-lsbLlxie.cjs.js.map} +1 -1
- package/dist/chunks/{date-picker-Cq8qD5Ff.es.js → date-picker-B5ZR0GJ3.es.js} +14 -14
- package/dist/chunks/{date-picker-Cq8qD5Ff.es.js.map → date-picker-B5ZR0GJ3.es.js.map} +1 -1
- package/dist/chunks/{date-picker-DODeu1jH.cjs.js → date-picker-JA1Mh2WY.cjs.js} +2 -2
- package/dist/chunks/{date-picker-DODeu1jH.cjs.js.map → date-picker-JA1Mh2WY.cjs.js.map} +1 -1
- package/dist/chunks/{date-range-picker-Bf14iS4A.es.js → date-range-picker-CMhOBPtp.es.js} +14 -14
- package/dist/chunks/{date-range-picker-Bf14iS4A.es.js.map → date-range-picker-CMhOBPtp.es.js.map} +1 -1
- package/dist/chunks/{date-range-picker-field-CqG7wwZc.es.js → date-range-picker-field-DaoP69E2.es.js} +3 -3
- package/dist/chunks/{date-range-picker-field-CqG7wwZc.es.js.map → date-range-picker-field-DaoP69E2.es.js.map} +1 -1
- package/dist/chunks/{date-range-picker-field-Bvvmu7oL.cjs.js → date-range-picker-field-UFUo2JuI.cjs.js} +2 -2
- package/dist/chunks/{date-range-picker-field-Bvvmu7oL.cjs.js.map → date-range-picker-field-UFUo2JuI.cjs.js.map} +1 -1
- package/dist/chunks/{date-range-picker-D1gUgq_6.cjs.js → date-range-picker-yzo8osGE.cjs.js} +2 -2
- package/dist/chunks/{date-range-picker-D1gUgq_6.cjs.js.map → date-range-picker-yzo8osGE.cjs.js.map} +1 -1
- package/dist/chunks/{dialog-CS8h46ov.cjs.js → dialog-DNl_apyv.cjs.js} +2 -2
- package/dist/chunks/{dialog-CS8h46ov.cjs.js.map → dialog-DNl_apyv.cjs.js.map} +1 -1
- package/dist/chunks/{dialog-DUZOjwNj.es.js → dialog-cV8_ifAL.es.js} +7 -7
- package/dist/chunks/{dialog-DUZOjwNj.es.js.map → dialog-cV8_ifAL.es.js.map} +1 -1
- package/dist/chunks/{draggable-list-CUcHb55R.cjs.js → draggable-list-4w8RgF1w.cjs.js} +2 -2
- package/dist/chunks/{draggable-list-CUcHb55R.cjs.js.map → draggable-list-4w8RgF1w.cjs.js.map} +1 -1
- package/dist/chunks/{draggable-list-LtLBvlhK.es.js → draggable-list-B6YVD64W.es.js} +22 -22
- package/dist/chunks/{draggable-list-LtLBvlhK.es.js.map → draggable-list-B6YVD64W.es.js.map} +1 -1
- package/dist/chunks/{drawer-DZt4nA9C.cjs.js → drawer-BcgvPugV.cjs.js} +2 -2
- package/dist/chunks/{drawer-DZt4nA9C.cjs.js.map → drawer-BcgvPugV.cjs.js.map} +1 -1
- package/dist/chunks/{drawer-YCoDb7TU.es.js → drawer-ByFci-Lp.es.js} +8 -8
- package/dist/chunks/{drawer-YCoDb7TU.es.js.map → drawer-ByFci-Lp.es.js.map} +1 -1
- package/dist/chunks/{extract-style-props-CIoUvqFb.es.js → extract-style-props-CJjpdqym.es.js} +2 -2
- package/dist/chunks/{extract-style-props-CIoUvqFb.es.js.map → extract-style-props-CJjpdqym.es.js.map} +1 -1
- package/dist/chunks/{extract-style-props-DGdckd6P.cjs.js → extract-style-props-DL4zPQSN.cjs.js} +2 -2
- package/dist/chunks/{extract-style-props-DGdckd6P.cjs.js.map → extract-style-props-DL4zPQSN.cjs.js.map} +1 -1
- package/dist/chunks/{focusSafely-Cwb0Tyy6.es.js → focusSafely-RvsgqoUt.es.js} +3 -3
- package/dist/chunks/{focusSafely-Cwb0Tyy6.es.js.map → focusSafely-RvsgqoUt.es.js.map} +1 -1
- package/dist/chunks/{form-field-CozKmli4.cjs.js → form-field-D36wdkEj.cjs.js} +2 -2
- package/dist/chunks/{form-field-CozKmli4.cjs.js.map → form-field-D36wdkEj.cjs.js.map} +1 -1
- package/dist/chunks/{form-field-Df4_JmSU.es.js → form-field-Po_Y_5wQ.es.js} +4 -4
- package/dist/chunks/{form-field-Df4_JmSU.es.js.map → form-field-Po_Y_5wQ.es.js.map} +1 -1
- package/dist/chunks/{getScrollParent-MZgwmCKW.es.js → getScrollParent-DlqhSzBC.es.js} +2 -2
- package/dist/chunks/{getScrollParent-MZgwmCKW.es.js.map → getScrollParent-DlqhSzBC.es.js.map} +1 -1
- package/dist/chunks/{group-CCBgdph2.es.js → group-jGsHh1w7.es.js} +2 -2
- package/dist/chunks/{group-CCBgdph2.es.js.map → group-jGsHh1w7.es.js.map} +1 -1
- package/dist/chunks/{heading-nfjoR4vL.es.js → heading-CwsT9zp_.es.js} +2 -2
- package/dist/chunks/{heading-nfjoR4vL.es.js.map → heading-CwsT9zp_.es.js.map} +1 -1
- package/dist/chunks/{icon-button-BPzrehNJ.cjs.js → icon-button-ClTyaPhB.cjs.js} +2 -2
- package/dist/chunks/{icon-button-BPzrehNJ.cjs.js.map → icon-button-ClTyaPhB.cjs.js.map} +1 -1
- package/dist/chunks/{icon-button-hZxuTfRy.es.js → icon-button-Cnas4bnJ.es.js} +2 -2
- package/dist/chunks/{icon-button-hZxuTfRy.es.js.map → icon-button-Cnas4bnJ.es.js.map} +1 -1
- package/dist/chunks/{icon-toggle-button-BtyMh4Ys.es.js → icon-toggle-button-3hAIS1Mt.es.js} +2 -2
- package/dist/chunks/{icon-toggle-button-BtyMh4Ys.es.js.map → icon-toggle-button-3hAIS1Mt.es.js.map} +1 -1
- package/dist/chunks/{icon-toggle-button-DzoifEyi.cjs.js → icon-toggle-button-B8ycCaqk.cjs.js} +2 -2
- package/dist/chunks/{icon-toggle-button-DzoifEyi.cjs.js.map → icon-toggle-button-B8ycCaqk.cjs.js.map} +1 -1
- package/dist/chunks/{index-CqOsUykV.es.js → index-CmfW40Im.es.js} +185 -185
- package/dist/chunks/index-CmfW40Im.es.js.map +1 -0
- package/dist/chunks/{index-DdyUbTzB.cjs.js → index-DIQn6o2R.cjs.js} +3 -3
- package/dist/chunks/index-DIQn6o2R.cjs.js.map +1 -0
- package/dist/chunks/{kbd-Bl5Ncm2d.es.js → kbd-B11Qoo4k.es.js} +2 -2
- package/dist/chunks/{kbd-Bl5Ncm2d.es.js.map → kbd-B11Qoo4k.es.js.map} +1 -1
- package/dist/chunks/{link-BMUyXcmC.es.js → link-Db65JZE6.es.js} +9 -9
- package/dist/chunks/{link-BMUyXcmC.es.js.map → link-Db65JZE6.es.js.map} +1 -1
- package/dist/chunks/{loading-spinner-DF6c3rBM.es.js → loading-spinner-FBgHlqXQ.es.js} +3 -3
- package/dist/chunks/{loading-spinner-DF6c3rBM.es.js.map → loading-spinner-FBgHlqXQ.es.js.map} +1 -1
- package/dist/chunks/{localized-field-BTtMYX2e.es.js → localized-field-BqedmRuV.es.js} +25 -25
- package/dist/chunks/{localized-field-BTtMYX2e.es.js.map → localized-field-BqedmRuV.es.js.map} +1 -1
- package/dist/chunks/{localized-field-CKzOQS8a.cjs.js → localized-field-BudXks_7.cjs.js} +2 -2
- package/dist/chunks/{localized-field-CKzOQS8a.cjs.js.map → localized-field-BudXks_7.cjs.js.map} +1 -1
- package/dist/chunks/{make-element-focusable-7-aXFtDJ.es.js → make-element-focusable-DVfaQntJ.es.js} +6 -6
- package/dist/chunks/{make-element-focusable-7-aXFtDJ.es.js.map → make-element-focusable-DVfaQntJ.es.js.map} +1 -1
- package/dist/chunks/{menu-DbUVggzL.cjs.js → menu-DGuxJIC6.cjs.js} +2 -2
- package/dist/chunks/{menu-DbUVggzL.cjs.js.map → menu-DGuxJIC6.cjs.js.map} +1 -1
- package/dist/chunks/{menu-9gmr8hQj.es.js → menu-DMtIo54m.es.js} +6 -6
- package/dist/chunks/{menu-9gmr8hQj.es.js.map → menu-DMtIo54m.es.js.map} +1 -1
- package/dist/chunks/{mergeProps-Dsl8k3Ig.es.js → mergeProps-D1jjFfMs.es.js} +6 -6
- package/dist/chunks/{mergeProps-Dsl8k3Ig.es.js.map → mergeProps-D1jjFfMs.es.js.map} +1 -1
- package/dist/chunks/{money-input-BelTJgi2.cjs.js → money-input-B3fxVHDJ.cjs.js} +2 -2
- package/dist/chunks/{money-input-BelTJgi2.cjs.js.map → money-input-B3fxVHDJ.cjs.js.map} +1 -1
- package/dist/chunks/{money-input-DiuaCRAq.es.js → money-input-BHveN9w0.es.js} +9 -9
- package/dist/chunks/{money-input-DiuaCRAq.es.js.map → money-input-BHveN9w0.es.js.map} +1 -1
- package/dist/chunks/{money-input-field-B8gMfNW7.es.js → money-input-field-CsChyLci.es.js} +3 -3
- package/dist/chunks/{money-input-field-B8gMfNW7.es.js.map → money-input-field-CsChyLci.es.js.map} +1 -1
- package/dist/chunks/{money-input-field-tgZ_nN7r.cjs.js → money-input-field-FVpMq6tJ.cjs.js} +2 -2
- package/dist/chunks/{money-input-field-tgZ_nN7r.cjs.js.map → money-input-field-FVpMq6tJ.cjs.js.map} +1 -1
- package/dist/chunks/{multiline-text-input-DJeOCh8z.cjs.js → multiline-text-input-C5pMVuYM.cjs.js} +2 -2
- package/dist/chunks/{multiline-text-input-DJeOCh8z.cjs.js.map → multiline-text-input-C5pMVuYM.cjs.js.map} +1 -1
- package/dist/chunks/{multiline-text-input-fb-1IzTw.es.js → multiline-text-input-CTop15Kc.es.js} +5 -5
- package/dist/chunks/{multiline-text-input-fb-1IzTw.es.js.map → multiline-text-input-CTop15Kc.es.js.map} +1 -1
- package/dist/chunks/{multiline-text-input-field-EiZALVr9.cjs.js → multiline-text-input-field-B3eQzuAg.cjs.js} +2 -2
- package/dist/chunks/{multiline-text-input-field-EiZALVr9.cjs.js.map → multiline-text-input-field-B3eQzuAg.cjs.js.map} +1 -1
- package/dist/chunks/{multiline-text-input-field-DIjx7INz.es.js → multiline-text-input-field-D_M3z9GG.es.js} +3 -3
- package/dist/chunks/{multiline-text-input-field-DIjx7INz.es.js.map → multiline-text-input-field-D_M3z9GG.es.js.map} +1 -1
- package/dist/chunks/{nimbus-provider-XoinDagw.es.js → nimbus-provider-BZuDgONW.es.js} +2 -2
- package/dist/chunks/{nimbus-provider-XoinDagw.es.js.map → nimbus-provider-BZuDgONW.es.js.map} +1 -1
- package/dist/chunks/{nimbus-provider-BZ1AjgyS.cjs.js → nimbus-provider-COP-MGlb.cjs.js} +2 -2
- package/dist/chunks/{nimbus-provider-BZ1AjgyS.cjs.js.map → nimbus-provider-COP-MGlb.cjs.js.map} +1 -1
- package/dist/chunks/{number-input-DKGtPqlr.es.js → number-input-CLoBlpiD.es.js} +14 -14
- package/dist/chunks/{number-input-DKGtPqlr.es.js.map → number-input-CLoBlpiD.es.js.map} +1 -1
- package/dist/chunks/{number-input-BY8SeNuT.cjs.js → number-input-Dj9jPceO.cjs.js} +2 -2
- package/dist/chunks/{number-input-BY8SeNuT.cjs.js.map → number-input-Dj9jPceO.cjs.js.map} +1 -1
- package/dist/chunks/{number-input-field-DnIN5wjh.es.js → number-input-field-BKxrwzEz.es.js} +3 -3
- package/dist/chunks/{number-input-field-DnIN5wjh.es.js.map → number-input-field-BKxrwzEz.es.js.map} +1 -1
- package/dist/chunks/{number-input-field-l6_xjbpB.cjs.js → number-input-field-DYJa53Un.cjs.js} +2 -2
- package/dist/chunks/{number-input-field-l6_xjbpB.cjs.js.map → number-input-field-DYJa53Un.cjs.js.map} +1 -1
- package/dist/chunks/{pagination-Cks7-saP.cjs.js → pagination-DNTHTYbV.cjs.js} +2 -2
- package/dist/chunks/{pagination-Cks7-saP.cjs.js.map → pagination-DNTHTYbV.cjs.js.map} +1 -1
- package/dist/chunks/{pagination-DAPyY6Zk.es.js → pagination-WCa7N8As.es.js} +5 -5
- package/dist/chunks/{pagination-DAPyY6Zk.es.js.map → pagination-WCa7N8As.es.js.map} +1 -1
- package/dist/chunks/{password-input-BXrS2-3k.es.js → password-input-B1aemp6U.es.js} +4 -4
- package/dist/chunks/{password-input-BXrS2-3k.es.js.map → password-input-B1aemp6U.es.js.map} +1 -1
- package/dist/chunks/{password-input-DG0_r6H_.cjs.js → password-input-CWPQT3AJ.cjs.js} +2 -2
- package/dist/chunks/{password-input-DG0_r6H_.cjs.js.map → password-input-CWPQT3AJ.cjs.js.map} +1 -1
- package/dist/chunks/{password-input-field-DMQAWO16.cjs.js → password-input-field-C3ct8JqT.cjs.js} +2 -2
- package/dist/chunks/{password-input-field-DMQAWO16.cjs.js.map → password-input-field-C3ct8JqT.cjs.js.map} +1 -1
- package/dist/chunks/{password-input-field-BIH25kaL.es.js → password-input-field-DGjkta8d.es.js} +3 -3
- package/dist/chunks/{password-input-field-BIH25kaL.es.js.map → password-input-field-DGjkta8d.es.js.map} +1 -1
- package/dist/chunks/{popover-zNeVW5hN.es.js → popover-B1aRr1CU.es.js} +2 -2
- package/dist/chunks/{popover-zNeVW5hN.es.js.map → popover-B1aRr1CU.es.js.map} +1 -1
- package/dist/chunks/{progress-bar-DG9JB9bR.cjs.js → progress-bar-Dny28r_G.cjs.js} +2 -2
- package/dist/chunks/{progress-bar-DG9JB9bR.cjs.js.map → progress-bar-Dny28r_G.cjs.js.map} +1 -1
- package/dist/chunks/{progress-bar-DYbU-4Vi.es.js → progress-bar-VQAbvri1.es.js} +4 -4
- package/dist/chunks/{progress-bar-DYbU-4Vi.es.js.map → progress-bar-VQAbvri1.es.js.map} +1 -1
- package/dist/chunks/{radio-input-tsryyQ63.es.js → radio-input-6FtNHf0N.es.js} +42 -42
- package/dist/chunks/{radio-input-tsryyQ63.es.js.map → radio-input-6FtNHf0N.es.js.map} +1 -1
- package/dist/chunks/{radio-input-CA4Y8LF8.cjs.js → radio-input-CIqZ2V6i.cjs.js} +2 -2
- package/dist/chunks/{radio-input-CA4Y8LF8.cjs.js.map → radio-input-CIqZ2V6i.cjs.js.map} +1 -1
- package/dist/chunks/{range-calendar-CFfa_h1A.cjs.js → range-calendar-Bjst1nRD.cjs.js} +2 -2
- package/dist/chunks/{range-calendar-CFfa_h1A.cjs.js.map → range-calendar-Bjst1nRD.cjs.js.map} +1 -1
- package/dist/chunks/{range-calendar-CCKqVOdF.es.js → range-calendar-Cumbca_6.es.js} +10 -10
- package/dist/chunks/{range-calendar-CCKqVOdF.es.js.map → range-calendar-Cumbca_6.es.js.map} +1 -1
- package/dist/chunks/{rich-text-input-CoIBknUh.es.js → rich-text-input-C7jglLdt.es.js} +13 -13
- package/dist/chunks/{rich-text-input-CoIBknUh.es.js.map → rich-text-input-C7jglLdt.es.js.map} +1 -1
- package/dist/chunks/{rich-text-input-D7zyqfNG.cjs.js → rich-text-input-CpQVkFRl.cjs.js} +2 -2
- package/dist/chunks/{rich-text-input-D7zyqfNG.cjs.js.map → rich-text-input-CpQVkFRl.cjs.js.map} +1 -1
- package/dist/chunks/{scoped-search-input-DM_clkPu.es.js → scoped-search-input-C3N9xhiG.es.js} +5 -5
- package/dist/chunks/{scoped-search-input-DM_clkPu.es.js.map → scoped-search-input-C3N9xhiG.es.js.map} +1 -1
- package/dist/chunks/{scoped-search-input-B7lz2Odg.cjs.js → scoped-search-input-CIUdBb04.cjs.js} +2 -2
- package/dist/chunks/{scoped-search-input-B7lz2Odg.cjs.js.map → scoped-search-input-CIUdBb04.cjs.js.map} +1 -1
- package/dist/chunks/{scrollIntoView-B7D07fJk.es.js → scrollIntoView-CQMm8-SR.es.js} +5 -5
- package/dist/chunks/{scrollIntoView-B7D07fJk.es.js.map → scrollIntoView-CQMm8-SR.es.js.map} +1 -1
- package/dist/chunks/{search-input-Cq5nPtbF.cjs.js → search-input-B2eu94HO.cjs.js} +2 -2
- package/dist/chunks/{search-input-Cq5nPtbF.cjs.js.map → search-input-B2eu94HO.cjs.js.map} +1 -1
- package/dist/chunks/{search-input-field-zzVNsLn3.es.js → search-input-field-Bt94J1Xu.es.js} +3 -3
- package/dist/chunks/{search-input-field-zzVNsLn3.es.js.map → search-input-field-Bt94J1Xu.es.js.map} +1 -1
- package/dist/chunks/{search-input-field-4wVwDFiQ.cjs.js → search-input-field-CiEbfoqx.cjs.js} +2 -2
- package/dist/chunks/{search-input-field-4wVwDFiQ.cjs.js.map → search-input-field-CiEbfoqx.cjs.js.map} +1 -1
- package/dist/chunks/{search-input-CaJyfxW-.es.js → search-input-xfX98rpy.es.js} +11 -11
- package/dist/chunks/{search-input-CaJyfxW-.es.js.map → search-input-xfX98rpy.es.js.map} +1 -1
- package/dist/chunks/{select-C4gMn8gq.es.js → select-6rfY6mk9.es.js} +21 -21
- package/dist/chunks/{select-C4gMn8gq.es.js.map → select-6rfY6mk9.es.js.map} +1 -1
- package/dist/chunks/{select-AaF9VDYS.cjs.js → select-OOmONm5T.cjs.js} +2 -2
- package/dist/chunks/{select-AaF9VDYS.cjs.js.map → select-OOmONm5T.cjs.js.map} +1 -1
- package/dist/chunks/{separator-Bc2_grIr.es.js → separator-ByExde_2.es.js} +4 -4
- package/dist/chunks/{separator-Bc2_grIr.es.js.map → separator-ByExde_2.es.js.map} +1 -1
- package/dist/chunks/{separator-BadgCkrO.cjs.js → separator-DoOgit09.cjs.js} +2 -2
- package/dist/chunks/{separator-BadgCkrO.cjs.js.map → separator-DoOgit09.cjs.js.map} +1 -1
- package/dist/chunks/{split-button-DT1Anaq1.es.js → split-button-CcfdSUWT.es.js} +4 -4
- package/dist/chunks/{split-button-DT1Anaq1.es.js.map → split-button-CcfdSUWT.es.js.map} +1 -1
- package/dist/chunks/{split-button-CbGHEymu.cjs.js → split-button-DtNcxPjS.cjs.js} +2 -2
- package/dist/chunks/{split-button-CbGHEymu.cjs.js.map → split-button-DtNcxPjS.cjs.js.map} +1 -1
- package/dist/chunks/{switch-BxR5TD9Q.cjs.js → switch-Bttbn3oV.cjs.js} +2 -2
- package/dist/chunks/{switch-BxR5TD9Q.cjs.js.map → switch-Bttbn3oV.cjs.js.map} +1 -1
- package/dist/chunks/{switch-1tLtDt7M.es.js → switch-ZhX47Ufo.es.js} +7 -7
- package/dist/chunks/{switch-1tLtDt7M.es.js.map → switch-ZhX47Ufo.es.js.map} +1 -1
- package/dist/chunks/{tabs-CgoUJCIx.es.js → tabs-B7qKxKnI.es.js} +13 -13
- package/dist/chunks/{tabs-CgoUJCIx.es.js.map → tabs-B7qKxKnI.es.js.map} +1 -1
- package/dist/chunks/{tabs-C4EfvdVt.cjs.js → tabs-DWMVR5Mq.cjs.js} +2 -2
- package/dist/chunks/{tabs-C4EfvdVt.cjs.js.map → tabs-DWMVR5Mq.cjs.js.map} +1 -1
- package/dist/chunks/{tag-group-DauMcIZX.es.js → tag-group-7rUsjnet.es.js} +19 -19
- package/dist/chunks/{tag-group-DauMcIZX.es.js.map → tag-group-7rUsjnet.es.js.map} +1 -1
- package/dist/chunks/{tag-group-Bu4IPJY2.cjs.js → tag-group-BkoC3DAk.cjs.js} +2 -2
- package/dist/chunks/{tag-group-Bu4IPJY2.cjs.js.map → tag-group-BkoC3DAk.cjs.js.map} +1 -1
- package/dist/chunks/{text-CIb_VDvO.es.js → text-DvqDjbwb.es.js} +2 -2
- package/dist/chunks/{text-CIb_VDvO.es.js.map → text-DvqDjbwb.es.js.map} +1 -1
- package/dist/chunks/{text-input-BpdFm4J-.es.js → text-input-D_3g3kxm.es.js} +7 -7
- package/dist/chunks/{text-input-BpdFm4J-.es.js.map → text-input-D_3g3kxm.es.js.map} +1 -1
- package/dist/chunks/{text-input-YkL8bx31.cjs.js → text-input-Dv2HkOIG.cjs.js} +2 -2
- package/dist/chunks/{text-input-YkL8bx31.cjs.js.map → text-input-Dv2HkOIG.cjs.js.map} +1 -1
- package/dist/chunks/{text-input-field-B0WhjD0U.es.js → text-input-field-DWpejDcH.es.js} +3 -3
- package/dist/chunks/{text-input-field-B0WhjD0U.es.js.map → text-input-field-DWpejDcH.es.js.map} +1 -1
- package/dist/chunks/{text-input-field-CPLVnqlr.cjs.js → text-input-field-vYxpIFXm.cjs.js} +2 -2
- package/dist/chunks/{text-input-field-CPLVnqlr.cjs.js.map → text-input-field-vYxpIFXm.cjs.js.map} +1 -1
- package/dist/chunks/{time-input-m8zeR_8L.cjs.js → time-input-CMAP5QkL.cjs.js} +2 -2
- package/dist/chunks/{time-input-m8zeR_8L.cjs.js.map → time-input-CMAP5QkL.cjs.js.map} +1 -1
- package/dist/chunks/{time-input-DMyhDH5j.es.js → time-input-CZWkAErU.es.js} +4 -4
- package/dist/chunks/{time-input-DMyhDH5j.es.js.map → time-input-CZWkAErU.es.js.map} +1 -1
- package/dist/chunks/{toggle-button-CHZm868U.cjs.js → toggle-button-BnDf2yfy.cjs.js} +2 -2
- package/dist/chunks/{toggle-button-CHZm868U.cjs.js.map → toggle-button-BnDf2yfy.cjs.js.map} +1 -1
- package/dist/chunks/{toggle-button-B2uXtvzj.es.js → toggle-button-QMUjECJO.es.js} +4 -4
- package/dist/chunks/{toggle-button-B2uXtvzj.es.js.map → toggle-button-QMUjECJO.es.js.map} +1 -1
- package/dist/chunks/{toggle-button-group-BWpmMkEz.es.js → toggle-button-group-P0oS-q6h.es.js} +2 -2
- package/dist/chunks/{toggle-button-group-BWpmMkEz.es.js.map → toggle-button-group-P0oS-q6h.es.js.map} +1 -1
- package/dist/chunks/{toolbar-BAETJxml.cjs.js → toolbar-Bg2OUmFi.cjs.js} +2 -2
- package/dist/chunks/{toolbar-BAETJxml.cjs.js.map → toolbar-Bg2OUmFi.cjs.js.map} +1 -1
- package/dist/chunks/{toolbar-BnS73QeG.es.js → toolbar-C3GiZF_9.es.js} +6 -6
- package/dist/chunks/{toolbar-BnS73QeG.es.js.map → toolbar-C3GiZF_9.es.js.map} +1 -1
- package/dist/chunks/{tooltip-D3QrrizN.es.js → tooltip-CzEuq_Qi.es.js} +7 -7
- package/dist/chunks/{tooltip-D3QrrizN.es.js.map → tooltip-CzEuq_Qi.es.js.map} +1 -1
- package/dist/chunks/{useButton-CiPiehgC.es.js → useButton-B2TbwHSy.es.js} +4 -4
- package/dist/chunks/{useButton-CiPiehgC.es.js.map → useButton-B2TbwHSy.es.js.map} +1 -1
- package/dist/chunks/{useDateFormatter-886GJ5w1.es.js → useDateFormatter-CO08GpLe.es.js} +2 -2
- package/dist/chunks/{useDateFormatter-886GJ5w1.es.js.map → useDateFormatter-CO08GpLe.es.js.map} +1 -1
- package/dist/chunks/{useDisclosureState-CWZTR2xM.es.js → useDisclosureState-BqxwXawT.es.js} +3 -3
- package/dist/chunks/{useDisclosureState-CWZTR2xM.es.js.map → useDisclosureState-BqxwXawT.es.js.map} +1 -1
- package/dist/chunks/{useEvent-CRo5BZDX.es.js → useEvent-D8bTsAyx.es.js} +6 -6
- package/dist/chunks/{useEvent-CRo5BZDX.es.js.map → useEvent-D8bTsAyx.es.js.map} +1 -1
- package/dist/chunks/{useField-CHrpmkxe.es.js → useField-BfW84CS4.es.js} +8 -8
- package/dist/chunks/{useField-CHrpmkxe.es.js.map → useField-BfW84CS4.es.js.map} +1 -1
- package/dist/chunks/{useFocus-CrgTusM3.es.js → useFocus-TCNvrvTC.es.js} +6 -6
- package/dist/chunks/{useFocus-CrgTusM3.es.js.map → useFocus-TCNvrvTC.es.js.map} +1 -1
- package/dist/chunks/{useFocusRing-FPt2Rwil.es.js → useFocusRing-oMAqzr3e.es.js} +4 -4
- package/dist/chunks/{useFocusRing-FPt2Rwil.es.js.map → useFocusRing-oMAqzr3e.es.js.map} +1 -1
- package/dist/chunks/{useFocusVisible-B3HmFL2Q.es.js → useFocusVisible-Uw6yFmFY.es.js} +6 -6
- package/dist/chunks/{useFocusVisible-B3HmFL2Q.es.js.map → useFocusVisible-Uw6yFmFY.es.js.map} +1 -1
- package/dist/chunks/{useFocusWithin-EFOG-Jn1.es.js → useFocusWithin-nAsP7Ru3.es.js} +6 -6
- package/dist/chunks/{useFocusWithin-EFOG-Jn1.es.js.map → useFocusWithin-nAsP7Ru3.es.js.map} +1 -1
- package/dist/chunks/{useFocusable-Cs6i58WP.es.js → useFocusable-Bm-DQaak.es.js} +5 -5
- package/dist/chunks/{useFocusable-Cs6i58WP.es.js.map → useFocusable-Bm-DQaak.es.js.map} +1 -1
- package/dist/chunks/{useFormReset-BGuIA_u2.es.js → useFormReset-C52dSDoe.es.js} +2 -2
- package/dist/chunks/{useFormReset-BGuIA_u2.es.js.map → useFormReset-C52dSDoe.es.js.map} +1 -1
- package/dist/chunks/{useFormValidation-BCVLtR0U.es.js → useFormValidation-DxDV9X1M.es.js} +3 -3
- package/dist/chunks/{useFormValidation-BCVLtR0U.es.js.map → useFormValidation-DxDV9X1M.es.js.map} +1 -1
- package/dist/chunks/{useGridListItem-CjGTTOtc.es.js → useGridListItem-DTjO497o.es.js} +10 -10
- package/dist/chunks/{useGridListItem-CjGTTOtc.es.js.map → useGridListItem-DTjO497o.es.js.map} +1 -1
- package/dist/chunks/{useHasTabbableChild-DXq72IE3.es.js → useHasTabbableChild-DemFbZRn.es.js} +3 -3
- package/dist/chunks/{useHasTabbableChild-DXq72IE3.es.js.map → useHasTabbableChild-DemFbZRn.es.js.map} +1 -1
- package/dist/chunks/{useHover-BQRSM3qT.es.js → useHover-BtRK9g2L.es.js} +2 -2
- package/dist/chunks/{useHover-BQRSM3qT.es.js.map → useHover-BtRK9g2L.es.js.map} +1 -1
- package/dist/chunks/{useLabel-DQaRD22u.es.js → useLabel-DfbcmKTa.es.js} +5 -5
- package/dist/chunks/{useLabel-DQaRD22u.es.js.map → useLabel-DfbcmKTa.es.js.map} +1 -1
- package/dist/chunks/{useLabels-BDqWMehi.es.js → useLabels-Gn8v9XZB.es.js} +2 -2
- package/dist/chunks/{useLabels-BDqWMehi.es.js.map → useLabels-Gn8v9XZB.es.js.map} +1 -1
- package/dist/chunks/{useListState-CRfmjiWx.es.js → useListState-D9k6HiWm.es.js} +2 -2
- package/dist/chunks/{useListState-CRfmjiWx.es.js.map → useListState-D9k6HiWm.es.js.map} +1 -1
- package/dist/chunks/{usePress-BuLomD_X.es.js → usePress-C_IPaF8I.es.js} +6 -6
- package/dist/chunks/{usePress-BuLomD_X.es.js.map → usePress-C_IPaF8I.es.js.map} +1 -1
- package/dist/chunks/{useProgressBar--OvVKto2.es.js → useProgressBar-DCj794Zv.es.js} +7 -7
- package/dist/chunks/{useProgressBar--OvVKto2.es.js.map → useProgressBar-DCj794Zv.es.js.map} +1 -1
- package/dist/chunks/{useSingleSelectListState-DFR33TSw.es.js → useSingleSelectListState-C_tE7a5E.es.js} +2 -2
- package/dist/chunks/{useSingleSelectListState-DFR33TSw.es.js.map → useSingleSelectListState-C_tE7a5E.es.js.map} +1 -1
- package/dist/chunks/{useSpinButton-YcV6vlPf.es.js → useSpinButton-BiQ20B5n.es.js} +15 -15
- package/dist/chunks/{useSpinButton-YcV6vlPf.es.js.map → useSpinButton-BiQ20B5n.es.js.map} +1 -1
- package/dist/chunks/{useSyncRef-BpLviItW.es.js → useSyncRef-DmY05o2G.es.js} +2 -2
- package/dist/chunks/{useSyncRef-BpLviItW.es.js.map → useSyncRef-DmY05o2G.es.js.map} +1 -1
- package/dist/chunks/{useTextField-yuaT8-G4.es.js → useTextField-9WuJfc9u.es.js} +7 -7
- package/dist/chunks/{useTextField-yuaT8-G4.es.js.map → useTextField-9WuJfc9u.es.js.map} +1 -1
- package/dist/chunks/{useToggle-DKP3zVOY.es.js → useToggle-BZPMewLP.es.js} +5 -5
- package/dist/chunks/{useToggle-DKP3zVOY.es.js.map → useToggle-BZPMewLP.es.js.map} +1 -1
- package/dist/chunks/{useToolbar-CbJkugif.es.js → useToolbar-C673xD3E.es.js} +3 -3
- package/dist/chunks/{useToolbar-CbJkugif.es.js.map → useToolbar-C673xD3E.es.js.map} +1 -1
- package/dist/chunks/{utils-B6pV5ewr.es.js → utils-9vu7GUaz.es.js} +12 -12
- package/dist/chunks/{utils-B6pV5ewr.es.js.map → utils-9vu7GUaz.es.js.map} +1 -1
- package/dist/chunks/{utils-oAGBWzI5.es.js → utils-Bl-3nKLa.es.js} +14 -14
- package/dist/chunks/{utils-oAGBWzI5.es.js.map → utils-Bl-3nKLa.es.js.map} +1 -1
- package/dist/chunks/{visually-hidden-Dj5CT-u_.es.js → visually-hidden-m5QY9YV7.es.js} +2 -2
- package/dist/chunks/{visually-hidden-Dj5CT-u_.es.js.map → visually-hidden-m5QY9YV7.es.js.map} +1 -1
- package/dist/components/accordion/accordion.recipe.d.ts +1 -1
- package/dist/components/accordion/accordion.slots.d.ts +5 -5
- package/dist/components/accordion.cjs +1 -1
- package/dist/components/accordion.es.js +2 -2
- package/dist/components/alert/alert.recipe.d.ts +1 -1
- package/dist/components/alert/alert.slots.d.ts +3 -3
- package/dist/components/alert.cjs +1 -1
- package/dist/components/alert.es.js +1 -1
- package/dist/components/avatar/avatar.slots.d.ts +1 -1
- package/dist/components/badge/badge.slots.d.ts +1 -1
- package/dist/components/badge.es.js +1 -1
- package/dist/components/button.cjs +1 -1
- package/dist/components/button.es.js +1 -1
- package/dist/components/calendar/calendar.slots.d.ts +8 -8
- package/dist/components/calendar.cjs +1 -1
- package/dist/components/calendar.es.js +1 -1
- package/dist/components/card.cjs +1 -1
- package/dist/components/card.es.js +1 -1
- package/dist/components/checkbox.cjs +1 -1
- package/dist/components/checkbox.es.js +1 -1
- package/dist/components/collapsible-motion/collapsible-motion.slots.d.ts +2 -2
- package/dist/components/collapsible-motion.cjs +1 -1
- package/dist/components/collapsible-motion.es.js +1 -1
- package/dist/components/combobox/combobox.recipe.d.ts +1 -1
- package/dist/components/combobox/combobox.slots.d.ts +9 -9
- package/dist/components/combobox.cjs +1 -1
- package/dist/components/combobox.es.js +1 -1
- package/dist/components/components.cjs +1 -1
- package/dist/components/components.es.js +1 -1
- package/dist/components/data-table/data-table.d.ts +3 -3
- package/dist/components/data-table/data-table.slots.d.ts +12 -12
- package/dist/components/data-table.cjs +1 -1
- package/dist/components/data-table.es.js +1 -1
- package/dist/components/date-input/date-input.slots.d.ts +5 -5
- package/dist/components/date-input.cjs +1 -1
- package/dist/components/date-input.es.js +1 -1
- package/dist/components/date-picker/date-picker.recipe.d.ts +1 -1
- package/dist/components/date-picker/date-picker.slots.d.ts +6 -6
- package/dist/components/date-picker.cjs +1 -1
- package/dist/components/date-picker.es.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.recipe.d.ts +1 -1
- package/dist/components/date-range-picker/date-range-picker.slots.d.ts +8 -8
- package/dist/components/date-range-picker-field.cjs +1 -1
- package/dist/components/date-range-picker-field.es.js +1 -1
- package/dist/components/date-range-picker.cjs +1 -1
- package/dist/components/date-range-picker.es.js +1 -1
- package/dist/components/dialog/dialog.slots.d.ts +9 -9
- package/dist/components/dialog.cjs +1 -1
- package/dist/components/dialog.es.js +1 -1
- package/dist/components/draggable-list/draggable-list.slots.d.ts +4 -4
- package/dist/components/draggable-list.cjs +1 -1
- package/dist/components/draggable-list.es.js +1 -1
- package/dist/components/drawer/drawer.slots.d.ts +10 -10
- package/dist/components/drawer.cjs +1 -1
- package/dist/components/drawer.es.js +1 -1
- package/dist/components/fields.cjs +1 -1
- package/dist/components/fields.es.js +7 -7
- package/dist/components/form-field/form-field.recipe.d.ts +1 -1
- package/dist/components/form-field/form-field.slots.d.ts +2 -2
- package/dist/components/form-field.cjs +1 -1
- package/dist/components/form-field.es.js +1 -1
- package/dist/components/group.es.js +1 -1
- package/dist/components/heading.es.js +1 -1
- package/dist/components/icon-button.cjs +1 -1
- package/dist/components/icon-button.es.js +1 -1
- package/dist/components/icon-toggle-button.cjs +1 -1
- package/dist/components/icon-toggle-button.es.js +1 -1
- package/dist/components/inline-svg/inline-svg.slots.d.ts +1 -1
- package/dist/components/kbd.es.js +1 -1
- package/dist/components/link/link.slots.d.ts +1 -1
- package/dist/components/link.es.js +1 -1
- package/dist/components/loading-spinner/loading-spinner.slots.d.ts +1 -1
- package/dist/components/loading-spinner.es.js +1 -1
- package/dist/components/localized-field/localized-field.slots.d.ts +10 -10
- package/dist/components/localized-field.cjs +1 -1
- package/dist/components/localized-field.es.js +1 -1
- package/dist/components/menu/menu.recipe.d.ts +1 -1
- package/dist/components/money-input/money-input.slots.d.ts +6 -6
- package/dist/components/money-input-field.cjs +1 -1
- package/dist/components/money-input-field.es.js +1 -1
- package/dist/components/money-input.cjs +1 -1
- package/dist/components/money-input.es.js +1 -1
- package/dist/components/multiline-text-input/multiline-text-input.slots.d.ts +3 -3
- package/dist/components/multiline-text-input-field.cjs +1 -1
- package/dist/components/multiline-text-input-field.es.js +1 -1
- package/dist/components/multiline-text-input.cjs +1 -1
- package/dist/components/multiline-text-input.es.js +1 -1
- package/dist/components/nimbus-provider.cjs +1 -1
- package/dist/components/nimbus-provider.es.js +1 -1
- package/dist/components/number-input/number-input.slots.d.ts +6 -6
- package/dist/components/number-input-field.cjs +1 -1
- package/dist/components/number-input-field.es.js +1 -1
- package/dist/components/number-input.cjs +1 -1
- package/dist/components/number-input.es.js +1 -1
- package/dist/components/pagination.cjs +1 -1
- package/dist/components/pagination.es.js +1 -1
- package/dist/components/password-input-field.cjs +1 -1
- package/dist/components/password-input-field.es.js +1 -1
- package/dist/components/password-input.cjs +1 -1
- package/dist/components/password-input.es.js +1 -1
- package/dist/components/patterns.cjs +1 -1
- package/dist/components/patterns.es.js +7 -7
- package/dist/components/popover.es.js +1 -1
- package/dist/components/progress-bar/progress-bar.slots.d.ts +4 -4
- package/dist/components/progress-bar.cjs +1 -1
- package/dist/components/progress-bar.es.js +1 -1
- package/dist/components/radio-input/radio-input.slots.d.ts +2 -2
- package/dist/components/radio-input.cjs +1 -1
- package/dist/components/radio-input.es.js +1 -1
- package/dist/components/range-calendar/range-calendar.slots.d.ts +8 -8
- package/dist/components/range-calendar.cjs +1 -1
- package/dist/components/range-calendar.es.js +1 -1
- package/dist/components/rich-text-input/rich-text-input.slots.d.ts +2 -2
- package/dist/components/rich-text-input.cjs +1 -1
- package/dist/components/rich-text-input.es.js +1 -1
- package/dist/components/scoped-search-input.cjs +1 -1
- package/dist/components/scoped-search-input.es.js +1 -1
- package/dist/components/search-input-field.cjs +1 -1
- package/dist/components/search-input-field.es.js +1 -1
- package/dist/components/search-input.cjs +1 -1
- package/dist/components/search-input.es.js +1 -1
- package/dist/components/select/select.slots.d.ts +7 -7
- package/dist/components/select.cjs +1 -1
- package/dist/components/select.es.js +1 -1
- package/dist/components/separator.cjs +1 -1
- package/dist/components/separator.es.js +1 -1
- package/dist/components/split-button/split-button.slots.d.ts +3 -3
- package/dist/components/split-button.cjs +1 -1
- package/dist/components/split-button.es.js +1 -1
- package/dist/components/switch/switch.slots.d.ts +3 -3
- package/dist/components/switch.cjs +1 -1
- package/dist/components/switch.es.js +1 -1
- package/dist/components/tabs/tabs.recipe.d.ts +1 -1
- package/dist/components/tabs/tabs.slots.d.ts +3 -3
- package/dist/components/tabs.cjs +1 -1
- package/dist/components/tabs.es.js +1 -1
- package/dist/components/tag-group.cjs +1 -1
- package/dist/components/tag-group.es.js +1 -1
- package/dist/components/text-input-field.cjs +1 -1
- package/dist/components/text-input-field.es.js +1 -1
- package/dist/components/text-input.cjs +1 -1
- package/dist/components/text-input.es.js +1 -1
- package/dist/components/text.es.js +1 -1
- package/dist/components/time-input/time-input.slots.d.ts +5 -5
- package/dist/components/time-input.cjs +1 -1
- package/dist/components/time-input.es.js +1 -1
- package/dist/components/toggle-button-group.es.js +1 -1
- package/dist/components/toggle-button.cjs +1 -1
- package/dist/components/toggle-button.es.js +1 -1
- package/dist/components/toolbar.cjs +1 -1
- package/dist/components/toolbar.es.js +1 -1
- package/dist/components/tooltip.es.js +2 -2
- package/dist/components/visually-hidden.es.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.es.js +64 -64
- package/dist/theme/slot-recipes/index.d.ts +8 -8
- package/package.json +5 -5
- package/dist/chunks/accordion.content-Cslx-S6p.cjs.js +0 -2
- package/dist/chunks/badge-CgYpum7D.es.js +0 -17
- package/dist/chunks/index-CqOsUykV.es.js.map +0 -1
- package/dist/chunks/index-DdyUbTzB.cjs.js.map +0 -1
package/dist/chunks/{rich-text-input-D7zyqfNG.cjs.js.map → rich-text-input-CpQVkFRl.cjs.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rich-text-input-D7zyqfNG.cjs.js","sources":["../../src/components/rich-text-input/rich-text-input.slots.tsx","../../src/components/rich-text-input/hooks/use-preserved-selection.ts","../../src/components/rich-text-input/constants/editor-constants.ts","../../src/components/rich-text-input/rich-text-input.i18n.ts","../../src/components/rich-text-input/constants/text-styles.ts","../../../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js","../../src/components/rich-text-input/utils/html-serialization.ts","../../src/components/rich-text-input/utils/slate-helpers.tsx","../../src/components/rich-text-input/hooks/use-formatting-state.ts","../../src/components/rich-text-input/components/formatting-menu.tsx","../../../../node_modules/.pnpm/is-hotkey@0.2.0/node_modules/is-hotkey/lib/index.js","../../src/components/rich-text-input/hooks/use-keyboard-shortcuts.ts","../../src/components/rich-text-input/components/rich-text-editor.tsx","../../src/components/rich-text-input/hooks/use-toolbar-state.ts","../../src/components/rich-text-input/components/rich-text-toolbar.tsx","../../src/components/rich-text-input/rich-text-input.tsx"],"sourcesContent":["import { createSlotRecipeContext } from \"@chakra-ui/react\";\nimport type { SlotComponent } from \"@/type-utils\";\nimport type {\n RichTextInputRootSlotProps,\n RichTextInputToolbarSlotProps,\n RichTextInputEditableSlotProps,\n} from \"./rich-text-input.types\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n key: \"richTextInput\",\n});\n\n// Root slot\nexport const RichTextInputRootSlot: SlotComponent<\n HTMLDivElement,\n RichTextInputRootSlotProps\n> = withProvider<HTMLDivElement, RichTextInputRootSlotProps>(\"div\", \"root\");\n\n// Toolbar slot\nexport const RichTextInputToolbarSlot = withContext<\n HTMLDivElement,\n RichTextInputToolbarSlotProps\n>(\"div\", \"toolbar\");\n\n// Editable slot\nexport const RichTextInputEditableSlot = withContext<\n HTMLDivElement,\n RichTextInputEditableSlotProps\n>(\"div\", \"editable\");\n","import { useCallback } from \"react\";\nimport { Editor, Transforms } from \"slate\";\nimport { ReactEditor } from \"slate-react\";\n\n/**\n * Hook that provides a helper function to preserve selection when toolbar actions are executed.\n * This prevents losing text selection when interacting with toolbar buttons and menus.\n *\n * TODO: This works for toggle buttons, but not for menus.\n *\n * @param editor - The Slate editor instance\n * @returns A function that wraps actions to preserve selection and focus\n */\nexport const usePreservedSelection = (editor: Editor) => {\n return useCallback(\n (action: () => void) => {\n return () => {\n // Save the current selection\n const { selection } = editor;\n\n // Execute the action\n action();\n\n // Restore selection if it was lost\n if (selection && !editor.selection) {\n Transforms.select(editor, selection);\n }\n\n // Ensure editor stays focused\n if (!ReactEditor.isFocused(editor)) {\n ReactEditor.focus(editor);\n }\n };\n },\n [editor]\n );\n};\n","/**\n * Constants for the rich text editor component\n *\n * This file consolidates all the configuration constants used by the rich text editor.\n * Previously split across multiple files, now consolidated for better maintainability.\n */\n\n// Keyboard shortcuts for formatting\nexport const HOTKEYS = {\n \"mod+b\": \"bold\",\n \"mod+i\": \"italic\",\n \"mod+u\": \"underline\",\n \"mod+`\": \"code\",\n} as const;\n\n// Default configuration values\nexport const EDITOR_DEFAULTS = {\n placeholder: \"Start typing...\",\n isDisabled: false,\n isReadOnly: false,\n autoFocus: false,\n} as const;\n\n// HTML to Slate element mapping for serialization\nexport const BLOCK_TAGS = {\n blockquote: \"block-quote\",\n p: \"paragraph\",\n pre: \"code\",\n h1: \"heading-one\",\n h2: \"heading-two\",\n h3: \"heading-three\",\n h4: \"heading-four\",\n h5: \"heading-five\",\n ul: \"bulleted-list\",\n ol: \"numbered-list\",\n li: \"list-item\",\n a: \"link\",\n} as const;\n\nexport const MARK_TAGS = {\n strong: \"bold\",\n b: \"bold\",\n em: \"italic\",\n i: \"italic\",\n u: \"underline\",\n code: \"code\",\n sup: \"superscript\",\n sub: \"subscript\",\n del: \"strikethrough\",\n s: \"strikethrough\",\n} as const;\n\n// Formatting options for the \"More Options\" menu\nexport const FORMATTING_OPTIONS = {\n STRIKETHROUGH: \"strikethrough\",\n CODE: \"code\",\n SUPERSCRIPT: \"superscript\",\n SUBSCRIPT: \"subscript\",\n} as const;\n\nexport const BASIC_FORMATTING = [\n FORMATTING_OPTIONS.STRIKETHROUGH,\n FORMATTING_OPTIONS.CODE,\n] as const;\n\nexport const SCRIPT_FORMATTING = [\n FORMATTING_OPTIONS.SUPERSCRIPT,\n FORMATTING_OPTIONS.SUBSCRIPT,\n] as const;\n\n// Mutual exclusion groups - superscript and subscript cannot both be active\nexport const MUTUALLY_EXCLUSIVE_GROUPS = {\n script: [FORMATTING_OPTIONS.SUPERSCRIPT, FORMATTING_OPTIONS.SUBSCRIPT],\n} as const;\n\n// Type definitions\nexport type HotkeyType = typeof HOTKEYS;\nexport type HotkeyKey = keyof HotkeyType;\nexport type HotkeyValue = HotkeyType[HotkeyKey];\nexport type BlockTagKey = keyof typeof BLOCK_TAGS;\nexport type MarkTagKey = keyof typeof MARK_TAGS;\nexport type BlockTagValue = (typeof BLOCK_TAGS)[BlockTagKey];\nexport type MarkTagValue = (typeof MARK_TAGS)[MarkTagKey];\nexport type FormattingType =\n (typeof FORMATTING_OPTIONS)[keyof typeof FORMATTING_OPTIONS];\nexport type BasicFormattingType = (typeof BASIC_FORMATTING)[number];\nexport type ScriptFormattingType = (typeof SCRIPT_FORMATTING)[number];\n","import { defineMessages } from \"react-intl\";\n\nexport const messages = defineMessages({\n // Toolbar\n textFormatting: {\n id: \"Nimbus.RichTextInput.textFormatting\",\n description: \"aria-label for the text formatting toolbar\",\n defaultMessage: \"Text formatting\",\n },\n textStyleMenu: {\n id: \"Nimbus.RichTextInput.textStyleMenu\",\n description: \"aria-label for the text style menu trigger button\",\n defaultMessage: \"Text style menu\",\n },\n textStyle: {\n id: \"Nimbus.RichTextInput.textStyle\",\n description: \"tooltip text for the text style menu\",\n defaultMessage: \"Text style\",\n },\n bold: {\n id: \"Nimbus.RichTextInput.bold\",\n description: \"aria-label and tooltip for the bold formatting button\",\n defaultMessage: \"Bold\",\n },\n italic: {\n id: \"Nimbus.RichTextInput.italic\",\n description: \"aria-label and tooltip for the italic formatting button\",\n defaultMessage: \"Italic\",\n },\n underline: {\n id: \"Nimbus.RichTextInput.underline\",\n description: \"aria-label and tooltip for the underline formatting button\",\n defaultMessage: \"Underline\",\n },\n listFormatting: {\n id: \"Nimbus.RichTextInput.listFormatting\",\n description: \"aria-label for the list formatting toggle group\",\n defaultMessage: \"List formatting\",\n },\n bulletedList: {\n id: \"Nimbus.RichTextInput.bulletedList\",\n description: \"aria-label for the bulleted list button\",\n defaultMessage: \"Bulleted list\",\n },\n numberedList: {\n id: \"Nimbus.RichTextInput.numberedList\",\n description: \"aria-label for the numbered list button\",\n defaultMessage: \"Numbered list\",\n },\n undo: {\n id: \"Nimbus.RichTextInput.undo\",\n description: \"aria-label and tooltip for the undo button\",\n defaultMessage: \"Undo\",\n },\n redo: {\n id: \"Nimbus.RichTextInput.redo\",\n description: \"aria-label and tooltip for the redo button\",\n defaultMessage: \"Redo\",\n },\n\n // Formatting Menu\n moreFormattingOptions: {\n id: \"Nimbus.RichTextInput.moreFormattingOptions\",\n description: \"aria-label for the more formatting options menu button\",\n defaultMessage: \"More formatting options\",\n },\n moreStyles: {\n id: \"Nimbus.RichTextInput.moreStyles\",\n description: \"tooltip text for the more formatting options menu\",\n defaultMessage: \"More styles\",\n },\n strikethrough: {\n id: \"Nimbus.RichTextInput.strikethrough\",\n description: \"label for the strikethrough menu item\",\n defaultMessage: \"Strikethrough\",\n },\n code: {\n id: \"Nimbus.RichTextInput.code\",\n description: \"label for the code formatting menu item\",\n defaultMessage: \"Code\",\n },\n superscript: {\n id: \"Nimbus.RichTextInput.superscript\",\n description: \"label for the superscript formatting menu item\",\n defaultMessage: \"Superscript\",\n },\n subscript: {\n id: \"Nimbus.RichTextInput.subscript\",\n description: \"label for the subscript formatting menu item\",\n defaultMessage: \"Subscript\",\n },\n\n // Text Style Labels\n paragraph: {\n id: \"Nimbus.RichTextInput.paragraph\",\n description: \"label for paragraph text style\",\n defaultMessage: \"Paragraph\",\n },\n headingOne: {\n id: \"Nimbus.RichTextInput.headingOne\",\n description: \"label for heading 1 text style\",\n defaultMessage: \"Heading 1\",\n },\n headingTwo: {\n id: \"Nimbus.RichTextInput.headingTwo\",\n description: \"label for heading 2 text style\",\n defaultMessage: \"Heading 2\",\n },\n headingThree: {\n id: \"Nimbus.RichTextInput.headingThree\",\n description: \"label for heading 3 text style\",\n defaultMessage: \"Heading 3\",\n },\n headingFour: {\n id: \"Nimbus.RichTextInput.headingFour\",\n description: \"label for heading 4 text style\",\n defaultMessage: \"Heading 4\",\n },\n headingFive: {\n id: \"Nimbus.RichTextInput.headingFive\",\n description: \"label for heading 5 text style\",\n defaultMessage: \"Heading 5\",\n },\n quote: {\n id: \"Nimbus.RichTextInput.quote\",\n description: \"label for block quote text style\",\n defaultMessage: \"Quote\",\n },\n});\n","import type { IntlShape } from \"react-intl\";\nimport { messages } from \"../rich-text-input.i18n\";\n\n/**\n * Text style definitions for rich text editor block formatting\n *\n * Used by:\n * - components/rich-text-toolbar.tsx: Renders text style dropdown menu with these options\n * - hooks/useToolbarState.ts: Manages current text style state and selection logic\n * - utils/text-style-utils.ts: Helper functions for text style operations\n * - utils/validation-utils.ts: Validates if block types are supported\n *\n * Purpose:\n * - Centralizes all available text styles and their visual properties\n * - Maps block type IDs to user-friendly labels and Chakra UI styling props\n * - Ensures consistent styling across the editor and UI controls\n */\nexport type TextStyleDefinition = {\n id: string;\n label: string;\n props: {\n textStyle: string;\n fontWeight: string;\n };\n};\n\n/**\n * Returns text style definitions with localized labels\n * @param intl - react-intl IntlShape instance for formatting messages\n */\nexport const getTextStyles = (intl: IntlShape): TextStyleDefinition[] => [\n {\n id: \"paragraph\",\n label: intl.formatMessage(messages.paragraph),\n props: {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-one\",\n label: intl.formatMessage(messages.headingOne),\n props: {\n textStyle: \"2xl\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-two\",\n label: intl.formatMessage(messages.headingTwo),\n props: {\n textStyle: \"xl\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-three\",\n label: intl.formatMessage(messages.headingThree),\n props: {\n textStyle: \"lg\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-four\",\n label: intl.formatMessage(messages.headingFour),\n props: {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-five\",\n label: intl.formatMessage(messages.headingFive),\n props: {\n textStyle: \"xs\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"block-quote\",\n label: intl.formatMessage(messages.quote),\n props: {\n textStyle: \"md\",\n fontWeight: \"400\",\n },\n },\n];\n\n/**\n * Available block types for text style detection\n *\n * Used by:\n * - hooks/useToolbarState.ts: Detects currently active block type in editor\n * - Excludes \"paragraph\" as it's the default/fallback type\n */\nexport const blockTypes = [\n \"heading-one\",\n \"heading-two\",\n \"heading-three\",\n \"heading-four\",\n \"heading-five\",\n \"block-quote\",\n] as const;\n\nexport type BlockType = (typeof blockTypes)[number] | \"paragraph\";\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","import escapeHtml from \"escape-html\";\nimport {\n Text,\n Element as SlateElement,\n type Descendant,\n type Node as SlateNode,\n} from \"slate\";\nimport { BLOCK_TAGS, MARK_TAGS } from \"../constants\";\nimport type { CustomElement, CustomText } from \"./types\";\nimport { validSlateStateAdapter } from \"./slate-helpers\";\n\n// Soft line break placeholder character\nconst SOFT_BREAK_PLACEHOLDER = \"\\u200B\\n\";\n\n// Default empty state for the editor\nexport const createEmptyValue = (): Descendant[] => [\n {\n type: \"paragraph\",\n children: [{ text: \"\" }],\n } as CustomElement,\n];\n\n// Serialize Slate value to HTML\nexport const toHTML = (value: Descendant[]): string => {\n return value.map(serializeNode).join(\"\");\n};\n\nconst serializeNode = (node: SlateNode): string => {\n if (Text.isText(node)) {\n const textNode = node as CustomText;\n let string = escapeHtml(textNode.text);\n\n // Apply text formatting\n if (textNode.bold) {\n string = `<strong>${string}</strong>`;\n }\n if (textNode.code) {\n string = `<code>${string}</code>`;\n }\n if (textNode.italic) {\n string = `<em>${string}</em>`;\n }\n if (textNode.underline) {\n string = `<u>${string}</u>`;\n }\n if (textNode.superscript) {\n string = `<sup>${string}</sup>`;\n }\n if (textNode.subscript) {\n string = `<sub>${string}</sub>`;\n }\n if (textNode.strikethrough) {\n string = `<del>${string}</del>`;\n }\n\n // Replace soft line breaks with <br> tags\n string = string.replace(new RegExp(SOFT_BREAK_PLACEHOLDER, \"g\"), \"<br>\");\n\n return string;\n }\n\n const children = node.children.map(serializeNode).join(\"\");\n const element = node as CustomElement;\n\n switch (element.type) {\n case \"block-quote\":\n return `<blockquote>${children}</blockquote>`;\n case \"paragraph\":\n return `<p>${children}</p>`;\n case \"code\":\n return `<pre><code>${children}</code></pre>`;\n case \"bulleted-list\":\n return `<ul>${children}</ul>`;\n case \"numbered-list\":\n return `<ol>${children}</ol>`;\n case \"list-item\":\n return `<li>${children}</li>`;\n case \"heading-one\":\n return `<h1>${children}</h1>`;\n case \"heading-two\":\n return `<h2>${children}</h2>`;\n case \"heading-three\":\n return `<h3>${children}</h3>`;\n case \"heading-four\":\n return `<h4>${children}</h4>`;\n case \"heading-five\":\n return `<h5>${children}</h5>`;\n case \"link\": {\n let hrefAttr = \"\";\n if (element.url) {\n // Sanitize href to prevent XSS\n const sanitizedUrl = sanitizeUrl(element.url);\n hrefAttr = ` href=\"${escapeHtml(sanitizedUrl)}\"`;\n }\n\n let otherAttrsString = \"\";\n if (\n element.htmlAttributes &&\n typeof element.htmlAttributes === \"object\"\n ) {\n for (const [key, value] of Object.entries(element.htmlAttributes)) {\n // Filter out event handlers to prevent XSS\n if (!key.toLowerCase().startsWith(\"on\")) {\n otherAttrsString += ` ${escapeHtml(key)}=\"${escapeHtml(String(value))}\"`;\n }\n }\n }\n\n return `<a${hrefAttr}${otherAttrsString}>${children}</a>`;\n }\n default:\n return children;\n }\n};\n\n// Parse HTML string to Slate value\nexport const fromHTML = (html: string): Descendant[] => {\n if (!html || html.trim() === \"\") {\n return createEmptyValue();\n }\n\n try {\n // Simple HTML parsing - for now just handle basic cases\n if (\n html.includes(\"<p>\") ||\n html.includes(\"<h\") ||\n html.includes(\"<div>\") ||\n html.includes(\"<blockquote>\") ||\n html.includes(\"<ul>\") ||\n html.includes(\"<ol>\")\n ) {\n const document = new DOMParser().parseFromString(html, \"text/html\");\n const body = document.body;\n\n const nodes = Array.from(body.childNodes)\n .map(deserializeNode)\n .filter(Boolean) as Descendant[];\n\n // Use validSlateStateAdapter to ensure all nodes are valid Slate elements\n return validSlateStateAdapter(nodes);\n } else {\n // Simple text content\n return [\n {\n type: \"paragraph\",\n children: [{ text: html }],\n } as CustomElement,\n ];\n }\n } catch (error) {\n console.warn(\"Failed to parse HTML:\", error);\n return createEmptyValue();\n }\n};\n\nconst deserializeNode = (node: Node): Descendant | string | null => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || \"\";\n // Replace <br> tags with soft line breaks\n return text.replace(/<br\\s*\\/?>/gi, SOFT_BREAK_PLACEHOLDER);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n const children = Array.from(element.childNodes)\n .map(deserializeNode)\n .filter(Boolean);\n\n // Handle block elements\n if (tagName in BLOCK_TAGS) {\n const type = BLOCK_TAGS[tagName as keyof typeof BLOCK_TAGS];\n const slateElement: CustomElement = { type, children: [] };\n\n // Special handling for links\n if (type === \"link\") {\n const href = element.getAttribute(\"href\");\n if (href) {\n slateElement.url = href;\n }\n\n // Store other attributes\n const attrs: Record<string, string> = {};\n Array.from(element.attributes).forEach((attr) => {\n if (attr.name !== \"href\" && !attr.name.toLowerCase().startsWith(\"on\")) {\n attrs[attr.name] = attr.value;\n }\n });\n if (Object.keys(attrs).length > 0) {\n slateElement.htmlAttributes = attrs;\n }\n }\n\n // Process children\n slateElement.children = processChildren(children);\n return slateElement;\n }\n\n // Handle inline/mark elements - simplified without jsx\n if (tagName in MARK_TAGS) {\n const markType = MARK_TAGS[tagName as keyof typeof MARK_TAGS];\n const textContent = extractTextFromChildren(children);\n return { text: textContent, [markType]: true } as CustomText;\n }\n\n // Handle spans and other inline elements\n if (tagName === \"span\") {\n const textContent = extractTextFromChildren(children);\n return { text: textContent } as CustomText;\n }\n\n // For unknown elements, just return their text content\n const textContent = extractTextFromChildren(children);\n return { text: textContent } as CustomText;\n};\n\nconst processChildren = (\n children: (Descendant | string | null)[]\n): (CustomText | CustomElement)[] => {\n const processed: (CustomText | CustomElement)[] = [];\n\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child.trim()) {\n processed.push({ text: child });\n }\n } else if (child && Text.isText(child)) {\n processed.push(child as CustomText);\n } else if (child && SlateElement.isElement(child)) {\n // Keep block elements (like li) as elements\n processed.push(child as CustomElement);\n }\n }\n\n // For list containers, ensure we have valid children\n // For other containers, ensure we always have at least one text node\n if (processed.length === 0) {\n processed.push({ text: \"\" });\n }\n\n return processed;\n};\n\nconst extractTextContent = (element: SlateElement): string => {\n return element.children\n .map((child) => {\n if (Text.isText(child)) {\n return child.text;\n } else if (SlateElement.isElement(child)) {\n return extractTextContent(child);\n }\n return \"\";\n })\n .join(\"\");\n};\n\nconst extractTextFromChildren = (\n children: (Descendant | string | null)[]\n): string => {\n return children\n .filter(Boolean)\n .map((child) => {\n if (typeof child === \"string\") {\n return child;\n } else if (child && typeof child === \"object\" && \"text\" in child) {\n return child.text;\n } else if (child && typeof child === \"object\" && \"children\" in child) {\n return extractTextContent(child as SlateElement);\n }\n return String(child || \"\");\n })\n .join(\"\");\n};\n\nconst sanitizeUrl = (url: string): string => {\n const trimmed = String(url).trim().toLowerCase();\n if (\n trimmed.startsWith(\"javascript:\") ||\n trimmed.startsWith(\"data:\") ||\n trimmed.startsWith(\"vbscript:\")\n ) {\n return \"#\";\n }\n return String(url);\n};\n","import { type ReactElement } from \"react\";\nimport {\n Editor,\n Transforms,\n Element as SlateElement,\n Range,\n Text,\n type Editor as SlateEditor,\n} from \"slate\";\nimport {\n ReactEditor,\n type RenderElementProps,\n type RenderLeafProps,\n} from \"slate-react\";\nimport type { CustomElement, CustomText, ElementFormat } from \"./types\";\nimport { fromHTML, createEmptyValue } from \"./html-serialization\";\nimport type { Descendant } from \"slate\";\n\n// Validate and normalize Slate state\nexport const validSlateStateAdapter = (value: unknown): Descendant[] => {\n if (!Array.isArray(value)) {\n return createEmptyValue();\n }\n\n if (value.length === 0) {\n return createEmptyValue();\n }\n\n return value.map((node) => {\n if (!SlateElement.isElement(node)) {\n return {\n type: \"paragraph\",\n children: [{ text: String(node) }],\n } as CustomElement;\n }\n\n if (!node.children || node.children.length === 0) {\n return { ...node, children: [{ text: \"\" }] } as CustomElement;\n }\n\n return node as CustomElement;\n });\n};\n\n// Simple URL validation function\nconst isUrl = (text: string): boolean => {\n try {\n const url = new URL(text);\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\nconst LIST_TYPES = [\"bulleted-list\", \"numbered-list\"];\n\n// Define valid mark formats that can be checked\nconst VALID_MARK_FORMATS = [\n \"bold\",\n \"code\",\n \"italic\",\n \"underline\",\n \"superscript\",\n \"subscript\",\n \"strikethrough\",\n] as const;\n\ntype ValidMarkFormat = (typeof VALID_MARK_FORMATS)[number];\n\n// Type guard to check if a format is a valid mark format\nconst isValidMarkFormat = (format: string): format is ValidMarkFormat => {\n return VALID_MARK_FORMATS.includes(format as ValidMarkFormat);\n};\n\n// Type-safe function to check if a mark is active on a text node\nconst hasMarkFormat = (textNode: CustomText, format: string): boolean => {\n if (!isValidMarkFormat(format)) {\n return false;\n }\n return textNode[format] === true;\n};\n\n// Check if a mark is currently active\nexport const isMarkActive = (editor: SlateEditor, format: string): boolean => {\n const { selection } = editor;\n\n // For collapsed selection (cursor position), use the standard approach\n if (!selection || Range.isCollapsed(selection)) {\n const marks = Editor.marks(editor);\n if (marks && isValidMarkFormat(format)) {\n return (marks as CustomText)[format] === true;\n }\n\n // If no selection/marks (e.g., programmatically set content), check first text node\n if (!selection && editor.children.length > 0) {\n const firstNode = editor.children[0] as CustomElement;\n if (firstNode.children && firstNode.children.length > 0) {\n const firstText = firstNode.children[0];\n if (Text.isText(firstText) && isValidMarkFormat(format)) {\n return (firstText as CustomText)[format] === true;\n }\n }\n }\n\n return false;\n }\n\n // For text selection, check if any selected text has the mark\n // This provides better mixed formatting detection\n try {\n const textNodes = Array.from(\n Editor.nodes(editor, {\n at: selection,\n match: (n) => Text.isText(n),\n })\n );\n\n if (textNodes.length === 0) {\n const marks = Editor.marks(editor);\n if (!marks || !isValidMarkFormat(format)) {\n return false;\n }\n return (marks as CustomText)[format] === true;\n }\n\n // Show as active only if all selected text has this mark\n // Prioritizes unformatted text - if any text is unformatted, button shows inactive\n return textNodes.every(([node]) => {\n const textNode = node as CustomText;\n return hasMarkFormat(textNode, format);\n });\n } catch {\n // Fallback to original approach if node traversal fails\n const marks = Editor.marks(editor);\n if (!marks || !isValidMarkFormat(format)) {\n return false;\n }\n return (marks as CustomText)[format] === true;\n }\n};\n\n// Check if a block type is currently active\nexport const isBlockActive = (\n editor: SlateEditor,\n format: ElementFormat\n): boolean => {\n const { selection } = editor;\n\n // If there's a selection, use it to determine active block\n if (selection) {\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n (n as CustomElement).type === format,\n })\n );\n return !!match;\n }\n\n // If no selection, check the first block in the editor\n // This handles cases where content is set programmatically without focus\n if (editor.children.length > 0) {\n const firstNode = editor.children[0] as CustomElement;\n return firstNode.type === format;\n }\n\n return false;\n};\n\n// Toggle a text mark (bold, italic, etc.)\nexport const toggleMark = (editor: SlateEditor, format: string): void => {\n const isActive = isMarkActive(editor, format);\n\n if (isActive) {\n Editor.removeMark(editor, format);\n } else {\n Editor.addMark(editor, format, true);\n }\n};\n\n// Toggle a block type (heading, list, etc.)\nexport const toggleBlock = (\n editor: SlateEditor,\n format: ElementFormat\n): void => {\n const isActive = isBlockActive(editor, format);\n const isList = LIST_TYPES.includes(format);\n\n Transforms.unwrapNodes(editor, {\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n LIST_TYPES.includes((n as CustomElement).type),\n split: true,\n });\n\n let newProperties: Partial<CustomElement>;\n if (isActive) {\n newProperties = { type: \"paragraph\" };\n } else if (isList) {\n newProperties = { type: \"list-item\" };\n } else {\n newProperties = { type: format };\n }\n\n Transforms.setNodes<CustomElement>(editor, newProperties);\n\n if (!isActive && isList) {\n const block: CustomElement = { type: format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n};\n\n// Focus the editor\nexport const focusEditor = (editor: SlateEditor): void => {\n ReactEditor.focus(editor);\n};\n\n// Reset the editor to a specific value\nexport const resetEditor = (editor: SlateEditor, value: string): void => {\n const newValue = fromHTML(value);\n\n // Clear current content\n Transforms.delete(editor, {\n at: {\n anchor: Editor.start(editor, []),\n focus: Editor.end(editor, []),\n },\n });\n\n // Insert new content\n Transforms.insertNodes(editor, newValue);\n\n // Focus at the start\n Transforms.select(editor, Editor.start(editor, []));\n};\n\n// Link plugin\nexport const withLinks = (editor: SlateEditor): SlateEditor => {\n const { insertData, insertText, isInline } = editor;\n\n editor.isInline = (element: CustomElement) => {\n return element.type === \"link\" ? true : isInline(element);\n };\n\n editor.insertText = (text: string) => {\n if (text && isUrl(text)) {\n wrapLink(editor, text);\n } else {\n insertText(text);\n }\n };\n\n editor.insertData = (data: DataTransfer) => {\n const text = data.getData(\"text/plain\");\n\n if (text && isUrl(text)) {\n wrapLink(editor, text);\n } else {\n insertData(data);\n }\n };\n\n return editor;\n};\n\nconst unwrapLink = (editor: SlateEditor): void => {\n Transforms.unwrapNodes(editor, {\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n (n as CustomElement).type === \"link\",\n });\n};\n\nconst wrapLink = (editor: SlateEditor, url: string): void => {\n if (isBlockActive(editor, \"link\")) {\n unwrapLink(editor);\n }\n\n const { selection } = editor;\n const isCollapsed = selection && Range.isCollapsed(selection);\n const link: CustomElement = {\n type: \"link\",\n url,\n children: isCollapsed ? [{ text: url }] : [],\n };\n\n if (isCollapsed) {\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, link, { split: true });\n Transforms.collapse(editor, { edge: \"end\" });\n }\n};\n\n// Render element component\nexport const Element = ({\n attributes,\n children,\n element,\n}: RenderElementProps): ReactElement => {\n const customElement = element as CustomElement;\n const style = { textAlign: customElement.align } as React.CSSProperties;\n\n switch (customElement.type) {\n case \"block-quote\":\n return (\n <blockquote style={style} {...attributes}>\n {children}\n </blockquote>\n );\n case \"bulleted-list\":\n return (\n <ul style={style} {...attributes}>\n {children}\n </ul>\n );\n case \"heading-one\":\n return (\n <h1 style={style} {...attributes}>\n {children}\n </h1>\n );\n case \"heading-two\":\n return (\n <h2 style={style} {...attributes}>\n {children}\n </h2>\n );\n case \"heading-three\":\n return (\n <h3 style={style} {...attributes}>\n {children}\n </h3>\n );\n case \"heading-four\":\n return (\n <h4 style={style} {...attributes}>\n {children}\n </h4>\n );\n case \"heading-five\":\n return (\n <h5 style={style} {...attributes}>\n {children}\n </h5>\n );\n case \"list-item\":\n return (\n <li style={style} {...attributes}>\n {children}\n </li>\n );\n case \"numbered-list\":\n return (\n <ol style={style} {...attributes}>\n {children}\n </ol>\n );\n case \"link\":\n return (\n <a\n {...attributes}\n href={customElement.url}\n rel=\"noopener noreferrer\"\n style={style}\n >\n {children}\n </a>\n );\n default:\n return (\n <p style={style} {...attributes}>\n {children}\n </p>\n );\n }\n};\n\n// Render leaf component\nexport const Leaf = ({\n attributes,\n children,\n leaf,\n}: RenderLeafProps): ReactElement => {\n const customLeaf = leaf as CustomText;\n if (customLeaf.bold) {\n children = <strong>{children}</strong>;\n }\n\n if (customLeaf.code) {\n children = <code>{children}</code>;\n }\n\n if (customLeaf.italic) {\n children = <em>{children}</em>;\n }\n\n if (customLeaf.underline) {\n children = <u>{children}</u>;\n }\n\n if (customLeaf.strikethrough) {\n children = <del>{children}</del>;\n }\n\n if (customLeaf.superscript) {\n children = <sup>{children}</sup>;\n }\n\n if (customLeaf.subscript) {\n children = <sub>{children}</sub>;\n }\n\n return <span {...attributes}>{children}</span>;\n};\n\n// Soft line break handling\nexport const Softbreaker = {\n placeholderCharacter: \"\\u200B\\n\",\n serialize: (string: string): string =>\n string.replace(new RegExp(Softbreaker.placeholderCharacter, \"g\"), \"<br>\"),\n deserialize: (string: string): string =>\n string.replace(/<br\\s*\\/?>/gi, Softbreaker.placeholderCharacter),\n};\n","/**\n * Hook for managing formatting menu state with mutual exclusion logic\n *\n * Used by:\n * - components/formatting-menu.tsx: Manages complex formatting state and interactions\n *\n * Purpose:\n * - Handles mutual exclusion between superscript and subscript formatting\n * - Manages state for all formatting options in the \"More Options\" menu\n * - Processes complex selection changes with custom logic\n * - Extracted from formatting-menu.tsx to improve organization and testability\n * - Separates complex business logic from UI rendering\n *\n * @param withPreservedSelection - Function for preserving editor selection during operations\n * @returns Object containing formatting state and selection change handler\n */\nimport { useMemo, useCallback } from \"react\";\nimport { Editor } from \"slate\";\nimport { useSlate } from \"slate-react\";\nimport type { Key } from \"react-aria\";\nimport { BASIC_FORMATTING, SCRIPT_FORMATTING } from \"../constants\";\nimport { isMarkActive, toggleMark } from \"../utils/slate-helpers\";\n\nexport type UseFormattingStateProps = {\n withPreservedSelection: (fn: () => void) => () => void;\n};\n\nexport const useFormattingState = ({\n withPreservedSelection,\n}: UseFormattingStateProps) => {\n const editor = useSlate();\n\n // Get currently selected formatting keys (strikethrough and code)\n const selectedKeys = useMemo(() => {\n const keys: string[] = [];\n BASIC_FORMATTING.forEach((format) => {\n if (isMarkActive(editor, format)) keys.push(format);\n });\n return new Set(keys);\n }, [editor.selection, editor.children, Editor.marks(editor)]);\n\n // Get currently selected script formatting key (superscript or subscript - mutually exclusive)\n const selectedScriptKeys = useMemo(() => {\n const keys: string[] = [];\n SCRIPT_FORMATTING.forEach((format) => {\n if (isMarkActive(editor, format)) keys.push(format);\n });\n return new Set(keys);\n }, [editor.selection, editor.children, Editor.marks(editor)]);\n\n // Combine all selected keys for display purposes\n const allSelectedKeys = useMemo(() => {\n return new Set([\n ...Array.from(selectedKeys),\n ...Array.from(selectedScriptKeys),\n ]);\n }, [selectedKeys, selectedScriptKeys]);\n\n // Handle all selection changes with custom logic for mutual exclusion\n const handleAllSelectionChange = useCallback(\n (keys: \"all\" | Set<Key>) => {\n if (keys === \"all\") return;\n\n const keyArray = Array.from(keys) as string[];\n const currentKeys = Array.from(allSelectedKeys);\n\n // Find newly selected keys (toggle on)\n const newlySelected = keyArray.filter(\n (key) => !currentKeys.includes(key)\n );\n // Find newly deselected keys (toggle off)\n const newlyDeselected = currentKeys.filter(\n (key) => !keyArray.includes(key)\n );\n\n // Handle changes for each key\n [...newlySelected, ...newlyDeselected].forEach((key) => {\n if (key === \"superscript\" || key === \"subscript\") {\n // Handle script formatting with mutual exclusion\n withPreservedSelection(() => {\n const currentlyActive = isMarkActive(editor, \"superscript\")\n ? \"superscript\"\n : isMarkActive(editor, \"subscript\")\n ? \"subscript\"\n : null;\n\n if (newlySelected.includes(key)) {\n // If selecting a script format, deactivate the other one first\n if (currentlyActive && currentlyActive !== key) {\n toggleMark(editor, currentlyActive);\n }\n toggleMark(editor, key);\n } else {\n // Deselecting\n toggleMark(editor, key);\n }\n })();\n } else {\n // Handle regular formatting (strikethrough, code)\n withPreservedSelection(() => toggleMark(editor, key))();\n }\n });\n },\n [editor, allSelectedKeys, withPreservedSelection]\n );\n\n return {\n selectedKeys,\n selectedScriptKeys,\n allSelectedKeys,\n handleAllSelectionChange,\n };\n};\n","import { useSlate } from \"slate-react\";\nimport { useIntl } from \"react-intl\";\nimport { Menu, IconButton, Text, Box, Tooltip } from \"@/components\";\nimport {\n MoreHoriz,\n FormatStrikethrough,\n Code,\n} from \"@commercetools/nimbus-icons\";\nimport { usePreservedSelection } from \"../hooks/use-preserved-selection\";\nimport { useFormattingState } from \"../hooks/use-formatting-state\";\nimport { messages } from \"../rich-text-input.i18n\";\n\nexport type FormattingMenuProps = {\n isDisabled?: boolean;\n};\n\nexport const FormattingMenu = ({ isDisabled = false }: FormattingMenuProps) => {\n const intl = useIntl();\n const editor = useSlate();\n const withPreservedSelection = usePreservedSelection(editor);\n\n // Use the formatting state hook for all state management\n const { allSelectedKeys, handleAllSelectionChange } = useFormattingState({\n withPreservedSelection,\n });\n\n return (\n <Menu.Root\n selectionMode=\"multiple\"\n selectedKeys={allSelectedKeys}\n onSelectionChange={handleAllSelectionChange}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <Menu.Trigger asChild>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.moreFormattingOptions)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <MoreHoriz />\n </IconButton>\n </Menu.Trigger>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.moreStyles)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Menu.Content>\n <Menu.Item id=\"strikethrough\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <FormatStrikethrough />\n <Text textStyle=\"sm\">\n {intl.formatMessage(messages.strikethrough)}\n </Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"code\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Code />\n <Text textStyle=\"sm\">{intl.formatMessage(messages.code)}</Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"superscript\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Text>X²</Text>\n <Text textStyle=\"sm\">\n {intl.formatMessage(messages.superscript)}\n </Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"subscript\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Text>X₂</Text>\n <Text textStyle=\"sm\">{intl.formatMessage(messages.subscript)}</Text>\n </Box>\n </Menu.Item>\n </Menu.Content>\n </Menu.Root>\n );\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n/**\n * Constants.\n */\n\nvar IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nvar MODIFIERS = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey'\n};\n\nvar ALIASES = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta'\n};\n\nvar CODES = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n control: 17,\n alt: 18,\n pause: 19,\n capslock: 20,\n escape: 27,\n ' ': 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n arrowleft: 37,\n arrowup: 38,\n arrowright: 39,\n arrowdown: 40,\n insert: 45,\n delete: 46,\n meta: 91,\n numlock: 144,\n scrolllock: 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n '\\'': 222\n};\n\nfor (var f = 1; f < 20; f++) {\n CODES['f' + f] = 111 + f;\n}\n\n/**\n * Is hotkey?\n */\n\nfunction isHotkey(hotkey, options, event) {\n if (options && !('byKey' in options)) {\n event = options;\n options = null;\n }\n\n if (!Array.isArray(hotkey)) {\n hotkey = [hotkey];\n }\n\n var array = hotkey.map(function (string) {\n return parseHotkey(string, options);\n });\n var check = function check(e) {\n return array.some(function (object) {\n return compareHotkey(object, e);\n });\n };\n var ret = event == null ? check : check(event);\n return ret;\n}\n\nfunction isCodeHotkey(hotkey, event) {\n return isHotkey(hotkey, event);\n}\n\nfunction isKeyHotkey(hotkey, event) {\n return isHotkey(hotkey, { byKey: true }, event);\n}\n\n/**\n * Parse.\n */\n\nfunction parseHotkey(hotkey, options) {\n var byKey = options && options.byKey;\n var ret = {};\n\n // Special case to handle the `+` key since we use it as a separator.\n hotkey = hotkey.replace('++', '+add');\n var values = hotkey.split('+');\n var length = values.length;\n\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n\n for (var k in MODIFIERS) {\n ret[MODIFIERS[k]] = false;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var value = _step.value;\n\n var optional = value.endsWith('?') && value.length > 1;\n\n if (optional) {\n value = value.slice(0, -1);\n }\n\n var name = toKeyName(value);\n var modifier = MODIFIERS[name];\n\n if (value.length > 1 && !modifier && !ALIASES[value] && !CODES[name]) {\n throw new TypeError('Unknown modifier: \"' + value + '\"');\n }\n\n if (length === 1 || !modifier) {\n if (byKey) {\n ret.key = name;\n } else {\n ret.which = toKeyCode(value);\n }\n }\n\n if (modifier) {\n ret[modifier] = optional ? null : true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n}\n\n/**\n * Compare.\n */\n\nfunction compareHotkey(object, event) {\n for (var key in object) {\n var expected = object[key];\n var actual = void 0;\n\n if (expected == null) {\n continue;\n }\n\n if (key === 'key' && event.key != null) {\n actual = event.key.toLowerCase();\n } else if (key === 'which') {\n actual = expected === 91 && event.which === 93 ? 91 : event.which;\n } else {\n actual = event[key];\n }\n\n if (actual == null && expected === false) {\n continue;\n }\n\n if (actual !== expected) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Utils.\n */\n\nfunction toKeyCode(name) {\n name = toKeyName(name);\n var code = CODES[name] || name.toUpperCase().charCodeAt(0);\n return code;\n}\n\nfunction toKeyName(name) {\n name = name.toLowerCase();\n name = ALIASES[name] || name;\n return name;\n}\n\n/**\n * Export.\n */\n\nexports.default = isHotkey;\nexports.isHotkey = isHotkey;\nexports.isCodeHotkey = isCodeHotkey;\nexports.isKeyHotkey = isKeyHotkey;\nexports.parseHotkey = parseHotkey;\nexports.compareHotkey = compareHotkey;\nexports.toKeyCode = toKeyCode;\nexports.toKeyName = toKeyName;","/**\n * Hook for handling keyboard shortcuts in the rich text editor\n *\n * Used by:\n * - components/rich-text-editor.tsx: Attaches keyboard event handler to the editor\n *\n * Purpose:\n * - Centralizes all keyboard shortcut logic for the editor\n * - Handles formatting shortcuts (Cmd+B, Cmd+I, etc.)\n * - Manages undo/redo keyboard combinations\n * - Processes soft line breaks (Shift+Enter)\n * - Extracted from rich-text-editor.tsx to improve organization and testability\n *\n * @param editor - The Slate editor instance for applying changes\n * @returns Object containing the keyboard event handler\n */\nimport { useCallback } from \"react\";\nimport { Editor } from \"slate\";\nimport isHotkey from \"is-hotkey\";\nimport { HOTKEYS } from \"../constants\";\nimport { toggleMark } from \"../utils/slate-helpers\";\nimport { Softbreaker } from \"../utils/slate-helpers\";\n\nexport type UseKeyboardShortcutsProps = {\n editor: Editor;\n};\n\nexport const useKeyboardShortcuts = ({ editor }: UseKeyboardShortcutsProps) => {\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n // Handle undo/redo shortcuts\n if ((event.metaKey || event.ctrlKey) && event.key === \"z\") {\n event.preventDefault();\n if (event.shiftKey) {\n editor.redo();\n } else {\n editor.undo();\n }\n return;\n }\n\n // Handle formatting shortcuts\n for (const hotkey in HOTKEYS) {\n if (isHotkey(hotkey, event)) {\n event.preventDefault();\n const mark = HOTKEYS[hotkey as keyof typeof HOTKEYS];\n toggleMark(editor, mark);\n return;\n }\n }\n\n // Handle soft line breaks (Shift+Enter)\n if (event.shiftKey && event.key === \"Enter\") {\n event.preventDefault();\n editor.insertText(Softbreaker.placeholderCharacter);\n return;\n }\n },\n [editor]\n );\n\n return { handleKeyDown };\n};\n","import {\n useMemo,\n useCallback,\n useImperativeHandle,\n useRef,\n type FocusEventHandler,\n type ReactNode,\n} from \"react\";\nimport { useObjectRef } from \"react-aria\";\nimport { mergeRefs } from \"@chakra-ui/react\";\nimport { createEditor, type Descendant } from \"slate\";\nimport { Slate, Editable, withReact } from \"slate-react\";\nimport { withHistory } from \"slate-history\";\nimport {\n RichTextInputEditableSlot,\n RichTextInputToolbarSlot,\n} from \"../rich-text-input.slots\";\nimport {\n Element,\n Leaf,\n withLinks,\n focusEditor,\n resetEditor,\n} from \"../utils/slate-helpers\";\nimport { createEmptyValue } from \"../utils/html-serialization\";\nimport { useKeyboardShortcuts } from \"../hooks/use-keyboard-shortcuts\";\nimport { EDITOR_DEFAULTS } from \"../constants\";\n\nexport type RichTextEditorProps = {\n value?: Descendant[];\n onChange: (value: Descendant[]) => void;\n onFocus?: FocusEventHandler<HTMLDivElement>;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n placeholder?: string;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n autoFocus?: boolean;\n toolbar?: ReactNode;\n /**\n * React ref to be forwarded to the editor\n */\n ref?: React.Ref<RichTextEditorRef>;\n};\n\nexport type RichTextEditorRef = {\n focus: () => void;\n resetValue: (html: string) => void;\n};\n\nexport const RichTextEditor = function RichTextEditor({\n ref: forwardedRef,\n value,\n onChange,\n onFocus,\n onBlur,\n placeholder = EDITOR_DEFAULTS.placeholder,\n isDisabled = EDITOR_DEFAULTS.isDisabled,\n isReadOnly = EDITOR_DEFAULTS.isReadOnly,\n autoFocus = EDITOR_DEFAULTS.autoFocus,\n toolbar,\n //...props\n}: RichTextEditorProps) {\n const localRef = useRef<RichTextEditorRef>(null);\n const ref = useObjectRef(mergeRefs(localRef, forwardedRef));\n\n // Create editor with plugins\n const editor = useMemo(() => {\n const baseEditor = createEditor();\n return withLinks(withHistory(withReact(baseEditor)));\n }, []);\n\n // Handle keyboard shortcuts using hook\n const { handleKeyDown } = useKeyboardShortcuts({ editor });\n\n // Handle focus\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (onFocus) {\n onFocus(event);\n }\n },\n [onFocus]\n );\n\n // Handle blur\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n },\n [onBlur]\n );\n\n // Expose methods through ref\n useImperativeHandle(\n ref,\n () => ({\n focus: () => focusEditor(editor),\n resetValue: (html: string) => resetEditor(editor, html),\n }),\n [editor]\n );\n\n // Render element\n const renderElement = useCallback(\n (props: Parameters<typeof Element>[0]) => <Element {...props} />,\n []\n );\n\n // Render leaf\n const renderLeaf = useCallback(\n (props: Parameters<typeof Leaf>[0]) => <Leaf {...props} />,\n []\n );\n\n // Ensure we always have a valid value\n const defaultValue = createEmptyValue();\n const safeInitialValue =\n Array.isArray(value) && value.length > 0 ? value : defaultValue;\n\n return (\n <Slate editor={editor} value={safeInitialValue} onChange={onChange}>\n {toolbar && (\n <RichTextInputToolbarSlot>{toolbar}</RichTextInputToolbarSlot>\n )}\n <RichTextInputEditableSlot asChild>\n <Editable\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n placeholder={placeholder}\n autoFocus={autoFocus}\n readOnly={isReadOnly || isDisabled}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-label=\"Rich text editor\"\n role=\"textbox\"\n aria-multiline=\"true\"\n />\n </RichTextInputEditableSlot>\n </Slate>\n );\n};\n\nRichTextEditor.displayName = \"RichTextEditor\";\n","/**\n * Hook for managing rich text toolbar state and interactions\n *\n * Used by:\n * - components/rich-text-toolbar.tsx: Manages all toolbar state and event handlers\n *\n * Purpose:\n * - Centralizes complex toolbar state management logic\n * - Handles text style changes, list toggling, format detection\n * - Manages undo/redo button states\n * - Extracted from rich-text-toolbar.tsx to improve organization and testability\n * - Provides clean separation between UI and business logic\n *\n * @param withPreservedSelection - Function for preserving editor selection during operations\n * @returns Object containing all toolbar state and event handlers\n */\nimport { useMemo, useCallback } from \"react\";\nimport { Editor } from \"slate\";\nimport { useSlate } from \"slate-react\";\nimport type { Key } from \"react-aria\";\nimport {\n blockTypes,\n type BlockType,\n type TextStyleDefinition,\n} from \"../constants\";\nimport {\n isMarkActive,\n isBlockActive,\n toggleBlock,\n} from \"../utils/slate-helpers\";\nimport type { CustomElement } from \"../utils/types\";\n\nexport type UseToolbarStateProps = {\n withPreservedSelection: (fn: () => void) => () => void;\n textStyles: TextStyleDefinition[];\n};\n\nexport const useToolbarState = ({\n withPreservedSelection,\n textStyles,\n}: UseToolbarStateProps) => {\n const editor = useSlate();\n\n // Get current block type - using useSlate() means this automatically updates\n const currentTextStyle = useMemo(() => {\n return (\n blockTypes.find((type) =>\n isBlockActive(editor, type as CustomElement[\"type\"])\n ) || \"paragraph\"\n );\n }, [editor.selection, editor.children]);\n\n const selectedTextStyle = textStyles.find((v) => v.id === currentTextStyle);\n const selectedTextStyleLabel = selectedTextStyle?.label || \"\";\n\n // Handle text style changes\n const handleTextStyleChange = useCallback(\n (styleId: string) => {\n withPreservedSelection(() => {\n toggleBlock(editor, styleId as BlockType);\n })();\n },\n [editor, withPreservedSelection]\n );\n\n // Handle list formatting\n const handleListToggle = useCallback(\n (selectedKeys: Set<Key>) => {\n withPreservedSelection(() => {\n const selected = Array.from(selectedKeys)[0] as BlockType | undefined;\n const currentlyActive = isBlockActive(editor, \"bulleted-list\")\n ? \"bulleted-list\"\n : isBlockActive(editor, \"numbered-list\")\n ? \"numbered-list\"\n : null;\n\n if (selected) {\n toggleBlock(editor, selected);\n } else if (currentlyActive) {\n toggleBlock(editor, currentlyActive);\n }\n })();\n },\n [editor, withPreservedSelection]\n );\n\n // Get currently selected formatting keys - simplified deps\n const selectedFormatKeys = useMemo(() => {\n const keys: string[] = [];\n if (isMarkActive(editor, \"bold\")) keys.push(\"bold\");\n if (isMarkActive(editor, \"italic\")) keys.push(\"italic\");\n if (isMarkActive(editor, \"underline\")) keys.push(\"underline\");\n return new Set(keys);\n }, [editor.selection, editor.children, Editor.marks(editor)]);\n\n // Get currently selected list formatting key\n const selectedListKeys = useMemo(() => {\n const keys: string[] = [];\n if (isBlockActive(editor, \"bulleted-list\")) keys.push(\"bulleted-list\");\n if (isBlockActive(editor, \"numbered-list\")) keys.push(\"numbered-list\");\n return new Set(keys);\n }, [editor.selection, editor.children]);\n\n // Check history state for undo/redo buttons\n const hasUndos = useMemo(() => {\n return editor.history && editor.history.undos.length > 0;\n }, [editor.selection, editor.children]);\n\n const hasRedos = useMemo(() => {\n return editor.history && editor.history.redos.length > 0;\n }, [editor.selection, editor.children]);\n\n return {\n currentTextStyle,\n selectedTextStyle,\n selectedTextStyleLabel,\n handleTextStyleChange,\n handleListToggle,\n selectedFormatKeys,\n selectedListKeys,\n hasUndos,\n hasRedos,\n };\n};\n","import { useSlate } from \"slate-react\";\nimport { useIntl } from \"react-intl\";\nimport {\n Toolbar,\n Menu,\n VisuallyHidden,\n Separator,\n ToggleButtonGroup,\n IconButton,\n Text,\n Box,\n Tooltip,\n} from \"@/components\";\nimport { IconToggleButton } from \"@/components/icon-toggle-button/icon-toggle-button\";\nimport { Group } from \"@/components/group/group\";\nimport {\n FormatBold,\n FormatItalic,\n FormatUnderlined,\n FormatListBulleted,\n FormatListNumbered,\n KeyboardArrowDown,\n Undo,\n Redo,\n} from \"@commercetools/nimbus-icons\";\nimport { toggleMark } from \"../utils/slate-helpers\";\nimport { usePreservedSelection } from \"../hooks/use-preserved-selection\";\nimport { useToolbarState } from \"../hooks/use-toolbar-state\";\nimport { getTextStyles } from \"../constants\";\nimport { FormattingMenu } from \"./formatting-menu\";\nimport { messages } from \"../rich-text-input.i18n\";\n\nexport type RichTextToolbarProps = {\n isDisabled?: boolean;\n};\n\nexport const RichTextToolbar = ({\n isDisabled = false,\n}: RichTextToolbarProps) => {\n const intl = useIntl();\n const editor = useSlate();\n const withPreservedSelection = usePreservedSelection(editor);\n\n // Get localized text styles\n const textStyles = getTextStyles(intl);\n\n // Use the toolbar state hook for all state management\n const {\n currentTextStyle,\n selectedTextStyleLabel,\n handleTextStyleChange,\n handleListToggle,\n selectedFormatKeys,\n selectedListKeys,\n hasUndos,\n hasRedos,\n } = useToolbarState({ withPreservedSelection, textStyles });\n\n return (\n <Toolbar\n orientation=\"horizontal\"\n aria-label={intl.formatMessage(messages.textFormatting)}\n width=\"full\"\n overflow=\"hidden\"\n size=\"xs\"\n >\n {/* Text Style Menu */}\n <Group>\n <Menu.Root\n onAction={(styleId) => handleTextStyleChange(String(styleId))}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n {/* Menu trigger styles mimic the Select component */}\n <Menu.Trigger\n height=\"800\"\n width=\"4000\"\n bg=\"primary.1\"\n borderRadius=\"200\"\n _hover={{ bg: \"primary.2\" }}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n aria-label={intl.formatMessage(messages.textStyleMenu)}\n >\n <Box display=\"flex\" alignItems=\"center\" gap=\"200\" px=\"200\">\n <Box display=\"flex\" alignItems=\"center\" gap=\"200\" flexGrow=\"1\">\n <Text my=\"auto\" textStyle=\"sm\" fontWeight=\"500\">\n {selectedTextStyleLabel}\n </Text>\n </Box>\n <KeyboardArrowDown />\n </Box>\n </Menu.Trigger>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.textStyle)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Menu.Content>\n {textStyles.map((style) => (\n <Menu.Item\n key={style.id}\n id={style.id}\n {...(currentTextStyle === style.id && {\n \"data-state\": \"checked\",\n })}\n >\n <Text {...style.props}>{style.label}</Text>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Group>\n\n <Separator orientation=\"vertical\" />\n\n {/* Text Formatting Toggles */}\n <ToggleButtonGroup.Root\n selectionMode=\"multiple\"\n selectedKeys={selectedFormatKeys}\n isDisabled={isDisabled}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"bold\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.bold)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() => toggleMark(editor, \"bold\"))}\n >\n <FormatBold />\n <VisuallyHidden>{intl.formatMessage(messages.bold)}</VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.bold)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"italic\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.italic)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() => toggleMark(editor, \"italic\"))}\n >\n <FormatItalic />\n <VisuallyHidden>\n {intl.formatMessage(messages.italic)}\n </VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.italic)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"underline\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.underline)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() =>\n toggleMark(editor, \"underline\")\n )}\n >\n <FormatUnderlined />\n <VisuallyHidden>\n {intl.formatMessage(messages.underline)}\n </VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.underline)}\n </Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n\n {/* Formatting Menu for additional options */}\n <FormattingMenu isDisabled={isDisabled} />\n\n <Separator orientation=\"vertical\" />\n\n {/* Lists & Indentation */}\n <ToggleButtonGroup.Root\n selectionMode=\"single\"\n selectedKeys={selectedListKeys}\n onSelectionChange={handleListToggle}\n aria-label={intl.formatMessage(messages.listFormatting)}\n isDisabled={isDisabled}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"bulleted-list\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.bulletedList)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <FormatListBulleted />\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.bulletedList)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"numbered-list\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.numberedList)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <FormatListNumbered />\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.numberedList)}\n </Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n\n {/* Spacer to push undo/redo buttons to the right */}\n <Box flexGrow=\"1\" />\n\n <Group>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.undo)}\n isDisabled={!hasUndos || isDisabled}\n onPress={withPreservedSelection(() => editor.undo())}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Undo />\n <VisuallyHidden>{intl.formatMessage(messages.undo)}</VisuallyHidden>\n </IconButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.undo)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.redo)}\n isDisabled={!hasRedos || isDisabled}\n onPress={withPreservedSelection(() => editor.redo())}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Redo />\n <VisuallyHidden>{intl.formatMessage(messages.redo)}</VisuallyHidden>\n </IconButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.redo)}\n </Tooltip.Content>\n </Tooltip.Root>\n </Group>\n </Toolbar>\n );\n};\n\nRichTextToolbar.displayName = \"RichTextToolbar\";\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useSlotRecipe } from \"@chakra-ui/react\";\nimport { extractStyleProps } from \"@/utils\";\nimport { RichTextInputRootSlot } from \"./rich-text-input.slots\";\nimport {\n RichTextEditor,\n RichTextToolbar,\n type RichTextEditorRef,\n} from \"./components\";\nimport type { RichTextInputProps } from \"./rich-text-input.types\";\nimport {\n toHTML,\n fromHTML,\n createEmptyValue,\n validSlateStateAdapter,\n} from \"./utils\";\nimport { richTextInputRecipe } from \"./rich-text-input.recipe\";\n\n/**\n RichTextInput - A rich text input component with formatting capabilities.\n */\nexport const RichTextInput = (props: RichTextInputProps) => {\n const {\n ref: forwardedRef,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder = \"\",\n isDisabled = false,\n isReadOnly = false,\n isInvalid = false,\n autoFocus = false,\n ...restProps\n } = props;\n\n const recipe = useSlotRecipe({ recipe: richTextInputRecipe });\n const [recipeProps, remainingProps] = recipe.splitVariantProps({\n // Only semantic variants go here (none currently defined)\n ...restProps,\n });\n const [styleProps, functionalProps] = extractStyleProps(remainingProps);\n\n // Data attributes for state-based styling\n const dataAttributes = {\n \"data-disabled\": isDisabled ? \"true\" : undefined,\n \"data-invalid\": isInvalid ? \"true\" : undefined,\n \"data-readonly\": isReadOnly ? \"true\" : undefined,\n };\n\n // Internal state management\n const [internalValue, setInternalValue] = useState(() => {\n const initialHtml = value ?? defaultValue ?? \"\";\n try {\n return initialHtml ? fromHTML(initialHtml) : createEmptyValue();\n } catch (error) {\n console.warn(\"Failed to parse initial HTML, using empty value:\", error);\n return createEmptyValue();\n }\n });\n\n const [serializedValue, setSerializedValue] = useState(() => {\n return value ?? defaultValue ?? \"\";\n });\n\n const editorRef = useRef<RichTextEditorRef>(null);\n\n // Handle controlled value changes\n useEffect(() => {\n if (value !== undefined && value !== serializedValue) {\n const newSlateValue = value ? fromHTML(value) : createEmptyValue();\n setInternalValue(newSlateValue);\n setSerializedValue(value);\n }\n }, [value, serializedValue]);\n\n const handleChange = useCallback(\n (slateValue: ReturnType<typeof createEmptyValue>) => {\n const newHtml = toHTML(slateValue);\n const hasSerializedValueChanged = newHtml !== serializedValue;\n\n setInternalValue(slateValue);\n setSerializedValue(newHtml);\n\n // Only call onChange if the serialized HTML actually changed\n if (hasSerializedValueChanged && onChange) {\n onChange(newHtml);\n }\n },\n [serializedValue, onChange]\n );\n\n const currentValue = internalValue;\n\n // Safety check: ensure we always have a valid Slate value\n const safeValue = validSlateStateAdapter(currentValue);\n\n return (\n <RichTextInputRootSlot\n role=\"group\"\n {...recipeProps}\n {...styleProps}\n {...functionalProps}\n {...dataAttributes}\n ref={forwardedRef}\n >\n <RichTextEditor\n ref={editorRef}\n value={safeValue}\n onChange={handleChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n autoFocus={autoFocus}\n toolbar={\n !isReadOnly ? <RichTextToolbar isDisabled={isDisabled} /> : null\n }\n />\n </RichTextInputRootSlot>\n );\n};\n\nRichTextInput.displayName = \"RichTextInput\";\n"],"names":["withProvider","withContext","createSlotRecipeContext","RichTextInputRootSlot","RichTextInputToolbarSlot","RichTextInputEditableSlot","usePreservedSelection","editor","useCallback","action","selection","Transforms","ReactEditor","HOTKEYS","EDITOR_DEFAULTS","BLOCK_TAGS","MARK_TAGS","FORMATTING_OPTIONS","BASIC_FORMATTING","SCRIPT_FORMATTING","messages","defineMessages","getTextStyles","intl","blockTypes","matchHtmlRegExp","escapeHtml_1","escapeHtml","string","str","match","escape","html","index","lastIndex","SOFT_BREAK_PLACEHOLDER","createEmptyValue","toHTML","value","serializeNode","node","Text","textNode","children","element","hrefAttr","sanitizedUrl","sanitizeUrl","otherAttrsString","key","fromHTML","body","nodes","deserializeNode","validSlateStateAdapter","error","tagName","type","slateElement","href","attrs","attr","processChildren","markType","extractTextFromChildren","textContent","processed","child","SlateElement","extractTextContent","url","trimmed","isUrl","text","LIST_TYPES","VALID_MARK_FORMATS","isValidMarkFormat","format","hasMarkFormat","isMarkActive","Range","marks","Editor","firstNode","firstText","textNodes","isBlockActive","toggleMark","toggleBlock","isActive","isList","n","newProperties","block","focusEditor","resetEditor","newValue","withLinks","insertData","insertText","isInline","wrapLink","data","unwrapLink","isCollapsed","link","Element","attributes","customElement","style","jsx","Leaf","leaf","customLeaf","Softbreaker","useFormattingState","withPreservedSelection","useSlate","selectedKeys","useMemo","keys","selectedScriptKeys","allSelectedKeys","handleAllSelectionChange","keyArray","currentKeys","newlySelected","newlyDeselected","currentlyActive","FormattingMenu","isDisabled","useIntl","jsxs","Menu","Tooltip","IconButton","event","MoreHoriz","Box","FormatStrikethrough","Code","lib","IS_MAC","MODIFIERS","ALIASES","CODES","f","isHotkey","hotkey","options","array","parseHotkey","check","e","object","compareHotkey","ret","isCodeHotkey","isKeyHotkey","byKey","values","length","k","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","optional","name","toKeyName","modifier","toKeyCode","err","expected","actual","code","useKeyboardShortcuts","mark","RichTextEditor","forwardedRef","onChange","onFocus","onBlur","placeholder","isReadOnly","autoFocus","toolbar","localRef","useRef","ref","useObjectRef","mergeRefs","baseEditor","createEditor","withHistory","withReact","handleKeyDown","handleFocus","handleBlur","useImperativeHandle","renderElement","props","renderLeaf","defaultValue","safeInitialValue","Slate","Editable","useToolbarState","textStyles","currentTextStyle","selectedTextStyle","v","selectedTextStyleLabel","handleTextStyleChange","styleId","handleListToggle","selected","selectedFormatKeys","selectedListKeys","hasUndos","hasRedos","RichTextToolbar","Toolbar","Group","KeyboardArrowDown","Separator","ToggleButtonGroup","IconToggleButton","FormatBold","VisuallyHidden","FormatItalic","FormatUnderlined","FormatListBulleted","FormatListNumbered","Undo","Redo","RichTextInput","isInvalid","restProps","recipe","useSlotRecipe","richTextInputRecipe","recipeProps","remainingProps","styleProps","functionalProps","extractStyleProps","dataAttributes","internalValue","setInternalValue","useState","initialHtml","serializedValue","setSerializedValue","editorRef","useEffect","newSlateValue","handleChange","slateValue","newHtml","hasSerializedValueChanged","safeValue"],"mappings":"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","x_google_ignoreList":[5,10]}
|
|
1
|
+
{"version":3,"file":"rich-text-input-CpQVkFRl.cjs.js","sources":["../../src/components/rich-text-input/rich-text-input.slots.tsx","../../src/components/rich-text-input/hooks/use-preserved-selection.ts","../../src/components/rich-text-input/constants/editor-constants.ts","../../src/components/rich-text-input/rich-text-input.i18n.ts","../../src/components/rich-text-input/constants/text-styles.ts","../../../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js","../../src/components/rich-text-input/utils/html-serialization.ts","../../src/components/rich-text-input/utils/slate-helpers.tsx","../../src/components/rich-text-input/hooks/use-formatting-state.ts","../../src/components/rich-text-input/components/formatting-menu.tsx","../../../../node_modules/.pnpm/is-hotkey@0.2.0/node_modules/is-hotkey/lib/index.js","../../src/components/rich-text-input/hooks/use-keyboard-shortcuts.ts","../../src/components/rich-text-input/components/rich-text-editor.tsx","../../src/components/rich-text-input/hooks/use-toolbar-state.ts","../../src/components/rich-text-input/components/rich-text-toolbar.tsx","../../src/components/rich-text-input/rich-text-input.tsx"],"sourcesContent":["import { createSlotRecipeContext } from \"@chakra-ui/react\";\nimport type { SlotComponent } from \"@/type-utils\";\nimport type {\n RichTextInputRootSlotProps,\n RichTextInputToolbarSlotProps,\n RichTextInputEditableSlotProps,\n} from \"./rich-text-input.types\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n key: \"richTextInput\",\n});\n\n// Root slot\nexport const RichTextInputRootSlot: SlotComponent<\n HTMLDivElement,\n RichTextInputRootSlotProps\n> = withProvider<HTMLDivElement, RichTextInputRootSlotProps>(\"div\", \"root\");\n\n// Toolbar slot\nexport const RichTextInputToolbarSlot = withContext<\n HTMLDivElement,\n RichTextInputToolbarSlotProps\n>(\"div\", \"toolbar\");\n\n// Editable slot\nexport const RichTextInputEditableSlot = withContext<\n HTMLDivElement,\n RichTextInputEditableSlotProps\n>(\"div\", \"editable\");\n","import { useCallback } from \"react\";\nimport { Editor, Transforms } from \"slate\";\nimport { ReactEditor } from \"slate-react\";\n\n/**\n * Hook that provides a helper function to preserve selection when toolbar actions are executed.\n * This prevents losing text selection when interacting with toolbar buttons and menus.\n *\n * TODO: This works for toggle buttons, but not for menus.\n *\n * @param editor - The Slate editor instance\n * @returns A function that wraps actions to preserve selection and focus\n */\nexport const usePreservedSelection = (editor: Editor) => {\n return useCallback(\n (action: () => void) => {\n return () => {\n // Save the current selection\n const { selection } = editor;\n\n // Execute the action\n action();\n\n // Restore selection if it was lost\n if (selection && !editor.selection) {\n Transforms.select(editor, selection);\n }\n\n // Ensure editor stays focused\n if (!ReactEditor.isFocused(editor)) {\n ReactEditor.focus(editor);\n }\n };\n },\n [editor]\n );\n};\n","/**\n * Constants for the rich text editor component\n *\n * This file consolidates all the configuration constants used by the rich text editor.\n * Previously split across multiple files, now consolidated for better maintainability.\n */\n\n// Keyboard shortcuts for formatting\nexport const HOTKEYS = {\n \"mod+b\": \"bold\",\n \"mod+i\": \"italic\",\n \"mod+u\": \"underline\",\n \"mod+`\": \"code\",\n} as const;\n\n// Default configuration values\nexport const EDITOR_DEFAULTS = {\n placeholder: \"Start typing...\",\n isDisabled: false,\n isReadOnly: false,\n autoFocus: false,\n} as const;\n\n// HTML to Slate element mapping for serialization\nexport const BLOCK_TAGS = {\n blockquote: \"block-quote\",\n p: \"paragraph\",\n pre: \"code\",\n h1: \"heading-one\",\n h2: \"heading-two\",\n h3: \"heading-three\",\n h4: \"heading-four\",\n h5: \"heading-five\",\n ul: \"bulleted-list\",\n ol: \"numbered-list\",\n li: \"list-item\",\n a: \"link\",\n} as const;\n\nexport const MARK_TAGS = {\n strong: \"bold\",\n b: \"bold\",\n em: \"italic\",\n i: \"italic\",\n u: \"underline\",\n code: \"code\",\n sup: \"superscript\",\n sub: \"subscript\",\n del: \"strikethrough\",\n s: \"strikethrough\",\n} as const;\n\n// Formatting options for the \"More Options\" menu\nexport const FORMATTING_OPTIONS = {\n STRIKETHROUGH: \"strikethrough\",\n CODE: \"code\",\n SUPERSCRIPT: \"superscript\",\n SUBSCRIPT: \"subscript\",\n} as const;\n\nexport const BASIC_FORMATTING = [\n FORMATTING_OPTIONS.STRIKETHROUGH,\n FORMATTING_OPTIONS.CODE,\n] as const;\n\nexport const SCRIPT_FORMATTING = [\n FORMATTING_OPTIONS.SUPERSCRIPT,\n FORMATTING_OPTIONS.SUBSCRIPT,\n] as const;\n\n// Mutual exclusion groups - superscript and subscript cannot both be active\nexport const MUTUALLY_EXCLUSIVE_GROUPS = {\n script: [FORMATTING_OPTIONS.SUPERSCRIPT, FORMATTING_OPTIONS.SUBSCRIPT],\n} as const;\n\n// Type definitions\nexport type HotkeyType = typeof HOTKEYS;\nexport type HotkeyKey = keyof HotkeyType;\nexport type HotkeyValue = HotkeyType[HotkeyKey];\nexport type BlockTagKey = keyof typeof BLOCK_TAGS;\nexport type MarkTagKey = keyof typeof MARK_TAGS;\nexport type BlockTagValue = (typeof BLOCK_TAGS)[BlockTagKey];\nexport type MarkTagValue = (typeof MARK_TAGS)[MarkTagKey];\nexport type FormattingType =\n (typeof FORMATTING_OPTIONS)[keyof typeof FORMATTING_OPTIONS];\nexport type BasicFormattingType = (typeof BASIC_FORMATTING)[number];\nexport type ScriptFormattingType = (typeof SCRIPT_FORMATTING)[number];\n","import { defineMessages } from \"react-intl\";\n\nexport const messages = defineMessages({\n // Toolbar\n textFormatting: {\n id: \"Nimbus.RichTextInput.textFormatting\",\n description: \"aria-label for the text formatting toolbar\",\n defaultMessage: \"Text formatting\",\n },\n textStyleMenu: {\n id: \"Nimbus.RichTextInput.textStyleMenu\",\n description: \"aria-label for the text style menu trigger button\",\n defaultMessage: \"Text style menu\",\n },\n textStyle: {\n id: \"Nimbus.RichTextInput.textStyle\",\n description: \"tooltip text for the text style menu\",\n defaultMessage: \"Text style\",\n },\n bold: {\n id: \"Nimbus.RichTextInput.bold\",\n description: \"aria-label and tooltip for the bold formatting button\",\n defaultMessage: \"Bold\",\n },\n italic: {\n id: \"Nimbus.RichTextInput.italic\",\n description: \"aria-label and tooltip for the italic formatting button\",\n defaultMessage: \"Italic\",\n },\n underline: {\n id: \"Nimbus.RichTextInput.underline\",\n description: \"aria-label and tooltip for the underline formatting button\",\n defaultMessage: \"Underline\",\n },\n listFormatting: {\n id: \"Nimbus.RichTextInput.listFormatting\",\n description: \"aria-label for the list formatting toggle group\",\n defaultMessage: \"List formatting\",\n },\n bulletedList: {\n id: \"Nimbus.RichTextInput.bulletedList\",\n description: \"aria-label for the bulleted list button\",\n defaultMessage: \"Bulleted list\",\n },\n numberedList: {\n id: \"Nimbus.RichTextInput.numberedList\",\n description: \"aria-label for the numbered list button\",\n defaultMessage: \"Numbered list\",\n },\n undo: {\n id: \"Nimbus.RichTextInput.undo\",\n description: \"aria-label and tooltip for the undo button\",\n defaultMessage: \"Undo\",\n },\n redo: {\n id: \"Nimbus.RichTextInput.redo\",\n description: \"aria-label and tooltip for the redo button\",\n defaultMessage: \"Redo\",\n },\n\n // Formatting Menu\n moreFormattingOptions: {\n id: \"Nimbus.RichTextInput.moreFormattingOptions\",\n description: \"aria-label for the more formatting options menu button\",\n defaultMessage: \"More formatting options\",\n },\n moreStyles: {\n id: \"Nimbus.RichTextInput.moreStyles\",\n description: \"tooltip text for the more formatting options menu\",\n defaultMessage: \"More styles\",\n },\n strikethrough: {\n id: \"Nimbus.RichTextInput.strikethrough\",\n description: \"label for the strikethrough menu item\",\n defaultMessage: \"Strikethrough\",\n },\n code: {\n id: \"Nimbus.RichTextInput.code\",\n description: \"label for the code formatting menu item\",\n defaultMessage: \"Code\",\n },\n superscript: {\n id: \"Nimbus.RichTextInput.superscript\",\n description: \"label for the superscript formatting menu item\",\n defaultMessage: \"Superscript\",\n },\n subscript: {\n id: \"Nimbus.RichTextInput.subscript\",\n description: \"label for the subscript formatting menu item\",\n defaultMessage: \"Subscript\",\n },\n\n // Text Style Labels\n paragraph: {\n id: \"Nimbus.RichTextInput.paragraph\",\n description: \"label for paragraph text style\",\n defaultMessage: \"Paragraph\",\n },\n headingOne: {\n id: \"Nimbus.RichTextInput.headingOne\",\n description: \"label for heading 1 text style\",\n defaultMessage: \"Heading 1\",\n },\n headingTwo: {\n id: \"Nimbus.RichTextInput.headingTwo\",\n description: \"label for heading 2 text style\",\n defaultMessage: \"Heading 2\",\n },\n headingThree: {\n id: \"Nimbus.RichTextInput.headingThree\",\n description: \"label for heading 3 text style\",\n defaultMessage: \"Heading 3\",\n },\n headingFour: {\n id: \"Nimbus.RichTextInput.headingFour\",\n description: \"label for heading 4 text style\",\n defaultMessage: \"Heading 4\",\n },\n headingFive: {\n id: \"Nimbus.RichTextInput.headingFive\",\n description: \"label for heading 5 text style\",\n defaultMessage: \"Heading 5\",\n },\n quote: {\n id: \"Nimbus.RichTextInput.quote\",\n description: \"label for block quote text style\",\n defaultMessage: \"Quote\",\n },\n});\n","import type { IntlShape } from \"react-intl\";\nimport { messages } from \"../rich-text-input.i18n\";\n\n/**\n * Text style definitions for rich text editor block formatting\n *\n * Used by:\n * - components/rich-text-toolbar.tsx: Renders text style dropdown menu with these options\n * - hooks/useToolbarState.ts: Manages current text style state and selection logic\n * - utils/text-style-utils.ts: Helper functions for text style operations\n * - utils/validation-utils.ts: Validates if block types are supported\n *\n * Purpose:\n * - Centralizes all available text styles and their visual properties\n * - Maps block type IDs to user-friendly labels and Chakra UI styling props\n * - Ensures consistent styling across the editor and UI controls\n */\nexport type TextStyleDefinition = {\n id: string;\n label: string;\n props: {\n textStyle: string;\n fontWeight: string;\n };\n};\n\n/**\n * Returns text style definitions with localized labels\n * @param intl - react-intl IntlShape instance for formatting messages\n */\nexport const getTextStyles = (intl: IntlShape): TextStyleDefinition[] => [\n {\n id: \"paragraph\",\n label: intl.formatMessage(messages.paragraph),\n props: {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-one\",\n label: intl.formatMessage(messages.headingOne),\n props: {\n textStyle: \"2xl\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-two\",\n label: intl.formatMessage(messages.headingTwo),\n props: {\n textStyle: \"xl\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-three\",\n label: intl.formatMessage(messages.headingThree),\n props: {\n textStyle: \"lg\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-four\",\n label: intl.formatMessage(messages.headingFour),\n props: {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"heading-five\",\n label: intl.formatMessage(messages.headingFive),\n props: {\n textStyle: \"xs\",\n fontWeight: \"500\",\n },\n },\n {\n id: \"block-quote\",\n label: intl.formatMessage(messages.quote),\n props: {\n textStyle: \"md\",\n fontWeight: \"400\",\n },\n },\n];\n\n/**\n * Available block types for text style detection\n *\n * Used by:\n * - hooks/useToolbarState.ts: Detects currently active block type in editor\n * - Excludes \"paragraph\" as it's the default/fallback type\n */\nexport const blockTypes = [\n \"heading-one\",\n \"heading-two\",\n \"heading-three\",\n \"heading-four\",\n \"heading-five\",\n \"block-quote\",\n] as const;\n\nexport type BlockType = (typeof blockTypes)[number] | \"paragraph\";\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","import escapeHtml from \"escape-html\";\nimport {\n Text,\n Element as SlateElement,\n type Descendant,\n type Node as SlateNode,\n} from \"slate\";\nimport { BLOCK_TAGS, MARK_TAGS } from \"../constants\";\nimport type { CustomElement, CustomText } from \"./types\";\nimport { validSlateStateAdapter } from \"./slate-helpers\";\n\n// Soft line break placeholder character\nconst SOFT_BREAK_PLACEHOLDER = \"\\u200B\\n\";\n\n// Default empty state for the editor\nexport const createEmptyValue = (): Descendant[] => [\n {\n type: \"paragraph\",\n children: [{ text: \"\" }],\n } as CustomElement,\n];\n\n// Serialize Slate value to HTML\nexport const toHTML = (value: Descendant[]): string => {\n return value.map(serializeNode).join(\"\");\n};\n\nconst serializeNode = (node: SlateNode): string => {\n if (Text.isText(node)) {\n const textNode = node as CustomText;\n let string = escapeHtml(textNode.text);\n\n // Apply text formatting\n if (textNode.bold) {\n string = `<strong>${string}</strong>`;\n }\n if (textNode.code) {\n string = `<code>${string}</code>`;\n }\n if (textNode.italic) {\n string = `<em>${string}</em>`;\n }\n if (textNode.underline) {\n string = `<u>${string}</u>`;\n }\n if (textNode.superscript) {\n string = `<sup>${string}</sup>`;\n }\n if (textNode.subscript) {\n string = `<sub>${string}</sub>`;\n }\n if (textNode.strikethrough) {\n string = `<del>${string}</del>`;\n }\n\n // Replace soft line breaks with <br> tags\n string = string.replace(new RegExp(SOFT_BREAK_PLACEHOLDER, \"g\"), \"<br>\");\n\n return string;\n }\n\n const children = node.children.map(serializeNode).join(\"\");\n const element = node as CustomElement;\n\n switch (element.type) {\n case \"block-quote\":\n return `<blockquote>${children}</blockquote>`;\n case \"paragraph\":\n return `<p>${children}</p>`;\n case \"code\":\n return `<pre><code>${children}</code></pre>`;\n case \"bulleted-list\":\n return `<ul>${children}</ul>`;\n case \"numbered-list\":\n return `<ol>${children}</ol>`;\n case \"list-item\":\n return `<li>${children}</li>`;\n case \"heading-one\":\n return `<h1>${children}</h1>`;\n case \"heading-two\":\n return `<h2>${children}</h2>`;\n case \"heading-three\":\n return `<h3>${children}</h3>`;\n case \"heading-four\":\n return `<h4>${children}</h4>`;\n case \"heading-five\":\n return `<h5>${children}</h5>`;\n case \"link\": {\n let hrefAttr = \"\";\n if (element.url) {\n // Sanitize href to prevent XSS\n const sanitizedUrl = sanitizeUrl(element.url);\n hrefAttr = ` href=\"${escapeHtml(sanitizedUrl)}\"`;\n }\n\n let otherAttrsString = \"\";\n if (\n element.htmlAttributes &&\n typeof element.htmlAttributes === \"object\"\n ) {\n for (const [key, value] of Object.entries(element.htmlAttributes)) {\n // Filter out event handlers to prevent XSS\n if (!key.toLowerCase().startsWith(\"on\")) {\n otherAttrsString += ` ${escapeHtml(key)}=\"${escapeHtml(String(value))}\"`;\n }\n }\n }\n\n return `<a${hrefAttr}${otherAttrsString}>${children}</a>`;\n }\n default:\n return children;\n }\n};\n\n// Parse HTML string to Slate value\nexport const fromHTML = (html: string): Descendant[] => {\n if (!html || html.trim() === \"\") {\n return createEmptyValue();\n }\n\n try {\n // Simple HTML parsing - for now just handle basic cases\n if (\n html.includes(\"<p>\") ||\n html.includes(\"<h\") ||\n html.includes(\"<div>\") ||\n html.includes(\"<blockquote>\") ||\n html.includes(\"<ul>\") ||\n html.includes(\"<ol>\")\n ) {\n const document = new DOMParser().parseFromString(html, \"text/html\");\n const body = document.body;\n\n const nodes = Array.from(body.childNodes)\n .map(deserializeNode)\n .filter(Boolean) as Descendant[];\n\n // Use validSlateStateAdapter to ensure all nodes are valid Slate elements\n return validSlateStateAdapter(nodes);\n } else {\n // Simple text content\n return [\n {\n type: \"paragraph\",\n children: [{ text: html }],\n } as CustomElement,\n ];\n }\n } catch (error) {\n console.warn(\"Failed to parse HTML:\", error);\n return createEmptyValue();\n }\n};\n\nconst deserializeNode = (node: Node): Descendant | string | null => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || \"\";\n // Replace <br> tags with soft line breaks\n return text.replace(/<br\\s*\\/?>/gi, SOFT_BREAK_PLACEHOLDER);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n\n const element = node as Element;\n const tagName = element.tagName.toLowerCase();\n const children = Array.from(element.childNodes)\n .map(deserializeNode)\n .filter(Boolean);\n\n // Handle block elements\n if (tagName in BLOCK_TAGS) {\n const type = BLOCK_TAGS[tagName as keyof typeof BLOCK_TAGS];\n const slateElement: CustomElement = { type, children: [] };\n\n // Special handling for links\n if (type === \"link\") {\n const href = element.getAttribute(\"href\");\n if (href) {\n slateElement.url = href;\n }\n\n // Store other attributes\n const attrs: Record<string, string> = {};\n Array.from(element.attributes).forEach((attr) => {\n if (attr.name !== \"href\" && !attr.name.toLowerCase().startsWith(\"on\")) {\n attrs[attr.name] = attr.value;\n }\n });\n if (Object.keys(attrs).length > 0) {\n slateElement.htmlAttributes = attrs;\n }\n }\n\n // Process children\n slateElement.children = processChildren(children);\n return slateElement;\n }\n\n // Handle inline/mark elements - simplified without jsx\n if (tagName in MARK_TAGS) {\n const markType = MARK_TAGS[tagName as keyof typeof MARK_TAGS];\n const textContent = extractTextFromChildren(children);\n return { text: textContent, [markType]: true } as CustomText;\n }\n\n // Handle spans and other inline elements\n if (tagName === \"span\") {\n const textContent = extractTextFromChildren(children);\n return { text: textContent } as CustomText;\n }\n\n // For unknown elements, just return their text content\n const textContent = extractTextFromChildren(children);\n return { text: textContent } as CustomText;\n};\n\nconst processChildren = (\n children: (Descendant | string | null)[]\n): (CustomText | CustomElement)[] => {\n const processed: (CustomText | CustomElement)[] = [];\n\n for (const child of children) {\n if (typeof child === \"string\") {\n if (child.trim()) {\n processed.push({ text: child });\n }\n } else if (child && Text.isText(child)) {\n processed.push(child as CustomText);\n } else if (child && SlateElement.isElement(child)) {\n // Keep block elements (like li) as elements\n processed.push(child as CustomElement);\n }\n }\n\n // For list containers, ensure we have valid children\n // For other containers, ensure we always have at least one text node\n if (processed.length === 0) {\n processed.push({ text: \"\" });\n }\n\n return processed;\n};\n\nconst extractTextContent = (element: SlateElement): string => {\n return element.children\n .map((child) => {\n if (Text.isText(child)) {\n return child.text;\n } else if (SlateElement.isElement(child)) {\n return extractTextContent(child);\n }\n return \"\";\n })\n .join(\"\");\n};\n\nconst extractTextFromChildren = (\n children: (Descendant | string | null)[]\n): string => {\n return children\n .filter(Boolean)\n .map((child) => {\n if (typeof child === \"string\") {\n return child;\n } else if (child && typeof child === \"object\" && \"text\" in child) {\n return child.text;\n } else if (child && typeof child === \"object\" && \"children\" in child) {\n return extractTextContent(child as SlateElement);\n }\n return String(child || \"\");\n })\n .join(\"\");\n};\n\nconst sanitizeUrl = (url: string): string => {\n const trimmed = String(url).trim().toLowerCase();\n if (\n trimmed.startsWith(\"javascript:\") ||\n trimmed.startsWith(\"data:\") ||\n trimmed.startsWith(\"vbscript:\")\n ) {\n return \"#\";\n }\n return String(url);\n};\n","import { type ReactElement } from \"react\";\nimport {\n Editor,\n Transforms,\n Element as SlateElement,\n Range,\n Text,\n type Editor as SlateEditor,\n} from \"slate\";\nimport {\n ReactEditor,\n type RenderElementProps,\n type RenderLeafProps,\n} from \"slate-react\";\nimport type { CustomElement, CustomText, ElementFormat } from \"./types\";\nimport { fromHTML, createEmptyValue } from \"./html-serialization\";\nimport type { Descendant } from \"slate\";\n\n// Validate and normalize Slate state\nexport const validSlateStateAdapter = (value: unknown): Descendant[] => {\n if (!Array.isArray(value)) {\n return createEmptyValue();\n }\n\n if (value.length === 0) {\n return createEmptyValue();\n }\n\n return value.map((node) => {\n if (!SlateElement.isElement(node)) {\n return {\n type: \"paragraph\",\n children: [{ text: String(node) }],\n } as CustomElement;\n }\n\n if (!node.children || node.children.length === 0) {\n return { ...node, children: [{ text: \"\" }] } as CustomElement;\n }\n\n return node as CustomElement;\n });\n};\n\n// Simple URL validation function\nconst isUrl = (text: string): boolean => {\n try {\n const url = new URL(text);\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\nconst LIST_TYPES = [\"bulleted-list\", \"numbered-list\"];\n\n// Define valid mark formats that can be checked\nconst VALID_MARK_FORMATS = [\n \"bold\",\n \"code\",\n \"italic\",\n \"underline\",\n \"superscript\",\n \"subscript\",\n \"strikethrough\",\n] as const;\n\ntype ValidMarkFormat = (typeof VALID_MARK_FORMATS)[number];\n\n// Type guard to check if a format is a valid mark format\nconst isValidMarkFormat = (format: string): format is ValidMarkFormat => {\n return VALID_MARK_FORMATS.includes(format as ValidMarkFormat);\n};\n\n// Type-safe function to check if a mark is active on a text node\nconst hasMarkFormat = (textNode: CustomText, format: string): boolean => {\n if (!isValidMarkFormat(format)) {\n return false;\n }\n return textNode[format] === true;\n};\n\n// Check if a mark is currently active\nexport const isMarkActive = (editor: SlateEditor, format: string): boolean => {\n const { selection } = editor;\n\n // For collapsed selection (cursor position), use the standard approach\n if (!selection || Range.isCollapsed(selection)) {\n const marks = Editor.marks(editor);\n if (marks && isValidMarkFormat(format)) {\n return (marks as CustomText)[format] === true;\n }\n\n // If no selection/marks (e.g., programmatically set content), check first text node\n if (!selection && editor.children.length > 0) {\n const firstNode = editor.children[0] as CustomElement;\n if (firstNode.children && firstNode.children.length > 0) {\n const firstText = firstNode.children[0];\n if (Text.isText(firstText) && isValidMarkFormat(format)) {\n return (firstText as CustomText)[format] === true;\n }\n }\n }\n\n return false;\n }\n\n // For text selection, check if any selected text has the mark\n // This provides better mixed formatting detection\n try {\n const textNodes = Array.from(\n Editor.nodes(editor, {\n at: selection,\n match: (n) => Text.isText(n),\n })\n );\n\n if (textNodes.length === 0) {\n const marks = Editor.marks(editor);\n if (!marks || !isValidMarkFormat(format)) {\n return false;\n }\n return (marks as CustomText)[format] === true;\n }\n\n // Show as active only if all selected text has this mark\n // Prioritizes unformatted text - if any text is unformatted, button shows inactive\n return textNodes.every(([node]) => {\n const textNode = node as CustomText;\n return hasMarkFormat(textNode, format);\n });\n } catch {\n // Fallback to original approach if node traversal fails\n const marks = Editor.marks(editor);\n if (!marks || !isValidMarkFormat(format)) {\n return false;\n }\n return (marks as CustomText)[format] === true;\n }\n};\n\n// Check if a block type is currently active\nexport const isBlockActive = (\n editor: SlateEditor,\n format: ElementFormat\n): boolean => {\n const { selection } = editor;\n\n // If there's a selection, use it to determine active block\n if (selection) {\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n (n as CustomElement).type === format,\n })\n );\n return !!match;\n }\n\n // If no selection, check the first block in the editor\n // This handles cases where content is set programmatically without focus\n if (editor.children.length > 0) {\n const firstNode = editor.children[0] as CustomElement;\n return firstNode.type === format;\n }\n\n return false;\n};\n\n// Toggle a text mark (bold, italic, etc.)\nexport const toggleMark = (editor: SlateEditor, format: string): void => {\n const isActive = isMarkActive(editor, format);\n\n if (isActive) {\n Editor.removeMark(editor, format);\n } else {\n Editor.addMark(editor, format, true);\n }\n};\n\n// Toggle a block type (heading, list, etc.)\nexport const toggleBlock = (\n editor: SlateEditor,\n format: ElementFormat\n): void => {\n const isActive = isBlockActive(editor, format);\n const isList = LIST_TYPES.includes(format);\n\n Transforms.unwrapNodes(editor, {\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n LIST_TYPES.includes((n as CustomElement).type),\n split: true,\n });\n\n let newProperties: Partial<CustomElement>;\n if (isActive) {\n newProperties = { type: \"paragraph\" };\n } else if (isList) {\n newProperties = { type: \"list-item\" };\n } else {\n newProperties = { type: format };\n }\n\n Transforms.setNodes<CustomElement>(editor, newProperties);\n\n if (!isActive && isList) {\n const block: CustomElement = { type: format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n};\n\n// Focus the editor\nexport const focusEditor = (editor: SlateEditor): void => {\n ReactEditor.focus(editor);\n};\n\n// Reset the editor to a specific value\nexport const resetEditor = (editor: SlateEditor, value: string): void => {\n const newValue = fromHTML(value);\n\n // Clear current content\n Transforms.delete(editor, {\n at: {\n anchor: Editor.start(editor, []),\n focus: Editor.end(editor, []),\n },\n });\n\n // Insert new content\n Transforms.insertNodes(editor, newValue);\n\n // Focus at the start\n Transforms.select(editor, Editor.start(editor, []));\n};\n\n// Link plugin\nexport const withLinks = (editor: SlateEditor): SlateEditor => {\n const { insertData, insertText, isInline } = editor;\n\n editor.isInline = (element: CustomElement) => {\n return element.type === \"link\" ? true : isInline(element);\n };\n\n editor.insertText = (text: string) => {\n if (text && isUrl(text)) {\n wrapLink(editor, text);\n } else {\n insertText(text);\n }\n };\n\n editor.insertData = (data: DataTransfer) => {\n const text = data.getData(\"text/plain\");\n\n if (text && isUrl(text)) {\n wrapLink(editor, text);\n } else {\n insertData(data);\n }\n };\n\n return editor;\n};\n\nconst unwrapLink = (editor: SlateEditor): void => {\n Transforms.unwrapNodes(editor, {\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n (n as CustomElement).type === \"link\",\n });\n};\n\nconst wrapLink = (editor: SlateEditor, url: string): void => {\n if (isBlockActive(editor, \"link\")) {\n unwrapLink(editor);\n }\n\n const { selection } = editor;\n const isCollapsed = selection && Range.isCollapsed(selection);\n const link: CustomElement = {\n type: \"link\",\n url,\n children: isCollapsed ? [{ text: url }] : [],\n };\n\n if (isCollapsed) {\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, link, { split: true });\n Transforms.collapse(editor, { edge: \"end\" });\n }\n};\n\n// Render element component\nexport const Element = ({\n attributes,\n children,\n element,\n}: RenderElementProps): ReactElement => {\n const customElement = element as CustomElement;\n const style = { textAlign: customElement.align } as React.CSSProperties;\n\n switch (customElement.type) {\n case \"block-quote\":\n return (\n <blockquote style={style} {...attributes}>\n {children}\n </blockquote>\n );\n case \"bulleted-list\":\n return (\n <ul style={style} {...attributes}>\n {children}\n </ul>\n );\n case \"heading-one\":\n return (\n <h1 style={style} {...attributes}>\n {children}\n </h1>\n );\n case \"heading-two\":\n return (\n <h2 style={style} {...attributes}>\n {children}\n </h2>\n );\n case \"heading-three\":\n return (\n <h3 style={style} {...attributes}>\n {children}\n </h3>\n );\n case \"heading-four\":\n return (\n <h4 style={style} {...attributes}>\n {children}\n </h4>\n );\n case \"heading-five\":\n return (\n <h5 style={style} {...attributes}>\n {children}\n </h5>\n );\n case \"list-item\":\n return (\n <li style={style} {...attributes}>\n {children}\n </li>\n );\n case \"numbered-list\":\n return (\n <ol style={style} {...attributes}>\n {children}\n </ol>\n );\n case \"link\":\n return (\n <a\n {...attributes}\n href={customElement.url}\n rel=\"noopener noreferrer\"\n style={style}\n >\n {children}\n </a>\n );\n default:\n return (\n <p style={style} {...attributes}>\n {children}\n </p>\n );\n }\n};\n\n// Render leaf component\nexport const Leaf = ({\n attributes,\n children,\n leaf,\n}: RenderLeafProps): ReactElement => {\n const customLeaf = leaf as CustomText;\n if (customLeaf.bold) {\n children = <strong>{children}</strong>;\n }\n\n if (customLeaf.code) {\n children = <code>{children}</code>;\n }\n\n if (customLeaf.italic) {\n children = <em>{children}</em>;\n }\n\n if (customLeaf.underline) {\n children = <u>{children}</u>;\n }\n\n if (customLeaf.strikethrough) {\n children = <del>{children}</del>;\n }\n\n if (customLeaf.superscript) {\n children = <sup>{children}</sup>;\n }\n\n if (customLeaf.subscript) {\n children = <sub>{children}</sub>;\n }\n\n return <span {...attributes}>{children}</span>;\n};\n\n// Soft line break handling\nexport const Softbreaker = {\n placeholderCharacter: \"\\u200B\\n\",\n serialize: (string: string): string =>\n string.replace(new RegExp(Softbreaker.placeholderCharacter, \"g\"), \"<br>\"),\n deserialize: (string: string): string =>\n string.replace(/<br\\s*\\/?>/gi, Softbreaker.placeholderCharacter),\n};\n","/**\n * Hook for managing formatting menu state with mutual exclusion logic\n *\n * Used by:\n * - components/formatting-menu.tsx: Manages complex formatting state and interactions\n *\n * Purpose:\n * - Handles mutual exclusion between superscript and subscript formatting\n * - Manages state for all formatting options in the \"More Options\" menu\n * - Processes complex selection changes with custom logic\n * - Extracted from formatting-menu.tsx to improve organization and testability\n * - Separates complex business logic from UI rendering\n *\n * @param withPreservedSelection - Function for preserving editor selection during operations\n * @returns Object containing formatting state and selection change handler\n */\nimport { useMemo, useCallback } from \"react\";\nimport { Editor } from \"slate\";\nimport { useSlate } from \"slate-react\";\nimport type { Key } from \"react-aria\";\nimport { BASIC_FORMATTING, SCRIPT_FORMATTING } from \"../constants\";\nimport { isMarkActive, toggleMark } from \"../utils/slate-helpers\";\n\nexport type UseFormattingStateProps = {\n withPreservedSelection: (fn: () => void) => () => void;\n};\n\nexport const useFormattingState = ({\n withPreservedSelection,\n}: UseFormattingStateProps) => {\n const editor = useSlate();\n\n // Get currently selected formatting keys (strikethrough and code)\n const selectedKeys = useMemo(() => {\n const keys: string[] = [];\n BASIC_FORMATTING.forEach((format) => {\n if (isMarkActive(editor, format)) keys.push(format);\n });\n return new Set(keys);\n }, [editor.selection, editor.children, Editor.marks(editor)]);\n\n // Get currently selected script formatting key (superscript or subscript - mutually exclusive)\n const selectedScriptKeys = useMemo(() => {\n const keys: string[] = [];\n SCRIPT_FORMATTING.forEach((format) => {\n if (isMarkActive(editor, format)) keys.push(format);\n });\n return new Set(keys);\n }, [editor.selection, editor.children, Editor.marks(editor)]);\n\n // Combine all selected keys for display purposes\n const allSelectedKeys = useMemo(() => {\n return new Set([\n ...Array.from(selectedKeys),\n ...Array.from(selectedScriptKeys),\n ]);\n }, [selectedKeys, selectedScriptKeys]);\n\n // Handle all selection changes with custom logic for mutual exclusion\n const handleAllSelectionChange = useCallback(\n (keys: \"all\" | Set<Key>) => {\n if (keys === \"all\") return;\n\n const keyArray = Array.from(keys) as string[];\n const currentKeys = Array.from(allSelectedKeys);\n\n // Find newly selected keys (toggle on)\n const newlySelected = keyArray.filter(\n (key) => !currentKeys.includes(key)\n );\n // Find newly deselected keys (toggle off)\n const newlyDeselected = currentKeys.filter(\n (key) => !keyArray.includes(key)\n );\n\n // Handle changes for each key\n [...newlySelected, ...newlyDeselected].forEach((key) => {\n if (key === \"superscript\" || key === \"subscript\") {\n // Handle script formatting with mutual exclusion\n withPreservedSelection(() => {\n const currentlyActive = isMarkActive(editor, \"superscript\")\n ? \"superscript\"\n : isMarkActive(editor, \"subscript\")\n ? \"subscript\"\n : null;\n\n if (newlySelected.includes(key)) {\n // If selecting a script format, deactivate the other one first\n if (currentlyActive && currentlyActive !== key) {\n toggleMark(editor, currentlyActive);\n }\n toggleMark(editor, key);\n } else {\n // Deselecting\n toggleMark(editor, key);\n }\n })();\n } else {\n // Handle regular formatting (strikethrough, code)\n withPreservedSelection(() => toggleMark(editor, key))();\n }\n });\n },\n [editor, allSelectedKeys, withPreservedSelection]\n );\n\n return {\n selectedKeys,\n selectedScriptKeys,\n allSelectedKeys,\n handleAllSelectionChange,\n };\n};\n","import { useSlate } from \"slate-react\";\nimport { useIntl } from \"react-intl\";\nimport { Menu, IconButton, Text, Box, Tooltip } from \"@/components\";\nimport {\n MoreHoriz,\n FormatStrikethrough,\n Code,\n} from \"@commercetools/nimbus-icons\";\nimport { usePreservedSelection } from \"../hooks/use-preserved-selection\";\nimport { useFormattingState } from \"../hooks/use-formatting-state\";\nimport { messages } from \"../rich-text-input.i18n\";\n\nexport type FormattingMenuProps = {\n isDisabled?: boolean;\n};\n\nexport const FormattingMenu = ({ isDisabled = false }: FormattingMenuProps) => {\n const intl = useIntl();\n const editor = useSlate();\n const withPreservedSelection = usePreservedSelection(editor);\n\n // Use the formatting state hook for all state management\n const { allSelectedKeys, handleAllSelectionChange } = useFormattingState({\n withPreservedSelection,\n });\n\n return (\n <Menu.Root\n selectionMode=\"multiple\"\n selectedKeys={allSelectedKeys}\n onSelectionChange={handleAllSelectionChange}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <Menu.Trigger asChild>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.moreFormattingOptions)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <MoreHoriz />\n </IconButton>\n </Menu.Trigger>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.moreStyles)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Menu.Content>\n <Menu.Item id=\"strikethrough\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <FormatStrikethrough />\n <Text textStyle=\"sm\">\n {intl.formatMessage(messages.strikethrough)}\n </Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"code\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Code />\n <Text textStyle=\"sm\">{intl.formatMessage(messages.code)}</Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"superscript\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Text>X²</Text>\n <Text textStyle=\"sm\">\n {intl.formatMessage(messages.superscript)}\n </Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"subscript\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Text>X₂</Text>\n <Text textStyle=\"sm\">{intl.formatMessage(messages.subscript)}</Text>\n </Box>\n </Menu.Item>\n </Menu.Content>\n </Menu.Root>\n );\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n/**\n * Constants.\n */\n\nvar IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nvar MODIFIERS = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey'\n};\n\nvar ALIASES = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta'\n};\n\nvar CODES = {\n backspace: 8,\n tab: 9,\n enter: 13,\n shift: 16,\n control: 17,\n alt: 18,\n pause: 19,\n capslock: 20,\n escape: 27,\n ' ': 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n arrowleft: 37,\n arrowup: 38,\n arrowright: 39,\n arrowdown: 40,\n insert: 45,\n delete: 46,\n meta: 91,\n numlock: 144,\n scrolllock: 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n '\\'': 222\n};\n\nfor (var f = 1; f < 20; f++) {\n CODES['f' + f] = 111 + f;\n}\n\n/**\n * Is hotkey?\n */\n\nfunction isHotkey(hotkey, options, event) {\n if (options && !('byKey' in options)) {\n event = options;\n options = null;\n }\n\n if (!Array.isArray(hotkey)) {\n hotkey = [hotkey];\n }\n\n var array = hotkey.map(function (string) {\n return parseHotkey(string, options);\n });\n var check = function check(e) {\n return array.some(function (object) {\n return compareHotkey(object, e);\n });\n };\n var ret = event == null ? check : check(event);\n return ret;\n}\n\nfunction isCodeHotkey(hotkey, event) {\n return isHotkey(hotkey, event);\n}\n\nfunction isKeyHotkey(hotkey, event) {\n return isHotkey(hotkey, { byKey: true }, event);\n}\n\n/**\n * Parse.\n */\n\nfunction parseHotkey(hotkey, options) {\n var byKey = options && options.byKey;\n var ret = {};\n\n // Special case to handle the `+` key since we use it as a separator.\n hotkey = hotkey.replace('++', '+add');\n var values = hotkey.split('+');\n var length = values.length;\n\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n\n for (var k in MODIFIERS) {\n ret[MODIFIERS[k]] = false;\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var value = _step.value;\n\n var optional = value.endsWith('?') && value.length > 1;\n\n if (optional) {\n value = value.slice(0, -1);\n }\n\n var name = toKeyName(value);\n var modifier = MODIFIERS[name];\n\n if (value.length > 1 && !modifier && !ALIASES[value] && !CODES[name]) {\n throw new TypeError('Unknown modifier: \"' + value + '\"');\n }\n\n if (length === 1 || !modifier) {\n if (byKey) {\n ret.key = name;\n } else {\n ret.which = toKeyCode(value);\n }\n }\n\n if (modifier) {\n ret[modifier] = optional ? null : true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return ret;\n}\n\n/**\n * Compare.\n */\n\nfunction compareHotkey(object, event) {\n for (var key in object) {\n var expected = object[key];\n var actual = void 0;\n\n if (expected == null) {\n continue;\n }\n\n if (key === 'key' && event.key != null) {\n actual = event.key.toLowerCase();\n } else if (key === 'which') {\n actual = expected === 91 && event.which === 93 ? 91 : event.which;\n } else {\n actual = event[key];\n }\n\n if (actual == null && expected === false) {\n continue;\n }\n\n if (actual !== expected) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Utils.\n */\n\nfunction toKeyCode(name) {\n name = toKeyName(name);\n var code = CODES[name] || name.toUpperCase().charCodeAt(0);\n return code;\n}\n\nfunction toKeyName(name) {\n name = name.toLowerCase();\n name = ALIASES[name] || name;\n return name;\n}\n\n/**\n * Export.\n */\n\nexports.default = isHotkey;\nexports.isHotkey = isHotkey;\nexports.isCodeHotkey = isCodeHotkey;\nexports.isKeyHotkey = isKeyHotkey;\nexports.parseHotkey = parseHotkey;\nexports.compareHotkey = compareHotkey;\nexports.toKeyCode = toKeyCode;\nexports.toKeyName = toKeyName;","/**\n * Hook for handling keyboard shortcuts in the rich text editor\n *\n * Used by:\n * - components/rich-text-editor.tsx: Attaches keyboard event handler to the editor\n *\n * Purpose:\n * - Centralizes all keyboard shortcut logic for the editor\n * - Handles formatting shortcuts (Cmd+B, Cmd+I, etc.)\n * - Manages undo/redo keyboard combinations\n * - Processes soft line breaks (Shift+Enter)\n * - Extracted from rich-text-editor.tsx to improve organization and testability\n *\n * @param editor - The Slate editor instance for applying changes\n * @returns Object containing the keyboard event handler\n */\nimport { useCallback } from \"react\";\nimport { Editor } from \"slate\";\nimport isHotkey from \"is-hotkey\";\nimport { HOTKEYS } from \"../constants\";\nimport { toggleMark } from \"../utils/slate-helpers\";\nimport { Softbreaker } from \"../utils/slate-helpers\";\n\nexport type UseKeyboardShortcutsProps = {\n editor: Editor;\n};\n\nexport const useKeyboardShortcuts = ({ editor }: UseKeyboardShortcutsProps) => {\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n // Handle undo/redo shortcuts\n if ((event.metaKey || event.ctrlKey) && event.key === \"z\") {\n event.preventDefault();\n if (event.shiftKey) {\n editor.redo();\n } else {\n editor.undo();\n }\n return;\n }\n\n // Handle formatting shortcuts\n for (const hotkey in HOTKEYS) {\n if (isHotkey(hotkey, event)) {\n event.preventDefault();\n const mark = HOTKEYS[hotkey as keyof typeof HOTKEYS];\n toggleMark(editor, mark);\n return;\n }\n }\n\n // Handle soft line breaks (Shift+Enter)\n if (event.shiftKey && event.key === \"Enter\") {\n event.preventDefault();\n editor.insertText(Softbreaker.placeholderCharacter);\n return;\n }\n },\n [editor]\n );\n\n return { handleKeyDown };\n};\n","import {\n useMemo,\n useCallback,\n useImperativeHandle,\n useRef,\n type FocusEventHandler,\n type ReactNode,\n} from \"react\";\nimport { useObjectRef } from \"react-aria\";\nimport { mergeRefs } from \"@chakra-ui/react\";\nimport { createEditor, type Descendant } from \"slate\";\nimport { Slate, Editable, withReact } from \"slate-react\";\nimport { withHistory } from \"slate-history\";\nimport {\n RichTextInputEditableSlot,\n RichTextInputToolbarSlot,\n} from \"../rich-text-input.slots\";\nimport {\n Element,\n Leaf,\n withLinks,\n focusEditor,\n resetEditor,\n} from \"../utils/slate-helpers\";\nimport { createEmptyValue } from \"../utils/html-serialization\";\nimport { useKeyboardShortcuts } from \"../hooks/use-keyboard-shortcuts\";\nimport { EDITOR_DEFAULTS } from \"../constants\";\n\nexport type RichTextEditorProps = {\n value?: Descendant[];\n onChange: (value: Descendant[]) => void;\n onFocus?: FocusEventHandler<HTMLDivElement>;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n placeholder?: string;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n autoFocus?: boolean;\n toolbar?: ReactNode;\n /**\n * React ref to be forwarded to the editor\n */\n ref?: React.Ref<RichTextEditorRef>;\n};\n\nexport type RichTextEditorRef = {\n focus: () => void;\n resetValue: (html: string) => void;\n};\n\nexport const RichTextEditor = function RichTextEditor({\n ref: forwardedRef,\n value,\n onChange,\n onFocus,\n onBlur,\n placeholder = EDITOR_DEFAULTS.placeholder,\n isDisabled = EDITOR_DEFAULTS.isDisabled,\n isReadOnly = EDITOR_DEFAULTS.isReadOnly,\n autoFocus = EDITOR_DEFAULTS.autoFocus,\n toolbar,\n //...props\n}: RichTextEditorProps) {\n const localRef = useRef<RichTextEditorRef>(null);\n const ref = useObjectRef(mergeRefs(localRef, forwardedRef));\n\n // Create editor with plugins\n const editor = useMemo(() => {\n const baseEditor = createEditor();\n return withLinks(withHistory(withReact(baseEditor)));\n }, []);\n\n // Handle keyboard shortcuts using hook\n const { handleKeyDown } = useKeyboardShortcuts({ editor });\n\n // Handle focus\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (onFocus) {\n onFocus(event);\n }\n },\n [onFocus]\n );\n\n // Handle blur\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n },\n [onBlur]\n );\n\n // Expose methods through ref\n useImperativeHandle(\n ref,\n () => ({\n focus: () => focusEditor(editor),\n resetValue: (html: string) => resetEditor(editor, html),\n }),\n [editor]\n );\n\n // Render element\n const renderElement = useCallback(\n (props: Parameters<typeof Element>[0]) => <Element {...props} />,\n []\n );\n\n // Render leaf\n const renderLeaf = useCallback(\n (props: Parameters<typeof Leaf>[0]) => <Leaf {...props} />,\n []\n );\n\n // Ensure we always have a valid value\n const defaultValue = createEmptyValue();\n const safeInitialValue =\n Array.isArray(value) && value.length > 0 ? value : defaultValue;\n\n return (\n <Slate editor={editor} value={safeInitialValue} onChange={onChange}>\n {toolbar && (\n <RichTextInputToolbarSlot>{toolbar}</RichTextInputToolbarSlot>\n )}\n <RichTextInputEditableSlot asChild>\n <Editable\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n placeholder={placeholder}\n autoFocus={autoFocus}\n readOnly={isReadOnly || isDisabled}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-label=\"Rich text editor\"\n role=\"textbox\"\n aria-multiline=\"true\"\n />\n </RichTextInputEditableSlot>\n </Slate>\n );\n};\n\nRichTextEditor.displayName = \"RichTextEditor\";\n","/**\n * Hook for managing rich text toolbar state and interactions\n *\n * Used by:\n * - components/rich-text-toolbar.tsx: Manages all toolbar state and event handlers\n *\n * Purpose:\n * - Centralizes complex toolbar state management logic\n * - Handles text style changes, list toggling, format detection\n * - Manages undo/redo button states\n * - Extracted from rich-text-toolbar.tsx to improve organization and testability\n * - Provides clean separation between UI and business logic\n *\n * @param withPreservedSelection - Function for preserving editor selection during operations\n * @returns Object containing all toolbar state and event handlers\n */\nimport { useMemo, useCallback } from \"react\";\nimport { Editor } from \"slate\";\nimport { useSlate } from \"slate-react\";\nimport type { Key } from \"react-aria\";\nimport {\n blockTypes,\n type BlockType,\n type TextStyleDefinition,\n} from \"../constants\";\nimport {\n isMarkActive,\n isBlockActive,\n toggleBlock,\n} from \"../utils/slate-helpers\";\nimport type { CustomElement } from \"../utils/types\";\n\nexport type UseToolbarStateProps = {\n withPreservedSelection: (fn: () => void) => () => void;\n textStyles: TextStyleDefinition[];\n};\n\nexport const useToolbarState = ({\n withPreservedSelection,\n textStyles,\n}: UseToolbarStateProps) => {\n const editor = useSlate();\n\n // Get current block type - using useSlate() means this automatically updates\n const currentTextStyle = useMemo(() => {\n return (\n blockTypes.find((type) =>\n isBlockActive(editor, type as CustomElement[\"type\"])\n ) || \"paragraph\"\n );\n }, [editor.selection, editor.children]);\n\n const selectedTextStyle = textStyles.find((v) => v.id === currentTextStyle);\n const selectedTextStyleLabel = selectedTextStyle?.label || \"\";\n\n // Handle text style changes\n const handleTextStyleChange = useCallback(\n (styleId: string) => {\n withPreservedSelection(() => {\n toggleBlock(editor, styleId as BlockType);\n })();\n },\n [editor, withPreservedSelection]\n );\n\n // Handle list formatting\n const handleListToggle = useCallback(\n (selectedKeys: Set<Key>) => {\n withPreservedSelection(() => {\n const selected = Array.from(selectedKeys)[0] as BlockType | undefined;\n const currentlyActive = isBlockActive(editor, \"bulleted-list\")\n ? \"bulleted-list\"\n : isBlockActive(editor, \"numbered-list\")\n ? \"numbered-list\"\n : null;\n\n if (selected) {\n toggleBlock(editor, selected);\n } else if (currentlyActive) {\n toggleBlock(editor, currentlyActive);\n }\n })();\n },\n [editor, withPreservedSelection]\n );\n\n // Get currently selected formatting keys - simplified deps\n const selectedFormatKeys = useMemo(() => {\n const keys: string[] = [];\n if (isMarkActive(editor, \"bold\")) keys.push(\"bold\");\n if (isMarkActive(editor, \"italic\")) keys.push(\"italic\");\n if (isMarkActive(editor, \"underline\")) keys.push(\"underline\");\n return new Set(keys);\n }, [editor.selection, editor.children, Editor.marks(editor)]);\n\n // Get currently selected list formatting key\n const selectedListKeys = useMemo(() => {\n const keys: string[] = [];\n if (isBlockActive(editor, \"bulleted-list\")) keys.push(\"bulleted-list\");\n if (isBlockActive(editor, \"numbered-list\")) keys.push(\"numbered-list\");\n return new Set(keys);\n }, [editor.selection, editor.children]);\n\n // Check history state for undo/redo buttons\n const hasUndos = useMemo(() => {\n return editor.history && editor.history.undos.length > 0;\n }, [editor.selection, editor.children]);\n\n const hasRedos = useMemo(() => {\n return editor.history && editor.history.redos.length > 0;\n }, [editor.selection, editor.children]);\n\n return {\n currentTextStyle,\n selectedTextStyle,\n selectedTextStyleLabel,\n handleTextStyleChange,\n handleListToggle,\n selectedFormatKeys,\n selectedListKeys,\n hasUndos,\n hasRedos,\n };\n};\n","import { useSlate } from \"slate-react\";\nimport { useIntl } from \"react-intl\";\nimport {\n Toolbar,\n Menu,\n VisuallyHidden,\n Separator,\n ToggleButtonGroup,\n IconButton,\n Text,\n Box,\n Tooltip,\n} from \"@/components\";\nimport { IconToggleButton } from \"@/components/icon-toggle-button/icon-toggle-button\";\nimport { Group } from \"@/components/group/group\";\nimport {\n FormatBold,\n FormatItalic,\n FormatUnderlined,\n FormatListBulleted,\n FormatListNumbered,\n KeyboardArrowDown,\n Undo,\n Redo,\n} from \"@commercetools/nimbus-icons\";\nimport { toggleMark } from \"../utils/slate-helpers\";\nimport { usePreservedSelection } from \"../hooks/use-preserved-selection\";\nimport { useToolbarState } from \"../hooks/use-toolbar-state\";\nimport { getTextStyles } from \"../constants\";\nimport { FormattingMenu } from \"./formatting-menu\";\nimport { messages } from \"../rich-text-input.i18n\";\n\nexport type RichTextToolbarProps = {\n isDisabled?: boolean;\n};\n\nexport const RichTextToolbar = ({\n isDisabled = false,\n}: RichTextToolbarProps) => {\n const intl = useIntl();\n const editor = useSlate();\n const withPreservedSelection = usePreservedSelection(editor);\n\n // Get localized text styles\n const textStyles = getTextStyles(intl);\n\n // Use the toolbar state hook for all state management\n const {\n currentTextStyle,\n selectedTextStyleLabel,\n handleTextStyleChange,\n handleListToggle,\n selectedFormatKeys,\n selectedListKeys,\n hasUndos,\n hasRedos,\n } = useToolbarState({ withPreservedSelection, textStyles });\n\n return (\n <Toolbar\n orientation=\"horizontal\"\n aria-label={intl.formatMessage(messages.textFormatting)}\n width=\"full\"\n overflow=\"hidden\"\n size=\"xs\"\n >\n {/* Text Style Menu */}\n <Group>\n <Menu.Root\n onAction={(styleId) => handleTextStyleChange(String(styleId))}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n {/* Menu trigger styles mimic the Select component */}\n <Menu.Trigger\n height=\"800\"\n width=\"4000\"\n bg=\"primary.1\"\n borderRadius=\"200\"\n _hover={{ bg: \"primary.2\" }}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n aria-label={intl.formatMessage(messages.textStyleMenu)}\n >\n <Box display=\"flex\" alignItems=\"center\" gap=\"200\" px=\"200\">\n <Box display=\"flex\" alignItems=\"center\" gap=\"200\" flexGrow=\"1\">\n <Text my=\"auto\" textStyle=\"sm\" fontWeight=\"500\">\n {selectedTextStyleLabel}\n </Text>\n </Box>\n <KeyboardArrowDown />\n </Box>\n </Menu.Trigger>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.textStyle)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Menu.Content>\n {textStyles.map((style) => (\n <Menu.Item\n key={style.id}\n id={style.id}\n {...(currentTextStyle === style.id && {\n \"data-state\": \"checked\",\n })}\n >\n <Text {...style.props}>{style.label}</Text>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Group>\n\n <Separator orientation=\"vertical\" />\n\n {/* Text Formatting Toggles */}\n <ToggleButtonGroup.Root\n selectionMode=\"multiple\"\n selectedKeys={selectedFormatKeys}\n isDisabled={isDisabled}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"bold\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.bold)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() => toggleMark(editor, \"bold\"))}\n >\n <FormatBold />\n <VisuallyHidden>{intl.formatMessage(messages.bold)}</VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.bold)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"italic\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.italic)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() => toggleMark(editor, \"italic\"))}\n >\n <FormatItalic />\n <VisuallyHidden>\n {intl.formatMessage(messages.italic)}\n </VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.italic)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"underline\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.underline)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() =>\n toggleMark(editor, \"underline\")\n )}\n >\n <FormatUnderlined />\n <VisuallyHidden>\n {intl.formatMessage(messages.underline)}\n </VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.underline)}\n </Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n\n {/* Formatting Menu for additional options */}\n <FormattingMenu isDisabled={isDisabled} />\n\n <Separator orientation=\"vertical\" />\n\n {/* Lists & Indentation */}\n <ToggleButtonGroup.Root\n selectionMode=\"single\"\n selectedKeys={selectedListKeys}\n onSelectionChange={handleListToggle}\n aria-label={intl.formatMessage(messages.listFormatting)}\n isDisabled={isDisabled}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"bulleted-list\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.bulletedList)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <FormatListBulleted />\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.bulletedList)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"numbered-list\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.numberedList)}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <FormatListNumbered />\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.numberedList)}\n </Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n\n {/* Spacer to push undo/redo buttons to the right */}\n <Box flexGrow=\"1\" />\n\n <Group>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.undo)}\n isDisabled={!hasUndos || isDisabled}\n onPress={withPreservedSelection(() => editor.undo())}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Undo />\n <VisuallyHidden>{intl.formatMessage(messages.undo)}</VisuallyHidden>\n </IconButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.undo)}\n </Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={intl.formatMessage(messages.redo)}\n isDisabled={!hasRedos || isDisabled}\n onPress={withPreservedSelection(() => editor.redo())}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Redo />\n <VisuallyHidden>{intl.formatMessage(messages.redo)}</VisuallyHidden>\n </IconButton>\n <Tooltip.Content placement=\"top\">\n {intl.formatMessage(messages.redo)}\n </Tooltip.Content>\n </Tooltip.Root>\n </Group>\n </Toolbar>\n );\n};\n\nRichTextToolbar.displayName = \"RichTextToolbar\";\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useSlotRecipe } from \"@chakra-ui/react\";\nimport { extractStyleProps } from \"@/utils\";\nimport { RichTextInputRootSlot } from \"./rich-text-input.slots\";\nimport {\n RichTextEditor,\n RichTextToolbar,\n type RichTextEditorRef,\n} from \"./components\";\nimport type { RichTextInputProps } from \"./rich-text-input.types\";\nimport {\n toHTML,\n fromHTML,\n createEmptyValue,\n validSlateStateAdapter,\n} from \"./utils\";\nimport { richTextInputRecipe } from \"./rich-text-input.recipe\";\n\n/**\n RichTextInput - A rich text input component with formatting capabilities.\n */\nexport const RichTextInput = (props: RichTextInputProps) => {\n const {\n ref: forwardedRef,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder = \"\",\n isDisabled = false,\n isReadOnly = false,\n isInvalid = false,\n autoFocus = false,\n ...restProps\n } = props;\n\n const recipe = useSlotRecipe({ recipe: richTextInputRecipe });\n const [recipeProps, remainingProps] = recipe.splitVariantProps({\n // Only semantic variants go here (none currently defined)\n ...restProps,\n });\n const [styleProps, functionalProps] = extractStyleProps(remainingProps);\n\n // Data attributes for state-based styling\n const dataAttributes = {\n \"data-disabled\": isDisabled ? \"true\" : undefined,\n \"data-invalid\": isInvalid ? \"true\" : undefined,\n \"data-readonly\": isReadOnly ? \"true\" : undefined,\n };\n\n // Internal state management\n const [internalValue, setInternalValue] = useState(() => {\n const initialHtml = value ?? defaultValue ?? \"\";\n try {\n return initialHtml ? fromHTML(initialHtml) : createEmptyValue();\n } catch (error) {\n console.warn(\"Failed to parse initial HTML, using empty value:\", error);\n return createEmptyValue();\n }\n });\n\n const [serializedValue, setSerializedValue] = useState(() => {\n return value ?? defaultValue ?? \"\";\n });\n\n const editorRef = useRef<RichTextEditorRef>(null);\n\n // Handle controlled value changes\n useEffect(() => {\n if (value !== undefined && value !== serializedValue) {\n const newSlateValue = value ? fromHTML(value) : createEmptyValue();\n setInternalValue(newSlateValue);\n setSerializedValue(value);\n }\n }, [value, serializedValue]);\n\n const handleChange = useCallback(\n (slateValue: ReturnType<typeof createEmptyValue>) => {\n const newHtml = toHTML(slateValue);\n const hasSerializedValueChanged = newHtml !== serializedValue;\n\n setInternalValue(slateValue);\n setSerializedValue(newHtml);\n\n // Only call onChange if the serialized HTML actually changed\n if (hasSerializedValueChanged && onChange) {\n onChange(newHtml);\n }\n },\n [serializedValue, onChange]\n );\n\n const currentValue = internalValue;\n\n // Safety check: ensure we always have a valid Slate value\n const safeValue = validSlateStateAdapter(currentValue);\n\n return (\n <RichTextInputRootSlot\n role=\"group\"\n {...recipeProps}\n {...styleProps}\n {...functionalProps}\n {...dataAttributes}\n ref={forwardedRef}\n >\n <RichTextEditor\n ref={editorRef}\n value={safeValue}\n onChange={handleChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n autoFocus={autoFocus}\n toolbar={\n !isReadOnly ? <RichTextToolbar isDisabled={isDisabled} /> : null\n }\n />\n </RichTextInputRootSlot>\n );\n};\n\nRichTextInput.displayName = \"RichTextInput\";\n"],"names":["withProvider","withContext","createSlotRecipeContext","RichTextInputRootSlot","RichTextInputToolbarSlot","RichTextInputEditableSlot","usePreservedSelection","editor","useCallback","action","selection","Transforms","ReactEditor","HOTKEYS","EDITOR_DEFAULTS","BLOCK_TAGS","MARK_TAGS","FORMATTING_OPTIONS","BASIC_FORMATTING","SCRIPT_FORMATTING","messages","defineMessages","getTextStyles","intl","blockTypes","matchHtmlRegExp","escapeHtml_1","escapeHtml","string","str","match","escape","html","index","lastIndex","SOFT_BREAK_PLACEHOLDER","createEmptyValue","toHTML","value","serializeNode","node","Text","textNode","children","element","hrefAttr","sanitizedUrl","sanitizeUrl","otherAttrsString","key","fromHTML","body","nodes","deserializeNode","validSlateStateAdapter","error","tagName","type","slateElement","href","attrs","attr","processChildren","markType","extractTextFromChildren","textContent","processed","child","SlateElement","extractTextContent","url","trimmed","isUrl","text","LIST_TYPES","VALID_MARK_FORMATS","isValidMarkFormat","format","hasMarkFormat","isMarkActive","Range","marks","Editor","firstNode","firstText","textNodes","isBlockActive","toggleMark","toggleBlock","isActive","isList","n","newProperties","block","focusEditor","resetEditor","newValue","withLinks","insertData","insertText","isInline","wrapLink","data","unwrapLink","isCollapsed","link","Element","attributes","customElement","style","jsx","Leaf","leaf","customLeaf","Softbreaker","useFormattingState","withPreservedSelection","useSlate","selectedKeys","useMemo","keys","selectedScriptKeys","allSelectedKeys","handleAllSelectionChange","keyArray","currentKeys","newlySelected","newlyDeselected","currentlyActive","FormattingMenu","isDisabled","useIntl","jsxs","Menu","Tooltip","IconButton","event","MoreHoriz","Box","FormatStrikethrough","Code","lib","IS_MAC","MODIFIERS","ALIASES","CODES","f","isHotkey","hotkey","options","array","parseHotkey","check","e","object","compareHotkey","ret","isCodeHotkey","isKeyHotkey","byKey","values","length","k","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","optional","name","toKeyName","modifier","toKeyCode","err","expected","actual","code","useKeyboardShortcuts","mark","RichTextEditor","forwardedRef","onChange","onFocus","onBlur","placeholder","isReadOnly","autoFocus","toolbar","localRef","useRef","ref","useObjectRef","mergeRefs","baseEditor","createEditor","withHistory","withReact","handleKeyDown","handleFocus","handleBlur","useImperativeHandle","renderElement","props","renderLeaf","defaultValue","safeInitialValue","Slate","Editable","useToolbarState","textStyles","currentTextStyle","selectedTextStyle","v","selectedTextStyleLabel","handleTextStyleChange","styleId","handleListToggle","selected","selectedFormatKeys","selectedListKeys","hasUndos","hasRedos","RichTextToolbar","Toolbar","Group","KeyboardArrowDown","Separator","ToggleButtonGroup","IconToggleButton","FormatBold","VisuallyHidden","FormatItalic","FormatUnderlined","FormatListBulleted","FormatListNumbered","Undo","Redo","RichTextInput","isInvalid","restProps","recipe","useSlotRecipe","richTextInputRecipe","recipeProps","remainingProps","styleProps","functionalProps","extractStyleProps","dataAttributes","internalValue","setInternalValue","useState","initialHtml","serializedValue","setSerializedValue","editorRef","useEffect","newSlateValue","handleChange","slateValue","newHtml","hasSerializedValueChanged","safeValue"],"mappings":"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","x_google_ignoreList":[5,10]}
|
package/dist/chunks/{scoped-search-input-DM_clkPu.es.js → scoped-search-input-C3N9xhiG.es.js}
RENAMED
|
@@ -2,10 +2,10 @@ import { jsx as a, jsxs as H } from "react/jsx-runtime";
|
|
|
2
2
|
import { useId as J, useRef as Q, useCallback as d } from "react";
|
|
3
3
|
import { useSlotRecipe as U } from "@chakra-ui/react/styled-system";
|
|
4
4
|
import { defineMessages as X, useIntl as Y } from "react-intl";
|
|
5
|
-
import { S as i } from "./select-
|
|
6
|
-
import { S as Z } from "./search-input-
|
|
7
|
-
import { e as _ } from "./extract-style-props-
|
|
8
|
-
import { f as ee } from "./index-
|
|
5
|
+
import { S as i } from "./select-6rfY6mk9.es.js";
|
|
6
|
+
import { S as Z } from "./search-input-xfX98rpy.es.js";
|
|
7
|
+
import { e as _ } from "./extract-style-props-CJjpdqym.es.js";
|
|
8
|
+
import { f as ee } from "./index-CmfW40Im.es.js";
|
|
9
9
|
import { createSlotRecipeContext as ae } from "@chakra-ui/react";
|
|
10
10
|
const { withProvider: te, withContext: b } = /* @__PURE__ */ ae({
|
|
11
11
|
key: "scopedSearchInput"
|
|
@@ -149,4 +149,4 @@ D.displayName = "ScopedSearchInput";
|
|
|
149
149
|
export {
|
|
150
150
|
D as S
|
|
151
151
|
};
|
|
152
|
-
//# sourceMappingURL=scoped-search-input-
|
|
152
|
+
//# sourceMappingURL=scoped-search-input-C3N9xhiG.es.js.map
|