origam 2.2.1 → 2.3.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/CHANGELOG.md +224 -0
- package/README.md +22 -0
- package/dist/src/assets/css/tokens/dark.css +318 -0
- package/dist/src/assets/css/tokens/light.css +159 -0
- package/dist/src/assets/locales/index.js +2 -2
- package/dist/src/assets/scss/tokens/_dark.scss +159 -0
- package/dist/src/assets/scss/tokens/_light.scss +159 -0
- package/dist/src/components/Bracket/OrigamBracket.vue +530 -0
- package/dist/src/components/Bracket/OrigamBracketCompetitor.vue +210 -0
- package/dist/src/components/Bracket/OrigamBracketMatch.vue +288 -0
- package/dist/src/components/Bracket/OrigamBracketRound.vue +150 -0
- package/dist/src/components/Bracket/index.cjs +34 -0
- package/dist/src/components/Bracket/index.d.ts +4 -0
- package/dist/src/components/Bracket/index.js +4 -0
- package/dist/src/components/ClientOnly/OrigamClientOnly.vue +28 -0
- package/dist/src/components/ClientOnly/index.cjs +13 -0
- package/dist/src/components/ClientOnly/index.d.ts +1 -0
- package/dist/src/components/ClientOnly/index.js +1 -0
- package/dist/src/components/Code/OrigamCode.vue +449 -0
- package/dist/src/components/Code/index.cjs +13 -0
- package/dist/src/components/Code/index.d.ts +1 -0
- package/dist/src/components/Code/index.js +1 -0
- package/dist/src/components/ColorPickerField/OrigamColorPickerField.vue +1 -0
- package/dist/src/components/CommandPalette/OrigamCommandPalette.vue +614 -0
- package/dist/src/components/CommandPalette/index.cjs +13 -0
- package/dist/src/components/CommandPalette/index.d.ts +1 -0
- package/dist/src/components/CommandPalette/index.js +1 -0
- package/dist/src/components/DatePickerField/OrigamDatePickerField.vue +1 -0
- package/dist/src/components/Parallax/OrigamParallax.vue +65 -34
- package/dist/src/components/Parallax/OrigamParallaxLayer.vue +119 -0
- package/dist/src/components/Parallax/index.cjs +7 -0
- package/dist/src/components/Parallax/index.d.ts +1 -0
- package/dist/src/components/Parallax/index.js +1 -0
- package/dist/src/components/PasswordField/OrigamPasswordField.vue +1 -0
- package/dist/src/components/Select/OrigamSelect.vue +1 -0
- package/dist/src/components/SnackbarStack/OrigamSnackbarStack.vue +457 -0
- package/dist/src/components/SnackbarStack/index.cjs +13 -0
- package/dist/src/components/SnackbarStack/index.d.ts +1 -0
- package/dist/src/components/SnackbarStack/index.js +1 -0
- package/dist/src/components/Tabs/OrigamTab.vue +263 -0
- package/dist/src/components/Tabs/OrigamTabPanel.vue +112 -0
- package/dist/src/components/Tabs/OrigamTabPanels.vue +139 -0
- package/dist/src/components/Tabs/OrigamTabs.vue +242 -0
- package/dist/src/components/Tabs/index.cjs +34 -0
- package/dist/src/components/Tabs/index.d.ts +4 -0
- package/dist/src/components/Tabs/index.js +4 -0
- package/dist/src/components/TextField/OrigamTextField.vue +75 -5
- package/dist/src/components/TextareaField/OrigamRichToolbar.vue +284 -0
- package/dist/src/components/TextareaField/OrigamTextareaField.vue +192 -5
- package/dist/src/components/TextareaField/index.cjs +7 -0
- package/dist/src/components/TextareaField/index.d.ts +1 -0
- package/dist/src/components/TextareaField/index.js +1 -0
- package/dist/src/components/index.cjs +66 -0
- package/dist/src/components/index.d.ts +6 -0
- package/dist/src/components/index.js +6 -0
- package/dist/src/composables/Code/code.composable.cjs +98 -0
- package/dist/src/composables/Code/code.composable.d.ts +10 -0
- package/dist/src/composables/Code/code.composable.js +82 -0
- package/dist/src/composables/CommandPalette/command.composable.cjs +53 -0
- package/dist/src/composables/CommandPalette/command.composable.d.ts +37 -0
- package/dist/src/composables/CommandPalette/command.composable.js +46 -0
- package/dist/src/composables/Commons/virtual.composable.cjs +1 -0
- package/dist/src/composables/Commons/virtual.composable.js +1 -0
- package/dist/src/composables/CssSupport/cssSupport.composable.cjs +12 -0
- package/dist/src/composables/CssSupport/cssSupport.composable.d.ts +25 -0
- package/dist/src/composables/CssSupport/cssSupport.composable.js +10 -1
- package/dist/src/composables/DataTable/headers.composable.d.ts +36 -36
- package/dist/src/composables/Mask/index.cjs +16 -0
- package/dist/src/composables/Mask/index.d.ts +1 -0
- package/dist/src/composables/Mask/index.js +1 -0
- package/dist/src/composables/Mask/mask.composable.cjs +57 -0
- package/dist/src/composables/Mask/mask.composable.d.ts +39 -0
- package/dist/src/composables/Mask/mask.composable.js +51 -0
- package/dist/src/composables/Parallax/parallax.composable.cjs +232 -0
- package/dist/src/composables/Parallax/parallax.composable.d.ts +60 -0
- package/dist/src/composables/Parallax/parallax.composable.js +219 -0
- package/dist/src/composables/Responsive/aspect.composable.cjs +6 -1
- package/dist/src/composables/Responsive/aspect.composable.d.ts +10 -0
- package/dist/src/composables/Responsive/aspect.composable.js +6 -1
- package/dist/src/composables/SnackbarStack/snackbar-stack.composable.cjs +102 -0
- package/dist/src/composables/SnackbarStack/snackbar-stack.composable.d.ts +58 -0
- package/dist/src/composables/SnackbarStack/snackbar-stack.composable.js +92 -0
- package/dist/src/composables/Textarea/textarea-rich.composable.cjs +263 -0
- package/dist/src/composables/Textarea/textarea-rich.composable.d.ts +41 -0
- package/dist/src/composables/Textarea/textarea-rich.composable.js +257 -0
- package/dist/src/composables/index.cjs +66 -0
- package/dist/src/composables/index.d.ts +6 -0
- package/dist/src/composables/index.js +6 -0
- package/dist/src/consts/Bracket/bracket.const.cjs +12 -0
- package/dist/src/consts/Bracket/bracket.const.d.ts +34 -0
- package/dist/src/consts/Bracket/bracket.const.js +15 -0
- package/dist/src/consts/Code/code.const.cjs +26 -0
- package/dist/src/consts/Code/code.const.d.ts +40 -0
- package/dist/src/consts/Code/code.const.js +35 -0
- package/dist/src/consts/CommandPalette/command-palette.const.cjs +10 -0
- package/dist/src/consts/CommandPalette/command-palette.const.d.ts +16 -0
- package/dist/src/consts/CommandPalette/command-palette.const.js +7 -0
- package/dist/src/consts/Mask/built-in-patterns.const.cjs +66 -0
- package/dist/src/consts/Mask/built-in-patterns.const.d.ts +20 -0
- package/dist/src/consts/Mask/built-in-patterns.const.js +60 -0
- package/dist/src/consts/Parallax/parallax-layer.const.cjs +7 -0
- package/dist/src/consts/Parallax/parallax-layer.const.d.ts +3 -0
- package/dist/src/consts/Parallax/parallax-layer.const.js +1 -0
- package/dist/src/consts/SnackbarStack/snackbar-stack.const.cjs +12 -0
- package/dist/src/consts/SnackbarStack/snackbar-stack.const.d.ts +33 -0
- package/dist/src/consts/SnackbarStack/snackbar-stack.const.js +18 -0
- package/dist/src/consts/Tabs/tabs.const.cjs +9 -0
- package/dist/src/consts/Tabs/tabs.const.d.ts +23 -0
- package/dist/src/consts/Tabs/tabs.const.js +3 -0
- package/dist/src/consts/Textarea/textarea.const.cjs +28 -0
- package/dist/src/consts/Textarea/textarea.const.d.ts +38 -0
- package/dist/src/consts/Textarea/textarea.const.js +65 -0
- package/dist/src/consts/Theme/theme.const.cjs +15 -0
- package/dist/src/consts/Theme/theme.const.d.ts +9 -0
- package/dist/src/consts/Theme/theme.const.js +9 -0
- package/dist/src/consts/index.cjs +99 -0
- package/dist/src/consts/index.d.ts +9 -0
- package/dist/src/consts/index.js +9 -0
- package/dist/src/enums/Bracket/bracket-match-status.enum.cjs +13 -0
- package/dist/src/enums/Bracket/bracket-match-status.enum.d.ts +6 -0
- package/dist/src/enums/Bracket/bracket-match-status.enum.js +7 -0
- package/dist/src/enums/Bracket/bracket-variant.enum.cjs +12 -0
- package/dist/src/enums/Bracket/bracket-variant.enum.d.ts +5 -0
- package/dist/src/enums/Bracket/bracket-variant.enum.js +6 -0
- package/dist/src/enums/Code/code-lang.enum.cjs +23 -0
- package/dist/src/enums/Code/code-lang.enum.d.ts +25 -0
- package/dist/src/enums/Code/code-lang.enum.js +17 -0
- package/dist/src/enums/Code/code-theme.enum.cjs +12 -0
- package/dist/src/enums/Code/code-theme.enum.d.ts +12 -0
- package/dist/src/enums/Code/code-theme.enum.js +6 -0
- package/dist/src/enums/Mask/mask.enum.cjs +28 -0
- package/dist/src/enums/Mask/mask.enum.d.ts +36 -0
- package/dist/src/enums/Mask/mask.enum.js +22 -0
- package/dist/src/enums/Parallax/parallax-direction.enum.cjs +12 -0
- package/dist/src/enums/Parallax/parallax-direction.enum.d.ts +5 -0
- package/dist/src/enums/Parallax/parallax-direction.enum.js +6 -0
- package/dist/src/enums/Parallax/parallax-easing.enum.cjs +12 -0
- package/dist/src/enums/Parallax/parallax-easing.enum.d.ts +5 -0
- package/dist/src/enums/Parallax/parallax-easing.enum.js +6 -0
- package/dist/src/enums/Tabs/tab-variant.enum.cjs +12 -0
- package/dist/src/enums/Tabs/tab-variant.enum.d.ts +5 -0
- package/dist/src/enums/Tabs/tab-variant.enum.js +6 -0
- package/dist/src/enums/Textarea/textarea-mode.enum.cjs +11 -0
- package/dist/src/enums/Textarea/textarea-mode.enum.d.ts +13 -0
- package/dist/src/enums/Textarea/textarea-mode.enum.js +5 -0
- package/dist/src/enums/Textarea/textarea-output.enum.cjs +11 -0
- package/dist/src/enums/Textarea/textarea-output.enum.d.ts +14 -0
- package/dist/src/enums/Textarea/textarea-output.enum.js +5 -0
- package/dist/src/enums/Textarea/textarea-toolbar-command.enum.cjs +21 -0
- package/dist/src/enums/Textarea/textarea-toolbar-command.enum.d.ts +20 -0
- package/dist/src/enums/Textarea/textarea-toolbar-command.enum.js +15 -0
- package/dist/src/enums/Textarea/textarea-toolbar-position.enum.cjs +12 -0
- package/dist/src/enums/Textarea/textarea-toolbar-position.enum.d.ts +10 -0
- package/dist/src/enums/Textarea/textarea-toolbar-position.enum.js +6 -0
- package/dist/src/enums/index.cjs +132 -0
- package/dist/src/enums/index.d.ts +12 -0
- package/dist/src/enums/index.js +12 -0
- package/dist/src/interfaces/Bracket/bracket-competitor-component.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket-competitor-component.interface.d.ts +53 -0
- package/dist/src/interfaces/Bracket/bracket-competitor-component.interface.js +0 -0
- package/dist/src/interfaces/Bracket/bracket-competitor.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket-competitor.interface.d.ts +25 -0
- package/dist/src/interfaces/Bracket/bracket-competitor.interface.js +0 -0
- package/dist/src/interfaces/Bracket/bracket-match-component.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket-match-component.interface.d.ts +45 -0
- package/dist/src/interfaces/Bracket/bracket-match-component.interface.js +0 -0
- package/dist/src/interfaces/Bracket/bracket-match.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket-match.interface.d.ts +51 -0
- package/dist/src/interfaces/Bracket/bracket-match.interface.js +0 -0
- package/dist/src/interfaces/Bracket/bracket-round-component.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket-round-component.interface.d.ts +26 -0
- package/dist/src/interfaces/Bracket/bracket-round-component.interface.js +0 -0
- package/dist/src/interfaces/Bracket/bracket-round.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket-round.interface.d.ts +27 -0
- package/dist/src/interfaces/Bracket/bracket-round.interface.js +0 -0
- package/dist/src/interfaces/Bracket/bracket.interface.cjs +1 -0
- package/dist/src/interfaces/Bracket/bracket.interface.d.ts +71 -0
- package/dist/src/interfaces/Bracket/bracket.interface.js +0 -0
- package/dist/src/interfaces/Code/code.interface.cjs +1 -0
- package/dist/src/interfaces/Code/code.interface.d.ts +99 -0
- package/dist/src/interfaces/Code/code.interface.js +0 -0
- package/dist/src/interfaces/CommandPalette/command-palette.interface.cjs +1 -0
- package/dist/src/interfaces/CommandPalette/command-palette.interface.d.ts +57 -0
- package/dist/src/interfaces/CommandPalette/command-palette.interface.js +0 -0
- package/dist/src/interfaces/CommandPalette/command.interface.cjs +1 -0
- package/dist/src/interfaces/CommandPalette/command.interface.d.ts +51 -0
- package/dist/src/interfaces/CommandPalette/command.interface.js +0 -0
- package/dist/src/interfaces/Mask/mask-options.interface.cjs +1 -0
- package/dist/src/interfaces/Mask/mask-options.interface.d.ts +48 -0
- package/dist/src/interfaces/Mask/mask-options.interface.js +0 -0
- package/dist/src/interfaces/Nuxt/nuxt-module.interface.cjs +1 -0
- package/dist/src/interfaces/Nuxt/nuxt-module.interface.d.ts +73 -0
- package/dist/src/interfaces/Nuxt/nuxt-module.interface.js +0 -0
- package/dist/src/interfaces/Parallax/parallax-layer.interface.cjs +1 -0
- package/dist/src/interfaces/Parallax/parallax-layer.interface.d.ts +39 -0
- package/dist/src/interfaces/Parallax/parallax-layer.interface.js +0 -0
- package/dist/src/interfaces/Parallax/parallax.interface.d.ts +83 -3
- package/dist/src/interfaces/SnackbarStack/snackbar-stack-item.interface.cjs +1 -0
- package/dist/src/interfaces/SnackbarStack/snackbar-stack-item.interface.d.ts +60 -0
- package/dist/src/interfaces/SnackbarStack/snackbar-stack-item.interface.js +0 -0
- package/dist/src/interfaces/SnackbarStack/snackbar-stack.interface.cjs +1 -0
- package/dist/src/interfaces/SnackbarStack/snackbar-stack.interface.d.ts +60 -0
- package/dist/src/interfaces/SnackbarStack/snackbar-stack.interface.js +0 -0
- package/dist/src/interfaces/Tabs/tab-panel.interface.cjs +1 -0
- package/dist/src/interfaces/Tabs/tab-panel.interface.d.ts +12 -0
- package/dist/src/interfaces/Tabs/tab-panel.interface.js +0 -0
- package/dist/src/interfaces/Tabs/tab-panels.interface.cjs +1 -0
- package/dist/src/interfaces/Tabs/tab-panels.interface.d.ts +28 -0
- package/dist/src/interfaces/Tabs/tab-panels.interface.js +0 -0
- package/dist/src/interfaces/Tabs/tab.interface.cjs +1 -0
- package/dist/src/interfaces/Tabs/tab.interface.d.ts +18 -0
- package/dist/src/interfaces/Tabs/tab.interface.js +0 -0
- package/dist/src/interfaces/Tabs/tabs.interface.cjs +1 -0
- package/dist/src/interfaces/Tabs/tabs.interface.d.ts +26 -0
- package/dist/src/interfaces/Tabs/tabs.interface.js +0 -0
- package/dist/src/interfaces/TextField/text-field.interface.d.ts +21 -1
- package/dist/src/interfaces/Textarea/textarea-rich.interface.cjs +1 -0
- package/dist/src/interfaces/Textarea/textarea-rich.interface.d.ts +41 -0
- package/dist/src/interfaces/Textarea/textarea-rich.interface.js +0 -0
- package/dist/src/interfaces/Textarea/textarea-toolbar.interface.cjs +1 -0
- package/dist/src/interfaces/Textarea/textarea-toolbar.interface.d.ts +31 -0
- package/dist/src/interfaces/Textarea/textarea-toolbar.interface.js +0 -0
- package/dist/src/interfaces/TextareaField/textarea-field.interface.d.ts +38 -1
- package/dist/src/interfaces/index.cjs +231 -0
- package/dist/src/interfaces/index.d.ts +21 -0
- package/dist/src/interfaces/index.js +21 -0
- package/dist/src/nuxt/index.cjs +13 -0
- package/dist/src/nuxt/index.d.ts +2 -0
- package/dist/src/nuxt/index.js +1 -0
- package/dist/src/nuxt/module.cjs +74 -0
- package/dist/src/nuxt/module.d.ts +31 -0
- package/dist/src/nuxt/module.js +68 -0
- package/dist/src/nuxt/plugin.client.cjs +44 -0
- package/dist/src/nuxt/plugin.client.d.ts +2 -0
- package/dist/src/nuxt/plugin.client.js +36 -0
- package/dist/src/nuxt/plugin.server.cjs +51 -0
- package/dist/src/nuxt/plugin.server.d.ts +2 -0
- package/dist/src/nuxt/plugin.server.js +45 -0
- package/dist/src/types/Bracket/bracket-direction.type.cjs +1 -0
- package/dist/src/types/Bracket/bracket-direction.type.d.ts +13 -0
- package/dist/src/types/Bracket/bracket-direction.type.js +0 -0
- package/dist/src/types/Bracket/bracket-match-status.type.cjs +1 -0
- package/dist/src/types/Bracket/bracket-match-status.type.d.ts +2 -0
- package/dist/src/types/Bracket/bracket-match-status.type.js +0 -0
- package/dist/src/types/Bracket/bracket-round-side.type.cjs +1 -0
- package/dist/src/types/Bracket/bracket-round-side.type.d.ts +12 -0
- package/dist/src/types/Bracket/bracket-round-side.type.js +0 -0
- package/dist/src/types/Bracket/bracket-variant.type.cjs +1 -0
- package/dist/src/types/Bracket/bracket-variant.type.d.ts +2 -0
- package/dist/src/types/Bracket/bracket-variant.type.js +0 -0
- package/dist/src/types/Code/code-lang.type.cjs +1 -0
- package/dist/src/types/Code/code-lang.type.d.ts +2 -0
- package/dist/src/types/Code/code-lang.type.js +0 -0
- package/dist/src/types/Code/code-theme.type.cjs +1 -0
- package/dist/src/types/Code/code-theme.type.d.ts +2 -0
- package/dist/src/types/Code/code-theme.type.js +0 -0
- package/dist/src/types/CommandPalette/command-palette-hotkey.type.cjs +1 -0
- package/dist/src/types/CommandPalette/command-palette-hotkey.type.d.ts +5 -0
- package/dist/src/types/CommandPalette/command-palette-hotkey.type.js +0 -0
- package/dist/src/types/Mask/built-in-pattern.type.cjs +1 -0
- package/dist/src/types/Mask/built-in-pattern.type.d.ts +7 -0
- package/dist/src/types/Mask/built-in-pattern.type.js +0 -0
- package/dist/src/types/Mask/mask.type.cjs +1 -0
- package/dist/src/types/Mask/mask.type.d.ts +19 -0
- package/dist/src/types/Mask/mask.type.js +0 -0
- package/dist/src/types/Mask/pattern-validator.type.cjs +1 -0
- package/dist/src/types/Mask/pattern-validator.type.d.ts +16 -0
- package/dist/src/types/Mask/pattern-validator.type.js +0 -0
- package/dist/src/types/Parallax/parallax-direction.type.cjs +1 -0
- package/dist/src/types/Parallax/parallax-direction.type.d.ts +2 -0
- package/dist/src/types/Parallax/parallax-direction.type.js +0 -0
- package/dist/src/types/Parallax/parallax-easing.type.cjs +1 -0
- package/dist/src/types/Parallax/parallax-easing.type.d.ts +2 -0
- package/dist/src/types/Parallax/parallax-easing.type.js +0 -0
- package/dist/src/types/SnackbarStack/snackbar-stack-direction.type.cjs +1 -0
- package/dist/src/types/SnackbarStack/snackbar-stack-direction.type.d.ts +11 -0
- package/dist/src/types/SnackbarStack/snackbar-stack-direction.type.js +0 -0
- package/dist/src/types/SnackbarStack/snackbar-stack-location.type.cjs +1 -0
- package/dist/src/types/SnackbarStack/snackbar-stack-location.type.d.ts +9 -0
- package/dist/src/types/SnackbarStack/snackbar-stack-location.type.js +0 -0
- package/dist/src/types/SnackbarStack/snackbar-stack.type.cjs +1 -0
- package/dist/src/types/SnackbarStack/snackbar-stack.type.d.ts +2 -0
- package/dist/src/types/SnackbarStack/snackbar-stack.type.js +0 -0
- package/dist/src/types/Tabs/tab-panel.type.cjs +1 -0
- package/dist/src/types/Tabs/tab-panel.type.d.ts +2 -0
- package/dist/src/types/Tabs/tab-panel.type.js +0 -0
- package/dist/src/types/Tabs/tab-panels.type.cjs +1 -0
- package/dist/src/types/Tabs/tab-panels.type.d.ts +2 -0
- package/dist/src/types/Tabs/tab-panels.type.js +0 -0
- package/dist/src/types/Tabs/tab-variant.type.cjs +1 -0
- package/dist/src/types/Tabs/tab-variant.type.d.ts +2 -0
- package/dist/src/types/Tabs/tab-variant.type.js +0 -0
- package/dist/src/types/Tabs/tab.type.cjs +1 -0
- package/dist/src/types/Tabs/tab.type.d.ts +2 -0
- package/dist/src/types/Tabs/tab.type.js +0 -0
- package/dist/src/types/Tabs/tabs.type.cjs +1 -0
- package/dist/src/types/Tabs/tabs.type.d.ts +2 -0
- package/dist/src/types/Tabs/tabs.type.js +0 -0
- package/dist/src/types/Textarea/textarea-mode.type.cjs +1 -0
- package/dist/src/types/Textarea/textarea-mode.type.d.ts +2 -0
- package/dist/src/types/Textarea/textarea-mode.type.js +0 -0
- package/dist/src/types/Textarea/textarea-output.type.cjs +1 -0
- package/dist/src/types/Textarea/textarea-output.type.d.ts +2 -0
- package/dist/src/types/Textarea/textarea-output.type.js +0 -0
- package/dist/src/types/Textarea/textarea-toolbar-command.type.cjs +1 -0
- package/dist/src/types/Textarea/textarea-toolbar-command.type.d.ts +2 -0
- package/dist/src/types/Textarea/textarea-toolbar-command.type.js +0 -0
- package/dist/src/types/Textarea/textarea-toolbar-position.type.cjs +1 -0
- package/dist/src/types/Textarea/textarea-toolbar-position.type.d.ts +2 -0
- package/dist/src/types/Textarea/textarea-toolbar-position.type.js +0 -0
- package/dist/src/types/index.cjs +264 -0
- package/dist/src/types/index.d.ts +24 -0
- package/dist/src/types/index.js +24 -0
- package/dist/src/types/tokens.type.d.ts +1 -1
- package/dist/src/utils/Code/parse-highlight-lines.util.cjs +34 -0
- package/dist/src/utils/Code/parse-highlight-lines.util.d.ts +24 -0
- package/dist/src/utils/Code/parse-highlight-lines.util.js +28 -0
- package/dist/src/utils/CommandPalette/fuzzy-match.util.cjs +84 -0
- package/dist/src/utils/CommandPalette/fuzzy-match.util.d.ts +51 -0
- package/dist/src/utils/CommandPalette/fuzzy-match.util.js +62 -0
- package/dist/src/utils/Mask/apply-mask.util.cjs +120 -0
- package/dist/src/utils/Mask/apply-mask.util.d.ts +13 -0
- package/dist/src/utils/Mask/apply-mask.util.js +91 -0
- package/dist/src/utils/Mask/index.cjs +38 -0
- package/dist/src/utils/Mask/index.d.ts +3 -0
- package/dist/src/utils/Mask/index.js +3 -0
- package/dist/src/utils/Mask/resolve-mask-config.util.cjs +31 -0
- package/dist/src/utils/Mask/resolve-mask-config.util.d.ts +15 -0
- package/dist/src/utils/Mask/resolve-mask-config.util.js +21 -0
- package/dist/src/utils/Mask/validate-pattern.util.cjs +92 -0
- package/dist/src/utils/Mask/validate-pattern.util.d.ts +41 -0
- package/dist/src/utils/Mask/validate-pattern.util.js +81 -0
- package/dist/src/utils/Textarea/html-to-markdown.util.cjs +85 -0
- package/dist/src/utils/Textarea/html-to-markdown.util.d.ts +21 -0
- package/dist/src/utils/Textarea/html-to-markdown.util.js +78 -0
- package/dist/src/utils/Textarea/sanitize-html.util.cjs +82 -0
- package/dist/src/utils/Textarea/sanitize-html.util.d.ts +17 -0
- package/dist/src/utils/Textarea/sanitize-html.util.js +83 -0
- package/dist/src/utils/index.cjs +77 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.js +7 -0
- package/package.json +13 -3
- package/dist/src/globals.d.ts +0 -172
- package/dist/src/shims.d.ts +0 -36
- package/dist/src/vite-env.d.ts +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isFrDateValid = isFrDateValid;
|
|
7
|
+
exports.isIbanValid = isIbanValid;
|
|
8
|
+
exports.isIsoDateValid = isIsoDateValid;
|
|
9
|
+
exports.isLuhnValid = isLuhnValid;
|
|
10
|
+
exports.isUsDateValid = isUsDateValid;
|
|
11
|
+
exports.validatePattern = validatePattern;
|
|
12
|
+
var _enums = require("../../enums/index.cjs");
|
|
13
|
+
function isLuhnValid(digits) {
|
|
14
|
+
if (!digits) return false;
|
|
15
|
+
if (!/^\d+$/.test(digits)) return false;
|
|
16
|
+
let sum = 0;
|
|
17
|
+
let alternate = false;
|
|
18
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
19
|
+
let n = digits.charCodeAt(i) - 48;
|
|
20
|
+
if (alternate) {
|
|
21
|
+
n *= 2;
|
|
22
|
+
if (n > 9) n -= 9;
|
|
23
|
+
}
|
|
24
|
+
sum += n;
|
|
25
|
+
alternate = !alternate;
|
|
26
|
+
}
|
|
27
|
+
return sum % 10 === 0;
|
|
28
|
+
}
|
|
29
|
+
function isIbanValid(raw) {
|
|
30
|
+
if (!raw) return false;
|
|
31
|
+
const clean = raw.replace(/\s+/g, "").toUpperCase();
|
|
32
|
+
if (clean.length < 4 || clean.length > 34) return false;
|
|
33
|
+
if (!/^[A-Z0-9]+$/.test(clean)) return false;
|
|
34
|
+
const rearranged = clean.slice(4) + clean.slice(0, 4);
|
|
35
|
+
let numeric = "";
|
|
36
|
+
for (const c of rearranged) {
|
|
37
|
+
if (c >= "0" && c <= "9") {
|
|
38
|
+
numeric += c;
|
|
39
|
+
} else {
|
|
40
|
+
numeric += String(c.charCodeAt(0) - 55);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let remainder = 0;
|
|
44
|
+
for (const ch of numeric) {
|
|
45
|
+
remainder = (remainder * 10 + (ch.charCodeAt(0) - 48)) % 97;
|
|
46
|
+
}
|
|
47
|
+
return remainder === 1;
|
|
48
|
+
}
|
|
49
|
+
function isRealDate(y, m, d) {
|
|
50
|
+
if (m < 1 || m > 12) return false;
|
|
51
|
+
if (d < 1 || d > 31) return false;
|
|
52
|
+
const date = new Date(Date.UTC(y, m - 1, d));
|
|
53
|
+
return date.getUTCFullYear() === y && date.getUTCMonth() === m - 1 && date.getUTCDate() === d;
|
|
54
|
+
}
|
|
55
|
+
function isIsoDateValid(unmasked) {
|
|
56
|
+
if (!/^\d{8}$/.test(unmasked)) return false;
|
|
57
|
+
const y = Number(unmasked.slice(0, 4));
|
|
58
|
+
const m = Number(unmasked.slice(4, 6));
|
|
59
|
+
const d = Number(unmasked.slice(6, 8));
|
|
60
|
+
return isRealDate(y, m, d);
|
|
61
|
+
}
|
|
62
|
+
function isFrDateValid(unmasked) {
|
|
63
|
+
if (!/^\d{8}$/.test(unmasked)) return false;
|
|
64
|
+
const d = Number(unmasked.slice(0, 2));
|
|
65
|
+
const m = Number(unmasked.slice(2, 4));
|
|
66
|
+
const y = Number(unmasked.slice(4, 8));
|
|
67
|
+
return isRealDate(y, m, d);
|
|
68
|
+
}
|
|
69
|
+
function isUsDateValid(unmasked) {
|
|
70
|
+
if (!/^\d{8}$/.test(unmasked)) return false;
|
|
71
|
+
const m = Number(unmasked.slice(0, 2));
|
|
72
|
+
const d = Number(unmasked.slice(2, 4));
|
|
73
|
+
const y = Number(unmasked.slice(4, 8));
|
|
74
|
+
return isRealDate(y, m, d);
|
|
75
|
+
}
|
|
76
|
+
const VALIDATORS = {
|
|
77
|
+
[_enums.PATTERN_VALIDATOR.LUHN]: isLuhnValid,
|
|
78
|
+
[_enums.PATTERN_VALIDATOR.IBAN]: isIbanValid,
|
|
79
|
+
[_enums.PATTERN_VALIDATOR.DATE_ISO]: isIsoDateValid,
|
|
80
|
+
[_enums.PATTERN_VALIDATOR.DATE_FR]: isFrDateValid,
|
|
81
|
+
[_enums.PATTERN_VALIDATOR.DATE_US]: isUsDateValid
|
|
82
|
+
};
|
|
83
|
+
function validatePattern(unmasked, validator) {
|
|
84
|
+
if (typeof validator === "function") {
|
|
85
|
+
return validator(unmasked);
|
|
86
|
+
}
|
|
87
|
+
const fn = VALIDATORS[validator];
|
|
88
|
+
if (!fn) {
|
|
89
|
+
throw new Error(`[origam:mask] unknown validator "${validator}"`);
|
|
90
|
+
}
|
|
91
|
+
return fn(unmasked);
|
|
92
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { TPatternValidator } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Standard Luhn checksum used to validate credit-card,
|
|
4
|
+
* IMEI, SIRET-like number sequences.
|
|
5
|
+
*
|
|
6
|
+
* 1. Walk digits from right to left.
|
|
7
|
+
* 2. Double every second digit; subtract 9 if > 9.
|
|
8
|
+
* 3. Sum the result. A valid number's sum mod 10 == 0.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isLuhnValid(digits: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Standard IBAN mod-97 check (ISO 13616).
|
|
13
|
+
*
|
|
14
|
+
* 1. Move the first 4 chars to the end.
|
|
15
|
+
* 2. Replace every letter with `letter - 'A' + 10` as a
|
|
16
|
+
* decimal pair.
|
|
17
|
+
* 3. The resulting big integer mod 97 must equal 1.
|
|
18
|
+
*
|
|
19
|
+
* We compute the mod incrementally to avoid BigInt.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isIbanValid(raw: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* `YYYYMMDD` — accepts the unmasked iso digits.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isIsoDateValid(unmasked: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* `DDMMYYYY` — accepts the unmasked fr digits.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isFrDateValid(unmasked: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* `MMDDYYYY` — accepts the unmasked us digits.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isUsDateValid(unmasked: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Resolve and execute a validator on an UNMASKED value.
|
|
36
|
+
*
|
|
37
|
+
* - `string` → looked up in `VALIDATORS`. Unknown names
|
|
38
|
+
* throw — typo-prevention.
|
|
39
|
+
* - `function` → called as-is.
|
|
40
|
+
*/
|
|
41
|
+
export declare function validatePattern(unmasked: string, validator: TPatternValidator): boolean;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { PATTERN_VALIDATOR } from "../../enums/index.js";
|
|
2
|
+
export function isLuhnValid(digits) {
|
|
3
|
+
if (!digits) return false;
|
|
4
|
+
if (!/^\d+$/.test(digits)) return false;
|
|
5
|
+
let sum = 0;
|
|
6
|
+
let alternate = false;
|
|
7
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
8
|
+
let n = digits.charCodeAt(i) - 48;
|
|
9
|
+
if (alternate) {
|
|
10
|
+
n *= 2;
|
|
11
|
+
if (n > 9) n -= 9;
|
|
12
|
+
}
|
|
13
|
+
sum += n;
|
|
14
|
+
alternate = !alternate;
|
|
15
|
+
}
|
|
16
|
+
return sum % 10 === 0;
|
|
17
|
+
}
|
|
18
|
+
export function isIbanValid(raw) {
|
|
19
|
+
if (!raw) return false;
|
|
20
|
+
const clean = raw.replace(/\s+/g, "").toUpperCase();
|
|
21
|
+
if (clean.length < 4 || clean.length > 34) return false;
|
|
22
|
+
if (!/^[A-Z0-9]+$/.test(clean)) return false;
|
|
23
|
+
const rearranged = clean.slice(4) + clean.slice(0, 4);
|
|
24
|
+
let numeric = "";
|
|
25
|
+
for (const c of rearranged) {
|
|
26
|
+
if (c >= "0" && c <= "9") {
|
|
27
|
+
numeric += c;
|
|
28
|
+
} else {
|
|
29
|
+
numeric += String(c.charCodeAt(0) - 55);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
let remainder = 0;
|
|
33
|
+
for (const ch of numeric) {
|
|
34
|
+
remainder = (remainder * 10 + (ch.charCodeAt(0) - 48)) % 97;
|
|
35
|
+
}
|
|
36
|
+
return remainder === 1;
|
|
37
|
+
}
|
|
38
|
+
function isRealDate(y, m, d) {
|
|
39
|
+
if (m < 1 || m > 12) return false;
|
|
40
|
+
if (d < 1 || d > 31) return false;
|
|
41
|
+
const date = new Date(Date.UTC(y, m - 1, d));
|
|
42
|
+
return date.getUTCFullYear() === y && date.getUTCMonth() === m - 1 && date.getUTCDate() === d;
|
|
43
|
+
}
|
|
44
|
+
export function isIsoDateValid(unmasked) {
|
|
45
|
+
if (!/^\d{8}$/.test(unmasked)) return false;
|
|
46
|
+
const y = Number(unmasked.slice(0, 4));
|
|
47
|
+
const m = Number(unmasked.slice(4, 6));
|
|
48
|
+
const d = Number(unmasked.slice(6, 8));
|
|
49
|
+
return isRealDate(y, m, d);
|
|
50
|
+
}
|
|
51
|
+
export function isFrDateValid(unmasked) {
|
|
52
|
+
if (!/^\d{8}$/.test(unmasked)) return false;
|
|
53
|
+
const d = Number(unmasked.slice(0, 2));
|
|
54
|
+
const m = Number(unmasked.slice(2, 4));
|
|
55
|
+
const y = Number(unmasked.slice(4, 8));
|
|
56
|
+
return isRealDate(y, m, d);
|
|
57
|
+
}
|
|
58
|
+
export function isUsDateValid(unmasked) {
|
|
59
|
+
if (!/^\d{8}$/.test(unmasked)) return false;
|
|
60
|
+
const m = Number(unmasked.slice(0, 2));
|
|
61
|
+
const d = Number(unmasked.slice(2, 4));
|
|
62
|
+
const y = Number(unmasked.slice(4, 8));
|
|
63
|
+
return isRealDate(y, m, d);
|
|
64
|
+
}
|
|
65
|
+
const VALIDATORS = {
|
|
66
|
+
[PATTERN_VALIDATOR.LUHN]: isLuhnValid,
|
|
67
|
+
[PATTERN_VALIDATOR.IBAN]: isIbanValid,
|
|
68
|
+
[PATTERN_VALIDATOR.DATE_ISO]: isIsoDateValid,
|
|
69
|
+
[PATTERN_VALIDATOR.DATE_FR]: isFrDateValid,
|
|
70
|
+
[PATTERN_VALIDATOR.DATE_US]: isUsDateValid
|
|
71
|
+
};
|
|
72
|
+
export function validatePattern(unmasked, validator) {
|
|
73
|
+
if (typeof validator === "function") {
|
|
74
|
+
return validator(unmasked);
|
|
75
|
+
}
|
|
76
|
+
const fn = VALIDATORS[validator];
|
|
77
|
+
if (!fn) {
|
|
78
|
+
throw new Error(`[origam:mask] unknown validator "${validator}"`);
|
|
79
|
+
}
|
|
80
|
+
return fn(unmasked);
|
|
81
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.htmlToMarkdown = htmlToMarkdown;
|
|
7
|
+
function htmlToMarkdown(input) {
|
|
8
|
+
if (input == null || input === "") return "";
|
|
9
|
+
if (typeof input !== "string") return "";
|
|
10
|
+
if (typeof DOMParser === "undefined") return input;
|
|
11
|
+
const parser = new DOMParser();
|
|
12
|
+
const doc = parser.parseFromString(`<div id="__origam_md_root__">${input}</div>`, "text/html");
|
|
13
|
+
const root = doc.getElementById("__origam_md_root__");
|
|
14
|
+
if (!root) return "";
|
|
15
|
+
return collapseBlankLines(walk(root).trim());
|
|
16
|
+
}
|
|
17
|
+
function walk(node) {
|
|
18
|
+
if (node.nodeType === 3) return node.data;
|
|
19
|
+
if (node.nodeType !== 1) return "";
|
|
20
|
+
const el = node;
|
|
21
|
+
const tag = el.tagName.toLowerCase();
|
|
22
|
+
const inner = Array.from(el.childNodes).map(walk).join("");
|
|
23
|
+
switch (tag) {
|
|
24
|
+
case "strong":
|
|
25
|
+
case "b":
|
|
26
|
+
return inner ? `**${inner}**` : "";
|
|
27
|
+
case "em":
|
|
28
|
+
case "i":
|
|
29
|
+
return inner ? `*${inner}*` : "";
|
|
30
|
+
case "u":
|
|
31
|
+
return inner ? `<u>${inner}</u>` : "";
|
|
32
|
+
case "code":
|
|
33
|
+
return inner ? `\`${inner}\`` : "";
|
|
34
|
+
case "a":
|
|
35
|
+
{
|
|
36
|
+
const href = el.getAttribute("href") ?? "";
|
|
37
|
+
if (!inner) return "";
|
|
38
|
+
if (!href) return inner;
|
|
39
|
+
return `[${inner}](${href})`;
|
|
40
|
+
}
|
|
41
|
+
case "br":
|
|
42
|
+
return "\n";
|
|
43
|
+
case "p":
|
|
44
|
+
return inner ? `
|
|
45
|
+
|
|
46
|
+
${inner}
|
|
47
|
+
|
|
48
|
+
` : "";
|
|
49
|
+
case "h1":
|
|
50
|
+
return inner ? `
|
|
51
|
+
|
|
52
|
+
# ${inner}
|
|
53
|
+
|
|
54
|
+
` : "";
|
|
55
|
+
case "h2":
|
|
56
|
+
return inner ? `
|
|
57
|
+
|
|
58
|
+
## ${inner}
|
|
59
|
+
|
|
60
|
+
` : "";
|
|
61
|
+
case "h3":
|
|
62
|
+
return inner ? `
|
|
63
|
+
|
|
64
|
+
### ${inner}
|
|
65
|
+
|
|
66
|
+
` : "";
|
|
67
|
+
case "ul":
|
|
68
|
+
return "\n" + listItems(el, "- ") + "\n";
|
|
69
|
+
case "ol":
|
|
70
|
+
return "\n" + listItems(el, idx => `${idx + 1}. `) + "\n";
|
|
71
|
+
case "li":
|
|
72
|
+
return inner;
|
|
73
|
+
default:
|
|
74
|
+
return inner;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function listItems(parent, prefix) {
|
|
78
|
+
return Array.from(parent.children).filter(c => c.tagName.toLowerCase() === "li").map((li, idx) => {
|
|
79
|
+
const head = typeof prefix === "string" ? prefix : prefix(idx);
|
|
80
|
+
return head + Array.from(li.childNodes).map(walk).join("");
|
|
81
|
+
}).join("\n");
|
|
82
|
+
}
|
|
83
|
+
function collapseBlankLines(s) {
|
|
84
|
+
return s.replace(/\n{3,}/g, "\n\n");
|
|
85
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight HTML → Markdown converter used by `OrigamTextareaField`
|
|
3
|
+
* when `output="markdown"`. The input is expected to be pre-sanitised
|
|
4
|
+
* HTML (see `sanitizeHtml`).
|
|
5
|
+
*
|
|
6
|
+
* The conversion is intentionally conservative — only the tags emitted
|
|
7
|
+
* by the rich-toolbar are translated:
|
|
8
|
+
* <strong>/<b> → **text**
|
|
9
|
+
* <em>/<i> → *text*
|
|
10
|
+
* <u> → <u>text</u> (no canonical Markdown for underline)
|
|
11
|
+
* <a href="X">Y</a> → [Y](X)
|
|
12
|
+
* <ul><li>…</li></ul> → - …
|
|
13
|
+
* <ol><li>…</li></ol> → 1. …
|
|
14
|
+
* <h1>/<h2>/<h3> → # / ## / ###
|
|
15
|
+
* <code> → `text`
|
|
16
|
+
* <p> → paragraph (double newline)
|
|
17
|
+
* <br> → single newline
|
|
18
|
+
*
|
|
19
|
+
* Anything else is unwrapped (text content kept).
|
|
20
|
+
*/
|
|
21
|
+
export declare function htmlToMarkdown(input: string): string;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export function htmlToMarkdown(input) {
|
|
2
|
+
if (input == null || input === "") return "";
|
|
3
|
+
if (typeof input !== "string") return "";
|
|
4
|
+
if (typeof DOMParser === "undefined") return input;
|
|
5
|
+
const parser = new DOMParser();
|
|
6
|
+
const doc = parser.parseFromString(`<div id="__origam_md_root__">${input}</div>`, "text/html");
|
|
7
|
+
const root = doc.getElementById("__origam_md_root__");
|
|
8
|
+
if (!root) return "";
|
|
9
|
+
return collapseBlankLines(walk(root).trim());
|
|
10
|
+
}
|
|
11
|
+
function walk(node) {
|
|
12
|
+
if (node.nodeType === 3) return node.data;
|
|
13
|
+
if (node.nodeType !== 1) return "";
|
|
14
|
+
const el = node;
|
|
15
|
+
const tag = el.tagName.toLowerCase();
|
|
16
|
+
const inner = Array.from(el.childNodes).map(walk).join("");
|
|
17
|
+
switch (tag) {
|
|
18
|
+
case "strong":
|
|
19
|
+
case "b":
|
|
20
|
+
return inner ? `**${inner}**` : "";
|
|
21
|
+
case "em":
|
|
22
|
+
case "i":
|
|
23
|
+
return inner ? `*${inner}*` : "";
|
|
24
|
+
case "u":
|
|
25
|
+
return inner ? `<u>${inner}</u>` : "";
|
|
26
|
+
case "code":
|
|
27
|
+
return inner ? `\`${inner}\`` : "";
|
|
28
|
+
case "a": {
|
|
29
|
+
const href = el.getAttribute("href") ?? "";
|
|
30
|
+
if (!inner) return "";
|
|
31
|
+
if (!href) return inner;
|
|
32
|
+
return `[${inner}](${href})`;
|
|
33
|
+
}
|
|
34
|
+
case "br":
|
|
35
|
+
return "\n";
|
|
36
|
+
case "p":
|
|
37
|
+
return inner ? `
|
|
38
|
+
|
|
39
|
+
${inner}
|
|
40
|
+
|
|
41
|
+
` : "";
|
|
42
|
+
case "h1":
|
|
43
|
+
return inner ? `
|
|
44
|
+
|
|
45
|
+
# ${inner}
|
|
46
|
+
|
|
47
|
+
` : "";
|
|
48
|
+
case "h2":
|
|
49
|
+
return inner ? `
|
|
50
|
+
|
|
51
|
+
## ${inner}
|
|
52
|
+
|
|
53
|
+
` : "";
|
|
54
|
+
case "h3":
|
|
55
|
+
return inner ? `
|
|
56
|
+
|
|
57
|
+
### ${inner}
|
|
58
|
+
|
|
59
|
+
` : "";
|
|
60
|
+
case "ul":
|
|
61
|
+
return "\n" + listItems(el, "- ") + "\n";
|
|
62
|
+
case "ol":
|
|
63
|
+
return "\n" + listItems(el, (idx) => `${idx + 1}. `) + "\n";
|
|
64
|
+
case "li":
|
|
65
|
+
return inner;
|
|
66
|
+
default:
|
|
67
|
+
return inner;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function listItems(parent, prefix) {
|
|
71
|
+
return Array.from(parent.children).filter((c) => c.tagName.toLowerCase() === "li").map((li, idx) => {
|
|
72
|
+
const head = typeof prefix === "string" ? prefix : prefix(idx);
|
|
73
|
+
return head + Array.from(li.childNodes).map(walk).join("");
|
|
74
|
+
}).join("\n");
|
|
75
|
+
}
|
|
76
|
+
function collapseBlankLines(s) {
|
|
77
|
+
return s.replace(/\n{3,}/g, "\n\n");
|
|
78
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.sanitizeHtml = sanitizeHtml;
|
|
7
|
+
var _consts = require("../../consts/index.cjs");
|
|
8
|
+
function sanitizeHtml(input) {
|
|
9
|
+
if (input == null || input === "") return "";
|
|
10
|
+
if (typeof input !== "string") return "";
|
|
11
|
+
if (typeof DOMParser === "undefined") return input;
|
|
12
|
+
const parser = new DOMParser();
|
|
13
|
+
const doc = parser.parseFromString(`<div id="__origam_root__">${input}</div>`, "text/html");
|
|
14
|
+
const root = doc.getElementById("__origam_root__");
|
|
15
|
+
if (!root) return "";
|
|
16
|
+
walk(root);
|
|
17
|
+
return root.innerHTML;
|
|
18
|
+
}
|
|
19
|
+
function walk(node) {
|
|
20
|
+
const children = Array.from(node.children);
|
|
21
|
+
for (const child of children) {
|
|
22
|
+
const tag = child.tagName.toLowerCase();
|
|
23
|
+
if (_consts.BLOCKED_TAGS.includes(tag)) {
|
|
24
|
+
child.remove();
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!_consts.ALLOWED_TAGS.includes(tag)) {
|
|
28
|
+
walk(child);
|
|
29
|
+
unwrap(child);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
sanitizeAttributes(child, tag);
|
|
33
|
+
walk(child);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function unwrap(el) {
|
|
37
|
+
const parent = el.parentNode;
|
|
38
|
+
if (!parent) {
|
|
39
|
+
el.remove();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
while (el.firstChild) parent.insertBefore(el.firstChild, el);
|
|
43
|
+
parent.removeChild(el);
|
|
44
|
+
}
|
|
45
|
+
function sanitizeAttributes(el, tag) {
|
|
46
|
+
const allowed = _consts.ALLOWED_ATTRIBUTES[tag] ?? [];
|
|
47
|
+
const attrs = Array.from(el.attributes);
|
|
48
|
+
for (const attr of attrs) {
|
|
49
|
+
const name = attr.name.toLowerCase();
|
|
50
|
+
if (name.startsWith("on")) {
|
|
51
|
+
el.removeAttribute(attr.name);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (!allowed.includes(name)) {
|
|
55
|
+
el.removeAttribute(attr.name);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (name === "href") {
|
|
59
|
+
if (!isSafeUrl(attr.value)) {
|
|
60
|
+
el.removeAttribute(attr.name);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
;
|
|
64
|
+
el.setAttribute("rel", "noopener noreferrer nofollow");
|
|
65
|
+
el.setAttribute("target", "_blank");
|
|
66
|
+
}
|
|
67
|
+
if (name === "class") {
|
|
68
|
+
const cleaned = filterClassList(attr.value);
|
|
69
|
+
if (cleaned === "") el.removeAttribute(attr.name);else el.setAttribute(attr.name, cleaned);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function isSafeUrl(raw) {
|
|
74
|
+
const value = String(raw).trim();
|
|
75
|
+
if (value === "") return false;
|
|
76
|
+
if (value.startsWith("/") || value.startsWith("#") || value.startsWith("?")) return true;
|
|
77
|
+
const lower = value.toLowerCase();
|
|
78
|
+
return _consts.ALLOWED_URL_SCHEMES.some(scheme => lower.startsWith(scheme));
|
|
79
|
+
}
|
|
80
|
+
function filterClassList(value) {
|
|
81
|
+
return String(value).split(/\s+/).filter(cls => cls.startsWith(_consts.ALLOWED_CLASS_PREFIX)).join(" ");
|
|
82
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-house HTML sanitiser used by `OrigamTextareaField` in `mode="rich"`.
|
|
3
|
+
*
|
|
4
|
+
* It walks a `DOMParser`-built DOM, then for each element:
|
|
5
|
+
* - drops the subtree if the tag is in `BLOCKED_TAGS`;
|
|
6
|
+
* - keeps the tag (filtering attributes) when it's in `ALLOWED_TAGS`;
|
|
7
|
+
* - otherwise unwraps it (children promoted to the parent).
|
|
8
|
+
*
|
|
9
|
+
* On `<a>` the href is validated against `ALLOWED_URL_SCHEMES`. Any
|
|
10
|
+
* attribute starting with `on` is dropped before per-tag filtering —
|
|
11
|
+
* defense in depth against event-handler smuggling.
|
|
12
|
+
*
|
|
13
|
+
* SSR safe: returns the raw input untouched when `DOMParser` is missing
|
|
14
|
+
* (the rich mode never runs server-side because the contenteditable
|
|
15
|
+
* surface is gated behind `onMounted`).
|
|
16
|
+
*/
|
|
17
|
+
export declare function sanitizeHtml(input: string): string;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ALLOWED_ATTRIBUTES,
|
|
3
|
+
ALLOWED_CLASS_PREFIX,
|
|
4
|
+
ALLOWED_TAGS,
|
|
5
|
+
ALLOWED_URL_SCHEMES,
|
|
6
|
+
BLOCKED_TAGS
|
|
7
|
+
} from "../../consts/index.js";
|
|
8
|
+
export function sanitizeHtml(input) {
|
|
9
|
+
if (input == null || input === "") return "";
|
|
10
|
+
if (typeof input !== "string") return "";
|
|
11
|
+
if (typeof DOMParser === "undefined") return input;
|
|
12
|
+
const parser = new DOMParser();
|
|
13
|
+
const doc = parser.parseFromString(`<div id="__origam_root__">${input}</div>`, "text/html");
|
|
14
|
+
const root = doc.getElementById("__origam_root__");
|
|
15
|
+
if (!root) return "";
|
|
16
|
+
walk(root);
|
|
17
|
+
return root.innerHTML;
|
|
18
|
+
}
|
|
19
|
+
function walk(node) {
|
|
20
|
+
const children = Array.from(node.children);
|
|
21
|
+
for (const child of children) {
|
|
22
|
+
const tag = child.tagName.toLowerCase();
|
|
23
|
+
if (BLOCKED_TAGS.includes(tag)) {
|
|
24
|
+
child.remove();
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (!ALLOWED_TAGS.includes(tag)) {
|
|
28
|
+
walk(child);
|
|
29
|
+
unwrap(child);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
sanitizeAttributes(child, tag);
|
|
33
|
+
walk(child);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function unwrap(el) {
|
|
37
|
+
const parent = el.parentNode;
|
|
38
|
+
if (!parent) {
|
|
39
|
+
el.remove();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
while (el.firstChild) parent.insertBefore(el.firstChild, el);
|
|
43
|
+
parent.removeChild(el);
|
|
44
|
+
}
|
|
45
|
+
function sanitizeAttributes(el, tag) {
|
|
46
|
+
const allowed = ALLOWED_ATTRIBUTES[tag] ?? [];
|
|
47
|
+
const attrs = Array.from(el.attributes);
|
|
48
|
+
for (const attr of attrs) {
|
|
49
|
+
const name = attr.name.toLowerCase();
|
|
50
|
+
if (name.startsWith("on")) {
|
|
51
|
+
el.removeAttribute(attr.name);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (!allowed.includes(name)) {
|
|
55
|
+
el.removeAttribute(attr.name);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (name === "href") {
|
|
59
|
+
if (!isSafeUrl(attr.value)) {
|
|
60
|
+
el.removeAttribute(attr.name);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
;
|
|
64
|
+
el.setAttribute("rel", "noopener noreferrer nofollow");
|
|
65
|
+
el.setAttribute("target", "_blank");
|
|
66
|
+
}
|
|
67
|
+
if (name === "class") {
|
|
68
|
+
const cleaned = filterClassList(attr.value);
|
|
69
|
+
if (cleaned === "") el.removeAttribute(attr.name);
|
|
70
|
+
else el.setAttribute(attr.name, cleaned);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function isSafeUrl(raw) {
|
|
75
|
+
const value = String(raw).trim();
|
|
76
|
+
if (value === "") return false;
|
|
77
|
+
if (value.startsWith("/") || value.startsWith("#") || value.startsWith("?")) return true;
|
|
78
|
+
const lower = value.toLowerCase();
|
|
79
|
+
return ALLOWED_URL_SCHEMES.some((scheme) => lower.startsWith(scheme));
|
|
80
|
+
}
|
|
81
|
+
function filterClassList(value) {
|
|
82
|
+
return String(value).split(/\s+/).filter((cls) => cls.startsWith(ALLOWED_CLASS_PREFIX)).join(" ");
|
|
83
|
+
}
|
package/dist/src/utils/index.cjs
CHANGED
|
@@ -585,4 +585,81 @@ Object.keys(_chart).forEach(function (key) {
|
|
|
585
585
|
return _chart[key];
|
|
586
586
|
}
|
|
587
587
|
});
|
|
588
|
+
});
|
|
589
|
+
var _fuzzyMatch = require("./CommandPalette/fuzzy-match.util.cjs");
|
|
590
|
+
Object.keys(_fuzzyMatch).forEach(function (key) {
|
|
591
|
+
if (key === "default" || key === "__esModule") return;
|
|
592
|
+
if (key in exports && exports[key] === _fuzzyMatch[key]) return;
|
|
593
|
+
Object.defineProperty(exports, key, {
|
|
594
|
+
enumerable: true,
|
|
595
|
+
get: function () {
|
|
596
|
+
return _fuzzyMatch[key];
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
});
|
|
600
|
+
var _parseHighlightLines = require("./Code/parse-highlight-lines.util.cjs");
|
|
601
|
+
Object.keys(_parseHighlightLines).forEach(function (key) {
|
|
602
|
+
if (key === "default" || key === "__esModule") return;
|
|
603
|
+
if (key in exports && exports[key] === _parseHighlightLines[key]) return;
|
|
604
|
+
Object.defineProperty(exports, key, {
|
|
605
|
+
enumerable: true,
|
|
606
|
+
get: function () {
|
|
607
|
+
return _parseHighlightLines[key];
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
});
|
|
611
|
+
var _sanitizeHtml = require("./Textarea/sanitize-html.util.cjs");
|
|
612
|
+
Object.keys(_sanitizeHtml).forEach(function (key) {
|
|
613
|
+
if (key === "default" || key === "__esModule") return;
|
|
614
|
+
if (key in exports && exports[key] === _sanitizeHtml[key]) return;
|
|
615
|
+
Object.defineProperty(exports, key, {
|
|
616
|
+
enumerable: true,
|
|
617
|
+
get: function () {
|
|
618
|
+
return _sanitizeHtml[key];
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
});
|
|
622
|
+
var _htmlToMarkdown = require("./Textarea/html-to-markdown.util.cjs");
|
|
623
|
+
Object.keys(_htmlToMarkdown).forEach(function (key) {
|
|
624
|
+
if (key === "default" || key === "__esModule") return;
|
|
625
|
+
if (key in exports && exports[key] === _htmlToMarkdown[key]) return;
|
|
626
|
+
Object.defineProperty(exports, key, {
|
|
627
|
+
enumerable: true,
|
|
628
|
+
get: function () {
|
|
629
|
+
return _htmlToMarkdown[key];
|
|
630
|
+
}
|
|
631
|
+
});
|
|
632
|
+
});
|
|
633
|
+
var _applyMask = require("./Mask/apply-mask.util.cjs");
|
|
634
|
+
Object.keys(_applyMask).forEach(function (key) {
|
|
635
|
+
if (key === "default" || key === "__esModule") return;
|
|
636
|
+
if (key in exports && exports[key] === _applyMask[key]) return;
|
|
637
|
+
Object.defineProperty(exports, key, {
|
|
638
|
+
enumerable: true,
|
|
639
|
+
get: function () {
|
|
640
|
+
return _applyMask[key];
|
|
641
|
+
}
|
|
642
|
+
});
|
|
643
|
+
});
|
|
644
|
+
var _resolveMaskConfig = require("./Mask/resolve-mask-config.util.cjs");
|
|
645
|
+
Object.keys(_resolveMaskConfig).forEach(function (key) {
|
|
646
|
+
if (key === "default" || key === "__esModule") return;
|
|
647
|
+
if (key in exports && exports[key] === _resolveMaskConfig[key]) return;
|
|
648
|
+
Object.defineProperty(exports, key, {
|
|
649
|
+
enumerable: true,
|
|
650
|
+
get: function () {
|
|
651
|
+
return _resolveMaskConfig[key];
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
});
|
|
655
|
+
var _validatePattern = require("./Mask/validate-pattern.util.cjs");
|
|
656
|
+
Object.keys(_validatePattern).forEach(function (key) {
|
|
657
|
+
if (key === "default" || key === "__esModule") return;
|
|
658
|
+
if (key in exports && exports[key] === _validatePattern[key]) return;
|
|
659
|
+
Object.defineProperty(exports, key, {
|
|
660
|
+
enumerable: true,
|
|
661
|
+
get: function () {
|
|
662
|
+
return _validatePattern[key];
|
|
663
|
+
}
|
|
664
|
+
});
|
|
588
665
|
});
|
|
@@ -51,3 +51,10 @@ export * from './DataTable/items.util';
|
|
|
51
51
|
export * from './DataTable/sort.util';
|
|
52
52
|
export * from './DataTable/group.util';
|
|
53
53
|
export * from './Charts/chart.util';
|
|
54
|
+
export * from './CommandPalette/fuzzy-match.util';
|
|
55
|
+
export * from './Code/parse-highlight-lines.util';
|
|
56
|
+
export * from './Textarea/sanitize-html.util';
|
|
57
|
+
export * from './Textarea/html-to-markdown.util';
|
|
58
|
+
export * from './Mask/apply-mask.util';
|
|
59
|
+
export * from './Mask/resolve-mask-config.util';
|
|
60
|
+
export * from './Mask/validate-pattern.util';
|
package/dist/src/utils/index.js
CHANGED
|
@@ -51,3 +51,10 @@ export * from "./DataTable/items.util.js";
|
|
|
51
51
|
export * from "./DataTable/sort.util.js";
|
|
52
52
|
export * from "./DataTable/group.util.js";
|
|
53
53
|
export * from "./Charts/chart.util.js";
|
|
54
|
+
export * from "./CommandPalette/fuzzy-match.util.js";
|
|
55
|
+
export * from "./Code/parse-highlight-lines.util.js";
|
|
56
|
+
export * from "./Textarea/sanitize-html.util.js";
|
|
57
|
+
export * from "./Textarea/html-to-markdown.util.js";
|
|
58
|
+
export * from "./Mask/apply-mask.util.js";
|
|
59
|
+
export * from "./Mask/resolve-mask-config.util.js";
|
|
60
|
+
export * from "./Mask/validate-pattern.util.js";
|