@intlayer/design-system 8.1.1 → 8.1.3-canary.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/_virtual/_rolldown/runtime.mjs +1 -18
- package/dist/esm/components/Accordion/Accordion.mjs +1 -99
- package/dist/esm/components/Accordion/Accordion.mjs.map +1 -1
- package/dist/esm/components/Accordion/index.mjs +1 -3
- package/dist/esm/components/Avatar/index.mjs +1 -126
- package/dist/esm/components/Avatar/index.mjs.map +1 -1
- package/dist/esm/components/Badge/index.mjs +1 -150
- package/dist/esm/components/Badge/index.mjs.map +1 -1
- package/dist/esm/components/Breadcrumb/breadcrumb.content.mjs +1 -32
- package/dist/esm/components/Breadcrumb/breadcrumb.content.mjs.map +1 -1
- package/dist/esm/components/Breadcrumb/index.mjs +1 -232
- package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
- package/dist/esm/components/Browser/Browser.content.mjs +1 -179
- package/dist/esm/components/Browser/Browser.content.mjs.map +1 -1
- package/dist/esm/components/Browser/Browser.mjs +1 -249
- package/dist/esm/components/Browser/Browser.mjs.map +1 -1
- package/dist/esm/components/Browser/index.mjs +1 -3
- package/dist/esm/components/Button/Button.mjs +1 -287
- package/dist/esm/components/Button/Button.mjs.map +1 -1
- package/dist/esm/components/Button/index.mjs +1 -3
- package/dist/esm/components/Carousel/index.content.mjs +1 -79
- package/dist/esm/components/Carousel/index.content.mjs.map +1 -1
- package/dist/esm/components/Carousel/index.mjs +4 -270
- package/dist/esm/components/Carousel/index.mjs.map +1 -1
- package/dist/esm/components/ClickOutsideDiv/index.mjs +1 -42
- package/dist/esm/components/ClickOutsideDiv/index.mjs.map +1 -1
- package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs +1 -246
- package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
- package/dist/esm/components/CollapsibleTable/index.mjs +1 -3
- package/dist/esm/components/Command/index.mjs +1 -88
- package/dist/esm/components/Command/index.mjs.map +1 -1
- package/dist/esm/components/Container/index.mjs +1 -203
- package/dist/esm/components/Container/index.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/ContentEditor.mjs +1 -107
- package/dist/esm/components/ContentEditor/ContentEditor.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/ContentEditorInput.mjs +1 -110
- package/dist/esm/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -113
- package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
- package/dist/esm/components/ContentEditor/index.mjs +1 -5
- package/dist/esm/components/ContentSelector/ContentSelector.mjs +1 -81
- package/dist/esm/components/ContentSelector/ContentSelector.mjs.map +1 -1
- package/dist/esm/components/ContentSelector/index.mjs +1 -3
- package/dist/esm/components/CopyButton/CopyButton.content.mjs +1 -32
- package/dist/esm/components/CopyButton/CopyButton.content.mjs.map +1 -1
- package/dist/esm/components/CopyButton/index.mjs +1 -121
- package/dist/esm/components/CopyButton/index.mjs.map +1 -1
- package/dist/esm/components/CopyToClipboard/index.mjs +1 -101
- package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs +1 -31
- package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/ItemLayout.mjs +1 -36
- package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs +1 -35
- package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs +1 -32
- package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs +1 -32
- package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs +1 -36
- package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/HtmlWrapper.mjs +1 -21
- package/dist/esm/components/DictionaryEditor/NodeWrapper/HtmlWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs +1 -21
- package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs +1 -21
- package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs +1 -39
- package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs +1 -35
- package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs +1 -22
- package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs +1 -88
- package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
- package/dist/esm/components/DictionaryEditor/index.mjs +1 -3
- package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs +1 -61
- package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +1 -661
- package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -64
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs +1 -268
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.mjs +1 -98
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs +1 -14
- package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +1 -328
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs +1 -575
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.mjs +1 -338
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs +1 -29
- package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +1 -112
- package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs +1 -98
- package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs +1 -28
- package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs +1 -22
- package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +1 -172
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.mjs +1 -268
- package/dist/esm/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs +1 -84
- package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +1 -153
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/saveForm.content.mjs +1 -350
- package/dist/esm/components/DictionaryFieldEditor/SaveForm/saveForm.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs +1 -19
- package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +1 -199
- package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/StructureView/structureView.content.mjs +1 -100
- package/dist/esm/components/DictionaryFieldEditor/StructureView/structureView.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs +1 -73
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs +1 -27
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/index.mjs +1 -4
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.mjs +1 -78
- package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/dictionaryFieldEditor.content.mjs +1 -58
- package/dist/esm/components/DictionaryFieldEditor/dictionaryFieldEditor.content.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/getIsEditableSection.mjs +1 -14
- package/dist/esm/components/DictionaryFieldEditor/getIsEditableSection.mjs.map +1 -1
- package/dist/esm/components/DictionaryFieldEditor/index.mjs +1 -10
- package/dist/esm/components/DictionaryFieldEditor/nodeTypeSelector.content.mjs +1 -318
- package/dist/esm/components/DictionaryFieldEditor/nodeTypeSelector.content.mjs.map +1 -1
- package/dist/esm/components/DropDown/index.mjs +1 -177
- package/dist/esm/components/DropDown/index.mjs.map +1 -1
- package/dist/esm/components/EditableField/EditableFieldInput.mjs +1 -68
- package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
- package/dist/esm/components/EditableField/EditableFieldLayout.mjs +1 -103
- package/dist/esm/components/EditableField/EditableFieldLayout.mjs.map +1 -1
- package/dist/esm/components/EditableField/EditableFieldTextArea.mjs +1 -77
- package/dist/esm/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
- package/dist/esm/components/EditableField/index.mjs +1 -4
- package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs +1 -96
- package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
- package/dist/esm/components/ExpandCollapse/expandCollapse.content.mjs +1 -58
- package/dist/esm/components/ExpandCollapse/expandCollapse.content.mjs.map +1 -1
- package/dist/esm/components/ExpandCollapse/index.mjs +1 -3
- package/dist/esm/components/Flags/Flag.mjs +1 -326
- package/dist/esm/components/Flags/Flag.mjs.map +1 -1
- package/dist/esm/components/Flags/ae.mjs +1 -36
- package/dist/esm/components/Flags/ae.mjs.map +1 -1
- package/dist/esm/components/Flags/af.mjs +1 -96
- package/dist/esm/components/Flags/af.mjs.map +1 -1
- package/dist/esm/components/Flags/al.mjs +1 -37
- package/dist/esm/components/Flags/al.mjs.map +1 -1
- package/dist/esm/components/Flags/am.mjs +1 -33
- package/dist/esm/components/Flags/am.mjs.map +1 -1
- package/dist/esm/components/Flags/ar.mjs +1 -160
- package/dist/esm/components/Flags/ar.mjs.map +1 -1
- package/dist/esm/components/Flags/at.mjs +1 -30
- package/dist/esm/components/Flags/at.mjs.map +1 -1
- package/dist/esm/components/Flags/au.mjs +1 -42
- package/dist/esm/components/Flags/au.mjs.map +1 -1
- package/dist/esm/components/Flags/az.mjs +1 -46
- package/dist/esm/components/Flags/az.mjs.map +1 -1
- package/dist/esm/components/Flags/ba.mjs +1 -40
- package/dist/esm/components/Flags/ba.mjs.map +1 -1
- package/dist/esm/components/Flags/bd.mjs +1 -32
- package/dist/esm/components/Flags/bd.mjs.map +1 -1
- package/dist/esm/components/Flags/be.mjs +1 -36
- package/dist/esm/components/Flags/be.mjs.map +1 -1
- package/dist/esm/components/Flags/bg.mjs +1 -33
- package/dist/esm/components/Flags/bg.mjs.map +1 -1
- package/dist/esm/components/Flags/bh.mjs +1 -30
- package/dist/esm/components/Flags/bh.mjs.map +1 -1
- package/dist/esm/components/Flags/bn.mjs +1 -42
- package/dist/esm/components/Flags/bn.mjs.map +1 -1
- package/dist/esm/components/Flags/bo.mjs +1 -3030
- package/dist/esm/components/Flags/bo.mjs.map +1 -1
- package/dist/esm/components/Flags/br.mjs +1 -106
- package/dist/esm/components/Flags/br.mjs.map +1 -1
- package/dist/esm/components/Flags/bw.mjs +1 -33
- package/dist/esm/components/Flags/bw.mjs.map +1 -1
- package/dist/esm/components/Flags/by.mjs +1 -45
- package/dist/esm/components/Flags/by.mjs.map +1 -1
- package/dist/esm/components/Flags/bz.mjs +1 -338
- package/dist/esm/components/Flags/bz.mjs.map +1 -1
- package/dist/esm/components/Flags/ca.mjs +1 -30
- package/dist/esm/components/Flags/ca.mjs.map +1 -1
- package/dist/esm/components/Flags/ch.mjs +1 -30
- package/dist/esm/components/Flags/ch.mjs.map +1 -1
- package/dist/esm/components/Flags/cl.mjs +1 -43
- package/dist/esm/components/Flags/cl.mjs.map +1 -1
- package/dist/esm/components/Flags/cn.mjs +1 -57
- package/dist/esm/components/Flags/cn.mjs.map +1 -1
- package/dist/esm/components/Flags/co.mjs +1 -36
- package/dist/esm/components/Flags/co.mjs.map +1 -1
- package/dist/esm/components/Flags/cr.mjs +1 -36
- package/dist/esm/components/Flags/cr.mjs.map +1 -1
- package/dist/esm/components/Flags/cu.mjs +1 -43
- package/dist/esm/components/Flags/cu.mjs.map +1 -1
- package/dist/esm/components/Flags/cv.mjs +1 -43
- package/dist/esm/components/Flags/cv.mjs.map +1 -1
- package/dist/esm/components/Flags/cz.mjs +1 -33
- package/dist/esm/components/Flags/cz.mjs.map +1 -1
- package/dist/esm/components/Flags/de.mjs +1 -33
- package/dist/esm/components/Flags/de.mjs.map +1 -1
- package/dist/esm/components/Flags/dj.mjs +1 -43
- package/dist/esm/components/Flags/dj.mjs.map +1 -1
- package/dist/esm/components/Flags/dk.mjs +1 -33
- package/dist/esm/components/Flags/dk.mjs.map +1 -1
- package/dist/esm/components/Flags/do.mjs +1 -211
- package/dist/esm/components/Flags/do.mjs.map +1 -1
- package/dist/esm/components/Flags/dz.mjs +1 -33
- package/dist/esm/components/Flags/dz.mjs.map +1 -1
- package/dist/esm/components/Flags/ec.mjs +1 -622
- package/dist/esm/components/Flags/ec.mjs.map +1 -1
- package/dist/esm/components/Flags/ee.mjs +1 -33
- package/dist/esm/components/Flags/ee.mjs.map +1 -1
- package/dist/esm/components/Flags/eg.mjs +1 -112
- package/dist/esm/components/Flags/eg.mjs.map +1 -1
- package/dist/esm/components/Flags/es-ct.mjs +1 -32
- package/dist/esm/components/Flags/es-ct.mjs.map +1 -1
- package/dist/esm/components/Flags/es-ga.mjs +1 -792
- package/dist/esm/components/Flags/es-ga.mjs.map +1 -1
- package/dist/esm/components/Flags/es-pv.mjs +1 -33
- package/dist/esm/components/Flags/es-pv.mjs.map +1 -1
- package/dist/esm/components/Flags/es.mjs +1 -2226
- package/dist/esm/components/Flags/es.mjs.map +1 -1
- package/dist/esm/components/Flags/et.mjs +1 -50
- package/dist/esm/components/Flags/et.mjs.map +1 -1
- package/dist/esm/components/Flags/fi.mjs +1 -33
- package/dist/esm/components/Flags/fi.mjs.map +1 -1
- package/dist/esm/components/Flags/flags.mjs +1 -1363
- package/dist/esm/components/Flags/flags.mjs.map +1 -1
- package/dist/esm/components/Flags/fo.mjs +1 -41
- package/dist/esm/components/Flags/fo.mjs.map +1 -1
- package/dist/esm/components/Flags/fr.mjs +1 -33
- package/dist/esm/components/Flags/fr.mjs.map +1 -1
- package/dist/esm/components/Flags/gb-wls.mjs +1 -43
- package/dist/esm/components/Flags/gb-wls.mjs.map +1 -1
- package/dist/esm/components/Flags/gb.mjs +1 -39
- package/dist/esm/components/Flags/gb.mjs.map +1 -1
- package/dist/esm/components/Flags/ge.mjs +1 -37
- package/dist/esm/components/Flags/ge.mjs.map +1 -1
- package/dist/esm/components/Flags/gh.mjs +1 -36
- package/dist/esm/components/Flags/gh.mjs.map +1 -1
- package/dist/esm/components/Flags/gr.mjs +1 -66
- package/dist/esm/components/Flags/gr.mjs.map +1 -1
- package/dist/esm/components/Flags/gt.mjs +1 -461
- package/dist/esm/components/Flags/gt.mjs.map +1 -1
- package/dist/esm/components/Flags/gw.mjs +1 -67
- package/dist/esm/components/Flags/gw.mjs.map +1 -1
- package/dist/esm/components/Flags/hk.mjs +1 -44
- package/dist/esm/components/Flags/hk.mjs.map +1 -1
- package/dist/esm/components/Flags/hn.mjs +1 -83
- package/dist/esm/components/Flags/hn.mjs.map +1 -1
- package/dist/esm/components/Flags/hr.mjs +1 -94
- package/dist/esm/components/Flags/hr.mjs.map +1 -1
- package/dist/esm/components/Flags/hu.mjs +1 -33
- package/dist/esm/components/Flags/hu.mjs.map +1 -1
- package/dist/esm/components/Flags/id.mjs +1 -30
- package/dist/esm/components/Flags/id.mjs.map +1 -1
- package/dist/esm/components/Flags/ie.mjs +1 -36
- package/dist/esm/components/Flags/ie.mjs.map +1 -1
- package/dist/esm/components/Flags/il.mjs +1 -46
- package/dist/esm/components/Flags/il.mjs.map +1 -1
- package/dist/esm/components/Flags/in.mjs +1 -74
- package/dist/esm/components/Flags/in.mjs.map +1 -1
- package/dist/esm/components/Flags/index.mjs +1 -4
- package/dist/esm/components/Flags/iq.mjs +1 -40
- package/dist/esm/components/Flags/iq.mjs.map +1 -1
- package/dist/esm/components/Flags/ir.mjs +1 -112
- package/dist/esm/components/Flags/ir.mjs.map +1 -1
- package/dist/esm/components/Flags/is.mjs +1 -40
- package/dist/esm/components/Flags/is.mjs.map +1 -1
- package/dist/esm/components/Flags/it.mjs +1 -36
- package/dist/esm/components/Flags/it.mjs.map +1 -1
- package/dist/esm/components/Flags/jm.mjs +1 -36
- package/dist/esm/components/Flags/jm.mjs.map +1 -1
- package/dist/esm/components/Flags/jo.mjs +1 -48
- package/dist/esm/components/Flags/jo.mjs.map +1 -1
- package/dist/esm/components/Flags/jp.mjs +1 -41
- package/dist/esm/components/Flags/jp.mjs.map +1 -1
- package/dist/esm/components/Flags/ke.mjs +1 -91
- package/dist/esm/components/Flags/ke.mjs.map +1 -1
- package/dist/esm/components/Flags/kg.mjs +1 -49
- package/dist/esm/components/Flags/kg.mjs.map +1 -1
- package/dist/esm/components/Flags/kh.mjs +1 -76
- package/dist/esm/components/Flags/kh.mjs.map +1 -1
- package/dist/esm/components/Flags/km.mjs +1 -52
- package/dist/esm/components/Flags/km.mjs.map +1 -1
- package/dist/esm/components/Flags/kr.mjs +1 -64
- package/dist/esm/components/Flags/kr.mjs.map +1 -1
- package/dist/esm/components/Flags/kw.mjs +1 -44
- package/dist/esm/components/Flags/kw.mjs.map +1 -1
- package/dist/esm/components/Flags/kz.mjs +1 -94
- package/dist/esm/components/Flags/kz.mjs.map +1 -1
- package/dist/esm/components/Flags/la.mjs +1 -39
- package/dist/esm/components/Flags/la.mjs.map +1 -1
- package/dist/esm/components/Flags/lb.mjs +1 -50
- package/dist/esm/components/Flags/lb.mjs.map +1 -1
- package/dist/esm/components/Flags/li.mjs +1 -136
- package/dist/esm/components/Flags/li.mjs.map +1 -1
- package/dist/esm/components/Flags/lk.mjs +1 -73
- package/dist/esm/components/Flags/lk.mjs.map +1 -1
- package/dist/esm/components/Flags/lt.mjs +1 -46
- package/dist/esm/components/Flags/lt.mjs.map +1 -1
- package/dist/esm/components/Flags/lu.mjs +1 -33
- package/dist/esm/components/Flags/lu.mjs.map +1 -1
- package/dist/esm/components/Flags/lv.mjs +1 -30
- package/dist/esm/components/Flags/lv.mjs.map +1 -1
- package/dist/esm/components/Flags/ly.mjs +1 -39
- package/dist/esm/components/Flags/ly.mjs.map +1 -1
- package/dist/esm/components/Flags/ma.mjs +1 -32
- package/dist/esm/components/Flags/ma.mjs.map +1 -1
- package/dist/esm/components/Flags/mc.mjs +1 -33
- package/dist/esm/components/Flags/mc.mjs.map +1 -1
- package/dist/esm/components/Flags/md.mjs +1 -317
- package/dist/esm/components/Flags/md.mjs.map +1 -1
- package/dist/esm/components/Flags/mk.mjs +1 -37
- package/dist/esm/components/Flags/mk.mjs.map +1 -1
- package/dist/esm/components/Flags/mm.mjs +1 -58
- package/dist/esm/components/Flags/mm.mjs.map +1 -1
- package/dist/esm/components/Flags/mn.mjs +1 -59
- package/dist/esm/components/Flags/mn.mjs.map +1 -1
- package/dist/esm/components/Flags/mo.mjs +1 -42
- package/dist/esm/components/Flags/mo.mjs.map +1 -1
- package/dist/esm/components/Flags/mr.mjs +1 -37
- package/dist/esm/components/Flags/mr.mjs.map +1 -1
- package/dist/esm/components/Flags/mt.mjs +1 -153
- package/dist/esm/components/Flags/mt.mjs.map +1 -1
- package/dist/esm/components/Flags/mv.mjs +1 -40
- package/dist/esm/components/Flags/mv.mjs.map +1 -1
- package/dist/esm/components/Flags/mx.mjs +1 -1365
- package/dist/esm/components/Flags/mx.mjs.map +1 -1
- package/dist/esm/components/Flags/my.mjs +1 -78
- package/dist/esm/components/Flags/my.mjs.map +1 -1
- package/dist/esm/components/Flags/mz.mjs +1 -92
- package/dist/esm/components/Flags/mz.mjs.map +1 -1
- package/dist/esm/components/Flags/ng.mjs +1 -33
- package/dist/esm/components/Flags/ng.mjs.map +1 -1
- package/dist/esm/components/Flags/ni.mjs +1 -451
- package/dist/esm/components/Flags/ni.mjs.map +1 -1
- package/dist/esm/components/Flags/nl.mjs +1 -33
- package/dist/esm/components/Flags/nl.mjs.map +1 -1
- package/dist/esm/components/Flags/no.mjs +1 -39
- package/dist/esm/components/Flags/no.mjs.map +1 -1
- package/dist/esm/components/Flags/np.mjs +1 -38
- package/dist/esm/components/Flags/np.mjs.map +1 -1
- package/dist/esm/components/Flags/nz.mjs +1 -104
- package/dist/esm/components/Flags/nz.mjs.map +1 -1
- package/dist/esm/components/Flags/om.mjs +1 -539
- package/dist/esm/components/Flags/om.mjs.map +1 -1
- package/dist/esm/components/Flags/pa.mjs +1 -46
- package/dist/esm/components/Flags/pa.mjs.map +1 -1
- package/dist/esm/components/Flags/pe.mjs +1 -30
- package/dist/esm/components/Flags/pe.mjs.map +1 -1
- package/dist/esm/components/Flags/ph.mjs +1 -36
- package/dist/esm/components/Flags/ph.mjs.map +1 -1
- package/dist/esm/components/Flags/pk.mjs +1 -38
- package/dist/esm/components/Flags/pk.mjs.map +1 -1
- package/dist/esm/components/Flags/pl.mjs +1 -30
- package/dist/esm/components/Flags/pl.mjs.map +1 -1
- package/dist/esm/components/Flags/pr.mjs +1 -43
- package/dist/esm/components/Flags/pr.mjs.map +1 -1
- package/dist/esm/components/Flags/ps.mjs +1 -45
- package/dist/esm/components/Flags/ps.mjs.map +1 -1
- package/dist/esm/components/Flags/pt.mjs +1 -152
- package/dist/esm/components/Flags/pt.mjs.map +1 -1
- package/dist/esm/components/Flags/py.mjs +1 -61
- package/dist/esm/components/Flags/py.mjs.map +1 -1
- package/dist/esm/components/Flags/qa.mjs +1 -30
- package/dist/esm/components/Flags/qa.mjs.map +1 -1
- package/dist/esm/components/Flags/ro.mjs +1 -36
- package/dist/esm/components/Flags/ro.mjs.map +1 -1
- package/dist/esm/components/Flags/rs.mjs +1 -820
- package/dist/esm/components/Flags/rs.mjs.map +1 -1
- package/dist/esm/components/Flags/ru.mjs +1 -33
- package/dist/esm/components/Flags/ru.mjs.map +1 -1
- package/dist/esm/components/Flags/sa.mjs +1 -79
- package/dist/esm/components/Flags/sa.mjs.map +1 -1
- package/dist/esm/components/Flags/sd.mjs +1 -44
- package/dist/esm/components/Flags/sd.mjs.map +1 -1
- package/dist/esm/components/Flags/se.mjs +1 -30
- package/dist/esm/components/Flags/se.mjs.map +1 -1
- package/dist/esm/components/Flags/sg.mjs +1 -42
- package/dist/esm/components/Flags/sg.mjs.map +1 -1
- package/dist/esm/components/Flags/si.mjs +1 -59
- package/dist/esm/components/Flags/si.mjs.map +1 -1
- package/dist/esm/components/Flags/sk.mjs +1 -45
- package/dist/esm/components/Flags/sk.mjs.map +1 -1
- package/dist/esm/components/Flags/so.mjs +1 -37
- package/dist/esm/components/Flags/so.mjs.map +1 -1
- package/dist/esm/components/Flags/st.mjs +1 -73
- package/dist/esm/components/Flags/st.mjs.map +1 -1
- package/dist/esm/components/Flags/sv.mjs +1 -1735
- package/dist/esm/components/Flags/sv.mjs.map +1 -1
- package/dist/esm/components/Flags/sy.mjs +1 -36
- package/dist/esm/components/Flags/sy.mjs.map +1 -1
- package/dist/esm/components/Flags/td.mjs +1 -33
- package/dist/esm/components/Flags/td.mjs.map +1 -1
- package/dist/esm/components/Flags/th.mjs +1 -33
- package/dist/esm/components/Flags/th.mjs.map +1 -1
- package/dist/esm/components/Flags/tl.mjs +1 -43
- package/dist/esm/components/Flags/tl.mjs.map +1 -1
- package/dist/esm/components/Flags/tn.mjs +1 -30
- package/dist/esm/components/Flags/tn.mjs.map +1 -1
- package/dist/esm/components/Flags/tr.mjs +1 -36
- package/dist/esm/components/Flags/tr.mjs.map +1 -1
- package/dist/esm/components/Flags/tt.mjs +1 -35
- package/dist/esm/components/Flags/tt.mjs.map +1 -1
- package/dist/esm/components/Flags/tw.mjs +1 -40
- package/dist/esm/components/Flags/tw.mjs.map +1 -1
- package/dist/esm/components/Flags/tz.mjs +1 -44
- package/dist/esm/components/Flags/tz.mjs.map +1 -1
- package/dist/esm/components/Flags/ua.mjs +1 -33
- package/dist/esm/components/Flags/ua.mjs.map +1 -1
- package/dist/esm/components/Flags/ug.mjs +1 -145
- package/dist/esm/components/Flags/ug.mjs.map +1 -1
- package/dist/esm/components/Flags/us.mjs +1 -45
- package/dist/esm/components/Flags/us.mjs.map +1 -1
- package/dist/esm/components/Flags/uy.mjs +1 -63
- package/dist/esm/components/Flags/uy.mjs.map +1 -1
- package/dist/esm/components/Flags/uz.mjs +1 -109
- package/dist/esm/components/Flags/uz.mjs.map +1 -1
- package/dist/esm/components/Flags/ve.mjs +1 -84
- package/dist/esm/components/Flags/ve.mjs.map +1 -1
- package/dist/esm/components/Flags/vn.mjs +1 -37
- package/dist/esm/components/Flags/vn.mjs.map +1 -1
- package/dist/esm/components/Flags/xx.mjs +1 -35
- package/dist/esm/components/Flags/xx.mjs.map +1 -1
- package/dist/esm/components/Flags/ye.mjs +1 -36
- package/dist/esm/components/Flags/ye.mjs.map +1 -1
- package/dist/esm/components/Flags/za.mjs +1 -51
- package/dist/esm/components/Flags/za.mjs.map +1 -1
- package/dist/esm/components/Flags/zw.mjs +1 -70
- package/dist/esm/components/Flags/zw.mjs.map +1 -1
- package/dist/esm/components/Footer/index.mjs +1 -123
- package/dist/esm/components/Footer/index.mjs.map +1 -1
- package/dist/esm/components/Form/Form.mjs +1 -65
- package/dist/esm/components/Form/Form.mjs.map +1 -1
- package/dist/esm/components/Form/FormBase.mjs +1 -50
- package/dist/esm/components/Form/FormBase.mjs.map +1 -1
- package/dist/esm/components/Form/FormControl.mjs +1 -19
- package/dist/esm/components/Form/FormControl.mjs.map +1 -1
- package/dist/esm/components/Form/FormDescription.mjs +1 -17
- package/dist/esm/components/Form/FormDescription.mjs.map +1 -1
- package/dist/esm/components/Form/FormField.mjs +1 -34
- package/dist/esm/components/Form/FormField.mjs.map +1 -1
- package/dist/esm/components/Form/FormItem.mjs +1 -23
- package/dist/esm/components/Form/FormItem.mjs.map +1 -1
- package/dist/esm/components/Form/FormLabel.mjs +1 -19
- package/dist/esm/components/Form/FormLabel.mjs.map +1 -1
- package/dist/esm/components/Form/FormMessage.mjs +1 -21
- package/dist/esm/components/Form/FormMessage.mjs.map +1 -1
- package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs +1 -14
- package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/CheckboxElement.mjs +1 -25
- package/dist/esm/components/Form/elements/CheckboxElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/EditableFieldInputElement.mjs +1 -16
- package/dist/esm/components/Form/elements/EditableFieldInputElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/EditableFieldTextAreaElement.mjs +1 -16
- package/dist/esm/components/Form/elements/EditableFieldTextAreaElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/FormElement.mjs +1 -58
- package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/FormElementWrapper.mjs +1 -34
- package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
- package/dist/esm/components/Form/elements/InputElement.mjs +1 -16
- package/dist/esm/components/Form/elements/InputElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/InputPasswordElement.mjs +1 -19
- package/dist/esm/components/Form/elements/InputPasswordElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/MultiselectElement.mjs +1 -49
- package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/OTPElement.mjs +1 -108
- package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/SearchInputElement.mjs +1 -16
- package/dist/esm/components/Form/elements/SearchInputElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/SelectElement.mjs +1 -49
- package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs +1 -48
- package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/TextAreaElement.mjs +1 -16
- package/dist/esm/components/Form/elements/TextAreaElement.mjs.map +1 -1
- package/dist/esm/components/Form/elements/index.mjs +1 -10
- package/dist/esm/components/Form/index.mjs +1 -5
- package/dist/esm/components/Form/layout/FormItemLayout.mjs +1 -24
- package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
- package/dist/esm/components/Form/layout/FormLabelLayout.mjs +1 -20
- package/dist/esm/components/Form/layout/FormLabelLayout.mjs.map +1 -1
- package/dist/esm/components/Form/layout/RequiredStar.mjs +1 -10
- package/dist/esm/components/Form/layout/RequiredStar.mjs.map +1 -1
- package/dist/esm/components/Form/layout/index.mjs +1 -4
- package/dist/esm/components/HTMLRender/HTMLRender.mjs +1 -65
- package/dist/esm/components/HTMLRender/HTMLRender.mjs.map +1 -1
- package/dist/esm/components/HTMLRender/index.mjs +1 -3
- package/dist/esm/components/Headers/index.mjs +1 -216
- package/dist/esm/components/Headers/index.mjs.map +1 -1
- package/dist/esm/components/HeightResizer/index.mjs +1 -163
- package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
- package/dist/esm/components/HideShow/index.mjs +1 -70
- package/dist/esm/components/HideShow/index.mjs.map +1 -1
- package/dist/esm/components/IDE/Code.mjs +2 -59
- package/dist/esm/components/IDE/Code.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockClient.mjs +2 -31
- package/dist/esm/components/IDE/CodeBlockClient.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockServer.mjs +2 -45
- package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeBlockShiki.mjs +1 -109
- package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeConditionalRenderer.mjs +1 -20
- package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeContext.mjs +1 -44
- package/dist/esm/components/IDE/CodeContext.mjs.map +1 -1
- package/dist/esm/components/IDE/CodeFormatSelector.mjs +1 -40
- package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
- package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs +1 -41
- package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
- package/dist/esm/components/IDE/CopyCode.mjs +1 -27
- package/dist/esm/components/IDE/CopyCode.mjs.map +1 -1
- package/dist/esm/components/IDE/FileList.mjs +1 -34
- package/dist/esm/components/IDE/FileList.mjs.map +1 -1
- package/dist/esm/components/IDE/FileTree.mjs +1 -64
- package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
- package/dist/esm/components/IDE/IDE.mjs +1 -87
- package/dist/esm/components/IDE/IDE.mjs.map +1 -1
- package/dist/esm/components/IDE/MarkDownRender.mjs +1 -22
- package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/IDE/MonacoCode.mjs +2 -103
- package/dist/esm/components/IDE/MonacoCode.mjs.map +1 -1
- package/dist/esm/components/IDE/PackageManagerSelector.mjs +1 -42
- package/dist/esm/components/IDE/PackageManagerSelector.mjs.map +1 -1
- package/dist/esm/components/IDE/code.content.mjs +1 -58
- package/dist/esm/components/IDE/code.content.mjs.map +1 -1
- package/dist/esm/components/IDE/copyCode.content.mjs +1 -58
- package/dist/esm/components/IDE/copyCode.content.mjs.map +1 -1
- package/dist/esm/components/IDE/createFileTree.mjs +1 -31
- package/dist/esm/components/IDE/createFileTree.mjs.map +1 -1
- package/dist/esm/components/IDE/index.mjs +1 -6
- package/dist/esm/components/IDE/selectors.content.mjs +1 -144
- package/dist/esm/components/IDE/selectors.content.mjs.map +1 -1
- package/dist/esm/components/InformationTag/index.mjs +1 -80
- package/dist/esm/components/InformationTag/index.mjs.map +1 -1
- package/dist/esm/components/Input/Checkbox.mjs +1 -97
- package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
- package/dist/esm/components/Input/Input.mjs +1 -64
- package/dist/esm/components/Input/Input.mjs.map +1 -1
- package/dist/esm/components/Input/InputPassword.mjs +1 -38
- package/dist/esm/components/Input/InputPassword.mjs.map +1 -1
- package/dist/esm/components/Input/OTPInput.mjs +2 -474
- package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
- package/dist/esm/components/Input/SearchInput.mjs +1 -17
- package/dist/esm/components/Input/SearchInput.mjs.map +1 -1
- package/dist/esm/components/Input/index.mjs +1 -7
- package/dist/esm/components/KeyboardScreenAdapter/index.mjs +1 -119
- package/dist/esm/components/KeyboardScreenAdapter/index.mjs.map +1 -1
- package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs +1 -230
- package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
- package/dist/esm/components/KeyboardShortcut/index.mjs +1 -3
- package/dist/esm/components/Label/index.mjs +1 -53
- package/dist/esm/components/Label/index.mjs.map +1 -1
- package/dist/esm/components/LanguageBackground/index.mjs +1 -87
- package/dist/esm/components/LanguageBackground/index.mjs.map +1 -1
- package/dist/esm/components/Link/Link.mjs +1 -239
- package/dist/esm/components/Link/Link.mjs.map +1 -1
- package/dist/esm/components/Link/index.mjs +1 -3
- package/dist/esm/components/Loader/index.content.mjs +1 -32
- package/dist/esm/components/Loader/index.content.mjs.map +1 -1
- package/dist/esm/components/Loader/index.mjs +1 -111
- package/dist/esm/components/Loader/index.mjs.map +1 -1
- package/dist/esm/components/Loader/spinner.mjs +1 -121
- package/dist/esm/components/Loader/spinner.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +1 -183
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs +1 -29
- package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherContentDropDown/index.mjs +1 -4
- package/dist/esm/components/LocaleSwitcherContentDropDown/localeSwitcher.content.mjs +1 -182
- package/dist/esm/components/LocaleSwitcherContentDropDown/localeSwitcher.content.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs +1 -134
- package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
- package/dist/esm/components/LocaleSwitcherDropDown/index.mjs +1 -3
- package/dist/esm/components/LocaleSwitcherDropDown/localeSwitcher.content.mjs +1 -140
- package/dist/esm/components/LocaleSwitcherDropDown/localeSwitcher.content.mjs.map +1 -1
- package/dist/esm/components/Logo/Logo.mjs +1 -34
- package/dist/esm/components/Logo/Logo.mjs.map +1 -1
- package/dist/esm/components/Logo/LogoTextOnly.mjs +1 -28
- package/dist/esm/components/Logo/LogoTextOnly.mjs.map +1 -1
- package/dist/esm/components/Logo/LogoWithText.mjs +1 -34
- package/dist/esm/components/Logo/LogoWithText.mjs.map +1 -1
- package/dist/esm/components/Logo/LogoWithTextBelow.mjs +1 -34
- package/dist/esm/components/Logo/LogoWithTextBelow.mjs.map +1 -1
- package/dist/esm/components/Logo/index.mjs +1 -6
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -167
- package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
- package/dist/esm/components/MarkDownRender/index.mjs +1 -3
- package/dist/esm/components/MaxHeightSmoother/index.mjs +1 -163
- package/dist/esm/components/MaxHeightSmoother/index.mjs.map +1 -1
- package/dist/esm/components/MaxWidthSmoother/index.mjs +1 -18
- package/dist/esm/components/MaxWidthSmoother/index.mjs.map +1 -1
- package/dist/esm/components/Modal/Modal.mjs +1 -201
- package/dist/esm/components/Modal/Modal.mjs.map +1 -1
- package/dist/esm/components/Modal/index.mjs +1 -3
- package/dist/esm/components/Navbar/Burger.mjs +1 -76
- package/dist/esm/components/Navbar/Burger.mjs.map +1 -1
- package/dist/esm/components/Navbar/DesktopNavbar.mjs +1 -96
- package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
- package/dist/esm/components/Navbar/MobileNavbar.mjs +1 -169
- package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
- package/dist/esm/components/Navbar/index.mjs +1 -86
- package/dist/esm/components/Navbar/index.mjs.map +1 -1
- package/dist/esm/components/Navbar/useNavigation.mjs +1 -152
- package/dist/esm/components/Navbar/useNavigation.mjs.map +1 -1
- package/dist/esm/components/Pagination/NumberItemsSelector.mjs +1 -46
- package/dist/esm/components/Pagination/NumberItemsSelector.mjs.map +1 -1
- package/dist/esm/components/Pagination/Pagination.mjs +1 -173
- package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
- package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs +1 -27
- package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs.map +1 -1
- package/dist/esm/components/Pagination/index.mjs +1 -5
- package/dist/esm/components/Pagination/pagination.content.mjs +1 -114
- package/dist/esm/components/Pagination/pagination.content.mjs.map +1 -1
- package/dist/esm/components/Pattern/DotPattern.mjs +1 -121
- package/dist/esm/components/Pattern/DotPattern.mjs.map +1 -1
- package/dist/esm/components/Pattern/GridPattern.mjs +1 -156
- package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
- package/dist/esm/components/Pattern/SpotLight.mjs +1 -168
- package/dist/esm/components/Pattern/SpotLight.mjs.map +1 -1
- package/dist/esm/components/Pattern/index.mjs +1 -5
- package/dist/esm/components/Popover/dynamic.mjs +1 -128
- package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
- package/dist/esm/components/Popover/index.mjs +1 -4
- package/dist/esm/components/Popover/static.mjs +1 -192
- package/dist/esm/components/Popover/static.mjs.map +1 -1
- package/dist/esm/components/PressableSpan/PressableSpan.mjs +1 -158
- package/dist/esm/components/PressableSpan/PressableSpan.mjs.map +1 -1
- package/dist/esm/components/PressableSpan/index.mjs +1 -3
- package/dist/esm/components/RightDrawer/RightDrawer.mjs +1 -175
- package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/index.mjs +1 -4
- package/dist/esm/components/RightDrawer/isElementAtTopAndNotCovered.mjs +1 -60
- package/dist/esm/components/RightDrawer/isElementAtTopAndNotCovered.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/rightDrawer.content.mjs +1 -59
- package/dist/esm/components/RightDrawer/rightDrawer.content.mjs.map +1 -1
- package/dist/esm/components/RightDrawer/useRightDrawer.mjs +1 -64
- package/dist/esm/components/RightDrawer/useRightDrawer.mjs.map +1 -1
- package/dist/esm/components/Select/Multiselect.mjs +1 -353
- package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
- package/dist/esm/components/Select/Select.mjs +1 -276
- package/dist/esm/components/Select/Select.mjs.map +1 -1
- package/dist/esm/components/Select/index.mjs +1 -4
- package/dist/esm/components/SocialNetworks/DiscordLogo.mjs +1 -20
- package/dist/esm/components/SocialNetworks/DiscordLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/FacebookLogo.mjs +1 -17
- package/dist/esm/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/InstagramLogo.mjs +1 -29
- package/dist/esm/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/LinkedInLogo.mjs +1 -32
- package/dist/esm/components/SocialNetworks/LinkedInLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs +1 -15
- package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/TiktokLogo.mjs +1 -17
- package/dist/esm/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/XLogo.mjs +1 -17
- package/dist/esm/components/SocialNetworks/XLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs +1 -17
- package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
- package/dist/esm/components/SocialNetworks/index.mjs +1 -64
- package/dist/esm/components/SocialNetworks/index.mjs.map +1 -1
- package/dist/esm/components/SwitchSelector/index.mjs +1 -145
- package/dist/esm/components/SwitchSelector/index.mjs.map +1 -1
- package/dist/esm/components/Tab/Tab.mjs +1 -148
- package/dist/esm/components/Tab/Tab.mjs.map +1 -1
- package/dist/esm/components/Tab/TabContext.mjs +1 -33
- package/dist/esm/components/Tab/TabContext.mjs.map +1 -1
- package/dist/esm/components/Tab/index.mjs +1 -3
- package/dist/esm/components/TabSelector/TabSelector.mjs +1 -111
- package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
- package/dist/esm/components/TabSelector/index.mjs +1 -3
- package/dist/esm/components/Table/Table.mjs +1 -195
- package/dist/esm/components/Table/Table.mjs.map +1 -1
- package/dist/esm/components/Table/index.mjs +1 -3
- package/dist/esm/components/Table/table.content.mjs +1 -36
- package/dist/esm/components/Table/table.content.mjs.map +1 -1
- package/dist/esm/components/Tag/index.mjs +1 -316
- package/dist/esm/components/Tag/index.mjs.map +1 -1
- package/dist/esm/components/Terminal/Terminal.mjs +3 -160
- package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
- package/dist/esm/components/Terminal/index.mjs +1 -3
- package/dist/esm/components/Terminal/terminal.content.mjs +1 -60
- package/dist/esm/components/Terminal/terminal.content.mjs.map +1 -1
- package/dist/esm/components/TextArea/AutoSizeTextArea.mjs +1 -106
- package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
- package/dist/esm/components/TextArea/AutocompleteTextArea.mjs +1 -257
- package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
- package/dist/esm/components/TextArea/TextArea.mjs +1 -58
- package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
- package/dist/esm/components/TextArea/index.mjs +1 -5
- package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs +1 -79
- package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
- package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs +1 -53
- package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
- package/dist/esm/components/ThemeSwitcherDropDown/index.mjs +1 -5
- package/dist/esm/components/ThemeSwitcherDropDown/types.mjs +1 -10
- package/dist/esm/components/ThemeSwitcherDropDown/types.mjs.map +1 -1
- package/dist/esm/components/Toaster/Toast.mjs +1 -187
- package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
- package/dist/esm/components/Toaster/Toaster.mjs +1 -66
- package/dist/esm/components/Toaster/Toaster.mjs.map +1 -1
- package/dist/esm/components/Toaster/index.mjs +1 -5
- package/dist/esm/components/Toaster/useToast.mjs +1 -308
- package/dist/esm/components/Toaster/useToast.mjs.map +1 -1
- package/dist/esm/components/WithResizer/index.mjs +1 -200
- package/dist/esm/components/WithResizer/index.mjs.map +1 -1
- package/dist/esm/components/index.mjs +1 -105
- package/dist/esm/hooks/index.mjs +1 -22
- package/dist/esm/hooks/reactQuery.mjs +1 -912
- package/dist/esm/hooks/reactQuery.mjs.map +1 -1
- package/dist/esm/hooks/useAuth/index.mjs +1 -5
- package/dist/esm/hooks/useAuth/useAuth.mjs +1 -21
- package/dist/esm/hooks/useAuth/useAuth.mjs.map +1 -1
- package/dist/esm/hooks/useAuth/useOAuth2.mjs +1 -28
- package/dist/esm/hooks/useAuth/useOAuth2.mjs.map +1 -1
- package/dist/esm/hooks/useAuth/useSession.mjs +1 -42
- package/dist/esm/hooks/useAuth/useSession.mjs.map +1 -1
- package/dist/esm/hooks/useDevice.mjs +1 -71
- package/dist/esm/hooks/useDevice.mjs.map +1 -1
- package/dist/esm/hooks/useGetElementById.mjs +1 -15
- package/dist/esm/hooks/useGetElementById.mjs.map +1 -1
- package/dist/esm/hooks/useGetElementOrWindow.mjs +1 -15
- package/dist/esm/hooks/useGetElementOrWindow.mjs.map +1 -1
- package/dist/esm/hooks/useHorizontalSwipe.mjs +1 -123
- package/dist/esm/hooks/useHorizontalSwipe.mjs.map +1 -1
- package/dist/esm/hooks/useIntlayerAPI.mjs +1 -21
- package/dist/esm/hooks/useIntlayerAPI.mjs.map +1 -1
- package/dist/esm/hooks/useIsDarkMode.mjs +1 -15
- package/dist/esm/hooks/useIsDarkMode.mjs.map +1 -1
- package/dist/esm/hooks/useIsMounted.mjs +1 -15
- package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
- package/dist/esm/hooks/useItemSelector.mjs +1 -146
- package/dist/esm/hooks/useItemSelector.mjs.map +1 -1
- package/dist/esm/hooks/useKeyboardDetector.mjs +1 -26
- package/dist/esm/hooks/useKeyboardDetector.mjs.map +1 -1
- package/dist/esm/hooks/usePersistedStore.mjs +1 -65
- package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
- package/dist/esm/hooks/useScreenWidth.mjs +1 -20
- package/dist/esm/hooks/useScreenWidth.mjs.map +1 -1
- package/dist/esm/hooks/useScrollBlockage/index.mjs +1 -27
- package/dist/esm/hooks/useScrollBlockage/index.mjs.map +1 -1
- package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs +1 -70
- package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
- package/dist/esm/hooks/useScrollDetection.mjs +1 -61
- package/dist/esm/hooks/useScrollDetection.mjs.map +1 -1
- package/dist/esm/hooks/useScrollY.mjs +1 -68
- package/dist/esm/hooks/useScrollY.mjs.map +1 -1
- package/dist/esm/hooks/useSearch.mjs +1 -50
- package/dist/esm/hooks/useSearch.mjs.map +1 -1
- package/dist/esm/hooks/useUser/index.mjs +1 -28
- package/dist/esm/hooks/useUser/index.mjs.map +1 -1
- package/dist/esm/libs/auth.mjs +1 -176
- package/dist/esm/libs/auth.mjs.map +1 -1
- package/dist/esm/libs/index.mjs +1 -3
- package/dist/esm/providers/ReactQueryProvider.mjs +1 -86
- package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
- package/dist/esm/providers/index.mjs +1 -4
- package/dist/esm/tailwind.config.mjs +1 -15
- package/dist/esm/tailwind.config.mjs.map +1 -1
- package/dist/esm/utils/cn.mjs +1 -8
- package/dist/esm/utils/cn.mjs.map +1 -1
- package/dist/esm/utils/image.mjs +1 -51
- package/dist/esm/utils/image.mjs.map +1 -1
- package/dist/esm/utils/object.mjs +1 -32
- package/dist/esm/utils/object.mjs.map +1 -1
- package/dist/types/components/Avatar/index.d.ts.map +1 -1
- package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +1 -1
- package/dist/types/components/Browser/Browser.content.d.ts +8 -8
- package/dist/types/components/Button/Button.d.ts +3 -3
- package/dist/types/components/Carousel/index.content.d.ts +5 -5
- package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -84
- package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
- package/dist/types/components/Container/index.d.ts +1 -1
- package/dist/types/components/CopyButton/CopyButton.content.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts.map +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts +1 -1
- package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +12 -12
- package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +4 -4
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +27 -27
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +16 -16
- package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts +1 -1
- package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +12 -12
- package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +16 -16
- package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +4 -4
- package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +3 -3
- package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +2 -2
- package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts.map +1 -1
- package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +15 -15
- package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +3 -3
- package/dist/types/components/HTMLRender/HTMLRender.d.ts.map +1 -1
- package/dist/types/components/IDE/code.content.d.ts +2 -2
- package/dist/types/components/IDE/copyCode.content.d.ts +2 -2
- package/dist/types/components/IDE/selectors.content.d.ts +6 -6
- package/dist/types/components/Input/Checkbox.d.ts +2 -2
- package/dist/types/components/Input/Input.d.ts +1 -1
- package/dist/types/components/Link/Link.d.ts +1 -1
- package/dist/types/components/Loader/index.content.d.ts +1 -1
- package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +8 -8
- package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +6 -6
- package/dist/types/components/Pagination/Pagination.d.ts +2 -2
- package/dist/types/components/Pagination/pagination.content.d.ts +7 -7
- package/dist/types/components/RightDrawer/RightDrawer.d.ts +5 -0
- package/dist/types/components/RightDrawer/RightDrawer.d.ts.map +1 -1
- package/dist/types/components/RightDrawer/rightDrawer.content.d.ts +2 -2
- package/dist/types/components/SwitchSelector/index.d.ts +1 -1
- package/dist/types/components/Tab/Tab.d.ts +1 -1
- package/dist/types/components/TabSelector/TabSelector.d.ts +1 -1
- package/dist/types/components/Table/table.content.d.ts +1 -1
- package/dist/types/components/Tag/index.d.ts +1 -1
- package/dist/types/components/Terminal/terminal.content.d.ts +2 -2
- package/dist/types/components/Toaster/Toast.d.ts +1 -1
- package/dist/types/hooks/reactQuery.d.ts.map +1 -1
- package/dist/types/hooks/useAuth/useSession.d.ts +1 -1
- package/dist/types/hooks/useAuth/useSession.d.ts.map +1 -1
- package/dist/types/providers/ReactQueryProvider.d.ts.map +1 -1
- package/package.json +17 -17
- package/tailwind.css +3 -1
|
@@ -1,250 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { cn } from "../../utils/cn.mjs";
|
|
4
|
-
import { Button } from "../Button/Button.mjs";
|
|
5
|
-
import { Input, inputVariants } from "../Input/Input.mjs";
|
|
6
|
-
import { useEffect, useImperativeHandle, useRef, useState } from "react";
|
|
7
|
-
import { ArrowLeft, ArrowRight, RotateCw } from "lucide-react";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
-
import { useIntlayer } from "react-intlayer";
|
|
10
|
-
|
|
11
|
-
//#region src/components/Browser/Browser.tsx
|
|
12
|
-
const Browser = ({ initialUrl = "https://example.com", path, className, style, size = "md", "aria-label": ariaLabel, sandbox = "allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads", ref, domainRestriction, ...props }) => {
|
|
13
|
-
const [inputUrl, setInputUrl] = useState(initialUrl);
|
|
14
|
-
const [currentUrl, setCurrentUrl] = useState(initialUrl);
|
|
15
|
-
const [history, setHistory] = useState([initialUrl]);
|
|
16
|
-
const [currentIndex, setCurrentIndex] = useState(0);
|
|
17
|
-
const [error, setError] = useState(null);
|
|
18
|
-
const [submitted, setSubmitted] = useState(false);
|
|
19
|
-
const internalIframeRef = useRef(null);
|
|
20
|
-
useImperativeHandle(ref, () => internalIframeRef.current, []);
|
|
21
|
-
const content = useIntlayer("browser");
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
setInputUrl(initialUrl);
|
|
24
|
-
setCurrentUrl(initialUrl);
|
|
25
|
-
setHistory([initialUrl]);
|
|
26
|
-
setCurrentIndex(0);
|
|
27
|
-
setError(null);
|
|
28
|
-
setSubmitted(false);
|
|
29
|
-
}, [initialUrl]);
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
if (!path) return;
|
|
32
|
-
try {
|
|
33
|
-
const baseOrigin = domainRestriction ?? initialUrl;
|
|
34
|
-
const fullUrl = `${new URL(baseOrigin).origin}${path}`;
|
|
35
|
-
setInputUrl(fullUrl);
|
|
36
|
-
let isAlreadyAtUrl = false;
|
|
37
|
-
if (internalIframeRef.current?.contentWindow) try {
|
|
38
|
-
const currentIframeHref = internalIframeRef.current.contentWindow.location.href;
|
|
39
|
-
if (new URL(currentIframeHref).href === new URL(fullUrl).href) isAlreadyAtUrl = true;
|
|
40
|
-
} catch {}
|
|
41
|
-
if (history[currentIndex] !== fullUrl) {
|
|
42
|
-
setHistory((prev) => {
|
|
43
|
-
const newHistory = prev.slice(0, currentIndex + 1);
|
|
44
|
-
newHistory.push(fullUrl);
|
|
45
|
-
return newHistory;
|
|
46
|
-
});
|
|
47
|
-
setCurrentIndex((prev) => prev + 1);
|
|
48
|
-
}
|
|
49
|
-
if (!isAlreadyAtUrl) setCurrentUrl(fullUrl);
|
|
50
|
-
setError(null);
|
|
51
|
-
} catch {}
|
|
52
|
-
}, [
|
|
53
|
-
path,
|
|
54
|
-
domainRestriction,
|
|
55
|
-
initialUrl
|
|
56
|
-
]);
|
|
57
|
-
const handleNavigateTo = (url) => {
|
|
58
|
-
try {
|
|
59
|
-
const validated = normalizeUrl(url);
|
|
60
|
-
if (validated === currentUrl) {
|
|
61
|
-
handleReload();
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
setCurrentUrl(validated);
|
|
65
|
-
setInputUrl(validated);
|
|
66
|
-
setError(null);
|
|
67
|
-
const newHistory = history.slice(0, currentIndex + 1);
|
|
68
|
-
newHistory.push(validated);
|
|
69
|
-
setHistory(newHistory);
|
|
70
|
-
setCurrentIndex(newHistory.length - 1);
|
|
71
|
-
} catch (e) {
|
|
72
|
-
if (e instanceof Error && e.message === "URL does not match allowed domain" && domainRestriction) setError(content.domainRestrictionError?.value ?? `Only URLs from ${domainRestriction} are allowed.`);
|
|
73
|
-
else setError(content.errorMessage.value);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const handleBack = () => {
|
|
77
|
-
if (currentIndex > 0) {
|
|
78
|
-
const newIndex = currentIndex - 1;
|
|
79
|
-
const prevUrl = history[newIndex];
|
|
80
|
-
setCurrentIndex(newIndex);
|
|
81
|
-
setCurrentUrl(prevUrl);
|
|
82
|
-
setInputUrl(prevUrl);
|
|
83
|
-
setError(null);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
const handleForward = () => {
|
|
87
|
-
if (currentIndex < history.length - 1) {
|
|
88
|
-
const newIndex = currentIndex + 1;
|
|
89
|
-
const nextUrl = history[newIndex];
|
|
90
|
-
setCurrentIndex(newIndex);
|
|
91
|
-
setCurrentUrl(nextUrl);
|
|
92
|
-
setInputUrl(nextUrl);
|
|
93
|
-
setError(null);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
const handleSubmit = (e) => {
|
|
97
|
-
e.preventDefault();
|
|
98
|
-
setSubmitted(true);
|
|
99
|
-
handleNavigateTo(inputUrl);
|
|
100
|
-
};
|
|
101
|
-
const handleReload = () => {
|
|
102
|
-
if (internalIframeRef.current) {
|
|
103
|
-
const src = internalIframeRef.current.src;
|
|
104
|
-
internalIframeRef.current.src = "";
|
|
105
|
-
setTimeout(() => {
|
|
106
|
-
if (internalIframeRef.current) internalIframeRef.current.src = src;
|
|
107
|
-
}, 50);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
const isValidHostname = (host) => {
|
|
111
|
-
if (host === "localhost") return true;
|
|
112
|
-
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(host)) return true;
|
|
113
|
-
if (/^[a-f0-9:]+$/i.test(host)) return true;
|
|
114
|
-
if (!/^[a-z0-9.-]+$/i.test(host)) return false;
|
|
115
|
-
if (/^[-.]/.test(host) || /[-.]$/.test(host)) return false;
|
|
116
|
-
if (host.includes("..")) return false;
|
|
117
|
-
if (!host.includes(".")) return false;
|
|
118
|
-
return true;
|
|
119
|
-
};
|
|
120
|
-
const getRestrictionOrigin = () => {
|
|
121
|
-
if (!domainRestriction) return null;
|
|
122
|
-
try {
|
|
123
|
-
return new URL(domainRestriction);
|
|
124
|
-
} catch {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
const normalizeUrl = (raw) => {
|
|
129
|
-
const trimmed = raw.trim();
|
|
130
|
-
if (!trimmed || /\s/.test(trimmed)) throw new Error("Invalid");
|
|
131
|
-
const restrictionOrigin = getRestrictionOrigin();
|
|
132
|
-
if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
|
|
133
|
-
if (restrictionOrigin) return new URL(`${restrictionOrigin.origin}${trimmed}`).toString();
|
|
134
|
-
return new URL(`${new URL(currentUrl).origin}${trimmed}`).toString();
|
|
135
|
-
}
|
|
136
|
-
const candidate = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed) ? trimmed : `https://${trimmed}`;
|
|
137
|
-
const url = new URL(candidate);
|
|
138
|
-
if (url.protocol !== "http:" && url.protocol !== "https:") throw new Error("Only http(s) is allowed");
|
|
139
|
-
if (!isValidHostname(url.hostname)) throw new Error("Invalid host");
|
|
140
|
-
if (restrictionOrigin) {
|
|
141
|
-
if (!(url.hostname === restrictionOrigin.hostname && url.protocol === restrictionOrigin.protocol && (restrictionOrigin.port === "" || url.port === restrictionOrigin.port || url.host === restrictionOrigin.host))) throw new Error("URL does not match allowed domain");
|
|
142
|
-
}
|
|
143
|
-
return url.toString();
|
|
144
|
-
};
|
|
145
|
-
const showError = submitted && !!error;
|
|
146
|
-
const canGoBack = currentIndex > 0;
|
|
147
|
-
const canGoForward = currentIndex < history.length - 1;
|
|
148
|
-
return /* @__PURE__ */ jsxs("section", {
|
|
149
|
-
className: cn("flex w-full flex-col overflow-hidden rounded-xl bg-background shadow-[0_4px_12px_rgba(0,0,0,0.4),0_0_1px_rgba(0,0,0,0.2)]", className),
|
|
150
|
-
style,
|
|
151
|
-
"aria-label": ariaLabel ?? content.ariaLabel.value,
|
|
152
|
-
children: [/* @__PURE__ */ jsxs("div", {
|
|
153
|
-
className: "relative z-10 flex shrink-0 items-center gap-3 rounded-t-xl bg-text/15 px-4 py-2",
|
|
154
|
-
children: [
|
|
155
|
-
/* @__PURE__ */ jsxs("div", {
|
|
156
|
-
className: "flex items-center gap-1",
|
|
157
|
-
children: [/* @__PURE__ */ jsx(Button, {
|
|
158
|
-
type: "button",
|
|
159
|
-
onClick: handleBack,
|
|
160
|
-
disabled: !canGoBack,
|
|
161
|
-
variant: "hoverable",
|
|
162
|
-
size: "icon-md",
|
|
163
|
-
label: content.backButtonLabel.value,
|
|
164
|
-
Icon: ArrowLeft
|
|
165
|
-
}), /* @__PURE__ */ jsx(Button, {
|
|
166
|
-
type: "button",
|
|
167
|
-
onClick: handleForward,
|
|
168
|
-
disabled: !canGoForward,
|
|
169
|
-
variant: "hoverable",
|
|
170
|
-
size: "icon-md",
|
|
171
|
-
label: content.forwardButtonLabel.value,
|
|
172
|
-
Icon: ArrowRight
|
|
173
|
-
})]
|
|
174
|
-
}),
|
|
175
|
-
/* @__PURE__ */ jsxs("form", {
|
|
176
|
-
onSubmit: handleSubmit,
|
|
177
|
-
noValidate: true,
|
|
178
|
-
className: cn(inputVariants(), "flex w-full gap-2 rounded-xl p-0.5! supports-[corner-shape:squircle]:rounded-2xl", "bg-neutral/10 text-text/50 placeholder:text-neutral/80"),
|
|
179
|
-
children: [
|
|
180
|
-
/* @__PURE__ */ jsx("label", {
|
|
181
|
-
htmlFor: "browser-url",
|
|
182
|
-
className: "sr-only",
|
|
183
|
-
children: content.urlLabel.value
|
|
184
|
-
}),
|
|
185
|
-
/* @__PURE__ */ jsx(Input, {
|
|
186
|
-
id: "browser-url",
|
|
187
|
-
type: "text",
|
|
188
|
-
inputMode: "url",
|
|
189
|
-
spellCheck: false,
|
|
190
|
-
autoCapitalize: "off",
|
|
191
|
-
variant: "invisible",
|
|
192
|
-
className: "ml-3 p-0!",
|
|
193
|
-
size: "sm",
|
|
194
|
-
autoCorrect: "off",
|
|
195
|
-
value: inputUrl,
|
|
196
|
-
onChange: (e) => {
|
|
197
|
-
setInputUrl(e.target.value);
|
|
198
|
-
if (showError) setError(null);
|
|
199
|
-
},
|
|
200
|
-
placeholder: content.urlPlaceholder.value,
|
|
201
|
-
"aria-label": content.urlLabel.value,
|
|
202
|
-
"aria-invalid": showError,
|
|
203
|
-
"aria-describedby": showError ? "browser-url-error" : void 0
|
|
204
|
-
}),
|
|
205
|
-
/* @__PURE__ */ jsx(Button, {
|
|
206
|
-
type: "button",
|
|
207
|
-
onClick: handleReload,
|
|
208
|
-
variant: "hoverable",
|
|
209
|
-
size: "icon-md",
|
|
210
|
-
className: "p-1!",
|
|
211
|
-
label: "content.reloadButtonTitle.value",
|
|
212
|
-
Icon: RotateCw
|
|
213
|
-
}),
|
|
214
|
-
/* @__PURE__ */ jsx("button", {
|
|
215
|
-
type: "submit",
|
|
216
|
-
className: "sr-only absolute",
|
|
217
|
-
tabIndex: -1
|
|
218
|
-
})
|
|
219
|
-
]
|
|
220
|
-
}),
|
|
221
|
-
showError && /* @__PURE__ */ jsx("div", {
|
|
222
|
-
className: "absolute top-full left-4 z-20 mt-1",
|
|
223
|
-
children: /* @__PURE__ */ jsx("p", {
|
|
224
|
-
id: "browser-url-error",
|
|
225
|
-
role: "alert",
|
|
226
|
-
"aria-live": "assertive",
|
|
227
|
-
className: "rounded-md bg-red-900/90 px-3 py-1.5 text-red-100 text-xs shadow-md backdrop-blur-sm",
|
|
228
|
-
children: error
|
|
229
|
-
})
|
|
230
|
-
})
|
|
231
|
-
]
|
|
232
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
233
|
-
className: "relative z-0 flex min-h-0 w-full flex-1 flex-col overflow-hidden rounded-b-xl bg-background",
|
|
234
|
-
children: /* @__PURE__ */ jsx("iframe", {
|
|
235
|
-
ref: internalIframeRef,
|
|
236
|
-
src: currentUrl,
|
|
237
|
-
title: content.iframeTitle.value,
|
|
238
|
-
className: "size-full flex-1",
|
|
239
|
-
sandbox,
|
|
240
|
-
loading: "lazy",
|
|
241
|
-
"aria-live": "polite",
|
|
242
|
-
...props
|
|
243
|
-
})
|
|
244
|
-
})]
|
|
245
|
-
});
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
//#endregion
|
|
249
|
-
export { Browser };
|
|
1
|
+
"use client";import{cn as e}from"../../utils/cn.mjs";import{Button as t}from"../Button/Button.mjs";import{Input as n,inputVariants as r}from"../Input/Input.mjs";import{ArrowLeft as i,ArrowRight as a,RotateCw as o}from"lucide-react";import{useEffect as s,useImperativeHandle as c,useRef as l,useState as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{useIntlayer as p}from"react-intlayer";const m=({initialUrl:m=`https://example.com`,path:h,className:g,style:_,size:v=`md`,"aria-label":y,sandbox:b=`allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads`,ref:x,domainRestriction:S,...C})=>{let[w,T]=u(m),[E,D]=u(m),[O,k]=u([m]),[A,j]=u(0),[M,N]=u(null),[P,F]=u(!1),I=l(null);c(x,()=>I.current,[]);let L=p(`browser`);s(()=>{T(m),D(m),k([m]),j(0),N(null),F(!1)},[m]),s(()=>{if(h)try{let e=S??m,t=`${new URL(e).origin}${h}`;T(t);let n=!1;if(I.current?.contentWindow)try{let e=I.current.contentWindow.location.href;new URL(e).href===new URL(t).href&&(n=!0)}catch{}O[A]!==t&&(k(e=>{let n=e.slice(0,A+1);return n.push(t),n}),j(e=>e+1)),n||D(t),N(null)}catch{}},[h,S,m]);let R=e=>{try{let t=G(e);if(t===E){H();return}D(t),T(t),N(null);let n=O.slice(0,A+1);n.push(t),k(n),j(n.length-1)}catch(e){e instanceof Error&&e.message===`URL does not match allowed domain`&&S?N(L.domainRestrictionError?.value??`Only URLs from ${S} are allowed.`):N(L.errorMessage.value)}},z=()=>{if(A>0){let e=A-1,t=O[e];j(e),D(t),T(t),N(null)}},B=()=>{if(A<O.length-1){let e=A+1,t=O[e];j(e),D(t),T(t),N(null)}},V=e=>{e.preventDefault(),F(!0),R(w)},H=()=>{if(I.current){let e=I.current.src;I.current.src=``,setTimeout(()=>{I.current&&(I.current.src=e)},50)}},U=e=>e===`localhost`||/^(\d{1,3}\.){3}\d{1,3}$/.test(e)||/^[a-f0-9:]+$/i.test(e)?!0:!(!/^[a-z0-9.-]+$/i.test(e)||/^[-.]/.test(e)||/[-.]$/.test(e)||e.includes(`..`)||!e.includes(`.`)),W=()=>{if(!S)return null;try{return new URL(S)}catch{return null}},G=e=>{let t=e.trim();if(!t||/\s/.test(t))throw Error(`Invalid`);let n=W();if(t.startsWith(`/`)&&!t.startsWith(`//`))return n?new URL(`${n.origin}${t}`).toString():new URL(`${new URL(E).origin}${t}`).toString();let r=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)?t:`https://${t}`,i=new URL(r);if(i.protocol!==`http:`&&i.protocol!==`https:`)throw Error(`Only http(s) is allowed`);if(!U(i.hostname))throw Error(`Invalid host`);if(n&&!(i.hostname===n.hostname&&i.protocol===n.protocol&&(n.port===``||i.port===n.port||i.host===n.host)))throw Error(`URL does not match allowed domain`);return i.toString()},K=P&&!!M,q=A>0,J=A<O.length-1;return f(`section`,{className:e(`flex w-full flex-col overflow-hidden rounded-xl bg-background shadow-[0_4px_12px_rgba(0,0,0,0.4),0_0_1px_rgba(0,0,0,0.2)]`,g),style:_,"aria-label":y??L.ariaLabel.value,children:[f(`div`,{className:`relative z-10 flex shrink-0 items-center gap-3 rounded-t-xl bg-text/15 px-4 py-2`,children:[f(`div`,{className:`flex items-center gap-1`,children:[d(t,{type:`button`,onClick:z,disabled:!q,variant:`hoverable`,size:`icon-md`,label:L.backButtonLabel.value,Icon:i}),d(t,{type:`button`,onClick:B,disabled:!J,variant:`hoverable`,size:`icon-md`,label:L.forwardButtonLabel.value,Icon:a})]}),f(`form`,{onSubmit:V,noValidate:!0,className:e(r(),`flex w-full gap-2 rounded-xl p-0.5! supports-[corner-shape:squircle]:rounded-2xl`,`bg-neutral/10 text-text/50 placeholder:text-neutral/80`),children:[d(`label`,{htmlFor:`browser-url`,className:`sr-only`,children:L.urlLabel.value}),d(n,{id:`browser-url`,type:`text`,inputMode:`url`,spellCheck:!1,autoCapitalize:`off`,variant:`invisible`,className:`ml-3 p-0!`,size:`sm`,autoCorrect:`off`,value:w,onChange:e=>{T(e.target.value),K&&N(null)},placeholder:L.urlPlaceholder.value,"aria-label":L.urlLabel.value,"aria-invalid":K,"aria-describedby":K?`browser-url-error`:void 0}),d(t,{type:`button`,onClick:H,variant:`hoverable`,size:`icon-md`,className:`p-1!`,label:`content.reloadButtonTitle.value`,Icon:o}),d(`button`,{type:`submit`,className:`sr-only absolute`,tabIndex:-1})]}),K&&d(`div`,{className:`absolute top-full left-4 z-20 mt-1`,children:d(`p`,{id:`browser-url-error`,role:`alert`,"aria-live":`assertive`,className:`rounded-md bg-red-900/90 px-3 py-1.5 text-red-100 text-xs shadow-md backdrop-blur-sm`,children:M})})]}),d(`div`,{className:`relative z-0 flex min-h-0 w-full flex-1 flex-col overflow-hidden rounded-b-xl bg-background`,children:d(`iframe`,{ref:I,src:E,title:L.iframeTitle.value,className:`size-full flex-1`,sandbox:b,loading:`lazy`,"aria-live":`polite`,...C})})]})};export{m as Browser};
|
|
250
2
|
//# sourceMappingURL=Browser.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Browser.mjs","names":[],"sources":["../../../../src/components/Browser/Browser.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { ArrowLeft, ArrowRight, RotateCw } from 'lucide-react';\nimport {\n type CSSProperties,\n type FormEvent,\n type HTMLAttributes,\n type RefObject,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Button } from '../Button';\nimport { Input, inputVariants } from '../Input';\n\nexport type BrowserProps = {\n initialUrl?: string;\n path?: string;\n className?: string;\n style?: CSSProperties;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n 'aria-label'?: string;\n sandbox?: string;\n ref?: RefObject<HTMLIFrameElement | null>;\n domainRestriction?: string;\n} & HTMLAttributes<HTMLIFrameElement>;\n\nexport const Browser = ({\n initialUrl = 'https://example.com',\n path,\n className,\n style,\n size = 'md',\n 'aria-label': ariaLabel,\n sandbox = 'allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads',\n ref,\n domainRestriction,\n ...props\n}: BrowserProps) => {\n // --- State -----------------------------------------------------------------\n const [inputUrl, setInputUrl] = useState(initialUrl);\n const [currentUrl, setCurrentUrl] = useState(initialUrl);\n\n // History Management\n const [history, setHistory] = useState<string[]>([initialUrl]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const [error, setError] = useState<string | null>(null);\n const [submitted, setSubmitted] = useState(false);\n const internalIframeRef = useRef<HTMLIFrameElement>(null);\n\n useImperativeHandle(ref, () => internalIframeRef.current!, []);\n const content = useIntlayer('browser');\n\n // --- Effects ---------------------------------------------------------------\n\n // Reset everything if initialUrl changes completely\n useEffect(() => {\n setInputUrl(initialUrl);\n setCurrentUrl(initialUrl);\n setHistory([initialUrl]);\n setCurrentIndex(0);\n setError(null);\n setSubmitted(false);\n }, [initialUrl]);\n\n // Sync external path changes with the URL bar and History\n useEffect(() => {\n if (!path) return;\n\n try {\n const baseOrigin = domainRestriction ?? initialUrl;\n const origin = new URL(baseOrigin).origin;\n const fullUrl = `${origin}${path}`;\n\n // Update Input (Always update the visual bar)\n setInputUrl(fullUrl);\n\n // Check internal iframe state to avoid reload if already there\n let isAlreadyAtUrl = false;\n if (internalIframeRef.current?.contentWindow) {\n try {\n const currentIframeHref =\n internalIframeRef.current.contentWindow.location.href;\n if (new URL(currentIframeHref).href === new URL(fullUrl).href) {\n isAlreadyAtUrl = true;\n }\n } catch {\n // Cross-origin access ignored\n }\n }\n\n // Update History Stack\n // We perform this check regardless of `isAlreadyAtUrl`.\n // If the path changed (even internally), we want to record it in the arrow stack.\n if (history[currentIndex] !== fullUrl) {\n setHistory((prev) => {\n const newHistory = prev.slice(0, currentIndex + 1);\n newHistory.push(fullUrl);\n return newHistory;\n });\n setCurrentIndex((prev) => prev + 1);\n }\n\n // Navigate (Update src) only if NOT already there\n // This prevents the iframe from refreshing when the user navigated inside it.\n if (!isAlreadyAtUrl) {\n setCurrentUrl(fullUrl);\n }\n\n setError(null);\n } catch {\n // Ignore invalid paths\n }\n }, [path, domainRestriction, initialUrl]); // Removed currentIndex dependency to prevent loops\n\n // --- Navigation Logic ------------------------------------------------------\n\n const handleNavigateTo = (url: string) => {\n try {\n const validated = normalizeUrl(url);\n\n // If we are navigating to the exact same URL, just reload\n if (validated === currentUrl) {\n handleReload();\n return;\n }\n\n setCurrentUrl(validated);\n setInputUrl(validated);\n setError(null);\n\n // Update History: Slice future if we went back, then push new\n const newHistory = history.slice(0, currentIndex + 1);\n newHistory.push(validated);\n setHistory(newHistory);\n setCurrentIndex(newHistory.length - 1);\n } catch (e) {\n if (\n e instanceof Error &&\n e.message === 'URL does not match allowed domain' &&\n domainRestriction\n ) {\n setError(\n content.domainRestrictionError?.value ??\n `Only URLs from ${domainRestriction} are allowed.`\n );\n } else {\n setError(content.errorMessage.value);\n }\n }\n };\n\n const handleBack = () => {\n if (currentIndex > 0) {\n const newIndex = currentIndex - 1;\n const prevUrl = history[newIndex];\n setCurrentIndex(newIndex);\n setCurrentUrl(prevUrl);\n setInputUrl(prevUrl);\n setError(null);\n }\n };\n\n const handleForward = () => {\n if (currentIndex < history.length - 1) {\n const newIndex = currentIndex + 1;\n const nextUrl = history[newIndex];\n setCurrentIndex(newIndex);\n setCurrentUrl(nextUrl);\n setInputUrl(nextUrl);\n setError(null);\n }\n };\n\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setSubmitted(true);\n handleNavigateTo(inputUrl);\n };\n\n const handleReload = () => {\n if (internalIframeRef.current) {\n // Create a clean reload effect\n const src = internalIframeRef.current.src;\n internalIframeRef.current.src = '';\n setTimeout(() => {\n if (internalIframeRef.current) internalIframeRef.current.src = src;\n }, 50);\n }\n };\n\n // --- Validation Helpers ----------------------------------------------------\n const isValidHostname = (host: string) => {\n if (host === 'localhost') return true;\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(host)) return true;\n if (/^[a-f0-9:]+$/i.test(host)) return true;\n if (!/^[a-z0-9.-]+$/i.test(host)) return false;\n if (/^[-.]/.test(host) || /[-.]$/.test(host)) return false;\n if (host.includes('..')) return false;\n if (!host.includes('.')) return false;\n return true;\n };\n\n const getRestrictionOrigin = (): URL | null => {\n if (!domainRestriction) return null;\n try {\n return new URL(domainRestriction);\n } catch {\n return null;\n }\n };\n\n const normalizeUrl = (raw: string) => {\n const trimmed = raw.trim();\n if (!trimmed || /\\s/.test(trimmed)) throw new Error('Invalid');\n\n const restrictionOrigin = getRestrictionOrigin();\n const isRelativePath = trimmed.startsWith('/') && !trimmed.startsWith('//');\n\n if (isRelativePath) {\n if (restrictionOrigin) {\n return new URL(`${restrictionOrigin.origin}${trimmed}`).toString();\n }\n return new URL(`${new URL(currentUrl).origin}${trimmed}`).toString();\n }\n\n const hasProtocol = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed);\n const candidate = hasProtocol ? trimmed : `https://${trimmed}`;\n const url = new URL(candidate);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error('Only http(s) is allowed');\n }\n\n if (!isValidHostname(url.hostname)) throw new Error('Invalid host');\n\n if (restrictionOrigin) {\n const urlMatches =\n url.hostname === restrictionOrigin.hostname &&\n url.protocol === restrictionOrigin.protocol &&\n (restrictionOrigin.port === '' ||\n url.port === restrictionOrigin.port ||\n url.host === restrictionOrigin.host);\n\n if (!urlMatches) throw new Error('URL does not match allowed domain');\n }\n\n return url.toString();\n };\n\n const showError = submitted && !!error;\n const canGoBack = currentIndex > 0;\n const canGoForward = currentIndex < history.length - 1;\n\n return (\n <section\n className={cn(\n 'flex w-full flex-col overflow-hidden rounded-xl bg-background shadow-[0_4px_12px_rgba(0,0,0,0.4),0_0_1px_rgba(0,0,0,0.2)]',\n className\n )}\n style={style}\n aria-label={ariaLabel ?? content.ariaLabel.value}\n >\n {/* Top bar */}\n <div className=\"relative z-10 flex shrink-0 items-center gap-3 rounded-t-xl bg-text/15 px-4 py-2\">\n {/* Navigation Controls */}\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n onClick={handleBack}\n disabled={!canGoBack}\n variant=\"hoverable\"\n size=\"icon-md\"\n label={content.backButtonLabel.value}\n Icon={ArrowLeft}\n />\n <Button\n type=\"button\"\n onClick={handleForward}\n disabled={!canGoForward}\n variant=\"hoverable\"\n size=\"icon-md\"\n label={content.forwardButtonLabel.value}\n Icon={ArrowRight}\n />\n </div>\n\n {/* URL Bar */}\n <form\n onSubmit={handleSubmit}\n noValidate\n className={cn(\n inputVariants(),\n 'flex w-full gap-2 rounded-xl p-0.5! supports-[corner-shape:squircle]:rounded-2xl',\n 'bg-neutral/10 text-text/50 placeholder:text-neutral/80'\n )}\n >\n <label htmlFor=\"browser-url\" className=\"sr-only\">\n {content.urlLabel.value}\n </label>\n <Input\n id=\"browser-url\"\n type=\"text\"\n inputMode=\"url\"\n spellCheck={false}\n autoCapitalize=\"off\"\n variant=\"invisible\"\n className=\"ml-3 p-0!\"\n size=\"sm\"\n autoCorrect=\"off\"\n value={inputUrl}\n onChange={(e) => {\n setInputUrl(e.target.value);\n if (showError) setError(null);\n }}\n placeholder={content.urlPlaceholder.value}\n aria-label={content.urlLabel.value}\n aria-invalid={showError}\n aria-describedby={showError ? 'browser-url-error' : undefined}\n />\n\n <Button\n type=\"button\"\n onClick={handleReload}\n variant=\"hoverable\"\n size=\"icon-md\"\n className=\"p-1!\"\n label={'content.reloadButtonTitle.value'}\n Icon={RotateCw}\n />\n\n {/* invisible submit */}\n <button type=\"submit\" className=\"sr-only absolute\" tabIndex={-1} />\n </form>\n\n {/* Error Message Tooltip */}\n {showError && (\n <div className=\"absolute top-full left-4 z-20 mt-1\">\n <p\n id=\"browser-url-error\"\n role=\"alert\"\n aria-live=\"assertive\"\n className=\"rounded-md bg-red-900/90 px-3 py-1.5 text-red-100 text-xs shadow-md backdrop-blur-sm\"\n >\n {error}\n </p>\n </div>\n )}\n </div>\n\n {/* Iframe */}\n <div className=\"relative z-0 flex min-h-0 w-full flex-1 flex-col overflow-hidden rounded-b-xl bg-background\">\n <iframe\n ref={internalIframeRef}\n src={currentUrl}\n title={content.iframeTitle.value}\n className=\"size-full flex-1\"\n sandbox={sandbox}\n loading=\"lazy\"\n aria-live=\"polite\"\n {...props}\n />\n </div>\n </section>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Browser.mjs","names":[],"sources":["../../../../src/components/Browser/Browser.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { ArrowLeft, ArrowRight, RotateCw } from 'lucide-react';\nimport {\n type CSSProperties,\n type FormEvent,\n type HTMLAttributes,\n type RefObject,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Button } from '../Button';\nimport { Input, inputVariants } from '../Input';\n\nexport type BrowserProps = {\n initialUrl?: string;\n path?: string;\n className?: string;\n style?: CSSProperties;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n 'aria-label'?: string;\n sandbox?: string;\n ref?: RefObject<HTMLIFrameElement | null>;\n domainRestriction?: string;\n} & HTMLAttributes<HTMLIFrameElement>;\n\nexport const Browser = ({\n initialUrl = 'https://example.com',\n path,\n className,\n style,\n size = 'md',\n 'aria-label': ariaLabel,\n sandbox = 'allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-downloads',\n ref,\n domainRestriction,\n ...props\n}: BrowserProps) => {\n // --- State -----------------------------------------------------------------\n const [inputUrl, setInputUrl] = useState(initialUrl);\n const [currentUrl, setCurrentUrl] = useState(initialUrl);\n\n // History Management\n const [history, setHistory] = useState<string[]>([initialUrl]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const [error, setError] = useState<string | null>(null);\n const [submitted, setSubmitted] = useState(false);\n const internalIframeRef = useRef<HTMLIFrameElement>(null);\n\n useImperativeHandle(ref, () => internalIframeRef.current!, []);\n const content = useIntlayer('browser');\n\n // --- Effects ---------------------------------------------------------------\n\n // Reset everything if initialUrl changes completely\n useEffect(() => {\n setInputUrl(initialUrl);\n setCurrentUrl(initialUrl);\n setHistory([initialUrl]);\n setCurrentIndex(0);\n setError(null);\n setSubmitted(false);\n }, [initialUrl]);\n\n // Sync external path changes with the URL bar and History\n useEffect(() => {\n if (!path) return;\n\n try {\n const baseOrigin = domainRestriction ?? initialUrl;\n const origin = new URL(baseOrigin).origin;\n const fullUrl = `${origin}${path}`;\n\n // Update Input (Always update the visual bar)\n setInputUrl(fullUrl);\n\n // Check internal iframe state to avoid reload if already there\n let isAlreadyAtUrl = false;\n if (internalIframeRef.current?.contentWindow) {\n try {\n const currentIframeHref =\n internalIframeRef.current.contentWindow.location.href;\n if (new URL(currentIframeHref).href === new URL(fullUrl).href) {\n isAlreadyAtUrl = true;\n }\n } catch {\n // Cross-origin access ignored\n }\n }\n\n // Update History Stack\n // We perform this check regardless of `isAlreadyAtUrl`.\n // If the path changed (even internally), we want to record it in the arrow stack.\n if (history[currentIndex] !== fullUrl) {\n setHistory((prev) => {\n const newHistory = prev.slice(0, currentIndex + 1);\n newHistory.push(fullUrl);\n return newHistory;\n });\n setCurrentIndex((prev) => prev + 1);\n }\n\n // Navigate (Update src) only if NOT already there\n // This prevents the iframe from refreshing when the user navigated inside it.\n if (!isAlreadyAtUrl) {\n setCurrentUrl(fullUrl);\n }\n\n setError(null);\n } catch {\n // Ignore invalid paths\n }\n }, [path, domainRestriction, initialUrl]); // Removed currentIndex dependency to prevent loops\n\n // --- Navigation Logic ------------------------------------------------------\n\n const handleNavigateTo = (url: string) => {\n try {\n const validated = normalizeUrl(url);\n\n // If we are navigating to the exact same URL, just reload\n if (validated === currentUrl) {\n handleReload();\n return;\n }\n\n setCurrentUrl(validated);\n setInputUrl(validated);\n setError(null);\n\n // Update History: Slice future if we went back, then push new\n const newHistory = history.slice(0, currentIndex + 1);\n newHistory.push(validated);\n setHistory(newHistory);\n setCurrentIndex(newHistory.length - 1);\n } catch (e) {\n if (\n e instanceof Error &&\n e.message === 'URL does not match allowed domain' &&\n domainRestriction\n ) {\n setError(\n content.domainRestrictionError?.value ??\n `Only URLs from ${domainRestriction} are allowed.`\n );\n } else {\n setError(content.errorMessage.value);\n }\n }\n };\n\n const handleBack = () => {\n if (currentIndex > 0) {\n const newIndex = currentIndex - 1;\n const prevUrl = history[newIndex];\n setCurrentIndex(newIndex);\n setCurrentUrl(prevUrl);\n setInputUrl(prevUrl);\n setError(null);\n }\n };\n\n const handleForward = () => {\n if (currentIndex < history.length - 1) {\n const newIndex = currentIndex + 1;\n const nextUrl = history[newIndex];\n setCurrentIndex(newIndex);\n setCurrentUrl(nextUrl);\n setInputUrl(nextUrl);\n setError(null);\n }\n };\n\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setSubmitted(true);\n handleNavigateTo(inputUrl);\n };\n\n const handleReload = () => {\n if (internalIframeRef.current) {\n // Create a clean reload effect\n const src = internalIframeRef.current.src;\n internalIframeRef.current.src = '';\n setTimeout(() => {\n if (internalIframeRef.current) internalIframeRef.current.src = src;\n }, 50);\n }\n };\n\n // --- Validation Helpers ----------------------------------------------------\n const isValidHostname = (host: string) => {\n if (host === 'localhost') return true;\n if (/^(\\d{1,3}\\.){3}\\d{1,3}$/.test(host)) return true;\n if (/^[a-f0-9:]+$/i.test(host)) return true;\n if (!/^[a-z0-9.-]+$/i.test(host)) return false;\n if (/^[-.]/.test(host) || /[-.]$/.test(host)) return false;\n if (host.includes('..')) return false;\n if (!host.includes('.')) return false;\n return true;\n };\n\n const getRestrictionOrigin = (): URL | null => {\n if (!domainRestriction) return null;\n try {\n return new URL(domainRestriction);\n } catch {\n return null;\n }\n };\n\n const normalizeUrl = (raw: string) => {\n const trimmed = raw.trim();\n if (!trimmed || /\\s/.test(trimmed)) throw new Error('Invalid');\n\n const restrictionOrigin = getRestrictionOrigin();\n const isRelativePath = trimmed.startsWith('/') && !trimmed.startsWith('//');\n\n if (isRelativePath) {\n if (restrictionOrigin) {\n return new URL(`${restrictionOrigin.origin}${trimmed}`).toString();\n }\n return new URL(`${new URL(currentUrl).origin}${trimmed}`).toString();\n }\n\n const hasProtocol = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed);\n const candidate = hasProtocol ? trimmed : `https://${trimmed}`;\n const url = new URL(candidate);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error('Only http(s) is allowed');\n }\n\n if (!isValidHostname(url.hostname)) throw new Error('Invalid host');\n\n if (restrictionOrigin) {\n const urlMatches =\n url.hostname === restrictionOrigin.hostname &&\n url.protocol === restrictionOrigin.protocol &&\n (restrictionOrigin.port === '' ||\n url.port === restrictionOrigin.port ||\n url.host === restrictionOrigin.host);\n\n if (!urlMatches) throw new Error('URL does not match allowed domain');\n }\n\n return url.toString();\n };\n\n const showError = submitted && !!error;\n const canGoBack = currentIndex > 0;\n const canGoForward = currentIndex < history.length - 1;\n\n return (\n <section\n className={cn(\n 'flex w-full flex-col overflow-hidden rounded-xl bg-background shadow-[0_4px_12px_rgba(0,0,0,0.4),0_0_1px_rgba(0,0,0,0.2)]',\n className\n )}\n style={style}\n aria-label={ariaLabel ?? content.ariaLabel.value}\n >\n {/* Top bar */}\n <div className=\"relative z-10 flex shrink-0 items-center gap-3 rounded-t-xl bg-text/15 px-4 py-2\">\n {/* Navigation Controls */}\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n onClick={handleBack}\n disabled={!canGoBack}\n variant=\"hoverable\"\n size=\"icon-md\"\n label={content.backButtonLabel.value}\n Icon={ArrowLeft}\n />\n <Button\n type=\"button\"\n onClick={handleForward}\n disabled={!canGoForward}\n variant=\"hoverable\"\n size=\"icon-md\"\n label={content.forwardButtonLabel.value}\n Icon={ArrowRight}\n />\n </div>\n\n {/* URL Bar */}\n <form\n onSubmit={handleSubmit}\n noValidate\n className={cn(\n inputVariants(),\n 'flex w-full gap-2 rounded-xl p-0.5! supports-[corner-shape:squircle]:rounded-2xl',\n 'bg-neutral/10 text-text/50 placeholder:text-neutral/80'\n )}\n >\n <label htmlFor=\"browser-url\" className=\"sr-only\">\n {content.urlLabel.value}\n </label>\n <Input\n id=\"browser-url\"\n type=\"text\"\n inputMode=\"url\"\n spellCheck={false}\n autoCapitalize=\"off\"\n variant=\"invisible\"\n className=\"ml-3 p-0!\"\n size=\"sm\"\n autoCorrect=\"off\"\n value={inputUrl}\n onChange={(e) => {\n setInputUrl(e.target.value);\n if (showError) setError(null);\n }}\n placeholder={content.urlPlaceholder.value}\n aria-label={content.urlLabel.value}\n aria-invalid={showError}\n aria-describedby={showError ? 'browser-url-error' : undefined}\n />\n\n <Button\n type=\"button\"\n onClick={handleReload}\n variant=\"hoverable\"\n size=\"icon-md\"\n className=\"p-1!\"\n label={'content.reloadButtonTitle.value'}\n Icon={RotateCw}\n />\n\n {/* invisible submit */}\n <button type=\"submit\" className=\"sr-only absolute\" tabIndex={-1} />\n </form>\n\n {/* Error Message Tooltip */}\n {showError && (\n <div className=\"absolute top-full left-4 z-20 mt-1\">\n <p\n id=\"browser-url-error\"\n role=\"alert\"\n aria-live=\"assertive\"\n className=\"rounded-md bg-red-900/90 px-3 py-1.5 text-red-100 text-xs shadow-md backdrop-blur-sm\"\n >\n {error}\n </p>\n </div>\n )}\n </div>\n\n {/* Iframe */}\n <div className=\"relative z-0 flex min-h-0 w-full flex-1 flex-col overflow-hidden rounded-b-xl bg-background\">\n <iframe\n ref={internalIframeRef}\n src={currentUrl}\n title={content.iframeTitle.value}\n className=\"size-full flex-1\"\n sandbox={sandbox}\n loading=\"lazy\"\n aria-live=\"polite\"\n {...props}\n />\n </div>\n </section>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,288 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ContainerRoundedSize } from "../Container/index.mjs";
|
|
3
|
-
import { Loader } from "../Loader/index.mjs";
|
|
4
|
-
import { cva } from "class-variance-authority";
|
|
5
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
|
|
7
|
-
//#region src/components/Button/Button.tsx
|
|
8
|
-
/**
|
|
9
|
-
* Button size variants for different use cases
|
|
10
|
-
*/
|
|
11
|
-
let ButtonSize = /* @__PURE__ */ function(ButtonSize) {
|
|
12
|
-
ButtonSize["SM"] = "sm";
|
|
13
|
-
ButtonSize["MD"] = "md";
|
|
14
|
-
ButtonSize["LG"] = "lg";
|
|
15
|
-
ButtonSize["XL"] = "xl";
|
|
16
|
-
ButtonSize["ICON_SM"] = "icon-sm";
|
|
17
|
-
ButtonSize["ICON_MD"] = "icon-md";
|
|
18
|
-
ButtonSize["ICON_LG"] = "icon-lg";
|
|
19
|
-
ButtonSize["ICON_XL"] = "icon-xl";
|
|
20
|
-
return ButtonSize;
|
|
21
|
-
}({});
|
|
22
|
-
const buttonIconVariants = cva("flex-none shrink-0", {
|
|
23
|
-
variants: { size: {
|
|
24
|
-
[`${ButtonSize.SM}`]: "size-3",
|
|
25
|
-
[`${ButtonSize.MD}`]: "size-4",
|
|
26
|
-
[`${ButtonSize.LG}`]: "size-5",
|
|
27
|
-
[`${ButtonSize.XL}`]: "size-6",
|
|
28
|
-
[`${ButtonSize.ICON_SM}`]: "size-3",
|
|
29
|
-
[`${ButtonSize.ICON_MD}`]: "size-4",
|
|
30
|
-
[`${ButtonSize.ICON_LG}`]: "size-4",
|
|
31
|
-
[`${ButtonSize.ICON_XL}`]: "size-5"
|
|
32
|
-
} },
|
|
33
|
-
defaultVariants: { size: ButtonSize.MD }
|
|
34
|
-
});
|
|
35
|
-
/**
|
|
36
|
-
* Button visual style variants
|
|
37
|
-
*/
|
|
38
|
-
let ButtonVariant = /* @__PURE__ */ function(ButtonVariant) {
|
|
39
|
-
ButtonVariant["DEFAULT"] = "default";
|
|
40
|
-
ButtonVariant["NONE"] = "none";
|
|
41
|
-
ButtonVariant["OUTLINE"] = "outline";
|
|
42
|
-
ButtonVariant["LINK"] = "link";
|
|
43
|
-
ButtonVariant["INVISIBLE_LINK"] = "invisible-link";
|
|
44
|
-
ButtonVariant["HOVERABLE"] = "hoverable";
|
|
45
|
-
ButtonVariant["FADE"] = "fade";
|
|
46
|
-
ButtonVariant["INPUT"] = "input";
|
|
47
|
-
return ButtonVariant;
|
|
48
|
-
}({});
|
|
49
|
-
/**
|
|
50
|
-
* Button color themes that work with the design system
|
|
51
|
-
*/
|
|
52
|
-
let ButtonColor = /* @__PURE__ */ function(ButtonColor) {
|
|
53
|
-
ButtonColor["PRIMARY"] = "primary";
|
|
54
|
-
ButtonColor["SECONDARY"] = "secondary";
|
|
55
|
-
ButtonColor["DESTRUCTIVE"] = "destructive";
|
|
56
|
-
ButtonColor["NEUTRAL"] = "neutral";
|
|
57
|
-
ButtonColor["LIGHT"] = "light";
|
|
58
|
-
ButtonColor["DARK"] = "dark";
|
|
59
|
-
ButtonColor["TEXT"] = "text";
|
|
60
|
-
ButtonColor["CARD"] = "card";
|
|
61
|
-
ButtonColor["TEXT_INVERSE"] = "text-inverse";
|
|
62
|
-
ButtonColor["CURRENT"] = "current";
|
|
63
|
-
ButtonColor["ERROR"] = "error";
|
|
64
|
-
ButtonColor["SUCCESS"] = "success";
|
|
65
|
-
ButtonColor["CUSTOM"] = "custom";
|
|
66
|
-
return ButtonColor;
|
|
67
|
-
}({});
|
|
68
|
-
/**
|
|
69
|
-
* Text alignment options for button content
|
|
70
|
-
*/
|
|
71
|
-
let ButtonTextAlign = /* @__PURE__ */ function(ButtonTextAlign) {
|
|
72
|
-
ButtonTextAlign["LEFT"] = "left";
|
|
73
|
-
ButtonTextAlign["CENTER"] = "center";
|
|
74
|
-
ButtonTextAlign["RIGHT"] = "right";
|
|
75
|
-
return ButtonTextAlign;
|
|
76
|
-
}({});
|
|
77
|
-
/**
|
|
78
|
-
* Enhanced button variants with improved accessibility and focus states
|
|
79
|
-
*/
|
|
80
|
-
const buttonVariants = cva("relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50", {
|
|
81
|
-
variants: {
|
|
82
|
-
size: {
|
|
83
|
-
[`${ButtonSize.SM}`]: "min-h-7 px-3 text-xs max-md:py-1",
|
|
84
|
-
[`${ButtonSize.MD}`]: "min-h-8 px-6 text-sm max-md:py-2",
|
|
85
|
-
[`${ButtonSize.LG}`]: "min-h-10 px-8 text-lg max-md:py-3",
|
|
86
|
-
[`${ButtonSize.XL}`]: "min-h-11 px-10 text-xl max-md:py-4",
|
|
87
|
-
[`${ButtonSize.ICON_SM}`]: "p-1.5",
|
|
88
|
-
[`${ButtonSize.ICON_MD}`]: "p-1.5",
|
|
89
|
-
[`${ButtonSize.ICON_LG}`]: "p-2",
|
|
90
|
-
[`${ButtonSize.ICON_XL}`]: "p-3"
|
|
91
|
-
},
|
|
92
|
-
color: {
|
|
93
|
-
[`${ButtonColor.PRIMARY}`]: "hover-primary-500/20 text-primary ring-primary-500/20 *:text-text-light",
|
|
94
|
-
[`${ButtonColor.SECONDARY}`]: "hover-secondary-500/20 text-secondary ring-secondary-500/20 *:text-text-light",
|
|
95
|
-
[`${ButtonColor.DESTRUCTIVE}`]: "hover-destructive-500/20 text-destructive ring-destructive-500/20 *:text-text-light",
|
|
96
|
-
[`${ButtonColor.NEUTRAL}`]: "text-neutral ring-neutral-500/5 *:text-text-light",
|
|
97
|
-
[`${ButtonColor.CARD}`]: "hover-card-500/20 text-card ring-card-500/20 *:text-text-light",
|
|
98
|
-
[`${ButtonColor.LIGHT}`]: "hover-white-500/20 text-white ring-white/20 *:text-text-light",
|
|
99
|
-
[`${ButtonColor.DARK}`]: "text-neutral-800 ring-text-light/50 *:text-text-light",
|
|
100
|
-
[`${ButtonColor.TEXT}`]: "text-text ring-text/20 *:text-text-opposite",
|
|
101
|
-
[`${ButtonColor.CURRENT}`]: "hover-current-500/10 text-current ring-current/10 *:text-text-light",
|
|
102
|
-
[`${ButtonColor.TEXT_INVERSE}`]: "text-text-opposite ring-text-opposite/20 *:text-text",
|
|
103
|
-
[`${ButtonColor.ERROR}`]: "hover-error-500/20 text-error ring-error/20 *:text-text-light",
|
|
104
|
-
[`${ButtonColor.SUCCESS}`]: "hover-success-500/20 text-success ring-success/20 *:text-text-light",
|
|
105
|
-
[`${ButtonColor.CUSTOM}`]: ""
|
|
106
|
-
},
|
|
107
|
-
roundedSize: {
|
|
108
|
-
[`${ContainerRoundedSize.NONE}`]: "rounded-none",
|
|
109
|
-
[`${ContainerRoundedSize.SM}`]: "rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl",
|
|
110
|
-
[`${ContainerRoundedSize.MD}`]: "rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl",
|
|
111
|
-
[`${ContainerRoundedSize.LG}`]: "rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl",
|
|
112
|
-
[`${ContainerRoundedSize.XL}`]: "rounded-3xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-4xl",
|
|
113
|
-
[`${ContainerRoundedSize["2xl"]}`]: "rounded-4xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[2.5rem]",
|
|
114
|
-
[`${ContainerRoundedSize["3xl"]}`]: "rounded-[2.5rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[3rem]",
|
|
115
|
-
[`${ContainerRoundedSize["4xl"]}`]: "rounded-[3rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[4rem]",
|
|
116
|
-
[`${ContainerRoundedSize["5xl"]}`]: "rounded-[4rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[5rem]",
|
|
117
|
-
[`${ContainerRoundedSize.FULL}`]: "rounded-full"
|
|
118
|
-
},
|
|
119
|
-
variant: {
|
|
120
|
-
[`${ButtonVariant.DEFAULT}`]: [
|
|
121
|
-
"bg-current",
|
|
122
|
-
"hover:bg-current/90",
|
|
123
|
-
"hover:ring-5",
|
|
124
|
-
"aria-selected:ring-5"
|
|
125
|
-
],
|
|
126
|
-
[`${ButtonVariant.OUTLINE}`]: [
|
|
127
|
-
"rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current!",
|
|
128
|
-
"hover:bg-current/20 focus-visible:bg-current/20",
|
|
129
|
-
"hover:ring-5 focus-visible:ring-5",
|
|
130
|
-
"aria-selected:ring-5"
|
|
131
|
-
],
|
|
132
|
-
[`${ButtonVariant.NONE}`]: "border-none bg-current/0 text-inherit hover:bg-current/0",
|
|
133
|
-
[`${ButtonVariant.LINK}`]: "h-auto justify-start border-inherit bg-transparent px-1 underline-offset-4 *:text-current! hover:bg-transparent hover:underline",
|
|
134
|
-
[`${ButtonVariant.INVISIBLE_LINK}`]: "h-auto justify-start border-inherit bg-transparent px-1 underline-offset-4 *:text-current! hover:bg-transparent",
|
|
135
|
-
[`${ButtonVariant.HOVERABLE}`]: "rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/20 aria-[current]:bg-current/5",
|
|
136
|
-
[`${ButtonVariant.FADE}`]: [
|
|
137
|
-
"rounded-lg border-none bg-current/10 ring-current/5 transition *:text-current! hover:bg-current/20 aria-[current]:bg-current/5",
|
|
138
|
-
"hover:ring-5 focus-visible:ring-5",
|
|
139
|
-
"aria-selected:ring-5"
|
|
140
|
-
],
|
|
141
|
-
[`${ButtonVariant.INPUT}`]: [
|
|
142
|
-
"text-text",
|
|
143
|
-
"w-full select-text resize-none rounded-2xl text-base shadow-none outline-none supports-[corner-shape:squircle]:rounded-4xl",
|
|
144
|
-
"transition-shadow duration-100 md:text-sm",
|
|
145
|
-
"ring-0",
|
|
146
|
-
"disabled:opacity-50",
|
|
147
|
-
"text-text",
|
|
148
|
-
"bg-neutral-50 dark:bg-neutral-950",
|
|
149
|
-
"ring-neutral-100 dark:ring-neutral-700",
|
|
150
|
-
"hover:ring-3",
|
|
151
|
-
"aria-selected:ring-4",
|
|
152
|
-
"focus-visible:ring-3",
|
|
153
|
-
"disabled:ring-0",
|
|
154
|
-
"focus-visible:outline-none",
|
|
155
|
-
"[box-shadow:none] focus:[box-shadow:none]",
|
|
156
|
-
"aria-invalid:border-error"
|
|
157
|
-
]
|
|
158
|
-
},
|
|
159
|
-
textAlign: {
|
|
160
|
-
[`${ButtonTextAlign.LEFT}`]: "justify-start text-left",
|
|
161
|
-
[`${ButtonTextAlign.CENTER}`]: "justify-center text-center",
|
|
162
|
-
[`${ButtonTextAlign.RIGHT}`]: "justify-end text-right"
|
|
163
|
-
},
|
|
164
|
-
isFullWidth: {
|
|
165
|
-
true: "w-full",
|
|
166
|
-
false: ""
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
defaultVariants: {
|
|
170
|
-
variant: `${ButtonVariant.DEFAULT}`,
|
|
171
|
-
size: `${ButtonSize.MD}`,
|
|
172
|
-
color: `${ButtonColor.CUSTOM}`,
|
|
173
|
-
roundedSize: `${ContainerRoundedSize.MD}`,
|
|
174
|
-
textAlign: `${ButtonTextAlign.CENTER}`,
|
|
175
|
-
isFullWidth: false
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
/**
|
|
179
|
-
* Button Component - A comprehensive, accessible button component
|
|
180
|
-
*
|
|
181
|
-
* Features:
|
|
182
|
-
* - Full accessibility compliance with ARIA attributes
|
|
183
|
-
* - Multiple variants and sizes for different use cases
|
|
184
|
-
* - Icon support (left and right positioning)
|
|
185
|
-
* - Loading states with spinner
|
|
186
|
-
* - Keyboard navigation support
|
|
187
|
-
* - Focus management with visible indicators
|
|
188
|
-
* - Responsive design adaptations
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* ```tsx
|
|
192
|
-
* // Basic button
|
|
193
|
-
* <Button label="Click me">Click me</Button>
|
|
194
|
-
*
|
|
195
|
-
* // Button with icon and loading state
|
|
196
|
-
* <Button
|
|
197
|
-
* label="Save document"
|
|
198
|
-
* Icon={SaveIcon}
|
|
199
|
-
* isLoading={saving}
|
|
200
|
-
* disabled={!hasChanges}
|
|
201
|
-
* >
|
|
202
|
-
* Save
|
|
203
|
-
* </Button>
|
|
204
|
-
*
|
|
205
|
-
* // Destructive action button
|
|
206
|
-
* <Button
|
|
207
|
-
* variant={`${ButtonVariant.OUTLINE}`}
|
|
208
|
-
* color={ButtonColor.DESTRUCTIVE}
|
|
209
|
-
* label="Delete item permanently"
|
|
210
|
-
* aria-describedby="delete-warning"
|
|
211
|
-
* >
|
|
212
|
-
* Delete
|
|
213
|
-
* </Button>
|
|
214
|
-
* ```
|
|
215
|
-
*/
|
|
216
|
-
const Button = ({ variant, size, color, children, Icon, IconRight, iconClassName, isLoading = false, isActive, isSelected, isFullWidth, roundedSize, textAlign, disabled, label, className, type = "button", "aria-describedby": ariaDescribedBy, "aria-expanded": ariaExpanded, "aria-haspopup": ariaHasPopup, "aria-pressed": ariaPressed, ...props }) => {
|
|
217
|
-
const isLink = variant === `${ButtonVariant.LINK}` || variant === `${ButtonVariant.INVISIBLE_LINK}`;
|
|
218
|
-
const isIconOnly = !children && (Icon || IconRight);
|
|
219
|
-
const accessibilityProps = {
|
|
220
|
-
"aria-label": isIconOnly ? label ?? void 0 : void 0,
|
|
221
|
-
"aria-labelledby": !isIconOnly ? void 0 : void 0,
|
|
222
|
-
"aria-describedby": ariaDescribedBy,
|
|
223
|
-
"aria-expanded": ariaExpanded,
|
|
224
|
-
"aria-haspopup": ariaHasPopup,
|
|
225
|
-
"aria-pressed": isActive !== void 0 ? isActive : ariaPressed,
|
|
226
|
-
"aria-busy": isLoading,
|
|
227
|
-
"aria-current": isActive ? "page" : void 0,
|
|
228
|
-
"aria-disabled": disabled || isLoading,
|
|
229
|
-
"aria-selected": isSelected
|
|
230
|
-
};
|
|
231
|
-
const isSquareButton = size === ButtonSize.ICON_SM || size === ButtonSize.ICON_MD || size === ButtonSize.ICON_LG || size === ButtonSize.ICON_XL;
|
|
232
|
-
return /* @__PURE__ */ jsxs("button", {
|
|
233
|
-
disabled: isLoading || disabled,
|
|
234
|
-
role: isLink ? "link" : "button",
|
|
235
|
-
type,
|
|
236
|
-
className: buttonVariants({
|
|
237
|
-
variant,
|
|
238
|
-
size,
|
|
239
|
-
color,
|
|
240
|
-
isFullWidth,
|
|
241
|
-
roundedSize,
|
|
242
|
-
textAlign: textAlign ?? (IconRight ? ButtonTextAlign.LEFT : ButtonTextAlign.CENTER),
|
|
243
|
-
className
|
|
244
|
-
}),
|
|
245
|
-
...accessibilityProps,
|
|
246
|
-
...props,
|
|
247
|
-
children: [
|
|
248
|
-
Icon && !isLoading && /* @__PURE__ */ jsx(Icon, {
|
|
249
|
-
className: buttonIconVariants({
|
|
250
|
-
size,
|
|
251
|
-
className: cn(!isSquareButton && "mr-3", iconClassName)
|
|
252
|
-
}),
|
|
253
|
-
"aria-hidden": "true"
|
|
254
|
-
}),
|
|
255
|
-
/* @__PURE__ */ jsx("div", {
|
|
256
|
-
className: cn("flex items-center justify-center transition-[width] duration-300", isLoading && size === ButtonSize.SM && "w-3", isLoading && size === ButtonSize.MD && "w-4", isLoading && size === ButtonSize.LG && "w-5", isLoading && size === ButtonSize.XL && "w-6"),
|
|
257
|
-
children: /* @__PURE__ */ jsx(Loader, {
|
|
258
|
-
className: buttonIconVariants({
|
|
259
|
-
size,
|
|
260
|
-
className: cn(!isSquareButton && "mr-3", iconClassName)
|
|
261
|
-
}),
|
|
262
|
-
isLoading,
|
|
263
|
-
"aria-hidden": "true",
|
|
264
|
-
"data-testid": "loader"
|
|
265
|
-
})
|
|
266
|
-
}),
|
|
267
|
-
children && /* @__PURE__ */ jsx("span", {
|
|
268
|
-
className: "flex-1 truncate whitespace-nowrap",
|
|
269
|
-
children
|
|
270
|
-
}),
|
|
271
|
-
!children && isIconOnly && /* @__PURE__ */ jsx("span", {
|
|
272
|
-
className: "sr-only",
|
|
273
|
-
children: label
|
|
274
|
-
}),
|
|
275
|
-
IconRight && /* @__PURE__ */ jsx(IconRight, {
|
|
276
|
-
className: buttonIconVariants({
|
|
277
|
-
size,
|
|
278
|
-
className: cn(!isSquareButton && "ml-3", iconClassName)
|
|
279
|
-
}),
|
|
280
|
-
"aria-hidden": "true"
|
|
281
|
-
})
|
|
282
|
-
]
|
|
283
|
-
});
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
//#endregion
|
|
287
|
-
export { Button, ButtonColor, ButtonSize, ButtonTextAlign, ButtonVariant, buttonVariants };
|
|
1
|
+
import{cn as e}from"../../utils/cn.mjs";import{ContainerRoundedSize as t}from"../Container/index.mjs";import{Loader as n}from"../Loader/index.mjs";import{cva as r}from"class-variance-authority";import{jsx as i,jsxs as a}from"react/jsx-runtime";let o=function(e){return e.SM=`sm`,e.MD=`md`,e.LG=`lg`,e.XL=`xl`,e.ICON_SM=`icon-sm`,e.ICON_MD=`icon-md`,e.ICON_LG=`icon-lg`,e.ICON_XL=`icon-xl`,e}({});const s=r(`flex-none shrink-0`,{variants:{size:{[`${o.SM}`]:`size-3`,[`${o.MD}`]:`size-4`,[`${o.LG}`]:`size-5`,[`${o.XL}`]:`size-6`,[`${o.ICON_SM}`]:`size-3`,[`${o.ICON_MD}`]:`size-4`,[`${o.ICON_LG}`]:`size-4`,[`${o.ICON_XL}`]:`size-5`}},defaultVariants:{size:o.MD}});let c=function(e){return e.DEFAULT=`default`,e.NONE=`none`,e.OUTLINE=`outline`,e.LINK=`link`,e.INVISIBLE_LINK=`invisible-link`,e.HOVERABLE=`hoverable`,e.FADE=`fade`,e.INPUT=`input`,e}({}),l=function(e){return e.PRIMARY=`primary`,e.SECONDARY=`secondary`,e.DESTRUCTIVE=`destructive`,e.NEUTRAL=`neutral`,e.LIGHT=`light`,e.DARK=`dark`,e.TEXT=`text`,e.CARD=`card`,e.TEXT_INVERSE=`text-inverse`,e.CURRENT=`current`,e.ERROR=`error`,e.SUCCESS=`success`,e.CUSTOM=`custom`,e}({}),u=function(e){return e.LEFT=`left`,e.CENTER=`center`,e.RIGHT=`right`,e}({});const d=r(`relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50`,{variants:{size:{[`${o.SM}`]:`min-h-7 px-3 text-xs max-md:py-1`,[`${o.MD}`]:`min-h-8 px-6 text-sm max-md:py-2`,[`${o.LG}`]:`min-h-10 px-8 text-lg max-md:py-3`,[`${o.XL}`]:`min-h-11 px-10 text-xl max-md:py-4`,[`${o.ICON_SM}`]:`p-1.5`,[`${o.ICON_MD}`]:`p-1.5`,[`${o.ICON_LG}`]:`p-2`,[`${o.ICON_XL}`]:`p-3`},color:{[`${l.PRIMARY}`]:`hover-primary-500/20 text-primary ring-primary-500/20 *:text-text-light`,[`${l.SECONDARY}`]:`hover-secondary-500/20 text-secondary ring-secondary-500/20 *:text-text-light`,[`${l.DESTRUCTIVE}`]:`hover-destructive-500/20 text-destructive ring-destructive-500/20 *:text-text-light`,[`${l.NEUTRAL}`]:`text-neutral ring-neutral-500/5 *:text-text-light`,[`${l.CARD}`]:`hover-card-500/20 text-card ring-card-500/20 *:text-text-light`,[`${l.LIGHT}`]:`hover-white-500/20 text-white ring-white/20 *:text-text-light`,[`${l.DARK}`]:`text-neutral-800 ring-text-light/50 *:text-text-light`,[`${l.TEXT}`]:`text-text ring-text/20 *:text-text-opposite`,[`${l.CURRENT}`]:`hover-current-500/10 text-current ring-current/10 *:text-text-light`,[`${l.TEXT_INVERSE}`]:`text-text-opposite ring-text-opposite/20 *:text-text`,[`${l.ERROR}`]:`hover-error-500/20 text-error ring-error/20 *:text-text-light`,[`${l.SUCCESS}`]:`hover-success-500/20 text-success ring-success/20 *:text-text-light`,[`${l.CUSTOM}`]:``},roundedSize:{[`${t.NONE}`]:`rounded-none`,[`${t.SM}`]:`rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl`,[`${t.MD}`]:`rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl`,[`${t.LG}`]:`rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl`,[`${t.XL}`]:`rounded-3xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-4xl`,[`${t[`2xl`]}`]:`rounded-4xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[2.5rem]`,[`${t[`3xl`]}`]:`rounded-[2.5rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[3rem]`,[`${t[`4xl`]}`]:`rounded-[3rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[4rem]`,[`${t[`5xl`]}`]:`rounded-[4rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[5rem]`,[`${t.FULL}`]:`rounded-full`},variant:{[`${c.DEFAULT}`]:[`bg-current`,`hover:bg-current/90`,`hover:ring-5`,`aria-selected:ring-5`],[`${c.OUTLINE}`]:[`rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current!`,`hover:bg-current/20 focus-visible:bg-current/20`,`hover:ring-5 focus-visible:ring-5`,`aria-selected:ring-5`],[`${c.NONE}`]:`border-none bg-current/0 text-inherit hover:bg-current/0`,[`${c.LINK}`]:`h-auto justify-start border-inherit bg-transparent px-1 underline-offset-4 *:text-current! hover:bg-transparent hover:underline`,[`${c.INVISIBLE_LINK}`]:`h-auto justify-start border-inherit bg-transparent px-1 underline-offset-4 *:text-current! hover:bg-transparent`,[`${c.HOVERABLE}`]:`rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/20 aria-[current]:bg-current/5`,[`${c.FADE}`]:[`rounded-lg border-none bg-current/10 ring-current/5 transition *:text-current! hover:bg-current/20 aria-[current]:bg-current/5`,`hover:ring-5 focus-visible:ring-5`,`aria-selected:ring-5`],[`${c.INPUT}`]:[`text-text`,`w-full select-text resize-none rounded-2xl text-base shadow-none outline-none supports-[corner-shape:squircle]:rounded-4xl`,`transition-shadow duration-100 md:text-sm`,`ring-0`,`disabled:opacity-50`,`text-text`,`bg-neutral-50 dark:bg-neutral-950`,`ring-neutral-100 dark:ring-neutral-700`,`hover:ring-3`,`aria-selected:ring-4`,`focus-visible:ring-3`,`disabled:ring-0`,`focus-visible:outline-none`,`[box-shadow:none] focus:[box-shadow:none]`,`aria-invalid:border-error`]},textAlign:{[`${u.LEFT}`]:`justify-start text-left`,[`${u.CENTER}`]:`justify-center text-center`,[`${u.RIGHT}`]:`justify-end text-right`},isFullWidth:{true:`w-full`,false:``}},defaultVariants:{variant:`${c.DEFAULT}`,size:`${o.MD}`,color:`${l.CUSTOM}`,roundedSize:`${t.MD}`,textAlign:`${u.CENTER}`,isFullWidth:!1}}),f=({variant:t,size:r,color:l,children:f,Icon:p,IconRight:m,iconClassName:h,isLoading:g=!1,isActive:_,isSelected:v,isFullWidth:y,roundedSize:b,textAlign:x,disabled:S,label:C,className:w,type:T=`button`,"aria-describedby":E,"aria-expanded":D,"aria-haspopup":O,"aria-pressed":k,...A})=>{let j=t===`${c.LINK}`||t===`${c.INVISIBLE_LINK}`,M=!f&&(p||m),N={"aria-label":M?C??void 0:void 0,"aria-labelledby":void 0,"aria-describedby":E,"aria-expanded":D,"aria-haspopup":O,"aria-pressed":_===void 0?k:_,"aria-busy":g,"aria-current":_?`page`:void 0,"aria-disabled":S||g,"aria-selected":v},P=r===o.ICON_SM||r===o.ICON_MD||r===o.ICON_LG||r===o.ICON_XL;return a(`button`,{disabled:g||S,role:j?`link`:`button`,type:T,className:d({variant:t,size:r,color:l,isFullWidth:y,roundedSize:b,textAlign:x??(m?u.LEFT:u.CENTER),className:w}),...N,...A,children:[p&&!g&&i(p,{className:s({size:r,className:e(!P&&`mr-3`,h)}),"aria-hidden":`true`}),i(`div`,{className:e(`flex items-center justify-center transition-[width] duration-300`,g&&r===o.SM&&`w-3`,g&&r===o.MD&&`w-4`,g&&r===o.LG&&`w-5`,g&&r===o.XL&&`w-6`),children:i(n,{className:s({size:r,className:e(!P&&`mr-3`,h)}),isLoading:g,"aria-hidden":`true`,"data-testid":`loader`})}),f&&i(`span`,{className:`flex-1 truncate whitespace-nowrap`,children:f}),!f&&M&&i(`span`,{className:`sr-only`,children:C}),m&&i(m,{className:s({size:r,className:e(!P&&`ml-3`,h)}),"aria-hidden":`true`})]})};export{f as Button,l as ButtonColor,o as ButtonSize,u as ButtonTextAlign,c as ButtonVariant,d as buttonVariants};
|
|
288
2
|
//# sourceMappingURL=Button.mjs.map
|