@puzzle-ui/ui 0.0.0-stage → 0.1.0
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/README.md +16 -2
- package/dist/LICENSE +21 -0
- package/dist/components/actions/button/button-content.cjs +41 -0
- package/dist/components/actions/button/button-content.cjs.map +1 -0
- package/dist/components/actions/button/button-content.js +41 -0
- package/dist/components/actions/button/button-content.js.map +1 -0
- package/dist/components/actions/button/button.css +191 -0
- package/dist/components/actions/button/button.types.d.cts +30 -0
- package/dist/components/actions/button/button.types.d.ts +30 -0
- package/dist/components/actions/button/index.cjs +80 -0
- package/dist/components/actions/button/index.cjs.map +1 -0
- package/dist/components/actions/button/index.d.cts +3 -0
- package/dist/components/actions/button/index.d.ts +3 -0
- package/dist/components/actions/button/index.js +80 -0
- package/dist/components/actions/button/index.js.map +1 -0
- package/dist/components/actions/button-group/button-group.css +64 -0
- package/dist/components/actions/button-group/index.cjs +25 -0
- package/dist/components/actions/button-group/index.cjs.map +1 -0
- package/dist/components/actions/button-group/index.d.cts +14 -0
- package/dist/components/actions/button-group/index.d.ts +14 -0
- package/dist/components/actions/button-group/index.js +25 -0
- package/dist/components/actions/button-group/index.js.map +1 -0
- package/dist/components/actions/toggle-group/index.cjs +124 -0
- package/dist/components/actions/toggle-group/index.cjs.map +1 -0
- package/dist/components/actions/toggle-group/index.d.cts +10 -0
- package/dist/components/actions/toggle-group/index.d.ts +10 -0
- package/dist/components/actions/toggle-group/index.js +124 -0
- package/dist/components/actions/toggle-group/index.js.map +1 -0
- package/dist/components/actions/toggle-group/toggle-group.css +67 -0
- package/dist/components/actions/toggle-group/toggle-group.types.d.cts +54 -0
- package/dist/components/actions/toggle-group/toggle-group.types.d.ts +54 -0
- package/dist/components/data-display/alert/alert.css +128 -0
- package/dist/components/data-display/alert/alert.types.d.cts +14 -0
- package/dist/components/data-display/alert/alert.types.d.ts +14 -0
- package/dist/components/data-display/alert/alert.utils.cjs +11 -0
- package/dist/components/data-display/alert/alert.utils.cjs.map +1 -0
- package/dist/components/data-display/alert/alert.utils.js +11 -0
- package/dist/components/data-display/alert/alert.utils.js.map +1 -0
- package/dist/components/data-display/alert/index.cjs +103 -0
- package/dist/components/data-display/alert/index.cjs.map +1 -0
- package/dist/components/data-display/alert/index.d.cts +3 -0
- package/dist/components/data-display/alert/index.d.ts +3 -0
- package/dist/components/data-display/alert/index.js +103 -0
- package/dist/components/data-display/alert/index.js.map +1 -0
- package/dist/components/data-display/avatar/avatar.css +30 -0
- package/dist/components/data-display/avatar/index.cjs +42 -0
- package/dist/components/data-display/avatar/index.cjs.map +1 -0
- package/dist/components/data-display/avatar/index.d.cts +10 -0
- package/dist/components/data-display/avatar/index.d.ts +10 -0
- package/dist/components/data-display/avatar/index.js +42 -0
- package/dist/components/data-display/avatar/index.js.map +1 -0
- package/dist/components/data-display/badge/badge.css +91 -0
- package/dist/components/data-display/badge/index.cjs +31 -0
- package/dist/components/data-display/badge/index.cjs.map +1 -0
- package/dist/components/data-display/badge/index.d.cts +18 -0
- package/dist/components/data-display/badge/index.d.ts +18 -0
- package/dist/components/data-display/badge/index.js +31 -0
- package/dist/components/data-display/badge/index.js.map +1 -0
- package/dist/components/data-display/card/card.css +164 -0
- package/dist/components/data-display/card/index.cjs +42 -0
- package/dist/components/data-display/card/index.cjs.map +1 -0
- package/dist/components/data-display/card/index.d.cts +29 -0
- package/dist/components/data-display/card/index.d.ts +29 -0
- package/dist/components/data-display/card/index.js +35 -0
- package/dist/components/data-display/card/index.js.map +1 -0
- package/dist/components/data-display/image/image.css +80 -0
- package/dist/components/data-display/image/image.types.d.cts +154 -0
- package/dist/components/data-display/image/image.types.d.ts +154 -0
- package/dist/components/data-display/image/image.utils.cjs +55 -0
- package/dist/components/data-display/image/image.utils.cjs.map +1 -0
- package/dist/components/data-display/image/image.utils.js +51 -0
- package/dist/components/data-display/image/image.utils.js.map +1 -0
- package/dist/components/data-display/image/index.cjs +176 -0
- package/dist/components/data-display/image/index.cjs.map +1 -0
- package/dist/components/data-display/image/index.d.cts +3 -0
- package/dist/components/data-display/image/index.d.ts +3 -0
- package/dist/components/data-display/image/index.js +176 -0
- package/dist/components/data-display/image/index.js.map +1 -0
- package/dist/components/data-display/image/use-image-state.cjs +54 -0
- package/dist/components/data-display/image/use-image-state.cjs.map +1 -0
- package/dist/components/data-display/image/use-image-state.js +54 -0
- package/dist/components/data-display/image/use-image-state.js.map +1 -0
- package/dist/components/data-display/paper/index.cjs +16 -0
- package/dist/components/data-display/paper/index.cjs.map +1 -0
- package/dist/components/data-display/paper/index.d.cts +8 -0
- package/dist/components/data-display/paper/index.d.ts +8 -0
- package/dist/components/data-display/paper/index.js +16 -0
- package/dist/components/data-display/paper/index.js.map +1 -0
- package/dist/components/data-display/paper/paper.css +40 -0
- package/dist/components/data-display/progress/circular-progress.cjs +75 -0
- package/dist/components/data-display/progress/circular-progress.cjs.map +1 -0
- package/dist/components/data-display/progress/circular-progress.css +21 -0
- package/dist/components/data-display/progress/circular-progress.d.cts +9 -0
- package/dist/components/data-display/progress/circular-progress.d.ts +9 -0
- package/dist/components/data-display/progress/circular-progress.js +75 -0
- package/dist/components/data-display/progress/circular-progress.js.map +1 -0
- package/dist/components/data-display/progress/linear-progress.cjs +32 -0
- package/dist/components/data-display/progress/linear-progress.cjs.map +1 -0
- package/dist/components/data-display/progress/linear-progress.css +39 -0
- package/dist/components/data-display/progress/linear-progress.d.cts +5 -0
- package/dist/components/data-display/progress/linear-progress.d.ts +5 -0
- package/dist/components/data-display/progress/linear-progress.js +32 -0
- package/dist/components/data-display/progress/linear-progress.js.map +1 -0
- package/dist/components/data-display/progress/types.d.cts +5 -0
- package/dist/components/data-display/progress/types.d.ts +5 -0
- package/dist/components/data-display/progress/utils.cjs +16 -0
- package/dist/components/data-display/progress/utils.cjs.map +1 -0
- package/dist/components/data-display/progress/utils.js +15 -0
- package/dist/components/data-display/progress/utils.js.map +1 -0
- package/dist/components/data-display/skeleton/index.cjs +18 -0
- package/dist/components/data-display/skeleton/index.cjs.map +1 -0
- package/dist/components/data-display/skeleton/index.d.cts +10 -0
- package/dist/components/data-display/skeleton/index.d.ts +10 -0
- package/dist/components/data-display/skeleton/index.js +18 -0
- package/dist/components/data-display/skeleton/index.js.map +1 -0
- package/dist/components/data-display/skeleton/skeleton.css +47 -0
- package/dist/components/editors/text-editor/editor.cjs +620 -0
- package/dist/components/editors/text-editor/editor.cjs.map +1 -0
- package/dist/components/editors/text-editor/editor.d.cts +1 -0
- package/dist/components/editors/text-editor/editor.d.ts +1 -0
- package/dist/components/editors/text-editor/editor.js +620 -0
- package/dist/components/editors/text-editor/editor.js.map +1 -0
- package/dist/components/editors/text-editor/index.cjs +39 -0
- package/dist/components/editors/text-editor/index.cjs.map +1 -0
- package/dist/components/editors/text-editor/index.d.cts +13 -0
- package/dist/components/editors/text-editor/index.d.ts +13 -0
- package/dist/components/editors/text-editor/index.js +38 -0
- package/dist/components/editors/text-editor/index.js.map +1 -0
- package/dist/components/editors/text-editor/text-document.cjs +406 -0
- package/dist/components/editors/text-editor/text-document.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-document.js +391 -0
- package/dist/components/editors/text-editor/text-document.js.map +1 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.cjs +251 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.css +16 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.d.cts +7 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.d.ts +7 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.js +251 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.js.map +1 -0
- package/dist/components/editors/text-editor/text-editor.css +116 -0
- package/dist/components/editors/text-editor/text-editor.types.d.cts +37 -0
- package/dist/components/editors/text-editor/text-editor.types.d.ts +37 -0
- package/dist/components/editors/text-editor/text-parser.cjs +262 -0
- package/dist/components/editors/text-editor/text-parser.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-parser.js +261 -0
- package/dist/components/editors/text-editor/text-parser.js.map +1 -0
- package/dist/components/editors/text-editor/text-renderer.cjs +85 -0
- package/dist/components/editors/text-editor/text-renderer.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-renderer.d.cts +7 -0
- package/dist/components/editors/text-editor/text-renderer.d.ts +7 -0
- package/dist/components/editors/text-editor/text-renderer.js +85 -0
- package/dist/components/editors/text-editor/text-renderer.js.map +1 -0
- package/dist/components/forms/autocomplete/autocomplete.css +384 -0
- package/dist/components/forms/autocomplete/autocomplete.types.d.cts +86 -0
- package/dist/components/forms/autocomplete/autocomplete.types.d.ts +86 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.cjs +47 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.cjs.map +1 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.js +44 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.js.map +1 -0
- package/dist/components/forms/autocomplete/index.cjs +532 -0
- package/dist/components/forms/autocomplete/index.cjs.map +1 -0
- package/dist/components/forms/autocomplete/index.d.cts +3 -0
- package/dist/components/forms/autocomplete/index.d.ts +3 -0
- package/dist/components/forms/autocomplete/index.js +532 -0
- package/dist/components/forms/autocomplete/index.js.map +1 -0
- package/dist/components/forms/checkbox/checkbox.css +146 -0
- package/dist/components/forms/checkbox/index.cjs +80 -0
- package/dist/components/forms/checkbox/index.cjs.map +1 -0
- package/dist/components/forms/checkbox/index.d.cts +20 -0
- package/dist/components/forms/checkbox/index.d.ts +20 -0
- package/dist/components/forms/checkbox/index.js +80 -0
- package/dist/components/forms/checkbox/index.js.map +1 -0
- package/dist/components/forms/date-picker/date-picker.css +478 -0
- package/dist/components/forms/date-picker/date-picker.types.d.cts +75 -0
- package/dist/components/forms/date-picker/date-picker.types.d.ts +75 -0
- package/dist/components/forms/date-picker/date-picker.utils.cjs +76 -0
- package/dist/components/forms/date-picker/date-picker.utils.cjs.map +1 -0
- package/dist/components/forms/date-picker/date-picker.utils.js +64 -0
- package/dist/components/forms/date-picker/date-picker.utils.js.map +1 -0
- package/dist/components/forms/date-picker/index.cjs +572 -0
- package/dist/components/forms/date-picker/index.cjs.map +1 -0
- package/dist/components/forms/date-picker/index.d.cts +3 -0
- package/dist/components/forms/date-picker/index.d.ts +3 -0
- package/dist/components/forms/date-picker/index.js +572 -0
- package/dist/components/forms/date-picker/index.js.map +1 -0
- package/dist/components/forms/file-upload/file-upload.css +290 -0
- package/dist/components/forms/file-upload/file-upload.types.d.cts +51 -0
- package/dist/components/forms/file-upload/file-upload.types.d.ts +51 -0
- package/dist/components/forms/file-upload/file-upload.utils.cjs +76 -0
- package/dist/components/forms/file-upload/file-upload.utils.cjs.map +1 -0
- package/dist/components/forms/file-upload/file-upload.utils.js +72 -0
- package/dist/components/forms/file-upload/file-upload.utils.js.map +1 -0
- package/dist/components/forms/file-upload/index.cjs +346 -0
- package/dist/components/forms/file-upload/index.cjs.map +1 -0
- package/dist/components/forms/file-upload/index.d.cts +3 -0
- package/dist/components/forms/file-upload/index.d.ts +3 -0
- package/dist/components/forms/file-upload/index.js +346 -0
- package/dist/components/forms/file-upload/index.js.map +1 -0
- package/dist/components/forms/form-field/form-field-state.cjs +25 -0
- package/dist/components/forms/form-field/form-field-state.cjs.map +1 -0
- package/dist/components/forms/form-field/form-field-state.js +25 -0
- package/dist/components/forms/form-field/form-field-state.js.map +1 -0
- package/dist/components/forms/form-field/form-field.css +44 -0
- package/dist/components/forms/form-field/index.cjs +61 -0
- package/dist/components/forms/form-field/index.cjs.map +1 -0
- package/dist/components/forms/form-field/index.d.cts +23 -0
- package/dist/components/forms/form-field/index.d.ts +23 -0
- package/dist/components/forms/form-field/index.js +61 -0
- package/dist/components/forms/form-field/index.js.map +1 -0
- package/dist/components/forms/input/index.d.cts +4 -0
- package/dist/components/forms/input/index.d.ts +4 -0
- package/dist/components/forms/input/input.css +153 -0
- package/dist/components/forms/input/number-input.cjs +192 -0
- package/dist/components/forms/input/number-input.cjs.map +1 -0
- package/dist/components/forms/input/number-input.d.cts +20 -0
- package/dist/components/forms/input/number-input.d.ts +20 -0
- package/dist/components/forms/input/number-input.js +192 -0
- package/dist/components/forms/input/number-input.js.map +1 -0
- package/dist/components/forms/input/text-area-input.cjs +47 -0
- package/dist/components/forms/input/text-area-input.cjs.map +1 -0
- package/dist/components/forms/input/text-area-input.d.cts +8 -0
- package/dist/components/forms/input/text-area-input.d.ts +8 -0
- package/dist/components/forms/input/text-area-input.js +47 -0
- package/dist/components/forms/input/text-area-input.js.map +1 -0
- package/dist/components/forms/input/text-input.cjs +47 -0
- package/dist/components/forms/input/text-input.cjs.map +1 -0
- package/dist/components/forms/input/text-input.d.cts +9 -0
- package/dist/components/forms/input/text-input.d.ts +9 -0
- package/dist/components/forms/input/text-input.js +47 -0
- package/dist/components/forms/input/text-input.js.map +1 -0
- package/dist/components/forms/label/index.cjs +26 -0
- package/dist/components/forms/label/index.cjs.map +1 -0
- package/dist/components/forms/label/index.d.cts +8 -0
- package/dist/components/forms/label/index.d.ts +8 -0
- package/dist/components/forms/label/index.js +26 -0
- package/dist/components/forms/label/index.js.map +1 -0
- package/dist/components/forms/label/label.css +22 -0
- package/dist/components/forms/radio-group/index.cjs +226 -0
- package/dist/components/forms/radio-group/index.cjs.map +1 -0
- package/dist/components/forms/radio-group/index.d.cts +5 -0
- package/dist/components/forms/radio-group/index.d.ts +5 -0
- package/dist/components/forms/radio-group/index.js +225 -0
- package/dist/components/forms/radio-group/index.js.map +1 -0
- package/dist/components/forms/radio-group/radio-group.css +222 -0
- package/dist/components/forms/radio-group/radio-group.types.d.cts +51 -0
- package/dist/components/forms/radio-group/radio-group.types.d.ts +51 -0
- package/dist/components/forms/radio-group/radio-group.utils.cjs +22 -0
- package/dist/components/forms/radio-group/radio-group.utils.cjs.map +1 -0
- package/dist/components/forms/radio-group/radio-group.utils.js +21 -0
- package/dist/components/forms/radio-group/radio-group.utils.js.map +1 -0
- package/dist/components/forms/select/index.cjs +468 -0
- package/dist/components/forms/select/index.cjs.map +1 -0
- package/dist/components/forms/select/index.d.cts +112 -0
- package/dist/components/forms/select/index.d.ts +112 -0
- package/dist/components/forms/select/index.js +468 -0
- package/dist/components/forms/select/index.js.map +1 -0
- package/dist/components/forms/select/select.css +363 -0
- package/dist/components/forms/slider/index.cjs +93 -0
- package/dist/components/forms/slider/index.cjs.map +1 -0
- package/dist/components/forms/slider/index.d.cts +37 -0
- package/dist/components/forms/slider/index.d.ts +37 -0
- package/dist/components/forms/slider/index.js +93 -0
- package/dist/components/forms/slider/index.js.map +1 -0
- package/dist/components/forms/slider/slider.css +202 -0
- package/dist/components/forms/stepper/index.cjs +113 -0
- package/dist/components/forms/stepper/index.cjs.map +1 -0
- package/dist/components/forms/stepper/index.d.cts +48 -0
- package/dist/components/forms/stepper/index.d.ts +48 -0
- package/dist/components/forms/stepper/index.js +113 -0
- package/dist/components/forms/stepper/index.js.map +1 -0
- package/dist/components/forms/stepper/stepper.css +241 -0
- package/dist/components/forms/switch/index.cjs +45 -0
- package/dist/components/forms/switch/index.cjs.map +1 -0
- package/dist/components/forms/switch/index.d.cts +11 -0
- package/dist/components/forms/switch/index.d.ts +11 -0
- package/dist/components/forms/switch/index.js +45 -0
- package/dist/components/forms/switch/index.js.map +1 -0
- package/dist/components/forms/switch/switch.css +142 -0
- package/dist/components/layout/app-bar/app-bar.css +197 -0
- package/dist/components/layout/app-bar/index.cjs +150 -0
- package/dist/components/layout/app-bar/index.cjs.map +1 -0
- package/dist/components/layout/app-bar/index.d.cts +21 -0
- package/dist/components/layout/app-bar/index.d.ts +21 -0
- package/dist/components/layout/app-bar/index.js +150 -0
- package/dist/components/layout/app-bar/index.js.map +1 -0
- package/dist/components/layout/background/background.css +160 -0
- package/dist/components/layout/background/index.cjs +34 -0
- package/dist/components/layout/background/index.cjs.map +1 -0
- package/dist/components/layout/background/index.d.cts +23 -0
- package/dist/components/layout/background/index.d.ts +23 -0
- package/dist/components/layout/background/index.js +34 -0
- package/dist/components/layout/background/index.js.map +1 -0
- package/dist/components/layout/bottom-navigation/bottom-navigation.css +108 -0
- package/dist/components/layout/bottom-navigation/index.cjs +51 -0
- package/dist/components/layout/bottom-navigation/index.cjs.map +1 -0
- package/dist/components/layout/bottom-navigation/index.d.cts +19 -0
- package/dist/components/layout/bottom-navigation/index.d.ts +19 -0
- package/dist/components/layout/bottom-navigation/index.js +50 -0
- package/dist/components/layout/bottom-navigation/index.js.map +1 -0
- package/dist/components/layout/breadcrumbs/breadcrumbs.css +80 -0
- package/dist/components/layout/breadcrumbs/index.cjs +38 -0
- package/dist/components/layout/breadcrumbs/index.cjs.map +1 -0
- package/dist/components/layout/breadcrumbs/index.d.cts +18 -0
- package/dist/components/layout/breadcrumbs/index.d.ts +18 -0
- package/dist/components/layout/breadcrumbs/index.js +38 -0
- package/dist/components/layout/breadcrumbs/index.js.map +1 -0
- package/dist/components/layout/collapsable-sidebar/collapsable-sidebar.css +240 -0
- package/dist/components/layout/collapsable-sidebar/index.cjs +107 -0
- package/dist/components/layout/collapsable-sidebar/index.cjs.map +1 -0
- package/dist/components/layout/collapsable-sidebar/index.d.cts +35 -0
- package/dist/components/layout/collapsable-sidebar/index.d.ts +35 -0
- package/dist/components/layout/collapsable-sidebar/index.js +107 -0
- package/dist/components/layout/collapsable-sidebar/index.js.map +1 -0
- package/dist/components/layout/container/container.css +24 -0
- package/dist/components/layout/container/container.utils.cjs +11 -0
- package/dist/components/layout/container/container.utils.cjs.map +1 -0
- package/dist/components/layout/container/container.utils.d.cts +1 -0
- package/dist/components/layout/container/container.utils.d.ts +1 -0
- package/dist/components/layout/container/container.utils.js +11 -0
- package/dist/components/layout/container/container.utils.js.map +1 -0
- package/dist/components/layout/container/index.cjs +17 -0
- package/dist/components/layout/container/index.cjs.map +1 -0
- package/dist/components/layout/container/index.d.cts +11 -0
- package/dist/components/layout/container/index.d.ts +11 -0
- package/dist/components/layout/container/index.js +17 -0
- package/dist/components/layout/container/index.js.map +1 -0
- package/dist/components/layout/page-layout/index.cjs +80 -0
- package/dist/components/layout/page-layout/index.cjs.map +1 -0
- package/dist/components/layout/page-layout/index.d.cts +61 -0
- package/dist/components/layout/page-layout/index.d.ts +61 -0
- package/dist/components/layout/page-layout/index.js +80 -0
- package/dist/components/layout/page-layout/index.js.map +1 -0
- package/dist/components/layout/page-layout/page-layout.css +88 -0
- package/dist/components/layout/section/index.cjs +15 -0
- package/dist/components/layout/section/index.cjs.map +1 -0
- package/dist/components/layout/section/index.d.cts +2 -0
- package/dist/components/layout/section/index.d.ts +2 -0
- package/dist/components/layout/section/index.js +15 -0
- package/dist/components/layout/section/index.js.map +1 -0
- package/dist/components/layout/section/section.css +71 -0
- package/dist/components/layout/section/types.d.cts +13 -0
- package/dist/components/layout/section/types.d.ts +13 -0
- package/dist/components/layout/section-stack/index.cjs +29 -0
- package/dist/components/layout/section-stack/index.cjs.map +1 -0
- package/dist/components/layout/section-stack/index.d.cts +8 -0
- package/dist/components/layout/section-stack/index.d.ts +8 -0
- package/dist/components/layout/section-stack/index.js +29 -0
- package/dist/components/layout/section-stack/index.js.map +1 -0
- package/dist/components/layout/sidebar/index.cjs +16 -0
- package/dist/components/layout/sidebar/index.cjs.map +1 -0
- package/dist/components/layout/sidebar/index.d.cts +7 -0
- package/dist/components/layout/sidebar/index.d.ts +7 -0
- package/dist/components/layout/sidebar/index.js +16 -0
- package/dist/components/layout/sidebar/index.js.map +1 -0
- package/dist/components/layout/sidebar/sidebar.css +21 -0
- package/dist/components/layout/stack/index.cjs +30 -0
- package/dist/components/layout/stack/index.cjs.map +1 -0
- package/dist/components/layout/stack/index.d.cts +31 -0
- package/dist/components/layout/stack/index.d.ts +31 -0
- package/dist/components/layout/stack/index.js +30 -0
- package/dist/components/layout/stack/index.js.map +1 -0
- package/dist/components/layout/stack/stack.css +303 -0
- package/dist/components/navigation/accordion/accordion.css +97 -0
- package/dist/components/navigation/accordion/index.cjs +107 -0
- package/dist/components/navigation/accordion/index.cjs.map +1 -0
- package/dist/components/navigation/accordion/index.d.cts +48 -0
- package/dist/components/navigation/accordion/index.d.ts +48 -0
- package/dist/components/navigation/accordion/index.js +107 -0
- package/dist/components/navigation/accordion/index.js.map +1 -0
- package/dist/components/navigation/carousel/carousel.css +283 -0
- package/dist/components/navigation/carousel/controller.cjs +46 -0
- package/dist/components/navigation/carousel/controller.cjs.map +1 -0
- package/dist/components/navigation/carousel/controller.d.cts +16 -0
- package/dist/components/navigation/carousel/controller.d.ts +16 -0
- package/dist/components/navigation/carousel/controller.js +45 -0
- package/dist/components/navigation/carousel/controller.js.map +1 -0
- package/dist/components/navigation/carousel/index.cjs +494 -0
- package/dist/components/navigation/carousel/index.cjs.map +1 -0
- package/dist/components/navigation/carousel/index.d.cts +27 -0
- package/dist/components/navigation/carousel/index.d.ts +27 -0
- package/dist/components/navigation/carousel/index.js +494 -0
- package/dist/components/navigation/carousel/index.js.map +1 -0
- package/dist/components/navigation/link/index.cjs +40 -0
- package/dist/components/navigation/link/index.cjs.map +1 -0
- package/dist/components/navigation/link/index.d.cts +3 -0
- package/dist/components/navigation/link/index.d.ts +3 -0
- package/dist/components/navigation/link/index.js +40 -0
- package/dist/components/navigation/link/index.js.map +1 -0
- package/dist/components/navigation/link/link.css +31 -0
- package/dist/components/navigation/link/types.d.cts +12 -0
- package/dist/components/navigation/link/types.d.ts +12 -0
- package/dist/components/navigation/tabs/index.cjs +111 -0
- package/dist/components/navigation/tabs/index.cjs.map +1 -0
- package/dist/components/navigation/tabs/index.d.cts +30 -0
- package/dist/components/navigation/tabs/index.d.ts +30 -0
- package/dist/components/navigation/tabs/index.js +110 -0
- package/dist/components/navigation/tabs/index.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.css +216 -0
- package/dist/components/navigation/tree-view/index.cjs +455 -0
- package/dist/components/navigation/tree-view/index.cjs.map +1 -0
- package/dist/components/navigation/tree-view/index.d.cts +96 -0
- package/dist/components/navigation/tree-view/index.d.ts +96 -0
- package/dist/components/navigation/tree-view/index.js +455 -0
- package/dist/components/navigation/tree-view/index.js.map +1 -0
- package/dist/components/navigation/tree-view/tree-view.css +258 -0
- package/dist/components/overlays/backdrop/backdrop.css +10 -0
- package/dist/components/overlays/backdrop/index.cjs +70 -0
- package/dist/components/overlays/backdrop/index.cjs.map +1 -0
- package/dist/components/overlays/backdrop/index.d.cts +12 -0
- package/dist/components/overlays/backdrop/index.d.ts +12 -0
- package/dist/components/overlays/backdrop/index.js +70 -0
- package/dist/components/overlays/backdrop/index.js.map +1 -0
- package/dist/components/overlays/command/command.css +154 -0
- package/dist/components/overlays/command/command.types.d.cts +36 -0
- package/dist/components/overlays/command/command.types.d.ts +36 -0
- package/dist/components/overlays/command/command.utils.cjs +39 -0
- package/dist/components/overlays/command/command.utils.cjs.map +1 -0
- package/dist/components/overlays/command/command.utils.js +35 -0
- package/dist/components/overlays/command/command.utils.js.map +1 -0
- package/dist/components/overlays/command/index.cjs +274 -0
- package/dist/components/overlays/command/index.cjs.map +1 -0
- package/dist/components/overlays/command/index.d.cts +4 -0
- package/dist/components/overlays/command/index.d.ts +4 -0
- package/dist/components/overlays/command/index.js +273 -0
- package/dist/components/overlays/command/index.js.map +1 -0
- package/dist/components/overlays/dialog/dialog.css +121 -0
- package/dist/components/overlays/dialog/index.cjs +80 -0
- package/dist/components/overlays/dialog/index.cjs.map +1 -0
- package/dist/components/overlays/dialog/index.d.cts +35 -0
- package/dist/components/overlays/dialog/index.d.ts +35 -0
- package/dist/components/overlays/dialog/index.js +80 -0
- package/dist/components/overlays/dialog/index.js.map +1 -0
- package/dist/components/overlays/drawer/drawer.css +133 -0
- package/dist/components/overlays/drawer/index.cjs +90 -0
- package/dist/components/overlays/drawer/index.cjs.map +1 -0
- package/dist/components/overlays/drawer/index.d.cts +11 -0
- package/dist/components/overlays/drawer/index.d.ts +11 -0
- package/dist/components/overlays/drawer/index.js +90 -0
- package/dist/components/overlays/drawer/index.js.map +1 -0
- package/dist/components/overlays/drawer/use-resize-bar.cjs +152 -0
- package/dist/components/overlays/drawer/use-resize-bar.cjs.map +1 -0
- package/dist/components/overlays/drawer/use-resize-bar.js +152 -0
- package/dist/components/overlays/drawer/use-resize-bar.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs +120 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.d.cts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.d.ts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js +120 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.cjs +136 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.d.cts +7 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.d.ts +7 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.js +132 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.cjs +76 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.d.cts +4 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.d.ts +4 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.js +75 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.cjs +96 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.d.cts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.d.ts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.js +96 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.cjs +111 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.cjs +21 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.js +18 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.css +127 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.d.cts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.d.ts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.js +111 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.types.d.cts +66 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.types.d.ts +66 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs +44 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js +39 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/index.cjs +31 -0
- package/dist/components/overlays/dropdown-menu/index.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/index.d.cts +19 -0
- package/dist/components/overlays/dropdown-menu/index.d.ts +19 -0
- package/dist/components/overlays/dropdown-menu/index.js +22 -0
- package/dist/components/overlays/dropdown-menu/index.js.map +1 -0
- package/dist/components/overlays/floating-position/calculate-position.cjs +94 -0
- package/dist/components/overlays/floating-position/calculate-position.cjs.map +1 -0
- package/dist/components/overlays/floating-position/calculate-position.js +89 -0
- package/dist/components/overlays/floating-position/calculate-position.js.map +1 -0
- package/dist/components/overlays/floating-position/use-floating-position.cjs +89 -0
- package/dist/components/overlays/floating-position/use-floating-position.cjs.map +1 -0
- package/dist/components/overlays/floating-position/use-floating-position.js +89 -0
- package/dist/components/overlays/floating-position/use-floating-position.js.map +1 -0
- package/dist/components/overlays/notification/index.cjs +142 -0
- package/dist/components/overlays/notification/index.cjs.map +1 -0
- package/dist/components/overlays/notification/index.d.cts +16 -0
- package/dist/components/overlays/notification/index.d.ts +16 -0
- package/dist/components/overlays/notification/index.js +139 -0
- package/dist/components/overlays/notification/index.js.map +1 -0
- package/dist/components/overlays/notification/notification-provider.cjs +69 -0
- package/dist/components/overlays/notification/notification-provider.cjs.map +1 -0
- package/dist/components/overlays/notification/notification-provider.d.cts +3 -0
- package/dist/components/overlays/notification/notification-provider.d.ts +3 -0
- package/dist/components/overlays/notification/notification-provider.js +68 -0
- package/dist/components/overlays/notification/notification-provider.js.map +1 -0
- package/dist/components/overlays/notification/notification.css +172 -0
- package/dist/components/overlays/notification/notification.types.d.cts +41 -0
- package/dist/components/overlays/notification/notification.types.d.ts +41 -0
- package/dist/components/overlays/notification/notification.utils.cjs +23 -0
- package/dist/components/overlays/notification/notification.utils.cjs.map +1 -0
- package/dist/components/overlays/notification/notification.utils.js +22 -0
- package/dist/components/overlays/notification/notification.utils.js.map +1 -0
- package/dist/components/overlays/notification/use-notification.cjs +12 -0
- package/dist/components/overlays/notification/use-notification.cjs.map +1 -0
- package/dist/components/overlays/notification/use-notification.d.cts +3 -0
- package/dist/components/overlays/notification/use-notification.d.ts +3 -0
- package/dist/components/overlays/notification/use-notification.js +12 -0
- package/dist/components/overlays/notification/use-notification.js.map +1 -0
- package/dist/components/overlays/overlay-stack/index.cjs +195 -0
- package/dist/components/overlays/overlay-stack/index.cjs.map +1 -0
- package/dist/components/overlays/overlay-stack/index.js +193 -0
- package/dist/components/overlays/overlay-stack/index.js.map +1 -0
- package/dist/components/overlays/popout/index.cjs +190 -0
- package/dist/components/overlays/popout/index.cjs.map +1 -0
- package/dist/components/overlays/popout/index.d.cts +26 -0
- package/dist/components/overlays/popout/index.d.ts +26 -0
- package/dist/components/overlays/popout/index.js +190 -0
- package/dist/components/overlays/popout/index.js.map +1 -0
- package/dist/components/overlays/popout/popout.css +15 -0
- package/dist/components/overlays/popover/index.cjs +163 -0
- package/dist/components/overlays/popover/index.cjs.map +1 -0
- package/dist/components/overlays/popover/index.d.cts +28 -0
- package/dist/components/overlays/popover/index.d.ts +28 -0
- package/dist/components/overlays/popover/index.js +163 -0
- package/dist/components/overlays/popover/index.js.map +1 -0
- package/dist/components/overlays/popover/popover.css +56 -0
- package/dist/components/overlays/portal/index.cjs +33 -0
- package/dist/components/overlays/portal/index.cjs.map +1 -0
- package/dist/components/overlays/portal/index.d.cts +15 -0
- package/dist/components/overlays/portal/index.d.ts +15 -0
- package/dist/components/overlays/portal/index.js +33 -0
- package/dist/components/overlays/portal/index.js.map +1 -0
- package/dist/components/overlays/portal/target.cjs +17 -0
- package/dist/components/overlays/portal/target.cjs.map +1 -0
- package/dist/components/overlays/portal/target.css +3 -0
- package/dist/components/overlays/portal/target.d.cts +7 -0
- package/dist/components/overlays/portal/target.d.ts +7 -0
- package/dist/components/overlays/portal/target.js +17 -0
- package/dist/components/overlays/portal/target.js.map +1 -0
- package/dist/components/overlays/tooltip/index.cjs +71 -0
- package/dist/components/overlays/tooltip/index.cjs.map +1 -0
- package/dist/components/overlays/tooltip/index.d.cts +24 -0
- package/dist/components/overlays/tooltip/index.d.ts +24 -0
- package/dist/components/overlays/tooltip/index.js +71 -0
- package/dist/components/overlays/tooltip/index.js.map +1 -0
- package/dist/components/overlays/tooltip/tooltip.css +67 -0
- package/dist/components/typography/heading.cjs +14 -0
- package/dist/components/typography/heading.cjs.map +1 -0
- package/dist/components/typography/heading.d.cts +11 -0
- package/dist/components/typography/heading.d.ts +11 -0
- package/dist/components/typography/heading.js +14 -0
- package/dist/components/typography/heading.js.map +1 -0
- package/dist/components/typography/text.cjs +14 -0
- package/dist/components/typography/text.cjs.map +1 -0
- package/dist/components/typography/text.d.cts +12 -0
- package/dist/components/typography/text.d.ts +12 -0
- package/dist/components/typography/text.js +14 -0
- package/dist/components/typography/text.js.map +1 -0
- package/dist/components/utilities/preview/highlight.cjs +79 -0
- package/dist/components/utilities/preview/highlight.cjs.map +1 -0
- package/dist/components/utilities/preview/highlight.js +79 -0
- package/dist/components/utilities/preview/highlight.js.map +1 -0
- package/dist/components/utilities/preview/index.cjs +391 -0
- package/dist/components/utilities/preview/index.cjs.map +1 -0
- package/dist/components/utilities/preview/index.d.cts +20 -0
- package/dist/components/utilities/preview/index.d.ts +20 -0
- package/dist/components/utilities/preview/index.js +391 -0
- package/dist/components/utilities/preview/index.js.map +1 -0
- package/dist/components/utilities/preview/preview.css +268 -0
- package/dist/components/utilities/scroll-lock/index.cjs +124 -0
- package/dist/components/utilities/scroll-lock/index.cjs.map +1 -0
- package/dist/components/utilities/scroll-lock/index.d.cts +6 -0
- package/dist/components/utilities/scroll-lock/index.d.ts +6 -0
- package/dist/components/utilities/scroll-lock/index.js +124 -0
- package/dist/components/utilities/scroll-lock/index.js.map +1 -0
- package/dist/components/utilities/transition/index.cjs +171 -0
- package/dist/components/utilities/transition/index.cjs.map +1 -0
- package/dist/components/utilities/transition/index.d.cts +27 -0
- package/dist/components/utilities/transition/index.d.ts +27 -0
- package/dist/components/utilities/transition/index.js +171 -0
- package/dist/components/utilities/transition/index.js.map +1 -0
- package/dist/components/utilities/transition/transition.css +130 -0
- package/dist/index.cjs +155 -0
- package/dist/index.d.cts +85 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +69 -0
- package/package.json +65 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-document.cjs","names":[],"sources":["../../../../src/components/editors/text-editor/text-document.ts"],"sourcesContent":["import type {\n TextBlock,\n TextDocument,\n TextInline,\n TextMark,\n TextPoint,\n TextSelection,\n TextBlockVariant,\n TextAlign,\n TextListType,\n} from \"./text-editor.types\";\n\nconst HEADING_VARIANTS = new Set<TextBlockVariant>([\n \"display1\",\n \"display2\",\n \"headline1\",\n \"headline2\",\n \"headline3\",\n \"headline4\",\n]);\n\nconst MARK_ORDER: TextMark[] = [\"bold\", \"italic\", \"underline\", \"strike\"];\n\nexport const isHeadingVariant = (variant: TextBlockVariant): boolean =>\n HEADING_VARIANTS.has(variant);\n\nexport const createTextDocument = (text = \"\"): TextDocument => ({\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n variant: \"body1\",\n children: text ? [{ text }] : [],\n },\n ],\n});\n\nexport const createTextSelection = (block = 0, offset = 0): TextSelection => ({\n anchor: { block, offset },\n focus: { block, offset },\n});\n\nexport const getBlockText = (block: TextBlock): string =>\n block.children.map((child) => child.text).join(\"\");\n\nexport const getBlockLength = (block: TextBlock): number =>\n block.children.reduce((length, child) => length + child.text.length, 0);\n\nexport const isCollapsedSelection = (selection: TextSelection): boolean =>\n selection.anchor.block === selection.focus.block &&\n selection.anchor.offset === selection.focus.offset;\n\nexport const getOrderedSelection = (\n selection: TextSelection,\n): { start: TextPoint; end: TextPoint } => {\n const { anchor, focus } = selection;\n if (\n anchor.block < focus.block ||\n (anchor.block === focus.block && anchor.offset <= focus.offset)\n ) {\n return { start: anchor, end: focus };\n }\n\n return { start: focus, end: anchor };\n};\n\nconst normalizeMarks = (marks: TextMark[] = []): TextMark[] =>\n MARK_ORDER.filter((mark) => marks.includes(mark));\n\nconst sameMarks = (left: TextMark[] = [], right: TextMark[] = []): boolean => {\n const a = normalizeMarks(left);\n const b = normalizeMarks(right);\n return a.length === b.length && a.every((mark, index) => mark === b[index]);\n};\n\nexport const normalizeInlines = (inlines: TextInline[]): TextInline[] => {\n const result: TextInline[] = [];\n\n for (const inline of inlines) {\n if (!inline.text) continue;\n\n const marks = normalizeMarks(inline.marks);\n const previous = result[result.length - 1];\n\n if (previous && sameMarks(previous.marks, marks)) {\n previous.text += inline.text;\n continue;\n }\n\n result.push({\n text: inline.text,\n ...(marks.length ? { marks } : {}),\n });\n }\n\n return result;\n};\n\nconst isTextMark = (value: unknown): value is TextMark =>\n value === \"bold\" ||\n value === \"italic\" ||\n value === \"underline\" ||\n value === \"strike\";\n\nconst isTextVariant = (value: unknown): value is TextBlockVariant =>\n value === \"display1\" ||\n value === \"display2\" ||\n value === \"headline1\" ||\n value === \"headline2\" ||\n value === \"headline3\" ||\n value === \"headline4\" ||\n value === \"subtitle1\" ||\n value === \"subtitle2\" ||\n value === \"body1\" ||\n value === \"body2\" ||\n value === \"button\" ||\n value === \"caption\" ||\n value === \"overline\";\n\nexport const normalizeTextDocument = (input: TextDocument): TextDocument => {\n const content = Array.isArray(input?.content)\n ? input.content.flatMap((candidate) => {\n if (!candidate || !Array.isArray(candidate.children)) return [];\n\n const variant = isTextVariant(candidate.variant)\n ? candidate.variant\n : \"body1\";\n\n const children = normalizeInlines(\n candidate.children.flatMap((inline) => {\n if (!inline || typeof inline.text !== \"string\") return [];\n const marks = Array.isArray(inline.marks)\n ? inline.marks.filter(isTextMark)\n : [];\n return [{ text: inline.text, marks }];\n }),\n );\n\n const listType =\n candidate.listType === \"bullet\" || candidate.listType === \"ordered\"\n ? candidate.listType\n : undefined;\n const align =\n candidate.align === \"left\" ||\n candidate.align === \"center\" ||\n candidate.align === \"right\" ||\n candidate.align === \"justify\"\n ? (candidate.align as TextAlign)\n : undefined;\n\n const type = listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\";\n const headingLevel =\n type === \"heading\" &&\n Number.isInteger(candidate.headingLevel) &&\n candidate.headingLevel! >= 1 &&\n candidate.headingLevel! <= 6\n ? candidate.headingLevel\n : undefined;\n\n return [\n {\n type: listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n children,\n ...(listType ? { listType } : {}),\n ...(align ? { align } : {}),\n ...(headingLevel ? { headingLevel } : {}),\n } satisfies TextBlock,\n ];\n })\n : [];\n\n return {\n type: \"doc\",\n content: content.length\n ? content\n : [{ type: \"paragraph\", variant: \"body1\", children: [] }],\n };\n};\n\nconst sliceInlines = (\n inlines: TextInline[],\n from: number,\n to: number,\n): TextInline[] => {\n if (to <= from) return [];\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = position + inline.text.length;\n const overlapStart = Math.max(start, from);\n const overlapEnd = Math.min(end, to);\n\n if (overlapStart < overlapEnd) {\n result.push({\n text: inline.text.slice(overlapStart - start, overlapEnd - start),\n ...(inline.marks?.length ? { marks: [...inline.marks] } : {}),\n });\n }\n\n position = end;\n if (position >= to) break;\n }\n\n return normalizeInlines(result);\n};\n\nconst transformInlineRange = (\n inlines: TextInline[],\n from: number,\n to: number,\n transform: (marks: TextMark[]) => TextMark[],\n): TextInline[] => {\n if (to <= from) return inlines.map((inline) => ({ ...inline }));\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = start + inline.text.length;\n\n if (end <= from || start >= to) {\n result.push({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n });\n } else {\n const leftLength = Math.max(0, from - start);\n const rightStart = Math.max(0, to - start);\n const marks = inline.marks ?? [];\n\n if (leftLength > 0) {\n result.push({\n text: inline.text.slice(0, leftLength),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n\n const middleEnd = Math.min(inline.text.length, to - start);\n if (middleEnd > leftLength) {\n result.push({\n text: inline.text.slice(leftLength, middleEnd),\n marks: transform([...marks]),\n });\n }\n\n if (rightStart < inline.text.length) {\n result.push({\n text: inline.text.slice(Math.max(0, rightStart)),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n }\n\n position = end;\n }\n\n return normalizeInlines(result);\n};\n\nexport const applyMark = (\n document: TextDocument,\n selection: TextSelection,\n mark: TextMark,\n force?: boolean,\n): TextDocument => {\n if (isCollapsedSelection(selection)) return document;\n\n const { start, end } = getOrderedSelection(selection);\n const allMarked = document.content.every((block, index) => {\n if (index < start.block || index > end.block) return true;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return true;\n\n let position = 0;\n for (const inline of block.children) {\n const inlineStart = position;\n const inlineEnd = position + inline.text.length;\n position = inlineEnd;\n if (inlineEnd <= from || inlineStart >= to) continue;\n if (!inline.marks?.includes(mark)) return false;\n }\n return true;\n });\n\n const addMark = force ?? !allMarked;\n const content = document.content.map((block, index) => {\n if (index < start.block || index > end.block) return block;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return block;\n\n return {\n ...block,\n children: transformInlineRange(block.children, from, to, (marks) => {\n const next = new Set(marks);\n if (addMark) next.add(mark);\n else next.delete(mark);\n return MARK_ORDER.filter((item) => next.has(item));\n }),\n };\n });\n\n return { type: \"doc\", content };\n};\n\nexport const setTextVariant = (\n document: TextDocument,\n selection: TextSelection,\n variant: TextBlockVariant,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return {\n ...block,\n type: block.listType\n ? \"listItem\"\n : isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n };\n }),\n };\n};\n\nconst inlineWithOffset = (\n inlines: TextInline[],\n offset: number,\n): { before: TextInline[]; after: TextInline[] } => ({\n before: sliceInlines(inlines, 0, offset),\n after: sliceInlines(\n inlines,\n offset,\n inlines.reduce((sum, item) => sum + item.text.length, 0),\n ),\n});\n\nexport const insertDocumentAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n insertedDocument: TextDocument,\n): { document: TextDocument; selection: TextSelection } => {\n const source = normalizeTextDocument(document);\n const inserted = normalizeTextDocument(insertedDocument);\n const { start, end } = getOrderedSelection(selection);\n const startIndex = Math.max(\n 0,\n Math.min(start.block, source.content.length - 1),\n );\n const endIndex = Math.max(\n startIndex,\n Math.min(end.block, source.content.length - 1),\n );\n const startBlock = source.content[startIndex];\n const endBlock = source.content[endIndex];\n const startOffset = Math.max(\n 0,\n Math.min(start.offset, getBlockLength(startBlock)),\n );\n const endOffset = Math.max(0, Math.min(end.offset, getBlockLength(endBlock)));\n const prefix = inlineWithOffset(startBlock.children, startOffset).before;\n const suffix = inlineWithOffset(endBlock.children, endOffset).after;\n const insertedBlocks = inserted.content.map((block) => ({\n ...block,\n children: block.children.map((inline) => ({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n })),\n }));\n\n const leftSurvives = prefix.length > 0 || startOffset > 0;\n const rightSurvives =\n suffix.length > 0 || endOffset < getBlockLength(endBlock);\n const first = insertedBlocks[0];\n const last = insertedBlocks[insertedBlocks.length - 1];\n const separatePrefix = leftSurvives && first.type === \"heading\";\n const separateSuffix = rightSurvives && last.type === \"heading\";\n const replacement: TextBlock[] = [];\n\n if (separatePrefix) {\n replacement.push({\n ...startBlock,\n children: prefix,\n });\n }\n\n if (insertedBlocks.length === 1) {\n if (separatePrefix || separateSuffix) {\n replacement.push({\n ...first,\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n if (separateSuffix) {\n replacement.push({ ...endBlock, children: suffix });\n } else {\n const finalIndex = replacement.length - 1;\n replacement[finalIndex] = {\n ...replacement[finalIndex],\n children: normalizeInlines([\n ...replacement[finalIndex].children,\n ...suffix,\n ]),\n };\n }\n } else {\n const useInsertedStyle = !leftSurvives && !rightSurvives;\n replacement.push({\n ...(useInsertedStyle ? first : startBlock),\n type: useInsertedStyle ? first.type : startBlock.type,\n variant: useInsertedStyle ? first.variant : startBlock.variant,\n children: normalizeInlines([...prefix, ...first.children, ...suffix]),\n });\n }\n } else {\n replacement.push({\n ...(separatePrefix || !leftSurvives ? first : startBlock),\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n\n for (let index = 1; index < insertedBlocks.length - 1; index += 1) {\n replacement.push(insertedBlocks[index]);\n }\n\n if (separateSuffix) {\n replacement.push(last);\n replacement.push({ ...endBlock, children: suffix });\n } else {\n replacement.push({\n ...(rightSurvives ? endBlock : last),\n type: rightSurvives ? endBlock.type : last.type,\n variant: rightSurvives ? endBlock.variant : last.variant,\n children: normalizeInlines([...last.children, ...suffix]),\n });\n }\n }\n\n const content = [\n ...source.content.slice(0, startIndex),\n ...replacement,\n ...source.content.slice(endIndex + 1),\n ];\n const caretReplacementIndex = separateSuffix\n ? replacement.length - 2\n : replacement.length - 1;\n const caretBlock = replacement[Math.max(0, caretReplacementIndex)];\n const suffixLength = suffix.reduce(\n (total, inline) => total + inline.text.length,\n 0,\n );\n const caretOffset = separateSuffix\n ? getBlockLength(caretBlock)\n : Math.max(0, getBlockLength(caretBlock) - suffixLength);\n const caret = {\n block: startIndex + Math.max(0, caretReplacementIndex),\n offset: caretOffset,\n };\n\n return {\n document: {\n type: \"doc\",\n content: content.length ? content : createTextDocument().content,\n },\n selection: { anchor: caret, focus: caret },\n };\n};\n\nexport const insertTextAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n text: string,\n marks: TextMark[] = [],\n): { document: TextDocument; selection: TextSelection } => {\n const inserted: TextDocument = {\n type: \"doc\",\n content: text.split(\"\\n\").map((line) => ({\n type: \"paragraph\",\n variant: \"body1\",\n children: line\n ? [{ text: line, ...(marks.length ? { marks: [...marks] } : {}) }]\n : [],\n })),\n };\n return insertDocumentAtSelection(document, selection, inserted);\n};\n\n/** Apply text alignment to every block touched by the current selection. */\nexport const setTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n align: TextAlign,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return { ...block, align };\n }),\n };\n};\n\nexport const getTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n): TextAlign | null => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n if (selected.length === 0) return null;\n const align = selected[0].align ?? null;\n return selected.every((block) => (block.align ?? null) === align)\n ? align\n : null;\n};\n\n/** Toggle a list type for the selected blocks; null removes list formatting. */\nexport const setListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType | null,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n const remove =\n listType != null &&\n selected.length > 0 &&\n selected.every((block) => block.listType === listType);\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n if (remove || listType == null) {\n const { listType: _listType, ...rest } = block;\n return {\n ...rest,\n type: block.type === \"listItem\" ? \"paragraph\" : block.type,\n };\n }\n return { ...block, type: \"listItem\", listType };\n }),\n };\n};\n\nexport const getListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType,\n): boolean => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n return (\n selected.length > 0 &&\n selected.every((block) => block.listType === listType)\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
// src/components/editors/text-editor/text-document.ts
|
|
2
|
+
const HEADING_VARIANTS = /* @__PURE__ */ new Set([
|
|
3
|
+
"display1",
|
|
4
|
+
"display2",
|
|
5
|
+
"headline1",
|
|
6
|
+
"headline2",
|
|
7
|
+
"headline3",
|
|
8
|
+
"headline4"
|
|
9
|
+
]);
|
|
10
|
+
const MARK_ORDER = [
|
|
11
|
+
"bold",
|
|
12
|
+
"italic",
|
|
13
|
+
"underline",
|
|
14
|
+
"strike"
|
|
15
|
+
];
|
|
16
|
+
const isHeadingVariant = (variant) => HEADING_VARIANTS.has(variant);
|
|
17
|
+
const createTextDocument = (text = "") => ({
|
|
18
|
+
type: "doc",
|
|
19
|
+
content: [{
|
|
20
|
+
type: "paragraph",
|
|
21
|
+
variant: "body1",
|
|
22
|
+
children: text ? [{ text }] : []
|
|
23
|
+
}]
|
|
24
|
+
});
|
|
25
|
+
const createTextSelection = (block = 0, offset = 0) => ({
|
|
26
|
+
anchor: {
|
|
27
|
+
block,
|
|
28
|
+
offset
|
|
29
|
+
},
|
|
30
|
+
focus: {
|
|
31
|
+
block,
|
|
32
|
+
offset
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
const getBlockLength = (block) => block.children.reduce((length, child) => length + child.text.length, 0);
|
|
36
|
+
const isCollapsedSelection = (selection) => selection.anchor.block === selection.focus.block && selection.anchor.offset === selection.focus.offset;
|
|
37
|
+
const getOrderedSelection = (selection) => {
|
|
38
|
+
const { anchor, focus } = selection;
|
|
39
|
+
if (anchor.block < focus.block || anchor.block === focus.block && anchor.offset <= focus.offset) return {
|
|
40
|
+
start: anchor,
|
|
41
|
+
end: focus
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
start: focus,
|
|
45
|
+
end: anchor
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
const normalizeMarks = (marks = []) => MARK_ORDER.filter((mark) => marks.includes(mark));
|
|
49
|
+
const sameMarks = (left = [], right = []) => {
|
|
50
|
+
const a = normalizeMarks(left);
|
|
51
|
+
const b = normalizeMarks(right);
|
|
52
|
+
return a.length === b.length && a.every((mark, index) => mark === b[index]);
|
|
53
|
+
};
|
|
54
|
+
const normalizeInlines = (inlines) => {
|
|
55
|
+
const result = [];
|
|
56
|
+
for (const inline of inlines) {
|
|
57
|
+
if (!inline.text) continue;
|
|
58
|
+
const marks = normalizeMarks(inline.marks);
|
|
59
|
+
const previous = result[result.length - 1];
|
|
60
|
+
if (previous && sameMarks(previous.marks, marks)) {
|
|
61
|
+
previous.text += inline.text;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
result.push({
|
|
65
|
+
text: inline.text,
|
|
66
|
+
...marks.length ? { marks } : {}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
};
|
|
71
|
+
const isTextMark = (value) => value === "bold" || value === "italic" || value === "underline" || value === "strike";
|
|
72
|
+
const isTextVariant = (value) => value === "display1" || value === "display2" || value === "headline1" || value === "headline2" || value === "headline3" || value === "headline4" || value === "subtitle1" || value === "subtitle2" || value === "body1" || value === "body2" || value === "button" || value === "caption" || value === "overline";
|
|
73
|
+
const normalizeTextDocument = (input) => {
|
|
74
|
+
const content = Array.isArray(input?.content) ? input.content.flatMap((candidate) => {
|
|
75
|
+
if (!candidate || !Array.isArray(candidate.children)) return [];
|
|
76
|
+
const variant = isTextVariant(candidate.variant) ? candidate.variant : "body1";
|
|
77
|
+
const children = normalizeInlines(candidate.children.flatMap((inline) => {
|
|
78
|
+
if (!inline || typeof inline.text !== "string") return [];
|
|
79
|
+
const marks = Array.isArray(inline.marks) ? inline.marks.filter(isTextMark) : [];
|
|
80
|
+
return [{
|
|
81
|
+
text: inline.text,
|
|
82
|
+
marks
|
|
83
|
+
}];
|
|
84
|
+
}));
|
|
85
|
+
const listType = candidate.listType === "bullet" || candidate.listType === "ordered" ? candidate.listType : void 0;
|
|
86
|
+
const align = candidate.align === "left" || candidate.align === "center" || candidate.align === "right" || candidate.align === "justify" ? candidate.align : void 0;
|
|
87
|
+
const headingLevel = (listType ? "listItem" : candidate.type === "heading" && isHeadingVariant(variant) ? "heading" : "paragraph") === "heading" && Number.isInteger(candidate.headingLevel) && candidate.headingLevel >= 1 && candidate.headingLevel <= 6 ? candidate.headingLevel : void 0;
|
|
88
|
+
return [{
|
|
89
|
+
type: listType ? "listItem" : candidate.type === "heading" && isHeadingVariant(variant) ? "heading" : "paragraph",
|
|
90
|
+
variant,
|
|
91
|
+
children,
|
|
92
|
+
...listType ? { listType } : {},
|
|
93
|
+
...align ? { align } : {},
|
|
94
|
+
...headingLevel ? { headingLevel } : {}
|
|
95
|
+
}];
|
|
96
|
+
}) : [];
|
|
97
|
+
return {
|
|
98
|
+
type: "doc",
|
|
99
|
+
content: content.length ? content : [{
|
|
100
|
+
type: "paragraph",
|
|
101
|
+
variant: "body1",
|
|
102
|
+
children: []
|
|
103
|
+
}]
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
const sliceInlines = (inlines, from, to) => {
|
|
107
|
+
if (to <= from) return [];
|
|
108
|
+
const result = [];
|
|
109
|
+
let position = 0;
|
|
110
|
+
for (const inline of inlines) {
|
|
111
|
+
const start = position;
|
|
112
|
+
const end = position + inline.text.length;
|
|
113
|
+
const overlapStart = Math.max(start, from);
|
|
114
|
+
const overlapEnd = Math.min(end, to);
|
|
115
|
+
if (overlapStart < overlapEnd) result.push({
|
|
116
|
+
text: inline.text.slice(overlapStart - start, overlapEnd - start),
|
|
117
|
+
...inline.marks?.length ? { marks: [...inline.marks] } : {}
|
|
118
|
+
});
|
|
119
|
+
position = end;
|
|
120
|
+
if (position >= to) break;
|
|
121
|
+
}
|
|
122
|
+
return normalizeInlines(result);
|
|
123
|
+
};
|
|
124
|
+
const transformInlineRange = (inlines, from, to, transform) => {
|
|
125
|
+
if (to <= from) return inlines.map((inline) => ({ ...inline }));
|
|
126
|
+
const result = [];
|
|
127
|
+
let position = 0;
|
|
128
|
+
for (const inline of inlines) {
|
|
129
|
+
const start = position;
|
|
130
|
+
const end = start + inline.text.length;
|
|
131
|
+
if (end <= from || start >= to) result.push({
|
|
132
|
+
...inline,
|
|
133
|
+
...inline.marks ? { marks: [...inline.marks] } : {}
|
|
134
|
+
});
|
|
135
|
+
else {
|
|
136
|
+
const leftLength = Math.max(0, from - start);
|
|
137
|
+
const rightStart = Math.max(0, to - start);
|
|
138
|
+
const marks = inline.marks ?? [];
|
|
139
|
+
if (leftLength > 0) result.push({
|
|
140
|
+
text: inline.text.slice(0, leftLength),
|
|
141
|
+
...marks.length ? { marks: [...marks] } : {}
|
|
142
|
+
});
|
|
143
|
+
const middleEnd = Math.min(inline.text.length, to - start);
|
|
144
|
+
if (middleEnd > leftLength) result.push({
|
|
145
|
+
text: inline.text.slice(leftLength, middleEnd),
|
|
146
|
+
marks: transform([...marks])
|
|
147
|
+
});
|
|
148
|
+
if (rightStart < inline.text.length) result.push({
|
|
149
|
+
text: inline.text.slice(Math.max(0, rightStart)),
|
|
150
|
+
...marks.length ? { marks: [...marks] } : {}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
position = end;
|
|
154
|
+
}
|
|
155
|
+
return normalizeInlines(result);
|
|
156
|
+
};
|
|
157
|
+
const applyMark = (document, selection, mark, force) => {
|
|
158
|
+
if (isCollapsedSelection(selection)) return document;
|
|
159
|
+
const { start, end } = getOrderedSelection(selection);
|
|
160
|
+
const allMarked = document.content.every((block, index) => {
|
|
161
|
+
if (index < start.block || index > end.block) return true;
|
|
162
|
+
const from = index === start.block ? start.offset : 0;
|
|
163
|
+
const to = index === end.block ? end.offset : getBlockLength(block);
|
|
164
|
+
if (to <= from) return true;
|
|
165
|
+
let position = 0;
|
|
166
|
+
for (const inline of block.children) {
|
|
167
|
+
const inlineStart = position;
|
|
168
|
+
const inlineEnd = position + inline.text.length;
|
|
169
|
+
position = inlineEnd;
|
|
170
|
+
if (inlineEnd <= from || inlineStart >= to) continue;
|
|
171
|
+
if (!inline.marks?.includes(mark)) return false;
|
|
172
|
+
}
|
|
173
|
+
return true;
|
|
174
|
+
});
|
|
175
|
+
const addMark = force ?? !allMarked;
|
|
176
|
+
return {
|
|
177
|
+
type: "doc",
|
|
178
|
+
content: document.content.map((block, index) => {
|
|
179
|
+
if (index < start.block || index > end.block) return block;
|
|
180
|
+
const from = index === start.block ? start.offset : 0;
|
|
181
|
+
const to = index === end.block ? end.offset : getBlockLength(block);
|
|
182
|
+
if (to <= from) return block;
|
|
183
|
+
return {
|
|
184
|
+
...block,
|
|
185
|
+
children: transformInlineRange(block.children, from, to, (marks) => {
|
|
186
|
+
const next = new Set(marks);
|
|
187
|
+
if (addMark) next.add(mark);
|
|
188
|
+
else next.delete(mark);
|
|
189
|
+
return MARK_ORDER.filter((item) => next.has(item));
|
|
190
|
+
})
|
|
191
|
+
};
|
|
192
|
+
})
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
const setTextVariant = (document, selection, variant) => {
|
|
196
|
+
const { start, end } = getOrderedSelection(selection);
|
|
197
|
+
const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
|
|
198
|
+
return {
|
|
199
|
+
type: "doc",
|
|
200
|
+
content: document.content.map((block, index) => {
|
|
201
|
+
if (index < start.block || index > lastBlock) return block;
|
|
202
|
+
return {
|
|
203
|
+
...block,
|
|
204
|
+
type: block.listType ? "listItem" : isHeadingVariant(variant) ? "heading" : "paragraph",
|
|
205
|
+
variant
|
|
206
|
+
};
|
|
207
|
+
})
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
const inlineWithOffset = (inlines, offset) => ({
|
|
211
|
+
before: sliceInlines(inlines, 0, offset),
|
|
212
|
+
after: sliceInlines(inlines, offset, inlines.reduce((sum, item) => sum + item.text.length, 0))
|
|
213
|
+
});
|
|
214
|
+
const insertDocumentAtSelection = (document, selection, insertedDocument) => {
|
|
215
|
+
const source = normalizeTextDocument(document);
|
|
216
|
+
const inserted = normalizeTextDocument(insertedDocument);
|
|
217
|
+
const { start, end } = getOrderedSelection(selection);
|
|
218
|
+
const startIndex = Math.max(0, Math.min(start.block, source.content.length - 1));
|
|
219
|
+
const endIndex = Math.max(startIndex, Math.min(end.block, source.content.length - 1));
|
|
220
|
+
const startBlock = source.content[startIndex];
|
|
221
|
+
const endBlock = source.content[endIndex];
|
|
222
|
+
const startOffset = Math.max(0, Math.min(start.offset, getBlockLength(startBlock)));
|
|
223
|
+
const endOffset = Math.max(0, Math.min(end.offset, getBlockLength(endBlock)));
|
|
224
|
+
const prefix = inlineWithOffset(startBlock.children, startOffset).before;
|
|
225
|
+
const suffix = inlineWithOffset(endBlock.children, endOffset).after;
|
|
226
|
+
const insertedBlocks = inserted.content.map((block) => ({
|
|
227
|
+
...block,
|
|
228
|
+
children: block.children.map((inline) => ({
|
|
229
|
+
...inline,
|
|
230
|
+
...inline.marks ? { marks: [...inline.marks] } : {}
|
|
231
|
+
}))
|
|
232
|
+
}));
|
|
233
|
+
const leftSurvives = prefix.length > 0 || startOffset > 0;
|
|
234
|
+
const rightSurvives = suffix.length > 0 || endOffset < getBlockLength(endBlock);
|
|
235
|
+
const first = insertedBlocks[0];
|
|
236
|
+
const last = insertedBlocks[insertedBlocks.length - 1];
|
|
237
|
+
const separatePrefix = leftSurvives && first.type === "heading";
|
|
238
|
+
const separateSuffix = rightSurvives && last.type === "heading";
|
|
239
|
+
const replacement = [];
|
|
240
|
+
if (separatePrefix) replacement.push({
|
|
241
|
+
...startBlock,
|
|
242
|
+
children: prefix
|
|
243
|
+
});
|
|
244
|
+
if (insertedBlocks.length === 1) {
|
|
245
|
+
if (separatePrefix || separateSuffix) {
|
|
246
|
+
replacement.push({
|
|
247
|
+
...first,
|
|
248
|
+
type: separatePrefix || !leftSurvives ? first.type : startBlock.type,
|
|
249
|
+
variant: separatePrefix || !leftSurvives ? first.variant : startBlock.variant,
|
|
250
|
+
children: separatePrefix ? first.children : normalizeInlines([...prefix, ...first.children])
|
|
251
|
+
});
|
|
252
|
+
if (separateSuffix) replacement.push({
|
|
253
|
+
...endBlock,
|
|
254
|
+
children: suffix
|
|
255
|
+
});
|
|
256
|
+
else {
|
|
257
|
+
const finalIndex = replacement.length - 1;
|
|
258
|
+
replacement[finalIndex] = {
|
|
259
|
+
...replacement[finalIndex],
|
|
260
|
+
children: normalizeInlines([...replacement[finalIndex].children, ...suffix])
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
} else {
|
|
264
|
+
const useInsertedStyle = !leftSurvives && !rightSurvives;
|
|
265
|
+
replacement.push({
|
|
266
|
+
...useInsertedStyle ? first : startBlock,
|
|
267
|
+
type: useInsertedStyle ? first.type : startBlock.type,
|
|
268
|
+
variant: useInsertedStyle ? first.variant : startBlock.variant,
|
|
269
|
+
children: normalizeInlines([
|
|
270
|
+
...prefix,
|
|
271
|
+
...first.children,
|
|
272
|
+
...suffix
|
|
273
|
+
])
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
} else {
|
|
277
|
+
replacement.push({
|
|
278
|
+
...separatePrefix || !leftSurvives ? first : startBlock,
|
|
279
|
+
type: separatePrefix || !leftSurvives ? first.type : startBlock.type,
|
|
280
|
+
variant: separatePrefix || !leftSurvives ? first.variant : startBlock.variant,
|
|
281
|
+
children: separatePrefix ? first.children : normalizeInlines([...prefix, ...first.children])
|
|
282
|
+
});
|
|
283
|
+
for (let index = 1; index < insertedBlocks.length - 1; index += 1) replacement.push(insertedBlocks[index]);
|
|
284
|
+
if (separateSuffix) {
|
|
285
|
+
replacement.push(last);
|
|
286
|
+
replacement.push({
|
|
287
|
+
...endBlock,
|
|
288
|
+
children: suffix
|
|
289
|
+
});
|
|
290
|
+
} else replacement.push({
|
|
291
|
+
...rightSurvives ? endBlock : last,
|
|
292
|
+
type: rightSurvives ? endBlock.type : last.type,
|
|
293
|
+
variant: rightSurvives ? endBlock.variant : last.variant,
|
|
294
|
+
children: normalizeInlines([...last.children, ...suffix])
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
const content = [
|
|
298
|
+
...source.content.slice(0, startIndex),
|
|
299
|
+
...replacement,
|
|
300
|
+
...source.content.slice(endIndex + 1)
|
|
301
|
+
];
|
|
302
|
+
const caretReplacementIndex = separateSuffix ? replacement.length - 2 : replacement.length - 1;
|
|
303
|
+
const caretBlock = replacement[Math.max(0, caretReplacementIndex)];
|
|
304
|
+
const suffixLength = suffix.reduce((total, inline) => total + inline.text.length, 0);
|
|
305
|
+
const caretOffset = separateSuffix ? getBlockLength(caretBlock) : Math.max(0, getBlockLength(caretBlock) - suffixLength);
|
|
306
|
+
const caret = {
|
|
307
|
+
block: startIndex + Math.max(0, caretReplacementIndex),
|
|
308
|
+
offset: caretOffset
|
|
309
|
+
};
|
|
310
|
+
return {
|
|
311
|
+
document: {
|
|
312
|
+
type: "doc",
|
|
313
|
+
content: content.length ? content : createTextDocument().content
|
|
314
|
+
},
|
|
315
|
+
selection: {
|
|
316
|
+
anchor: caret,
|
|
317
|
+
focus: caret
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
};
|
|
321
|
+
const insertTextAtSelection = (document, selection, text, marks = []) => {
|
|
322
|
+
const inserted = {
|
|
323
|
+
type: "doc",
|
|
324
|
+
content: text.split("\n").map((line) => ({
|
|
325
|
+
type: "paragraph",
|
|
326
|
+
variant: "body1",
|
|
327
|
+
children: line ? [{
|
|
328
|
+
text: line,
|
|
329
|
+
...marks.length ? { marks: [...marks] } : {}
|
|
330
|
+
}] : []
|
|
331
|
+
}))
|
|
332
|
+
};
|
|
333
|
+
return insertDocumentAtSelection(document, selection, inserted);
|
|
334
|
+
};
|
|
335
|
+
/** Apply text alignment to every block touched by the current selection. */
|
|
336
|
+
const setTextAlign = (document, selection, align) => {
|
|
337
|
+
const { start, end } = getOrderedSelection(selection);
|
|
338
|
+
const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
|
|
339
|
+
return {
|
|
340
|
+
type: "doc",
|
|
341
|
+
content: document.content.map((block, index) => {
|
|
342
|
+
if (index < start.block || index > lastBlock) return block;
|
|
343
|
+
return {
|
|
344
|
+
...block,
|
|
345
|
+
align
|
|
346
|
+
};
|
|
347
|
+
})
|
|
348
|
+
};
|
|
349
|
+
};
|
|
350
|
+
const getTextAlign = (document, selection) => {
|
|
351
|
+
const { start, end } = getOrderedSelection(selection);
|
|
352
|
+
const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
|
|
353
|
+
const selected = document.content.slice(start.block, lastBlock + 1);
|
|
354
|
+
if (selected.length === 0) return null;
|
|
355
|
+
const align = selected[0].align ?? null;
|
|
356
|
+
return selected.every((block) => (block.align ?? null) === align) ? align : null;
|
|
357
|
+
};
|
|
358
|
+
/** Toggle a list type for the selected blocks; null removes list formatting. */
|
|
359
|
+
const setListType = (document, selection, listType) => {
|
|
360
|
+
const { start, end } = getOrderedSelection(selection);
|
|
361
|
+
const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
|
|
362
|
+
const selected = document.content.slice(start.block, lastBlock + 1);
|
|
363
|
+
const remove = listType != null && selected.length > 0 && selected.every((block) => block.listType === listType);
|
|
364
|
+
return {
|
|
365
|
+
type: "doc",
|
|
366
|
+
content: document.content.map((block, index) => {
|
|
367
|
+
if (index < start.block || index > lastBlock) return block;
|
|
368
|
+
if (remove || listType == null) {
|
|
369
|
+
const { listType: _listType, ...rest } = block;
|
|
370
|
+
return {
|
|
371
|
+
...rest,
|
|
372
|
+
type: block.type === "listItem" ? "paragraph" : block.type
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
return {
|
|
376
|
+
...block,
|
|
377
|
+
type: "listItem",
|
|
378
|
+
listType
|
|
379
|
+
};
|
|
380
|
+
})
|
|
381
|
+
};
|
|
382
|
+
};
|
|
383
|
+
const getListType = (document, selection, listType) => {
|
|
384
|
+
const { start, end } = getOrderedSelection(selection);
|
|
385
|
+
const lastBlock = isCollapsedSelection(selection) ? start.block : end.offset === 0 && end.block > start.block ? end.block - 1 : end.block;
|
|
386
|
+
const selected = document.content.slice(start.block, lastBlock + 1);
|
|
387
|
+
return selected.length > 0 && selected.every((block) => block.listType === listType);
|
|
388
|
+
};
|
|
389
|
+
export { applyMark, createTextDocument, createTextSelection, getBlockLength, getListType, getOrderedSelection, getTextAlign, insertDocumentAtSelection, insertTextAtSelection, isCollapsedSelection, isHeadingVariant, normalizeInlines, normalizeTextDocument, setListType, setTextAlign, setTextVariant };
|
|
390
|
+
|
|
391
|
+
//# sourceMappingURL=text-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-document.js","names":[],"sources":["../../../../src/components/editors/text-editor/text-document.ts"],"sourcesContent":["import type {\n TextBlock,\n TextDocument,\n TextInline,\n TextMark,\n TextPoint,\n TextSelection,\n TextBlockVariant,\n TextAlign,\n TextListType,\n} from \"./text-editor.types\";\n\nconst HEADING_VARIANTS = new Set<TextBlockVariant>([\n \"display1\",\n \"display2\",\n \"headline1\",\n \"headline2\",\n \"headline3\",\n \"headline4\",\n]);\n\nconst MARK_ORDER: TextMark[] = [\"bold\", \"italic\", \"underline\", \"strike\"];\n\nexport const isHeadingVariant = (variant: TextBlockVariant): boolean =>\n HEADING_VARIANTS.has(variant);\n\nexport const createTextDocument = (text = \"\"): TextDocument => ({\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n variant: \"body1\",\n children: text ? [{ text }] : [],\n },\n ],\n});\n\nexport const createTextSelection = (block = 0, offset = 0): TextSelection => ({\n anchor: { block, offset },\n focus: { block, offset },\n});\n\nexport const getBlockText = (block: TextBlock): string =>\n block.children.map((child) => child.text).join(\"\");\n\nexport const getBlockLength = (block: TextBlock): number =>\n block.children.reduce((length, child) => length + child.text.length, 0);\n\nexport const isCollapsedSelection = (selection: TextSelection): boolean =>\n selection.anchor.block === selection.focus.block &&\n selection.anchor.offset === selection.focus.offset;\n\nexport const getOrderedSelection = (\n selection: TextSelection,\n): { start: TextPoint; end: TextPoint } => {\n const { anchor, focus } = selection;\n if (\n anchor.block < focus.block ||\n (anchor.block === focus.block && anchor.offset <= focus.offset)\n ) {\n return { start: anchor, end: focus };\n }\n\n return { start: focus, end: anchor };\n};\n\nconst normalizeMarks = (marks: TextMark[] = []): TextMark[] =>\n MARK_ORDER.filter((mark) => marks.includes(mark));\n\nconst sameMarks = (left: TextMark[] = [], right: TextMark[] = []): boolean => {\n const a = normalizeMarks(left);\n const b = normalizeMarks(right);\n return a.length === b.length && a.every((mark, index) => mark === b[index]);\n};\n\nexport const normalizeInlines = (inlines: TextInline[]): TextInline[] => {\n const result: TextInline[] = [];\n\n for (const inline of inlines) {\n if (!inline.text) continue;\n\n const marks = normalizeMarks(inline.marks);\n const previous = result[result.length - 1];\n\n if (previous && sameMarks(previous.marks, marks)) {\n previous.text += inline.text;\n continue;\n }\n\n result.push({\n text: inline.text,\n ...(marks.length ? { marks } : {}),\n });\n }\n\n return result;\n};\n\nconst isTextMark = (value: unknown): value is TextMark =>\n value === \"bold\" ||\n value === \"italic\" ||\n value === \"underline\" ||\n value === \"strike\";\n\nconst isTextVariant = (value: unknown): value is TextBlockVariant =>\n value === \"display1\" ||\n value === \"display2\" ||\n value === \"headline1\" ||\n value === \"headline2\" ||\n value === \"headline3\" ||\n value === \"headline4\" ||\n value === \"subtitle1\" ||\n value === \"subtitle2\" ||\n value === \"body1\" ||\n value === \"body2\" ||\n value === \"button\" ||\n value === \"caption\" ||\n value === \"overline\";\n\nexport const normalizeTextDocument = (input: TextDocument): TextDocument => {\n const content = Array.isArray(input?.content)\n ? input.content.flatMap((candidate) => {\n if (!candidate || !Array.isArray(candidate.children)) return [];\n\n const variant = isTextVariant(candidate.variant)\n ? candidate.variant\n : \"body1\";\n\n const children = normalizeInlines(\n candidate.children.flatMap((inline) => {\n if (!inline || typeof inline.text !== \"string\") return [];\n const marks = Array.isArray(inline.marks)\n ? inline.marks.filter(isTextMark)\n : [];\n return [{ text: inline.text, marks }];\n }),\n );\n\n const listType =\n candidate.listType === \"bullet\" || candidate.listType === \"ordered\"\n ? candidate.listType\n : undefined;\n const align =\n candidate.align === \"left\" ||\n candidate.align === \"center\" ||\n candidate.align === \"right\" ||\n candidate.align === \"justify\"\n ? (candidate.align as TextAlign)\n : undefined;\n\n const type = listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\";\n const headingLevel =\n type === \"heading\" &&\n Number.isInteger(candidate.headingLevel) &&\n candidate.headingLevel! >= 1 &&\n candidate.headingLevel! <= 6\n ? candidate.headingLevel\n : undefined;\n\n return [\n {\n type: listType\n ? \"listItem\"\n : candidate.type === \"heading\" && isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n children,\n ...(listType ? { listType } : {}),\n ...(align ? { align } : {}),\n ...(headingLevel ? { headingLevel } : {}),\n } satisfies TextBlock,\n ];\n })\n : [];\n\n return {\n type: \"doc\",\n content: content.length\n ? content\n : [{ type: \"paragraph\", variant: \"body1\", children: [] }],\n };\n};\n\nconst sliceInlines = (\n inlines: TextInline[],\n from: number,\n to: number,\n): TextInline[] => {\n if (to <= from) return [];\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = position + inline.text.length;\n const overlapStart = Math.max(start, from);\n const overlapEnd = Math.min(end, to);\n\n if (overlapStart < overlapEnd) {\n result.push({\n text: inline.text.slice(overlapStart - start, overlapEnd - start),\n ...(inline.marks?.length ? { marks: [...inline.marks] } : {}),\n });\n }\n\n position = end;\n if (position >= to) break;\n }\n\n return normalizeInlines(result);\n};\n\nconst transformInlineRange = (\n inlines: TextInline[],\n from: number,\n to: number,\n transform: (marks: TextMark[]) => TextMark[],\n): TextInline[] => {\n if (to <= from) return inlines.map((inline) => ({ ...inline }));\n\n const result: TextInline[] = [];\n let position = 0;\n\n for (const inline of inlines) {\n const start = position;\n const end = start + inline.text.length;\n\n if (end <= from || start >= to) {\n result.push({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n });\n } else {\n const leftLength = Math.max(0, from - start);\n const rightStart = Math.max(0, to - start);\n const marks = inline.marks ?? [];\n\n if (leftLength > 0) {\n result.push({\n text: inline.text.slice(0, leftLength),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n\n const middleEnd = Math.min(inline.text.length, to - start);\n if (middleEnd > leftLength) {\n result.push({\n text: inline.text.slice(leftLength, middleEnd),\n marks: transform([...marks]),\n });\n }\n\n if (rightStart < inline.text.length) {\n result.push({\n text: inline.text.slice(Math.max(0, rightStart)),\n ...(marks.length ? { marks: [...marks] } : {}),\n });\n }\n }\n\n position = end;\n }\n\n return normalizeInlines(result);\n};\n\nexport const applyMark = (\n document: TextDocument,\n selection: TextSelection,\n mark: TextMark,\n force?: boolean,\n): TextDocument => {\n if (isCollapsedSelection(selection)) return document;\n\n const { start, end } = getOrderedSelection(selection);\n const allMarked = document.content.every((block, index) => {\n if (index < start.block || index > end.block) return true;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return true;\n\n let position = 0;\n for (const inline of block.children) {\n const inlineStart = position;\n const inlineEnd = position + inline.text.length;\n position = inlineEnd;\n if (inlineEnd <= from || inlineStart >= to) continue;\n if (!inline.marks?.includes(mark)) return false;\n }\n return true;\n });\n\n const addMark = force ?? !allMarked;\n const content = document.content.map((block, index) => {\n if (index < start.block || index > end.block) return block;\n const from = index === start.block ? start.offset : 0;\n const to = index === end.block ? end.offset : getBlockLength(block);\n if (to <= from) return block;\n\n return {\n ...block,\n children: transformInlineRange(block.children, from, to, (marks) => {\n const next = new Set(marks);\n if (addMark) next.add(mark);\n else next.delete(mark);\n return MARK_ORDER.filter((item) => next.has(item));\n }),\n };\n });\n\n return { type: \"doc\", content };\n};\n\nexport const setTextVariant = (\n document: TextDocument,\n selection: TextSelection,\n variant: TextBlockVariant,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return {\n ...block,\n type: block.listType\n ? \"listItem\"\n : isHeadingVariant(variant)\n ? \"heading\"\n : \"paragraph\",\n variant,\n };\n }),\n };\n};\n\nconst inlineWithOffset = (\n inlines: TextInline[],\n offset: number,\n): { before: TextInline[]; after: TextInline[] } => ({\n before: sliceInlines(inlines, 0, offset),\n after: sliceInlines(\n inlines,\n offset,\n inlines.reduce((sum, item) => sum + item.text.length, 0),\n ),\n});\n\nexport const insertDocumentAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n insertedDocument: TextDocument,\n): { document: TextDocument; selection: TextSelection } => {\n const source = normalizeTextDocument(document);\n const inserted = normalizeTextDocument(insertedDocument);\n const { start, end } = getOrderedSelection(selection);\n const startIndex = Math.max(\n 0,\n Math.min(start.block, source.content.length - 1),\n );\n const endIndex = Math.max(\n startIndex,\n Math.min(end.block, source.content.length - 1),\n );\n const startBlock = source.content[startIndex];\n const endBlock = source.content[endIndex];\n const startOffset = Math.max(\n 0,\n Math.min(start.offset, getBlockLength(startBlock)),\n );\n const endOffset = Math.max(0, Math.min(end.offset, getBlockLength(endBlock)));\n const prefix = inlineWithOffset(startBlock.children, startOffset).before;\n const suffix = inlineWithOffset(endBlock.children, endOffset).after;\n const insertedBlocks = inserted.content.map((block) => ({\n ...block,\n children: block.children.map((inline) => ({\n ...inline,\n ...(inline.marks ? { marks: [...inline.marks] } : {}),\n })),\n }));\n\n const leftSurvives = prefix.length > 0 || startOffset > 0;\n const rightSurvives =\n suffix.length > 0 || endOffset < getBlockLength(endBlock);\n const first = insertedBlocks[0];\n const last = insertedBlocks[insertedBlocks.length - 1];\n const separatePrefix = leftSurvives && first.type === \"heading\";\n const separateSuffix = rightSurvives && last.type === \"heading\";\n const replacement: TextBlock[] = [];\n\n if (separatePrefix) {\n replacement.push({\n ...startBlock,\n children: prefix,\n });\n }\n\n if (insertedBlocks.length === 1) {\n if (separatePrefix || separateSuffix) {\n replacement.push({\n ...first,\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n if (separateSuffix) {\n replacement.push({ ...endBlock, children: suffix });\n } else {\n const finalIndex = replacement.length - 1;\n replacement[finalIndex] = {\n ...replacement[finalIndex],\n children: normalizeInlines([\n ...replacement[finalIndex].children,\n ...suffix,\n ]),\n };\n }\n } else {\n const useInsertedStyle = !leftSurvives && !rightSurvives;\n replacement.push({\n ...(useInsertedStyle ? first : startBlock),\n type: useInsertedStyle ? first.type : startBlock.type,\n variant: useInsertedStyle ? first.variant : startBlock.variant,\n children: normalizeInlines([...prefix, ...first.children, ...suffix]),\n });\n }\n } else {\n replacement.push({\n ...(separatePrefix || !leftSurvives ? first : startBlock),\n type: separatePrefix || !leftSurvives ? first.type : startBlock.type,\n variant:\n separatePrefix || !leftSurvives ? first.variant : startBlock.variant,\n children: separatePrefix\n ? first.children\n : normalizeInlines([...prefix, ...first.children]),\n });\n\n for (let index = 1; index < insertedBlocks.length - 1; index += 1) {\n replacement.push(insertedBlocks[index]);\n }\n\n if (separateSuffix) {\n replacement.push(last);\n replacement.push({ ...endBlock, children: suffix });\n } else {\n replacement.push({\n ...(rightSurvives ? endBlock : last),\n type: rightSurvives ? endBlock.type : last.type,\n variant: rightSurvives ? endBlock.variant : last.variant,\n children: normalizeInlines([...last.children, ...suffix]),\n });\n }\n }\n\n const content = [\n ...source.content.slice(0, startIndex),\n ...replacement,\n ...source.content.slice(endIndex + 1),\n ];\n const caretReplacementIndex = separateSuffix\n ? replacement.length - 2\n : replacement.length - 1;\n const caretBlock = replacement[Math.max(0, caretReplacementIndex)];\n const suffixLength = suffix.reduce(\n (total, inline) => total + inline.text.length,\n 0,\n );\n const caretOffset = separateSuffix\n ? getBlockLength(caretBlock)\n : Math.max(0, getBlockLength(caretBlock) - suffixLength);\n const caret = {\n block: startIndex + Math.max(0, caretReplacementIndex),\n offset: caretOffset,\n };\n\n return {\n document: {\n type: \"doc\",\n content: content.length ? content : createTextDocument().content,\n },\n selection: { anchor: caret, focus: caret },\n };\n};\n\nexport const insertTextAtSelection = (\n document: TextDocument,\n selection: TextSelection,\n text: string,\n marks: TextMark[] = [],\n): { document: TextDocument; selection: TextSelection } => {\n const inserted: TextDocument = {\n type: \"doc\",\n content: text.split(\"\\n\").map((line) => ({\n type: \"paragraph\",\n variant: \"body1\",\n children: line\n ? [{ text: line, ...(marks.length ? { marks: [...marks] } : {}) }]\n : [],\n })),\n };\n return insertDocumentAtSelection(document, selection, inserted);\n};\n\n/** Apply text alignment to every block touched by the current selection. */\nexport const setTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n align: TextAlign,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n return { ...block, align };\n }),\n };\n};\n\nexport const getTextAlign = (\n document: TextDocument,\n selection: TextSelection,\n): TextAlign | null => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n if (selected.length === 0) return null;\n const align = selected[0].align ?? null;\n return selected.every((block) => (block.align ?? null) === align)\n ? align\n : null;\n};\n\n/** Toggle a list type for the selected blocks; null removes list formatting. */\nexport const setListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType | null,\n): TextDocument => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n const remove =\n listType != null &&\n selected.length > 0 &&\n selected.every((block) => block.listType === listType);\n return {\n type: \"doc\",\n content: document.content.map((block, index) => {\n if (index < start.block || index > lastBlock) return block;\n if (remove || listType == null) {\n const { listType: _listType, ...rest } = block;\n return {\n ...rest,\n type: block.type === \"listItem\" ? \"paragraph\" : block.type,\n };\n }\n return { ...block, type: \"listItem\", listType };\n }),\n };\n};\n\nexport const getListType = (\n document: TextDocument,\n selection: TextSelection,\n listType: TextListType,\n): boolean => {\n const { start, end } = getOrderedSelection(selection);\n const lastBlock = isCollapsedSelection(selection)\n ? start.block\n : end.offset === 0 && end.block > start.block\n ? end.block - 1\n : end.block;\n const selected = document.content.slice(start.block, lastBlock + 1);\n return (\n selected.length > 0 &&\n selected.every((block) => block.listType === listType)\n );\n};\n"],"mappings":";AAYA,MAAM,mCAAmB,IAAI,IAAsB;CACjD;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,aAAyB;CAAC;CAAQ;CAAU;CAAa;AAAQ;AAEvE,MAAa,oBAAoB,YAC/B,iBAAiB,IAAI,OAAO;AAE9B,MAAa,sBAAsB,OAAO,QAAsB;CAC9D,MAAM;CACN,SAAS,CACP;EACE,MAAM;EACN,SAAS;EACT,UAAU,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;CACjC,CACF;AACF;AAEA,MAAa,uBAAuB,QAAQ,GAAG,SAAS,OAAsB;CAC5E,QAAQ;EAAE;EAAO;CAAO;CACxB,OAAO;EAAE;EAAO;CAAO;AACzB;AAKA,MAAa,kBAAkB,UAC7B,MAAM,SAAS,QAAQ,QAAQ,UAAU,SAAS,MAAM,KAAK,QAAQ,CAAC;AAExE,MAAa,wBAAwB,cACnC,UAAU,OAAO,UAAU,UAAU,MAAM,SAC3C,UAAU,OAAO,WAAW,UAAU,MAAM;AAE9C,MAAa,uBACX,cACyC;CACzC,MAAM,EAAE,QAAQ,UAAU;CAC1B,IACE,OAAO,QAAQ,MAAM,SACpB,OAAO,UAAU,MAAM,SAAS,OAAO,UAAU,MAAM,QAExD,OAAO;EAAE,OAAO;EAAQ,KAAK;CAAM;CAGrC,OAAO;EAAE,OAAO;EAAO,KAAK;CAAO;AACrC;AAEA,MAAM,kBAAkB,QAAoB,CAAC,MAC3C,WAAW,QAAQ,SAAS,MAAM,SAAS,IAAI,CAAC;AAElD,MAAM,aAAa,OAAmB,CAAC,GAAG,QAAoB,CAAC,MAAe;CAC5E,MAAM,IAAI,eAAe,IAAI;CAC7B,MAAM,IAAI,eAAe,KAAK;CAC9B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,MAAM,UAAU,SAAS,EAAE,MAAM;AAC5E;AAEA,MAAa,oBAAoB,YAAwC;CACvE,MAAM,SAAuB,CAAC;CAE9B,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,CAAC,OAAO,MAAM;EAElB,MAAM,QAAQ,eAAe,OAAO,KAAK;EACzC,MAAM,WAAW,OAAO,OAAO,SAAS;EAExC,IAAI,YAAY,UAAU,SAAS,OAAO,KAAK,GAAG;GAChD,SAAS,QAAQ,OAAO;GACxB;EACF;EAEA,OAAO,KAAK;GACV,MAAM,OAAO;GACb,GAAI,MAAM,SAAS,EAAE,MAAM,IAAI,CAAC;EAClC,CAAC;CACH;CAEA,OAAO;AACT;AAEA,MAAM,cAAc,UAClB,UAAU,UACV,UAAU,YACV,UAAU,eACV,UAAU;AAEZ,MAAM,iBAAiB,UACrB,UAAU,cACV,UAAU,cACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,eACV,UAAU,WACV,UAAU,WACV,UAAU,YACV,UAAU,aACV,UAAU;AAEZ,MAAa,yBAAyB,UAAsC;CAC1E,MAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,IACxC,MAAM,QAAQ,SAAS,cAAc;EACnC,IAAI,CAAC,aAAa,CAAC,MAAM,QAAQ,UAAU,QAAQ,GAAG,OAAO,CAAC;EAE9D,MAAM,UAAU,cAAc,UAAU,OAAO,IAC3C,UAAU,UACV;EAEJ,MAAM,WAAW,iBACf,UAAU,SAAS,SAAS,WAAW;GACrC,IAAI,CAAC,UAAU,OAAO,OAAO,SAAS,UAAU,OAAO,CAAC;GACxD,MAAM,QAAQ,MAAM,QAAQ,OAAO,KAAK,IACpC,OAAO,MAAM,OAAO,UAAU,IAC9B,CAAC;GACL,OAAO,CAAC;IAAE,MAAM,OAAO;IAAM;GAAM,CAAC;EACtC,CAAC,CACH;EAEA,MAAM,WACJ,UAAU,aAAa,YAAY,UAAU,aAAa,YACtD,UAAU,WACV,KAAA;EACN,MAAM,QACJ,UAAU,UAAU,UACpB,UAAU,UAAU,YACpB,UAAU,UAAU,WACpB,UAAU,UAAU,YACf,UAAU,QACX,KAAA;EAON,MAAM,gBALO,WACT,aACA,UAAU,SAAS,aAAa,iBAAiB,OAAO,IACtD,YACA,iBAEK,aACT,OAAO,UAAU,UAAU,YAAY,KACvC,UAAU,gBAAiB,KAC3B,UAAU,gBAAiB,IACvB,UAAU,eACV,KAAA;EAEN,OAAO,CACL;GACE,MAAM,WACF,aACA,UAAU,SAAS,aAAa,iBAAiB,OAAO,IACtD,YACA;GACN;GACA;GACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;GAC/B,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;GACzB,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;EACzC,CACF;CACF,CAAC,IACD,CAAC;CAEL,OAAO;EACL,MAAM;EACN,SAAS,QAAQ,SACb,UACA,CAAC;GAAE,MAAM;GAAa,SAAS;GAAS,UAAU,CAAC;EAAE,CAAC;CAC5D;AACF;AAEA,MAAM,gBACJ,SACA,MACA,OACiB;CACjB,IAAI,MAAM,MAAM,OAAO,CAAC;CAExB,MAAM,SAAuB,CAAC;CAC9B,IAAI,WAAW;CAEf,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,QAAQ;EACd,MAAM,MAAM,WAAW,OAAO,KAAK;EACnC,MAAM,eAAe,KAAK,IAAI,OAAO,IAAI;EACzC,MAAM,aAAa,KAAK,IAAI,KAAK,EAAE;EAEnC,IAAI,eAAe,YACjB,OAAO,KAAK;GACV,MAAM,OAAO,KAAK,MAAM,eAAe,OAAO,aAAa,KAAK;GAChE,GAAI,OAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC;EAC7D,CAAC;EAGH,WAAW;EACX,IAAI,YAAY,IAAI;CACtB;CAEA,OAAO,iBAAiB,MAAM;AAChC;AAEA,MAAM,wBACJ,SACA,MACA,IACA,cACiB;CACjB,IAAI,MAAM,MAAM,OAAO,QAAQ,KAAK,YAAY,EAAE,GAAG,OAAO,EAAE;CAE9D,MAAM,SAAuB,CAAC;CAC9B,IAAI,WAAW;CAEf,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,QAAQ;EACd,MAAM,MAAM,QAAQ,OAAO,KAAK;EAEhC,IAAI,OAAO,QAAQ,SAAS,IAC1B,OAAO,KAAK;GACV,GAAG;GACH,GAAI,OAAO,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC;EACrD,CAAC;OACI;GACL,MAAM,aAAa,KAAK,IAAI,GAAG,OAAO,KAAK;GAC3C,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK;GACzC,MAAM,QAAQ,OAAO,SAAS,CAAC;GAE/B,IAAI,aAAa,GACf,OAAO,KAAK;IACV,MAAM,OAAO,KAAK,MAAM,GAAG,UAAU;IACrC,GAAI,MAAM,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;GAC9C,CAAC;GAGH,MAAM,YAAY,KAAK,IAAI,OAAO,KAAK,QAAQ,KAAK,KAAK;GACzD,IAAI,YAAY,YACd,OAAO,KAAK;IACV,MAAM,OAAO,KAAK,MAAM,YAAY,SAAS;IAC7C,OAAO,UAAU,CAAC,GAAG,KAAK,CAAC;GAC7B,CAAC;GAGH,IAAI,aAAa,OAAO,KAAK,QAC3B,OAAO,KAAK;IACV,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC;IAC/C,GAAI,MAAM,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;GAC9C,CAAC;EAEL;EAEA,WAAW;CACb;CAEA,OAAO,iBAAiB,MAAM;AAChC;AAEA,MAAa,aACX,UACA,WACA,MACA,UACiB;CACjB,IAAI,qBAAqB,SAAS,GAAG,OAAO;CAE5C,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,SAAS,QAAQ,OAAO,OAAO,UAAU;EACzD,IAAI,QAAQ,MAAM,SAAS,QAAQ,IAAI,OAAO,OAAO;EACrD,MAAM,OAAO,UAAU,MAAM,QAAQ,MAAM,SAAS;EACpD,MAAM,KAAK,UAAU,IAAI,QAAQ,IAAI,SAAS,eAAe,KAAK;EAClE,IAAI,MAAM,MAAM,OAAO;EAEvB,IAAI,WAAW;EACf,KAAK,MAAM,UAAU,MAAM,UAAU;GACnC,MAAM,cAAc;GACpB,MAAM,YAAY,WAAW,OAAO,KAAK;GACzC,WAAW;GACX,IAAI,aAAa,QAAQ,eAAe,IAAI;GAC5C,IAAI,CAAC,OAAO,OAAO,SAAS,IAAI,GAAG,OAAO;EAC5C;EACA,OAAO;CACT,CAAC;CAED,MAAM,UAAU,SAAS,CAAC;CAkB1B,OAAO;EAAE,MAAM;EAAO,SAjBN,SAAS,QAAQ,KAAK,OAAO,UAAU;GACrD,IAAI,QAAQ,MAAM,SAAS,QAAQ,IAAI,OAAO,OAAO;GACrD,MAAM,OAAO,UAAU,MAAM,QAAQ,MAAM,SAAS;GACpD,MAAM,KAAK,UAAU,IAAI,QAAQ,IAAI,SAAS,eAAe,KAAK;GAClE,IAAI,MAAM,MAAM,OAAO;GAEvB,OAAO;IACL,GAAG;IACH,UAAU,qBAAqB,MAAM,UAAU,MAAM,KAAK,UAAU;KAClE,MAAM,OAAO,IAAI,IAAI,KAAK;KAC1B,IAAI,SAAS,KAAK,IAAI,IAAI;UACrB,KAAK,OAAO,IAAI;KACrB,OAAO,WAAW,QAAQ,SAAS,KAAK,IAAI,IAAI,CAAC;IACnD,CAAC;GACH;EACF,CAE4B;CAAE;AAChC;AAEA,MAAa,kBACX,UACA,WACA,YACiB;CACjB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CAEV,OAAO;EACL,MAAM;EACN,SAAS,SAAS,QAAQ,KAAK,OAAO,UAAU;GAC9C,IAAI,QAAQ,MAAM,SAAS,QAAQ,WAAW,OAAO;GACrD,OAAO;IACL,GAAG;IACH,MAAM,MAAM,WACR,aACA,iBAAiB,OAAO,IACtB,YACA;IACN;GACF;EACF,CAAC;CACH;AACF;AAEA,MAAM,oBACJ,SACA,YACmD;CACnD,QAAQ,aAAa,SAAS,GAAG,MAAM;CACvC,OAAO,aACL,SACA,QACA,QAAQ,QAAQ,KAAK,SAAS,MAAM,KAAK,KAAK,QAAQ,CAAC,CACzD;AACF;AAEA,MAAa,6BACX,UACA,WACA,qBACyD;CACzD,MAAM,SAAS,sBAAsB,QAAQ;CAC7C,MAAM,WAAW,sBAAsB,gBAAgB;CACvD,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,aAAa,KAAK,IACtB,GACA,KAAK,IAAI,MAAM,OAAO,OAAO,QAAQ,SAAS,CAAC,CACjD;CACA,MAAM,WAAW,KAAK,IACpB,YACA,KAAK,IAAI,IAAI,OAAO,OAAO,QAAQ,SAAS,CAAC,CAC/C;CACA,MAAM,aAAa,OAAO,QAAQ;CAClC,MAAM,WAAW,OAAO,QAAQ;CAChC,MAAM,cAAc,KAAK,IACvB,GACA,KAAK,IAAI,MAAM,QAAQ,eAAe,UAAU,CAAC,CACnD;CACA,MAAM,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,eAAe,QAAQ,CAAC,CAAC;CAC5E,MAAM,SAAS,iBAAiB,WAAW,UAAU,WAAW,CAAC,CAAC;CAClE,MAAM,SAAS,iBAAiB,SAAS,UAAU,SAAS,CAAC,CAAC;CAC9D,MAAM,iBAAiB,SAAS,QAAQ,KAAK,WAAW;EACtD,GAAG;EACH,UAAU,MAAM,SAAS,KAAK,YAAY;GACxC,GAAG;GACH,GAAI,OAAO,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC;EACrD,EAAE;CACJ,EAAE;CAEF,MAAM,eAAe,OAAO,SAAS,KAAK,cAAc;CACxD,MAAM,gBACJ,OAAO,SAAS,KAAK,YAAY,eAAe,QAAQ;CAC1D,MAAM,QAAQ,eAAe;CAC7B,MAAM,OAAO,eAAe,eAAe,SAAS;CACpD,MAAM,iBAAiB,gBAAgB,MAAM,SAAS;CACtD,MAAM,iBAAiB,iBAAiB,KAAK,SAAS;CACtD,MAAM,cAA2B,CAAC;CAElC,IAAI,gBACF,YAAY,KAAK;EACf,GAAG;EACH,UAAU;CACZ,CAAC;CAGH,IAAI,eAAe,WAAW,GAAG;EAC/B,IAAI,kBAAkB,gBAAgB;GACpC,YAAY,KAAK;IACf,GAAG;IACH,MAAM,kBAAkB,CAAC,eAAe,MAAM,OAAO,WAAW;IAChE,SACE,kBAAkB,CAAC,eAAe,MAAM,UAAU,WAAW;IAC/D,UAAU,iBACN,MAAM,WACN,iBAAiB,CAAC,GAAG,QAAQ,GAAG,MAAM,QAAQ,CAAC;GACrD,CAAC;GACD,IAAI,gBACF,YAAY,KAAK;IAAE,GAAG;IAAU,UAAU;GAAO,CAAC;QAC7C;IACL,MAAM,aAAa,YAAY,SAAS;IACxC,YAAY,cAAc;KACxB,GAAG,YAAY;KACf,UAAU,iBAAiB,CACzB,GAAG,YAAY,WAAW,CAAC,UAC3B,GAAG,MACL,CAAC;IACH;GACF;EACF,OAAO;GACL,MAAM,mBAAmB,CAAC,gBAAgB,CAAC;GAC3C,YAAY,KAAK;IACf,GAAI,mBAAmB,QAAQ;IAC/B,MAAM,mBAAmB,MAAM,OAAO,WAAW;IACjD,SAAS,mBAAmB,MAAM,UAAU,WAAW;IACvD,UAAU,iBAAiB;KAAC,GAAG;KAAQ,GAAG,MAAM;KAAU,GAAG;IAAM,CAAC;GACtE,CAAC;EACH;CACF,OAAO;EACL,YAAY,KAAK;GACf,GAAI,kBAAkB,CAAC,eAAe,QAAQ;GAC9C,MAAM,kBAAkB,CAAC,eAAe,MAAM,OAAO,WAAW;GAChE,SACE,kBAAkB,CAAC,eAAe,MAAM,UAAU,WAAW;GAC/D,UAAU,iBACN,MAAM,WACN,iBAAiB,CAAC,GAAG,QAAQ,GAAG,MAAM,QAAQ,CAAC;EACrD,CAAC;EAED,KAAK,IAAI,QAAQ,GAAG,QAAQ,eAAe,SAAS,GAAG,SAAS,GAC9D,YAAY,KAAK,eAAe,MAAM;EAGxC,IAAI,gBAAgB;GAClB,YAAY,KAAK,IAAI;GACrB,YAAY,KAAK;IAAE,GAAG;IAAU,UAAU;GAAO,CAAC;EACpD,OACE,YAAY,KAAK;GACf,GAAI,gBAAgB,WAAW;GAC/B,MAAM,gBAAgB,SAAS,OAAO,KAAK;GAC3C,SAAS,gBAAgB,SAAS,UAAU,KAAK;GACjD,UAAU,iBAAiB,CAAC,GAAG,KAAK,UAAU,GAAG,MAAM,CAAC;EAC1D,CAAC;CAEL;CAEA,MAAM,UAAU;EACd,GAAG,OAAO,QAAQ,MAAM,GAAG,UAAU;EACrC,GAAG;EACH,GAAG,OAAO,QAAQ,MAAM,WAAW,CAAC;CACtC;CACA,MAAM,wBAAwB,iBAC1B,YAAY,SAAS,IACrB,YAAY,SAAS;CACzB,MAAM,aAAa,YAAY,KAAK,IAAI,GAAG,qBAAqB;CAChE,MAAM,eAAe,OAAO,QACzB,OAAO,WAAW,QAAQ,OAAO,KAAK,QACvC,CACF;CACA,MAAM,cAAc,iBAChB,eAAe,UAAU,IACzB,KAAK,IAAI,GAAG,eAAe,UAAU,IAAI,YAAY;CACzD,MAAM,QAAQ;EACZ,OAAO,aAAa,KAAK,IAAI,GAAG,qBAAqB;EACrD,QAAQ;CACV;CAEA,OAAO;EACL,UAAU;GACR,MAAM;GACN,SAAS,QAAQ,SAAS,UAAU,mBAAmB,CAAC,CAAC;EAC3D;EACA,WAAW;GAAE,QAAQ;GAAO,OAAO;EAAM;CAC3C;AACF;AAEA,MAAa,yBACX,UACA,WACA,MACA,QAAoB,CAAC,MACoC;CACzD,MAAM,WAAyB;EAC7B,MAAM;EACN,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,UAAU;GACvC,MAAM;GACN,SAAS;GACT,UAAU,OACN,CAAC;IAAE,MAAM;IAAM,GAAI,MAAM,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC;GAAG,CAAC,IAC/D,CAAC;EACP,EAAE;CACJ;CACA,OAAO,0BAA0B,UAAU,WAAW,QAAQ;AAChE;;AAGA,MAAa,gBACX,UACA,WACA,UACiB;CACjB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,OAAO;EACL,MAAM;EACN,SAAS,SAAS,QAAQ,KAAK,OAAO,UAAU;GAC9C,IAAI,QAAQ,MAAM,SAAS,QAAQ,WAAW,OAAO;GACrD,OAAO;IAAE,GAAG;IAAO;GAAM;EAC3B,CAAC;CACH;AACF;AAEA,MAAa,gBACX,UACA,cACqB;CACrB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,MAAM,WAAW,SAAS,QAAQ,MAAM,MAAM,OAAO,YAAY,CAAC;CAClE,IAAI,SAAS,WAAW,GAAG,OAAO;CAClC,MAAM,QAAQ,SAAS,EAAE,CAAC,SAAS;CACnC,OAAO,SAAS,OAAO,WAAW,MAAM,SAAS,UAAU,KAAK,IAC5D,QACA;AACN;;AAGA,MAAa,eACX,UACA,WACA,aACiB;CACjB,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,MAAM,WAAW,SAAS,QAAQ,MAAM,MAAM,OAAO,YAAY,CAAC;CAClE,MAAM,SACJ,YAAY,QACZ,SAAS,SAAS,KAClB,SAAS,OAAO,UAAU,MAAM,aAAa,QAAQ;CACvD,OAAO;EACL,MAAM;EACN,SAAS,SAAS,QAAQ,KAAK,OAAO,UAAU;GAC9C,IAAI,QAAQ,MAAM,SAAS,QAAQ,WAAW,OAAO;GACrD,IAAI,UAAU,YAAY,MAAM;IAC9B,MAAM,EAAE,UAAU,WAAW,GAAG,SAAS;IACzC,OAAO;KACL,GAAG;KACH,MAAM,MAAM,SAAS,aAAa,cAAc,MAAM;IACxD;GACF;GACA,OAAO;IAAE,GAAG;IAAO,MAAM;IAAY;GAAS;EAChD,CAAC;CACH;AACF;AAEA,MAAa,eACX,UACA,WACA,aACY;CACZ,MAAM,EAAE,OAAO,QAAQ,oBAAoB,SAAS;CACpD,MAAM,YAAY,qBAAqB,SAAS,IAC5C,MAAM,QACN,IAAI,WAAW,KAAK,IAAI,QAAQ,MAAM,QACpC,IAAI,QAAQ,IACZ,IAAI;CACV,MAAM,WAAW,SAAS,QAAQ,MAAM,MAAM,OAAO,YAAY,CAAC;CAClE,OACE,SAAS,SAAS,KAClB,SAAS,OAAO,UAAU,MAAM,aAAa,QAAQ;AAEzD"}
|