@intlayer/design-system 9.0.0-canary.9 → 9.0.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/dist/esm/api/hooks/ai.mjs.map +1 -1
- package/dist/esm/api/hooks/analytics.mjs +71 -0
- package/dist/esm/api/hooks/analytics.mjs.map +1 -0
- package/dist/esm/api/hooks/asset.mjs.map +1 -1
- package/dist/esm/api/hooks/audit.mjs.map +1 -1
- package/dist/esm/api/hooks/auth.mjs.map +1 -1
- package/dist/esm/api/hooks/bitbucket.mjs.map +1 -1
- package/dist/esm/api/hooks/dictionary.mjs +15 -3
- package/dist/esm/api/hooks/dictionary.mjs.map +1 -1
- package/dist/esm/api/hooks/discussions.mjs.map +1 -1
- package/dist/esm/api/hooks/editor.mjs.map +1 -1
- package/dist/esm/api/hooks/environment.mjs.map +1 -1
- package/dist/esm/api/hooks/github.mjs.map +1 -1
- package/dist/esm/api/hooks/gitlab.mjs.map +1 -1
- package/dist/esm/api/hooks/newsletter.mjs.map +1 -1
- package/dist/esm/api/hooks/organization.mjs +35 -3
- package/dist/esm/api/hooks/organization.mjs.map +1 -1
- package/dist/esm/api/hooks/project.mjs +13 -1
- package/dist/esm/api/hooks/project.mjs.map +1 -1
- package/dist/esm/api/hooks/reviewer.mjs.map +1 -1
- package/dist/esm/api/hooks/search.mjs.map +1 -1
- package/dist/esm/api/hooks/showcaseProject.mjs.map +1 -1
- package/dist/esm/api/hooks/stripe.mjs.map +1 -1
- package/dist/esm/api/hooks/tag.mjs.map +1 -1
- package/dist/esm/api/hooks/translate.mjs.map +1 -1
- package/dist/esm/api/hooks/user.mjs.map +1 -1
- package/dist/esm/api/hooks/utils.mjs.map +1 -1
- package/dist/esm/api/index.mjs +6 -5
- package/dist/esm/api/useAuth/useAuth.mjs.map +1 -1
- package/dist/esm/api/useAuth/useOAuth2.mjs.map +1 -1
- package/dist/esm/api/useAuth/useSession.mjs.map +1 -1
- package/dist/esm/api/useIntlayerAPI.mjs +6 -1
- package/dist/esm/api/useIntlayerAPI.mjs.map +1 -1
- package/dist/esm/api/useUser/index.mjs.map +1 -1
- package/dist/esm/components/Accordion/Accordion.mjs.map +1 -1
- package/dist/esm/components/Avatar/image.mjs.map +1 -1
- package/dist/esm/components/Avatar/index.mjs.map +1 -1
- package/dist/esm/components/Badge/index.mjs.map +1 -1
- package/dist/esm/components/Breadcrumb/breadcrumb.content.mjs.map +1 -1
- package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
- package/dist/esm/components/Browser/Browser.content.mjs.map +1 -1
- package/dist/esm/components/Browser/Browser.mjs.map +1 -1
- package/dist/esm/components/Browser/extractUrlFromSitemap.mjs.map +1 -1
- package/dist/esm/components/Button/Button.mjs.map +1 -1
- package/dist/esm/components/Carousel/index.content.mjs.map +1 -1
- package/dist/esm/components/Carousel/index.mjs +2 -1
- package/dist/esm/components/Carousel/index.mjs.map +1 -1
- package/dist/esm/components/ClickOutsideDiv/index.mjs.map +1 -1
- package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
- package/dist/esm/components/Command/index.mjs.map +1 -1
- package/dist/esm/components/Container/index.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/ContentEditor.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
- package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
- package/dist/esm/components/ContentSelector/ContentSelector.mjs.map +1 -1
- package/dist/esm/components/CopyButton/CopyButton.content.mjs.map +1 -1
- package/dist/esm/components/CopyButton/index.mjs.map +1 -1
- package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/BooleanWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/HtmlWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/NumberWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/PluralWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs +3 -3
- package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +26 -24
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/object.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +6 -6
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +19 -14
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +5 -4
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/saveForm.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +6 -4
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/structureView.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/contentEditor.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/dictionaryFieldEditor.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/getIsEditableSection.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/nodeTypeSelector.content.mjs.map +1 -1
- package/dist/esm/components/DropDown/index.mjs.map +1 -1
- package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
- package/dist/esm/components/EditableField/EditableFieldLayout.mjs.map +1 -1
- package/dist/esm/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
- package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
- package/dist/esm/components/ExpandCollapse/expandCollapse.content.mjs.map +1 -1
- package/dist/esm/components/Flags/Flag.mjs.map +1 -1
- package/dist/esm/components/Flags/ae.mjs +9 -6
- package/dist/esm/components/Flags/ae.mjs.map +1 -1
- package/dist/esm/components/Flags/af.mjs +26 -23
- package/dist/esm/components/Flags/af.mjs.map +1 -1
- package/dist/esm/components/Flags/al.mjs +7 -5
- package/dist/esm/components/Flags/al.mjs.map +1 -1
- package/dist/esm/components/Flags/am.mjs +7 -5
- package/dist/esm/components/Flags/am.mjs.map +1 -1
- package/dist/esm/components/Flags/ar.mjs +51 -31
- package/dist/esm/components/Flags/ar.mjs.map +1 -1
- package/dist/esm/components/Flags/at.mjs +5 -4
- package/dist/esm/components/Flags/at.mjs.map +1 -1
- package/dist/esm/components/Flags/au.mjs +13 -8
- package/dist/esm/components/Flags/au.mjs.map +1 -1
- package/dist/esm/components/Flags/az.mjs +13 -8
- package/dist/esm/components/Flags/az.mjs.map +1 -1
- package/dist/esm/components/Flags/ba.mjs +8 -7
- package/dist/esm/components/Flags/ba.mjs.map +1 -1
- package/dist/esm/components/Flags/bd.mjs +5 -4
- package/dist/esm/components/Flags/bd.mjs.map +1 -1
- package/dist/esm/components/Flags/be.mjs +5 -5
- package/dist/esm/components/Flags/be.mjs.map +1 -1
- package/dist/esm/components/Flags/bg.mjs +7 -5
- package/dist/esm/components/Flags/bg.mjs.map +1 -1
- package/dist/esm/components/Flags/bh.mjs +5 -4
- package/dist/esm/components/Flags/bh.mjs.map +1 -1
- package/dist/esm/components/Flags/bn.mjs +12 -8
- package/dist/esm/components/Flags/bn.mjs.map +1 -1
- package/dist/esm/components/Flags/bo.mjs +1306 -656
- package/dist/esm/components/Flags/bo.mjs.map +1 -1
- package/dist/esm/components/Flags/br.mjs +26 -26
- package/dist/esm/components/Flags/br.mjs.map +1 -1
- package/dist/esm/components/Flags/bw.mjs +4 -4
- package/dist/esm/components/Flags/bw.mjs.map +1 -1
- package/dist/esm/components/Flags/by.mjs +11 -8
- package/dist/esm/components/Flags/by.mjs.map +1 -1
- package/dist/esm/components/Flags/bz.mjs +111 -81
- package/dist/esm/components/Flags/bz.mjs.map +1 -1
- package/dist/esm/components/Flags/ca.mjs +5 -4
- package/dist/esm/components/Flags/ca.mjs.map +1 -1
- package/dist/esm/components/Flags/ch.mjs +4 -4
- package/dist/esm/components/Flags/ch.mjs.map +1 -1
- package/dist/esm/components/Flags/cl.mjs +9 -8
- package/dist/esm/components/Flags/cl.mjs.map +1 -1
- package/dist/esm/components/Flags/cn.mjs +15 -9
- package/dist/esm/components/Flags/cn.mjs.map +1 -1
- package/dist/esm/components/Flags/co.mjs +5 -5
- package/dist/esm/components/Flags/co.mjs.map +1 -1
- package/dist/esm/components/Flags/cr.mjs +5 -5
- package/dist/esm/components/Flags/cr.mjs.map +1 -1
- package/dist/esm/components/Flags/cu.mjs +9 -8
- package/dist/esm/components/Flags/cu.mjs.map +1 -1
- package/dist/esm/components/Flags/cv.mjs +9 -8
- package/dist/esm/components/Flags/cv.mjs.map +1 -1
- package/dist/esm/components/Flags/cz.mjs +7 -5
- package/dist/esm/components/Flags/cz.mjs.map +1 -1
- package/dist/esm/components/Flags/de.mjs +7 -5
- package/dist/esm/components/Flags/de.mjs.map +1 -1
- package/dist/esm/components/Flags/dj.mjs +9 -8
- package/dist/esm/components/Flags/dj.mjs.map +1 -1
- package/dist/esm/components/Flags/dk.mjs +7 -5
- package/dist/esm/components/Flags/dk.mjs.map +1 -1
- package/dist/esm/components/Flags/do.mjs +71 -53
- package/dist/esm/components/Flags/do.mjs.map +1 -1
- package/dist/esm/components/Flags/dz.mjs +7 -5
- package/dist/esm/components/Flags/dz.mjs.map +1 -1
- package/dist/esm/components/Flags/ec.mjs +165 -122
- package/dist/esm/components/Flags/ec.mjs.map +1 -1
- package/dist/esm/components/Flags/ee.mjs +7 -5
- package/dist/esm/components/Flags/ee.mjs.map +1 -1
- package/dist/esm/components/Flags/eg.mjs +28 -25
- package/dist/esm/components/Flags/eg.mjs.map +1 -1
- package/dist/esm/components/Flags/es-ct.mjs +5 -4
- package/dist/esm/components/Flags/es-ct.mjs.map +1 -1
- package/dist/esm/components/Flags/es-ga.mjs +184 -183
- package/dist/esm/components/Flags/es-ga.mjs.map +1 -1
- package/dist/esm/components/Flags/es-pv.mjs +7 -5
- package/dist/esm/components/Flags/es-pv.mjs.map +1 -1
- package/dist/esm/components/Flags/es.mjs +1072 -531
- package/dist/esm/components/Flags/es.mjs.map +1 -1
- package/dist/esm/components/Flags/et.mjs +10 -9
- package/dist/esm/components/Flags/et.mjs.map +1 -1
- package/dist/esm/components/Flags/fi.mjs +7 -5
- package/dist/esm/components/Flags/fi.mjs.map +1 -1
- package/dist/esm/components/Flags/flags.mjs.map +1 -1
- package/dist/esm/components/Flags/fo.mjs +8 -7
- package/dist/esm/components/Flags/fo.mjs.map +1 -1
- package/dist/esm/components/Flags/fr.mjs +7 -5
- package/dist/esm/components/Flags/fr.mjs.map +1 -1
- package/dist/esm/components/Flags/gb-wls.mjs +10 -8
- package/dist/esm/components/Flags/gb-wls.mjs.map +1 -1
- package/dist/esm/components/Flags/gb.mjs +11 -7
- package/dist/esm/components/Flags/gb.mjs.map +1 -1
- package/dist/esm/components/Flags/ge.mjs +9 -6
- package/dist/esm/components/Flags/ge.mjs.map +1 -1
- package/dist/esm/components/Flags/gh.mjs +9 -6
- package/dist/esm/components/Flags/gh.mjs.map +1 -1
- package/dist/esm/components/Flags/gr.mjs +23 -13
- package/dist/esm/components/Flags/gr.mjs.map +1 -1
- package/dist/esm/components/Flags/gt.mjs +116 -113
- package/dist/esm/components/Flags/gt.mjs.map +1 -1
- package/dist/esm/components/Flags/gw.mjs +19 -12
- package/dist/esm/components/Flags/gw.mjs.map +1 -1
- package/dist/esm/components/Flags/hk.mjs +13 -8
- package/dist/esm/components/Flags/hk.mjs.map +1 -1
- package/dist/esm/components/Flags/hn.mjs +21 -15
- package/dist/esm/components/Flags/hn.mjs.map +1 -1
- package/dist/esm/components/Flags/hr.mjs +49 -23
- package/dist/esm/components/Flags/hr.mjs.map +1 -1
- package/dist/esm/components/Flags/hu.mjs +4 -4
- package/dist/esm/components/Flags/hu.mjs.map +1 -1
- package/dist/esm/components/Flags/id.mjs +5 -4
- package/dist/esm/components/Flags/id.mjs.map +1 -1
- package/dist/esm/components/Flags/ie.mjs +5 -5
- package/dist/esm/components/Flags/ie.mjs.map +1 -1
- package/dist/esm/components/Flags/il.mjs +10 -9
- package/dist/esm/components/Flags/il.mjs.map +1 -1
- package/dist/esm/components/Flags/in.mjs +18 -15
- package/dist/esm/components/Flags/in.mjs.map +1 -1
- package/dist/esm/components/Flags/iq.mjs +11 -8
- package/dist/esm/components/Flags/iq.mjs.map +1 -1
- package/dist/esm/components/Flags/ir.mjs +33 -32
- package/dist/esm/components/Flags/ir.mjs.map +1 -1
- package/dist/esm/components/Flags/is.mjs +8 -7
- package/dist/esm/components/Flags/is.mjs.map +1 -1
- package/dist/esm/components/Flags/it.mjs +5 -5
- package/dist/esm/components/Flags/it.mjs.map +1 -1
- package/dist/esm/components/Flags/jm.mjs +5 -5
- package/dist/esm/components/Flags/jm.mjs.map +1 -1
- package/dist/esm/components/Flags/jo.mjs +11 -10
- package/dist/esm/components/Flags/jo.mjs.map +1 -1
- package/dist/esm/components/Flags/jp.mjs +7 -6
- package/dist/esm/components/Flags/jp.mjs.map +1 -1
- package/dist/esm/components/Flags/ke.mjs +28 -19
- package/dist/esm/components/Flags/ke.mjs.map +1 -1
- package/dist/esm/components/Flags/kg.mjs +11 -10
- package/dist/esm/components/Flags/kg.mjs.map +1 -1
- package/dist/esm/components/Flags/kh.mjs +20 -18
- package/dist/esm/components/Flags/kh.mjs.map +1 -1
- package/dist/esm/components/Flags/km.mjs +12 -11
- package/dist/esm/components/Flags/km.mjs.map +1 -1
- package/dist/esm/components/Flags/kr.mjs +14 -13
- package/dist/esm/components/Flags/kr.mjs.map +1 -1
- package/dist/esm/components/Flags/kw.mjs +9 -8
- package/dist/esm/components/Flags/kw.mjs.map +1 -1
- package/dist/esm/components/Flags/kz.mjs +18 -17
- package/dist/esm/components/Flags/kz.mjs.map +1 -1
- package/dist/esm/components/Flags/la.mjs +8 -7
- package/dist/esm/components/Flags/la.mjs.map +1 -1
- package/dist/esm/components/Flags/lb.mjs +10 -9
- package/dist/esm/components/Flags/lb.mjs.map +1 -1
- package/dist/esm/components/Flags/li.mjs +33 -31
- package/dist/esm/components/Flags/li.mjs.map +1 -1
- package/dist/esm/components/Flags/lk.mjs +22 -14
- package/dist/esm/components/Flags/lk.mjs.map +1 -1
- package/dist/esm/components/Flags/lt.mjs +5 -5
- package/dist/esm/components/Flags/lt.mjs.map +1 -1
- package/dist/esm/components/Flags/lu.mjs +7 -5
- package/dist/esm/components/Flags/lu.mjs.map +1 -1
- package/dist/esm/components/Flags/lv.mjs +3 -3
- package/dist/esm/components/Flags/lv.mjs.map +1 -1
- package/dist/esm/components/Flags/ly.mjs +8 -7
- package/dist/esm/components/Flags/ly.mjs.map +1 -1
- package/dist/esm/components/Flags/ma.mjs +5 -4
- package/dist/esm/components/Flags/ma.mjs.map +1 -1
- package/dist/esm/components/Flags/mc.mjs +4 -4
- package/dist/esm/components/Flags/mc.mjs.map +1 -1
- package/dist/esm/components/Flags/md.mjs +93 -61
- package/dist/esm/components/Flags/md.mjs.map +1 -1
- package/dist/esm/components/Flags/mk.mjs +7 -5
- package/dist/esm/components/Flags/mk.mjs.map +1 -1
- package/dist/esm/components/Flags/mm.mjs +13 -10
- package/dist/esm/components/Flags/mm.mjs.map +1 -1
- package/dist/esm/components/Flags/mn.mjs +19 -12
- package/dist/esm/components/Flags/mn.mjs.map +1 -1
- package/dist/esm/components/Flags/mo.mjs +10 -7
- package/dist/esm/components/Flags/mo.mjs.map +1 -1
- package/dist/esm/components/Flags/mr.mjs +9 -6
- package/dist/esm/components/Flags/mr.mjs.map +1 -1
- package/dist/esm/components/Flags/mt.mjs +44 -39
- package/dist/esm/components/Flags/mt.mjs.map +1 -1
- package/dist/esm/components/Flags/mv.mjs +9 -6
- package/dist/esm/components/Flags/mv.mjs.map +1 -1
- package/dist/esm/components/Flags/mx.mjs +748 -377
- package/dist/esm/components/Flags/mx.mjs.map +1 -1
- package/dist/esm/components/Flags/my.mjs +21 -20
- package/dist/esm/components/Flags/my.mjs.map +1 -1
- package/dist/esm/components/Flags/mz.mjs +17 -16
- package/dist/esm/components/Flags/mz.mjs.map +1 -1
- package/dist/esm/components/Flags/ng.mjs +4 -4
- package/dist/esm/components/Flags/ng.mjs.map +1 -1
- package/dist/esm/components/Flags/ni.mjs +103 -98
- package/dist/esm/components/Flags/ni.mjs.map +1 -1
- package/dist/esm/components/Flags/nl.mjs +7 -5
- package/dist/esm/components/Flags/nl.mjs.map +1 -1
- package/dist/esm/components/Flags/no.mjs +11 -7
- package/dist/esm/components/Flags/no.mjs.map +1 -1
- package/dist/esm/components/Flags/np.mjs +7 -6
- package/dist/esm/components/Flags/np.mjs.map +1 -1
- package/dist/esm/components/Flags/nz.mjs +30 -20
- package/dist/esm/components/Flags/nz.mjs.map +1 -1
- package/dist/esm/components/Flags/om.mjs +102 -101
- package/dist/esm/components/Flags/om.mjs.map +1 -1
- package/dist/esm/components/Flags/pa.mjs +9 -8
- package/dist/esm/components/Flags/pa.mjs.map +1 -1
- package/dist/esm/components/Flags/pe.mjs +5 -4
- package/dist/esm/components/Flags/pe.mjs.map +1 -1
- package/dist/esm/components/Flags/ph.mjs +9 -6
- package/dist/esm/components/Flags/ph.mjs.map +1 -1
- package/dist/esm/components/Flags/pk.mjs +8 -7
- package/dist/esm/components/Flags/pk.mjs.map +1 -1
- package/dist/esm/components/Flags/pl.mjs +3 -3
- package/dist/esm/components/Flags/pl.mjs.map +1 -1
- package/dist/esm/components/Flags/pr.mjs +9 -8
- package/dist/esm/components/Flags/pr.mjs.map +1 -1
- package/dist/esm/components/Flags/ps.mjs +10 -9
- package/dist/esm/components/Flags/ps.mjs.map +1 -1
- package/dist/esm/components/Flags/pt.mjs +34 -31
- package/dist/esm/components/Flags/pt.mjs.map +1 -1
- package/dist/esm/components/Flags/py.mjs +17 -11
- package/dist/esm/components/Flags/py.mjs.map +1 -1
- package/dist/esm/components/Flags/qa.mjs +5 -4
- package/dist/esm/components/Flags/qa.mjs.map +1 -1
- package/dist/esm/components/Flags/ro.mjs +5 -5
- package/dist/esm/components/Flags/ro.mjs.map +1 -1
- package/dist/esm/components/Flags/rs.mjs +259 -258
- package/dist/esm/components/Flags/rs.mjs.map +1 -1
- package/dist/esm/components/Flags/ru.mjs +7 -5
- package/dist/esm/components/Flags/ru.mjs.map +1 -1
- package/dist/esm/components/Flags/sa.mjs +21 -20
- package/dist/esm/components/Flags/sa.mjs.map +1 -1
- package/dist/esm/components/Flags/sd.mjs +9 -8
- package/dist/esm/components/Flags/sd.mjs.map +1 -1
- package/dist/esm/components/Flags/se.mjs +5 -4
- package/dist/esm/components/Flags/se.mjs.map +1 -1
- package/dist/esm/components/Flags/sg.mjs +9 -8
- package/dist/esm/components/Flags/sg.mjs.map +1 -1
- package/dist/esm/components/Flags/si.mjs +14 -13
- package/dist/esm/components/Flags/si.mjs.map +1 -1
- package/dist/esm/components/Flags/sk.mjs +15 -9
- package/dist/esm/components/Flags/sk.mjs.map +1 -1
- package/dist/esm/components/Flags/so.mjs +7 -6
- package/dist/esm/components/Flags/so.mjs.map +1 -1
- package/dist/esm/components/Flags/st.mjs +17 -13
- package/dist/esm/components/Flags/st.mjs.map +1 -1
- package/dist/esm/components/Flags/sv.mjs +538 -522
- package/dist/esm/components/Flags/sv.mjs.map +1 -1
- package/dist/esm/components/Flags/sy.mjs +9 -6
- package/dist/esm/components/Flags/sy.mjs.map +1 -1
- package/dist/esm/components/Flags/td.mjs +4 -4
- package/dist/esm/components/Flags/td.mjs.map +1 -1
- package/dist/esm/components/Flags/th.mjs +4 -4
- package/dist/esm/components/Flags/th.mjs.map +1 -1
- package/dist/esm/components/Flags/tl.mjs +9 -8
- package/dist/esm/components/Flags/tl.mjs.map +1 -1
- package/dist/esm/components/Flags/tn.mjs +5 -4
- package/dist/esm/components/Flags/tn.mjs.map +1 -1
- package/dist/esm/components/Flags/tr.mjs +5 -5
- package/dist/esm/components/Flags/tr.mjs.map +1 -1
- package/dist/esm/components/Flags/tt.mjs +7 -5
- package/dist/esm/components/Flags/tt.mjs.map +1 -1
- package/dist/esm/components/Flags/tw.mjs +7 -6
- package/dist/esm/components/Flags/tw.mjs.map +1 -1
- package/dist/esm/components/Flags/tz.mjs +9 -8
- package/dist/esm/components/Flags/tz.mjs.map +1 -1
- package/dist/esm/components/Flags/ua.mjs +4 -4
- package/dist/esm/components/Flags/ua.mjs.map +1 -1
- package/dist/esm/components/Flags/ug.mjs +26 -25
- package/dist/esm/components/Flags/ug.mjs.map +1 -1
- package/dist/esm/components/Flags/us.mjs +12 -8
- package/dist/esm/components/Flags/us.mjs.map +1 -1
- package/dist/esm/components/Flags/uy.mjs +15 -12
- package/dist/esm/components/Flags/uy.mjs.map +1 -1
- package/dist/esm/components/Flags/uz.mjs +27 -21
- package/dist/esm/components/Flags/uz.mjs.map +1 -1
- package/dist/esm/components/Flags/ve.mjs +21 -16
- package/dist/esm/components/Flags/ve.mjs.map +1 -1
- package/dist/esm/components/Flags/vn.mjs +7 -6
- package/dist/esm/components/Flags/vn.mjs.map +1 -1
- package/dist/esm/components/Flags/xx.mjs +5 -4
- package/dist/esm/components/Flags/xx.mjs.map +1 -1
- package/dist/esm/components/Flags/ye.mjs +5 -5
- package/dist/esm/components/Flags/ye.mjs.map +1 -1
- package/dist/esm/components/Flags/za.mjs +12 -11
- package/dist/esm/components/Flags/za.mjs.map +1 -1
- package/dist/esm/components/Flags/zw.mjs +16 -15
- package/dist/esm/components/Flags/zw.mjs.map +1 -1
- package/dist/esm/components/Footer/index.mjs.map +1 -1
- package/dist/esm/components/Form/FormBase.mjs.map +1 -1
- package/dist/esm/components/Form/FormControl.mjs.map +1 -1
- package/dist/esm/components/Form/FormDescription.mjs.map +1 -1
- package/dist/esm/components/Form/FormField.mjs +2 -1
- package/dist/esm/components/Form/FormField.mjs.map +1 -1
- package/dist/esm/components/Form/FormItem.mjs.map +1 -1
- package/dist/esm/components/Form/FormLabel.mjs.map +1 -1
- package/dist/esm/components/Form/FormMessage.mjs.map +1 -1
- package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/CheckboxElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/EditableFieldInputElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/EditableFieldTextAreaElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
- package/dist/esm/components/Form/elements/InputElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/InputPasswordElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/SearchInputElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/TextAreaElement.mjs.map +1 -1
- package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
- package/dist/esm/components/Form/layout/FormLabelLayout.mjs.map +1 -1
- package/dist/esm/components/Form/layout/RequiredStar.mjs.map +1 -1
- package/dist/esm/components/HTMLRender/HTMLRender.mjs.map +1 -1
- package/dist/esm/components/Headers/index.mjs.map +1 -1
- package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
- package/dist/esm/components/HideShow/index.mjs.map +1 -1
- package/dist/esm/components/IDE/Code.mjs +1 -1
- package/dist/esm/components/IDE/Code.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockClient.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockHighlight.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeContext.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
- package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
- package/dist/esm/components/IDE/CopyCode.mjs.map +1 -1
- package/dist/esm/components/IDE/FileList.mjs.map +1 -1
- package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
- package/dist/esm/components/IDE/IDE.mjs +2 -1
- package/dist/esm/components/IDE/IDE.mjs.map +1 -1
- package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/IDE/MonacoCode.mjs.map +1 -1
- package/dist/esm/components/IDE/PackageManagerSelector.mjs.map +1 -1
- package/dist/esm/components/IDE/code.content.mjs.map +1 -1
- package/dist/esm/components/IDE/codeTransformer.mjs +7 -4
- package/dist/esm/components/IDE/codeTransformer.mjs.map +1 -1
- package/dist/esm/components/IDE/copyCode.content.mjs.map +1 -1
- package/dist/esm/components/IDE/createFileTree.mjs.map +1 -1
- package/dist/esm/components/IDE/selectors.content.mjs.map +1 -1
- package/dist/esm/components/InformationTag/index.mjs.map +1 -1
- package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
- package/dist/esm/components/Input/Input.mjs.map +1 -1
- package/dist/esm/components/Input/InputPassword.mjs.map +1 -1
- package/dist/esm/components/Input/OTPInput.mjs +2 -1
- package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
- package/dist/esm/components/Input/Radio.mjs.map +1 -1
- package/dist/esm/components/Input/SearchInput.mjs.map +1 -1
- package/dist/esm/components/KeyboardScreenAdapter/index.mjs.map +1 -1
- package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs +2 -1
- package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
- package/dist/esm/components/Label/index.mjs.map +1 -1
- package/dist/esm/components/LanguageBackground/LanguageBackground.mjs.map +1 -1
- package/dist/esm/components/LanguageBackground/LanguageSection.mjs.map +1 -1
- package/dist/esm/components/Link/Link.mjs.map +1 -1
- package/dist/esm/components/Loader/index.content.mjs.map +1 -1
- package/dist/esm/components/Loader/index.mjs.map +1 -1
- package/dist/esm/components/Loader/spinner.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/localeSwitcher.content.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs +4 -2
- package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherDropDown/localeSwitcher.content.mjs.map +1 -1
- package/dist/esm/components/Logo/Logo.mjs.map +1 -1
- package/dist/esm/components/Logo/LogoTextOnly.mjs.map +1 -1
- package/dist/esm/components/Logo/LogoWithText.mjs.map +1 -1
- package/dist/esm/components/Logo/LogoWithTextBelow.mjs.map +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +2 -3
- package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/extensions.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/AICompletionCommands.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +2 -1
- package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/generative/useAICompletion.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/imageUpload.mjs +2 -1
- package/dist/esm/components/MarkdownEditor/imageUpload.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs +118 -59
- package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble-item.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/components/editor-command-item.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/components/editor-command.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/components/editor.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/extensions/ai-highlight.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/extensions/custom-keymap.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs +91 -37
- package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs +49 -13
- package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/extensions/updated-image.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/plugins/upload-images.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/utils/atoms.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/novel/utils/index.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/selectors/ColorSelector.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/selectors/LinkSelector.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/selectors/NodeSelector.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/selectors/TextButtons.mjs.map +1 -1
- package/dist/esm/components/MarkdownEditor/slashCommand.mjs.map +1 -1
- package/dist/esm/components/MaxHeightSmoother/index.mjs.map +1 -1
- package/dist/esm/components/MaxWidthSmoother/index.mjs.map +1 -1
- package/dist/esm/components/Modal/Modal.mjs.map +1 -1
- package/dist/esm/components/Navbar/Burger.mjs.map +1 -1
- package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
- package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
- package/dist/esm/components/Navbar/index.mjs.map +1 -1
- package/dist/esm/components/Navbar/useNavigation.mjs.map +1 -1
- package/dist/esm/components/Pagination/NumberItemsSelector.mjs.map +1 -1
- package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
- package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs.map +1 -1
- package/dist/esm/components/Pagination/pagination.content.mjs.map +1 -1
- package/dist/esm/components/Pattern/DotPattern.mjs.map +1 -1
- package/dist/esm/components/Pattern/GridDistortionPattern.mjs +2 -1
- package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -1
- package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
- package/dist/esm/components/Pattern/SpotLight.mjs.map +1 -1
- package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
- package/dist/esm/components/Popover/static.mjs.map +1 -1
- package/dist/esm/components/PressableSpan/PressableSpan.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/isElementAtTopAndNotCovered.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/rightDrawer.content.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/useRightDrawer.mjs.map +1 -1
- package/dist/esm/components/Select/Multiselect.mjs +26 -24
- package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
- package/dist/esm/components/Select/Select.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/DiscordLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/XLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/index.mjs.map +1 -1
- package/dist/esm/components/Steps/index.mjs.map +1 -1
- package/dist/esm/components/Steps/steps.content.mjs.map +1 -1
- package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
- package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
- package/dist/esm/components/SwitchSelector/useSwitchSelector.mjs.map +1 -1
- package/dist/esm/components/Tab/Tab.mjs +4 -2
- package/dist/esm/components/Tab/Tab.mjs.map +1 -1
- package/dist/esm/components/Tab/TabContext.mjs.map +1 -1
- package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
- package/dist/esm/components/Table/ExpandButton.mjs.map +1 -1
- package/dist/esm/components/Table/SmartTable.mjs.map +1 -1
- package/dist/esm/components/Table/Table.mjs.map +1 -1
- package/dist/esm/components/Table/TableElements.mjs.map +1 -1
- package/dist/esm/components/Table/table.content.mjs.map +1 -1
- package/dist/esm/components/Table/useTableWidths.mjs.map +1 -1
- package/dist/esm/components/Tag/index.mjs.map +1 -1
- package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Adonis.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Angular.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Anthropic.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Astro.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Atlassian.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Bitbucket.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/ChatGPT.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Claude.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/DeepSeek.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Express.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Fastify.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Gemini.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/GitHub.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/GitLab.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Google.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/GoogleAI.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Grok.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Hono.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/LinkedIn.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Lit.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Lynx.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Microsoft.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Mistral.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/NestJS.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Nextjs.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Node.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Nuxt.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Ollama.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/OpenAI.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Perplexity.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Preact.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Reactjs.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Solid.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Svelte.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Tanstack.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Vanilla.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Vitejs.mjs.map +1 -1
- package/dist/esm/components/TechLogo/logos/Vuejs.mjs.map +1 -1
- package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
- package/dist/esm/components/Terminal/terminal.content.mjs.map +1 -1
- package/dist/esm/components/TextArea/AutoSizeTextArea.mjs +1 -2
- package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
- package/dist/esm/components/TextArea/AutocompleteTextArea.mjs +2 -1
- package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
- package/dist/esm/components/TextArea/ContentEditableTextArea.mjs +30 -15
- package/dist/esm/components/TextArea/ContentEditableTextArea.mjs.map +1 -1
- package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
- package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
- package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
- package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
- package/dist/esm/components/Toaster/Toaster.mjs.map +1 -1
- package/dist/esm/components/Toaster/useToast.mjs.map +1 -1
- package/dist/esm/components/WithResizer/index.mjs +3 -2
- package/dist/esm/components/WithResizer/index.mjs.map +1 -1
- package/dist/esm/hooks/useDevice.mjs.map +1 -1
- package/dist/esm/hooks/useGetElementById.mjs.map +1 -1
- package/dist/esm/hooks/useGetElementOrWindow.mjs.map +1 -1
- package/dist/esm/hooks/useHorizontalSwipe.mjs +2 -1
- package/dist/esm/hooks/useHorizontalSwipe.mjs.map +1 -1
- package/dist/esm/hooks/useIsDarkMode.mjs +2 -1
- package/dist/esm/hooks/useIsDarkMode.mjs.map +1 -1
- package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
- package/dist/esm/hooks/useItemSelector.mjs.map +1 -1
- package/dist/esm/hooks/useKeyboardDetector.mjs.map +1 -1
- package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
- package/dist/esm/hooks/useScreenWidth.mjs.map +1 -1
- package/dist/esm/hooks/useScrollBlockage/index.mjs.map +1 -1
- package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
- package/dist/esm/hooks/useScrollDetection.mjs +5 -2
- package/dist/esm/hooks/useScrollDetection.mjs.map +1 -1
- package/dist/esm/hooks/useScrollY.mjs.map +1 -1
- package/dist/esm/hooks/useSearch.mjs.map +1 -1
- package/dist/esm/libs/auth.mjs.map +1 -1
- package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
- package/dist/esm/routes.mjs +7 -1
- package/dist/esm/routes.mjs.map +1 -1
- package/dist/esm/structured-data/buildAuthorJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildBreadcrumbsJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildCreativeWorkJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildFAQPageJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildOrganizationJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildProductJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildSoftwareApplicationJsonLd.mjs +23 -4
- package/dist/esm/structured-data/buildSoftwareApplicationJsonLd.mjs.map +1 -1
- package/dist/esm/structured-data/buildWebsiteJsonLd.mjs.map +1 -1
- package/dist/esm/tailwind.config.mjs.map +1 -1
- package/dist/types/api/hooks/ai.d.ts +0 -1
- package/dist/types/api/hooks/ai.d.ts.map +1 -1
- package/dist/types/api/hooks/analytics.d.ts +27 -0
- package/dist/types/api/hooks/analytics.d.ts.map +1 -0
- package/dist/types/api/hooks/asset.d.ts +0 -1
- package/dist/types/api/hooks/asset.d.ts.map +1 -1
- package/dist/types/api/hooks/audit.d.ts +0 -1
- package/dist/types/api/hooks/audit.d.ts.map +1 -1
- package/dist/types/api/hooks/auth.d.ts.map +1 -1
- package/dist/types/api/hooks/bitbucket.d.ts.map +1 -1
- package/dist/types/api/hooks/dictionary.d.ts +2 -3
- package/dist/types/api/hooks/dictionary.d.ts.map +1 -1
- package/dist/types/api/hooks/discussions.d.ts +0 -1
- package/dist/types/api/hooks/discussions.d.ts.map +1 -1
- package/dist/types/api/hooks/editor.d.ts.map +1 -1
- package/dist/types/api/hooks/environment.d.ts.map +1 -1
- package/dist/types/api/hooks/github.d.ts +0 -1
- package/dist/types/api/hooks/github.d.ts.map +1 -1
- package/dist/types/api/hooks/gitlab.d.ts.map +1 -1
- package/dist/types/api/hooks/newsletter.d.ts.map +1 -1
- package/dist/types/api/hooks/organization.d.ts +2 -2
- package/dist/types/api/hooks/organization.d.ts.map +1 -1
- package/dist/types/api/hooks/project.d.ts +0 -1
- package/dist/types/api/hooks/project.d.ts.map +1 -1
- package/dist/types/api/hooks/reviewer.d.ts +2 -3
- package/dist/types/api/hooks/reviewer.d.ts.map +1 -1
- package/dist/types/api/hooks/search.d.ts +0 -1
- package/dist/types/api/hooks/search.d.ts.map +1 -1
- package/dist/types/api/hooks/showcaseProject.d.ts +1 -2
- package/dist/types/api/hooks/showcaseProject.d.ts.map +1 -1
- package/dist/types/api/hooks/stripe.d.ts +0 -1
- package/dist/types/api/hooks/stripe.d.ts.map +1 -1
- package/dist/types/api/hooks/tag.d.ts +0 -1
- package/dist/types/api/hooks/tag.d.ts.map +1 -1
- package/dist/types/api/hooks/translate.d.ts.map +1 -1
- package/dist/types/api/hooks/user.d.ts +0 -1
- package/dist/types/api/hooks/user.d.ts.map +1 -1
- package/dist/types/api/hooks/utils.d.ts +1 -6
- package/dist/types/api/hooks/utils.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +5 -3
- package/dist/types/api/useAuth/useAuth.d.ts +1 -5
- package/dist/types/api/useAuth/useAuth.d.ts.map +1 -1
- package/dist/types/api/useAuth/useOAuth2.d.ts +1 -2
- package/dist/types/api/useAuth/useOAuth2.d.ts.map +1 -1
- package/dist/types/api/useAuth/useSession.d.ts +7 -4
- package/dist/types/api/useAuth/useSession.d.ts.map +1 -1
- package/dist/types/api/useIntlayerAPI.d.ts +44 -290
- package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
- package/dist/types/api/useUser/index.d.ts +1 -3
- package/dist/types/api/useUser/index.d.ts.map +1 -1
- package/dist/types/components/Accordion/Accordion.d.ts +1 -1
- package/dist/types/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/types/components/Avatar/image.d.ts.map +1 -1
- package/dist/types/components/Avatar/index.d.ts +0 -1
- package/dist/types/components/Avatar/index.d.ts.map +1 -1
- package/dist/types/components/Badge/index.d.ts +25 -16
- package/dist/types/components/Badge/index.d.ts.map +1 -1
- package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +1 -3
- package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts.map +1 -1
- package/dist/types/components/Breadcrumb/index.d.ts +4 -5
- package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
- package/dist/types/components/Browser/Browser.content.d.ts +13 -15
- package/dist/types/components/Browser/Browser.content.d.ts.map +1 -1
- package/dist/types/components/Browser/Browser.d.ts +1 -14
- package/dist/types/components/Browser/Browser.d.ts.map +1 -1
- package/dist/types/components/Browser/extractUrlFromSitemap.d.ts.map +1 -1
- package/dist/types/components/Button/Button.d.ts +5 -7
- package/dist/types/components/Button/Button.d.ts.map +1 -1
- package/dist/types/components/Carousel/index.content.d.ts +3 -5
- package/dist/types/components/Carousel/index.content.d.ts.map +1 -1
- package/dist/types/components/Carousel/index.d.ts +0 -1
- package/dist/types/components/Carousel/index.d.ts.map +1 -1
- package/dist/types/components/ClickOutsideDiv/index.d.ts +0 -1
- package/dist/types/components/ClickOutsideDiv/index.d.ts.map +1 -1
- package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +4 -6
- package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
- package/dist/types/components/Command/index.d.ts +21 -25
- package/dist/types/components/Command/index.d.ts.map +1 -1
- package/dist/types/components/Container/index.d.ts +11 -12
- package/dist/types/components/Container/index.d.ts.map +1 -1
- package/dist/types/components/ContentEditor/ContentEditor.d.ts +5 -3
- package/dist/types/components/ContentEditor/ContentEditor.d.ts.map +1 -1
- package/dist/types/components/ContentEditor/ContentEditorInput.d.ts +10 -5
- package/dist/types/components/ContentEditor/ContentEditorInput.d.ts.map +1 -1
- package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts +10 -5
- package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts.map +1 -1
- package/dist/types/components/ContentSelector/ContentSelector.d.ts +0 -1
- package/dist/types/components/ContentSelector/ContentSelector.d.ts.map +1 -1
- package/dist/types/components/CopyButton/CopyButton.content.d.ts +1 -3
- package/dist/types/components/CopyButton/CopyButton.content.d.ts.map +1 -1
- package/dist/types/components/CopyButton/index.d.ts +1 -1
- package/dist/types/components/CopyButton/index.d.ts.map +1 -1
- package/dist/types/components/CopyToClipboard/index.d.ts +0 -1
- package/dist/types/components/CopyToClipboard/index.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/ItemLayout.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/ItemLayout.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts +1 -2
- package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts +0 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts +2 -6
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts +7 -5
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/object.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +18 -20
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +4 -6
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts +1 -2
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +52 -54
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +16 -18
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts +3 -4
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts +1 -1
- package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +10 -12
- package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +16 -18
- package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +4 -6
- package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts +1 -2
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +3 -5
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts +3 -5
- package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +2 -4
- package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts +0 -1
- package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/index.d.ts +1 -0
- package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +16 -18
- package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
- package/dist/types/components/DropDown/index.d.ts +1 -1
- package/dist/types/components/DropDown/index.d.ts.map +1 -1
- package/dist/types/components/EditableField/EditableFieldInput.d.ts +4 -2
- package/dist/types/components/EditableField/EditableFieldInput.d.ts.map +1 -1
- package/dist/types/components/EditableField/EditableFieldLayout.d.ts +0 -1
- package/dist/types/components/EditableField/EditableFieldLayout.d.ts.map +1 -1
- package/dist/types/components/EditableField/EditableFieldTextArea.d.ts +4 -2
- package/dist/types/components/EditableField/EditableFieldTextArea.d.ts.map +1 -1
- package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts +7 -4
- package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts.map +1 -1
- package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +1 -3
- package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts.map +1 -1
- package/dist/types/components/Flags/Flag.d.ts +0 -1
- package/dist/types/components/Flags/Flag.d.ts.map +1 -1
- package/dist/types/components/Flags/flags.d.ts +604 -604
- package/dist/types/components/Flags/flags.d.ts.map +1 -1
- package/dist/types/components/Footer/index.d.ts +13 -6
- package/dist/types/components/Footer/index.d.ts.map +1 -1
- package/dist/types/components/Form/Form.d.ts +2 -25
- package/dist/types/components/Form/Form.d.ts.map +1 -1
- package/dist/types/components/Form/FormBase.d.ts +3 -16
- package/dist/types/components/Form/FormBase.d.ts.map +1 -1
- package/dist/types/components/Form/FormControl.d.ts +0 -1
- package/dist/types/components/Form/FormControl.d.ts.map +1 -1
- package/dist/types/components/Form/FormDescription.d.ts +0 -1
- package/dist/types/components/Form/FormDescription.d.ts.map +1 -1
- package/dist/types/components/Form/FormField.d.ts +2 -7
- package/dist/types/components/Form/FormField.d.ts.map +1 -1
- package/dist/types/components/Form/FormItem.d.ts +1 -3
- package/dist/types/components/Form/FormItem.d.ts.map +1 -1
- package/dist/types/components/Form/FormLabel.d.ts +0 -1
- package/dist/types/components/Form/FormLabel.d.ts.map +1 -1
- package/dist/types/components/Form/FormMessage.d.ts +0 -1
- package/dist/types/components/Form/FormMessage.d.ts.map +1 -1
- package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts +1 -2
- package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/CheckboxElement.d.ts +2 -2
- package/dist/types/components/Form/elements/CheckboxElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +2 -4
- package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +2 -4
- package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/FormElement.d.ts +2 -3
- package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/FormElementWrapper.d.ts +0 -1
- package/dist/types/components/Form/elements/FormElementWrapper.d.ts.map +1 -1
- package/dist/types/components/Form/elements/InputElement.d.ts +2 -2
- package/dist/types/components/Form/elements/InputElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/InputPasswordElement.d.ts +1 -2
- package/dist/types/components/Form/elements/InputPasswordElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/MultiselectElement.d.ts +2 -13
- package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/OTPElement.d.ts +4 -16
- package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/SearchInputElement.d.ts +2 -2
- package/dist/types/components/Form/elements/SearchInputElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/SelectElement.d.ts +2 -13
- package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +3 -13
- package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
- package/dist/types/components/Form/elements/TextAreaElement.d.ts +1 -2
- package/dist/types/components/Form/elements/TextAreaElement.d.ts.map +1 -1
- package/dist/types/components/Form/index.d.ts +3 -1
- package/dist/types/components/Form/layout/FormItemLayout.d.ts +0 -1
- package/dist/types/components/Form/layout/FormItemLayout.d.ts.map +1 -1
- package/dist/types/components/Form/layout/FormLabelLayout.d.ts +0 -1
- package/dist/types/components/Form/layout/FormLabelLayout.d.ts.map +1 -1
- package/dist/types/components/Form/layout/RequiredStar.d.ts +0 -1
- package/dist/types/components/Form/layout/RequiredStar.d.ts.map +1 -1
- package/dist/types/components/HTMLRender/HTMLRender.d.ts +0 -1
- package/dist/types/components/HTMLRender/HTMLRender.d.ts.map +1 -1
- package/dist/types/components/Headers/index.d.ts +0 -1
- package/dist/types/components/Headers/index.d.ts.map +1 -1
- package/dist/types/components/HeightResizer/index.d.ts +0 -1
- package/dist/types/components/HeightResizer/index.d.ts.map +1 -1
- package/dist/types/components/HideShow/index.d.ts +0 -1
- package/dist/types/components/HideShow/index.d.ts.map +1 -1
- package/dist/types/components/IDE/Code.d.ts +2 -2
- package/dist/types/components/IDE/Code.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeBlockClient.d.ts +0 -1
- package/dist/types/components/IDE/CodeBlockClient.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeBlockHighlight.d.ts +6 -10
- package/dist/types/components/IDE/CodeBlockHighlight.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeBlockServer.d.ts +0 -1
- package/dist/types/components/IDE/CodeBlockServer.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeBlockShiki.d.ts +0 -1
- package/dist/types/components/IDE/CodeBlockShiki.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeConditionalRenderer.d.ts +0 -1
- package/dist/types/components/IDE/CodeConditionalRenderer.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeContext.d.ts +1 -3
- package/dist/types/components/IDE/CodeContext.d.ts.map +1 -1
- package/dist/types/components/IDE/CodeFormatSelector.d.ts +2 -2
- package/dist/types/components/IDE/CodeFormatSelector.d.ts.map +1 -1
- package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts +0 -1
- package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts.map +1 -1
- package/dist/types/components/IDE/CopyCode.d.ts +2 -2
- package/dist/types/components/IDE/CopyCode.d.ts.map +1 -1
- package/dist/types/components/IDE/FileList.d.ts +0 -1
- package/dist/types/components/IDE/FileList.d.ts.map +1 -1
- package/dist/types/components/IDE/FileTree.d.ts +0 -1
- package/dist/types/components/IDE/FileTree.d.ts.map +1 -1
- package/dist/types/components/IDE/IDE.d.ts +0 -1
- package/dist/types/components/IDE/IDE.d.ts.map +1 -1
- package/dist/types/components/IDE/MarkDownRender.d.ts +0 -1
- package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
- package/dist/types/components/IDE/MonacoCode.d.ts +0 -1
- package/dist/types/components/IDE/MonacoCode.d.ts.map +1 -1
- package/dist/types/components/IDE/PackageManagerSelector.d.ts +0 -1
- package/dist/types/components/IDE/PackageManagerSelector.d.ts.map +1 -1
- package/dist/types/components/IDE/code.content.d.ts +2 -4
- package/dist/types/components/IDE/code.content.d.ts.map +1 -1
- package/dist/types/components/IDE/codeTransformer.d.ts.map +1 -1
- package/dist/types/components/IDE/copyCode.content.d.ts +2 -4
- package/dist/types/components/IDE/copyCode.content.d.ts.map +1 -1
- package/dist/types/components/IDE/createFileTree.d.ts.map +1 -1
- package/dist/types/components/IDE/index.d.ts +1 -1
- package/dist/types/components/IDE/selectors.content.d.ts +6 -8
- package/dist/types/components/IDE/selectors.content.d.ts.map +1 -1
- package/dist/types/components/InformationTag/index.d.ts +0 -1
- package/dist/types/components/InformationTag/index.d.ts.map +1 -1
- package/dist/types/components/Input/Checkbox.d.ts +3 -5
- package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
- package/dist/types/components/Input/Input.d.ts +2 -4
- package/dist/types/components/Input/Input.d.ts.map +1 -1
- package/dist/types/components/Input/InputPassword.d.ts +0 -1
- package/dist/types/components/Input/InputPassword.d.ts.map +1 -1
- package/dist/types/components/Input/OTPInput.d.ts +7 -17
- package/dist/types/components/Input/OTPInput.d.ts.map +1 -1
- package/dist/types/components/Input/Radio.d.ts +3 -5
- package/dist/types/components/Input/Radio.d.ts.map +1 -1
- package/dist/types/components/Input/SearchInput.d.ts +1 -6
- package/dist/types/components/Input/SearchInput.d.ts.map +1 -1
- package/dist/types/components/KeyboardScreenAdapter/index.d.ts +0 -1
- package/dist/types/components/KeyboardScreenAdapter/index.d.ts.map +1 -1
- package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts +11 -6
- package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts.map +1 -1
- package/dist/types/components/Label/index.d.ts +0 -1
- package/dist/types/components/Label/index.d.ts.map +1 -1
- package/dist/types/components/LanguageBackground/LanguageBackground.d.ts +0 -1
- package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -1
- package/dist/types/components/LanguageBackground/LanguageSection.d.ts +0 -1
- package/dist/types/components/LanguageBackground/LanguageSection.d.ts.map +1 -1
- package/dist/types/components/Link/Link.d.ts +7 -12
- package/dist/types/components/Link/Link.d.ts.map +1 -1
- package/dist/types/components/Loader/index.content.d.ts +1 -3
- package/dist/types/components/Loader/index.content.d.ts.map +1 -1
- package/dist/types/components/Loader/index.d.ts +3 -2
- package/dist/types/components/Loader/index.d.ts.map +1 -1
- package/dist/types/components/Loader/spinner.d.ts +3 -7
- package/dist/types/components/Loader/spinner.d.ts.map +1 -1
- package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts +0 -1
- package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts.map +1 -1
- package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts +0 -1
- package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts.map +1 -1
- package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +8 -10
- package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts.map +1 -1
- package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts +0 -1
- package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts.map +1 -1
- package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +6 -8
- package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts.map +1 -1
- package/dist/types/components/Logo/Logo.d.ts +0 -1
- package/dist/types/components/Logo/Logo.d.ts.map +1 -1
- package/dist/types/components/Logo/LogoTextOnly.d.ts +0 -1
- package/dist/types/components/Logo/LogoTextOnly.d.ts.map +1 -1
- package/dist/types/components/Logo/LogoWithText.d.ts +0 -1
- package/dist/types/components/Logo/LogoWithText.d.ts.map +1 -1
- package/dist/types/components/Logo/LogoWithTextBelow.d.ts +0 -1
- package/dist/types/components/Logo/LogoWithTextBelow.d.ts.map +1 -1
- package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts +0 -1
- package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -1
- package/dist/types/components/MarkDownRender/MarkDownRender.d.ts +65 -116
- package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
- package/dist/types/components/MarkDownRender/index.d.ts +1 -1
- package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts +11 -6
- package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/extensions.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts +1 -6
- package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts +7 -10
- package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts +1 -5
- package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts +7 -12
- package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts +2 -1
- package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/imageUpload.d.ts +6 -7
- package/dist/types/components/MarkdownEditor/imageUpload.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts +118 -61
- package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts +4 -9
- package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts +6 -10
- package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts +5 -2
- package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts +4 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts +3 -8
- package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts +4 -5
- package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts +1 -4
- package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/index.d.ts +1 -0
- package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts +2 -8
- package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts +0 -1
- package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts +1 -1
- package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts +1 -3
- package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts.map +1 -1
- package/dist/types/components/MarkdownEditor/slashCommand.d.ts +3 -5
- package/dist/types/components/MarkdownEditor/slashCommand.d.ts.map +1 -1
- package/dist/types/components/MaxHeightSmoother/index.d.ts +0 -1
- package/dist/types/components/MaxHeightSmoother/index.d.ts.map +1 -1
- package/dist/types/components/MaxWidthSmoother/index.d.ts +1 -11
- package/dist/types/components/MaxWidthSmoother/index.d.ts.map +1 -1
- package/dist/types/components/Modal/Modal.d.ts +0 -1
- package/dist/types/components/Modal/Modal.d.ts.map +1 -1
- package/dist/types/components/Navbar/Burger.d.ts +1 -7
- package/dist/types/components/Navbar/Burger.d.ts.map +1 -1
- package/dist/types/components/Navbar/DesktopNavbar.d.ts +9 -11
- package/dist/types/components/Navbar/DesktopNavbar.d.ts.map +1 -1
- package/dist/types/components/Navbar/MobileNavbar.d.ts +15 -17
- package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
- package/dist/types/components/Navbar/index.d.ts +21 -79
- package/dist/types/components/Navbar/index.d.ts.map +1 -1
- package/dist/types/components/Navbar/useNavigation.d.ts +5 -2
- package/dist/types/components/Navbar/useNavigation.d.ts.map +1 -1
- package/dist/types/components/Pagination/NumberItemsSelector.d.ts +0 -1
- package/dist/types/components/Pagination/NumberItemsSelector.d.ts.map +1 -1
- package/dist/types/components/Pagination/Pagination.d.ts +4 -6
- package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts +0 -1
- package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts.map +1 -1
- package/dist/types/components/Pagination/pagination.content.d.ts +5 -7
- package/dist/types/components/Pagination/pagination.content.d.ts.map +1 -1
- package/dist/types/components/Pattern/DotPattern.d.ts +13 -7
- package/dist/types/components/Pattern/DotPattern.d.ts.map +1 -1
- package/dist/types/components/Pattern/GridDistortionPattern.d.ts +0 -1
- package/dist/types/components/Pattern/GridDistortionPattern.d.ts.map +1 -1
- package/dist/types/components/Pattern/GridPattern.d.ts +11 -6
- package/dist/types/components/Pattern/GridPattern.d.ts.map +1 -1
- package/dist/types/components/Pattern/SpotLight.d.ts +11 -6
- package/dist/types/components/Pattern/SpotLight.d.ts.map +1 -1
- package/dist/types/components/Popover/dynamic.d.ts +0 -1
- package/dist/types/components/Popover/dynamic.d.ts.map +1 -1
- package/dist/types/components/Popover/static.d.ts +15 -8
- package/dist/types/components/Popover/static.d.ts.map +1 -1
- package/dist/types/components/PressableSpan/PressableSpan.d.ts +0 -1
- package/dist/types/components/PressableSpan/PressableSpan.d.ts.map +1 -1
- package/dist/types/components/RightDrawer/RightDrawer.d.ts +5 -3
- package/dist/types/components/RightDrawer/RightDrawer.d.ts.map +1 -1
- package/dist/types/components/RightDrawer/isElementAtTopAndNotCovered.d.ts.map +1 -1
- package/dist/types/components/RightDrawer/rightDrawer.content.d.ts +2 -4
- package/dist/types/components/RightDrawer/rightDrawer.content.d.ts.map +1 -1
- package/dist/types/components/RightDrawer/useRightDrawer.d.ts.map +1 -1
- package/dist/types/components/Select/Multiselect.d.ts +0 -1
- package/dist/types/components/Select/Multiselect.d.ts.map +1 -1
- package/dist/types/components/Select/Select.d.ts +19 -12
- package/dist/types/components/Select/Select.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/DiscordLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/DiscordLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/FacebookLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/FacebookLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/InstagramLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/InstagramLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/ProductHuntLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/ProductHuntLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/TiktokLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/TiktokLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/XLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/XLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/YoutubeLogo.d.ts +0 -1
- package/dist/types/components/SocialNetworks/YoutubeLogo.d.ts.map +1 -1
- package/dist/types/components/SocialNetworks/index.d.ts +7 -7
- package/dist/types/components/SocialNetworks/index.d.ts.map +1 -1
- package/dist/types/components/Steps/index.d.ts +0 -1
- package/dist/types/components/Steps/index.d.ts.map +1 -1
- package/dist/types/components/Steps/steps.content.d.ts +2 -4
- package/dist/types/components/Steps/steps.content.d.ts.map +1 -1
- package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +7 -10
- package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
- package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +5 -8
- package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts.map +1 -1
- package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts +14 -15
- package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts.map +1 -1
- package/dist/types/components/Tab/Tab.d.ts +28 -22
- package/dist/types/components/Tab/Tab.d.ts.map +1 -1
- package/dist/types/components/Tab/TabContext.d.ts +1 -3
- package/dist/types/components/Tab/TabContext.d.ts.map +1 -1
- package/dist/types/components/TabSelector/TabSelector.d.ts +4 -15
- package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
- package/dist/types/components/Table/ExpandButton.d.ts +0 -1
- package/dist/types/components/Table/ExpandButton.d.ts.map +1 -1
- package/dist/types/components/Table/SmartTable.d.ts +0 -1
- package/dist/types/components/Table/SmartTable.d.ts.map +1 -1
- package/dist/types/components/Table/Table.d.ts +1 -3
- package/dist/types/components/Table/Table.d.ts.map +1 -1
- package/dist/types/components/Table/TableElements.d.ts +4 -18
- package/dist/types/components/Table/TableElements.d.ts.map +1 -1
- package/dist/types/components/Table/table.content.d.ts +2 -4
- package/dist/types/components/Table/table.content.d.ts.map +1 -1
- package/dist/types/components/Table/useTableWidths.d.ts +0 -1
- package/dist/types/components/Table/useTableWidths.d.ts.map +1 -1
- package/dist/types/components/Tag/index.d.ts +6 -8
- package/dist/types/components/Tag/index.d.ts.map +1 -1
- package/dist/types/components/TechLogo/TechLogo.d.ts +0 -1
- package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Adonis.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Adonis.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Angular.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Angular.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Anthropic.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Anthropic.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Astro.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Astro.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Atlassian.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Atlassian.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Bitbucket.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Bitbucket.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/ChatGPT.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/ChatGPT.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Claude.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Claude.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/DeepSeek.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/DeepSeek.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Express.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Express.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Fastify.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Fastify.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Gemini.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Gemini.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/GitHub.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/GitHub.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/GitLab.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/GitLab.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Google.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Google.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/GoogleAI.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/GoogleAI.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Grok.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Grok.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Hono.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Hono.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/LinkedIn.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/LinkedIn.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Lit.d.ts +1 -3
- package/dist/types/components/TechLogo/logos/Lit.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Lynx.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Lynx.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Microsoft.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Microsoft.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Mistral.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Mistral.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/NestJS.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/NestJS.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Nextjs.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Nextjs.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Node.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Node.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Nuxt.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Nuxt.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Ollama.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Ollama.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/OpenAI.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/OpenAI.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Perplexity.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Perplexity.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Preact.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Preact.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Reactjs.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Reactjs.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Solid.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Solid.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Svelte.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Svelte.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Tanstack.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Tanstack.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Vanilla.d.ts +1 -3
- package/dist/types/components/TechLogo/logos/Vanilla.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Vitejs.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Vitejs.d.ts.map +1 -1
- package/dist/types/components/TechLogo/logos/Vuejs.d.ts +0 -1
- package/dist/types/components/TechLogo/logos/Vuejs.d.ts.map +1 -1
- package/dist/types/components/TechLogo/techLogos.d.ts +0 -2
- package/dist/types/components/TechLogo/types.d.ts.map +1 -1
- package/dist/types/components/Terminal/Terminal.d.ts +0 -1
- package/dist/types/components/Terminal/Terminal.d.ts.map +1 -1
- package/dist/types/components/Terminal/terminal.content.d.ts +2 -4
- package/dist/types/components/Terminal/terminal.content.d.ts.map +1 -1
- package/dist/types/components/TextArea/AutoSizeTextArea.d.ts +3 -2
- package/dist/types/components/TextArea/AutoSizeTextArea.d.ts.map +1 -1
- package/dist/types/components/TextArea/AutocompleteTextArea.d.ts +3 -2
- package/dist/types/components/TextArea/AutocompleteTextArea.d.ts.map +1 -1
- package/dist/types/components/TextArea/ContentEditableTextArea.d.ts +2 -7
- package/dist/types/components/TextArea/ContentEditableTextArea.d.ts.map +1 -1
- package/dist/types/components/TextArea/TextArea.d.ts +5 -3
- package/dist/types/components/TextArea/TextArea.d.ts.map +1 -1
- package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts +0 -1
- package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts.map +1 -1
- package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts +0 -1
- package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts.map +1 -1
- package/dist/types/components/ThemeSwitcherDropDown/types.d.ts.map +1 -1
- package/dist/types/components/Toaster/Toast.d.ts +1 -3
- package/dist/types/components/Toaster/Toast.d.ts.map +1 -1
- package/dist/types/components/Toaster/Toaster.d.ts +1 -3
- package/dist/types/components/Toaster/Toaster.d.ts.map +1 -1
- package/dist/types/components/Toaster/useToast.d.ts +10 -15
- package/dist/types/components/Toaster/useToast.d.ts.map +1 -1
- package/dist/types/components/WithResizer/index.d.ts +15 -8
- package/dist/types/components/WithResizer/index.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +46 -7
- package/dist/types/hooks/index.d.ts +1 -1
- package/dist/types/hooks/useDevice.d.ts.map +1 -1
- package/dist/types/hooks/useGetElementById.d.ts.map +1 -1
- package/dist/types/hooks/useGetElementOrWindow.d.ts.map +1 -1
- package/dist/types/hooks/useHorizontalSwipe.d.ts +0 -1
- package/dist/types/hooks/useHorizontalSwipe.d.ts.map +1 -1
- package/dist/types/hooks/useIsDarkMode.d.ts.map +1 -1
- package/dist/types/hooks/useIsMounted.d.ts.map +1 -1
- package/dist/types/hooks/useItemSelector.d.ts +1 -6
- package/dist/types/hooks/useItemSelector.d.ts.map +1 -1
- package/dist/types/hooks/useKeyboardDetector.d.ts.map +1 -1
- package/dist/types/hooks/usePersistedStore.d.ts +0 -1
- package/dist/types/hooks/usePersistedStore.d.ts.map +1 -1
- package/dist/types/hooks/useScreenWidth.d.ts.map +1 -1
- package/dist/types/hooks/useScrollBlockage/index.d.ts.map +1 -1
- package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts.map +1 -1
- package/dist/types/hooks/useScrollDetection.d.ts.map +1 -1
- package/dist/types/hooks/useScrollY.d.ts.map +1 -1
- package/dist/types/hooks/useSearch.d.ts.map +1 -1
- package/dist/types/libs/auth.d.ts +1 -2
- package/dist/types/libs/auth.d.ts.map +1 -1
- package/dist/types/providers/ReactQueryProvider.d.ts +0 -1
- package/dist/types/providers/ReactQueryProvider.d.ts.map +1 -1
- package/dist/types/routes.d.ts +175 -169
- package/dist/types/routes.d.ts.map +1 -1
- package/dist/types/structured-data/buildAuthorJsonLd.d.ts +1 -1
- package/dist/types/structured-data/buildAuthorJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts +4 -7
- package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts +31 -39
- package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildFAQPageJsonLd.d.ts +5 -7
- package/dist/types/structured-data/buildFAQPageJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildOrganizationJsonLd.d.ts +16 -17
- package/dist/types/structured-data/buildOrganizationJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildProductJsonLd.d.ts +13 -15
- package/dist/types/structured-data/buildProductJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts +47 -35
- package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts.map +1 -1
- package/dist/types/structured-data/buildWebsiteJsonLd.d.ts +19 -20
- package/dist/types/structured-data/buildWebsiteJsonLd.d.ts.map +1 -1
- package/dist/types/tailwind.config.d.ts.map +1 -1
- package/package.json +64 -66
- package/src/components/MarkdownEditor/markdown-editor.css +2 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/extensions/index.ts"],"sourcesContent":["import { InputRule } from '@tiptap/core';\nimport CharacterCount from '@tiptap/extension-character-count';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport HorizontalRule from '@tiptap/extension-horizontal-rule';\nimport TiptapImage from '@tiptap/extension-image';\nimport TiptapLink from '@tiptap/extension-link';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { TaskItem } from '@tiptap/extension-task-item';\nimport { TaskList } from '@tiptap/extension-task-list';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport TiptapUnderline from '@tiptap/extension-underline';\nimport Youtube from '@tiptap/extension-youtube';\nimport StarterKit from '@tiptap/starter-kit';\nimport GlobalDragHandle from 'tiptap-extension-global-drag-handle';\nimport { Markdown } from 'tiptap-markdown';\nimport CustomKeymap from './custom-keymap';\nimport { ImageResizer } from './image-resizer';\nimport UpdatedImage from './updated-image';\n\nconst PlaceholderExtension = Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === 'heading') {\n return `Heading ${node.attrs.level}`;\n }\n return \"Press '/' for commands\";\n },\n includeChildren: true,\n});\n\nconst HighlightExtension = Highlight.configure({\n multicolor: true,\n});\n\nconst MarkdownExtension = Markdown.configure({\n html: false,\n transformCopiedText: true,\n});\n\nconst Horizontal = HorizontalRule.extend({\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/u,\n handler: ({ state, range }) => {\n const attributes = {};\n\n const { tr } = state;\n const start = range.from;\n const end = range.to;\n\n tr.insert(start - 1, this.type.create(attributes)).delete(\n tr.mapping.map(start),\n tr.mapping.map(end)\n );\n },\n }),\n ];\n },\n});\n\nexport * from './ai-highlight';\nexport * from './slash-command';\nexport {\n CharacterCount,\n Color,\n CustomKeymap,\n GlobalDragHandle,\n HighlightExtension,\n Horizontal as HorizontalRule,\n ImageResizer,\n InputRule,\n MarkdownExtension,\n PlaceholderExtension as Placeholder,\n StarterKit,\n TaskItem,\n TaskList,\n TextStyle,\n TiptapImage,\n TiptapLink,\n TiptapUnderline,\n UpdatedImage,\n Youtube,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,uBAAuB,YAAY,UAAU;CACjD,cAAc,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/extensions/index.ts"],"sourcesContent":["import { InputRule } from '@tiptap/core';\nimport CharacterCount from '@tiptap/extension-character-count';\nimport { Color } from '@tiptap/extension-color';\nimport Highlight from '@tiptap/extension-highlight';\nimport HorizontalRule from '@tiptap/extension-horizontal-rule';\nimport TiptapImage from '@tiptap/extension-image';\nimport TiptapLink from '@tiptap/extension-link';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { TaskItem } from '@tiptap/extension-task-item';\nimport { TaskList } from '@tiptap/extension-task-list';\nimport { TextStyle } from '@tiptap/extension-text-style';\nimport TiptapUnderline from '@tiptap/extension-underline';\nimport Youtube from '@tiptap/extension-youtube';\nimport StarterKit from '@tiptap/starter-kit';\nimport GlobalDragHandle from 'tiptap-extension-global-drag-handle';\nimport { Markdown } from 'tiptap-markdown';\nimport CustomKeymap from './custom-keymap';\nimport { ImageResizer } from './image-resizer';\nimport UpdatedImage from './updated-image';\n\nconst PlaceholderExtension = Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === 'heading') {\n return `Heading ${node.attrs.level}`;\n }\n return \"Press '/' for commands\";\n },\n includeChildren: true,\n});\n\nconst HighlightExtension = Highlight.configure({\n multicolor: true,\n});\n\nconst MarkdownExtension = Markdown.configure({\n html: false,\n transformCopiedText: true,\n});\n\nconst Horizontal = HorizontalRule.extend({\n addInputRules() {\n return [\n new InputRule({\n find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/u,\n handler: ({ state, range }) => {\n const attributes = {};\n\n const { tr } = state;\n const start = range.from;\n const end = range.to;\n\n tr.insert(start - 1, this.type.create(attributes)).delete(\n tr.mapping.map(start),\n tr.mapping.map(end)\n );\n },\n }),\n ];\n },\n});\n\nexport * from './ai-highlight';\nexport * from './slash-command';\nexport {\n CharacterCount,\n Color,\n CustomKeymap,\n GlobalDragHandle,\n HighlightExtension,\n Horizontal as HorizontalRule,\n ImageResizer,\n InputRule,\n MarkdownExtension,\n PlaceholderExtension as Placeholder,\n StarterKit,\n TaskItem,\n TaskList,\n TextStyle,\n TiptapImage,\n TiptapLink,\n TiptapUnderline,\n UpdatedImage,\n Youtube,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,uBAAuB,YAAY,UAAU;CACjD,cAAc,EAAE,WAAW;EACzB,IAAI,KAAK,KAAK,SAAS,WACrB,OAAO,WAAW,KAAK,MAAM;EAE/B,OAAO;CACT;CACA,iBAAiB;AACnB,CAAC;AAED,MAAM,qBAAqB,UAAU,UAAU,EAC7C,YAAY,KACd,CAAC;AAED,MAAM,oBAAoB,SAAS,UAAU;CAC3C,MAAM;CACN,qBAAqB;AACvB,CAAC;AAED,MAAM,aAAa,eAAe,OAAO,EACvC,gBAAgB;CACd,OAAO,CACL,IAAI,UAAU;EACZ,MAAM;EACN,UAAU,EAAE,OAAO,YAAY;GAC7B,MAAM,aAAa,CAAC;GAEpB,MAAM,EAAE,OAAO;GACf,MAAM,QAAQ,MAAM;GACpB,MAAM,MAAM,MAAM;GAElB,GAAG,OAAO,QAAQ,GAAG,KAAK,KAAK,OAAO,UAAU,CAAC,CAAC,CAAC,OACjD,GAAG,QAAQ,IAAI,KAAK,GACpB,GAAG,QAAQ,IAAI,GAAG,CACpB;EACF;CACF,CAAC,CACH;AACF,EACF,CAAC"}
|
|
@@ -2,7 +2,6 @@ import { EditorCommandOut } from "../components/editor-command.mjs";
|
|
|
2
2
|
import { ReactRenderer } from "@tiptap/react";
|
|
3
3
|
import { Extension } from "@tiptap/core";
|
|
4
4
|
import Suggestion from "@tiptap/suggestion";
|
|
5
|
-
import tippy from "tippy.js";
|
|
6
5
|
|
|
7
6
|
//#region src/components/MarkdownEditor/novel/extensions/slash-command.tsx
|
|
8
7
|
const Command = Extension.create({
|
|
@@ -25,6 +24,51 @@ const Command = Extension.create({
|
|
|
25
24
|
})];
|
|
26
25
|
}
|
|
27
26
|
});
|
|
27
|
+
/**
|
|
28
|
+
* Minimal floating popup anchored to the caret. Replaces the tippy.js
|
|
29
|
+
* dependency: the popup is a fixed-position element appended to the given
|
|
30
|
+
* container, placed below the reference rect (flipped above when it would
|
|
31
|
+
* overflow the viewport) and repositioned on scroll/resize.
|
|
32
|
+
*/
|
|
33
|
+
const createSuggestionPopup = (content, getReferenceClientRect, container) => {
|
|
34
|
+
let getRect = getReferenceClientRect;
|
|
35
|
+
const element = document.createElement("div");
|
|
36
|
+
element.style.position = "fixed";
|
|
37
|
+
element.style.top = "0";
|
|
38
|
+
element.style.left = "0";
|
|
39
|
+
element.style.zIndex = "50";
|
|
40
|
+
element.style.maxWidth = "90vw";
|
|
41
|
+
element.appendChild(content);
|
|
42
|
+
container.appendChild(element);
|
|
43
|
+
const reposition = () => {
|
|
44
|
+
const referenceRect = getRect?.();
|
|
45
|
+
if (!referenceRect) return;
|
|
46
|
+
const viewportPadding = 8;
|
|
47
|
+
const { offsetWidth, offsetHeight } = element;
|
|
48
|
+
const top = referenceRect.bottom + offsetHeight > window.innerHeight - viewportPadding ? referenceRect.top - offsetHeight : referenceRect.bottom;
|
|
49
|
+
const left = Math.min(referenceRect.left, window.innerWidth - offsetWidth - viewportPadding);
|
|
50
|
+
element.style.top = `${Math.max(top, viewportPadding)}px`;
|
|
51
|
+
element.style.left = `${Math.max(left, viewportPadding)}px`;
|
|
52
|
+
};
|
|
53
|
+
reposition();
|
|
54
|
+
requestAnimationFrame(reposition);
|
|
55
|
+
window.addEventListener("resize", reposition);
|
|
56
|
+
window.addEventListener("scroll", reposition, true);
|
|
57
|
+
return {
|
|
58
|
+
setReferenceClientRect: (nextGetReferenceClientRect) => {
|
|
59
|
+
getRect = nextGetReferenceClientRect;
|
|
60
|
+
reposition();
|
|
61
|
+
},
|
|
62
|
+
hide: () => {
|
|
63
|
+
element.style.display = "none";
|
|
64
|
+
},
|
|
65
|
+
destroy: () => {
|
|
66
|
+
window.removeEventListener("resize", reposition);
|
|
67
|
+
window.removeEventListener("scroll", reposition, true);
|
|
68
|
+
element.remove();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
};
|
|
28
72
|
const renderItems = (elementRef) => {
|
|
29
73
|
let component = null;
|
|
30
74
|
let popup = null;
|
|
@@ -36,29 +80,21 @@ const renderItems = (elementRef) => {
|
|
|
36
80
|
});
|
|
37
81
|
const { selection } = props.editor.state;
|
|
38
82
|
if (selection.$from.node(selection.$from.depth).type.name === "codeBlock") return false;
|
|
39
|
-
popup =
|
|
40
|
-
getReferenceClientRect: props.clientRect,
|
|
41
|
-
appendTo: () => elementRef ? elementRef.current : document.body,
|
|
42
|
-
content: component.element,
|
|
43
|
-
showOnCreate: true,
|
|
44
|
-
interactive: true,
|
|
45
|
-
trigger: "manual",
|
|
46
|
-
placement: "bottom-start"
|
|
47
|
-
});
|
|
83
|
+
popup = createSuggestionPopup(component.element, props.clientRect, elementRef?.current ?? document.body);
|
|
48
84
|
},
|
|
49
85
|
onUpdate: (props) => {
|
|
50
86
|
component?.updateProps(props);
|
|
51
|
-
popup?.
|
|
87
|
+
popup?.setReferenceClientRect(props.clientRect);
|
|
52
88
|
},
|
|
53
89
|
onKeyDown: (props) => {
|
|
54
90
|
if (props.event.key === "Escape") {
|
|
55
|
-
popup?.
|
|
91
|
+
popup?.hide();
|
|
56
92
|
return true;
|
|
57
93
|
}
|
|
58
94
|
return component?.ref?.onKeyDown(props);
|
|
59
95
|
},
|
|
60
96
|
onExit: () => {
|
|
61
|
-
popup?.
|
|
97
|
+
popup?.destroy();
|
|
62
98
|
component?.destroy();
|
|
63
99
|
}
|
|
64
100
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-command.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/extensions/slash-command.tsx"],"sourcesContent":["import type { Editor, Range } from '@tiptap/core';\nimport { Extension } from '@tiptap/core';\nimport { ReactRenderer } from '@tiptap/react';\nimport Suggestion, { type SuggestionOptions } from '@tiptap/suggestion';\nimport type { ReactNode, RefObject } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"slash-command.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/extensions/slash-command.tsx"],"sourcesContent":["import type { Editor, Range } from '@tiptap/core';\nimport { Extension } from '@tiptap/core';\nimport { ReactRenderer } from '@tiptap/react';\nimport Suggestion, { type SuggestionOptions } from '@tiptap/suggestion';\nimport type { ReactNode, RefObject } from 'react';\nimport { EditorCommandOut } from '../components/editor-command';\n\nconst Command = Extension.create({\n name: 'slash-command',\n addOptions() {\n return {\n suggestion: {\n char: '/',\n command: ({ editor, range, props }) => {\n props.command({ editor, range });\n },\n } as SuggestionOptions,\n };\n },\n addProseMirrorPlugins() {\n return [\n Suggestion({\n editor: this.editor,\n ...this.options.suggestion,\n }),\n ];\n },\n});\n\ntype ClientRectGetter = (() => DOMRect | null) | null | undefined;\n\ntype SuggestionPopup = {\n setReferenceClientRect: (getReferenceClientRect: ClientRectGetter) => void;\n hide: () => void;\n destroy: () => void;\n};\n\n/**\n * Minimal floating popup anchored to the caret. Replaces the tippy.js\n * dependency: the popup is a fixed-position element appended to the given\n * container, placed below the reference rect (flipped above when it would\n * overflow the viewport) and repositioned on scroll/resize.\n */\nconst createSuggestionPopup = (\n content: HTMLElement,\n getReferenceClientRect: ClientRectGetter,\n container: HTMLElement\n): SuggestionPopup => {\n let getRect = getReferenceClientRect;\n\n const element = document.createElement('div');\n element.style.position = 'fixed';\n element.style.top = '0';\n element.style.left = '0';\n element.style.zIndex = '50';\n element.style.maxWidth = '90vw';\n element.appendChild(content);\n container.appendChild(element);\n\n const reposition = () => {\n const referenceRect = getRect?.();\n if (!referenceRect) return;\n\n const viewportPadding = 8;\n const { offsetWidth, offsetHeight } = element;\n\n const overflowsBottom =\n referenceRect.bottom + offsetHeight >\n window.innerHeight - viewportPadding;\n const top = overflowsBottom\n ? referenceRect.top - offsetHeight\n : referenceRect.bottom;\n const left = Math.min(\n referenceRect.left,\n window.innerWidth - offsetWidth - viewportPadding\n );\n\n element.style.top = `${Math.max(top, viewportPadding)}px`;\n element.style.left = `${Math.max(left, viewportPadding)}px`;\n };\n\n // The React content renders asynchronously; measure again on the next frame\n // so the initial placement uses the real popup size.\n reposition();\n requestAnimationFrame(reposition);\n window.addEventListener('resize', reposition);\n window.addEventListener('scroll', reposition, true);\n\n return {\n setReferenceClientRect: (nextGetReferenceClientRect) => {\n getRect = nextGetReferenceClientRect;\n reposition();\n },\n hide: () => {\n element.style.display = 'none';\n },\n destroy: () => {\n window.removeEventListener('resize', reposition);\n window.removeEventListener('scroll', reposition, true);\n element.remove();\n },\n };\n};\n\nconst renderItems = (elementRef?: RefObject<HTMLElement> | null) => {\n let component: ReactRenderer | null = null;\n let popup: SuggestionPopup | null = null;\n\n return {\n onStart: (props: { editor: Editor; clientRect: ClientRectGetter }) => {\n component = new ReactRenderer(EditorCommandOut, {\n props,\n editor: props.editor,\n });\n\n const { selection } = props.editor.state;\n\n const parentNode = selection.$from.node(selection.$from.depth);\n const blockType = parentNode.type.name;\n\n if (blockType === 'codeBlock') {\n return false;\n }\n\n popup = createSuggestionPopup(\n component.element as HTMLElement,\n props.clientRect,\n elementRef?.current ?? document.body\n );\n },\n onUpdate: (props: { editor: Editor; clientRect: ClientRectGetter }) => {\n component?.updateProps(props);\n\n popup?.setReferenceClientRect(props.clientRect);\n },\n\n onKeyDown: (props: { event: KeyboardEvent }) => {\n if (props.event.key === 'Escape') {\n popup?.hide();\n\n return true;\n }\n\n // @ts-ignore\n return component?.ref?.onKeyDown(props);\n },\n onExit: () => {\n popup?.destroy();\n component?.destroy();\n },\n };\n};\n\nexport interface SuggestionItem {\n title: string;\n description: string;\n icon: ReactNode;\n searchTerms?: string[];\n command?: (props: { editor: Editor; range: Range }) => void;\n}\n\nexport const createSuggestionItems = (items: SuggestionItem[]) => items;\n\nexport const handleCommandNavigation = (event: KeyboardEvent) => {\n if (['ArrowUp', 'ArrowDown', 'Enter'].includes(event.key)) {\n const slashCommand = document.querySelector('#slash-command');\n if (slashCommand) {\n return true;\n }\n }\n};\n\nexport { Command, renderItems };\n"],"mappings":";;;;;;AAOA,MAAM,UAAU,UAAU,OAAO;CAC/B,MAAM;CACN,aAAa;EACX,OAAO,EACL,YAAY;GACV,MAAM;GACN,UAAU,EAAE,QAAQ,OAAO,YAAY;IACrC,MAAM,QAAQ;KAAE;KAAQ;IAAM,CAAC;GACjC;EACF,EACF;CACF;CACA,wBAAwB;EACtB,OAAO,CACL,WAAW;GACT,QAAQ,KAAK;GACb,GAAG,KAAK,QAAQ;EAClB,CAAC,CACH;CACF;AACF,CAAC;;;;;;;AAgBD,MAAM,yBACJ,SACA,wBACA,cACoB;CACpB,IAAI,UAAU;CAEd,MAAM,UAAU,SAAS,cAAc,KAAK;CAC5C,QAAQ,MAAM,WAAW;CACzB,QAAQ,MAAM,MAAM;CACpB,QAAQ,MAAM,OAAO;CACrB,QAAQ,MAAM,SAAS;CACvB,QAAQ,MAAM,WAAW;CACzB,QAAQ,YAAY,OAAO;CAC3B,UAAU,YAAY,OAAO;CAE7B,MAAM,mBAAmB;EACvB,MAAM,gBAAgB,UAAU;EAChC,IAAI,CAAC,eAAe;EAEpB,MAAM,kBAAkB;EACxB,MAAM,EAAE,aAAa,iBAAiB;EAKtC,MAAM,MAFJ,cAAc,SAAS,eACvB,OAAO,cAAc,kBAEnB,cAAc,MAAM,eACpB,cAAc;EAClB,MAAM,OAAO,KAAK,IAChB,cAAc,MACd,OAAO,aAAa,cAAc,eACpC;EAEA,QAAQ,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,eAAe,EAAE;EACtD,QAAQ,MAAM,OAAO,GAAG,KAAK,IAAI,MAAM,eAAe,EAAE;CAC1D;CAIA,WAAW;CACX,sBAAsB,UAAU;CAChC,OAAO,iBAAiB,UAAU,UAAU;CAC5C,OAAO,iBAAiB,UAAU,YAAY,IAAI;CAElD,OAAO;EACL,yBAAyB,+BAA+B;GACtD,UAAU;GACV,WAAW;EACb;EACA,YAAY;GACV,QAAQ,MAAM,UAAU;EAC1B;EACA,eAAe;GACb,OAAO,oBAAoB,UAAU,UAAU;GAC/C,OAAO,oBAAoB,UAAU,YAAY,IAAI;GACrD,QAAQ,OAAO;EACjB;CACF;AACF;AAEA,MAAM,eAAe,eAA+C;CAClE,IAAI,YAAkC;CACtC,IAAI,QAAgC;CAEpC,OAAO;EACL,UAAU,UAA4D;GACpE,YAAY,IAAI,cAAc,kBAAkB;IAC9C;IACA,QAAQ,MAAM;GAChB,CAAC;GAED,MAAM,EAAE,cAAc,MAAM,OAAO;GAKnC,IAHmB,UAAU,MAAM,KAAK,UAAU,MAAM,KAC7B,CAAC,CAAC,KAAK,SAEhB,aAChB,OAAO;GAGT,QAAQ,sBACN,UAAU,SACV,MAAM,YACN,YAAY,WAAW,SAAS,IAClC;EACF;EACA,WAAW,UAA4D;GACrE,WAAW,YAAY,KAAK;GAE5B,OAAO,uBAAuB,MAAM,UAAU;EAChD;EAEA,YAAY,UAAoC;GAC9C,IAAI,MAAM,MAAM,QAAQ,UAAU;IAChC,OAAO,KAAK;IAEZ,OAAO;GACT;GAGA,OAAO,WAAW,KAAK,UAAU,KAAK;EACxC;EACA,cAAc;GACZ,OAAO,QAAQ;GACf,WAAW,QAAQ;EACrB;CACF;AACF;AAUA,MAAa,yBAAyB,UAA4B;AAElE,MAAa,2BAA2B,UAAyB;CAC/D,IAAI;EAAC;EAAW;EAAa;CAAO,CAAC,CAAC,SAAS,MAAM,GAAG,GAEtD;MADqB,SAAS,cAAc,gBAC7B,GACb,OAAO;CACT;AAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updated-image.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/extensions/updated-image.ts"],"sourcesContent":["import Image from '@tiptap/extension-image';\n\nconst UpdatedImage = Image.extend({\n name: 'image',\n addAttributes() {\n return {\n ...this.parent?.(),\n width: {\n default: null,\n },\n height: {\n default: null,\n },\n };\n },\n});\n\nexport default UpdatedImage;\n"],"mappings":";;;AAEA,MAAM,eAAe,MAAM,OAAO;CAChC,MAAM;CACN,gBAAgB;
|
|
1
|
+
{"version":3,"file":"updated-image.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/extensions/updated-image.ts"],"sourcesContent":["import Image from '@tiptap/extension-image';\n\nconst UpdatedImage = Image.extend({\n name: 'image',\n addAttributes() {\n return {\n ...this.parent?.(),\n width: {\n default: null,\n },\n height: {\n default: null,\n },\n };\n },\n});\n\nexport default UpdatedImage;\n"],"mappings":";;;AAEA,MAAM,eAAe,MAAM,OAAO;CAChC,MAAM;CACN,gBAAgB;EACd,OAAO;GACL,GAAG,KAAK,SAAS;GACjB,OAAO,EACL,SAAS,KACX;GACA,QAAQ,EACN,SAAS,KACX;EACF;CACF;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-images.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/plugins/upload-images.tsx"],"sourcesContent":["import { type EditorState, Plugin, PluginKey } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\n\nconst uploadKey = new PluginKey('upload-image');\n\nexport const UploadImagesPlugin = ({ imageClass }: { imageClass: string }) =>\n new Plugin({\n key: uploadKey,\n state: {\n init() {\n return DecorationSet.empty;\n },\n apply(tr, set) {\n set = set.map(tr.mapping, tr.doc);\n // See if the transaction adds or removes any placeholders\n //@ts-expect-error - not yet sure what the type I need here\n const action = tr.getMeta(this);\n if (action?.add) {\n const { id, pos, src } = action.add;\n\n const placeholder = document.createElement('div');\n placeholder.setAttribute('class', 'img-placeholder');\n const image = document.createElement('img');\n image.setAttribute('class', imageClass);\n image.src = src;\n placeholder.appendChild(image);\n const deco = Decoration.widget(pos + 1, placeholder, {\n id,\n });\n set = set.add(tr.doc, [deco]);\n } else if (action?.remove) {\n set = set.remove(\n set.find(\n undefined,\n undefined,\n (spec) => spec.id === action.remove.id\n )\n );\n }\n return set;\n },\n },\n props: {\n decorations(state) {\n return this.getState(state);\n },\n },\n });\n\nfunction findPlaceholder(state: EditorState, id: object) {\n const decos = uploadKey.getState(state) as DecorationSet;\n const found = decos.find(undefined, undefined, (spec) => spec.id === id);\n return found.length ? found[0]?.from : null;\n}\n\nexport interface ImageUploadOptions {\n validateFn?: (file: File) => void;\n onUpload: (file: File) => Promise<unknown>;\n}\n\nexport const createImageUpload =\n ({ validateFn, onUpload }: ImageUploadOptions): UploadFn =>\n (file, view, pos) => {\n // check if the file is an image\n const validated = validateFn?.(file);\n if (!validated) return;\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) tr.deleteSelection();\n\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n tr.setMeta(uploadKey, {\n add: {\n id,\n pos,\n src: reader.result,\n },\n });\n view.dispatch(tr);\n };\n\n onUpload(file).then(\n (src) => {\n const { schema } = view.state;\n\n const pos = findPlaceholder(view.state, id);\n\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos == null) return;\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n\n // When BLOB_READ_WRITE_TOKEN is not valid or unavailable, read\n // the image locally\n const imageSrc = typeof src === 'object' ? reader.result : src;\n\n const node = schema.nodes.image?.create({ src: imageSrc });\n if (!node) return;\n\n const transaction = view.state.tr\n .replaceWith(pos, pos, node)\n .setMeta(uploadKey, { remove: { id } });\n view.dispatch(transaction);\n },\n () => {\n // Deletes the image placeholder on error\n const transaction = view.state.tr\n .delete(pos, pos)\n .setMeta(uploadKey, { remove: { id } });\n view.dispatch(transaction);\n }\n );\n };\n\nexport type UploadFn = (file: File, view: EditorView, pos: number) => void;\n\nexport const handleImagePaste = (\n view: EditorView,\n event: ClipboardEvent,\n uploadFn: UploadFn\n) => {\n if (event.clipboardData?.files.length) {\n event.preventDefault();\n const [file] = Array.from(event.clipboardData.files);\n const pos = view.state.selection.from;\n\n if (file) uploadFn(file, view, pos);\n return true;\n }\n return false;\n};\n\nexport const handleImageDrop = (\n view: EditorView,\n event: DragEvent,\n moved: boolean,\n uploadFn: UploadFn\n) => {\n if (!moved && event.dataTransfer?.files.length) {\n event.preventDefault();\n const [file] = Array.from(event.dataTransfer.files);\n const coordinates = view.posAtCoords({\n left: event.clientX,\n top: event.clientY,\n });\n // here we deduct 1 from the pos or else the image will create an extra node\n if (file) uploadFn(file, view, coordinates?.pos ?? 0 - 1);\n return true;\n }\n return false;\n};\n"],"mappings":";;;;AAGA,MAAM,YAAY,IAAI,UAAU,
|
|
1
|
+
{"version":3,"file":"upload-images.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/plugins/upload-images.tsx"],"sourcesContent":["import { type EditorState, Plugin, PluginKey } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet, type EditorView } from '@tiptap/pm/view';\n\nconst uploadKey = new PluginKey('upload-image');\n\nexport const UploadImagesPlugin = ({ imageClass }: { imageClass: string }) =>\n new Plugin({\n key: uploadKey,\n state: {\n init() {\n return DecorationSet.empty;\n },\n apply(tr, set) {\n set = set.map(tr.mapping, tr.doc);\n // See if the transaction adds or removes any placeholders\n //@ts-expect-error - not yet sure what the type I need here\n const action = tr.getMeta(this);\n if (action?.add) {\n const { id, pos, src } = action.add;\n\n const placeholder = document.createElement('div');\n placeholder.setAttribute('class', 'img-placeholder');\n const image = document.createElement('img');\n image.setAttribute('class', imageClass);\n image.src = src;\n placeholder.appendChild(image);\n const deco = Decoration.widget(pos + 1, placeholder, {\n id,\n });\n set = set.add(tr.doc, [deco]);\n } else if (action?.remove) {\n set = set.remove(\n set.find(\n undefined,\n undefined,\n (spec) => spec.id === action.remove.id\n )\n );\n }\n return set;\n },\n },\n props: {\n decorations(state) {\n return this.getState(state);\n },\n },\n });\n\nfunction findPlaceholder(state: EditorState, id: object) {\n const decos = uploadKey.getState(state) as DecorationSet;\n const found = decos.find(undefined, undefined, (spec) => spec.id === id);\n return found.length ? found[0]?.from : null;\n}\n\nexport interface ImageUploadOptions {\n validateFn?: (file: File) => void;\n onUpload: (file: File) => Promise<unknown>;\n}\n\nexport const createImageUpload =\n ({ validateFn, onUpload }: ImageUploadOptions): UploadFn =>\n (file, view, pos) => {\n // check if the file is an image\n const validated = validateFn?.(file);\n if (!validated) return;\n // A fresh object to act as the ID for this upload\n const id = {};\n\n // Replace the selection with a placeholder\n const tr = view.state.tr;\n if (!tr.selection.empty) tr.deleteSelection();\n\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n tr.setMeta(uploadKey, {\n add: {\n id,\n pos,\n src: reader.result,\n },\n });\n view.dispatch(tr);\n };\n\n onUpload(file).then(\n (src) => {\n const { schema } = view.state;\n\n const pos = findPlaceholder(view.state, id);\n\n // If the content around the placeholder has been deleted, drop\n // the image\n if (pos == null) return;\n\n // Otherwise, insert it at the placeholder's position, and remove\n // the placeholder\n\n // When BLOB_READ_WRITE_TOKEN is not valid or unavailable, read\n // the image locally\n const imageSrc = typeof src === 'object' ? reader.result : src;\n\n const node = schema.nodes.image?.create({ src: imageSrc });\n if (!node) return;\n\n const transaction = view.state.tr\n .replaceWith(pos, pos, node)\n .setMeta(uploadKey, { remove: { id } });\n view.dispatch(transaction);\n },\n () => {\n // Deletes the image placeholder on error\n const transaction = view.state.tr\n .delete(pos, pos)\n .setMeta(uploadKey, { remove: { id } });\n view.dispatch(transaction);\n }\n );\n };\n\nexport type UploadFn = (file: File, view: EditorView, pos: number) => void;\n\nexport const handleImagePaste = (\n view: EditorView,\n event: ClipboardEvent,\n uploadFn: UploadFn\n) => {\n if (event.clipboardData?.files.length) {\n event.preventDefault();\n const [file] = Array.from(event.clipboardData.files);\n const pos = view.state.selection.from;\n\n if (file) uploadFn(file, view, pos);\n return true;\n }\n return false;\n};\n\nexport const handleImageDrop = (\n view: EditorView,\n event: DragEvent,\n moved: boolean,\n uploadFn: UploadFn\n) => {\n if (!moved && event.dataTransfer?.files.length) {\n event.preventDefault();\n const [file] = Array.from(event.dataTransfer.files);\n const coordinates = view.posAtCoords({\n left: event.clientX,\n top: event.clientY,\n });\n // here we deduct 1 from the pos or else the image will create an extra node\n if (file) uploadFn(file, view, coordinates?.pos ?? 0 - 1);\n return true;\n }\n return false;\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atoms.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/utils/atoms.ts"],"sourcesContent":["import type { Range } from '@tiptap/core';\nimport { useSyncExternalStore } from 'react';\n\ntype Listener = () => void;\n\n/**\n * Minimal module-level observable store.\n *\n * rendered by Tiptap in a separate React root (outside the editor's provider\n * tree), so the query/range state has to live in a plain module singleton that\n * both roots can read and write — no shared React context needed. This is what\n * `useSyncExternalStore` store removes the dependency with identical behaviour.\n */\nconst createExternalStore = <T>(initialValue: T) => {\n let value = initialValue;\n const listeners = new Set<Listener>();\n\n return {\n getSnapshot: (): T => value,\n setValue: (next: T): void => {\n if (Object.is(next, value)) return;\n value = next;\n for (const listener of listeners) listener();\n },\n subscribe: (listener: Listener): (() => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n\nexport const queryStore = createExternalStore('');\nexport const rangeStore = createExternalStore<Range | null>(null);\n\n/** Subscribe to the current slash-command query string. */\nexport const useQuery = (): string =>\n useSyncExternalStore(\n queryStore.subscribe,\n queryStore.getSnapshot,\n queryStore.getSnapshot\n );\n\n/** Subscribe to the current slash-command range. */\nexport const useRange = (): Range | null =>\n useSyncExternalStore(\n rangeStore.subscribe,\n rangeStore.getSnapshot,\n rangeStore.getSnapshot\n );\n"],"mappings":";;;;;;;;;;;AAaA,MAAM,uBAA0B,iBAAoB;CAClD,IAAI,QAAQ;CACZ,MAAM,4BAAY,IAAI,
|
|
1
|
+
{"version":3,"file":"atoms.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/utils/atoms.ts"],"sourcesContent":["import type { Range } from '@tiptap/core';\nimport { useSyncExternalStore } from 'react';\n\ntype Listener = () => void;\n\n/**\n * Minimal module-level observable store.\n *\n * rendered by Tiptap in a separate React root (outside the editor's provider\n * tree), so the query/range state has to live in a plain module singleton that\n * both roots can read and write — no shared React context needed. This is what\n * `useSyncExternalStore` store removes the dependency with identical behaviour.\n */\nconst createExternalStore = <T>(initialValue: T) => {\n let value = initialValue;\n const listeners = new Set<Listener>();\n\n return {\n getSnapshot: (): T => value,\n setValue: (next: T): void => {\n if (Object.is(next, value)) return;\n value = next;\n for (const listener of listeners) listener();\n },\n subscribe: (listener: Listener): (() => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n\nexport const queryStore = createExternalStore('');\nexport const rangeStore = createExternalStore<Range | null>(null);\n\n/** Subscribe to the current slash-command query string. */\nexport const useQuery = (): string =>\n useSyncExternalStore(\n queryStore.subscribe,\n queryStore.getSnapshot,\n queryStore.getSnapshot\n );\n\n/** Subscribe to the current slash-command range. */\nexport const useRange = (): Range | null =>\n useSyncExternalStore(\n rangeStore.subscribe,\n rangeStore.getSnapshot,\n rangeStore.getSnapshot\n );\n"],"mappings":";;;;;;;;;;;AAaA,MAAM,uBAA0B,iBAAoB;CAClD,IAAI,QAAQ;CACZ,MAAM,4BAAY,IAAI,IAAc;CAEpC,OAAO;EACL,mBAAsB;EACtB,WAAW,SAAkB;GAC3B,IAAI,OAAO,GAAG,MAAM,KAAK,GAAG;GAC5B,QAAQ;GACR,KAAK,MAAM,YAAY,WAAW,SAAS;EAC7C;EACA,YAAY,aAAqC;GAC/C,UAAU,IAAI,QAAQ;GACtB,aAAa;IACX,UAAU,OAAO,QAAQ;GAC3B;EACF;CACF;AACF;AAEA,MAAa,aAAa,oBAAoB,EAAE;AAChD,MAAa,aAAa,oBAAkC,IAAI;;AAGhE,MAAa,iBACX,qBACE,WAAW,WACX,WAAW,aACX,WAAW,WACb;;AAGF,MAAa,iBACX,qBACE,WAAW,WACX,WAAW,aACX,WAAW,WACb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/utils/index.ts"],"sourcesContent":["import { Fragment, type Node } from '@tiptap/pm/model';\nimport type { EditorInstance } from '../components';\n\nexport const isValidUrl = (url: string) => {\n try {\n new URL(url);\n return true;\n } catch (_e) {\n return false;\n }\n};\n\nexport const getUrlFromString = (str: string) => {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes('.') && !str.includes(' ')) {\n return new URL(`https://${str}`).toString();\n }\n } catch (_e) {\n return null;\n }\n};\n\n// Get the text before a given position in markdown format\nexport const getPrevText = (editor: EditorInstance, position: number) => {\n const nodes: Node[] = [];\n editor.state.doc.forEach((node, pos) => {\n if (pos >= position) return;\n nodes.push(node);\n });\n const fragment = Fragment.fromArray(nodes);\n const doc = editor.state.doc.copy(fragment);\n\n return editor.storage.markdown.serializer.serialize(doc) as string;\n};\n\n// Get all content from the editor in markdown format\nexport const getAllContent = (editor: EditorInstance) => {\n const fragment = editor.state.doc.content;\n const doc = editor.state.doc.copy(fragment);\n\n return editor.storage.markdown.serializer.serialize(doc) as string;\n};\n"],"mappings":";;;AAGA,MAAa,cAAc,QAAgB;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/components/MarkdownEditor/novel/utils/index.ts"],"sourcesContent":["import { Fragment, type Node } from '@tiptap/pm/model';\nimport type { EditorInstance } from '../components';\n\nexport const isValidUrl = (url: string) => {\n try {\n new URL(url);\n return true;\n } catch (_e) {\n return false;\n }\n};\n\nexport const getUrlFromString = (str: string) => {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes('.') && !str.includes(' ')) {\n return new URL(`https://${str}`).toString();\n }\n } catch (_e) {\n return null;\n }\n};\n\n// Get the text before a given position in markdown format\nexport const getPrevText = (editor: EditorInstance, position: number) => {\n const nodes: Node[] = [];\n editor.state.doc.forEach((node, pos) => {\n if (pos >= position) return;\n nodes.push(node);\n });\n const fragment = Fragment.fromArray(nodes);\n const doc = editor.state.doc.copy(fragment);\n\n return editor.storage.markdown.serializer.serialize(doc) as string;\n};\n\n// Get all content from the editor in markdown format\nexport const getAllContent = (editor: EditorInstance) => {\n const fragment = editor.state.doc.content;\n const doc = editor.state.doc.copy(fragment);\n\n return editor.storage.markdown.serializer.serialize(doc) as string;\n};\n"],"mappings":";;;AAGA,MAAa,cAAc,QAAgB;CACzC,IAAI;EACF,IAAI,IAAI,GAAG;EACX,OAAO;CACT,SAAS,IAAI;EACX,OAAO;CACT;AACF;AAEA,MAAa,oBAAoB,QAAgB;CAC/C,IAAI,WAAW,GAAG,GAAG,OAAO;CAC5B,IAAI;EACF,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,GACxC,OAAO,IAAI,IAAI,WAAW,KAAK,CAAC,CAAC,SAAS;CAE9C,SAAS,IAAI;EACX,OAAO;CACT;AACF;AAGA,MAAa,eAAe,QAAwB,aAAqB;CACvE,MAAM,QAAgB,CAAC;CACvB,OAAO,MAAM,IAAI,SAAS,MAAM,QAAQ;EACtC,IAAI,OAAO,UAAU;EACrB,MAAM,KAAK,IAAI;CACjB,CAAC;CACD,MAAM,WAAW,SAAS,UAAU,KAAK;CACzC,MAAM,MAAM,OAAO,MAAM,IAAI,KAAK,QAAQ;CAE1C,OAAO,OAAO,QAAQ,SAAS,WAAW,UAAU,GAAG;AACzD;AAGA,MAAa,iBAAiB,WAA2B;CACvD,MAAM,WAAW,OAAO,MAAM,IAAI;CAClC,MAAM,MAAM,OAAO,MAAM,IAAI,KAAK,QAAQ;CAE1C,OAAO,OAAO,QAAQ,SAAS,WAAW,UAAU,GAAG;AACzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorSelector.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/ColorSelector.tsx"],"sourcesContent":["'use client';\n\nimport { Check, ChevronDown } from 'lucide-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { useEditor } from '../novel';\n\nexport type ColorMenuItem = {\n name: string;\n color: string;\n};\n\nconst TEXT_COLORS: ColorMenuItem[] = [\n { name: 'Default', color: 'var(--color-text)' },\n { name: 'Primary', color: 'var(--color-primary-500)' },\n { name: 'Secondary', color: 'var(--color-secondary)' },\n { name: 'Success', color: 'var(--color-success)' },\n { name: 'Warning', color: 'var(--color-warning)' },\n { name: 'Error', color: 'var(--color-error)' },\n { name: 'Neutral', color: 'var(--color-neutral)' },\n];\n\nconst HIGHLIGHT_COLORS: ColorMenuItem[] = [\n { name: 'Default', color: 'transparent' },\n { name: 'Primary', color: 'var(--color-primary-100)' },\n { name: 'Secondary', color: 'var(--color-secondary-100)' },\n { name: 'Success', color: 'var(--color-success-100)' },\n { name: 'Warning', color: 'var(--color-warning-50)' },\n { name: 'Error', color: 'var(--color-error-100)' },\n { name: 'Neutral', color: 'var(--color-neutral-100)' },\n];\n\n/**\n * Bubble-menu selector for text color and highlight color.\n *\n * Uses `onMouseDown` + `preventDefault` on every interactive element so the\n * editor's selection is never cleared while the panel is open.\n */\nexport const ColorSelector: FC = () => {\n const { editor } = useEditor();\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const content = useIntlayer('markdown-editor');\n\n useEffect(() => {\n if (!isOpen) return;\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleOutsideMouseDown);\n return () =>\n document.removeEventListener('mousedown', handleOutsideMouseDown);\n }, [isOpen]);\n\n if (!editor) return null;\n\n const activeColorItem = TEXT_COLORS.find(({ color }) =>\n editor.isActive('textStyle', { color })\n );\n const activeHighlightItem = HIGHLIGHT_COLORS.find(({ color }) =>\n editor.isActive('highlight', { color })\n );\n\n const getColorName = (name: string) => {\n switch (name) {\n case 'Default':\n return content.colorDefault.value;\n case 'Primary':\n return content.colorPrimary.value;\n case 'Secondary':\n return content.colorSecondary.value;\n case 'Success':\n return content.colorSuccess.value;\n case 'Warning':\n return content.colorWarning.value;\n case 'Error':\n return content.colorError.value;\n case 'Neutral':\n return content.colorNeutral.value;\n default:\n return name;\n }\n };\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n }}\n className=\"flex items-center gap-1 whitespace-nowrap rounded-none px-3 py-1.5 text-sm hover:bg-accent\"\n >\n <span\n className=\"rounded-sm px-1 font-medium\"\n style={{\n color: activeColorItem?.color,\n backgroundColor: activeHighlightItem?.color,\n }}\n >\n A\n </span>\n <ChevronDown className=\"size-3\" />\n </button>\n\n {isOpen && (\n <div className=\"absolute top-[calc(100%+0.5rem)] left-0 z-50 flex w-40 flex-col rounded-md border bg-popover p-1 shadow-md\">\n <div className=\"mb-1 px-2 font-semibold text-muted-foreground text-xs\">\n {content.colorHeading.value}\n </div>\n {TEXT_COLORS.map(({ name, color }) => (\n <button\n type=\"button\"\n key={name}\n onMouseDown={(e) => {\n e.preventDefault();\n editor.commands.unsetColor();\n if (name !== 'Default') {\n editor.chain().focus().setColor(color).run();\n }\n setIsOpen(false);\n }}\n className=\"flex w-full cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent\"\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"rounded-sm border px-1.5 font-medium\"\n style={{ color }}\n >\n A\n </span>\n <span>{getColorName(name)}</span>\n </div>\n {editor.isActive('textStyle', { color }) && (\n <Check className=\"size-3\" />\n )}\n </button>\n ))}\n\n <div className=\"mt-2 mb-1 px-2 font-semibold text-muted-foreground text-xs\">\n {content.highlightHeading.value}\n </div>\n {HIGHLIGHT_COLORS.map(({ name, color }) => (\n <button\n type=\"button\"\n key={name}\n onMouseDown={(e) => {\n e.preventDefault();\n editor.commands.unsetHighlight();\n if (name !== 'Default') {\n editor.chain().focus().setHighlight({ color }).run();\n }\n setIsOpen(false);\n }}\n className=\"flex w-full cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent\"\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"rounded-sm border px-1.5 font-medium\"\n style={{ backgroundColor: color }}\n >\n A\n </span>\n <span>{getColorName(name)}</span>\n </div>\n {editor.isActive('highlight', { color }) && (\n <Check className=\"size-3\" />\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAYA,MAAM,cAA+B;CACnC;EAAE,MAAM;EAAW,OAAO;
|
|
1
|
+
{"version":3,"file":"ColorSelector.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/ColorSelector.tsx"],"sourcesContent":["'use client';\n\nimport { Check, ChevronDown } from 'lucide-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { useEditor } from '../novel';\n\nexport type ColorMenuItem = {\n name: string;\n color: string;\n};\n\nconst TEXT_COLORS: ColorMenuItem[] = [\n { name: 'Default', color: 'var(--color-text)' },\n { name: 'Primary', color: 'var(--color-primary-500)' },\n { name: 'Secondary', color: 'var(--color-secondary)' },\n { name: 'Success', color: 'var(--color-success)' },\n { name: 'Warning', color: 'var(--color-warning)' },\n { name: 'Error', color: 'var(--color-error)' },\n { name: 'Neutral', color: 'var(--color-neutral)' },\n];\n\nconst HIGHLIGHT_COLORS: ColorMenuItem[] = [\n { name: 'Default', color: 'transparent' },\n { name: 'Primary', color: 'var(--color-primary-100)' },\n { name: 'Secondary', color: 'var(--color-secondary-100)' },\n { name: 'Success', color: 'var(--color-success-100)' },\n { name: 'Warning', color: 'var(--color-warning-50)' },\n { name: 'Error', color: 'var(--color-error-100)' },\n { name: 'Neutral', color: 'var(--color-neutral-100)' },\n];\n\n/**\n * Bubble-menu selector for text color and highlight color.\n *\n * Uses `onMouseDown` + `preventDefault` on every interactive element so the\n * editor's selection is never cleared while the panel is open.\n */\nexport const ColorSelector: FC = () => {\n const { editor } = useEditor();\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const content = useIntlayer('markdown-editor');\n\n useEffect(() => {\n if (!isOpen) return;\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleOutsideMouseDown);\n return () =>\n document.removeEventListener('mousedown', handleOutsideMouseDown);\n }, [isOpen]);\n\n if (!editor) return null;\n\n const activeColorItem = TEXT_COLORS.find(({ color }) =>\n editor.isActive('textStyle', { color })\n );\n const activeHighlightItem = HIGHLIGHT_COLORS.find(({ color }) =>\n editor.isActive('highlight', { color })\n );\n\n const getColorName = (name: string) => {\n switch (name) {\n case 'Default':\n return content.colorDefault.value;\n case 'Primary':\n return content.colorPrimary.value;\n case 'Secondary':\n return content.colorSecondary.value;\n case 'Success':\n return content.colorSuccess.value;\n case 'Warning':\n return content.colorWarning.value;\n case 'Error':\n return content.colorError.value;\n case 'Neutral':\n return content.colorNeutral.value;\n default:\n return name;\n }\n };\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n }}\n className=\"flex items-center gap-1 whitespace-nowrap rounded-none px-3 py-1.5 text-sm hover:bg-accent\"\n >\n <span\n className=\"rounded-sm px-1 font-medium\"\n style={{\n color: activeColorItem?.color,\n backgroundColor: activeHighlightItem?.color,\n }}\n >\n A\n </span>\n <ChevronDown className=\"size-3\" />\n </button>\n\n {isOpen && (\n <div className=\"absolute top-[calc(100%+0.5rem)] left-0 z-50 flex w-40 flex-col rounded-md border bg-popover p-1 shadow-md\">\n <div className=\"mb-1 px-2 font-semibold text-muted-foreground text-xs\">\n {content.colorHeading.value}\n </div>\n {TEXT_COLORS.map(({ name, color }) => (\n <button\n type=\"button\"\n key={name}\n onMouseDown={(e) => {\n e.preventDefault();\n editor.commands.unsetColor();\n if (name !== 'Default') {\n editor.chain().focus().setColor(color).run();\n }\n setIsOpen(false);\n }}\n className=\"flex w-full cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent\"\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"rounded-sm border px-1.5 font-medium\"\n style={{ color }}\n >\n A\n </span>\n <span>{getColorName(name)}</span>\n </div>\n {editor.isActive('textStyle', { color }) && (\n <Check className=\"size-3\" />\n )}\n </button>\n ))}\n\n <div className=\"mt-2 mb-1 px-2 font-semibold text-muted-foreground text-xs\">\n {content.highlightHeading.value}\n </div>\n {HIGHLIGHT_COLORS.map(({ name, color }) => (\n <button\n type=\"button\"\n key={name}\n onMouseDown={(e) => {\n e.preventDefault();\n editor.commands.unsetHighlight();\n if (name !== 'Default') {\n editor.chain().focus().setHighlight({ color }).run();\n }\n setIsOpen(false);\n }}\n className=\"flex w-full cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent\"\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"rounded-sm border px-1.5 font-medium\"\n style={{ backgroundColor: color }}\n >\n A\n </span>\n <span>{getColorName(name)}</span>\n </div>\n {editor.isActive('highlight', { color }) && (\n <Check className=\"size-3\" />\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkSelector.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/LinkSelector.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { cn } from '@utils/cn';\nimport { Check, Link2, Trash } from 'lucide-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { getUrlFromString, useEditor } from '../novel';\n\n/**\n * Bubble-menu selector for adding / editing / removing a link on the current\n * selection.\n *\n * The trigger uses `onMouseDown` + `preventDefault` to keep the editor\n * selection alive. The input inside the panel is allowed to take real focus\n * (the user needs to type a URL) — the editor re-focuses on submit/remove.\n */\nexport const LinkSelector: FC = () => {\n const { editor } = useEditor();\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const content = useIntlayer('markdown-editor');\n\n useEffect(() => {\n if (!isOpen) return;\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleOutsideMouseDown);\n\n // Programmatically focus the input\n inputRef.current?.focus();\n\n return () =>\n document.removeEventListener('mousedown', handleOutsideMouseDown);\n }, [isOpen]);\n\n if (!editor) return null;\n\n const currentHref = editor.getAttributes('link').href as string | undefined;\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n }}\n className={cn(\n 'flex items-center gap-1 whitespace-nowrap rounded-none px-3 py-1.5 text-sm hover:bg-accent',\n editor.isActive('link') && 'text-blue-500'\n )}\n >\n <Link2 className=\"size-4\" />\n <span className=\"underline decoration-stone-400 underline-offset-4\">\n {content.link.value}\n </span>\n </button>\n\n {isOpen && (\n <div className=\"absolute top-[calc(100%+0.5rem)] left-0 z-50\">\n <form\n key={currentHref ?? 'no-link'}\n className=\"flex w-60 gap-1 rounded-md border bg-popover p-1 shadow-md\"\n onSubmit={(event) => {\n event.preventDefault();\n const input = event.currentTarget[0] as HTMLInputElement;\n const url = getUrlFromString(input.value);\n if (url) {\n editor.chain().focus().setLink({ href: url }).run();\n }\n setIsOpen(false);\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={content.linkPlaceholder.value}\n className=\"flex-1 bg-transparent p-1 text-sm outline-none\"\n defaultValue={currentHref ?? ''}\n />\n {currentHref ? (\n <Button\n label={content.removeLink.value}\n type=\"button\"\n size=\"icon-sm\"\n variant=\"outline\"\n color=\"error\"\n Icon={Trash}\n onClick={() => {\n editor.chain().focus().unsetLink().run();\n if (inputRef.current) inputRef.current.value = '';\n setIsOpen(false);\n }}\n />\n ) : (\n <Button\n label={content.applyLink.value}\n type=\"submit\"\n size=\"icon-sm\"\n color=\"text\"\n Icon={Check}\n />\n )}\n </form>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiBA,MAAa,qBAAyB;CACpC,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"LinkSelector.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/LinkSelector.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { cn } from '@utils/cn';\nimport { Check, Link2, Trash } from 'lucide-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { getUrlFromString, useEditor } from '../novel';\n\n/**\n * Bubble-menu selector for adding / editing / removing a link on the current\n * selection.\n *\n * The trigger uses `onMouseDown` + `preventDefault` to keep the editor\n * selection alive. The input inside the panel is allowed to take real focus\n * (the user needs to type a URL) — the editor re-focuses on submit/remove.\n */\nexport const LinkSelector: FC = () => {\n const { editor } = useEditor();\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const content = useIntlayer('markdown-editor');\n\n useEffect(() => {\n if (!isOpen) return;\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleOutsideMouseDown);\n\n // Programmatically focus the input\n inputRef.current?.focus();\n\n return () =>\n document.removeEventListener('mousedown', handleOutsideMouseDown);\n }, [isOpen]);\n\n if (!editor) return null;\n\n const currentHref = editor.getAttributes('link').href as string | undefined;\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n }}\n className={cn(\n 'flex items-center gap-1 whitespace-nowrap rounded-none px-3 py-1.5 text-sm hover:bg-accent',\n editor.isActive('link') && 'text-blue-500'\n )}\n >\n <Link2 className=\"size-4\" />\n <span className=\"underline decoration-stone-400 underline-offset-4\">\n {content.link.value}\n </span>\n </button>\n\n {isOpen && (\n <div className=\"absolute top-[calc(100%+0.5rem)] left-0 z-50\">\n <form\n key={currentHref ?? 'no-link'}\n className=\"flex w-60 gap-1 rounded-md border bg-popover p-1 shadow-md\"\n onSubmit={(event) => {\n event.preventDefault();\n const input = event.currentTarget[0] as HTMLInputElement;\n const url = getUrlFromString(input.value);\n if (url) {\n editor.chain().focus().setLink({ href: url }).run();\n }\n setIsOpen(false);\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={content.linkPlaceholder.value}\n className=\"flex-1 bg-transparent p-1 text-sm outline-none\"\n defaultValue={currentHref ?? ''}\n />\n {currentHref ? (\n <Button\n label={content.removeLink.value}\n type=\"button\"\n size=\"icon-sm\"\n variant=\"outline\"\n color=\"error\"\n Icon={Trash}\n onClick={() => {\n editor.chain().focus().unsetLink().run();\n if (inputRef.current) inputRef.current.value = '';\n setIsOpen(false);\n }}\n />\n ) : (\n <Button\n label={content.applyLink.value}\n type=\"submit\"\n size=\"icon-sm\"\n color=\"text\"\n Icon={Check}\n />\n )}\n </form>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiBA,MAAa,qBAAyB;CACpC,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,WAAW,OAAyB,IAAI;CAC9C,MAAM,UAAU,YAAY,iBAAiB;CAE7C,gBAAgB;EACd,IAAI,CAAC,QAAQ;EACb,MAAM,0BAA0B,UAAsB;GACpD,IAAI,CAAC,aAAa,SAAS,SAAS,MAAM,MAAc,GACtD,UAAU,KAAK;EAEnB;EACA,SAAS,iBAAiB,aAAa,sBAAsB;EAG7D,SAAS,SAAS,MAAM;EAExB,aACE,SAAS,oBAAoB,aAAa,sBAAsB;CACpE,GAAG,CAAC,MAAM,CAAC;CAEX,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,cAAc,OAAO,cAAc,MAAM,CAAC,CAAC;CAEjD,OACE,qBAAC,OAAD;EAAK,KAAK;EAAc,WAAU;YAAlC,CACE,qBAAC,UAAD;GACE,MAAK;GACL,cAAc,MAAM;IAClB,EAAE,eAAe;IACjB,WAAW,SAAS,CAAC,IAAI;GAC3B;GACA,WAAW,GACT,8FACA,OAAO,SAAS,MAAM,KAAK,eAC7B;aATF,CAWE,oBAAC,OAAD,EAAO,WAAU,SAAU,IAC3B,oBAAC,QAAD;IAAM,WAAU;cACb,QAAQ,KAAK;GACV,EACA;MAEP,UACC,oBAAC,OAAD;GAAK,WAAU;aACb,qBAAC,QAAD;IAEE,WAAU;IACV,WAAW,UAAU;KACnB,MAAM,eAAe;KACrB,MAAM,QAAQ,MAAM,cAAc;KAClC,MAAM,MAAM,iBAAiB,MAAM,KAAK;KACxC,IAAI,KACF,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI;KAEpD,UAAU,KAAK;IACjB;cAXF,CAaE,oBAAC,SAAD;KACE,KAAK;KACL,MAAK;KACL,aAAa,QAAQ,gBAAgB;KACrC,WAAU;KACV,cAAc,eAAe;IAC9B,IACA,cACC,oBAAC,QAAD;KACE,OAAO,QAAQ,WAAW;KAC1B,MAAK;KACL,MAAK;KACL,SAAQ;KACR,OAAM;KACN,MAAM;KACN,eAAe;MACb,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI;MACvC,IAAI,SAAS,SAAS,SAAS,QAAQ,QAAQ;MAC/C,UAAU,KAAK;KACjB;IACD,KAED,oBAAC,QAAD;KACE,OAAO,QAAQ,UAAU;KACzB,MAAK;KACL,MAAK;KACL,OAAM;KACN,MAAM;IACP,EAEC;MA1CC,eAAe,SA0ChB;EACH,EAEJ;;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeSelector.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/NodeSelector.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport {\n Check,\n CheckSquare,\n ChevronDown,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ListOrdered,\n type LucideIcon,\n TextIcon,\n TextQuote,\n} from 'lucide-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { type EditorInstance, useEditor } from '../novel';\n\nexport type SelectorItem = {\n name: string;\n icon: LucideIcon;\n command: (editor: NonNullable<EditorInstance>) => void;\n isActive: (editor: NonNullable<EditorInstance>) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: 'Text',\n icon: TextIcon,\n command: (editor) => editor.chain().focus().clearNodes().run(),\n isActive: (editor) =>\n editor.isActive('paragraph') &&\n !editor.isActive('bulletList') &&\n !editor.isActive('orderedList'),\n },\n {\n name: 'Heading 1',\n icon: Heading1,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleHeading({ level: 1 }).run(),\n isActive: (editor) => editor.isActive('heading', { level: 1 }),\n },\n {\n name: 'Heading 2',\n icon: Heading2,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleHeading({ level: 2 }).run(),\n isActive: (editor) => editor.isActive('heading', { level: 2 }),\n },\n {\n name: 'Heading 3',\n icon: Heading3,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleHeading({ level: 3 }).run(),\n isActive: (editor) => editor.isActive('heading', { level: 3 }),\n },\n {\n name: 'To-do List',\n icon: CheckSquare,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleTaskList().run(),\n isActive: (editor) => editor.isActive('taskItem'),\n },\n {\n name: 'Bullet List',\n icon: ListOrdered,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleBulletList().run(),\n isActive: (editor) => editor.isActive('bulletList'),\n },\n {\n name: 'Numbered List',\n icon: ListOrdered,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleOrderedList().run(),\n isActive: (editor) => editor.isActive('orderedList'),\n },\n {\n name: 'Quote',\n icon: TextQuote,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleBlockquote().run(),\n isActive: (editor) => editor.isActive('blockquote'),\n },\n {\n name: 'Code',\n icon: Code,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleCodeBlock().run(),\n isActive: (editor) => editor.isActive('codeBlock'),\n },\n];\n\n/**\n * Bubble-menu selector that converts the current block between paragraph,\n * headings, lists, quote and code.\n *\n * Uses `onMouseDown` + `preventDefault` on every interactive element so the\n * editor's selection is never cleared while the panel is open.\n */\nexport const NodeSelector: FC = () => {\n const { editor } = useEditor();\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const content = useIntlayer('markdown-editor');\n\n useEffect(() => {\n if (!isOpen) return;\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleOutsideMouseDown);\n return () =>\n document.removeEventListener('mousedown', handleOutsideMouseDown);\n }, [isOpen]);\n\n if (!editor) return null;\n\n const activeItem = items.filter((item) => item.isActive(editor)).pop() ?? {\n name: 'Multiple',\n };\n\n const getItemName = (name: string) => {\n switch (name) {\n case 'Text':\n return content.text.value;\n case 'Heading 1':\n return content.heading1.value;\n case 'Heading 2':\n return content.heading2.value;\n case 'Heading 3':\n return content.heading3.value;\n case 'To-do List':\n return content.todoList.value;\n case 'Bullet List':\n return content.bulletList.value;\n case 'Numbered List':\n return content.numberedList.value;\n case 'Quote':\n return content.quote.value;\n case 'Code':\n return content.code.value;\n case 'Multiple':\n return content.multiple.value;\n default:\n return name;\n }\n };\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n }}\n className=\"flex items-center gap-1 whitespace-nowrap rounded-none px-3 py-1.5 text-sm hover:bg-accent\"\n >\n <span>{getItemName(activeItem.name)}</span>\n <ChevronDown\n className={cn('size-3 transition-transform', isOpen && 'rotate-180')}\n />\n </button>\n\n {isOpen && (\n <div className=\"absolute top-[calc(100%+0.5rem)] left-0 z-50 w-48 rounded-md border bg-popover p-1 shadow-md\">\n {items.map((item) => (\n <button\n type=\"button\"\n key={item.name}\n onMouseDown={(e) => {\n e.preventDefault();\n item.command(editor);\n setIsOpen(false);\n }}\n className=\"flex w-full cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent\"\n >\n <div className=\"flex items-center space-x-2\">\n <div className=\"rounded-sm border p-1\">\n <item.icon className=\"size-3\" />\n </div>\n <span>{getItemName(item.name)}</span>\n </div>\n {activeItem.name === item.name && <Check className=\"size-4\" />}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;AA2BA,MAAM,QAAwB;CAC5B;EACE,MAAM;EACN,MAAM;EACN,UAAU,WAAW,OAAO,
|
|
1
|
+
{"version":3,"file":"NodeSelector.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/NodeSelector.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport {\n Check,\n CheckSquare,\n ChevronDown,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ListOrdered,\n type LucideIcon,\n TextIcon,\n TextQuote,\n} from 'lucide-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { type EditorInstance, useEditor } from '../novel';\n\nexport type SelectorItem = {\n name: string;\n icon: LucideIcon;\n command: (editor: NonNullable<EditorInstance>) => void;\n isActive: (editor: NonNullable<EditorInstance>) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: 'Text',\n icon: TextIcon,\n command: (editor) => editor.chain().focus().clearNodes().run(),\n isActive: (editor) =>\n editor.isActive('paragraph') &&\n !editor.isActive('bulletList') &&\n !editor.isActive('orderedList'),\n },\n {\n name: 'Heading 1',\n icon: Heading1,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleHeading({ level: 1 }).run(),\n isActive: (editor) => editor.isActive('heading', { level: 1 }),\n },\n {\n name: 'Heading 2',\n icon: Heading2,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleHeading({ level: 2 }).run(),\n isActive: (editor) => editor.isActive('heading', { level: 2 }),\n },\n {\n name: 'Heading 3',\n icon: Heading3,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleHeading({ level: 3 }).run(),\n isActive: (editor) => editor.isActive('heading', { level: 3 }),\n },\n {\n name: 'To-do List',\n icon: CheckSquare,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleTaskList().run(),\n isActive: (editor) => editor.isActive('taskItem'),\n },\n {\n name: 'Bullet List',\n icon: ListOrdered,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleBulletList().run(),\n isActive: (editor) => editor.isActive('bulletList'),\n },\n {\n name: 'Numbered List',\n icon: ListOrdered,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleOrderedList().run(),\n isActive: (editor) => editor.isActive('orderedList'),\n },\n {\n name: 'Quote',\n icon: TextQuote,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleBlockquote().run(),\n isActive: (editor) => editor.isActive('blockquote'),\n },\n {\n name: 'Code',\n icon: Code,\n command: (editor) =>\n editor.chain().focus().clearNodes().toggleCodeBlock().run(),\n isActive: (editor) => editor.isActive('codeBlock'),\n },\n];\n\n/**\n * Bubble-menu selector that converts the current block between paragraph,\n * headings, lists, quote and code.\n *\n * Uses `onMouseDown` + `preventDefault` on every interactive element so the\n * editor's selection is never cleared while the panel is open.\n */\nexport const NodeSelector: FC = () => {\n const { editor } = useEditor();\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const content = useIntlayer('markdown-editor');\n\n useEffect(() => {\n if (!isOpen) return;\n const handleOutsideMouseDown = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleOutsideMouseDown);\n return () =>\n document.removeEventListener('mousedown', handleOutsideMouseDown);\n }, [isOpen]);\n\n if (!editor) return null;\n\n const activeItem = items.filter((item) => item.isActive(editor)).pop() ?? {\n name: 'Multiple',\n };\n\n const getItemName = (name: string) => {\n switch (name) {\n case 'Text':\n return content.text.value;\n case 'Heading 1':\n return content.heading1.value;\n case 'Heading 2':\n return content.heading2.value;\n case 'Heading 3':\n return content.heading3.value;\n case 'To-do List':\n return content.todoList.value;\n case 'Bullet List':\n return content.bulletList.value;\n case 'Numbered List':\n return content.numberedList.value;\n case 'Quote':\n return content.quote.value;\n case 'Code':\n return content.code.value;\n case 'Multiple':\n return content.multiple.value;\n default:\n return name;\n }\n };\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n setIsOpen((prev) => !prev);\n }}\n className=\"flex items-center gap-1 whitespace-nowrap rounded-none px-3 py-1.5 text-sm hover:bg-accent\"\n >\n <span>{getItemName(activeItem.name)}</span>\n <ChevronDown\n className={cn('size-3 transition-transform', isOpen && 'rotate-180')}\n />\n </button>\n\n {isOpen && (\n <div className=\"absolute top-[calc(100%+0.5rem)] left-0 z-50 w-48 rounded-md border bg-popover p-1 shadow-md\">\n {items.map((item) => (\n <button\n type=\"button\"\n key={item.name}\n onMouseDown={(e) => {\n e.preventDefault();\n item.command(editor);\n setIsOpen(false);\n }}\n className=\"flex w-full cursor-pointer items-center justify-between rounded-sm px-2 py-1 text-sm hover:bg-accent\"\n >\n <div className=\"flex items-center space-x-2\">\n <div className=\"rounded-sm border p-1\">\n <item.icon className=\"size-3\" />\n </div>\n <span>{getItemName(item.name)}</span>\n </div>\n {activeItem.name === item.name && <Check className=\"size-4\" />}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextButtons.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/TextButtons.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { cn } from '@utils/cn';\nimport {\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n StrikethroughIcon,\n UnderlineIcon,\n} from 'lucide-react';\nimport { useIntlayer } from 'react-intlayer';\nimport { EditorBubbleItem, useEditor } from '../novel';\nimport type { SelectorItem } from './NodeSelector';\n\n/**\n * Inline mark toggles (bold / italic / underline / strike / code) shown in the\n * bubble menu.\n */\nexport const TextButtons = () => {\n const { editor } = useEditor();\n const content = useIntlayer('markdown-editor');\n\n if (!editor) return null;\n\n const items: SelectorItem[] = [\n {\n name: 'bold',\n isActive: (currentEditor) => currentEditor.isActive('bold'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleBold().run(),\n icon: BoldIcon,\n },\n {\n name: 'italic',\n isActive: (currentEditor) => currentEditor.isActive('italic'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleItalic().run(),\n icon: ItalicIcon,\n },\n {\n name: 'underline',\n isActive: (currentEditor) => currentEditor.isActive('underline'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleUnderline().run(),\n icon: UnderlineIcon,\n },\n {\n name: 'strike',\n isActive: (currentEditor) => currentEditor.isActive('strike'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleStrike().run(),\n icon: StrikethroughIcon,\n },\n {\n name: 'code',\n isActive: (currentEditor) => currentEditor.isActive('code'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleCode().run(),\n icon: CodeIcon,\n },\n ];\n\n const getButtonLabel = (name: string) => {\n switch (name) {\n case 'bold':\n return content.bold.value;\n case 'italic':\n return content.italic.value;\n case 'underline':\n return content.underline.value;\n case 'strike':\n return content.strike.value;\n case 'code':\n return content.code.value;\n default:\n return name;\n }\n };\n\n return (\n <div className=\"flex\">\n {items.map((item) => (\n <EditorBubbleItem\n key={item.name}\n onSelect={(selectedEditor) => item.command(selectedEditor)}\n >\n <Button\n label={getButtonLabel(item.name)}\n size=\"icon-sm\"\n variant=\"hoverable\"\n color=\"text\"\n roundedSize=\"none\"\n Icon={item.icon}\n iconClassName={cn(item.isActive(editor) && 'text-blue-500')}\n />\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,MAAa,oBAAoB;CAC/B,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"TextButtons.mjs","names":[],"sources":["../../../../../src/components/MarkdownEditor/selectors/TextButtons.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { cn } from '@utils/cn';\nimport {\n BoldIcon,\n CodeIcon,\n ItalicIcon,\n StrikethroughIcon,\n UnderlineIcon,\n} from 'lucide-react';\nimport { useIntlayer } from 'react-intlayer';\nimport { EditorBubbleItem, useEditor } from '../novel';\nimport type { SelectorItem } from './NodeSelector';\n\n/**\n * Inline mark toggles (bold / italic / underline / strike / code) shown in the\n * bubble menu.\n */\nexport const TextButtons = () => {\n const { editor } = useEditor();\n const content = useIntlayer('markdown-editor');\n\n if (!editor) return null;\n\n const items: SelectorItem[] = [\n {\n name: 'bold',\n isActive: (currentEditor) => currentEditor.isActive('bold'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleBold().run(),\n icon: BoldIcon,\n },\n {\n name: 'italic',\n isActive: (currentEditor) => currentEditor.isActive('italic'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleItalic().run(),\n icon: ItalicIcon,\n },\n {\n name: 'underline',\n isActive: (currentEditor) => currentEditor.isActive('underline'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleUnderline().run(),\n icon: UnderlineIcon,\n },\n {\n name: 'strike',\n isActive: (currentEditor) => currentEditor.isActive('strike'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleStrike().run(),\n icon: StrikethroughIcon,\n },\n {\n name: 'code',\n isActive: (currentEditor) => currentEditor.isActive('code'),\n command: (currentEditor) =>\n currentEditor.chain().focus().toggleCode().run(),\n icon: CodeIcon,\n },\n ];\n\n const getButtonLabel = (name: string) => {\n switch (name) {\n case 'bold':\n return content.bold.value;\n case 'italic':\n return content.italic.value;\n case 'underline':\n return content.underline.value;\n case 'strike':\n return content.strike.value;\n case 'code':\n return content.code.value;\n default:\n return name;\n }\n };\n\n return (\n <div className=\"flex\">\n {items.map((item) => (\n <EditorBubbleItem\n key={item.name}\n onSelect={(selectedEditor) => item.command(selectedEditor)}\n >\n <Button\n label={getButtonLabel(item.name)}\n size=\"icon-sm\"\n variant=\"hoverable\"\n color=\"text\"\n roundedSize=\"none\"\n Icon={item.icon}\n iconClassName={cn(item.isActive(editor) && 'text-blue-500')}\n />\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAmBA,MAAa,oBAAoB;CAC/B,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,UAAU,YAAY,iBAAiB;CAE7C,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,QAAwB;EAC5B;GACE,MAAM;GACN,WAAW,kBAAkB,cAAc,SAAS,MAAM;GAC1D,UAAU,kBACR,cAAc,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI;GACjD,MAAM;EACR;EACA;GACE,MAAM;GACN,WAAW,kBAAkB,cAAc,SAAS,QAAQ;GAC5D,UAAU,kBACR,cAAc,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI;GACnD,MAAM;EACR;EACA;GACE,MAAM;GACN,WAAW,kBAAkB,cAAc,SAAS,WAAW;GAC/D,UAAU,kBACR,cAAc,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI;GACtD,MAAM;EACR;EACA;GACE,MAAM;GACN,WAAW,kBAAkB,cAAc,SAAS,QAAQ;GAC5D,UAAU,kBACR,cAAc,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI;GACnD,MAAM;EACR;EACA;GACE,MAAM;GACN,WAAW,kBAAkB,cAAc,SAAS,MAAM;GAC1D,UAAU,kBACR,cAAc,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI;GACjD,MAAM;EACR;CACF;CAEA,MAAM,kBAAkB,SAAiB;EACvC,QAAQ,MAAR;GACE,KAAK,QACH,OAAO,QAAQ,KAAK;GACtB,KAAK,UACH,OAAO,QAAQ,OAAO;GACxB,KAAK,aACH,OAAO,QAAQ,UAAU;GAC3B,KAAK,UACH,OAAO,QAAQ,OAAO;GACxB,KAAK,QACH,OAAO,QAAQ,KAAK;GACtB,SACE,OAAO;EACX;CACF;CAEA,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,MAAM,KAAK,SACV,oBAAC,kBAAD;GAEE,WAAW,mBAAmB,KAAK,QAAQ,cAAc;aAEzD,oBAAC,QAAD;IACE,OAAO,eAAe,KAAK,IAAI;IAC/B,MAAK;IACL,SAAQ;IACR,OAAM;IACN,aAAY;IACZ,MAAM,KAAK;IACX,eAAe,GAAG,KAAK,SAAS,MAAM,KAAK,eAAe;GAC3D;EACe,GAZX,KAAK,IAYM,CACnB;CACE;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommand.mjs","names":[],"sources":["../../../../src/components/MarkdownEditor/slashCommand.tsx"],"sourcesContent":["import { YoutubeLogo } from '@components/SocialNetworks';\nimport {\n CheckSquare,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ImageIcon,\n List,\n ListOrdered,\n Text,\n TextQuote,\n} from 'lucide-react';\nimport {\n Command,\n createSuggestionItems,\n renderItems,\n type SuggestionItem,\n type UploadFn,\n} from './novel';\n\n/**\n * Builds the list of slash-command suggestions. The image command needs the\n * runtime `uploadFn`, hence the factory.\n *\n * @param uploadFn - Novel upload handler used by the \"Image\" command.\n * @param content - The internationalized content object from useIntlayer.\n */\nexport const getSuggestionItems = (\n uploadFn: UploadFn,\n content: any\n): SuggestionItem[] =>\n createSuggestionItems([\n {\n title: content.text.value,\n description: content.textDesc.value,\n searchTerms: ['p', 'paragraph'],\n icon: <Text className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .run();\n },\n },\n {\n title: content.todoList.value,\n description: content.todoListDesc.value,\n searchTerms: ['todo', 'task', 'list', 'check', 'checkbox'],\n icon: <CheckSquare className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleTaskList().run();\n },\n },\n {\n title: content.heading1.value,\n description: content.heading1Desc.value,\n searchTerms: ['title', 'big', 'large'],\n icon: <Heading1 className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 1 })\n .run();\n },\n },\n {\n title: content.heading2.value,\n description: content.heading2Desc.value,\n searchTerms: ['subtitle', 'medium'],\n icon: <Heading2 className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 2 })\n .run();\n },\n },\n {\n title: content.heading3.value,\n description: content.heading3Desc.value,\n searchTerms: ['subtitle', 'small'],\n icon: <Heading3 className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 3 })\n .run();\n },\n },\n {\n title: content.bulletList.value,\n description: content.bulletListDesc.value,\n searchTerms: ['unordered', 'point'],\n icon: <List className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleBulletList().run();\n },\n },\n {\n title: content.numberedList.value,\n description: content.numberedListDesc.value,\n searchTerms: ['ordered'],\n icon: <ListOrdered className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleOrderedList().run();\n },\n },\n {\n title: content.quote.value,\n description: content.quoteDesc.value,\n searchTerms: ['blockquote'],\n icon: <TextQuote className=\"size-10\" />,\n command: ({ editor, range }) =>\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .toggleBlockquote()\n .run(),\n },\n {\n title: content.code.value,\n description: content.codeDesc.value,\n searchTerms: ['codeblock'],\n icon: <Code className=\"size-10\" />,\n command: ({ editor, range }) =>\n editor.chain().focus().deleteRange(range).toggleCodeBlock().run(),\n },\n {\n title: content.image.value,\n description: content.imageDesc.value,\n searchTerms: ['photo', 'picture', 'media'],\n icon: <ImageIcon className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).run();\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = () => {\n if (input.files?.length) {\n const file = input.files[0];\n const pos = editor.view.state.selection.from;\n uploadFn(file, editor.view, pos);\n }\n };\n input.click();\n },\n },\n {\n title: content.youtube.value,\n description: content.youtubeDesc.value,\n searchTerms: ['video', 'youtube', 'embed'],\n icon: <YoutubeLogo className=\"size-10\" />,\n command: ({ editor, range }) => {\n const videoLink = prompt(content.youtubePrompt.value);\n // From https://regexr.com/3dj5t\n const ytRegex =\n /^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube\\.com|youtu.be))(\\/(?:[\\w-]+\\?v=|embed\\/|v\\/)?)([\\w-]+)(\\S+)?$/;\n\n if (videoLink && ytRegex.test(videoLink)) {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setYoutubeVideo({ src: videoLink })\n .run();\n } else if (videoLink !== null) {\n alert(content.youtubeError.value);\n }\n },\n },\n ]);\n\n/**\n * Builds the slash-command extension wired to the given upload handler.\n *\n * @param uploadFn - Novel upload handler used by the \"Image\" command.\n * @param content - The internationalized content object from useIntlayer.\n */\nexport const createSlashCommand = (uploadFn: UploadFn, content: any) => {\n const suggestionItems = getSuggestionItems(uploadFn, content);\n\n const slashCommand = Command.configure({\n suggestion: {\n items: () => suggestionItems,\n render: renderItems,\n },\n });\n\n return { slashCommand, suggestionItems };\n};\n"],"mappings":";;;;;;;;;;;;;AA4BA,MAAa,sBACX,UACA,YAEA,sBAAsB;CACpB;EACE,OAAO,QAAQ,KAAK;EACpB,aAAa,QAAQ,SAAS;EAC9B,aAAa,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"slashCommand.mjs","names":[],"sources":["../../../../src/components/MarkdownEditor/slashCommand.tsx"],"sourcesContent":["import { YoutubeLogo } from '@components/SocialNetworks';\nimport {\n CheckSquare,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ImageIcon,\n List,\n ListOrdered,\n Text,\n TextQuote,\n} from 'lucide-react';\nimport {\n Command,\n createSuggestionItems,\n renderItems,\n type SuggestionItem,\n type UploadFn,\n} from './novel';\n\n/**\n * Builds the list of slash-command suggestions. The image command needs the\n * runtime `uploadFn`, hence the factory.\n *\n * @param uploadFn - Novel upload handler used by the \"Image\" command.\n * @param content - The internationalized content object from useIntlayer.\n */\nexport const getSuggestionItems = (\n uploadFn: UploadFn,\n content: any\n): SuggestionItem[] =>\n createSuggestionItems([\n {\n title: content.text.value,\n description: content.textDesc.value,\n searchTerms: ['p', 'paragraph'],\n icon: <Text className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .run();\n },\n },\n {\n title: content.todoList.value,\n description: content.todoListDesc.value,\n searchTerms: ['todo', 'task', 'list', 'check', 'checkbox'],\n icon: <CheckSquare className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleTaskList().run();\n },\n },\n {\n title: content.heading1.value,\n description: content.heading1Desc.value,\n searchTerms: ['title', 'big', 'large'],\n icon: <Heading1 className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 1 })\n .run();\n },\n },\n {\n title: content.heading2.value,\n description: content.heading2Desc.value,\n searchTerms: ['subtitle', 'medium'],\n icon: <Heading2 className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 2 })\n .run();\n },\n },\n {\n title: content.heading3.value,\n description: content.heading3Desc.value,\n searchTerms: ['subtitle', 'small'],\n icon: <Heading3 className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setNode('heading', { level: 3 })\n .run();\n },\n },\n {\n title: content.bulletList.value,\n description: content.bulletListDesc.value,\n searchTerms: ['unordered', 'point'],\n icon: <List className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleBulletList().run();\n },\n },\n {\n title: content.numberedList.value,\n description: content.numberedListDesc.value,\n searchTerms: ['ordered'],\n icon: <ListOrdered className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleOrderedList().run();\n },\n },\n {\n title: content.quote.value,\n description: content.quoteDesc.value,\n searchTerms: ['blockquote'],\n icon: <TextQuote className=\"size-10\" />,\n command: ({ editor, range }) =>\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .toggleBlockquote()\n .run(),\n },\n {\n title: content.code.value,\n description: content.codeDesc.value,\n searchTerms: ['codeblock'],\n icon: <Code className=\"size-10\" />,\n command: ({ editor, range }) =>\n editor.chain().focus().deleteRange(range).toggleCodeBlock().run(),\n },\n {\n title: content.image.value,\n description: content.imageDesc.value,\n searchTerms: ['photo', 'picture', 'media'],\n icon: <ImageIcon className=\"size-10\" />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).run();\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = () => {\n if (input.files?.length) {\n const file = input.files[0];\n const pos = editor.view.state.selection.from;\n uploadFn(file, editor.view, pos);\n }\n };\n input.click();\n },\n },\n {\n title: content.youtube.value,\n description: content.youtubeDesc.value,\n searchTerms: ['video', 'youtube', 'embed'],\n icon: <YoutubeLogo className=\"size-10\" />,\n command: ({ editor, range }) => {\n const videoLink = prompt(content.youtubePrompt.value);\n // From https://regexr.com/3dj5t\n const ytRegex =\n /^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube\\.com|youtu.be))(\\/(?:[\\w-]+\\?v=|embed\\/|v\\/)?)([\\w-]+)(\\S+)?$/;\n\n if (videoLink && ytRegex.test(videoLink)) {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setYoutubeVideo({ src: videoLink })\n .run();\n } else if (videoLink !== null) {\n alert(content.youtubeError.value);\n }\n },\n },\n ]);\n\n/**\n * Builds the slash-command extension wired to the given upload handler.\n *\n * @param uploadFn - Novel upload handler used by the \"Image\" command.\n * @param content - The internationalized content object from useIntlayer.\n */\nexport const createSlashCommand = (uploadFn: UploadFn, content: any) => {\n const suggestionItems = getSuggestionItems(uploadFn, content);\n\n const slashCommand = Command.configure({\n suggestion: {\n items: () => suggestionItems,\n render: renderItems,\n },\n });\n\n return { slashCommand, suggestionItems };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxHeightSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { CSSProperties, FC, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * Props for the MaxHeightSmoother component\n */\ninterface MaxHeightSmootherProps extends HTMLAttributes<HTMLDivElement> {\n /** Content to render within the smoother container */\n children: ReactNode;\n /** Controls collapse state. When true, content is collapsed; when false, expanded; when undefined, relies on hover/focus behavior */\n isHidden?: boolean;\n /** Enable expand-on-hover behavior */\n isOverable?: boolean;\n /** Enable expand-on-focus behavior for accessibility and keyboard navigation */\n isFocusable?: boolean;\n /** Minimum height in pixels for the collapsed state */\n minHeight?: number;\n}\n\n/**\n * MaxHeightSmoother Component\n *\n * A sophisticated container component that provides smooth height transitions\n * for collapsible content. Implemented entirely in CSS — no client-side\n * JavaScript, hooks, or event listeners — making it compatible with React\n * Server Components and Next.js App Router without `'use client'`.\n *\n * @component\n * @example\n * Basic controlled usage:\n * ```tsx\n * const [isCollapsed, setIsCollapsed] = useState(true);\n *\n * <MaxHeightSmoother isHidden={isCollapsed}>\n * <div>Your collapsible content here</div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Hover-triggered expansion:\n * ```tsx\n * <MaxHeightSmoother isOverable>\n * <p>This content expands when you hover over the container.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Focus-triggered expansion (keyboard accessible):\n * ```tsx\n * <MaxHeightSmoother isFocusable>\n * <p>Tab to focus this container to expand the content.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * With minimum height for preview:\n * ```tsx\n * <MaxHeightSmoother isOverable minHeight={100} className=\"border rounded-lg p-4\">\n * <h3>Article Preview</h3>\n * <p>This shows a preview of the content. Hover to see all.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Combined hover and focus:\n * ```tsx\n * <MaxHeightSmoother isOverable isFocusable minHeight={80}>\n * <h4>Interactive Card</h4>\n * <p>Expands on both hover and keyboard focus.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * ## Animation Strategies\n *\n * ### Strategy A — `grid-template-rows` (`minHeight === 0`)\n * Transitions between `grid-rows-[0fr]` and `grid-rows-[1fr]`.\n * Clean and performant; no fixed height ceiling required.\n * Requires `min-h-0` on the inner wrapper so the grid track can fully collapse.\n *\n * ### Strategy B — `max-height` via CSS custom properties (`minHeight > 0`)\n * When a visible preview floor is required, `grid-template-rows` produces a\n * \"dead time\" artifact: the track silently grows from 0 → minHeight before\n * anything visible happens, resulting in a perceived snap.\n *\n * `max-height` sidesteps this entirely — the transition starts from the\n * already-visible floor value, producing a single continuous expansion.\n *\n * The collapsed floor (`--mhs-collapsed`) and expanded ceiling\n * (`--mhs-expanded`) are injected as CSS variables via inline style,\n * NOT as `max-height` directly. This lets Tailwind own `max-height`\n * entirely, so `:hover` and `:focus-within` can override it freely\n * without fighting inline-style specificity.\n *\n * Both variables are consumer-overridable via CSS:\n * ```css\n * .my-container {\n * --mhs-collapsed: 80px;\n * --mhs-expanded: 1200px;\n * }\n * ```\n *\n * Trade-off: easing is applied over [minHeight → 3000px], not the real\n * content height. For typical content this is imperceptible. If pixel-perfect\n * easing is critical, use a JS-measured height with a controlled `isHidden`\n * prop and a `style={{ maxHeight }}` override instead.\n *\n * ## Interaction Modes\n *\n * 1. **Controlled** — Pass `isHidden` for external state control (e.g. accordion)\n * 2. **Hover** — Set `isOverable` for mouse hover expansion\n * 3. **Focus** — Set `isFocusable` for keyboard focus expansion\n * 4. **Combined** — Use `isOverable` and `isFocusable` together\n *\n * ## Accessibility\n *\n * - `role=\"button\"` and `tabIndex={0}` when `isFocusable` is true\n * - `aria-expanded` reflects the current disclosure state\n * - Focus expansion via `:focus-within` CSS pseudo-class\n * - `motion-reduce:transition-none` respects `prefers-reduced-motion`\n *\n * Note: because this component relies on CSS pseudo-classes for interaction,\n * keyboard toggle (Enter / Space) is not supported in uncontrolled mode.\n * For full keyboard toggle behaviour, manage `isHidden` externally and\n * wire an `onClick` / `onKeyDown` handler on the parent.\n *\n * ## Performance\n *\n * - Pure CSS animations — no JavaScript timers or DOM measurements\n * - No `'use client'` directive required\n * - Compatible with React Server Components and Next.js App Router\n * - GPU-accelerated transitions\n *\n * @param props - Component props extending HTML div attributes\n * @param props.children - Content to render within the container\n * @param props.isHidden - Controlled collapse state (`true` = collapsed, `false` = expanded)\n * @param props.isOverable - Enable hover-to-expand behaviour\n * @param props.isFocusable - Enable focus-to-expand behaviour with keyboard navigation\n * @param props.minHeight - Minimum height in pixels for the collapsed state (default: 0)\n * @param props.className - Additional CSS classes\n * @param props.style - Inline styles (CSS variable overrides will be merged)\n *\n * @returns A smooth height-transitioning container with configurable interaction modes\n */\nexport const MaxHeightSmoother: FC<MaxHeightSmootherProps> = ({\n children,\n isHidden,\n className = '',\n isOverable = false,\n isFocusable = false,\n minHeight = 0,\n ...props\n}) => (\n <div\n aria-hidden={isFocusable ? isHidden : undefined}\n tabIndex={isFocusable ? 0 : undefined}\n role={isFocusable ? 'button' : 'none'}\n className={cn(\n 'group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out',\n typeof isHidden !== 'undefined' &&\n !isHidden &&\n 'grid-rows-[1fr] overflow-x-auto',\n isOverable && 'hover:grid-rows-[1fr] hover:overflow-x-auto',\n isFocusable &&\n 'focus-within:grid-rows-[1fr] focus-within:overflow-x-auto focus:grid-rows-[1fr] focus:overflow-x-auto',\n className\n )}\n {...props}\n >\n <div\n style={{\n minHeight: `${minHeight}px`,\n }}\n className={cn(\n isOverable && 'group-hover/height-smoother:visible',\n isFocusable && 'group-focus/height-smoother:visible',\n className\n )}\n >\n {children}\n </div>\n </div>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+IA,MAAa,qBAAiD,EAC5D,UACA,UACA,YAAY,IACZ,aAAa,OACb,cAAc,OACd,YAAY,GACZ,GAAG,YAEH,oBAAC,OAAD;CACE,eAAa,cAAc,WAAW;CACtC,UAAU,cAAc,IAAI;CAC5B,MAAM,cAAc,WAAW;CAC/B,WAAW,GACT,sHACA,OAAO,aAAa,eAClB,CAAC,YACD,mCACF,cAAc,+CACd,eACE,yGACF,
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxHeightSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { CSSProperties, FC, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * Props for the MaxHeightSmoother component\n */\ninterface MaxHeightSmootherProps extends HTMLAttributes<HTMLDivElement> {\n /** Content to render within the smoother container */\n children: ReactNode;\n /** Controls collapse state. When true, content is collapsed; when false, expanded; when undefined, relies on hover/focus behavior */\n isHidden?: boolean;\n /** Enable expand-on-hover behavior */\n isOverable?: boolean;\n /** Enable expand-on-focus behavior for accessibility and keyboard navigation */\n isFocusable?: boolean;\n /** Minimum height in pixels for the collapsed state */\n minHeight?: number;\n}\n\n/**\n * MaxHeightSmoother Component\n *\n * A sophisticated container component that provides smooth height transitions\n * for collapsible content. Implemented entirely in CSS — no client-side\n * JavaScript, hooks, or event listeners — making it compatible with React\n * Server Components and Next.js App Router without `'use client'`.\n *\n * @component\n * @example\n * Basic controlled usage:\n * ```tsx\n * const [isCollapsed, setIsCollapsed] = useState(true);\n *\n * <MaxHeightSmoother isHidden={isCollapsed}>\n * <div>Your collapsible content here</div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Hover-triggered expansion:\n * ```tsx\n * <MaxHeightSmoother isOverable>\n * <p>This content expands when you hover over the container.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Focus-triggered expansion (keyboard accessible):\n * ```tsx\n * <MaxHeightSmoother isFocusable>\n * <p>Tab to focus this container to expand the content.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * With minimum height for preview:\n * ```tsx\n * <MaxHeightSmoother isOverable minHeight={100} className=\"border rounded-lg p-4\">\n * <h3>Article Preview</h3>\n * <p>This shows a preview of the content. Hover to see all.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Combined hover and focus:\n * ```tsx\n * <MaxHeightSmoother isOverable isFocusable minHeight={80}>\n * <h4>Interactive Card</h4>\n * <p>Expands on both hover and keyboard focus.</p>\n * </MaxHeightSmoother>\n * ```\n *\n * ## Animation Strategies\n *\n * ### Strategy A — `grid-template-rows` (`minHeight === 0`)\n * Transitions between `grid-rows-[0fr]` and `grid-rows-[1fr]`.\n * Clean and performant; no fixed height ceiling required.\n * Requires `min-h-0` on the inner wrapper so the grid track can fully collapse.\n *\n * ### Strategy B — `max-height` via CSS custom properties (`minHeight > 0`)\n * When a visible preview floor is required, `grid-template-rows` produces a\n * \"dead time\" artifact: the track silently grows from 0 → minHeight before\n * anything visible happens, resulting in a perceived snap.\n *\n * `max-height` sidesteps this entirely — the transition starts from the\n * already-visible floor value, producing a single continuous expansion.\n *\n * The collapsed floor (`--mhs-collapsed`) and expanded ceiling\n * (`--mhs-expanded`) are injected as CSS variables via inline style,\n * NOT as `max-height` directly. This lets Tailwind own `max-height`\n * entirely, so `:hover` and `:focus-within` can override it freely\n * without fighting inline-style specificity.\n *\n * Both variables are consumer-overridable via CSS:\n * ```css\n * .my-container {\n * --mhs-collapsed: 80px;\n * --mhs-expanded: 1200px;\n * }\n * ```\n *\n * Trade-off: easing is applied over [minHeight → 3000px], not the real\n * content height. For typical content this is imperceptible. If pixel-perfect\n * easing is critical, use a JS-measured height with a controlled `isHidden`\n * prop and a `style={{ maxHeight }}` override instead.\n *\n * ## Interaction Modes\n *\n * 1. **Controlled** — Pass `isHidden` for external state control (e.g. accordion)\n * 2. **Hover** — Set `isOverable` for mouse hover expansion\n * 3. **Focus** — Set `isFocusable` for keyboard focus expansion\n * 4. **Combined** — Use `isOverable` and `isFocusable` together\n *\n * ## Accessibility\n *\n * - `role=\"button\"` and `tabIndex={0}` when `isFocusable` is true\n * - `aria-expanded` reflects the current disclosure state\n * - Focus expansion via `:focus-within` CSS pseudo-class\n * - `motion-reduce:transition-none` respects `prefers-reduced-motion`\n *\n * Note: because this component relies on CSS pseudo-classes for interaction,\n * keyboard toggle (Enter / Space) is not supported in uncontrolled mode.\n * For full keyboard toggle behaviour, manage `isHidden` externally and\n * wire an `onClick` / `onKeyDown` handler on the parent.\n *\n * ## Performance\n *\n * - Pure CSS animations — no JavaScript timers or DOM measurements\n * - No `'use client'` directive required\n * - Compatible with React Server Components and Next.js App Router\n * - GPU-accelerated transitions\n *\n * @param props - Component props extending HTML div attributes\n * @param props.children - Content to render within the container\n * @param props.isHidden - Controlled collapse state (`true` = collapsed, `false` = expanded)\n * @param props.isOverable - Enable hover-to-expand behaviour\n * @param props.isFocusable - Enable focus-to-expand behaviour with keyboard navigation\n * @param props.minHeight - Minimum height in pixels for the collapsed state (default: 0)\n * @param props.className - Additional CSS classes\n * @param props.style - Inline styles (CSS variable overrides will be merged)\n *\n * @returns A smooth height-transitioning container with configurable interaction modes\n */\nexport const MaxHeightSmoother: FC<MaxHeightSmootherProps> = ({\n children,\n isHidden,\n className = '',\n isOverable = false,\n isFocusable = false,\n minHeight = 0,\n ...props\n}) => (\n <div\n aria-hidden={isFocusable ? isHidden : undefined}\n tabIndex={isFocusable ? 0 : undefined}\n role={isFocusable ? 'button' : 'none'}\n className={cn(\n 'group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out',\n typeof isHidden !== 'undefined' &&\n !isHidden &&\n 'grid-rows-[1fr] overflow-x-auto',\n isOverable && 'hover:grid-rows-[1fr] hover:overflow-x-auto',\n isFocusable &&\n 'focus-within:grid-rows-[1fr] focus-within:overflow-x-auto focus:grid-rows-[1fr] focus:overflow-x-auto',\n className\n )}\n {...props}\n >\n <div\n style={{\n minHeight: `${minHeight}px`,\n }}\n className={cn(\n isOverable && 'group-hover/height-smoother:visible',\n isFocusable && 'group-focus/height-smoother:visible',\n className\n )}\n >\n {children}\n </div>\n </div>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+IA,MAAa,qBAAiD,EAC5D,UACA,UACA,YAAY,IACZ,aAAa,OACb,cAAc,OACd,YAAY,GACZ,GAAG,YAEH,oBAAC,OAAD;CACE,eAAa,cAAc,WAAW;CACtC,UAAU,cAAc,IAAI;CAC5B,MAAM,cAAc,WAAW;CAC/B,WAAW,GACT,sHACA,OAAO,aAAa,eAClB,CAAC,YACD,mCACF,cAAc,+CACd,eACE,yGACF,SACF;CACA,GAAI;WAEJ,oBAAC,OAAD;EACE,OAAO,EACL,WAAW,GAAG,UAAU,IAC1B;EACA,WAAW,GACT,cAAc,uCACd,eAAe,uCACf,SACF;EAEC;CACE;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxWidthSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { HTMLAttributes } from 'react';\n\ntype Align = 'left' | 'right';\n\ntype MaxWidthSmootherProps = HTMLAttributes<HTMLDivElement> & {\n isHidden: boolean;\n minWidth?: number;\n align?: Align;\n isDisabled?: boolean;\n};\n\nexport const MaxWidthSmoother = ({\n children,\n isHidden,\n minWidth = 0,\n align = 'left',\n isDisabled = false,\n className,\n ...props\n}: MaxWidthSmootherProps) => {\n const isCurrentlyHidden = isHidden && !isDisabled;\n\n return (\n <div\n className={cn(\n 'relative grid h-full grid-cols-[0fr] overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out',\n isCurrentlyHidden ? '' : 'grid-cols-[1fr]',\n className\n )}\n aria-hidden={isCurrentlyHidden}\n inert={isCurrentlyHidden ? true : undefined}\n {...props}\n >\n <div\n style={{\n minWidth: `${minWidth}px`,\n }}\n className={cn(align === 'right' && 'ml-auto')}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AAYA,MAAa,oBAAoB,EAC/B,UACA,UACA,WAAW,GACX,QAAQ,QACR,aAAa,OACb,WACA,GAAG,YACwB;CAC3B,MAAM,oBAAoB,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxWidthSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { HTMLAttributes } from 'react';\n\ntype Align = 'left' | 'right';\n\ntype MaxWidthSmootherProps = HTMLAttributes<HTMLDivElement> & {\n isHidden: boolean;\n minWidth?: number;\n align?: Align;\n isDisabled?: boolean;\n};\n\nexport const MaxWidthSmoother = ({\n children,\n isHidden,\n minWidth = 0,\n align = 'left',\n isDisabled = false,\n className,\n ...props\n}: MaxWidthSmootherProps) => {\n const isCurrentlyHidden = isHidden && !isDisabled;\n\n return (\n <div\n className={cn(\n 'relative grid h-full grid-cols-[0fr] overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out',\n isCurrentlyHidden ? '' : 'grid-cols-[1fr]',\n className\n )}\n aria-hidden={isCurrentlyHidden}\n inert={isCurrentlyHidden ? true : undefined}\n {...props}\n >\n <div\n style={{\n minWidth: `${minWidth}px`,\n }}\n className={cn(align === 'right' && 'ml-auto')}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AAYA,MAAa,oBAAoB,EAC/B,UACA,UACA,WAAW,GACX,QAAQ,QACR,aAAa,OACb,WACA,GAAG,YACwB;CAC3B,MAAM,oBAAoB,YAAY,CAAC;CAEvC,OACE,oBAAC,OAAD;EACE,WAAW,GACT,oHACA,oBAAoB,KAAK,mBACzB,SACF;EACA,eAAa;EACb,OAAO,oBAAoB,OAAO;EAClC,GAAI;YAEJ,oBAAC,OAAD;GACE,OAAO,EACL,UAAU,GAAG,SAAS,IACxB;GACA,WAAW,GAAG,UAAU,WAAW,SAAS;GAE3C;EACE;CACF;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.mjs","names":["m"],"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["'use client';\n\nimport { useGetElementOrWindow, useScrollBlockage } from '@hooks/index';\nimport { cn } from '@utils/cn';\nimport { cva } from 'class-variance-authority';\nimport { motion as m } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { type FC, type ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../Button';\nimport { Container, type ContainerProps } from '../Container';\nimport { H3 } from '../Headers';\n\n/**\n * Enumeration of available modal sizes\n */\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'unset';\n\ntype ModalProps = {\n children: ReactNode;\n isOpen: boolean;\n onClose?: () => void;\n container?: HTMLElement;\n disableScroll?: boolean;\n hasCloseButton?: boolean;\n title?: ReactNode;\n size?: ModalSize | `${ModalSize}`;\n /**\n * Defines if the modal content area is scrollable.\n */\n isScrollable?: boolean | 'x' | 'y';\n} & Partial<\n Pick<\n ContainerProps,\n | 'className'\n | 'transparency'\n | 'border'\n | 'background'\n | 'roundedSize'\n | 'borderColor'\n | 'padding'\n | 'separator'\n | 'gap'\n >\n>;\n\nconst modalVariants = cva(\n 'flex cursor-default flex-col overflow-hidden shadow-sm',\n {\n variants: {\n size: {\n sm: 'h-auto max-h-[30vh] w-[95vw] max-w-xl',\n md: 'h-auto max-h-[50vh] w-[95vw] max-w-xl',\n lg: 'h-auto max-h-[70vh] w-[95vw] max-w-4xl',\n xl: 'h-auto max-h-[95vh] w-[95vw] max-w-6xl',\n unset: 'h-auto max-h-[95vh] w-[95vw]',\n },\n },\n defaultVariants: {\n size: 'unset',\n },\n }\n);\n\n// Mapped from Container/index.tsx to apply internally\nconst contentPaddingVariants = {\n none: 'p-0',\n sm: 'px-2 py-4',\n md: 'px-4 py-6',\n lg: 'px-6 py-8',\n xl: 'px-8 py-10',\n '2xl': 'px-10 py-12',\n};\n\nconst MotionModal = m.create(Container);\n\n/**\n * Modal Component\n *\n * A highly customizable modal dialog component with portal rendering, Framer Motion animations,\n * and comprehensive accessibility features. Supports multiple size variants and scroll management.\n *\n * Features:\n * - Portal rendering to any container element (defaults to document.body)\n * - Smooth animations with Framer Motion\n * - Size variants: SM, MD, LG, XL, UNSET with responsive sizing\n * - Optional title and close button\n * - Background scroll prevention\n * - Click-outside-to-close functionality\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support (ESC to close)\n * - Extensible styling with Container props\n *\n * @example\n * Basic usage:\n * ```jsx\n * <Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <p>Modal content goes here</p>\n * </Modal>\n * ```\n *\n * @example\n * With title and close button:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * title=\"Confirm Action\"\n * hasCloseButton\n * size=\"lg\"\n * >\n * <div>\n * <p>Are you sure you want to continue?</p>\n * <Button onClick={onConfirm}>Confirm</Button>\n * </div>\n * </Modal>\n * ```\n *\n * @example\n * Custom container and styling:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * container={customContainer}\n * background=\"card\"\n * padding=\"lg\"\n * border=\"default\"\n * >\n * Content with custom styling\n * </Modal>\n * ```\n *\n * Accessibility Notes:\n * - Modal receives focus when opened\n * - Background content is hidden from screen readers when modal is open\n * - ESC key closes modal (handled by browser for role=\"dialog\")\n * - Click outside modal closes it\n * - Close button has descriptive label for screen readers\n *\n * @param props - Modal component props\n * @returns JSX element rendered via createPortal\n */\nexport const Modal: FC<ModalProps> = ({\n children,\n isOpen,\n container,\n onClose,\n hasCloseButton = false,\n title,\n size = 'md',\n className,\n isScrollable = false, // Enable the scroll of the content\n disableScroll = true, // Disable the scroll of the background\n padding = 'none', // Extract padding here\n ...props\n}) => {\n const containerElement = useGetElementOrWindow(container);\n\n useScrollBlockage({ key: 'modal', disableScroll: isOpen && disableScroll });\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen && onClose) {\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!containerElement) return <></>;\n\n const hasTitle = Boolean(title);\n\n // Determine the class for the inner content based on the padding prop\n const contentPaddingClass =\n contentPaddingVariants[\n (padding as keyof typeof contentPaddingVariants) || 'none'\n ];\n\n return createPortal(\n <m.div\n className=\"invisible fixed top-0 left-0 z-50 flex size-full cursor-pointer items-center justify-center overflow-hidden bg-background/40 backdrop-blur\"\n animate={isOpen ? 'visible' : 'invisible'}\n variants={{\n visible: {\n opacity: 1,\n visibility: 'visible',\n transition: { duration: 0.1, when: 'beforeChildren' },\n },\n invisible: {\n opacity: 0,\n visibility: 'hidden',\n transition: { duration: 0.1, when: 'afterChildren' },\n },\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n aria-hidden={!isOpen}\n >\n <MotionModal\n onClick={(e) => e.stopPropagation()}\n initial={{ scale: isOpen ? 0.5 : 1 }}\n animate={{ scale: isOpen ? 1 : 0.5 }}\n transition={{ duration: 0.3 }}\n className={modalVariants({ size, className })}\n role=\"dialog\"\n aria-modal\n roundedSize=\"4xl\"\n // Force the outer container to have no padding so scrollbars hit the edge\n padding=\"none\"\n {...props}\n >\n {/* HEADER SECTION */}\n <div\n className={cn(\n 'relative flex-none px-4 pt-4',\n hasCloseButton && hasTitle\n ? `flex items-start`\n : hasCloseButton\n ? `flex justify-end`\n : hasTitle\n ? `items-center`\n : `hidden`\n )}\n >\n {hasTitle && (\n <H3 className=\"mb-2 ml-1 flex items-center justify-center font-bold text-lg\">\n {title}\n </H3>\n )}\n {hasCloseButton && (\n <Button\n variant=\"hoverable\"\n color=\"text\"\n label=\"Close modal\"\n className=\"ml-auto\"\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n Icon={X}\n size=\"icon-md\"\n />\n )}\n </div>\n\n {/* SCROLLABLE WRAPPER - Full width, no padding */}\n <div\n className={cn(\n 'flex min-h-0 w-full flex-1 flex-col',\n // Scrollbars will now appear at the very edge of this div (the modal edge)\n isScrollable === true && 'overflow-auto',\n isScrollable === 'y' && 'overflow-y-auto overflow-x-hidden',\n isScrollable === 'x' && 'overflow-x-auto overflow-y-hidden',\n !isScrollable && 'overflow-visible'\n )}\n >\n {/* CONTENT PADDING WRAPPER */}\n {/* We apply the padding class here, effectively putting content inside the scroll area */}\n <div\n className={cn(\n 'flex size-full flex-1 flex-col',\n contentPaddingClass\n )}\n >\n {children}\n </div>\n </div>\n </MotionModal>\n </m.div>,\n containerElement\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8CA,MAAM,gBAAgB,IACpB,0DACA;CACE,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,OAAO;
|
|
1
|
+
{"version":3,"file":"Modal.mjs","names":["m"],"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["'use client';\n\nimport { useGetElementOrWindow, useScrollBlockage } from '@hooks/index';\nimport { cn } from '@utils/cn';\nimport { cva } from 'class-variance-authority';\nimport { motion as m } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { type FC, type ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button } from '../Button';\nimport { Container, type ContainerProps } from '../Container';\nimport { H3 } from '../Headers';\n\n/**\n * Enumeration of available modal sizes\n */\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'unset';\n\ntype ModalProps = {\n children: ReactNode;\n isOpen: boolean;\n onClose?: () => void;\n container?: HTMLElement;\n disableScroll?: boolean;\n hasCloseButton?: boolean;\n title?: ReactNode;\n size?: ModalSize | `${ModalSize}`;\n /**\n * Defines if the modal content area is scrollable.\n */\n isScrollable?: boolean | 'x' | 'y';\n} & Partial<\n Pick<\n ContainerProps,\n | 'className'\n | 'transparency'\n | 'border'\n | 'background'\n | 'roundedSize'\n | 'borderColor'\n | 'padding'\n | 'separator'\n | 'gap'\n >\n>;\n\nconst modalVariants = cva(\n 'flex cursor-default flex-col overflow-hidden shadow-sm',\n {\n variants: {\n size: {\n sm: 'h-auto max-h-[30vh] w-[95vw] max-w-xl',\n md: 'h-auto max-h-[50vh] w-[95vw] max-w-xl',\n lg: 'h-auto max-h-[70vh] w-[95vw] max-w-4xl',\n xl: 'h-auto max-h-[95vh] w-[95vw] max-w-6xl',\n unset: 'h-auto max-h-[95vh] w-[95vw]',\n },\n },\n defaultVariants: {\n size: 'unset',\n },\n }\n);\n\n// Mapped from Container/index.tsx to apply internally\nconst contentPaddingVariants = {\n none: 'p-0',\n sm: 'px-2 py-4',\n md: 'px-4 py-6',\n lg: 'px-6 py-8',\n xl: 'px-8 py-10',\n '2xl': 'px-10 py-12',\n};\n\nconst MotionModal = m.create(Container);\n\n/**\n * Modal Component\n *\n * A highly customizable modal dialog component with portal rendering, Framer Motion animations,\n * and comprehensive accessibility features. Supports multiple size variants and scroll management.\n *\n * Features:\n * - Portal rendering to any container element (defaults to document.body)\n * - Smooth animations with Framer Motion\n * - Size variants: SM, MD, LG, XL, UNSET with responsive sizing\n * - Optional title and close button\n * - Background scroll prevention\n * - Click-outside-to-close functionality\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support (ESC to close)\n * - Extensible styling with Container props\n *\n * @example\n * Basic usage:\n * ```jsx\n * <Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <p>Modal content goes here</p>\n * </Modal>\n * ```\n *\n * @example\n * With title and close button:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * title=\"Confirm Action\"\n * hasCloseButton\n * size=\"lg\"\n * >\n * <div>\n * <p>Are you sure you want to continue?</p>\n * <Button onClick={onConfirm}>Confirm</Button>\n * </div>\n * </Modal>\n * ```\n *\n * @example\n * Custom container and styling:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * container={customContainer}\n * background=\"card\"\n * padding=\"lg\"\n * border=\"default\"\n * >\n * Content with custom styling\n * </Modal>\n * ```\n *\n * Accessibility Notes:\n * - Modal receives focus when opened\n * - Background content is hidden from screen readers when modal is open\n * - ESC key closes modal (handled by browser for role=\"dialog\")\n * - Click outside modal closes it\n * - Close button has descriptive label for screen readers\n *\n * @param props - Modal component props\n * @returns JSX element rendered via createPortal\n */\nexport const Modal: FC<ModalProps> = ({\n children,\n isOpen,\n container,\n onClose,\n hasCloseButton = false,\n title,\n size = 'md',\n className,\n isScrollable = false, // Enable the scroll of the content\n disableScroll = true, // Disable the scroll of the background\n padding = 'none', // Extract padding here\n ...props\n}) => {\n const containerElement = useGetElementOrWindow(container);\n\n useScrollBlockage({ key: 'modal', disableScroll: isOpen && disableScroll });\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen && onClose) {\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!containerElement) return <></>;\n\n const hasTitle = Boolean(title);\n\n // Determine the class for the inner content based on the padding prop\n const contentPaddingClass =\n contentPaddingVariants[\n (padding as keyof typeof contentPaddingVariants) || 'none'\n ];\n\n return createPortal(\n <m.div\n className=\"invisible fixed top-0 left-0 z-50 flex size-full cursor-pointer items-center justify-center overflow-hidden bg-background/40 backdrop-blur\"\n animate={isOpen ? 'visible' : 'invisible'}\n variants={{\n visible: {\n opacity: 1,\n visibility: 'visible',\n transition: { duration: 0.1, when: 'beforeChildren' },\n },\n invisible: {\n opacity: 0,\n visibility: 'hidden',\n transition: { duration: 0.1, when: 'afterChildren' },\n },\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n aria-hidden={!isOpen}\n >\n <MotionModal\n onClick={(e) => e.stopPropagation()}\n initial={{ scale: isOpen ? 0.5 : 1 }}\n animate={{ scale: isOpen ? 1 : 0.5 }}\n transition={{ duration: 0.3 }}\n className={modalVariants({ size, className })}\n role=\"dialog\"\n aria-modal\n roundedSize=\"4xl\"\n // Force the outer container to have no padding so scrollbars hit the edge\n padding=\"none\"\n {...props}\n >\n {/* HEADER SECTION */}\n <div\n className={cn(\n 'relative flex-none px-4 pt-4',\n hasCloseButton && hasTitle\n ? `flex items-start`\n : hasCloseButton\n ? `flex justify-end`\n : hasTitle\n ? `items-center`\n : `hidden`\n )}\n >\n {hasTitle && (\n <H3 className=\"mb-2 ml-1 flex items-center justify-center font-bold text-lg\">\n {title}\n </H3>\n )}\n {hasCloseButton && (\n <Button\n variant=\"hoverable\"\n color=\"text\"\n label=\"Close modal\"\n className=\"ml-auto\"\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n Icon={X}\n size=\"icon-md\"\n />\n )}\n </div>\n\n {/* SCROLLABLE WRAPPER - Full width, no padding */}\n <div\n className={cn(\n 'flex min-h-0 w-full flex-1 flex-col',\n // Scrollbars will now appear at the very edge of this div (the modal edge)\n isScrollable === true && 'overflow-auto',\n isScrollable === 'y' && 'overflow-y-auto overflow-x-hidden',\n isScrollable === 'x' && 'overflow-x-auto overflow-y-hidden',\n !isScrollable && 'overflow-visible'\n )}\n >\n {/* CONTENT PADDING WRAPPER */}\n {/* We apply the padding class here, effectively putting content inside the scroll area */}\n <div\n className={cn(\n 'flex size-full flex-1 flex-col',\n contentPaddingClass\n )}\n >\n {children}\n </div>\n </div>\n </MotionModal>\n </m.div>,\n containerElement\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8CA,MAAM,gBAAgB,IACpB,0DACA;CACE,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,OAAO;CACT,EACF;CACA,iBAAiB,EACf,MAAM,QACR;AACF,CACF;AAGA,MAAM,yBAAyB;CAC7B,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;AACT;AAEA,MAAM,cAAcA,OAAE,OAAO,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEtC,MAAa,SAAyB,EACpC,UACA,QACA,WACA,SACA,iBAAiB,OACjB,OACA,OAAO,MACP,WACA,eAAe,OACf,gBAAgB,MAChB,UAAU,QACV,GAAG,YACC;CACJ,MAAM,mBAAmB,sBAAsB,SAAS;CAExD,kBAAkB;EAAE,KAAK;EAAS,eAAe,UAAU;CAAc,CAAC;CAE1E,gBAAgB;EACd,MAAM,gBAAgB,UAAyB;GAC7C,IAAI,MAAM,QAAQ,YAAY,UAAU,SACtC,QAAQ;EAEZ;EACA,SAAS,iBAAiB,WAAW,YAAY;EACjD,aAAa;GACX,SAAS,oBAAoB,WAAW,YAAY;EACtD;CACF,GAAG,CAAC,QAAQ,OAAO,CAAC;CAEpB,IAAI,CAAC,kBAAkB,OAAO,iCAAI;CAElC,MAAM,WAAW,QAAQ,KAAK;CAG9B,MAAM,sBACJ,uBACG,WAAmD;CAGxD,OAAO,aACL,oBAACA,OAAE,KAAH;EACE,WAAU;EACV,SAAS,SAAS,YAAY;EAC9B,UAAU;GACR,SAAS;IACP,SAAS;IACT,YAAY;IACZ,YAAY;KAAE,UAAU;KAAK,MAAM;IAAiB;GACtD;GACA,WAAW;IACT,SAAS;IACT,YAAY;IACZ,YAAY;KAAE,UAAU;KAAK,MAAM;IAAgB;GACrD;EACF;EACA,UAAU,MAAM;GACd,EAAE,gBAAgB;GAClB,UAAU;EACZ;EACA,eAAa,CAAC;YAEd,qBAAC,aAAD;GACE,UAAU,MAAM,EAAE,gBAAgB;GAClC,SAAS,EAAE,OAAO,SAAS,KAAM,EAAE;GACnC,SAAS,EAAE,OAAO,SAAS,IAAI,GAAI;GACnC,YAAY,EAAE,UAAU,GAAI;GAC5B,WAAW,cAAc;IAAE;IAAM;GAAU,CAAC;GAC5C,MAAK;GACL;GACA,aAAY;GAEZ,SAAQ;GACR,GAAI;aAXN,CAcE,qBAAC,OAAD;IACE,WAAW,GACT,gCACA,kBAAkB,WACd,qBACA,iBACE,qBACA,WACE,iBACA,QACV;cAVF,CAYG,YACC,oBAAC,IAAD;KAAI,WAAU;eACX;IACC,IAEL,kBACC,oBAAC,QAAD;KACE,SAAQ;KACR,OAAM;KACN,OAAM;KACN,WAAU;KACV,UAAU,MAAM;MACd,EAAE,gBAAgB;MAClB,UAAU;KACZ;KACA,MAAM;KACN,MAAK;IACN,EAEA;OAGL,oBAAC,OAAD;IACE,WAAW,GACT,uCAEA,iBAAiB,QAAQ,iBACzB,iBAAiB,OAAO,qCACxB,iBAAiB,OAAO,qCACxB,CAAC,gBAAgB,kBACnB;cAIA,oBAAC,OAAD;KACE,WAAW,GACT,kCACA,mBACF;KAEC;IACE;GACF,EACM;;CACR,IACP,gBACF;AACF"}
|