@xplor-education/core-stencil-components 3.1.2 → 3.1.4
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/components/index.js +28 -3
- package/components/index.js.map +1 -1
- package/components/{p-B49oUO_9.js → p-AzuDJugb.js} +3 -3
- package/components/{p-B49oUO_9.js.map → p-AzuDJugb.js.map} +1 -1
- package/components/{p-D4jVa8dE.js → p-BQ6aLuGP.js} +4 -4
- package/components/{p-D4jVa8dE.js.map → p-BQ6aLuGP.js.map} +1 -1
- package/components/{p-VIJbFoA4.js → p-BZQ63ULK.js} +3 -3
- package/components/{p-VIJbFoA4.js.map → p-BZQ63ULK.js.map} +1 -1
- package/components/{p-BRWe4TXp.js → p-C-gHaxf1.js} +3 -3
- package/components/p-C-gHaxf1.js.map +1 -0
- package/components/{p-Bs_ocvfe.js → p-CyGsSa4H.js} +7 -4
- package/components/p-CyGsSa4H.js.map +1 -0
- package/components/{p-B3zR7peH.js → p-oanCZPh6.js} +4 -4
- package/components/{p-B3zR7peH.js.map → p-oanCZPh6.js.map} +1 -1
- package/components/xplor-alert-message.js +2 -2
- package/components/xplor-avatar-and-name.js +2 -2
- package/components/xplor-avatar.js +1 -1
- package/components/xplor-badge-active.js +1 -1
- package/components/xplor-badge-archived.js +1 -1
- package/components/xplor-badge-deleted.js +1 -1
- package/components/xplor-badge-expired.js +1 -1
- package/components/xplor-badge-inactive.js +1 -1
- package/components/xplor-badge-recalled.js +1 -1
- package/components/xplor-badge-upcoming.js +1 -1
- package/components/xplor-badge-waitlist.js +1 -1
- package/components/xplor-badge.js +1 -1
- package/components/xplor-btn-back-to-parent.js +1 -1
- package/components/xplor-btn-back.js +1 -1
- package/components/xplor-btn-icon.js +1 -1
- package/components/xplor-btn-toggle-group.js +1 -1
- package/components/xplor-btn-toggle-secondary.js +1 -1
- package/components/xplor-btn-toggle.js +1 -1
- package/components/xplor-btn-tooltip.js +3 -3
- package/components/xplor-button.js +1 -1
- package/components/xplor-canvas-editor.d.ts +11 -0
- package/components/xplor-canvas-editor.js +369 -0
- package/components/xplor-canvas-editor.js.map +1 -0
- package/components/xplor-chat-widget.js +3 -3
- package/components/xplor-checkbox.js +1 -1
- package/components/xplor-combobox.js +5 -5
- package/components/xplor-datatable.js +2 -2
- package/components/xplor-date-picker.js +5 -5
- package/components/xplor-drag-and-drop-input.js +26 -5
- package/components/xplor-drag-and-drop-input.js.map +1 -1
- package/components/xplor-dropdown.js +1 -1
- package/components/xplor-expansion-panel.js +4 -4
- package/components/xplor-expansion-panels.js +1 -1
- package/components/xplor-file-upload.js +2 -2
- package/components/xplor-inline-checkbox.js +2 -2
- package/components/xplor-inline-date-picker.js +1 -1
- package/components/xplor-inline-switch.js +1 -1
- package/components/xplor-input-file.js +1 -1
- package/components/xplor-input-search.js +2 -2
- package/components/xplor-input-select.js +2 -2
- package/components/xplor-input-send.js +3 -3
- package/components/xplor-input-text-area.js +2 -2
- package/components/xplor-input-text-secondary.js +2 -2
- package/components/xplor-input-text.js +2 -2
- package/components/xplor-input-title.js +1 -1
- package/components/xplor-links.js +1 -1
- package/components/xplor-modal-persistent.js +2 -2
- package/components/xplor-modal.js +1 -1
- package/components/xplor-nav-tabs.js +2 -2
- package/components/xplor-radio-btn.js +2 -2
- package/components/xplor-rich-text-editor.d.ts +11 -0
- package/components/xplor-rich-text-editor.js +23754 -0
- package/components/xplor-rich-text-editor.js.map +1 -0
- package/components/xplor-section-card.js +2 -2
- package/components/xplor-section-heading.js +2 -2
- package/components/xplor-table.js +5 -5
- package/components/xplor-text-bubble.js +2 -2
- package/components/xplor-text-field.js +2 -2
- package/components/xplor-time-picker.js +6 -6
- package/components/xplor-tooltip.js +1 -1
- package/dist/cjs/{index-BjAapk2n.js → index--_m3aUsf.js} +32 -7
- package/dist/cjs/index--_m3aUsf.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/xplor-alert-dialog_60.cjs.entry.js +29457 -0
- package/dist/cjs/xplor-alert-dialog_60.cjs.entry.js.map +1 -0
- package/dist/cjs/xplor-component-library.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/xplor-alert-message/xplor-alert-message.js +2 -2
- package/dist/collection/components/xplor-avatar/xplor-avatar.js +2 -2
- package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.js +1 -1
- package/dist/collection/components/xplor-badge/xplor-badge.js +1 -1
- package/dist/collection/components/xplor-badge-active/xplor-badge-active.js +1 -1
- package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.js +1 -1
- package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.js +1 -1
- package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.js +1 -1
- package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.js +1 -1
- package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.js +1 -1
- package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.js +1 -1
- package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.js +1 -1
- package/dist/collection/components/xplor-btn-back/xplor-btn-back.js +1 -1
- package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.js +1 -1
- package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.js +1 -1
- package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.js +1 -1
- package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.js +1 -1
- package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.js +1 -1
- package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.js +1 -1
- package/dist/collection/components/xplor-button/xplor-button.css +8 -3
- package/dist/collection/components/xplor-button/xplor-button.js +23 -1
- package/dist/collection/components/xplor-button/xplor-button.js.map +1 -1
- package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.css +1224 -0
- package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.js +520 -0
- package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.js.map +1 -0
- package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.stories.js +280 -0
- package/dist/collection/components/xplor-canvas-editor/xplor-canvas-editor.stories.js.map +1 -0
- package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.js +1 -1
- package/dist/collection/components/xplor-checkbox/xplor-checkbox.js +1 -1
- package/dist/collection/components/xplor-combobox/xplor-combobox.js +5 -5
- package/dist/collection/components/xplor-datatable/xplor-datatable.js +2 -2
- package/dist/collection/components/xplor-date-picker/xplor-date-picker.js +4 -4
- package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.css +62 -29
- package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js +25 -4
- package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js.map +1 -1
- package/dist/collection/components/xplor-dropdown/xplor-dropdown.js +1 -1
- package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.js +4 -4
- package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.js +1 -1
- package/dist/collection/components/xplor-file-upload/xplor-file-upload.js +2 -2
- package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.js +2 -2
- package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.js +1 -1
- package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.js +1 -1
- package/dist/collection/components/xplor-input-file/xplor-input-file.js +1 -1
- package/dist/collection/components/xplor-input-search/xplor-input-search.js +2 -2
- package/dist/collection/components/xplor-input-select/xplor-input-select.js +2 -2
- package/dist/collection/components/xplor-input-send/xplor-input-send.js +2 -2
- package/dist/collection/components/xplor-input-text/xplor-input-text.js +2 -2
- package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.js +2 -2
- package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.js +2 -2
- package/dist/collection/components/xplor-input-title/xplor-input-title.js +1 -1
- package/dist/collection/components/xplor-links/xplor-links.js +1 -1
- package/dist/collection/components/xplor-modal/xplor-modal.css +10 -10
- package/dist/collection/components/xplor-modal-persistent/xplor-modal-persistent.js +1 -1
- package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.js +2 -2
- package/dist/collection/components/xplor-radio-btn/xplor-radio-btn.js +2 -2
- package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.css +1445 -0
- package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.js +800 -0
- package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.js.map +1 -0
- package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.js +260 -0
- package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.js.map +1 -0
- package/dist/collection/components/xplor-section-card/xplor-section-card.js +2 -2
- package/dist/collection/components/xplor-section-heading/xplor-section-heading.js +2 -2
- package/dist/collection/components/xplor-table/xplor-table.js +5 -5
- package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.js +2 -2
- package/dist/collection/components/xplor-text-field/xplor-text-field.js +2 -2
- package/dist/collection/components/xplor-time-picker/xplor-time-picker.js +6 -6
- package/dist/collection/components/xplor-tooltip/xplor-tooltip.js +2 -2
- package/dist/collection/utils/slate-legacy-converter.js +223 -0
- package/dist/collection/utils/slate-legacy-converter.js.map +1 -0
- package/dist/components/index.js +28 -3
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-04oMLTZR.js → p-B7FEf2_x.js} +3 -3
- package/dist/components/p-B7FEf2_x.js.map +1 -0
- package/dist/components/{p--zhT6rvJ.js → p-DGaHlr-k.js} +4 -4
- package/dist/components/{p--zhT6rvJ.js.map → p-DGaHlr-k.js.map} +1 -1
- package/dist/components/{p-B5rS_jjI.js → p-DWaTb2EJ.js} +7 -4
- package/dist/components/p-DWaTb2EJ.js.map +1 -0
- package/dist/components/{p-J41B2nOt.js → p-DroQBoSo.js} +3 -3
- package/dist/components/{p-J41B2nOt.js.map → p-DroQBoSo.js.map} +1 -1
- package/dist/components/{p-DQ8MCJFX.js → p-TfYzqGwr.js} +3 -3
- package/dist/components/{p-DQ8MCJFX.js.map → p-TfYzqGwr.js.map} +1 -1
- package/dist/components/{p-DbQ6ZNvh.js → p-vl-J3tKJ.js} +4 -4
- package/dist/components/{p-DbQ6ZNvh.js.map → p-vl-J3tKJ.js.map} +1 -1
- package/dist/components/xplor-alert-message.js +2 -2
- package/dist/components/xplor-avatar-and-name.js +2 -2
- package/dist/components/xplor-avatar.js +1 -1
- package/dist/components/xplor-badge-active.js +1 -1
- package/dist/components/xplor-badge-archived.js +1 -1
- package/dist/components/xplor-badge-deleted.js +1 -1
- package/dist/components/xplor-badge-expired.js +1 -1
- package/dist/components/xplor-badge-inactive.js +1 -1
- package/dist/components/xplor-badge-recalled.js +1 -1
- package/dist/components/xplor-badge-upcoming.js +1 -1
- package/dist/components/xplor-badge-waitlist.js +1 -1
- package/dist/components/xplor-badge.js +1 -1
- package/dist/components/xplor-btn-back-to-parent.js +1 -1
- package/dist/components/xplor-btn-back.js +1 -1
- package/dist/components/xplor-btn-icon.js +1 -1
- package/dist/components/xplor-btn-toggle-group.js +1 -1
- package/dist/components/xplor-btn-toggle-secondary.js +1 -1
- package/dist/components/xplor-btn-toggle.js +1 -1
- package/dist/components/xplor-btn-tooltip.js +3 -3
- package/dist/components/xplor-button.js +1 -1
- package/dist/components/xplor-canvas-editor.d.ts +11 -0
- package/dist/components/xplor-canvas-editor.js +370 -0
- package/dist/components/xplor-canvas-editor.js.map +1 -0
- package/dist/components/xplor-chat-widget.js +3 -3
- package/dist/components/xplor-checkbox.js +1 -1
- package/dist/components/xplor-combobox.js +5 -5
- package/dist/components/xplor-datatable.js +2 -2
- package/dist/components/xplor-date-picker.js +5 -5
- package/dist/components/xplor-drag-and-drop-input.js +26 -5
- package/dist/components/xplor-drag-and-drop-input.js.map +1 -1
- package/dist/components/xplor-dropdown.js +1 -1
- package/dist/components/xplor-expansion-panel.js +4 -4
- package/dist/components/xplor-expansion-panels.js +1 -1
- package/dist/components/xplor-file-upload.js +2 -2
- package/dist/components/xplor-inline-checkbox.js +2 -2
- package/dist/components/xplor-inline-date-picker.js +1 -1
- package/dist/components/xplor-inline-switch.js +1 -1
- package/dist/components/xplor-input-file.js +1 -1
- package/dist/components/xplor-input-search.js +2 -2
- package/dist/components/xplor-input-select.js +2 -2
- package/dist/components/xplor-input-send.js +3 -3
- package/dist/components/xplor-input-text-area.js +2 -2
- package/dist/components/xplor-input-text-secondary.js +2 -2
- package/dist/components/xplor-input-text.js +2 -2
- package/dist/components/xplor-input-title.js +1 -1
- package/dist/components/xplor-links.js +1 -1
- package/dist/components/xplor-modal-persistent.js +2 -2
- package/dist/components/xplor-modal.js +1 -1
- package/dist/components/xplor-nav-tabs.js +2 -2
- package/dist/components/xplor-radio-btn.js +2 -2
- package/dist/components/xplor-rich-text-editor.d.ts +11 -0
- package/dist/components/xplor-rich-text-editor.js +23755 -0
- package/dist/components/xplor-rich-text-editor.js.map +1 -0
- package/dist/components/xplor-section-card.js +2 -2
- package/dist/components/xplor-section-heading.js +2 -2
- package/dist/components/xplor-table.js +5 -5
- package/dist/components/xplor-text-bubble.js +2 -2
- package/dist/components/xplor-text-field.js +2 -2
- package/dist/components/xplor-time-picker.js +6 -6
- package/dist/components/xplor-tooltip.js +1 -1
- package/dist/esm/{index-KRfMjDC2.js → index-QwDfQUbw.js} +32 -7
- package/dist/esm/index-QwDfQUbw.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/xplor-alert-dialog_60.entry.js +29396 -0
- package/dist/esm/xplor-alert-dialog_60.entry.js.map +1 -0
- package/dist/esm/xplor-component-library.js +3 -3
- package/dist/hydrate/index.js +24231 -96
- package/dist/hydrate/index.mjs +24231 -96
- package/dist/types/components/xplor-button/xplor-button.d.ts +2 -0
- package/dist/types/components/xplor-canvas-editor/xplor-canvas-editor.d.ts +63 -0
- package/dist/types/components/xplor-canvas-editor/xplor-canvas-editor.stories.d.ts +84 -0
- package/dist/types/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.d.ts +6 -0
- package/dist/types/components/xplor-rich-text-editor/xplor-rich-text-editor.d.ts +129 -0
- package/dist/types/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.d.ts +105 -0
- package/dist/types/components.d.ts +286 -0
- package/dist/types/utils/slate-legacy-converter.d.ts +83 -0
- package/dist/xplor-component-library/p-0d477ec2.entry.js +2 -0
- package/dist/xplor-component-library/p-0d477ec2.entry.js.map +1 -0
- package/dist/xplor-component-library/p-QwDfQUbw.js +3 -0
- package/dist/xplor-component-library/p-QwDfQUbw.js.map +1 -0
- package/dist/xplor-component-library/xplor-component-library.css +1 -1
- package/dist/xplor-component-library/xplor-component-library.esm.js +1 -1
- package/package.json +7 -1
- package/components/p-BRWe4TXp.js.map +0 -1
- package/components/p-Bs_ocvfe.js.map +0 -1
- package/dist/cjs/index-BjAapk2n.js.map +0 -1
- package/dist/cjs/xplor-alert-dialog_58.cjs.entry.js +0 -5395
- package/dist/cjs/xplor-alert-dialog_58.cjs.entry.js.map +0 -1
- package/dist/components/p-04oMLTZR.js.map +0 -1
- package/dist/components/p-B5rS_jjI.js.map +0 -1
- package/dist/esm/index-KRfMjDC2.js.map +0 -1
- package/dist/esm/xplor-alert-dialog_58.entry.js +0 -5336
- package/dist/esm/xplor-alert-dialog_58.entry.js.map +0 -1
- package/dist/xplor-component-library/p-7ecb45dd.entry.js +0 -2
- package/dist/xplor-component-library/p-7ecb45dd.entry.js.map +0 -1
- package/dist/xplor-component-library/p-KRfMjDC2.js +0 -3
- package/dist/xplor-component-library/p-KRfMjDC2.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xplor-rich-text-editor.js","sourceRoot":"","sources":["../../../src/components/xplor-rich-text-editor/xplor-rich-text-editor.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n State,\n Watch,\n Element,\n Method,\n} from '@stencil/core';\nimport { Editor } from '@tiptap/core';\nimport StarterKit from '@tiptap/starter-kit';\nimport Underline from '@tiptap/extension-underline';\nimport Link from '@tiptap/extension-link';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport CharacterCount from '@tiptap/extension-character-count';\nimport {\n convertLegacySlateJsonToHtml,\n} from '../../utils/slate-legacy-converter';\n\nlet rteIdCounter = 0;\n\n/** Payload emitted by xplorChange */\nexport interface RteChangePayload {\n html: string;\n text: string;\n isEmpty: boolean;\n}\n\n@Component({\n tag: 'xplor-rich-text-editor',\n styleUrl: 'xplor-rich-text-editor.scss',\n scoped: true,\n})\nexport class XplorRichTextEditor {\n // -------------------------------------------------------------------------\n // Internal refs & IDs\n // -------------------------------------------------------------------------\n\n @Element() el: HTMLElement;\n\n private editor: Editor | null = null;\n private editorEl!: HTMLDivElement;\n\n private readonly editorId = `xplor-rte-${++rteIdCounter}`;\n private readonly toolbarId = `${this.editorId}-toolbar`;\n private readonly charCountId = `${this.editorId}-char-count`;\n private readonly labelId = `${this.editorId}-label`;\n\n // -------------------------------------------------------------------------\n // Props\n // -------------------------------------------------------------------------\n\n /**\n * HTML string content of the editor. Supports two-way binding via xplorChange.\n */\n @Prop({ mutable: true }) value: string = '';\n\n /**\n * Stringified Slate 0.42.x document JSON for backwards compatibility.\n * When supplied, this takes precedence over `value` as the initial content.\n */\n @Prop() legacySlateDocument: string = '';\n\n /**\n * Placeholder text shown when the editor is empty.\n */\n @Prop() placeholder: string = 'Start typing…';\n\n /**\n * Visible label above the editor.\n */\n @Prop() label: string = '';\n\n /**\n * Marks the field as required. Adds an asterisk to the label.\n */\n @Prop() required: boolean = false;\n\n /**\n * Whether the editor is in read-only mode. Content is visible but not editable.\n * The toolbar is hidden in this mode.\n */\n @Prop() readonly: boolean = false;\n\n /**\n * Whether the editor is disabled. Content cannot be edited or interacted with.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Accessible label for the editor region. Used when no `label` prop or\n * `ariaLabelledBy` is provided.\n */\n @Prop() ariaLabel: string = '';\n\n /**\n * ID of an external element that labels this editor (aria-labelledby).\n */\n @Prop() ariaLabelledBy: string = '';\n\n /**\n * Controls which toolbar buttons are rendered.\n * - `full` — All formatting options (default)\n * - `minimal` — Text style buttons only (bold, italic, underline, strike, code)\n * - `none` — No toolbar; editor acts as a plain rich-text input\n */\n @Prop() toolbar: 'full' | 'minimal' | 'none' = 'full';\n\n /**\n * Maximum character count. When set, a character counter is shown below the editor.\n */\n @Prop() maxLength: number | undefined = undefined;\n\n /**\n * Validation error message. Turns the editor border red and shows the message below.\n */\n @Prop() error: string = '';\n\n /**\n * Helper text shown below the editor when there is no error.\n */\n @Prop() helperText: string = '';\n\n // -------------------------------------------------------------------------\n // Events\n // -------------------------------------------------------------------------\n\n /**\n * Emitted whenever the content changes.\n * Payload: `{ html: string; text: string; isEmpty: boolean }`\n */\n @Event() xplorChange: EventEmitter<RteChangePayload>;\n\n /**\n * Emitted when the editor gains focus.\n */\n @Event() xplorFocus: EventEmitter<void>;\n\n /**\n * Emitted when the editor loses focus.\n */\n @Event() xplorBlur: EventEmitter<void>;\n\n // -------------------------------------------------------------------------\n // Internal state\n // -------------------------------------------------------------------------\n\n /** Incremented on every TipTap transaction to force toolbar re-render */\n @State() private editorVersion: number = 0;\n @State() private isFocused: boolean = false;\n @State() private showLinkPopover: boolean = false;\n @State() private linkUrl: string = '';\n @State() private charCount: number = 0;\n\n // -------------------------------------------------------------------------\n // Lifecycle\n // -------------------------------------------------------------------------\n\n componentDidLoad() {\n this.initEditor();\n }\n\n disconnectedCallback() {\n this.editor?.destroy();\n this.editor = null;\n }\n\n // -------------------------------------------------------------------------\n // Watchers\n // -------------------------------------------------------------------------\n\n @Watch('value')\n handleValueChange(newValue: string) {\n if (!this.editor) return;\n // Avoid a feedback loop — only sync if externally changed\n if (this.editor.getHTML() !== newValue) {\n this.editor.commands.setContent(newValue || '', false);\n }\n }\n\n @Watch('readonly')\n handleReadonlyChange() {\n this.editor?.setEditable(!this.readonly && !this.disabled);\n }\n\n @Watch('disabled')\n handleDisabledChange() {\n this.editor?.setEditable(!this.readonly && !this.disabled);\n }\n\n @Watch('legacySlateDocument')\n handleLegacyDocChange(newValue: string) {\n if (!newValue || !this.editor) return;\n const html = convertLegacySlateJsonToHtml(newValue);\n this.editor.commands.setContent(html, false);\n }\n\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns the current content as an HTML string.\n */\n @Method()\n async getHTMLContent(): Promise<string> {\n return this.editor?.getHTML() ?? '';\n }\n\n /**\n * Returns the current content as plain text (all markup stripped).\n */\n @Method()\n async getText(): Promise<string> {\n return this.editor?.getText() ?? '';\n }\n\n /**\n * Replaces the editor content with the provided HTML string.\n */\n @Method()\n async setContent(html: string): Promise<void> {\n this.editor?.commands.setContent(html, false);\n }\n\n /**\n * Clears all content from the editor.\n */\n @Method()\n async clearContent(): Promise<void> {\n this.editor?.commands.clearContent(true);\n }\n\n /**\n * Programmatically focuses the editor.\n */\n @Method()\n async focusEditor(): Promise<void> {\n this.editor?.commands.focus();\n }\n\n // -------------------------------------------------------------------------\n // Private: Editor initialisation\n // -------------------------------------------------------------------------\n\n private initEditor() {\n // Resolve initial content — legacy doc takes precedence over value\n let initialContent = '';\n if (this.legacySlateDocument) {\n initialContent = convertLegacySlateJsonToHtml(this.legacySlateDocument);\n } else if (this.value) {\n initialContent = this.value;\n }\n\n const extensions: any[] = [\n StarterKit,\n Underline,\n Link.configure({ openOnClick: false, autolink: true }),\n Placeholder.configure({ placeholder: this.placeholder }),\n ];\n\n if (this.maxLength != null) {\n extensions.push(CharacterCount.configure({ limit: this.maxLength }));\n }\n\n this.editor = new Editor({\n element: this.editorEl,\n extensions,\n content: initialContent,\n editable: !this.readonly && !this.disabled,\n\n onUpdate: ({ editor }) => {\n const html = editor.getHTML();\n this.value = html;\n if (this.maxLength != null) {\n this.charCount = editor.storage?.characterCount?.characters() ?? 0;\n }\n this.xplorChange.emit({\n html,\n text: editor.getText(),\n isEmpty: editor.isEmpty,\n });\n },\n\n onFocus: () => {\n this.isFocused = true;\n this.xplorFocus.emit();\n },\n\n onBlur: () => {\n this.isFocused = false;\n this.showLinkPopover = false;\n this.xplorBlur.emit();\n },\n\n // Increment editorVersion on every transaction + selection change so the\n // toolbar re-renders with up-to-date isActive() states.\n onTransaction: () => {\n this.editorVersion += 1;\n },\n\n onSelectionUpdate: () => {\n this.editorVersion += 1;\n },\n });\n\n // Set initial char count\n if (this.maxLength != null) {\n this.charCount = this.editor.storage?.characterCount?.characters() ?? 0;\n }\n }\n\n // -------------------------------------------------------------------------\n // Private: Toolbar command helpers\n // -------------------------------------------------------------------------\n\n private execCommand(command: () => void, event: MouseEvent) {\n event.preventDefault();\n if (!this.editor || this.disabled || this.readonly) return;\n command();\n }\n\n private handleLinkButtonClick = (event: MouseEvent) => {\n event.preventDefault();\n if (!this.editor || this.disabled || this.readonly) return;\n\n if (this.editor.isActive('link')) {\n // Remove existing link\n this.editor.chain().focus().extendMarkRange('link').unsetLink().run();\n } else {\n // Pre-populate URL input with existing href if cursor is on a link\n this.linkUrl = (this.editor.getAttributes('link').href as string) || '';\n this.showLinkPopover = !this.showLinkPopover;\n }\n };\n\n private handleLinkSubmit = (event: Event) => {\n event.preventDefault();\n if (!this.editor) return;\n\n const url = this.linkUrl.trim();\n if (url) {\n this.editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n } else {\n this.editor.chain().focus().extendMarkRange('link').unsetLink().run();\n }\n this.showLinkPopover = false;\n this.linkUrl = '';\n };\n\n private handleLinkCancel = () => {\n this.showLinkPopover = false;\n this.linkUrl = '';\n };\n\n private handleLinkKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.showLinkPopover = false;\n this.linkUrl = '';\n }\n };\n\n // -------------------------------------------------------------------------\n // Private: Render helpers\n // -------------------------------------------------------------------------\n\n private renderToolbarButton(\n label: string,\n isActive: boolean,\n onClick: (event: MouseEvent) => void,\n iconContent: any,\n ) {\n return (\n <button\n type=\"button\"\n class={{\n 'xplor-rte__toolbar-btn': true,\n 'xplor-rte__toolbar-btn--active': isActive,\n }}\n aria-label={label}\n aria-pressed={String(isActive)}\n title={label}\n disabled={this.disabled || this.readonly}\n onClick={onClick}\n >\n {iconContent}\n </button>\n );\n }\n\n private renderLinkPopover() {\n return (\n <div\n class=\"xplor-rte__link-popover\"\n role=\"dialog\"\n aria-label=\"Insert link\"\n aria-modal=\"false\"\n >\n <form onSubmit={this.handleLinkSubmit} class=\"xplor-rte__link-form\">\n <label\n class=\"xplor-rte__link-label\"\n htmlFor={`${this.editorId}-link-input`}\n >\n URL\n </label>\n <input\n id={`${this.editorId}-link-input`}\n class=\"xplor-rte__link-input\"\n type=\"url\"\n placeholder=\"https://example.com\"\n value={this.linkUrl}\n onInput={(e) => {\n this.linkUrl = (e.target as HTMLInputElement).value;\n }}\n onKeyDown={this.handleLinkKeyDown}\n autoFocus\n />\n <div class=\"xplor-rte__link-actions\">\n <button type=\"submit\" class=\"xplor-rte__link-apply\">\n Apply\n </button>\n <button\n type=\"button\"\n class=\"xplor-rte__link-cancel\"\n onClick={this.handleLinkCancel}\n >\n Cancel\n </button>\n </div>\n </form>\n </div>\n );\n }\n\n private renderToolbar() {\n if (this.toolbar === 'none' || !this.editor) return null;\n\n const e = this.editor;\n const isMinimal = this.toolbar === 'minimal';\n\n // --- Text style buttons (shared between full and minimal) ---\n const textStyleGroup = (\n <div class=\"xplor-rte__toolbar-group\" role=\"group\" aria-label=\"Text style\">\n {this.renderToolbarButton(\n 'Bold (Ctrl+B)',\n e.isActive('bold'),\n (ev) => this.execCommand(() => e.chain().focus().toggleBold().run(), ev),\n // Bold icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M15.6 11.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5S13.83 9.5 13 9.5h-3V6.5zm3.5 9H10V13h3.5c.83 0 1.5.67 1.5 1.5S14.33 15.5 13.5 15.5z\" />\n </svg>,\n )}\n {this.renderToolbarButton(\n 'Italic (Ctrl+I)',\n e.isActive('italic'),\n (ev) => this.execCommand(() => e.chain().focus().toggleItalic().run(), ev),\n // Italic icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\" />\n </svg>,\n )}\n {this.renderToolbarButton(\n 'Underline (Ctrl+U)',\n e.isActive('underline'),\n (ev) => this.execCommand(() => e.chain().focus().toggleUnderline().run(), ev),\n // Underline icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\" />\n </svg>,\n )}\n {this.renderToolbarButton(\n 'Strikethrough',\n e.isActive('strike'),\n (ev) => this.execCommand(() => e.chain().focus().toggleStrike().run(), ev),\n // Strikethrough icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.85 7.08C6.85 4.37 9.45 3 12.24 3c1.64 0 3 .49 3.9 1.28.77.65 1.46 1.73 1.46 3.24h-3.01c0-.31-.05-.59-.15-.85-.29-.86-1.2-1.28-2.25-1.28-1.86 0-2.34.92-2.34 1.69 0 .48.25.88.74 1.21L13.25 9H7.39c-.21-.28-.54-.71-.54-1.92zM21 12v-2H3v2h9.62c1.15.45 1.96.75 1.96 1.97 0 1-.81 1.67-2.28 1.67-1.54 0-2.93-.54-2.93-2.51H7.4c0 1.97.93 5.15 5.85 5.15 3.47 0 5.37-1.96 5.37-4.15 0-.87-.23-1.58-.62-2.13z\" />\n </svg>,\n )}\n {this.renderToolbarButton(\n 'Inline code',\n e.isActive('code'),\n (ev) => this.execCommand(() => e.chain().focus().toggleCode().run(), ev),\n // Code icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z\" />\n </svg>,\n )}\n </div>\n );\n\n if (isMinimal) {\n return (\n <div\n id={this.toolbarId}\n class=\"xplor-rte__toolbar\"\n role=\"toolbar\"\n aria-label=\"Text formatting\"\n aria-controls={this.editorId}\n >\n {textStyleGroup}\n </div>\n );\n }\n\n return (\n <div\n id={this.toolbarId}\n class=\"xplor-rte__toolbar\"\n role=\"toolbar\"\n aria-label=\"Text formatting\"\n aria-controls={this.editorId}\n >\n {/* Text style */}\n {textStyleGroup}\n\n <div class=\"xplor-rte__toolbar-divider\" aria-hidden=\"true\" />\n\n {/* Headings */}\n <div class=\"xplor-rte__toolbar-group\" role=\"group\" aria-label=\"Headings\">\n {([1, 2, 3] as const).map((level) =>\n this.renderToolbarButton(\n `Heading ${level}`,\n e.isActive('heading', { level }),\n (ev) => this.execCommand(() => e.chain().focus().toggleHeading({ level }).run(), ev),\n <span class=\"xplor-rte__toolbar-text\" aria-hidden=\"true\">H{level}</span>,\n ),\n )}\n </div>\n\n <div class=\"xplor-rte__toolbar-divider\" aria-hidden=\"true\" />\n\n {/* Lists */}\n <div class=\"xplor-rte__toolbar-group\" role=\"group\" aria-label=\"Lists\">\n {this.renderToolbarButton(\n 'Bullet list',\n e.isActive('bulletList'),\n (ev) => this.execCommand(() => e.chain().focus().toggleBulletList().run(), ev),\n // Bullet list icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\" />\n </svg>,\n )}\n {this.renderToolbarButton(\n 'Numbered list',\n e.isActive('orderedList'),\n (ev) => this.execCommand(() => e.chain().focus().toggleOrderedList().run(), ev),\n // Ordered list icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z\" />\n </svg>,\n )}\n </div>\n\n <div class=\"xplor-rte__toolbar-divider\" aria-hidden=\"true\" />\n\n {/* Block elements */}\n <div class=\"xplor-rte__toolbar-group\" role=\"group\" aria-label=\"Block elements\">\n {this.renderToolbarButton(\n 'Blockquote',\n e.isActive('blockquote'),\n (ev) => this.execCommand(() => e.chain().focus().toggleBlockquote().run(), ev),\n // Blockquote icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\" />\n </svg>,\n )}\n {this.renderToolbarButton(\n 'Code block',\n e.isActive('codeBlock'),\n (ev) => this.execCommand(() => e.chain().focus().toggleCodeBlock().run(), ev),\n // Code block icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M20 3H4v10c0 2.21 1.79 4 4 4h6c2.21 0 4-1.79 4-4v-3h2c1.11 0 2-.89 2-2V5c0-1.11-.89-2-2-2zm0 5h-2V5h2v3zM4 19h16v2H4z\" />\n </svg>,\n )}\n </div>\n\n <div class=\"xplor-rte__toolbar-divider\" aria-hidden=\"true\" />\n\n {/* Insert & utilities */}\n <div class=\"xplor-rte__toolbar-group\" role=\"group\" aria-label=\"Insert and utilities\">\n <div class=\"xplor-rte__link-wrapper\">\n {this.renderToolbarButton(\n e.isActive('link') ? 'Remove link' : 'Insert link',\n e.isActive('link'),\n this.handleLinkButtonClick,\n // Link icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" />\n </svg>,\n )}\n {this.showLinkPopover && this.renderLinkPopover()}\n </div>\n {this.renderToolbarButton(\n 'Clear formatting',\n false,\n (ev) =>\n this.execCommand(\n () => e.chain().focus().clearNodes().unsetAllMarks().run(),\n ev,\n ),\n // Clear formatting icon\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6 19h4v-2H6v2zM3 5v2h18V5H3zm3 9h7v-2H6v2zm10.88-3.36L18.3 9.2l1.41 1.41-1.42 1.43 1.42 1.41-1.41 1.41-1.42-1.41-1.41 1.41-1.41-1.41 1.41-1.41-1.41-1.43 1.41-1.41 1.41 1.43z\" />\n </svg>,\n )}\n </div>\n </div>\n );\n }\n\n // -------------------------------------------------------------------------\n // Render\n // -------------------------------------------------------------------------\n\n render() {\n const hasError = !!this.error;\n const showCharCount = this.maxLength != null;\n const charCountDescribedBy = showCharCount ? this.charCountId : undefined;\n const describedBy = charCountDescribedBy || undefined;\n\n // Resolve aria-label / aria-labelledby precedence:\n // 1. External ariaLabelledBy prop\n // 2. Internal label element (rendered via labelId)\n // 3. ariaLabel prop (falls back to default)\n const effectiveLabelledBy =\n this.ariaLabelledBy || (this.label ? this.labelId : undefined);\n const effectiveAriaLabel = !effectiveLabelledBy\n ? this.ariaLabel || 'Rich text editor'\n : undefined;\n\n const containerClasses = {\n 'xplor-rte': true,\n 'xplor-rte--focused': this.isFocused,\n 'xplor-rte--disabled': this.disabled,\n 'xplor-rte--readonly': this.readonly,\n 'xplor-rte--error': hasError,\n 'xplor-rte--has-toolbar': this.toolbar !== 'none',\n };\n\n return (\n <Host>\n {/* Label */}\n {this.label && (\n <label class=\"xplor-rte__label\" id={this.labelId} htmlFor={this.editorId}>\n {this.label}\n {this.required && (\n <span class=\"xplor-rte__required\" aria-hidden=\"true\">\n {' '}*\n </span>\n )}\n </label>\n )}\n\n {/* Editor wrapper */}\n <div class={containerClasses}>\n {/* Toolbar */}\n {this.renderToolbar()}\n\n {/* ProseMirror mount point */}\n <div\n class=\"xplor-rte__content\"\n id={this.editorId}\n ref={(el) => {\n this.editorEl = el as HTMLDivElement;\n }}\n aria-label={effectiveAriaLabel}\n aria-labelledby={effectiveLabelledBy}\n aria-multiline=\"true\"\n aria-readonly={this.readonly ? 'true' : undefined}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-required={this.required ? 'true' : undefined}\n aria-describedby={describedBy}\n aria-invalid={hasError ? 'true' : undefined}\n />\n\n {/* Character count */}\n {showCharCount && (\n <div\n id={this.charCountId}\n class={{\n 'xplor-rte__char-count': true,\n 'xplor-rte__char-count--limit': this.charCount >= this.maxLength,\n }}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {this.charCount} / {this.maxLength}\n </div>\n )}\n </div>\n\n {/* Validation error */}\n {hasError && (\n <div class=\"xplor-rte__error\" role=\"alert\" aria-live=\"assertive\">\n {this.error}\n </div>\n )}\n\n {/* Helper text */}\n {!hasError && this.helperText && (\n <div class=\"xplor-rte__helper\">{this.helperText}</div>\n )}\n </Host>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
title: 'Components/Rich Text Editor',
|
|
3
|
+
tags: ['autodocs'],
|
|
4
|
+
parameters: {
|
|
5
|
+
actions: {
|
|
6
|
+
handles: ['xplorChange', 'xplorFocus', 'xplorBlur'],
|
|
7
|
+
},
|
|
8
|
+
docs: {
|
|
9
|
+
description: {
|
|
10
|
+
component: `
|
|
11
|
+
A WYSIWYG rich text editor built on TipTap (ProseMirror). Fully accessible (WCAG 2.1 AA),
|
|
12
|
+
framework-agnostic, and backwards compatible with Slate 0.42.x document JSON via the
|
|
13
|
+
\`legacySlateDocument\` prop.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
\`\`\`html
|
|
17
|
+
<xplor-rich-text-editor
|
|
18
|
+
label="Notes"
|
|
19
|
+
placeholder="Start typing…"
|
|
20
|
+
></xplor-rich-text-editor>
|
|
21
|
+
\`\`\`
|
|
22
|
+
|
|
23
|
+
## Backwards Compatibility
|
|
24
|
+
Pass a stringified Slate 0.42.x document to the \`legacySlateDocument\` prop. The component
|
|
25
|
+
converts it to HTML automatically — no Slate runtime required in the consuming app.
|
|
26
|
+
`,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
argTypes: {
|
|
31
|
+
label: { control: 'text', description: 'Visible label above the editor' },
|
|
32
|
+
placeholder: { control: 'text', description: 'Placeholder shown when empty' },
|
|
33
|
+
value: { control: 'text', description: 'Initial HTML content' },
|
|
34
|
+
toolbar: {
|
|
35
|
+
control: { type: 'select' },
|
|
36
|
+
options: ['full', 'minimal', 'none'],
|
|
37
|
+
description: 'Toolbar button set',
|
|
38
|
+
},
|
|
39
|
+
readonly: { control: 'boolean', description: 'Read-only mode — content visible, not editable' },
|
|
40
|
+
disabled: { control: 'boolean', description: 'Disabled — no interaction possible' },
|
|
41
|
+
required: { control: 'boolean', description: 'Marks the field as required' },
|
|
42
|
+
error: { control: 'text', description: 'Validation error message' },
|
|
43
|
+
helperText: { control: 'text', description: 'Helper text shown below the editor' },
|
|
44
|
+
maxLength: { control: 'number', description: 'Maximum character count' },
|
|
45
|
+
ariaLabel: { control: 'text', description: 'Accessible label (when no visible label)' },
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Default — empty editor, full toolbar
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
const Template = (args) => {
|
|
52
|
+
const attrs = Object.entries(args)
|
|
53
|
+
.filter(([, v]) => v !== undefined && v !== '' && v !== false)
|
|
54
|
+
.map(([k, v]) => {
|
|
55
|
+
const attr = k.replace(/([A-Z])/g, '-$1').toLowerCase(); // camelCase → kebab-case
|
|
56
|
+
if (typeof v === 'boolean')
|
|
57
|
+
return v ? attr : '';
|
|
58
|
+
return `${attr}="${v}"`;
|
|
59
|
+
})
|
|
60
|
+
.filter(Boolean)
|
|
61
|
+
.join(' ');
|
|
62
|
+
return `<xplor-rich-text-editor ${attrs}></xplor-rich-text-editor>`;
|
|
63
|
+
};
|
|
64
|
+
export const Default = Template.bind({});
|
|
65
|
+
Default.args = {
|
|
66
|
+
label: 'Notes',
|
|
67
|
+
placeholder: 'Start typing…',
|
|
68
|
+
toolbar: 'full',
|
|
69
|
+
};
|
|
70
|
+
Default.storyName = 'Default (full toolbar)';
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// With pre-populated HTML content
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
export const WithInitialContent = Template.bind({});
|
|
75
|
+
WithInitialContent.args = {
|
|
76
|
+
label: 'Description',
|
|
77
|
+
value: '<h2>Welcome</h2><p>This is some <strong>pre-populated</strong> content with <em>italic</em> and <u>underline</u> text.</p><ul><li>Bullet one</li><li>Bullet two</li></ul>',
|
|
78
|
+
toolbar: 'full',
|
|
79
|
+
};
|
|
80
|
+
WithInitialContent.storyName = 'With initial HTML content';
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Legacy Slate document
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
const legacySlateDoc = JSON.stringify({
|
|
85
|
+
document: {
|
|
86
|
+
object: 'document',
|
|
87
|
+
nodes: [
|
|
88
|
+
{
|
|
89
|
+
object: 'block',
|
|
90
|
+
type: 'heading-one',
|
|
91
|
+
nodes: [{ object: 'text', text: 'Loaded from Slate 0.42.x', marks: [] }],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
object: 'block',
|
|
95
|
+
type: 'paragraph',
|
|
96
|
+
nodes: [
|
|
97
|
+
{ object: 'text', text: 'This content was stored in the old Slate format and has been ', marks: [] },
|
|
98
|
+
{ object: 'text', text: 'automatically converted', marks: [{ type: 'bold' }] },
|
|
99
|
+
{ object: 'text', text: ' to HTML for editing.', marks: [] },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
object: 'block',
|
|
104
|
+
type: 'bulleted-list',
|
|
105
|
+
nodes: [
|
|
106
|
+
{
|
|
107
|
+
object: 'block',
|
|
108
|
+
type: 'list-item',
|
|
109
|
+
nodes: [{ object: 'text', text: 'Legacy item one', marks: [] }],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
object: 'block',
|
|
113
|
+
type: 'list-item',
|
|
114
|
+
nodes: [{ object: 'text', text: 'Legacy item two', marks: [] }],
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
export const LegacySlateDocument = (args) => `<xplor-rich-text-editor
|
|
122
|
+
label="${args.label}"
|
|
123
|
+
legacy-slate-document='${legacySlateDoc}'
|
|
124
|
+
></xplor-rich-text-editor>`;
|
|
125
|
+
LegacySlateDocument.args = {
|
|
126
|
+
label: 'Legacy document (Slate 0.42.x)',
|
|
127
|
+
};
|
|
128
|
+
LegacySlateDocument.storyName = 'Legacy Slate 0.42.x document';
|
|
129
|
+
LegacySlateDocument.parameters = {
|
|
130
|
+
docs: {
|
|
131
|
+
description: {
|
|
132
|
+
story: 'Pass a Slate 0.42.x JSON string to `legacySlateDocument`. The component converts it to HTML automatically — no Slate runtime needed.',
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// Readonly
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
export const Readonly = Template.bind({});
|
|
140
|
+
Readonly.args = {
|
|
141
|
+
label: 'Read only field',
|
|
142
|
+
value: '<p>This content is <strong>read only</strong> and cannot be edited. The toolbar is hidden.</p>',
|
|
143
|
+
readonly: true,
|
|
144
|
+
};
|
|
145
|
+
Readonly.storyName = 'Read-only';
|
|
146
|
+
Readonly.parameters = {
|
|
147
|
+
docs: {
|
|
148
|
+
description: {
|
|
149
|
+
story: 'Content is visible and selectable but not editable. The toolbar is hidden.',
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Disabled
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
export const Disabled = Template.bind({});
|
|
157
|
+
Disabled.args = {
|
|
158
|
+
label: 'Disabled field',
|
|
159
|
+
value: '<p>This editor is disabled.</p>',
|
|
160
|
+
disabled: true,
|
|
161
|
+
};
|
|
162
|
+
Disabled.storyName = 'Disabled';
|
|
163
|
+
// ---------------------------------------------------------------------------
|
|
164
|
+
// Minimal toolbar
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
export const MinimalToolbar = Template.bind({});
|
|
167
|
+
MinimalToolbar.args = {
|
|
168
|
+
label: 'Short note',
|
|
169
|
+
placeholder: 'Type a short note…',
|
|
170
|
+
toolbar: 'minimal',
|
|
171
|
+
};
|
|
172
|
+
MinimalToolbar.storyName = 'Minimal toolbar';
|
|
173
|
+
MinimalToolbar.parameters = {
|
|
174
|
+
docs: {
|
|
175
|
+
description: {
|
|
176
|
+
story: 'Shows only text style buttons: Bold, Italic, Underline, Strikethrough, Code.',
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
// No toolbar
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
export const NoToolbar = Template.bind({});
|
|
184
|
+
NoToolbar.args = {
|
|
185
|
+
label: 'Plain rich text input',
|
|
186
|
+
placeholder: 'Type here…',
|
|
187
|
+
toolbar: 'none',
|
|
188
|
+
};
|
|
189
|
+
NoToolbar.storyName = 'No toolbar';
|
|
190
|
+
NoToolbar.parameters = {
|
|
191
|
+
docs: {
|
|
192
|
+
description: {
|
|
193
|
+
story: 'Keyboard shortcuts still work (Ctrl+B, Ctrl+I, etc.) even without the toolbar.',
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
// With max length
|
|
199
|
+
// ---------------------------------------------------------------------------
|
|
200
|
+
export const WithMaxLength = Template.bind({});
|
|
201
|
+
WithMaxLength.args = {
|
|
202
|
+
label: 'Short description',
|
|
203
|
+
placeholder: 'Maximum 200 characters…',
|
|
204
|
+
maxLength: 200,
|
|
205
|
+
helperText: 'Keep it concise.',
|
|
206
|
+
toolbar: 'minimal',
|
|
207
|
+
};
|
|
208
|
+
WithMaxLength.storyName = 'With character limit';
|
|
209
|
+
WithMaxLength.parameters = {
|
|
210
|
+
docs: {
|
|
211
|
+
description: {
|
|
212
|
+
story: 'A character counter is shown below the editor. The counter turns red at the limit.',
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// Validation error
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
export const WithError = Template.bind({});
|
|
220
|
+
WithError.args = {
|
|
221
|
+
label: 'Description',
|
|
222
|
+
placeholder: 'This field is required…',
|
|
223
|
+
error: 'Description is required.',
|
|
224
|
+
required: true,
|
|
225
|
+
};
|
|
226
|
+
WithError.storyName = 'Validation error';
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
// With helper text
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
export const WithHelperText = Template.bind({});
|
|
231
|
+
WithHelperText.args = {
|
|
232
|
+
label: 'Bio',
|
|
233
|
+
placeholder: 'Tell us about yourself…',
|
|
234
|
+
helperText: 'Supports bold, italic, and links.',
|
|
235
|
+
};
|
|
236
|
+
WithHelperText.storyName = 'With helper text';
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
// Dark mode
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
export const DarkMode = (args) => `<div class="dark" style="background:#1e1e1e; padding:2rem; border-radius:0.5rem;">
|
|
241
|
+
<xplor-rich-text-editor
|
|
242
|
+
class="dark"
|
|
243
|
+
label="${args.label}"
|
|
244
|
+
placeholder="${args.placeholder}"
|
|
245
|
+
></xplor-rich-text-editor>
|
|
246
|
+
</div>`;
|
|
247
|
+
DarkMode.args = {
|
|
248
|
+
label: 'Notes (dark mode)',
|
|
249
|
+
placeholder: 'Start typing…',
|
|
250
|
+
};
|
|
251
|
+
DarkMode.storyName = 'Dark mode';
|
|
252
|
+
DarkMode.parameters = {
|
|
253
|
+
backgrounds: { default: 'dark' },
|
|
254
|
+
docs: {
|
|
255
|
+
description: {
|
|
256
|
+
story: 'Apply the `.dark` CSS class to the host element to activate dark mode tokens.',
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
//# sourceMappingURL=xplor-rich-text-editor.stories.js.map
|
package/dist/collection/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xplor-rich-text-editor.stories.js","sourceRoot":"","sources":["../../../src/components/xplor-rich-text-editor/xplor-rich-text-editor.stories.ts"],"names":[],"mappings":"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","sourcesContent":["export default {\n title: 'Components/Rich Text Editor',\n tags: ['autodocs'],\n parameters: {\n actions: {\n handles: ['xplorChange', 'xplorFocus', 'xplorBlur'],\n },\n docs: {\n description: {\n component: `\nA WYSIWYG rich text editor built on TipTap (ProseMirror). Fully accessible (WCAG 2.1 AA),\nframework-agnostic, and backwards compatible with Slate 0.42.x document JSON via the\n\\`legacySlateDocument\\` prop.\n\n## Usage\n\\`\\`\\`html\n<xplor-rich-text-editor\n label=\"Notes\"\n placeholder=\"Start typing…\"\n></xplor-rich-text-editor>\n\\`\\`\\`\n\n## Backwards Compatibility\nPass a stringified Slate 0.42.x document to the \\`legacySlateDocument\\` prop. The component\nconverts it to HTML automatically — no Slate runtime required in the consuming app.\n `,\n },\n },\n },\n argTypes: {\n label: { control: 'text', description: 'Visible label above the editor' },\n placeholder: { control: 'text', description: 'Placeholder shown when empty' },\n value: { control: 'text', description: 'Initial HTML content' },\n toolbar: {\n control: { type: 'select' },\n options: ['full', 'minimal', 'none'],\n description: 'Toolbar button set',\n },\n readonly: { control: 'boolean', description: 'Read-only mode — content visible, not editable' },\n disabled: { control: 'boolean', description: 'Disabled — no interaction possible' },\n required: { control: 'boolean', description: 'Marks the field as required' },\n error: { control: 'text', description: 'Validation error message' },\n helperText: { control: 'text', description: 'Helper text shown below the editor' },\n maxLength: { control: 'number', description: 'Maximum character count' },\n ariaLabel: { control: 'text', description: 'Accessible label (when no visible label)' },\n },\n};\n\n// ---------------------------------------------------------------------------\n// Default — empty editor, full toolbar\n// ---------------------------------------------------------------------------\nconst Template = (args) => {\n const attrs = Object.entries(args)\n .filter(([, v]) => v !== undefined && v !== '' && v !== false)\n .map(([k, v]) => {\n const attr = k.replace(/([A-Z])/g, '-$1').toLowerCase(); // camelCase → kebab-case\n if (typeof v === 'boolean') return v ? attr : '';\n return `${attr}=\"${v}\"`;\n })\n .filter(Boolean)\n .join(' ');\n\n return `<xplor-rich-text-editor ${attrs}></xplor-rich-text-editor>`;\n};\n\nexport const Default = Template.bind({});\nDefault.args = {\n label: 'Notes',\n placeholder: 'Start typing…',\n toolbar: 'full',\n};\nDefault.storyName = 'Default (full toolbar)';\n\n// ---------------------------------------------------------------------------\n// With pre-populated HTML content\n// ---------------------------------------------------------------------------\nexport const WithInitialContent = Template.bind({});\nWithInitialContent.args = {\n label: 'Description',\n value: '<h2>Welcome</h2><p>This is some <strong>pre-populated</strong> content with <em>italic</em> and <u>underline</u> text.</p><ul><li>Bullet one</li><li>Bullet two</li></ul>',\n toolbar: 'full',\n};\nWithInitialContent.storyName = 'With initial HTML content';\n\n// ---------------------------------------------------------------------------\n// Legacy Slate document\n// ---------------------------------------------------------------------------\nconst legacySlateDoc = JSON.stringify({\n document: {\n object: 'document',\n nodes: [\n {\n object: 'block',\n type: 'heading-one',\n nodes: [{ object: 'text', text: 'Loaded from Slate 0.42.x', marks: [] }],\n },\n {\n object: 'block',\n type: 'paragraph',\n nodes: [\n { object: 'text', text: 'This content was stored in the old Slate format and has been ', marks: [] },\n { object: 'text', text: 'automatically converted', marks: [{ type: 'bold' }] },\n { object: 'text', text: ' to HTML for editing.', marks: [] },\n ],\n },\n {\n object: 'block',\n type: 'bulleted-list',\n nodes: [\n {\n object: 'block',\n type: 'list-item',\n nodes: [{ object: 'text', text: 'Legacy item one', marks: [] }],\n },\n {\n object: 'block',\n type: 'list-item',\n nodes: [{ object: 'text', text: 'Legacy item two', marks: [] }],\n },\n ],\n },\n ],\n },\n});\n\nexport const LegacySlateDocument = (args) =>\n `<xplor-rich-text-editor\n label=\"${args.label}\"\n legacy-slate-document='${legacySlateDoc}'\n ></xplor-rich-text-editor>`;\n\nLegacySlateDocument.args = {\n label: 'Legacy document (Slate 0.42.x)',\n};\nLegacySlateDocument.storyName = 'Legacy Slate 0.42.x document';\nLegacySlateDocument.parameters = {\n docs: {\n description: {\n story: 'Pass a Slate 0.42.x JSON string to `legacySlateDocument`. The component converts it to HTML automatically — no Slate runtime needed.',\n },\n },\n};\n\n// ---------------------------------------------------------------------------\n// Readonly\n// ---------------------------------------------------------------------------\nexport const Readonly = Template.bind({});\nReadonly.args = {\n label: 'Read only field',\n value: '<p>This content is <strong>read only</strong> and cannot be edited. The toolbar is hidden.</p>',\n readonly: true,\n};\nReadonly.storyName = 'Read-only';\nReadonly.parameters = {\n docs: {\n description: {\n story: 'Content is visible and selectable but not editable. The toolbar is hidden.',\n },\n },\n};\n\n// ---------------------------------------------------------------------------\n// Disabled\n// ---------------------------------------------------------------------------\nexport const Disabled = Template.bind({});\nDisabled.args = {\n label: 'Disabled field',\n value: '<p>This editor is disabled.</p>',\n disabled: true,\n};\nDisabled.storyName = 'Disabled';\n\n// ---------------------------------------------------------------------------\n// Minimal toolbar\n// ---------------------------------------------------------------------------\nexport const MinimalToolbar = Template.bind({});\nMinimalToolbar.args = {\n label: 'Short note',\n placeholder: 'Type a short note…',\n toolbar: 'minimal',\n};\nMinimalToolbar.storyName = 'Minimal toolbar';\nMinimalToolbar.parameters = {\n docs: {\n description: {\n story: 'Shows only text style buttons: Bold, Italic, Underline, Strikethrough, Code.',\n },\n },\n};\n\n// ---------------------------------------------------------------------------\n// No toolbar\n// ---------------------------------------------------------------------------\nexport const NoToolbar = Template.bind({});\nNoToolbar.args = {\n label: 'Plain rich text input',\n placeholder: 'Type here…',\n toolbar: 'none',\n};\nNoToolbar.storyName = 'No toolbar';\nNoToolbar.parameters = {\n docs: {\n description: {\n story: 'Keyboard shortcuts still work (Ctrl+B, Ctrl+I, etc.) even without the toolbar.',\n },\n },\n};\n\n// ---------------------------------------------------------------------------\n// With max length\n// ---------------------------------------------------------------------------\nexport const WithMaxLength = Template.bind({});\nWithMaxLength.args = {\n label: 'Short description',\n placeholder: 'Maximum 200 characters…',\n maxLength: 200,\n helperText: 'Keep it concise.',\n toolbar: 'minimal',\n};\nWithMaxLength.storyName = 'With character limit';\nWithMaxLength.parameters = {\n docs: {\n description: {\n story: 'A character counter is shown below the editor. The counter turns red at the limit.',\n },\n },\n};\n\n// ---------------------------------------------------------------------------\n// Validation error\n// ---------------------------------------------------------------------------\nexport const WithError = Template.bind({});\nWithError.args = {\n label: 'Description',\n placeholder: 'This field is required…',\n error: 'Description is required.',\n required: true,\n};\nWithError.storyName = 'Validation error';\n\n// ---------------------------------------------------------------------------\n// With helper text\n// ---------------------------------------------------------------------------\nexport const WithHelperText = Template.bind({});\nWithHelperText.args = {\n label: 'Bio',\n placeholder: 'Tell us about yourself…',\n helperText: 'Supports bold, italic, and links.',\n};\nWithHelperText.storyName = 'With helper text';\n\n// ---------------------------------------------------------------------------\n// Dark mode\n// ---------------------------------------------------------------------------\nexport const DarkMode = (args) =>\n `<div class=\"dark\" style=\"background:#1e1e1e; padding:2rem; border-radius:0.5rem;\">\n <xplor-rich-text-editor\n class=\"dark\"\n label=\"${args.label}\"\n placeholder=\"${args.placeholder}\"\n ></xplor-rich-text-editor>\n </div>`;\n\nDarkMode.args = {\n label: 'Notes (dark mode)',\n placeholder: 'Start typing…',\n};\nDarkMode.storyName = 'Dark mode';\nDarkMode.parameters = {\n backgrounds: { default: 'dark' },\n docs: {\n description: {\n story: 'Apply the `.dark` CSS class to the host element to activate dark mode tokens.',\n },\n },\n};\n"]}
|
|
@@ -6,11 +6,11 @@ export class XplorSectionCard {
|
|
|
6
6
|
this.padding = '1.5rem';
|
|
7
7
|
}
|
|
8
8
|
render() {
|
|
9
|
-
return (h(Host, { key: '
|
|
9
|
+
return (h(Host, { key: '7ae2731a35235a4adf7ad15ab57f83a92d56af69' }, h("div", { key: '84241d02081e3bf5f5052841cba7023b93f1a325', class: {
|
|
10
10
|
'section-card': true,
|
|
11
11
|
'section-card--outlined': this.outlined,
|
|
12
12
|
'section-card--rounded': this.rounded,
|
|
13
|
-
}, style: { padding: this.padding } }, h("slot", { key: '
|
|
13
|
+
}, style: { padding: this.padding } }, h("slot", { key: 'a6b923edf2e228daa178a6e81d2d386d57ff701e', name: "title" }), h("slot", { key: '89870fa359b4c5e321eca737c509825ea22c261b', name: "subtitle" }), h("div", { key: '505c4207244af1d55ea7fe7b1b25e815e605d16b', class: "section-card__body" }, h("slot", { key: 'bdd5bc4f9c3d7d095d5ff665d4f06f58f820904b', name: "body" }), h("slot", { key: '90122903283a62f92fb0ea0e23c41a1932bfd393' })), h("div", { key: 'cb7b7e68268f7a32181708537612fca37156c6f1', class: "section-card__actions" }, h("slot", { key: 'f910eeb994425f0fa36a980228b1eba747e46e92', name: "actions" })))));
|
|
14
14
|
}
|
|
15
15
|
static get is() { return "xplor-section-card"; }
|
|
16
16
|
static get encapsulation() { return "scoped"; }
|
|
@@ -9,11 +9,11 @@ export class XplorSectionHeading {
|
|
|
9
9
|
}
|
|
10
10
|
render() {
|
|
11
11
|
const HeadingTag = `h${this.level}`;
|
|
12
|
-
return (h(Host, { key: '
|
|
12
|
+
return (h(Host, { key: '9707e9846b57f6d5a32f74735169a3d742c7eb48' }, h(HeadingTag, { key: '66688163c5a01afad9cb83de53715bfd2f448386', class: {
|
|
13
13
|
'section-heading': true,
|
|
14
14
|
'section-heading--small': this.size === 'small',
|
|
15
15
|
'section-heading--large': this.size === 'large',
|
|
16
|
-
} }, h("slot", { key: '
|
|
16
|
+
} }, h("slot", { key: '51cd4671527643821f5f271ca8b201438b56c403' }, this.text))));
|
|
17
17
|
}
|
|
18
18
|
static get is() { return "xplor-section-heading"; }
|
|
19
19
|
static get encapsulation() { return "scoped"; }
|
|
@@ -180,11 +180,11 @@ export class XplorTable {
|
|
|
180
180
|
if (this.hasScrolled)
|
|
181
181
|
className += ' xpl-table--has-scrolled';
|
|
182
182
|
const paginatedData = this.getPaginatedData();
|
|
183
|
-
return (h(Host, { key: '
|
|
183
|
+
return (h(Host, { key: '3af5842ac1127a45153b2c2b4bcb500a8c69e11f', class: "xplor-table" }, h("div", { key: 'ee2f0df0a6960e8dc0cda29948071568c0c0394c', class: "bg-white rounded-lg shadow-sm border border-gray-200 p-6 max-w-6xl mx-auto" }, h("div", { key: '60d30bb877d3377c0429abf333e9672c37344e4c', class: "xpl-table-container", onScroll: this.onScroll, ref: (el) => {
|
|
184
184
|
this.container = el;
|
|
185
|
-
} }, h("div", { key: '
|
|
185
|
+
} }, h("div", { key: 'edcfb3387b22a5b6e45c403677d5ae5bca8f3eaf', class: "mb-6" }, h("h1", { key: '6c3fd76011f577e7bfda92eb629c7bbb80d6064d', class: "text-xl font-semibold text-gray-900 mb-4" }, "Head Counts Report"), h("div", { key: '6138438a7990e5438eb82f2a69455e2e29cfc26c', class: "flex flex-wrap items-center gap-4 mb-6" }, h("div", { key: '82f227b67faed69685a8d7df71c2ff11a51a355d', class: "flex items-center gap-2" }, h("label", { key: '241bc6b655054643f9c9714d8442106745730676', class: "text-sm text-gray-600 font-medium" }, "Date Range"), h("select", { key: 'fbc8b9e0483de820a9c45e2a51370236b6d3c391', class: "border border-gray-300 rounded px-3 py-1.5 text-sm bg-white focus:outline-none focus:ring-2 focus:ring-teal-500 focus:border-teal-500",
|
|
186
186
|
// value={this.selectedDateRange}
|
|
187
|
-
onInput: this.handleDateRangeChange }, h("option", { key: '
|
|
187
|
+
onInput: this.handleDateRangeChange }, h("option", { key: 'da7ab88a6dddb239b98d6229008583bc1a17b722', value: "All" }, "All"), h("option", { key: 'de9de322c49e9ec5ea98f35b7cdf38e87523d243', value: "Today" }, "Today"), h("option", { key: 'ab5e245befad53c172b4995045dfb92723d1f97c', value: "This Week" }, "This Week"), h("option", { key: '4db601ec2e619e0886d3e783b896161206e4dc60', value: "This Month" }, "This Month"), h("option", { key: '70de0ddb1ae329df006833e238c7a4cda3f624e3', value: "Custom" }, "Custom Range")), h("button", { key: '697f5562ac46d096c0735266bbfd14dd68e85302', class: "p-1.5 border border-gray-300 rounded hover:bg-gray-50" }, h("svg", { key: '9cd261cdf88f786b15954f1c58d3f8214176e594', class: "w-4 h-4 text-gray-500", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, h("path", { key: '84272a7b9798064f927a7b4978d1fb3d333dea55', "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" })))), h("button", { key: '6c30e7375827170df47134282386c5dd6875b5b7', onClick: this.handleFilterReports, class: "bg-teal-600 hover:bg-teal-700 text-white px-4 py-1.5 rounded text-sm font-medium transition-colors" }, "Filter Reports"), h("button", { key: '765892382923e914c8253deecff36504749e517c', onClick: this.handleDownloadAll, class: "flex items-center gap-2 text-gray-600 hover:text-gray-800 text-sm" }, h("svg", { key: '2b13b995dd856df389ca2336052e49380bc908c3', class: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, h("path", { key: '8cb555ec2db80155b33151a516b860c03c8c7b01', "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" })), "Download All"))), h("table", { key: '571d6e2bdb7d96b665676e77e58d29084ce08a86', class: `w-full ${className}` }, this.columns && (h("thead", { key: '657caea29dd0f04f86a9286621d9aa2a415174d3' }, this.columns.map((column, i) => {
|
|
188
188
|
const iconType = getIconType(this.sortTypeArray[i]);
|
|
189
189
|
const isColumnSortable = !!(this.isSortable &&
|
|
190
190
|
this.sortableColumns[i]);
|
|
@@ -222,11 +222,11 @@ export class XplorTable {
|
|
|
222
222
|
// id="__xpl-icon-sort"
|
|
223
223
|
// ></xpl-icon>
|
|
224
224
|
)))));
|
|
225
|
-
}))), h("tbody", { key: '
|
|
225
|
+
}))), h("tbody", { key: 'f5e83931272ed89a586ec0b747d590a27f902570' }, paginatedData.map((row, rowNum) => (h("tr", { class: `border-b border-gray-100 hover:bg-gray-50` }, row.map((cell, i) => (h("td", { class: "py-3 px-4 text-sm text-gray-900" }, this.multiselect && i === 0 ? (h("label", { class: "flex items-center gap-2", htmlFor: `__xpl-table-row-${rowNum}` }, h("input", { id: `__xpl-table-row-${rowNum}`, checked: !!this.selected[rowNum], type: "checkbox", onChange: (e) => this.selectOne(e, rowNum), value: this.selectedValues
|
|
226
226
|
.length > 0
|
|
227
227
|
? this
|
|
228
228
|
.selectedValues[rowNum]
|
|
229
|
-
: `xpl-table-checkbox-${rowNum}` }), h("div", { innerHTML: cell }))) : (h("div", { innerHTML: cell })))))))))), h("div", { key: '
|
|
229
|
+
: `xpl-table-checkbox-${rowNum}` }), h("div", { innerHTML: cell }))) : (h("div", { innerHTML: cell })))))))))), h("div", { key: '8c9abcee75d63a6c3ee6377e3af19e51714a357c', id: "pagination", class: "w-full flex items-center justify-between mt-6 text-sm" }, h("div", { key: '07316e6e983869121ed4850521a6cc0ca9ea65d9', class: "flex items-center gap-2" }, h("button", { key: 'edd5869d104d33de97e5112ec3ed4de8c5dcc3ec', onClick: () => this.handlePagination('first'), class: "p-1.5 text-gray-400 hover:text-gray-600 disabled:opacity-50", disabled: this.currentPage === 1 }, h("svg", { key: 'de7f4e16bc06ece898c34a331bce66da9b3c921a', class: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, h("path", { key: 'c9cb26551fb5fca8bb5485561fcfc942d36a3f7f', "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "M11 19l-7-7 7-7m8 14l-7-7 7-7" }))), h("button", { key: 'a882ca1c531b3862a4adc311cc6b8bca3aabe2a1', onClick: () => this.handlePagination('prev'), class: "p-1.5 text-gray-400 hover:text-gray-600 disabled:opacity-50", disabled: this.currentPage === 1 }, h("svg", { key: '8caca1e52abf2ca8dc4771f525b347603c5a5948', class: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, h("path", { key: 'ea3332b9bc24bc2b5b3ca18388eec2aec1aa74f3', "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "M15 19l-7-7 7-7" })))), h("span", { key: '02198cd02677ee3483e54a7147c708a9f9918d98', class: "text-gray-600" }, "Page ", this.currentPage, " of ", this.totalPages), h("div", { key: '0cdaed33f4635b034d94972c58a9bedb322d1a2c', class: "flex items-center gap-2" }, h("button", { key: '5da664556d5e5aca8250e97cc75db27b78be41b5', onClick: () => this.handlePagination('next'), class: "p-1.5 text-gray-400 hover:text-gray-600 disabled:opacity-50", disabled: this.currentPage === this.totalPages }, h("svg", { key: '59f287a0b728d8a9089ad6ba15176fdff0c7c019', class: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, h("path", { key: '6ef0aa4e82af5c79485cfc667903d630d1b1bd00', "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "M9 5l7 7-7 7" }))), h("button", { key: '0988918c39cd517fe858bbe66a7700aaf2a1b91d', onClick: () => this.handlePagination('last'), class: "p-1.5 text-gray-400 hover:text-gray-600 disabled:opacity-50", disabled: this.currentPage === this.totalPages }, h("svg", { key: '1c81b4ca1c8fd404c3e246dcd1e52e88dbced809', class: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, h("path", { key: 'c07e4ff68359b08ea8d35cbc49cd79f59eaa26a4', "stroke-linecap": "round", "stroke-linejoin": "round", "stroke-width": "2", d: "M13 5l7 7-7 7M5 5l7 7-7 7" })))))))));
|
|
230
230
|
}
|
|
231
231
|
static get is() { return "xplor-table"; }
|
|
232
232
|
static get encapsulation() { return "shadow"; }
|
|
@@ -4,11 +4,11 @@ export class XplorTextBubble {
|
|
|
4
4
|
this.color = 'orange';
|
|
5
5
|
}
|
|
6
6
|
render() {
|
|
7
|
-
return (h(Host, { key: '
|
|
7
|
+
return (h(Host, { key: 'b5f5fd2cff3c2b7f9712cdb879743d972d416285' }, h("div", { key: '5a0699d01928eae4c5e52b0681e466d7447b56ae', class: {
|
|
8
8
|
'text-bubble': true,
|
|
9
9
|
'text-bubble--green': this.color === 'green',
|
|
10
10
|
'text-bubble--orange': this.color === 'orange',
|
|
11
|
-
} }, h("slot", { key: '
|
|
11
|
+
} }, h("slot", { key: 'd5c6074d517155b2530f02fc018e694cec2fe348' }))));
|
|
12
12
|
}
|
|
13
13
|
static get is() { return "xplor-text-bubble"; }
|
|
14
14
|
static get encapsulation() { return "scoped"; }
|
|
@@ -124,10 +124,10 @@ export class XplorTextField {
|
|
|
124
124
|
}
|
|
125
125
|
render() {
|
|
126
126
|
const labelFloating = this.isFocused || this.hasValue;
|
|
127
|
-
return (h(Host, { key: '
|
|
127
|
+
return (h(Host, { key: '7688bafbb708956e01ead321771941c4ecb83bcf' }, h("div", { key: '28e49b516fbb9683cd330bc3abe39d0317296a8b', class: this.computedClasses }, h("div", { key: '8a794cc50d3c867f5037952acd0aba9ec9ee9c77', class: "xplor-text-field__wrapper", style: { backgroundColor: this.bgColor } }, h("div", { key: '6648e824d3e7bab5570412e4419dee91534a7d8d', class: "xplor-text-field__input-wrapper" }, this.label && (h("label", { key: 'cd40e099e18564269e90070aeabb1f55706ae35d', class: {
|
|
128
128
|
'xplor-text-field__label': true,
|
|
129
129
|
'xplor-text-field__label--floating': labelFloating,
|
|
130
|
-
} }, h("slot", { key: '
|
|
130
|
+
} }, h("slot", { key: '2d4bd72e4d3b40e5fc1e85131d07862bf24a48be', name: "label" }, this.label), this.required && h("span", { key: '756814ec4e90525285efd96b591e8b0915b6ebf3', class: "xplor-text-field__required" }, "*"))), h("input", { key: 'deb2a58f1bc30ebcd421f2cc030bfee0212dc7dc', ref: (el) => (this.inputElement = el), class: "xplor-text-field__input", type: this.type, value: this.value, placeholder: this.isFocused ? this.placeholder : '', disabled: this.disabled, readonly: this.readonly, required: this.required, maxlength: this.maxlength, min: this.min, max: this.max, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, "aria-invalid": this.hasError ? 'true' : 'false', "aria-describedby": this.hasError ? 'error-messages' : undefined }), h("div", { key: '3ce1c1f6a6c910a4d7715857026522d10a22be83', class: "xplor-text-field__append-inner" }, this.clearable && this.hasValue && !this.disabled && !this.readonly && (h("button", { key: '9656d4fae8eaa02631098b5e8ef72374d8b45f28', type: "button", class: "xplor-text-field__clear-btn", onClick: this.handleClear, "aria-label": "Clear" }, h("svg", { key: '51824a45c1aec572b395fd8d072beb2b0d1003e7', width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor" }, h("path", { key: '1cbce1823cbfc152ae7442696d8a6f077cd6a4e2', d: "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" })))), h("slot", { key: '31768a009720a207c972d1c15f2272617d29e3dc', name: "append-inner" })), h("fieldset", { key: '96494a34a975405453ca10da271ac6a2d3b443e9', class: "xplor-text-field__outline" }, h("legend", { key: '7353e3a474bd5e06d12fb43c1add91d21b3306b8', class: { 'xplor-text-field__outline-legend': true, 'xplor-text-field__outline-legend--floating': labelFloating } }, labelFloating && this.label ? h("span", null, this.label, this.required && '*') : h("span", null, "\u200B")))), h("div", { key: '42b5eff7483dff022d404c0fe23816dab12e3e02', class: "xplor-text-field__append" }, h("slot", { key: '93cbb0cce038f42f0d26e575f13e1f8f9a3127b5', name: "append" }))), this.showDetails && (h("div", { key: 'dd65c61d0d7084ca04ad99eb46df5fe0ef356f2a', class: "xplor-text-field__details" }, this.hasError && (h("div", { key: '99250ed143880032bfe5a31070b1a712aa7da48e', id: "error-messages", class: "xplor-text-field__error-messages" }, this.errorMessages.map((error) => (h("div", { class: "xplor-text-field__error" }, error))))))))));
|
|
131
131
|
}
|
|
132
132
|
static get is() { return "xplor-text-field"; }
|
|
133
133
|
static get encapsulation() { return "scoped"; }
|
|
@@ -282,16 +282,16 @@ export class XplorTimePicker {
|
|
|
282
282
|
}
|
|
283
283
|
render() {
|
|
284
284
|
const showDetails = this.hideDetails === false || (this.hideDetails === 'auto' && this.error);
|
|
285
|
-
const clockIcon = (h("svg", { key: '
|
|
286
|
-
return (h(Host, { key: '
|
|
285
|
+
const clockIcon = (h("svg", { key: 'fe7b627c18d27b85f40120cfebd75b5e84d05ffb', class: "time-picker__icon-svg", viewBox: "0 0 24 24", width: "20", height: "20", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("circle", { key: '8506a6cd516f42e7298df3a8711b4240d3073ddf', cx: "12", cy: "12", r: "10" }), h("polyline", { key: 'abe3af03c9975c553e45b926c0561200be010048', points: "12 6 12 12 16 14" })));
|
|
286
|
+
return (h(Host, { key: '7726361a1b2e579d542f2dc0dc68af50fc40fb94' }, h("div", { key: '1a13b496b12a8a186a3a4c1dbdabf1424d38073b', class: {
|
|
287
287
|
'time-picker': true,
|
|
288
288
|
'time-picker--disabled': this.disabled,
|
|
289
289
|
'time-picker--error': !!this.error,
|
|
290
290
|
'time-picker--open': this.isOpen,
|
|
291
|
-
} }, this.label && (h("label", { key: '
|
|
292
|
-
h("div", { key: '
|
|
293
|
-
h("div", { key: '
|
|
294
|
-
], h("div", { key: '
|
|
291
|
+
} }, this.label && (h("label", { key: 'e07b413d91ea7d636f1d613f283fd0146836842a', class: "time-picker__label" }, this.label, this.required && h("span", { key: 'd78be67681f84b5a0c33dc71a1a899be5899b089', class: "time-picker__required" }, "*"))), h("div", { key: '52273f1628d69c2ad7cf23b483e7106682f4a903', class: "time-picker__field" }, h("input", { key: '95a270bfcf61b6fb95a193d4efb3b834714c3268', type: "text", class: "time-picker__input", value: this.inputText, placeholder: this.placeholder, disabled: this.disabled, readonly: this.readonly, onFocus: this.handleInputFocus, onBlur: this.handleInputBlur, onInput: this.handleInputChange, style: { backgroundColor: this.bgColor } }), h("div", { key: '8e968c366b997652d7f5b9dd582157f179c52af6', class: "time-picker__actions" }, this.clearable && this.value && !this.disabled && !this.readonly && (h("button", { key: 'd9c090ed12649214da5eb07ae128dc0ebaa6e94e', type: "button", class: "time-picker__clear", onClick: this.handleClear, "aria-label": "Clear" }, "\u00D7")), h("button", { key: '58daab9391580e6b3dcb07665582bac08d770907', type: "button", class: "time-picker__icon-btn", onClick: this.toggleDropdown, disabled: this.disabled, "aria-label": "Open time picker" }, clockIcon))), showDetails && (h("div", { key: 'e1a479b852cb3f352f681c906b1cd5403d2be14d', class: "time-picker__details" }, this.error && h("div", { key: 'b40e5a31cb3839dabfc7156d7911489a5c8fa173', class: "time-picker__error-message" }, this.error))), this.isOpen && (h("div", { key: 'f4d3ac5c9658085e4df87e9ad90f7bf858c4aa36', class: "time-picker__dropdown" }, h("div", { key: 'b66a8a064a4e09e83073f2f90e2eddacb3e9748c', class: "time-picker__columns" }, h("div", { key: '9dc9382f48f8d4e50fe8738bf14c1e7ab8938c55', class: "time-picker__column" }, h("button", { key: 'd013faf5714f426bc9075fae84da79e22e92fd8f', type: "button", class: "time-picker__spinner-btn", onClick: this.incrementHours, "aria-label": "Increase hours" }, this.renderChevronUp()), h("div", { key: '2fbdc620aa22346d026af3f6bafdce919b7bc469', class: "time-picker__value" }, String(this.hours).padStart(2, '0')), h("button", { key: 'f28ba42badef4eaf59ca51a14aa141b383fcc999', type: "button", class: "time-picker__spinner-btn", onClick: this.decrementHours, "aria-label": "Decrease hours" }, this.renderChevronDown())), h("div", { key: '92d30ec7821ab78d51bff5be38e318ec3870437d', class: "time-picker__separator" }, ":"), h("div", { key: '6a3cb83fc67b13e894e990908c998da96e69612d', class: "time-picker__column" }, h("button", { key: 'dcb237b53e359a90da737da41d15bcd0a45d8e63', type: "button", class: "time-picker__spinner-btn", onClick: this.incrementMinutes, "aria-label": "Increase minutes" }, this.renderChevronUp()), h("div", { key: '2cbb2c828a6cac6585b9004cb10fd71b890088d4', class: "time-picker__value" }, String(this.minutes).padStart(2, '0')), h("button", { key: '4eea1d49921c922f645ce2e67e0f65a2782570d5', type: "button", class: "time-picker__spinner-btn", onClick: this.decrementMinutes, "aria-label": "Decrease minutes" }, this.renderChevronDown())), this.showSeconds && [
|
|
292
|
+
h("div", { key: '6a992f5956d5a62bf2c727d57ee6873f21e351ee', class: "time-picker__separator" }, ":"),
|
|
293
|
+
h("div", { key: '7f767c2b47e77f4a370eef1b34230b59e283d852', class: "time-picker__column" }, h("button", { key: '50362fcd64188b6bc0292b973046b6e97271a103', type: "button", class: "time-picker__spinner-btn", onClick: this.incrementSeconds, "aria-label": "Increase seconds" }, this.renderChevronUp()), h("div", { key: 'ebec647338f001aadbf792bbfa5e210677144d9b', class: "time-picker__value" }, String(this.seconds).padStart(2, '0')), h("button", { key: '5e4c9cc6102fe1de7e4438df5edbea7749d98349', type: "button", class: "time-picker__spinner-btn", onClick: this.decrementSeconds, "aria-label": "Decrease seconds" }, this.renderChevronDown()))
|
|
294
|
+
], h("div", { key: '9f59e5a1647b78609e63f2dcccf3193d756056b2', class: "time-picker__column time-picker__column--period" }, h("button", { key: '9ccb2713bc81b1366b68b9ffb6c57e6165a5b0fa', type: "button", class: "time-picker__spinner-btn", onClick: this.togglePeriod, "aria-label": "Toggle AM/PM" }, this.renderChevronUp()), h("div", { key: '4010106b1caae18bc2145f5b8e8a6befa8c60b15', class: "time-picker__value time-picker__value--period" }, this.period), h("button", { key: '08bc807fd013ba7f51cc8b4f019ec9c415ca739a', type: "button", class: "time-picker__spinner-btn", onClick: this.togglePeriod, "aria-label": "Toggle AM/PM" }, this.renderChevronDown()))))))));
|
|
295
295
|
}
|
|
296
296
|
static get is() { return "xplor-time-picker"; }
|
|
297
297
|
static get encapsulation() { return "scoped"; }
|
|
@@ -155,10 +155,10 @@ export class XplorTooltip {
|
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
render() {
|
|
158
|
-
return (h(Host, { key: '
|
|
158
|
+
return (h(Host, { key: 'aa588e55e6f61fdc836e6463940837ee9b01bff0' }, h("div", { key: '8aa1430d9762baccfa60341362c08a37db894433', class: "tooltip-trigger", ref: (el) => (this.triggerEl = el), onClick: this.handleClick, "aria-describedby": this.open ? this.tooltipId : undefined }, h("slot", { key: 'a12f087b5025c462f4c31a7d38d642ac133dab13', name: "trigger" })), this.open && (h("div", { key: '357ee3a461a83df7ef6b4c7bb693e88e24aae0df', class: {
|
|
159
159
|
'tooltip': true,
|
|
160
160
|
[`tooltip--${this.position}`]: true,
|
|
161
|
-
}, style: this.tooltipStyle, ref: (el) => (this.tooltipEl = el), role: "tooltip", id: this.tooltipId }, h("div", { key: '
|
|
161
|
+
}, style: this.tooltipStyle, ref: (el) => (this.tooltipEl = el), role: "tooltip", id: this.tooltipId }, h("div", { key: '2845a038bd1964a7237d82d48aed518b112d5973', class: "tooltip__content" }, h("slot", { key: '70ac6bc962d70e8f68b1be63ae3586bd6f3be46d' }, this.content)), this.arrow && (h("div", { key: '2858ec182c4c4cafd5f8367b9a5578077c1250b4', class: "tooltip__arrow", style: this.arrowStyle }))))));
|
|
162
162
|
}
|
|
163
163
|
static get is() { return "xplor-tooltip"; }
|
|
164
164
|
static get encapsulation() { return "scoped"; }
|