luxen-ui 0.24.0 → 0.25.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.
Files changed (89) hide show
  1. package/cdn/custom-elements.json +359 -359
  2. package/cdn/elements/avatar/avatar.js +1 -1
  3. package/cdn/elements/avatar/avatar.js.map +1 -1
  4. package/cdn/elements/dropdown-item/dropdown-item.js +1 -1
  5. package/cdn/elements/dropdown-item/dropdown-item.js.map +1 -1
  6. package/cdn/elements/prose-editor/prose-editor.js +1 -1
  7. package/cdn/elements/prose-editor/prose-editor.js.map +1 -1
  8. package/cdn/elements/select/select.js +1 -1
  9. package/cdn/elements/select/select.js.map +1 -1
  10. package/cdn/elements/tag/tag.js +1 -1
  11. package/cdn/elements/tag/tag.js.map +1 -1
  12. package/cdn/elements/tree/tree.js +1 -1
  13. package/cdn/elements/tree/tree.js.map +1 -1
  14. package/cdn/elements/tree-item/tree-item.js +1 -1
  15. package/cdn/elements/tree-item/tree-item.js.map +1 -1
  16. package/cdn/shared/styles/button-core.styles.js +1 -1
  17. package/cdn/shared/styles/button-core.styles.js.map +1 -1
  18. package/cdn/shared/styles/checkbox-appearance.styles.js +1 -1
  19. package/cdn/shared/styles/checkbox-appearance.styles.js.map +1 -1
  20. package/cdn/shared/styles/picker-core.styles.js +1 -1
  21. package/cdn/shared/styles/picker-core.styles.js.map +1 -1
  22. package/cdn/standalone.css +153 -64
  23. package/cdn/standalone.js +10 -10
  24. package/cdn/standalone.js.map +1 -1
  25. package/cdn/styles/elements/breadcrumb.css +1 -1
  26. package/cdn/styles/elements/button.css +1 -1
  27. package/cdn/styles/elements/checkbox.css +1 -1
  28. package/cdn/styles/elements/close-button/circle.css +1 -1
  29. package/cdn/styles/elements/close-button/ring.css +1 -1
  30. package/cdn/styles/elements/close-button/square.css +1 -1
  31. package/cdn/styles/elements/disclosure.css +2 -2
  32. package/cdn/styles/elements/input-otp.css +2 -2
  33. package/cdn/styles/elements/input-stepper/default.css +2 -2
  34. package/cdn/styles/elements/input-stepper/pill.css +2 -2
  35. package/cdn/styles/elements/input-stepper/rounded.css +2 -2
  36. package/cdn/styles/elements/input.css +48 -15
  37. package/cdn/styles/elements/prose-editor.css +23 -8
  38. package/cdn/styles/elements/radio-group.css +1 -1
  39. package/cdn/styles/elements/radio.css +1 -1
  40. package/cdn/styles/elements/segmented-control.css +2 -2
  41. package/cdn/styles/elements/select.css +25 -4
  42. package/cdn/styles/elements/story.css +1 -1
  43. package/cdn/styles/elements/switch.css +1 -1
  44. package/cdn/styles/elements/tabs/enclosed.css +3 -3
  45. package/cdn/styles/elements/tabs/line.css +3 -3
  46. package/cdn/styles/elements/textarea.css +22 -8
  47. package/cdn/styles/preset.css +7 -1
  48. package/cdn/styles/tokens/aliases.css +3 -1
  49. package/cdn/styles/tokens/forms.css +4 -0
  50. package/cdn/styles/tokens.css +7 -1
  51. package/dist/css/elements/breadcrumb.css +1 -1
  52. package/dist/css/elements/button.css +1 -1
  53. package/dist/css/elements/checkbox.css +1 -1
  54. package/dist/css/elements/close-button/circle.css +1 -1
  55. package/dist/css/elements/close-button/ring.css +1 -1
  56. package/dist/css/elements/close-button/square.css +1 -1
  57. package/dist/css/elements/disclosure.css +2 -2
  58. package/dist/css/elements/input-otp.css +2 -2
  59. package/dist/css/elements/input-stepper/default.css +2 -2
  60. package/dist/css/elements/input-stepper/pill.css +2 -2
  61. package/dist/css/elements/input-stepper/rounded.css +2 -2
  62. package/dist/css/elements/input.css +48 -15
  63. package/dist/css/elements/prose-editor.css +23 -8
  64. package/dist/css/elements/radio-group.css +1 -1
  65. package/dist/css/elements/radio.css +1 -1
  66. package/dist/css/elements/segmented-control.css +2 -2
  67. package/dist/css/elements/select.css +25 -4
  68. package/dist/css/elements/story.css +1 -1
  69. package/dist/css/elements/switch.css +1 -1
  70. package/dist/css/elements/tabs/enclosed.css +3 -3
  71. package/dist/css/elements/tabs/line.css +3 -3
  72. package/dist/css/elements/textarea.css +22 -8
  73. package/dist/css/preset.css +7 -1
  74. package/dist/css/tokens/aliases.css +3 -1
  75. package/dist/css/tokens/forms.css +4 -0
  76. package/dist/css/tokens.css +7 -1
  77. package/dist/custom-elements.json +359 -359
  78. package/dist/elements/avatar/avatar.css +1 -1
  79. package/dist/elements/dropdown-item/dropdown-item.css +5 -4
  80. package/dist/elements/prose-editor/prose-editor.css +1 -1
  81. package/dist/elements/select/select.css +0 -4
  82. package/dist/elements/tag/tag.css +3 -3
  83. package/dist/elements/tree/tree.css +1 -1
  84. package/dist/elements/tree-item/tree-item.css +1 -1
  85. package/dist/metadata/index.json +1 -1
  86. package/dist/shared/styles/button-core.css +1 -1
  87. package/dist/shared/styles/checkbox-appearance.css +1 -1
  88. package/dist/shared/styles/picker-core.css +25 -4
  89. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import{i as e}from"../../chunks/lit.js";import{LuxenElement as t}from"../../shared/luxen-element.js";import{a as n,s as r,t as i}from"../../chunks/lit-html.js";import{r as a,t as o}from"../../chunks/static-html.js";import{n as s,r as c,t as l}from"../../chunks/decorate.js";import u from"../../shared/styles/host.styles.js";var d=e(`:host{--size:40px;--_font-size:calc(var(--size) * .4);width:var(--size);height:var(--size);border-radius:calc(var(--size) * .15);isolation:isolate;vertical-align:middle;color:var(--l-color-text-secondary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}:host([size=xs]){--size:24px;--_font-size:.75rem}:host([size=sm]){--size:32px;--_font-size:.875rem}:host([size=lg]){--size:48px;--_font-size:1.25rem}:host([size=xl]){--size:56px;--_font-size:1.25rem}img{object-fit:cover;border-radius:inherit;width:100%;height:100%}.initials{margin:auto}.icon{color:currentColor;width:60%;height:60%}.badge{z-index:1;min-width:12px;height:12px;box-shadow:0 0 0 2px var(--l-color-surface);background-color:var(--l-color-surface);font-size:.625rem;font-weight:var(--l-font-weight-medium);font-variant-numeric:tabular-nums;color:var(--l-color-text-primary);border-radius:3px;justify-content:center;align-items:center;padding-inline:2px;line-height:1;display:flex;position:absolute;bottom:0;right:0;overflow:hidden}.base:after{content:"";border-radius:inherit;pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 0 1px var(--lightningcss-light,oklch(0% 0 0/.07))var(--lightningcss-dark,oklch(100% 0 0/.1))}.base{border-radius:calc(var(--size) * .15);background-color:var(--color,var(--l-color-bg-fill-neutral-soft));--_on:calc(255 * ( 1 - sign(.2126 * (r / 255) * (r / 255) + .7152 * (g / 255) * (g / 255) + .0722 * (b / 255) * (b / 255) - .2) ) / 2);width:100%;height:100%;color:var(--text-color,rgb(from var(--color) var(--_on) var(--_on) var(--_on)));font-size:var(--_font-size);font-weight:var(--l-font-weight-medium);text-transform:uppercase;cursor:inherit;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}@supports (color:contrast-color(red)){.base{color:var(--text-color,contrast-color(var(--color)))}}button.base{cursor:pointer}button.base:focus-visible{outline:2px solid var(--l-focus-ring);outline-offset:2px}button.base:hover{box-shadow:inset 0 0 0 1.5px var(--l-color-border-interactive)}@container style(--appearance:circle){.base{border-radius:50%}}`);function f(e=``){let t=e.normalize(`NFC`).trim().split(/\s+/).filter(Boolean);if(t.length===0)return``;let n=e=>[...e][0];return(n(t[0])+(t.length>1?n(t[t.length-1]):``)).toUpperCase()}var p=r`<svg class="icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
1
+ import{i as e}from"../../chunks/lit.js";import{LuxenElement as t}from"../../shared/luxen-element.js";import{a as n,s as r,t as i}from"../../chunks/lit-html.js";import{r as a,t as o}from"../../chunks/static-html.js";import{n as s,r as c,t as l}from"../../chunks/decorate.js";import u from"../../shared/styles/host.styles.js";var d=e(`:host{--size:40px;--_font-size:calc(var(--size) * .4);width:var(--size);height:var(--size);border-radius:calc(var(--size) * .15);isolation:isolate;vertical-align:middle;color:var(--l-color-text-secondary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}:host([size=xs]){--size:24px;--_font-size:.75rem}:host([size=sm]){--size:32px;--_font-size:.875rem}:host([size=lg]){--size:48px;--_font-size:1.25rem}:host([size=xl]){--size:56px;--_font-size:1.25rem}img{object-fit:cover;border-radius:inherit;width:100%;height:100%}.initials{margin:auto}.icon{color:currentColor;width:60%;height:60%}.badge{z-index:1;min-width:12px;height:12px;box-shadow:0 0 0 2px var(--l-color-surface);background-color:var(--l-color-surface);font-size:.625rem;font-weight:var(--l-font-weight-medium);font-variant-numeric:tabular-nums;color:var(--l-color-text-primary);border-radius:3px;justify-content:center;align-items:center;padding-inline:2px;line-height:1;display:flex;position:absolute;bottom:0;right:0;overflow:hidden}.base:after{content:"";border-radius:inherit;pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 0 1px var(--lightningcss-light,oklch(0% 0 0/.07))var(--lightningcss-dark,oklch(100% 0 0/.1))}.base{border-radius:calc(var(--size) * .15);background-color:var(--color,var(--l-color-bg-fill-neutral-soft));--_on:calc(255 * ( 1 - sign(.2126 * (r / 255) * (r / 255) + .7152 * (g / 255) * (g / 255) + .0722 * (b / 255) * (b / 255) - .2) ) / 2);width:100%;height:100%;color:var(--text-color,rgb(from var(--color) var(--_on) var(--_on) var(--_on)));font-size:var(--_font-size);font-weight:var(--l-font-weight-medium);text-transform:uppercase;cursor:inherit;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}@supports (color:contrast-color(red)){.base{color:var(--text-color,contrast-color(var(--color)))}}button.base{cursor:pointer}button.base:focus-visible{outline:var(--l-focus-ring-width) solid var(--l-focus-ring);outline-offset:2px}button.base:hover{box-shadow:inset 0 0 0 1.5px var(--l-color-border-interactive)}@container style(--appearance:circle){.base{border-radius:50%}}`);function f(e=``){let t=e.normalize(`NFC`).trim().split(/\s+/).filter(Boolean);if(t.length===0)return``;let n=e=>[...e][0];return(n(t[0])+(t.length>1?n(t[t.length-1]):``)).toUpperCase()}var p=r`<svg class="icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
2
2
  <path d="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
3
3
  </svg>`,m=class extends t{constructor(...e){super(...e),this.src=``,this.name=``,this.size=`md`,this.badge=0,this.interactive=!1,this._hasError=!1,this._onError=()=>{this._hasError=!0}}static{this.styles=[u,d]}willUpdate(e){e.has(`src`)&&(this._hasError=!1)}connectedCallback(){super.connectedCallback(),!this.interactive&&!this.hasAttribute(`role`)&&this.setAttribute(`role`,`img`)}updated(){this.interactive?(this.getAttribute(`role`)===`img`&&this.removeAttribute(`role`),this.removeAttribute(`aria-label`)):(this.hasAttribute(`role`)||this.setAttribute(`role`,`img`),this.name&&this.setAttribute(`aria-label`,this.name));let e=getComputedStyle(this).getPropertyValue(`--appearance`).trim()===`circle`;this.style.borderRadius=e?`50%`:``}get _tag(){return this.interactive?o`button`:o`div`}render(){let e=this.src&&!this._hasError?n`<img
4
4
  src=${this.src}
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.js","names":["unsafeCSS","rawStyles","hostStyles","nothing","_decorate","property","state","r","b","w","A","u","i","r$1","n","__decorate","host_styles_default","styles","getInitials","words","name","firstLetter","word","defaultIcon","Avatar","LuxenElement","_args","changed","isCircle","content"],"sources":["../../../src/html/elements/avatar/avatar.css?inline","../../../src/html/elements/avatar/avatar.ts"],"sourcesContent":[":host {\n --size: 40px;\n --_font-size: calc(var(--size) * 0.4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--size);\n height: var(--size);\n border-radius: calc(var(--size) * 0.15);\n isolation: isolate;\n vertical-align: middle;\n flex-shrink: 0;\n color: var(--l-color-text-secondary);\n}\n\n:host([size='xs']) {\n --size: 24px;\n --_font-size: 0.75rem;\n}\n:host([size='sm']) {\n --size: 32px;\n --_font-size: 0.875rem;\n}\n:host([size='lg']) {\n --size: 48px;\n --_font-size: 1.25rem;\n}\n:host([size='xl']) {\n --size: 56px;\n --_font-size: 1.25rem;\n}\n\nimg {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: inherit;\n}\n\n.initials {\n margin: auto;\n}\n\n.icon {\n width: 60%;\n height: 60%;\n color: currentColor;\n}\n\n.badge {\n position: absolute;\n bottom: 0;\n right: 0;\n z-index: 1;\n height: 12px;\n min-width: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-inline: 2px;\n border-radius: 3px;\n box-shadow: 0 0 0 2px var(--l-color-surface);\n background-color: var(--l-color-surface);\n font-size: 0.625rem;\n font-weight: var(--l-font-weight-medium);\n font-variant-numeric: tabular-nums;\n line-height: 1;\n color: var(--l-color-text-primary);\n overflow: hidden;\n}\n\n/*\n * Inset ring via ::after so it renders on top of the <img>.\n * A box-shadow on :host would be covered by the image since\n * it fills the entire element with object-fit: cover.\n */\n.base::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px light-dark(oklch(0 0 0 / 7%), oklch(100% 0 0 / 10%));\n pointer-events: none;\n}\n\n.base {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: calc(var(--size) * 0.15);\n background-color: var(--color, var(--l-color-bg-fill-neutral-soft));\n /*\n * Text over --color, decided by the background's own luminance — never the\n * document mode, since --color is consumer-set and ignores light/dark.\n * The contrast-color() block below is the primary path (Baseline 2026); this\n * --_on calc() is the fallback for browsers predating it (Chrome ≤146,\n * Safari <26, Firefox <146). It approximates WCAG relative luminance with\n * squared sRGB channels (a cheap linearization, Rec. 709 weights) and flips at\n * 0.2, just above the black/white crossover (~0.179) to offset squaring\n * underestimating mid-tones — holding AA across saturated brand colors where an\n * OKLCH-lightness threshold collapses to ≈1:1 (OKLCH L tracks hue, not\n * luminance: a mid red reads \"light\" yet needs white text). --text-color lets\n * consumers force a specific brand text color, overriding both paths.\n */\n --_on: calc(\n 255 *\n (\n 1 -\n sign(\n 0.2126 * (r / 255) * (r / 255) + 0.7152 * (g / 255) * (g / 255) + 0.0722 * (b / 255) *\n (b / 255) - 0.2\n )\n ) /\n 2\n );\n color: var(--text-color, rgb(from var(--color) var(--_on) var(--_on) var(--_on)));\n font-size: var(--_font-size);\n font-weight: var(--l-font-weight-medium);\n line-height: 1;\n text-transform: uppercase;\n padding: 0;\n cursor: inherit;\n}\n\n/* Primary path: native, guaranteed-contrast black/white. contrast-color() is\n * Baseline Newly Available (2026) — Safari 26+, Firefox 146+, Chrome/Edge 147+ —\n * and supersedes the luminance approximation above where supported. @supports (not\n * declaration order) is required: the value contains var(), so a non-supporting\n * browser would treat contrast-color() as invalid-at-computed-value-time and reset\n * to `inherit` rather than falling back to the calc() line. No bg fallback inside,\n * so a bare avatar (no --color) keeps inheriting --l-color-text-secondary.\n * --text-color still wins here, overriding contrast-color()'s choice.\n * (The earlier `… vs black, white to AA` extended syntax was dropped from the spec.) */\n@supports (color: contrast-color(red)) {\n .base {\n color: var(--text-color, contrast-color(var(--color)));\n }\n}\n\nbutton.base {\n cursor: pointer;\n}\n\nbutton.base:focus-visible {\n outline: 2px solid var(--l-focus-ring);\n outline-offset: 2px;\n}\n\nbutton.base:hover {\n box-shadow: inset 0 0 0 1.5px var(--l-color-border-interactive);\n}\n\n@container style(--appearance: circle) {\n .base {\n border-radius: 50%;\n }\n}\n","import { html, nothing, svg, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { html as staticHtml, literal } from 'lit/static-html.js';\nimport { property, state } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './avatar.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * Extracts up to two uppercase initials from a name: the first letter of the\n * first word, plus the first letter of the last word when there is more than one.\n *\n * Splits on whitespace rather than relying on a `\\b`/`\\w` regex, which only\n * recognises ASCII and mangles accented or non-ASCII names.\n *\n * @param name - The name to extract initials from. Defaults to an empty string.\n * @return The uppercased initials, or an empty string when `name` is blank.\n *\n * @example getInitials('John Doe') // 'JD'\n * @example getInitials('Markus Nösterer') // 'MN' (accents preserved)\n * @example getInitials('Cher') // 'C' (single word → one initial)\n * @example getInitials(' John Doe ') // 'JD' (extra whitespace ignored)\n * @example getInitials('') // ''\n */\nfunction getInitials(name: string = ''): string {\n const words = name.normalize('NFC').trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '';\n\n // Spreading iterates by code point, so an accented letter (or an astral\n // character like an emoji) is taken whole instead of a broken half.\n // oxlint-disable-next-line typescript/no-misused-spread -- code-point-safe first char is the intent\n const firstLetter = (word: string) => [...word][0];\n\n const first = firstLetter(words[0]);\n const last = words.length > 1 ? firstLetter(words[words.length - 1]) : '';\n return (first + last).toUpperCase();\n}\n\nconst defaultIcon = svg`<svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\" />\n</svg>`;\n\n/**\n * @summary An avatar component for displaying user images, initials, or a default icon.\n * @customElement l-avatar\n *\n * @cssproperty [--size=40px] - Box size (any length). Set it inline (e.g. `style=\"--size: 20px\"`) for an arbitrary size beyond the `size` token scale; the font then follows proportionally. The `size` attribute sets it to the matching token.\n * @cssproperty --color - Background fill color for initials and the default icon.\n * @cssproperty --text-color - Initials/icon color over `--color`. Defaults to an auto-derived readable color; set it to enforce a specific brand color (overrides the automatic choice).\n * @cssproperty --appearance - Set to `circle` for a fully circular avatar (default is a rounded square).\n *\n * @csspart base - The avatar container that paints `--color`; style it (e.g. `color`) to override the auto-derived text color.\n *\n * @cssClass .l-avatar-group - Flex wrapper that overlaps a row of stacked avatars.\n */\nexport class Avatar extends LuxenElement {\n static styles = [hostStyles, styles];\n\n /** Image URL. Falls back to initials (then the default icon) if it fails to load. */\n @property()\n src = '';\n\n /** Name used as the accessible label and to derive the initials fallback. */\n @property()\n name = '';\n\n /** Avatar size: `xs`, `sm`, `md` (default), `lg`, or `xl`. */\n @property({ reflect: true })\n size = 'md';\n\n /** Count shown in the corner badge. `0` hides the badge. */\n @property({ type: Number })\n badge = 0;\n\n /** Render as a `<button>` with focus ring and hover states. */\n @property({ type: Boolean, reflect: true })\n interactive = false;\n\n @state() private _hasError = false;\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('src')) {\n this._hasError = false;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.interactive && !this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n }\n\n updated() {\n // An interactive avatar renders a focusable <button>, and a role=\"img\" node\n // must stay a leaf in the accessibility tree — so the host carries no role\n // or label and the inner button holds the accessible name (see render()).\n if (this.interactive) {\n if (this.getAttribute('role') === 'img') this.removeAttribute('role');\n this.removeAttribute('aria-label');\n } else {\n if (!this.hasAttribute('role')) this.setAttribute('role', 'img');\n if (this.name) this.setAttribute('aria-label', this.name);\n }\n\n const isCircle = getComputedStyle(this).getPropertyValue('--appearance').trim() === 'circle';\n this.style.borderRadius = isCircle ? '50%' : '';\n }\n\n private get _tag() {\n return this.interactive ? literal`button` : literal`div`;\n }\n\n render() {\n const content =\n this.src && !this._hasError\n ? html`<img\n src=${this.src}\n alt=${this.name || ''}\n @error=${this._onError}\n />`\n : this.name\n ? html`<span class=\"initials\">${getInitials(this.name)}</span>`\n : html`<slot>${defaultIcon}</slot>`;\n\n return staticHtml`\n <${this._tag}\n class=\"base\"\n part=\"base\"\n type=${this.interactive ? 'button' : nothing}\n aria-label=${this.interactive && this.name ? this.name : nothing}\n >\n ${content}\n </${this._tag}>\n ${\n this.badge\n ? html`<div\n class=\"badge\"\n aria-hidden=\"true\"\n >\n ${this.badge}\n </div>`\n : nothing\n }\n `;\n }\n\n private _onError = () => {\n this._hasError = true;\n };\n}\n"],"mappings":"A,oUCOA,IAAMiB,EAASjB,EAAUC,4mEAAS,EAkBlC,SAASiB,EAAY,EAAe,GAAY,CAC9C,IAAMC,EAAQC,EAAK,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,EACtE,GAAID,EAAM,SAAW,EAAG,MAAO,GAK/B,IAAME,EAAe,GAAiB,CAAC,GAAGC,CAAI,CAAC,CAAC,GAIhD,OAFcD,EAAYF,EAAM,EAExB,GADKA,EAAM,OAAS,EAAIE,EAAYF,EAAMA,EAAM,OAAS,EAAE,EAAI,IAAA,CACjD,YAAY,CACpC,CAEA,IAAMI,EAAc,CAAG;;QAiBVC,EAAb,cAA4BC,CAAa,C,8BAKjC,KAAA,IAAA,GAIC,KAAA,KAAA,GAIA,KAAA,KAAA,KAIC,KAAA,MAAA,EAIM,KAAA,YAAA,GAEe,KAAA,UAAA,GAqEJ,KAAA,aAAA,CACvB,KAAK,UAAY,EACnB,C,QA7FgB,KAAA,OAAA,CAACvB,EAAYe,CAAM,C,CAwBnC,WAAW,EAA+B,CACpCU,EAAQ,IAAI,KAAK,IACnB,KAAK,UAAY,GAErB,CAEA,mBAAoB,CAClB,MAAM,kBAAkB,EACpB,CAAC,KAAK,aAAe,CAAC,KAAK,aAAa,MAAM,GAChD,KAAK,aAAa,OAAQ,KAAK,CAEnC,CAEA,SAAU,CAIJ,KAAK,aACH,KAAK,aAAa,MAAM,IAAM,OAAO,KAAK,gBAAgB,MAAM,EACpE,KAAK,gBAAgB,YAAY,IAE5B,KAAK,aAAa,MAAM,GAAG,KAAK,aAAa,OAAQ,KAAK,EAC3D,KAAK,MAAM,KAAK,aAAa,aAAc,KAAK,IAAI,GAG1D,IAAMC,EAAW,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,cAAc,CAAC,CAAC,KAAK,IAAM,SACpF,KAAK,MAAM,aAAeA,EAAW,MAAQ,EAC/C,CAEA,IAAY,MAAO,CACjB,OAAO,KAAK,YAAc,CAAO,SAAW,CAAO,KACrD,CAEA,QAAS,CACP,IAAMC,EACJ,KAAK,KAAO,CAAC,KAAK,UACd,CAAI;kBACI,KAAK,IAAI;kBACT,KAAK,MAAQ,GAAG;qBACb,KAAK,SAAS;cAEzB,KAAK,KACH,CAAI,0BAA0BX,EAAY,KAAK,IAAI,EAAE,SACrD,CAAI,SAASK,EAAY,SAEjC,MAAO,EAAU;SACZ,KAAK,KAAK;;;eAGJ,KAAK,YAAc,SAAWpB,EAAQ;qBAChC,KAAK,aAAe,KAAK,KAAO,KAAK,KAAOA,EAAQ;;UAE/D0B,EAAQ;UACR,KAAK,KAAK;QAEZ,KAAK,MACD,CAAI;;;;gBAIA,KAAK,MAAM;oBAEf1B,EACL;KAEL,CAKF,EA3FGC,EAAA,CAAAC,EAAS,CAAA,EAAAmB,EAAA,UAAA,MAAA,IAAA,EAAA,EAITpB,EAAA,CAAAC,EAAS,CAAA,EAAAmB,EAAA,UAAA,OAAA,IAAA,EAAA,EAITpB,EAAA,CAAAC,EAAS,CAAE,QAAS,EAAK,CAAC,CAAA,EAAAmB,EAAA,UAAA,OAAA,IAAA,EAAA,EAI1BpB,EAAA,CAAAC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAAAmB,EAAA,UAAA,QAAA,IAAA,EAAA,EAIzBpB,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,CAAA,EAAAmB,EAAA,UAAA,cAAA,IAAA,EAAA,EAGzCpB,EAAA,CAAAE,EAAM,CAAA,EAAAkB,EAAA,UAAA,YAAA,IAAA,EAAA,E"}
1
+ {"version":3,"file":"avatar.js","names":["unsafeCSS","rawStyles","hostStyles","nothing","_decorate","property","state","r","b","w","A","u","i","r$1","n","__decorate","host_styles_default","styles","getInitials","words","name","firstLetter","word","defaultIcon","Avatar","LuxenElement","_args","changed","isCircle","content"],"sources":["../../../src/html/elements/avatar/avatar.css?inline","../../../src/html/elements/avatar/avatar.ts"],"sourcesContent":[":host {\n --size: 40px;\n --_font-size: calc(var(--size) * 0.4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--size);\n height: var(--size);\n border-radius: calc(var(--size) * 0.15);\n isolation: isolate;\n vertical-align: middle;\n flex-shrink: 0;\n color: var(--l-color-text-secondary);\n}\n\n:host([size='xs']) {\n --size: 24px;\n --_font-size: 0.75rem;\n}\n:host([size='sm']) {\n --size: 32px;\n --_font-size: 0.875rem;\n}\n:host([size='lg']) {\n --size: 48px;\n --_font-size: 1.25rem;\n}\n:host([size='xl']) {\n --size: 56px;\n --_font-size: 1.25rem;\n}\n\nimg {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: inherit;\n}\n\n.initials {\n margin: auto;\n}\n\n.icon {\n width: 60%;\n height: 60%;\n color: currentColor;\n}\n\n.badge {\n position: absolute;\n bottom: 0;\n right: 0;\n z-index: 1;\n height: 12px;\n min-width: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-inline: 2px;\n border-radius: 3px;\n box-shadow: 0 0 0 2px var(--l-color-surface);\n background-color: var(--l-color-surface);\n font-size: 0.625rem;\n font-weight: var(--l-font-weight-medium);\n font-variant-numeric: tabular-nums;\n line-height: 1;\n color: var(--l-color-text-primary);\n overflow: hidden;\n}\n\n/*\n * Inset ring via ::after so it renders on top of the <img>.\n * A box-shadow on :host would be covered by the image since\n * it fills the entire element with object-fit: cover.\n */\n.base::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px light-dark(oklch(0 0 0 / 7%), oklch(100% 0 0 / 10%));\n pointer-events: none;\n}\n\n.base {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: calc(var(--size) * 0.15);\n background-color: var(--color, var(--l-color-bg-fill-neutral-soft));\n /*\n * Text over --color, decided by the background's own luminance — never the\n * document mode, since --color is consumer-set and ignores light/dark.\n * The contrast-color() block below is the primary path (Baseline 2026); this\n * --_on calc() is the fallback for browsers predating it (Chrome ≤146,\n * Safari <26, Firefox <146). It approximates WCAG relative luminance with\n * squared sRGB channels (a cheap linearization, Rec. 709 weights) and flips at\n * 0.2, just above the black/white crossover (~0.179) to offset squaring\n * underestimating mid-tones — holding AA across saturated brand colors where an\n * OKLCH-lightness threshold collapses to ≈1:1 (OKLCH L tracks hue, not\n * luminance: a mid red reads \"light\" yet needs white text). --text-color lets\n * consumers force a specific brand text color, overriding both paths.\n */\n --_on: calc(\n 255 *\n (\n 1 -\n sign(\n 0.2126 * (r / 255) * (r / 255) + 0.7152 * (g / 255) * (g / 255) + 0.0722 * (b / 255) *\n (b / 255) - 0.2\n )\n ) /\n 2\n );\n color: var(--text-color, rgb(from var(--color) var(--_on) var(--_on) var(--_on)));\n font-size: var(--_font-size);\n font-weight: var(--l-font-weight-medium);\n line-height: 1;\n text-transform: uppercase;\n padding: 0;\n cursor: inherit;\n}\n\n/* Primary path: native, guaranteed-contrast black/white. contrast-color() is\n * Baseline Newly Available (2026) — Safari 26+, Firefox 146+, Chrome/Edge 147+ —\n * and supersedes the luminance approximation above where supported. @supports (not\n * declaration order) is required: the value contains var(), so a non-supporting\n * browser would treat contrast-color() as invalid-at-computed-value-time and reset\n * to `inherit` rather than falling back to the calc() line. No bg fallback inside,\n * so a bare avatar (no --color) keeps inheriting --l-color-text-secondary.\n * --text-color still wins here, overriding contrast-color()'s choice.\n * (The earlier `… vs black, white to AA` extended syntax was dropped from the spec.) */\n@supports (color: contrast-color(red)) {\n .base {\n color: var(--text-color, contrast-color(var(--color)));\n }\n}\n\nbutton.base {\n cursor: pointer;\n}\n\nbutton.base:focus-visible {\n outline: var(--l-focus-ring-width) solid var(--l-focus-ring);\n outline-offset: 2px;\n}\n\nbutton.base:hover {\n box-shadow: inset 0 0 0 1.5px var(--l-color-border-interactive);\n}\n\n@container style(--appearance: circle) {\n .base {\n border-radius: 50%;\n }\n}\n","import { html, nothing, svg, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { html as staticHtml, literal } from 'lit/static-html.js';\nimport { property, state } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './avatar.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * Extracts up to two uppercase initials from a name: the first letter of the\n * first word, plus the first letter of the last word when there is more than one.\n *\n * Splits on whitespace rather than relying on a `\\b`/`\\w` regex, which only\n * recognises ASCII and mangles accented or non-ASCII names.\n *\n * @param name - The name to extract initials from. Defaults to an empty string.\n * @return The uppercased initials, or an empty string when `name` is blank.\n *\n * @example getInitials('John Doe') // 'JD'\n * @example getInitials('Markus Nösterer') // 'MN' (accents preserved)\n * @example getInitials('Cher') // 'C' (single word → one initial)\n * @example getInitials(' John Doe ') // 'JD' (extra whitespace ignored)\n * @example getInitials('') // ''\n */\nfunction getInitials(name: string = ''): string {\n const words = name.normalize('NFC').trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '';\n\n // Spreading iterates by code point, so an accented letter (or an astral\n // character like an emoji) is taken whole instead of a broken half.\n // oxlint-disable-next-line typescript/no-misused-spread -- code-point-safe first char is the intent\n const firstLetter = (word: string) => [...word][0];\n\n const first = firstLetter(words[0]);\n const last = words.length > 1 ? firstLetter(words[words.length - 1]) : '';\n return (first + last).toUpperCase();\n}\n\nconst defaultIcon = svg`<svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\" />\n</svg>`;\n\n/**\n * @summary An avatar component for displaying user images, initials, or a default icon.\n * @customElement l-avatar\n *\n * @cssproperty [--size=40px] - Box size (any length). Set it inline (e.g. `style=\"--size: 20px\"`) for an arbitrary size beyond the `size` token scale; the font then follows proportionally. The `size` attribute sets it to the matching token.\n * @cssproperty --color - Background fill color for initials and the default icon.\n * @cssproperty --text-color - Initials/icon color over `--color`. Defaults to an auto-derived readable color; set it to enforce a specific brand color (overrides the automatic choice).\n * @cssproperty --appearance - Set to `circle` for a fully circular avatar (default is a rounded square).\n *\n * @csspart base - The avatar container that paints `--color`; style it (e.g. `color`) to override the auto-derived text color.\n *\n * @cssClass .l-avatar-group - Flex wrapper that overlaps a row of stacked avatars.\n */\nexport class Avatar extends LuxenElement {\n static styles = [hostStyles, styles];\n\n /** Image URL. Falls back to initials (then the default icon) if it fails to load. */\n @property()\n src = '';\n\n /** Name used as the accessible label and to derive the initials fallback. */\n @property()\n name = '';\n\n /** Avatar size: `xs`, `sm`, `md` (default), `lg`, or `xl`. */\n @property({ reflect: true })\n size = 'md';\n\n /** Count shown in the corner badge. `0` hides the badge. */\n @property({ type: Number })\n badge = 0;\n\n /** Render as a `<button>` with focus ring and hover states. */\n @property({ type: Boolean, reflect: true })\n interactive = false;\n\n @state() private _hasError = false;\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('src')) {\n this._hasError = false;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.interactive && !this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n }\n\n updated() {\n // An interactive avatar renders a focusable <button>, and a role=\"img\" node\n // must stay a leaf in the accessibility tree — so the host carries no role\n // or label and the inner button holds the accessible name (see render()).\n if (this.interactive) {\n if (this.getAttribute('role') === 'img') this.removeAttribute('role');\n this.removeAttribute('aria-label');\n } else {\n if (!this.hasAttribute('role')) this.setAttribute('role', 'img');\n if (this.name) this.setAttribute('aria-label', this.name);\n }\n\n const isCircle = getComputedStyle(this).getPropertyValue('--appearance').trim() === 'circle';\n this.style.borderRadius = isCircle ? '50%' : '';\n }\n\n private get _tag() {\n return this.interactive ? literal`button` : literal`div`;\n }\n\n render() {\n const content =\n this.src && !this._hasError\n ? html`<img\n src=${this.src}\n alt=${this.name || ''}\n @error=${this._onError}\n />`\n : this.name\n ? html`<span class=\"initials\">${getInitials(this.name)}</span>`\n : html`<slot>${defaultIcon}</slot>`;\n\n return staticHtml`\n <${this._tag}\n class=\"base\"\n part=\"base\"\n type=${this.interactive ? 'button' : nothing}\n aria-label=${this.interactive && this.name ? this.name : nothing}\n >\n ${content}\n </${this._tag}>\n ${\n this.badge\n ? html`<div\n class=\"badge\"\n aria-hidden=\"true\"\n >\n ${this.badge}\n </div>`\n : nothing\n }\n `;\n }\n\n private _onError = () => {\n this._hasError = true;\n };\n}\n"],"mappings":"A,oUCOA,IAAMiB,EAASjB,EAAUC,koEAAS,EAkBlC,SAASiB,EAAY,EAAe,GAAY,CAC9C,IAAMC,EAAQC,EAAK,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,EACtE,GAAID,EAAM,SAAW,EAAG,MAAO,GAK/B,IAAME,EAAe,GAAiB,CAAC,GAAGC,CAAI,CAAC,CAAC,GAIhD,OAFcD,EAAYF,EAAM,EAExB,GADKA,EAAM,OAAS,EAAIE,EAAYF,EAAMA,EAAM,OAAS,EAAE,EAAI,IAAA,CACjD,YAAY,CACpC,CAEA,IAAMI,EAAc,CAAG;;QAiBVC,EAAb,cAA4BC,CAAa,C,8BAKjC,KAAA,IAAA,GAIC,KAAA,KAAA,GAIA,KAAA,KAAA,KAIC,KAAA,MAAA,EAIM,KAAA,YAAA,GAEe,KAAA,UAAA,GAqEJ,KAAA,aAAA,CACvB,KAAK,UAAY,EACnB,C,QA7FgB,KAAA,OAAA,CAACvB,EAAYe,CAAM,C,CAwBnC,WAAW,EAA+B,CACpCU,EAAQ,IAAI,KAAK,IACnB,KAAK,UAAY,GAErB,CAEA,mBAAoB,CAClB,MAAM,kBAAkB,EACpB,CAAC,KAAK,aAAe,CAAC,KAAK,aAAa,MAAM,GAChD,KAAK,aAAa,OAAQ,KAAK,CAEnC,CAEA,SAAU,CAIJ,KAAK,aACH,KAAK,aAAa,MAAM,IAAM,OAAO,KAAK,gBAAgB,MAAM,EACpE,KAAK,gBAAgB,YAAY,IAE5B,KAAK,aAAa,MAAM,GAAG,KAAK,aAAa,OAAQ,KAAK,EAC3D,KAAK,MAAM,KAAK,aAAa,aAAc,KAAK,IAAI,GAG1D,IAAMC,EAAW,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,cAAc,CAAC,CAAC,KAAK,IAAM,SACpF,KAAK,MAAM,aAAeA,EAAW,MAAQ,EAC/C,CAEA,IAAY,MAAO,CACjB,OAAO,KAAK,YAAc,CAAO,SAAW,CAAO,KACrD,CAEA,QAAS,CACP,IAAMC,EACJ,KAAK,KAAO,CAAC,KAAK,UACd,CAAI;kBACI,KAAK,IAAI;kBACT,KAAK,MAAQ,GAAG;qBACb,KAAK,SAAS;cAEzB,KAAK,KACH,CAAI,0BAA0BX,EAAY,KAAK,IAAI,EAAE,SACrD,CAAI,SAASK,EAAY,SAEjC,MAAO,EAAU;SACZ,KAAK,KAAK;;;eAGJ,KAAK,YAAc,SAAWpB,EAAQ;qBAChC,KAAK,aAAe,KAAK,KAAO,KAAK,KAAOA,EAAQ;;UAE/D0B,EAAQ;UACR,KAAK,KAAK;QAEZ,KAAK,MACD,CAAI;;;;gBAIA,KAAK,MAAM;oBAEf1B,EACL;KAEL,CAKF,EA3FGC,EAAA,CAAAC,EAAS,CAAA,EAAAmB,EAAA,UAAA,MAAA,IAAA,EAAA,EAITpB,EAAA,CAAAC,EAAS,CAAA,EAAAmB,EAAA,UAAA,OAAA,IAAA,EAAA,EAITpB,EAAA,CAAAC,EAAS,CAAE,QAAS,EAAK,CAAC,CAAA,EAAAmB,EAAA,UAAA,OAAA,IAAA,EAAA,EAI1BpB,EAAA,CAAAC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAAAmB,EAAA,UAAA,QAAA,IAAA,EAAA,EAIzBpB,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,CAAA,EAAAmB,EAAA,UAAA,cAAA,IAAA,EAAA,EAGzCpB,EAAA,CAAAE,EAAM,CAAA,EAAAkB,EAAA,UAAA,YAAA,IAAA,EAAA,E"}
@@ -1,4 +1,4 @@
1
- import{i as e}from"../../chunks/lit.js";import{LuxenElement as t}from"../../shared/luxen-element.js";import{n,r,t as i}from"../../chunks/decorate.js";import{a,t as o}from"../../chunks/lit-html.js";import{PopoverController as s}from"../../shared/controllers/popover.js";import{tagName as c}from"../../registry.js";import l from"../../shared/styles/host.styles.js";import u from"../../shared/styles/menu-panel.styles.js";var d=e(`:host{display:block}:host([disabled]){pointer-events:none;opacity:.5}.item{align-items:center;gap:var(--l-menu-item-gap);min-block-size:var(--l-menu-item-min-height);padding:var(--l-menu-item-padding-block) var(--l-menu-item-padding-inline);cursor:pointer;border-radius:var(--l-menu-item-border-radius);font-size:var(--l-popover-font-size);line-height:var(--l-popover-line-height);color:var(--l-color-text-primary);white-space:nowrap;text-align:start;outline:none;display:flex}.item:focus-visible{background:var(--l-color-bg-state-hover);outline:2px solid var(--l-focus-ring);outline-offset:-2px}@media (hover:hover){.item:hover{background:var(--l-color-bg-state-hover)}}:host([submenu-open]) .item{background:var(--l-color-bg-state-hover)}:host([variant=destructive]) .item{color:var(--l-color-text-danger)}:host([variant=destructive]) .item:focus-visible{background:var(--l-color-bg-fill-danger-soft);outline-color:var(--l-color-text-danger)}@media (hover:hover){:host([variant=destructive]) .item:hover{background:var(--l-color-bg-fill-danger-soft)}}.check{flex-shrink:0;width:16px;display:flex}.submenu-indicator{background-color:currentColor;flex-shrink:0;block-size:16px;inline-size:16px;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/contain no-repeat}:host(:dir(rtl)) .submenu-indicator{scale:-1 1}:host(:not([checked])) .check svg{visibility:hidden}::slotted([slot=prefix]),::slotted([slot=suffix]){flex-shrink:0;display:flex}.label{flex:1}`),f=class extends t{constructor(...e){super(...e),this._submenuFloating=new s(this,{getTriggerElement:()=>this,getFloatingElement:()=>this._submenuEl,getArrowElement:()=>null}),this.#e=``,this.#t=!1,this.#n=`normal`,this.#r=void 0,this.#i=!1,this.#a=!1,this.#o=`start`,this.#s=!1,this._onSubmenuSlotChange=e=>{let t=e.target;this._hasSubmenu=t.assignedElements().some(e=>e.tagName===c(`dropdown-item`).toUpperCase())}}static{this.styles=[l,u,d]}#e;get value(){return this.#e}set value(e){this.#e=e}#t;get disabled(){return this.#t}set disabled(e){this.#t=e}#n;get type(){return this.#n}set type(e){this.#n=e}#r;get variant(){return this.#r}set variant(e){this.#r=e}#i;get checked(){return this.#i}set checked(e){this.#i=e}#a;get submenuOpen(){return this.#a}set submenuOpen(e){this.#a=e}#o;get checkPlacement(){return this.#o}set checkPlacement(e){this.#o=e}#s;get _hasSubmenu(){return this.#s}set _hasSubmenu(e){this.#s=e}get hasSubmenu(){return this._hasSubmenu}connectedCallback(){super.connectedCallback(),this.hasAttribute(`role`)||this.setAttribute(`role`,`none`)}get _submenuEl(){return this.shadowRoot.querySelector(`.submenu`)}getTextLabel(){let e=this.shadowRoot?.querySelector(`slot:not([name])`);return e?e.assignedNodes({flatten:!0}).map(e=>e.textContent??``).join(``).trim():(this.textContent??``).trim()}getSubmenuItems(){let e=this.shadowRoot?.querySelector(`slot[name="submenu"]`);return e?e.assignedElements().filter(e=>e.tagName===c(`dropdown-item`).toUpperCase()&&!e.disabled):[]}openSubmenu(){!this._hasSubmenu||this.disabled||this.submenuOpen||(this.submenuOpen=!0)}closeSubmenu(){for(let e of this.getSubmenuItems())e.closeSubmenu();this.submenuOpen&&=!1}updated(e){e.has(`submenuOpen`)&&this._handleSubmenuOpenChange()}async _handleSubmenuOpenChange(){let e=this._submenuEl;if(!e)return;let t={placement:getComputedStyle(this).direction===`rtl`?`left-start`:`right-start`,distance:0,skidding:-parseFloat(getComputedStyle(e).paddingTop||`0`)};if(this.submenuOpen){if(!this.isConnected||(e.showPopover(),await this._submenuFloating.updatePosition(t),!this.submenuOpen))return;await this._submenuFloating.animateShow(e),this._submenuFloating.startPositioning(t)}else{if(!e.matches(`:popover-open`))return;this._submenuFloating.stopPositioning(),await this._submenuFloating.animateHide(e),e.matches(`:popover-open`)&&e.hidePopover()}}_renderCheck(){return a`
1
+ import{i as e}from"../../chunks/lit.js";import{LuxenElement as t}from"../../shared/luxen-element.js";import{n,r,t as i}from"../../chunks/decorate.js";import{a,t as o}from"../../chunks/lit-html.js";import{PopoverController as s}from"../../shared/controllers/popover.js";import{tagName as c}from"../../registry.js";import l from"../../shared/styles/host.styles.js";import u from"../../shared/styles/menu-panel.styles.js";var d=e(`:host{display:block}:host([disabled]){pointer-events:none;opacity:.5}.item{align-items:center;gap:var(--l-menu-item-gap);min-block-size:var(--l-menu-item-min-height);padding:var(--l-menu-item-padding-block) var(--l-menu-item-padding-inline);cursor:pointer;border-radius:var(--l-menu-item-border-radius);font-size:var(--l-popover-font-size);line-height:var(--l-popover-line-height);color:var(--l-color-text-primary);white-space:nowrap;text-align:start;outline:none;display:flex}.item:focus-visible{background:var(--l-color-bg-state-hover);outline:var(--l-focus-ring-width) solid var(--l-focus-ring);outline-offset:calc(var(--l-focus-ring-width) * -1)}@media (hover:hover){.item:hover{background:var(--l-color-bg-state-hover)}}:host([submenu-open]) .item{background:var(--l-color-bg-state-hover)}:host([variant=destructive]) .item{color:var(--l-color-text-danger)}:host([variant=destructive]) .item:focus-visible{background:var(--l-color-bg-fill-danger-soft);outline-color:var(--l-color-text-danger)}@media (hover:hover){:host([variant=destructive]) .item:hover{background:var(--l-color-bg-fill-danger-soft)}}.check{flex-shrink:0;width:16px;display:flex}.submenu-indicator{background-color:currentColor;flex-shrink:0;block-size:16px;inline-size:16px;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") 50%/contain no-repeat}:host(:dir(rtl)) .submenu-indicator{scale:-1 1}:host(:not([checked])) .check svg{visibility:hidden}::slotted([slot=prefix]),::slotted([slot=suffix]){flex-shrink:0;display:flex}.label{flex:1}`),f=class extends t{constructor(...e){super(...e),this._submenuFloating=new s(this,{getTriggerElement:()=>this,getFloatingElement:()=>this._submenuEl,getArrowElement:()=>null}),this.#e=``,this.#t=!1,this.#n=`normal`,this.#r=void 0,this.#i=!1,this.#a=!1,this.#o=`start`,this.#s=!1,this._onSubmenuSlotChange=e=>{let t=e.target;this._hasSubmenu=t.assignedElements().some(e=>e.tagName===c(`dropdown-item`).toUpperCase())}}static{this.styles=[l,u,d]}#e;get value(){return this.#e}set value(e){this.#e=e}#t;get disabled(){return this.#t}set disabled(e){this.#t=e}#n;get type(){return this.#n}set type(e){this.#n=e}#r;get variant(){return this.#r}set variant(e){this.#r=e}#i;get checked(){return this.#i}set checked(e){this.#i=e}#a;get submenuOpen(){return this.#a}set submenuOpen(e){this.#a=e}#o;get checkPlacement(){return this.#o}set checkPlacement(e){this.#o=e}#s;get _hasSubmenu(){return this.#s}set _hasSubmenu(e){this.#s=e}get hasSubmenu(){return this._hasSubmenu}connectedCallback(){super.connectedCallback(),this.hasAttribute(`role`)||this.setAttribute(`role`,`none`)}get _submenuEl(){return this.shadowRoot.querySelector(`.submenu`)}getTextLabel(){let e=this.shadowRoot?.querySelector(`slot:not([name])`);return e?e.assignedNodes({flatten:!0}).map(e=>e.textContent??``).join(``).trim():(this.textContent??``).trim()}getSubmenuItems(){let e=this.shadowRoot?.querySelector(`slot[name="submenu"]`);return e?e.assignedElements().filter(e=>e.tagName===c(`dropdown-item`).toUpperCase()&&!e.disabled):[]}openSubmenu(){!this._hasSubmenu||this.disabled||this.submenuOpen||(this.submenuOpen=!0)}closeSubmenu(){for(let e of this.getSubmenuItems())e.closeSubmenu();this.submenuOpen&&=!1}updated(e){e.has(`submenuOpen`)&&this._handleSubmenuOpenChange()}async _handleSubmenuOpenChange(){let e=this._submenuEl;if(!e)return;let t={placement:getComputedStyle(this).direction===`rtl`?`left-start`:`right-start`,distance:0,skidding:-parseFloat(getComputedStyle(e).paddingTop||`0`)};if(this.submenuOpen){if(!this.isConnected||(e.showPopover(),await this._submenuFloating.updatePosition(t),!this.submenuOpen))return;await this._submenuFloating.animateShow(e),this._submenuFloating.startPositioning(t)}else{if(!e.matches(`:popover-open`))return;this._submenuFloating.stopPositioning(),await this._submenuFloating.animateHide(e),e.matches(`:popover-open`)&&e.hidePopover()}}_renderCheck(){return a`
2
2
  <span
3
3
  class="check"
4
4
  aria-hidden="true"
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-item.js","names":["unsafeCSS","rawStyles","hostStyles","menuPanelStyles","nothing","_decorate","property","state","r","__decorate","A","host_styles_default","menu_panel_styles_default","styles","DropdownItem","LuxenElement","_args","PopoverController","#_value_accessor_storage","#_disabled_accessor_storage","#_type_accessor_storage","#_variant_accessor_storage","#_checked_accessor_storage","#_submenuOpen_accessor_storage","#_checkPlacement_accessor_storage","#__hasSubmenu_accessor_storage","slot","el","tagName","value","node","child","changed","panel","posOpts","isCheckbox","leadingCheck","n","r$1"],"sources":["../../../src/html/elements/dropdown-item/dropdown-item.css?inline","../../../src/html/elements/dropdown-item/dropdown-item.ts"],"sourcesContent":[":host {\n display: block;\n}\n\n:host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--l-menu-item-gap);\n min-block-size: var(--l-menu-item-min-height);\n padding: var(--l-menu-item-padding-block) var(--l-menu-item-padding-inline);\n cursor: pointer;\n outline: none;\n border-radius: var(--l-menu-item-border-radius);\n font-size: var(--l-popover-font-size);\n line-height: var(--l-popover-line-height);\n color: var(--l-color-text-primary);\n white-space: nowrap;\n text-align: start;\n}\n\n.item:focus-visible {\n /* A ring distinct from the hover tint (which is the same low-contrast fill).\n Negative offset keeps the 2px ring inside the row so it never collides with\n the panel edge or a neighboring item. */\n background: var(--l-color-bg-state-hover);\n outline: 2px solid var(--l-focus-ring);\n outline-offset: -2px;\n}\n\n@media (hover: hover) {\n .item:hover {\n background: var(--l-color-bg-state-hover);\n }\n}\n\n/* Parent item stays highlighted while its submenu is open. */\n:host([submenu-open]) .item {\n background: var(--l-color-bg-state-hover);\n}\n\n/* Destructive variant — a delete-style action. Red label at rest, danger-tinted\n fill and focus ring on hover/focus so the highlight reads as \"danger\" rather\n than the neutral hover tint. */\n:host([variant='destructive']) .item {\n color: var(--l-color-text-danger);\n}\n\n:host([variant='destructive']) .item:focus-visible {\n background: var(--l-color-bg-fill-danger-soft);\n outline-color: var(--l-color-text-danger);\n}\n\n@media (hover: hover) {\n :host([variant='destructive']) .item:hover {\n background: var(--l-color-bg-fill-danger-soft);\n }\n}\n\n.check {\n display: flex;\n width: 16px;\n flex-shrink: 0;\n}\n\n/* Inline-end chevron marking an item that opens a submenu. */\n.submenu-indicator {\n inline-size: 16px;\n block-size: 16px;\n flex-shrink: 0;\n background-color: currentColor;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")\n no-repeat center / contain;\n}\n\n:host(:dir(rtl)) .submenu-indicator {\n scale: -1 1;\n}\n\n/* The submenu panel and its <hr> separators: shared/styles/menu-panel.css. */\n\n:host(:not([checked])) .check svg {\n visibility: hidden;\n}\n\n::slotted([slot='prefix']),\n::slotted([slot='suffix']) {\n display: flex;\n flex-shrink: 0;\n}\n\n.label {\n flex: 1;\n}\n","import { html, nothing, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property, state } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { tagName } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport menuPanelStyles from '../../shared/styles/menu-panel.styles.js';\nimport rawStyles from './dropdown-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A menu item for use inside `<l-dropdown>`.\n *\n * @slot - Label text.\n * @slot prefix - Leading content (e.g. icon). A `type=\"checkbox\"` item ignores it unless `check-placement=\"end\"` frees the leading column.\n * @slot suffix - Trailing content.\n * @slot submenu - Nested `l-dropdown-item` elements rendered in a submenu panel anchored to this item. Drop an `<hr>` between them for a separator.\n *\n * @csspart submenu - The floating submenu panel.\n *\n * @cssproperty --color - Text color.\n *\n * @attribute variant - destructive — Renders the item as a destructive action (red), for delete-style entries.\n *\n * @customElement l-dropdown-item\n */\nexport class DropdownItem extends LuxenElement {\n static override styles = [hostStyles, menuPanelStyles, styles];\n\n private _submenuFloating = new PopoverController(this, {\n getTriggerElement: () => this,\n getFloatingElement: () => this._submenuEl,\n getArrowElement: () => null,\n });\n\n /** The value associated with this item. */\n @property()\n accessor value = '';\n\n /** Disables the item. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n /** The type of item: `normal` or `checkbox`. */\n @property()\n accessor type: 'normal' | 'checkbox' = 'normal';\n\n /** Visual variant. `destructive` marks a delete-style action in red. */\n @property({ reflect: true })\n accessor variant: 'destructive' | undefined = undefined;\n\n /** Whether the checkbox item is checked. */\n @property({ type: Boolean, reflect: true })\n accessor checked = false;\n\n /** Whether this item's submenu is open. Managed by the parent `l-dropdown`. */\n @property({ type: Boolean, reflect: true, attribute: 'submenu-open' })\n accessor submenuOpen = false;\n\n /**\n * Which side of a `type=\"checkbox\"` item carries the check mark. `start` (the\n * default) puts it in the leading column, where it takes the place of any\n * `prefix`. `end` moves it to the trailing edge, freeing that column so the\n * item can show its own icon alongside the state.\n */\n @property({ reflect: true, attribute: 'check-placement' })\n accessor checkPlacement: 'start' | 'end' = 'start';\n\n @state()\n private accessor _hasSubmenu = false;\n\n /** Whether this item has nested `slot=\"submenu\"` items. */\n get hasSubmenu(): boolean {\n return this._hasSubmenu;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n // The host is a generic wrapper between the `role=\"menu\"` panel and the\n // `role=\"menuitem\"` row in its shadow root; `none` removes it from the\n // accessibility tree so the menu owns its menuitems directly (ARIA\n // required-owned-elements). The inner row keeps its menuitem role.\n // Guard preserves a consumer-set role.\n if (!this.hasAttribute('role')) this.setAttribute('role', 'none');\n }\n\n private get _submenuEl(): HTMLElement | null {\n return this.shadowRoot!.querySelector<HTMLElement>('.submenu');\n }\n\n /** Returns the text label of this item (excludes nested submenu items). */\n getTextLabel(): string {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return (this.textContent ?? '').trim();\n return slot\n .assignedNodes({ flatten: true })\n .map((node) => node.textContent ?? '')\n .join('')\n .trim();\n }\n\n /** Returns the enabled `l-dropdown-item` elements slotted into this item's submenu. */\n getSubmenuItems(): DropdownItem[] {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"submenu\"]');\n if (!slot) return [];\n return (slot.assignedElements() as DropdownItem[]).filter(\n (el) => el.tagName === tagName('dropdown-item').toUpperCase() && !el.disabled,\n );\n }\n\n /** Opens this item's submenu panel. No-op without submenu items. */\n openSubmenu() {\n if (!this._hasSubmenu || this.disabled || this.submenuOpen) return;\n this.submenuOpen = true;\n }\n\n /** Closes this item's submenu panel, including any open nested submenus. */\n closeSubmenu() {\n for (const child of this.getSubmenuItems()) child.closeSubmenu();\n if (this.submenuOpen) this.submenuOpen = false;\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('submenuOpen')) {\n void this._handleSubmenuOpenChange();\n }\n }\n\n private async _handleSubmenuOpenChange() {\n const panel = this._submenuEl;\n if (!panel) return;\n\n const isRTL = getComputedStyle(this).direction === 'rtl';\n const posOpts = {\n placement: (isRTL ? 'left-start' : 'right-start') as Placement,\n distance: 0,\n // Pull the panel up by its own padding so its first item lines up with this item.\n skidding: -parseFloat(getComputedStyle(panel).paddingTop || '0'),\n };\n\n if (this.submenuOpen) {\n if (!this.isConnected) return;\n panel.showPopover();\n await this._submenuFloating.updatePosition(posOpts);\n if (!this.submenuOpen) return;\n await this._submenuFloating.animateShow(panel);\n this._submenuFloating.startPositioning(posOpts);\n } else {\n if (!panel.matches(':popover-open')) return;\n this._submenuFloating.stopPositioning();\n await this._submenuFloating.animateHide(panel);\n if (panel.matches(':popover-open')) panel.hidePopover();\n }\n }\n\n private _renderCheck() {\n return html`\n <span\n class=\"check\"\n aria-hidden=\"true\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n `;\n }\n\n private _onSubmenuSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement;\n this._hasSubmenu = slot\n .assignedElements()\n .some((el) => el.tagName === tagName('dropdown-item').toUpperCase());\n };\n\n override render() {\n const isCheckbox = this.type === 'checkbox';\n const leadingCheck = isCheckbox && this.checkPlacement === 'start';\n\n return html`\n <div\n class=\"item\"\n role=${isCheckbox ? 'menuitemcheckbox' : 'menuitem'}\n aria-checked=${isCheckbox ? String(this.checked) : nothing}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-haspopup=${this._hasSubmenu ? 'menu' : nothing}\n aria-expanded=${this._hasSubmenu ? String(this.submenuOpen) : nothing}\n aria-controls=${this._hasSubmenu ? 'submenu' : nothing}\n tabindex=\"-1\"\n >\n <!-- The check owns the leading column by default, which is why a\n checkbox item has no room for a prefix there. Moving it to the\n trailing edge frees that column, so an item can carry its own icon\n and still show whether it is on — a theme row with a sun/moon, a\n Show-grid row with a grid glyph. The aria-checked above is what\n assistive tech reads, and it is unaffected by where the mark sits.\n (No backticks in this comment: it lives inside a template literal.) -->\n ${leadingCheck ? this._renderCheck() : nothing}\n ${leadingCheck ? nothing : html`<slot name=\"prefix\"></slot>`}\n <span\n class=\"label\"\n id=\"label\"\n ><slot></slot\n ></span>\n <slot name=\"suffix\"></slot>\n ${isCheckbox && this.checkPlacement === 'end' ? this._renderCheck() : nothing}\n ${\n this._hasSubmenu\n ? html`<span\n class=\"submenu-indicator\"\n aria-hidden=\"true\"\n ></span>`\n : nothing\n }\n </div>\n <div\n class=\"submenu\"\n part=\"submenu\"\n id=\"submenu\"\n popover=\"manual\"\n role=\"menu\"\n aria-labelledby=\"label\"\n >\n <slot\n name=\"submenu\"\n @slotchange=${this._onSubmenuSlotChange}\n ></slot>\n </div>\n `;\n }\n}\n"],"mappings":"A,maCUA,IAAMa,EAASb,EAAUC,o2DAAS,EAkBrBa,EAAb,cAAkCC,CAAa,C,8BAGlB,KAAA,iBAAA,IAAIE,EAAkB,KAAM,CACrD,sBAAyB,KACzB,uBAA0B,KAAK,WAC/B,oBAAuB,IACzB,CAAC,EAIgB,KAAAC,GAAA,GAIG,KAAAC,GAAA,GAImB,KAAAC,GAAA,SAIO,KAAAC,GAAA,IAAA,GAI3B,KAAAC,GAAA,GAII,KAAAC,GAAA,GASoB,KAAAC,GAAA,QAGZ,KAAAC,GAAA,GA8GC,KAAA,qBAAA,GAAa,CAC3C,IAAMC,EAAO,EAAE,OACf,KAAK,YAAcA,EAChB,iBAAiB,CAAC,CAClB,KAAM,GAAOC,EAAG,UAAYC,EAAQ,eAAe,CAAC,CAAC,YAAY,CAAC,CACvE,C,QA7JyB,KAAA,OAAA,CAAC1B,EAAYC,EAAiBU,CAAM,C,IAUpD,IAAA,OAAA,C,yCAIA,IAAA,UAAA,C,4CAIA,IAAA,MAAA,C,wCAIA,IAAA,SAAA,C,2CAIA,IAAA,SAAA,C,2CAIA,IAAA,aAAA,C,+CASA,IAAA,gBAAA,C,kDAGQ,IAAA,aAAA,C,4CAGjB,IAAI,YAAsB,CACxB,OAAO,KAAK,WACd,CAEA,mBAA6B,CAC3B,MAAM,kBAAkB,EAMnB,KAAK,aAAa,MAAM,GAAG,KAAK,aAAa,OAAQ,MAAM,CAClE,CAEA,IAAY,YAAiC,CAC3C,OAAO,KAAK,WAAY,cAA2B,UAAU,CAC/D,CAGA,cAAuB,CACrB,IAAMa,EAAO,KAAK,YAAY,cAA+B,kBAAkB,EAE/E,OADKA,EACEA,EACJ,cAAc,CAAE,QAAS,EAAK,CAAC,CAAC,CAChC,IAAK,GAASI,EAAK,aAAe,EAAE,CAAC,CACrC,KAAK,EAAE,CAAC,CACR,KAAK,GALW,KAAK,aAAe,GAAA,CAAI,KAAK,CAMlD,CAGA,iBAAkC,CAChC,IAAMJ,EAAO,KAAK,YAAY,cAA+B,sBAAsB,EAEnF,OADKA,EACGA,EAAK,iBAAiB,CAAC,CAAoB,OAChD,GAAOC,EAAG,UAAYC,EAAQ,eAAe,CAAC,CAAC,YAAY,GAAK,CAACD,EAAG,QACvE,EAHkB,CAAC,CAIrB,CAGA,aAAc,CACR,CAAC,KAAK,aAAe,KAAK,UAAY,KAAK,cAC/C,KAAK,YAAc,GACrB,CAGA,cAAe,CACb,IAAK,IAAMI,KAAS,KAAK,gBAAgB,EAAGA,EAAM,aAAa,EAC/D,AAAsB,KAAK,cAAc,EAC3C,CAEA,QAAiB,EAA+B,CAC1CC,EAAQ,IAAI,aAAa,GAC3B,KAAU,yBAAyB,CAEvC,CAEA,MAAc,0BAA2B,CACvC,IAAMC,EAAQ,KAAK,WACnB,GAAI,CAACA,EAAO,OAGZ,IAAMC,EAAU,CACd,UAFY,iBAAiB,IAAI,CAAC,CAAC,YAAc,MAE7B,aAAe,cACnC,SAAU,EAEV,SAAU,CAAC,WAAW,iBAAiBD,CAAK,CAAC,CAAC,YAAc,GAAG,CACjE,EAEA,GAAI,KAAK,YAAa,CAIpB,GAHI,CAAC,KAAK,cACVA,EAAM,YAAY,EAClB,MAAM,KAAK,iBAAiB,eAAeC,CAAO,EAC9C,CAAC,KAAK,aAAa,OACvB,MAAM,KAAK,iBAAiB,YAAYD,CAAK,EAC7C,KAAK,iBAAiB,iBAAiBC,CAAO,CAChD,KAAO,CACL,GAAI,CAACD,EAAM,QAAQ,eAAe,EAAG,OACrC,KAAK,iBAAiB,gBAAgB,EACtC,MAAM,KAAK,iBAAiB,YAAYA,CAAK,EACzCA,EAAM,QAAQ,eAAe,GAAGA,EAAM,YAAY,CACxD,CACF,CAEA,cAAuB,CACrB,MAAO,EAAI;;;;;;;;;;;;;;;;;;;;KAqBb,CASA,QAAkB,CAChB,IAAME,EAAa,KAAK,OAAS,WAC3BC,EAAeD,GAAc,KAAK,iBAAmB,QAE3D,MAAO,EAAI;;;eAGAA,EAAa,mBAAqB,WAAW;uBACrCA,EAAa,OAAO,KAAK,OAAO,EAAI/B,EAAQ;wBAC3C,KAAK,SAAW,OAASA,EAAQ;wBACjC,KAAK,YAAc,OAASA,EAAQ;wBACpC,KAAK,YAAc,OAAO,KAAK,WAAW,EAAIA,EAAQ;wBACtD,KAAK,YAAc,UAAYA,EAAQ;;;;;;;;;;UAUrDgC,EAAe,KAAK,aAAa,EAAIhC,EAAQ;UAC7CgC,EAAehC,EAAU,CAAI,8BAA8B;;;;;;;UAO3D+B,GAAc,KAAK,iBAAmB,MAAQ,KAAK,aAAa,EAAI/B,EAAQ;UAE5E,KAAK,YACD,CAAI;;;wBAIJA,EACL;;;;;;;;;;;;wBAYe,KAAK,qBAAqB;;;KAIhD,CACF,EA7MGC,EAAA,CAAAC,EAAS,CAAA,EAAAQ,EAAA,UAAA,QAAA,IAAA,EAITT,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,CAAA,EAAAQ,EAAA,UAAA,WAAA,IAAA,EAIzCT,EAAA,CAAAC,EAAS,CAAA,EAAAQ,EAAA,UAAA,OAAA,IAAA,EAITT,EAAA,CAAAC,EAAS,CAAE,QAAS,EAAK,CAAC,CAAA,EAAAQ,EAAA,UAAA,UAAA,IAAA,EAI1BT,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,CAAA,EAAAQ,EAAA,UAAA,UAAA,IAAA,EAIzCT,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,GAAM,UAAW,cAAe,CAAC,CAAA,EAAAQ,EAAA,UAAA,cAAA,IAAA,EASpET,EAAA,CAAAC,EAAS,CAAE,QAAS,GAAM,UAAW,iBAAkB,CAAC,CAAA,EAAAQ,EAAA,UAAA,iBAAA,IAAA,EAGxDT,EAAA,CAAAE,EAAM,CAAA,EAAAO,EAAA,UAAA,cAAA,IAAA,E"}
1
+ {"version":3,"file":"dropdown-item.js","names":["unsafeCSS","rawStyles","hostStyles","menuPanelStyles","nothing","_decorate","property","state","r","__decorate","A","host_styles_default","menu_panel_styles_default","styles","DropdownItem","LuxenElement","_args","PopoverController","#_value_accessor_storage","#_disabled_accessor_storage","#_type_accessor_storage","#_variant_accessor_storage","#_checked_accessor_storage","#_submenuOpen_accessor_storage","#_checkPlacement_accessor_storage","#__hasSubmenu_accessor_storage","slot","el","tagName","value","node","child","changed","panel","posOpts","isCheckbox","leadingCheck","n","r$1"],"sources":["../../../src/html/elements/dropdown-item/dropdown-item.css?inline","../../../src/html/elements/dropdown-item/dropdown-item.ts"],"sourcesContent":[":host {\n display: block;\n}\n\n:host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--l-menu-item-gap);\n min-block-size: var(--l-menu-item-min-height);\n padding: var(--l-menu-item-padding-block) var(--l-menu-item-padding-inline);\n cursor: pointer;\n outline: none;\n border-radius: var(--l-menu-item-border-radius);\n font-size: var(--l-popover-font-size);\n line-height: var(--l-popover-line-height);\n color: var(--l-color-text-primary);\n white-space: nowrap;\n text-align: start;\n}\n\n.item:focus-visible {\n /* A ring distinct from the hover tint (which is the same low-contrast fill).\n A negative offset equal to the ring width keeps the ring inside the row, at\n any --l-focus-ring-width, so it never collides with the panel edge or a\n neighboring item. */\n background: var(--l-color-bg-state-hover);\n outline: var(--l-focus-ring-width) solid var(--l-focus-ring);\n outline-offset: calc(var(--l-focus-ring-width) * -1);\n}\n\n@media (hover: hover) {\n .item:hover {\n background: var(--l-color-bg-state-hover);\n }\n}\n\n/* Parent item stays highlighted while its submenu is open. */\n:host([submenu-open]) .item {\n background: var(--l-color-bg-state-hover);\n}\n\n/* Destructive variant — a delete-style action. Red label at rest, danger-tinted\n fill and focus ring on hover/focus so the highlight reads as \"danger\" rather\n than the neutral hover tint. */\n:host([variant='destructive']) .item {\n color: var(--l-color-text-danger);\n}\n\n:host([variant='destructive']) .item:focus-visible {\n background: var(--l-color-bg-fill-danger-soft);\n outline-color: var(--l-color-text-danger);\n}\n\n@media (hover: hover) {\n :host([variant='destructive']) .item:hover {\n background: var(--l-color-bg-fill-danger-soft);\n }\n}\n\n.check {\n display: flex;\n width: 16px;\n flex-shrink: 0;\n}\n\n/* Inline-end chevron marking an item that opens a submenu. */\n.submenu-indicator {\n inline-size: 16px;\n block-size: 16px;\n flex-shrink: 0;\n background-color: currentColor;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4l4 4-4 4' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\")\n no-repeat center / contain;\n}\n\n:host(:dir(rtl)) .submenu-indicator {\n scale: -1 1;\n}\n\n/* The submenu panel and its <hr> separators: shared/styles/menu-panel.css. */\n\n:host(:not([checked])) .check svg {\n visibility: hidden;\n}\n\n::slotted([slot='prefix']),\n::slotted([slot='suffix']) {\n display: flex;\n flex-shrink: 0;\n}\n\n.label {\n flex: 1;\n}\n","import { html, nothing, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property, state } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { tagName } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport menuPanelStyles from '../../shared/styles/menu-panel.styles.js';\nimport rawStyles from './dropdown-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A menu item for use inside `<l-dropdown>`.\n *\n * @slot - Label text.\n * @slot prefix - Leading content (e.g. icon). A `type=\"checkbox\"` item ignores it unless `check-placement=\"end\"` frees the leading column.\n * @slot suffix - Trailing content.\n * @slot submenu - Nested `l-dropdown-item` elements rendered in a submenu panel anchored to this item. Drop an `<hr>` between them for a separator.\n *\n * @csspart submenu - The floating submenu panel.\n *\n * @cssproperty --color - Text color.\n *\n * @attribute variant - destructive — Renders the item as a destructive action (red), for delete-style entries.\n *\n * @customElement l-dropdown-item\n */\nexport class DropdownItem extends LuxenElement {\n static override styles = [hostStyles, menuPanelStyles, styles];\n\n private _submenuFloating = new PopoverController(this, {\n getTriggerElement: () => this,\n getFloatingElement: () => this._submenuEl,\n getArrowElement: () => null,\n });\n\n /** The value associated with this item. */\n @property()\n accessor value = '';\n\n /** Disables the item. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n /** The type of item: `normal` or `checkbox`. */\n @property()\n accessor type: 'normal' | 'checkbox' = 'normal';\n\n /** Visual variant. `destructive` marks a delete-style action in red. */\n @property({ reflect: true })\n accessor variant: 'destructive' | undefined = undefined;\n\n /** Whether the checkbox item is checked. */\n @property({ type: Boolean, reflect: true })\n accessor checked = false;\n\n /** Whether this item's submenu is open. Managed by the parent `l-dropdown`. */\n @property({ type: Boolean, reflect: true, attribute: 'submenu-open' })\n accessor submenuOpen = false;\n\n /**\n * Which side of a `type=\"checkbox\"` item carries the check mark. `start` (the\n * default) puts it in the leading column, where it takes the place of any\n * `prefix`. `end` moves it to the trailing edge, freeing that column so the\n * item can show its own icon alongside the state.\n */\n @property({ reflect: true, attribute: 'check-placement' })\n accessor checkPlacement: 'start' | 'end' = 'start';\n\n @state()\n private accessor _hasSubmenu = false;\n\n /** Whether this item has nested `slot=\"submenu\"` items. */\n get hasSubmenu(): boolean {\n return this._hasSubmenu;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n // The host is a generic wrapper between the `role=\"menu\"` panel and the\n // `role=\"menuitem\"` row in its shadow root; `none` removes it from the\n // accessibility tree so the menu owns its menuitems directly (ARIA\n // required-owned-elements). The inner row keeps its menuitem role.\n // Guard preserves a consumer-set role.\n if (!this.hasAttribute('role')) this.setAttribute('role', 'none');\n }\n\n private get _submenuEl(): HTMLElement | null {\n return this.shadowRoot!.querySelector<HTMLElement>('.submenu');\n }\n\n /** Returns the text label of this item (excludes nested submenu items). */\n getTextLabel(): string {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return (this.textContent ?? '').trim();\n return slot\n .assignedNodes({ flatten: true })\n .map((node) => node.textContent ?? '')\n .join('')\n .trim();\n }\n\n /** Returns the enabled `l-dropdown-item` elements slotted into this item's submenu. */\n getSubmenuItems(): DropdownItem[] {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot[name=\"submenu\"]');\n if (!slot) return [];\n return (slot.assignedElements() as DropdownItem[]).filter(\n (el) => el.tagName === tagName('dropdown-item').toUpperCase() && !el.disabled,\n );\n }\n\n /** Opens this item's submenu panel. No-op without submenu items. */\n openSubmenu() {\n if (!this._hasSubmenu || this.disabled || this.submenuOpen) return;\n this.submenuOpen = true;\n }\n\n /** Closes this item's submenu panel, including any open nested submenus. */\n closeSubmenu() {\n for (const child of this.getSubmenuItems()) child.closeSubmenu();\n if (this.submenuOpen) this.submenuOpen = false;\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('submenuOpen')) {\n void this._handleSubmenuOpenChange();\n }\n }\n\n private async _handleSubmenuOpenChange() {\n const panel = this._submenuEl;\n if (!panel) return;\n\n const isRTL = getComputedStyle(this).direction === 'rtl';\n const posOpts = {\n placement: (isRTL ? 'left-start' : 'right-start') as Placement,\n distance: 0,\n // Pull the panel up by its own padding so its first item lines up with this item.\n skidding: -parseFloat(getComputedStyle(panel).paddingTop || '0'),\n };\n\n if (this.submenuOpen) {\n if (!this.isConnected) return;\n panel.showPopover();\n await this._submenuFloating.updatePosition(posOpts);\n if (!this.submenuOpen) return;\n await this._submenuFloating.animateShow(panel);\n this._submenuFloating.startPositioning(posOpts);\n } else {\n if (!panel.matches(':popover-open')) return;\n this._submenuFloating.stopPositioning();\n await this._submenuFloating.animateHide(panel);\n if (panel.matches(':popover-open')) panel.hidePopover();\n }\n }\n\n private _renderCheck() {\n return html`\n <span\n class=\"check\"\n aria-hidden=\"true\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n `;\n }\n\n private _onSubmenuSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement;\n this._hasSubmenu = slot\n .assignedElements()\n .some((el) => el.tagName === tagName('dropdown-item').toUpperCase());\n };\n\n override render() {\n const isCheckbox = this.type === 'checkbox';\n const leadingCheck = isCheckbox && this.checkPlacement === 'start';\n\n return html`\n <div\n class=\"item\"\n role=${isCheckbox ? 'menuitemcheckbox' : 'menuitem'}\n aria-checked=${isCheckbox ? String(this.checked) : nothing}\n aria-disabled=${this.disabled ? 'true' : nothing}\n aria-haspopup=${this._hasSubmenu ? 'menu' : nothing}\n aria-expanded=${this._hasSubmenu ? String(this.submenuOpen) : nothing}\n aria-controls=${this._hasSubmenu ? 'submenu' : nothing}\n tabindex=\"-1\"\n >\n <!-- The check owns the leading column by default, which is why a\n checkbox item has no room for a prefix there. Moving it to the\n trailing edge frees that column, so an item can carry its own icon\n and still show whether it is on — a theme row with a sun/moon, a\n Show-grid row with a grid glyph. The aria-checked above is what\n assistive tech reads, and it is unaffected by where the mark sits.\n (No backticks in this comment: it lives inside a template literal.) -->\n ${leadingCheck ? this._renderCheck() : nothing}\n ${leadingCheck ? nothing : html`<slot name=\"prefix\"></slot>`}\n <span\n class=\"label\"\n id=\"label\"\n ><slot></slot\n ></span>\n <slot name=\"suffix\"></slot>\n ${isCheckbox && this.checkPlacement === 'end' ? this._renderCheck() : nothing}\n ${\n this._hasSubmenu\n ? html`<span\n class=\"submenu-indicator\"\n aria-hidden=\"true\"\n ></span>`\n : nothing\n }\n </div>\n <div\n class=\"submenu\"\n part=\"submenu\"\n id=\"submenu\"\n popover=\"manual\"\n role=\"menu\"\n aria-labelledby=\"label\"\n >\n <slot\n name=\"submenu\"\n @slotchange=${this._onSubmenuSlotChange}\n ></slot>\n </div>\n `;\n }\n}\n"],"mappings":"A,maCUA,IAAMa,EAASb,EAAUC,05DAAS,EAkBrBa,EAAb,cAAkCC,CAAa,C,8BAGlB,KAAA,iBAAA,IAAIE,EAAkB,KAAM,CACrD,sBAAyB,KACzB,uBAA0B,KAAK,WAC/B,oBAAuB,IACzB,CAAC,EAIgB,KAAAC,GAAA,GAIG,KAAAC,GAAA,GAImB,KAAAC,GAAA,SAIO,KAAAC,GAAA,IAAA,GAI3B,KAAAC,GAAA,GAII,KAAAC,GAAA,GASoB,KAAAC,GAAA,QAGZ,KAAAC,GAAA,GA8GC,KAAA,qBAAA,GAAa,CAC3C,IAAMC,EAAO,EAAE,OACf,KAAK,YAAcA,EAChB,iBAAiB,CAAC,CAClB,KAAM,GAAOC,EAAG,UAAYC,EAAQ,eAAe,CAAC,CAAC,YAAY,CAAC,CACvE,C,QA7JyB,KAAA,OAAA,CAAC1B,EAAYC,EAAiBU,CAAM,C,IAUpD,IAAA,OAAA,C,yCAIA,IAAA,UAAA,C,4CAIA,IAAA,MAAA,C,wCAIA,IAAA,SAAA,C,2CAIA,IAAA,SAAA,C,2CAIA,IAAA,aAAA,C,+CASA,IAAA,gBAAA,C,kDAGQ,IAAA,aAAA,C,4CAGjB,IAAI,YAAsB,CACxB,OAAO,KAAK,WACd,CAEA,mBAA6B,CAC3B,MAAM,kBAAkB,EAMnB,KAAK,aAAa,MAAM,GAAG,KAAK,aAAa,OAAQ,MAAM,CAClE,CAEA,IAAY,YAAiC,CAC3C,OAAO,KAAK,WAAY,cAA2B,UAAU,CAC/D,CAGA,cAAuB,CACrB,IAAMa,EAAO,KAAK,YAAY,cAA+B,kBAAkB,EAE/E,OADKA,EACEA,EACJ,cAAc,CAAE,QAAS,EAAK,CAAC,CAAC,CAChC,IAAK,GAASI,EAAK,aAAe,EAAE,CAAC,CACrC,KAAK,EAAE,CAAC,CACR,KAAK,GALW,KAAK,aAAe,GAAA,CAAI,KAAK,CAMlD,CAGA,iBAAkC,CAChC,IAAMJ,EAAO,KAAK,YAAY,cAA+B,sBAAsB,EAEnF,OADKA,EACGA,EAAK,iBAAiB,CAAC,CAAoB,OAChD,GAAOC,EAAG,UAAYC,EAAQ,eAAe,CAAC,CAAC,YAAY,GAAK,CAACD,EAAG,QACvE,EAHkB,CAAC,CAIrB,CAGA,aAAc,CACR,CAAC,KAAK,aAAe,KAAK,UAAY,KAAK,cAC/C,KAAK,YAAc,GACrB,CAGA,cAAe,CACb,IAAK,IAAMI,KAAS,KAAK,gBAAgB,EAAGA,EAAM,aAAa,EAC/D,AAAsB,KAAK,cAAc,EAC3C,CAEA,QAAiB,EAA+B,CAC1CC,EAAQ,IAAI,aAAa,GAC3B,KAAU,yBAAyB,CAEvC,CAEA,MAAc,0BAA2B,CACvC,IAAMC,EAAQ,KAAK,WACnB,GAAI,CAACA,EAAO,OAGZ,IAAMC,EAAU,CACd,UAFY,iBAAiB,IAAI,CAAC,CAAC,YAAc,MAE7B,aAAe,cACnC,SAAU,EAEV,SAAU,CAAC,WAAW,iBAAiBD,CAAK,CAAC,CAAC,YAAc,GAAG,CACjE,EAEA,GAAI,KAAK,YAAa,CAIpB,GAHI,CAAC,KAAK,cACVA,EAAM,YAAY,EAClB,MAAM,KAAK,iBAAiB,eAAeC,CAAO,EAC9C,CAAC,KAAK,aAAa,OACvB,MAAM,KAAK,iBAAiB,YAAYD,CAAK,EAC7C,KAAK,iBAAiB,iBAAiBC,CAAO,CAChD,KAAO,CACL,GAAI,CAACD,EAAM,QAAQ,eAAe,EAAG,OACrC,KAAK,iBAAiB,gBAAgB,EACtC,MAAM,KAAK,iBAAiB,YAAYA,CAAK,EACzCA,EAAM,QAAQ,eAAe,GAAGA,EAAM,YAAY,CACxD,CACF,CAEA,cAAuB,CACrB,MAAO,EAAI;;;;;;;;;;;;;;;;;;;;KAqBb,CASA,QAAkB,CAChB,IAAME,EAAa,KAAK,OAAS,WAC3BC,EAAeD,GAAc,KAAK,iBAAmB,QAE3D,MAAO,EAAI;;;eAGAA,EAAa,mBAAqB,WAAW;uBACrCA,EAAa,OAAO,KAAK,OAAO,EAAI/B,EAAQ;wBAC3C,KAAK,SAAW,OAASA,EAAQ;wBACjC,KAAK,YAAc,OAASA,EAAQ;wBACpC,KAAK,YAAc,OAAO,KAAK,WAAW,EAAIA,EAAQ;wBACtD,KAAK,YAAc,UAAYA,EAAQ;;;;;;;;;;UAUrDgC,EAAe,KAAK,aAAa,EAAIhC,EAAQ;UAC7CgC,EAAehC,EAAU,CAAI,8BAA8B;;;;;;;UAO3D+B,GAAc,KAAK,iBAAmB,MAAQ,KAAK,aAAa,EAAI/B,EAAQ;UAE5E,KAAK,YACD,CAAI;;;wBAIJA,EACL;;;;;;;;;;;;wBAYe,KAAK,qBAAqB;;;KAIhD,CACF,EA7MGC,EAAA,CAAAC,EAAS,CAAA,EAAAQ,EAAA,UAAA,QAAA,IAAA,EAITT,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,CAAA,EAAAQ,EAAA,UAAA,WAAA,IAAA,EAIzCT,EAAA,CAAAC,EAAS,CAAA,EAAAQ,EAAA,UAAA,OAAA,IAAA,EAITT,EAAA,CAAAC,EAAS,CAAE,QAAS,EAAK,CAAC,CAAA,EAAAQ,EAAA,UAAA,UAAA,IAAA,EAI1BT,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,EAAK,CAAC,CAAA,EAAAQ,EAAA,UAAA,UAAA,IAAA,EAIzCT,EAAA,CAAAC,EAAS,CAAE,KAAM,QAAS,QAAS,GAAM,UAAW,cAAe,CAAC,CAAA,EAAAQ,EAAA,UAAA,cAAA,IAAA,EASpET,EAAA,CAAAC,EAAS,CAAE,QAAS,GAAM,UAAW,iBAAkB,CAAC,CAAA,EAAAQ,EAAA,UAAA,iBAAA,IAAA,EAGxDT,EAAA,CAAAE,EAAM,CAAA,EAAAO,EAAA,UAAA,cAAA,IAAA,E"}
@@ -132,7 +132,7 @@ img.ProseMirror-separator {
132
132
  `),n=t===-1?e:e.slice(0,t);if(!__.test(n))return[[],0,[]];let r=k_,i=A_(e,r),a=w_(i);for(;a[1]===i.length&&i.length===r;)r*=2,i=A_(e,r),a=w_(i);return[a[0],a[1],i]}var M_=`listItem`,N_=`textStyle`,P_=/^(\d+)\.\s$/;function F_(e){let t=e.match(/list-style-type\s*:\s*([^;]+)/i);if(!t)return null;switch(t[1].trim().toLowerCase()){case`upper-roman`:return`I`;case`lower-roman`:return`i`;case`upper-alpha`:case`upper-latin`:return`A`;case`lower-alpha`:case`lower-latin`:return`a`;default:return null}}var I_=Ep.create({name:`orderedList`,addOptions(){return{itemTypeName:`listItem`,HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:`block list`,content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:e=>e.hasAttribute(`start`)?parseInt(e.getAttribute(`start`)||``,10):1},type:{default:null,parseHTML:e=>{let t=e.getAttribute(`type`);if(t)return t;let n=e.getAttribute(`style`);if(n){let e=F_(n);if(e)return e}let r=e.querySelector(`li`);if(r){let e=r.getAttribute(`style`);if(e){let t=F_(e);if(t)return t}}return null}}}},parseHTML(){return[{tag:`ol`}]},renderHTML({HTMLAttributes:e}){let{start:t,type:n,...r}=e,i=J(this.options.HTMLAttributes,r);return t!==1&&(i.start=t),n&&n!==`1`&&(i.type=n),[`ol`,i,0]},markdownTokenName:`list`,parseMarkdown:(e,t)=>{if(e.type!==`list`||!e.ordered)return[];let n=e.start||1,r=e.typeMarker,i=e.items?O_(e.items,t):[],a={};return n!==1&&(a.start=n),r&&(a.type=r),Object.keys(a).length>0?{type:`orderedList`,attrs:a,content:i}:{type:`orderedList`,content:i}},renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
133
133
  `):``,markdownTokenizer:{name:`orderedList`,level:`block`,start:()=>-1,tokenize:(e,t,n)=>{let[r,i,a]=j_(e);if(r.length===0)return;let o=D_(r,r[0].indent,n);if(o.length!==0)return{type:`list`,ordered:!0,start:r[0]?.number||1,typeMarker:r[0]?.type,items:o,raw:a.slice(0,i).join(`
134
134
  `)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:e,chain:t})=>this.options.keepAttributes?t().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(M_,this.editor.getAttributes(N_)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addProseMirrorPlugins(){return[new j({props:{handlePaste:(e,t)=>{if((t.clipboardData?.getData(`text/html`))?.trim())return!1;let n=t.clipboardData?.getData(`text/plain`);if(!n)return!1;let r=E_(n);if(!r)return!1;try{let t=e.state.schema.nodeFromJSON(r),n=e.state.tr.replaceSelectionWith(t);return e.dispatch(n),!0}catch{return!1}}}})]},addInputRules(){let e=(e,t)=>(!t.attrs.type||t.attrs.type===`1`)&&t.childCount+t.attrs.start===+e[1],t=Tp({find:P_,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:e});return(this.options.keepMarks||this.options.keepAttributes)&&(t=Tp({find:P_,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(N_)}),joinPredicate:e,editor:this.editor})),[t]}}),L_=/^\s*(\[([( |x])?\])\s$/,R_=`position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0`,z_=(e,t,n)=>{var r;return(n==null||(r=n.checkboxLabel)==null?void 0:r.call(n,e,t))||`Task item checkbox for ${e.textContent||`empty task item`}`},B_=Ep.create({name:`taskItem`,addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:`taskList`,a11y:void 0}},content(){return this.options.nested?`paragraph block*`:`paragraph+`},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:e=>{let t=e.getAttribute(`data-checked`);return t===``||t===`true`},renderHTML:e=>({"data-checked":e.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51,contentElement:e=>e.querySelector(`div`)??e}]},renderHTML({node:e,HTMLAttributes:t}){return[`li`,J(this.options.HTMLAttributes,t,{"data-type":this.name}),[`label`,[`input`,{type:`checkbox`,checked:e.attrs.checked?`checked`:null}],[`span`]],[`div`,0]]},parseMarkdown:(e,t)=>{let n=[];if(e.tokens&&e.tokens.length>0?n.push(t.createNode(`paragraph`,{},t.parseInline(e.tokens))):e.text?n.push(t.createNode(`paragraph`,{},[t.createNode(`text`,{text:e.text})])):n.push(t.createNode(`paragraph`,{},[])),e.nestedTokens&&e.nestedTokens.length>0){let r=t.parseChildren(e.nestedTokens);n.push(...r)}return t.createNode(`taskItem`,{checked:e.checked||!1},n)},renderMarkdown:(e,t)=>Vf(e,t,`- [${e.attrs?.checked?`x`:` `}] `,void 0,{indentMainContent:!0}),addExtensions(){return this.options.nested?[Lg(this.name,[this.options.taskListTypeName])]:[]},addKeyboardShortcuts(){let e={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...e,Tab:()=>this.editor.commands.sinkListItem(this.name)}:e},addNodeView(){return({node:e,HTMLAttributes:t,getPos:n,editor:r})=>{let i=document.createElement(`li`),a=document.createElement(`label`),o=document.createElement(`span`),s=document.createElement(`input`),c=document.createElement(`div`);o.style.cssText=R_;let l=e=>{let t=z_(e,e.attrs.checked,this.options.a11y);s.setAttribute(`aria-label`,t),o.textContent=t};l(e),a.contentEditable=`false`,s.type=`checkbox`,s.addEventListener(`mousedown`,e=>e.preventDefault()),s.addEventListener(`change`,t=>{if(!r.isEditable&&!this.options.onReadOnlyChecked){s.checked=!s.checked;return}let{checked:i}=t.target;r.isEditable&&typeof n==`function`&&r.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:e})=>{let t=n();if(typeof t!=`number`)return!1;let r=e.doc.nodeAt(t);return e.setNodeMarkup(t,void 0,{...r?.attrs,checked:i}),!0}).run(),!r.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(e,i)||(s.checked=!s.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([e,t])=>{i.setAttribute(e,t)}),i.dataset.checked=e.attrs.checked,s.checked=e.attrs.checked,a.append(s,o),i.append(a,c),Object.entries(t).forEach(([e,t])=>{i.setAttribute(e,t)});let u=new Set(Object.keys(t));return{dom:i,contentDOM:c,update:e=>{if(e.type!==this.type)return!1;i.dataset.checked=e.attrs.checked,s.checked=e.attrs.checked,l(e);let t=r.extensionManager.attributes,n=Ru(e,t),a=new Set(Object.keys(n)),o=this.options.HTMLAttributes;return u.forEach(e=>{a.has(e)||(e in o?i.setAttribute(e,o[e]):i.removeAttribute(e))}),Object.entries(n).forEach(([e,t])=>{t==null?e in o?i.setAttribute(e,o[e]):i.removeAttribute(e):i.setAttribute(e,t)}),u=a,!0}}}},addInputRules(){return[Tp({find:L_,type:this.type,getAttributes:e=>({checked:e[e.length-1]===`x`})})]}}),V_=Ep.create({name:`taskList`,addOptions(){return{itemTypeName:`taskItem`,HTMLAttributes:{}}},group:`block list`,content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:e}){return[`ul`,J(this.options.HTMLAttributes,e,{"data-type":this.name}),0]},parseMarkdown:(e,t)=>t.createNode(`taskList`,{},t.parseChildren(e.items||[])),renderMarkdown:(e,t)=>e.content?t.renderChildren(e.content,`
135
- `):``,markdownTokenizer:{name:`taskList`,level:`block`,start(e){let t=e.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)?.index;return t===void 0?-1:t},tokenize(e,t,n){let r=e=>{let t=Rf(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:n.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:r},n);if(t){let r={type:`taskList`,raw:t.raw,items:t.items},i=e.slice(t.raw.length);return i.trim()?[r,...n.blockTokens(i)]:[r]}return n.blockTokens(e)},i=Rf(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:n.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:r},n);if(i)return{type:`taskList`,raw:i.raw,items:i.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:e})=>e.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});Y.create({name:`listKit`,addExtensions(){let e=[];return this.options.bulletList!==!1&&e.push(Ng.configure(this.options.bulletList)),this.options.listItem!==!1&&e.push(s_.configure(this.options.listItem)),this.options.listKeymap!==!1&&e.push(g_.configure(this.options.listKeymap)),this.options.orderedList!==!1&&e.push(I_.configure(this.options.orderedList)),this.options.taskItem!==!1&&e.push(B_.configure(this.options.taskItem)),this.options.taskList!==!1&&e.push(V_.configure(this.options.taskList)),e}});var H_=`&nbsp;`,U_=`\xA0`,W_=Ep.create({name:`paragraph`,priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:`block`,content:`inline*`,parseHTML(){return[{tag:`p`}]},renderHTML({HTMLAttributes:e}){return[`p`,J(this.options.HTMLAttributes,e),0]},parseMarkdown:(e,t)=>{let n=e.tokens||[];if(n.length===1&&n[0].type===`image`)return t.parseChildren([n[0]]);let r=t.parseInline(n);return n.length===1&&n[0].type===`text`&&(n[0].raw===H_||n[0].text===H_||n[0].raw===U_||n[0].text===U_)&&r.length===1&&r[0].type===`text`&&(r[0].text===H_||r[0].text===U_)?t.createNode(`paragraph`,void 0,[]):t.createNode(`paragraph`,void 0,r)},renderMarkdown:(e,t,n)=>{if(!e)return``;let r=Array.isArray(e.content)?e.content:[];if(r.length===0){var i,a;let e=Array.isArray(n==null||(i=n.previousNode)==null?void 0:i.content)?n.previousNode.content:[];return(n==null||(a=n.previousNode)==null?void 0:a.type)===`paragraph`&&e.length===0?H_:``}return t.renderChildren(r)},addCommands(){return{setParagraph:()=>({commands:e})=>e.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}}),G_=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,K_=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,q_=Qf.create({name:`strike`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`s`},{tag:`del`},{tag:`strike`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`line-through`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`s`,J(this.options.HTMLAttributes,e),0]},markdownTokenName:`del`,parseMarkdown:(e,t)=>t.applyMark(`strike`,t.parseInline(e.tokens||[])),renderMarkdown:(e,t)=>`~~${t.renderChildren(e)}~~`,addCommands(){return{setStrike:()=>({commands:e})=>e.setMark(this.name),toggleStrike:()=>({commands:e})=>e.toggleMark(this.name),unsetStrike:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[Sp({find:G_,type:this.type})]},addPasteRules(){return[Dp({find:K_,type:this.type})]}}),J_=Ep.create({name:`text`,group:`inline`,parseMarkdown:e=>({type:`text`,text:e.text||``}),renderMarkdown:e=>e.text||``}),Y_=Qf.create({name:`underline`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`u`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`underline`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`u`,J(this.options.HTMLAttributes,e),0]},parseMarkdown(e,t){return t.applyMark(this.name||`underline`,t.parseInline(e.tokens||[]))},renderMarkdown(e,t){return`<u>${t.renderChildren(e)}</u>`},markdownTokenizer:{name:`underline`,level:`inline`,start(e){return e.toLowerCase().indexOf(`<u>`)},tokenize(e,t,n){if(!/^<u>/i.test(e))return;let r=/\\[\s\S]|`+|<\/u>/gi;r.lastIndex=3;let i=r.exec(e);for(;i;){if(i[0].startsWith("`")){let t=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/.exec(e.slice(i.index));t&&(r.lastIndex=i.index+t[0].length)}else if(!i[0].startsWith(`\\`)){let t=e.slice(3,i.index);return t?{type:`underline`,raw:e.slice(0,r.lastIndex),text:t,tokens:n.inlineTokens(t)}:void 0}i=r.exec(e)}}},addCommands(){return{setUnderline:()=>({commands:e})=>e.setMark(this.name),toggleUnderline:()=>({commands:e})=>e.toggleMark(this.name),unsetUnderline:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});function X_(e={}){return new j({view(t){return new Z_(t,e)}})}var Z_=class{constructor(e,t){this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.lastDragEvent=null,this.width=t.width??1,this.color=t.color===!1?void 0:t.color||`black`,this.class=t.class,this.handlers=[`dragover`,`dragend`,`drop`,`dragleave`].map(t=>{let n=e=>{this[t](e)};return e.dom.addEventListener(t,n),{name:t,handler:n}})}destroy(){this.setCursor(null),this.handlers.forEach(({name:e,handler:t})=>this.editorView.dom.removeEventListener(e,t))}update(e,t){if(this.cursorPos!=null&&t.doc!=e.state.doc){if(this.lastDragEvent){let e=this.computeTarget(this.lastDragEvent);e==this.cursorPos?this.updateOverlay():this.setCursor(e)}else this.updateOverlay()}}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),t=!e.parent.inlineContent,n,r=this.editorView.dom,i=r.getBoundingClientRect(),a=i.width/r.offsetWidth,o=i.height/r.offsetHeight;if(t){let t=e.nodeBefore,r=e.nodeAfter;if(t||r){let e=this.editorView.nodeDOM(this.cursorPos-(t?t.nodeSize:0));if(e){let i=e.getBoundingClientRect(),a=t?i.bottom:i.top;t&&r&&(a=(a+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let s=this.width/2*o;n={left:i.left,right:i.right,top:a-s,bottom:a+s}}}}if(!n){let e=this.editorView.coordsAtPos(this.cursorPos),t=this.width/2*a;n={left:e.left-t,right:e.left+t,top:e.top,bottom:e.bottom}}let s=this.editorView.dom.offsetParent;this.element||(this.element=s.appendChild(document.createElement(`div`)),this.class&&(this.element.className=this.class),this.element.style.cssText=`position: absolute; z-index: 50; pointer-events: none;`,this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle(`prosemirror-dropcursor-block`,t),this.element.classList.toggle(`prosemirror-dropcursor-inline`,!t);let c,l;if(!s||s==document.body&&getComputedStyle(s).position==`static`)c=-pageXOffset,l=-pageYOffset;else{let e=s.getBoundingClientRect(),t=e.width/s.offsetWidth,n=e.height/s.offsetHeight;c=e.left-s.scrollLeft*t,l=e.top-s.scrollTop*n}this.element.style.left=(n.left-c)/a+`px`,this.element.style.top=(n.top-l)/o+`px`,this.element.style.width=(n.right-n.left)/a+`px`,this.element.style.height=(n.bottom-n.top)/o+`px`}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}computeTarget(e){let t=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),n=t&&t.inside>=0&&this.editorView.state.doc.nodeAt(t.inside),r=n&&n.type.spec.disableDropCursor,i=typeof r==`function`?r(this.editorView,t,e):r;if(!t||i)return null;let a=t.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let e=hn(this.editorView.state.doc,a,this.editorView.dragging.slice);e!=null&&(a=e)}return a}dragover(e){if(!this.editorView.editable)return;this.lastDragEvent=e;let t=this.computeTarget(e);t!=null&&(this.setCursor(t),this.scheduleRemoval(5e3))}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}},Q_=class e extends O{constructor(e){super(e,e)}map(t,n){let r=t.resolve(n.map(this.head));return e.valid(r)?new e(r):O.near(r)}content(){return w.empty}eq(t){return t instanceof e&&t.head==this.head}toJSON(){return{type:`gapcursor`,pos:this.head}}static fromJSON(t,n){if(typeof n.pos!=`number`)throw RangeError(`Invalid input for GapCursor.fromJSON`);return new e(t.resolve(n.pos))}getBookmark(){return new $_(this.anchor)}static valid(e){let t=e.parent;if(t.inlineContent||!tv(e)||!nv(e))return!1;let n=t.type.spec.allowGapCursor;if(n!=null)return n;let r=t.contentMatchAt(e.index()).defaultType;return r&&r.isTextblock}static findGapCursorFrom(t,n,r=!1){search:for(;;){if(!r&&e.valid(t))return t;let i=t.pos,a=null;for(let r=t.depth;;r--){let o=t.node(r);if(n>0?t.indexAfter(r)<o.childCount:t.index(r)>0){a=o.child(n>0?t.indexAfter(r):t.index(r)-1);break}if(r==0)return null;i+=n;let s=t.doc.resolve(i);if(e.valid(s))return s}for(;;){let o=n>0?a.firstChild:a.lastChild;if(!o){if(a.isAtom&&!a.isText&&!A.isSelectable(a)){t=t.doc.resolve(i+a.nodeSize*n),r=!1;continue search}break}a=o,i+=n;let s=t.doc.resolve(i);if(e.valid(s))return s}return null}}};Q_.prototype.visible=!1,Q_.findFrom=Q_.findGapCursorFrom,O.jsonID(`gapcursor`,Q_);var $_=class e{constructor(e){this.pos=e}map(t){return new e(t.map(this.pos))}resolve(e){let t=e.resolve(this.pos);return Q_.valid(t)?new Q_(t):O.near(t)}};function ev(e){return e.isAtom||e.spec.isolating||e.spec.createGapCursor}function tv(e){for(let t=e.depth;t>=0;t--){let n=e.index(t),r=e.node(t);if(n==0){if(r.type.spec.isolating)return!0}else for(let e=r.child(n-1);;e=e.lastChild){if(e.childCount==0&&!e.inlineContent||ev(e.type))return!0;if(e.inlineContent)return!1}}return!0}function nv(e){for(let t=e.depth;t>=0;t--){let n=e.indexAfter(t),r=e.node(t);if(n==r.childCount){if(r.type.spec.isolating)return!0}else for(let e=r.child(n);;e=e.firstChild){if(e.childCount==0&&!e.inlineContent||ev(e.type))return!0;if(e.inlineContent)return!1}}return!0}function rv(){return new j({props:{decorations:cv,createSelectionBetween(e,t,n){return t.pos==n.pos&&Q_.valid(n)?new Q_(n):null},handleClick:ov,handleKeyDown:iv,handleDOMEvents:{beforeinput:sv}}})}var iv=Dc({ArrowLeft:av(`horiz`,-1),ArrowRight:av(`horiz`,1),ArrowUp:av(`vert`,-1),ArrowDown:av(`vert`,1)});function av(e,t){let n=e==`vert`?t>0?`down`:`up`:t>0?`right`:`left`;return function(e,r,i){let a=e.selection,o=t>0?a.$to:a.$from,s=a.empty;if(a instanceof k){if(!i.endOfTextblock(n)||o.depth==0)return!1;s=!1,o=e.doc.resolve(t>0?o.after():o.before())}let c=Q_.findGapCursorFrom(o,t,s);return c?(r&&r(e.tr.setSelection(new Q_(c))),!0):!1}}function ov(e,t,n){if(!e||!e.editable)return!1;let r=e.state.doc.resolve(t);if(!Q_.valid(r))return!1;let i=e.posAtCoords({left:n.clientX,top:n.clientY});return i&&i.inside>-1&&A.isSelectable(e.state.doc.nodeAt(i.inside))?!1:(e.dispatch(e.state.tr.setSelection(new Q_(r))),!0)}function sv(e,t){if(t.inputType!=`insertCompositionText`||!(e.state.selection instanceof Q_))return!1;let{$from:n}=e.state.selection,r=n.parent.contentMatchAt(n.index()).findWrapping(e.state.schema.nodes.text);if(!r)return!1;let i=x.empty;for(let e=r.length-1;e>=0;e--)i=x.from(r[e].createAndFill(null,i));let a=e.state.tr.replace(n.pos,n.pos,new w(i,0,0));return a.setSelection(k.near(a.doc.resolve(n.pos+1))),e.dispatch(a),!1}function cv(e){if(!(e.selection instanceof Q_))return null;let t=document.createElement(`div`);return t.className=`ProseMirror-gapcursor`,V.create(e.doc,[Es.widget(e.selection.head,t,{key:`gapcursor`})])}Y.create({name:`characterCount`,addOptions(){return{limit:null,autoTrim:!0,mode:`textSize`,textCounter:e=>e.length,wordCounter:e=>e.split(` `).filter(e=>e!==``).length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=e=>{let t=e?.node||this.editor.state.doc;if((e?.mode||this.options.mode)===`textSize`){let e=t.textBetween(0,t.content.size,void 0,` `);return this.options.textCounter(e)}return t.nodeSize},this.storage.words=e=>{let t=e?.node||this.editor.state.doc,n=t.textBetween(0,t.content.size,` `,` `);return this.options.wordCounter(n)}},addProseMirrorPlugins(){let e=!1;return[new j({key:new M(`characterCount`),appendTransaction:(t,n,r)=>{if(e)return;let i=this.options.limit,a=this.options.autoTrim;if(i==null||i===0||a===!1){e=!0;return}let o=this.storage.characters({node:r.doc});if(o>i){let t=o-i;console.warn(`[CharacterCount] Initial content exceeded limit of ${i} characters. Content was automatically trimmed.`);let n=r.tr.deleteRange(0,t);return e=!0,n}e=!0},filterTransaction:(e,t)=>{let n=this.options.limit;if(!e.docChanged||n===0||n==null)return!0;let r=this.storage.characters({node:t.doc}),i=this.storage.characters({node:e.doc});if(i<=n||r>n&&i>n&&i<=r)return!0;if(r>n&&i>n&&i>r||!e.getMeta(`paste`))return!1;let a=e.selection.$head.pos,o=a-(i-n),s=a;return e.deleteRange(o,s),!(this.storage.characters({node:e.doc})>n)}})]}});var lv=Y.create({name:`dropCursor`,addOptions(){return{color:`currentColor`,width:1,class:void 0}},addProseMirrorPlugins(){return[X_(this.options)]}});Y.create({name:`focus`,addOptions(){return{className:`has-focus`,mode:`all`}},addProseMirrorPlugins(){return[new j({key:new M(`focus`),props:{decorations:({doc:e,selection:t})=>{let{isEditable:n,isFocused:r}=this.editor,{anchor:i}=t,a=[];if(!n||!r)return V.create(e,[]);let o=0;this.options.mode===`deepest`&&e.descendants((e,t)=>{if(!e.isText){if(!(i>=t&&i<=t+e.nodeSize-1))return!1;o+=1}});let s=0;return e.descendants((e,t)=>{if(e.isText||!(i>=t&&i<=t+e.nodeSize-1))return!1;if(s+=1,this.options.mode===`deepest`&&o-s>0||this.options.mode===`shallowest`&&s>1)return this.options.mode===`deepest`;a.push(Es.node(t,t+e.nodeSize,{class:this.options.className}))}),V.create(e,a)}}})]}});var uv=Y.create({name:`gapCursor`,addProseMirrorPlugins(){return[rv()]},extendNodeSchema(e){return{allowGapCursor:q(K(e,`allowGapCursor`,{name:e.name,options:e.options,storage:e.storage}))??null}}}),dv=`placeholder`,fv=new M(`tiptap__placeholder`);function pv(e){let{editor:t,placeholder:n,dataAttribute:r,pos:i,node:a,isEmptyDoc:o,hasAnchor:s,classes:{emptyNode:c,emptyEditor:l}}=e,u=[c];return o&&u.push(l),Es.node(i,i+a.nodeSize,{class:u.join(` `),[r]:typeof n==`function`?n({editor:t,node:a,pos:i,hasAnchor:s}):n})}function mv(e,t){return typeof e==`function`?e(t):e}function hv({editor:e,options:t,dataAttribute:n,doc:r,selection:i,from:a,to:o}){let{anchor:s}=i,c=[],l=e.isEmpty;return r.nodesBetween(a,o,(r,i)=>{let a=s>=i&&s<=i+r.nodeSize,o=!r.isLeaf&&pd(r);return r.type.isTextblock&&(a||!t.showOnlyCurrent)&&o&&c.push(pv({editor:e,isEmptyDoc:l,dataAttribute:n,hasAnchor:a,placeholder:t.placeholder,classes:{emptyEditor:t.emptyEditorClass,emptyNode:mv(t.emptyNodeClass,{editor:e,node:r,pos:i,hasAnchor:a})},node:r,pos:i})),t.includeChildren}),c}function gv({editor:e,options:t,dataAttribute:n,doc:r,selection:i}){if(!e.isEditable&&t.showOnlyWhenEditable)return null;let{anchor:a}=i,o=[],s=e.isEmpty;if(t.showOnlyCurrent&&!t.includeChildren){let i=r.resolve(a),c=i.depth>0?i.node(1):i.nodeAfter,l=i.depth>0?i.before(1):a;if(c&&c.type.isTextblock&&pd(c)){let r=a>=l&&a<=l+c.nodeSize;o.push(pv({editor:e,isEmptyDoc:s,dataAttribute:n,hasAnchor:r,placeholder:t.placeholder,classes:{emptyEditor:t.emptyEditorClass,emptyNode:mv(t.emptyNodeClass,{editor:e,node:c,pos:l,hasAnchor:r})},node:c,pos:l}))}}else o.push(...hv({editor:e,options:t,dataAttribute:n,doc:r,selection:i,from:0,to:r.content.size}));return V.create(r,o)}function _v(e,t){let n=e.resolve(t);if(n.depth===0){let e=n.nodeAfter??n.nodeBefore;if(!e)return{from:t,to:t};let r=n.nodeAfter?t:t-e.nodeSize;return{from:r,to:r+e.nodeSize}}let r=n.before(1);return{from:r,to:r+n.node(1).nodeSize}}function vv(e,t){return{from:Math.max(0,t.from),to:Math.min(e.content.size,t.to)}}function yv(e,t,n){let r=[];return e.forEach((e,i)=>{let a=i,o=a+e.nodeSize,s=a+1,c=o+1;s<n&&c>t&&r.push({from:a,to:o})}),r}function bv(e){if(e.length===0)return[];let t=[...e].sort((e,t)=>e.from-t.from),n=[{...t[0]}];for(let e=1;e<t.length;e+=1){let r=n[n.length-1],i=t[e];i.from<=r.to?r.to=Math.max(r.to,i.to):n.push({...i})}return n}function xv(e,t){let n=yv(e,t.from,t.to);return n.push(vv(e,_v(e,t.from))),t.to>t.from?n.push(vv(e,_v(e,Math.min(t.to,e.content.size+1)-1))):t.from<e.content.size+1&&n.push(vv(e,_v(e,Math.min(t.from+1,e.content.size)))),n}function Sv(e,t,n){let r=[];if(e.docChanged){let t=ed(e);for(let e of t)r.push(...xv(n.doc,e.newRange))}return e.selectionSet&&(r.push(vv(n.doc,_v(n.doc,e.mapping.map(t.selection.anchor)))),r.push(vv(n.doc,_v(n.doc,n.selection.anchor)))),bv(r)}function Cv(e,t,n){let r=Math.max(0,Math.min(e,n.content.size));return{from:r,to:Math.max(r,Math.min(t,n.content.size))}}function wv({decorations:e,ranges:t,editor:n,options:r,dataAttribute:i,doc:a,selection:o}){let s=e;for(let e of t){let{from:t,to:c}=Cv(e.from,e.to,a),l=s.find(t,c).filter(e=>e.from>=t&&e.to<=c);l.length&&(s=s.remove(l));let u=hv({editor:n,options:r,dataAttribute:i,doc:a,selection:o,from:t,to:c});u.length&&(s=s.add(a,u))}return s}function Tv({editor:e,options:t,dataAttribute:n}){return{init(r,i){return gv({editor:e,options:t,dataAttribute:n,doc:i.doc,selection:i.selection})??V.empty},apply(r,i,a,o){return!r.docChanged&&!r.selectionSet?i:wv({decorations:i.map(r.mapping,r.doc),ranges:Sv(r,a,o),editor:e,options:t,dataAttribute:n,doc:o.doc,selection:o.selection})}}}function Ev(e){return e.replace(/\s+/g,`-`).replace(/[^a-zA-Z0-9-]/g,``).replace(/^[0-9-]+/,``).replace(/^-+/,``).toLowerCase()}function Dv({editor:e,options:t}){let n=t.dataAttribute?`data-${Ev(t.dataAttribute)}`:`data-${dv}`,r=t.showOnlyCurrent&&!t.includeChildren;return new j({key:fv,...r?{}:{state:Tv({editor:e,options:t,dataAttribute:n})},props:{decorations:r?({doc:r,selection:i})=>gv({editor:e,options:t,dataAttribute:n,doc:r,selection:i}):n=>t.showOnlyWhenEditable&&!e.isEditable?V.empty:fv.getState(n)??V.empty}})}var Ov=Y.create({name:`placeholder`,addOptions(){return{emptyEditorClass:`is-editor-empty`,emptyNodeClass:`is-empty`,dataAttribute:dv,placeholder:`Write something …`,showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){return[Dv({editor:this.editor,options:this.options})]}});function kv(e,t){return!e.selection.empty&&!md(e.selection)&&t.isEditable}function Av(e,t){return kv(e,t)&&!t.isFocused&&!t.view.dragging}function jv(){var e;(e=window.getSelection())==null||e.removeAllRanges()}function Mv(e){e.focus()}Y.create({name:`selection`,addOptions(){return{className:`selection`}},addProseMirrorPlugins(){let{editor:e,options:t}=this;return[new j({key:new M(`selection`),props:{decorations(n){return Av(n,e)?V.create(n.doc,[Es.inline(n.selection.from,n.selection.to,{class:t.className})]):null},handleDOMEvents:{blur(t){return kv(t.state,e)&&jv(),!1},focus(t){return kv(t.state,e)&&requestAnimationFrame(()=>{!e.isDestroyed&&t.hasFocus()&&Mv(t)}),!1}}}})]}});function Nv({types:e,node:t}){return t&&Array.isArray(e)&&e.includes(t.type)||t?.type===e}var Pv=Y.create({name:`trailingNode`,addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){let e=new M(this.name),t=this.options.node||this.editor.schema.topNodeType.contentMatch.defaultType?.name||`paragraph`,n=Object.entries(this.editor.schema.nodes).map(([,e])=>e).filter(e=>(this.options.notAfter||[]).concat(t).includes(e.name));return[new j({key:e,appendTransaction:(n,r,i)=>{let{doc:a,tr:o,schema:s}=i,c=e.getState(i),l=a.content.size,u=s.nodes[t];if(!n.some(e=>e.getMeta(`skipTrailingNode`))&&c)return o.insert(l,u.create())},state:{init:(e,t)=>{let r=t.tr.doc.lastChild;return!Nv({node:r,types:n})},apply:(e,t)=>{if(!e.docChanged||e.getMeta(`__uniqueIDTransaction`))return t;let r=e.doc.lastChild;return!Nv({node:r,types:n})}}})]}}),Fv=Y.create({name:`undoRedo`,addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:e,dispatch:t})=>Xc(e,t),redo:()=>({state:e,dispatch:t})=>Zc(e,t)}},addProseMirrorPlugins(){return[Jc(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}}),Iv=Y.create({name:`starterKit`,addExtensions(){let e=[];return this.options.bold!==!1&&e.push(Hp.configure(this.options.bold)),this.options.blockquote!==!1&&e.push(Lp.configure(this.options.blockquote)),this.options.bulletList!==!1&&e.push(Ng.configure(this.options.bulletList)),this.options.code!==!1&&e.push(Kp.configure(this.options.code)),this.options.codeBlock!==!1&&e.push(Xp.configure(this.options.codeBlock)),this.options.document!==!1&&e.push(Zp.configure(this.options.document)),this.options.dropcursor!==!1&&e.push(lv.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&e.push(uv.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&e.push(Qp.configure(this.options.hardBreak)),this.options.heading!==!1&&e.push($p.configure(this.options.heading)),this.options.undoRedo!==!1&&e.push(Fv.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&e.push(em.configure(this.options.horizontalRule)),this.options.italic!==!1&&e.push(am.configure(this.options.italic)),this.options.listItem!==!1&&e.push(s_.configure(this.options.listItem)),this.options.listKeymap!==!1&&e.push(g_.configure(this.options?.listKeymap)),this.options.link!==!1&&e.push(kg.configure(this.options?.link)),this.options.orderedList!==!1&&e.push(I_.configure(this.options.orderedList)),this.options.paragraph!==!1&&e.push(W_.configure(this.options.paragraph)),this.options.strike!==!1&&e.push(q_.configure(this.options.strike)),this.options.text!==!1&&e.push(J_.configure(this.options.text)),this.options.underline!==!1&&e.push(Y_.configure(this.options?.underline)),this.options.trailingNode!==!1&&e.push(Pv.configure(this.options?.trailingNode)),e}}),Lv=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/,Rv=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g,zv=Qf.create({name:`highlight`,addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:e=>e.getAttribute(`data-color`)||Af(e,`background-color`)||e.style.backgroundColor,renderHTML:e=>Pf(e.color)?{"data-color":e.color,style:`background-color: ${e.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:`mark`}]},renderHTML({HTMLAttributes:e}){return[`mark`,J(this.options.HTMLAttributes,e),0]},renderMarkdown:(e,t)=>`==${t.renderChildren(e)}==`,parseMarkdown:(e,t)=>t.applyMark(`highlight`,t.parseInline(e.tokens||[])),markdownTokenizer:{name:`highlight`,level:`inline`,start:e=>e.indexOf(`==`),tokenize(e,t,n){let r=/^(==)(?!\s)([^=]*[^=\s])(==)/.exec(e);if(r){let e=r[2].trim(),t=n.inlineTokens(e);return{type:`highlight`,raw:r[0],text:e,tokens:t}}}},addCommands(){return{setHighlight:e=>({commands:t})=>t.setMark(this.name,e),toggleHighlight:e=>({commands:t})=>t.toggleMark(this.name,e),unsetHighlight:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-h":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[Sp({find:Lv,type:this.type})]},addPasteRules(){return[Dp({find:Rv,type:this.type})]}}),Bv=`:host{--border-color:var(--l-color-border);--border-color-focus:var(--l-focus-ring);--border-width:1px;--border-radius:var(--l-radius-md);--background:var(--l-color-surface);--color:var(--l-color-text-primary);--toolbar-background:var(--l-color-surface);--toolbar-padding:.5rem;--toolbar-gap:.25rem;--toolbar-divider-color:var(--l-color-divider);--toolbar-button-size:2rem;--toolbar-button-radius:var(--l-radius-sm);--toolbar-button-color:var(--l-color-text-secondary);--toolbar-button-color-active:var(--l-color-text-primary);--toolbar-button-background-hover:var(--l-color-bg-state-hover);--toolbar-button-background-active:var(--l-color-bg-fill-neutral-subtle);--content-padding:.75rem 1rem;--content-min-height:8rem;--placeholder-color:var(--l-color-text-tertiary);box-sizing:border-box;inline-size:100%;display:block}:host([disabled]){opacity:.5;pointer-events:none}.wrapper,.toolbar,.editor{transition-property:border-color,box-shadow;transition-duration:.15s}@media (prefers-reduced-motion:reduce){.wrapper,.toolbar,.editor{transition-duration:0s}}.wrapper{border-radius:var(--border-radius);background-color:var(--background);color:var(--color);flex-direction:column;display:flex}.toolbar{align-items:center;gap:var(--toolbar-gap);padding:var(--toolbar-padding);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);background-color:var(--toolbar-background);flex-wrap:wrap;flex:none;display:flex}.editor{border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius)}:host(:not([toolbar-placement])) .toolbar,:host([toolbar-placement=top]) .toolbar{border-bottom:0;border-end-end-radius:0;border-end-start-radius:0}:host(:not([toolbar-placement])) .editor,:host([toolbar-placement=top]) .editor{border-top:0;border-start-start-radius:0;border-start-end-radius:0}:host([toolbar-placement=bottom]) .toolbar{border-top:0;border-start-start-radius:0;border-start-end-radius:0;order:1}:host([toolbar-placement=bottom]) .editor{border-bottom:0;border-end-end-radius:0;border-end-start-radius:0}.toolbar-button{width:var(--toolbar-button-size);height:var(--toolbar-button-size);border-radius:var(--toolbar-button-radius);color:var(--toolbar-button-color);font-size:calc(var(--toolbar-button-size) * .625);cursor:pointer;background-color:#0000;border:0;place-items:center;padding:0;line-height:1;display:grid}@media (hover:hover){.toolbar-button:hover{background-color:var(--toolbar-button-background-hover);color:var(--toolbar-button-color-active)}}.toolbar-button:focus-visible{outline:2px solid var(--l-focus-ring);outline-offset:1px}.toolbar-button.is-active{background-color:var(--toolbar-button-background-active);color:var(--toolbar-button-color-active);box-shadow:inset 0 0 0 1px var(--border-color)}@media (prefers-reduced-motion:no-preference){.toolbar-button{transition:background-color .15s,color .15s}}.divider{width:1px;height:calc(var(--toolbar-button-size) * .5);margin-inline:var(--toolbar-gap);background-color:var(--toolbar-divider-color)}`,Vv=`modulepreload`,Hv=function(e){return`/`+e},Uv={},Wv=function(e){return e.pathname.endsWith(`.css`)},Gv=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},Kv=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Hv(t,n);let r=s(t),i=Wv(r);return Gv(Uv,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:Vv,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},qv=e(Bv),Jv=class extends Event{constructor(e,t){super(`change`,{bubbles:!0,composed:!1,cancelable:!1}),this.html=e,this.json=t}},Yv=class extends Event{constructor(){super(`add-file`,{bubbles:!1,composed:!1,cancelable:!1})}},Xv={"heading-1":`heading1`,"heading-2":`heading2`,"heading-3":`heading3`,bold:`bold`,italic:`italic`,underline:`underline`,strike:`strikethrough`,highlight:`highlight`,bulletlist:`bulletList`,orderedlist:`orderedList`,blockquote:`blockquote`,"code-block":`codeBlock`,"horizontal-rule":`horizontalRule`,link:`link`,emoji:`emoji`,attachment:`attachFile`,undo:`undo`,redo:`redo`},Zv={minimal:[`bold`,`italic`,`underline`],default:[`heading-1`,`heading-2`,`heading-3`,`divider`,`bold`,`italic`,`underline`,`highlight`,`bulletlist`,`orderedlist`,`blockquote`,`divider`,`code-block`,`horizontal-rule`,`link`,`emoji`,`divider`,`undo`,`redo`]},Qv=class extends h{constructor(...e){super(...e),this._localize=new g(this),this.#e=``,this.#t=``,this.#n=`prose`,this.#r=[],this.#i=`default`,this.#a=`top`,this.#o=!1,this.#s=``,this.#c=``,this._emojiOpenAtPointerDown=!1,this._emojiFocusInsideAtPointerDown=!1,this._emojiReturnFocus=null,this._emojiFocusGuards=[],this._rovingIndex=0,this._rovingFocusActive=!1,this._onFocus=()=>{this._rovingFocusActive||(this.shadowRoot?.activeElement)?.part?.contains(`toolbar-button`)||!this.disabled&&document.activeElement!==this.editor?.view.dom&&this.focus()},this._onToolbarClick=e=>{let t=this._generatedButtons(),n=this._generatedButtonIn(e,t);n&&(this._rovingIndex=t.indexOf(n),this.requestUpdate())},this._onToolbarKeyDown=e=>{let t=this._generatedButtons();if(t.length===0)return;let n=this.shadowRoot?.activeElement,r=t.indexOf(n);if(r===-1)return;let i=-1;switch(e.key){case`ArrowRight`:i=(r+1)%t.length;break;case`ArrowLeft`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return}e.preventDefault(),this._rovingIndex=i,this._rovingFocusActive=!0,t[i]?.focus(),queueMicrotask(()=>{this._rovingFocusActive=!1}),this.requestUpdate()},this._onToolbarMouseDown=e=>{this._generatedButtonIn(e)&&e.preventDefault()},this._onKeyDown=e=>{let t=this._emojiPicker;e.key===`Escape`&&!e.isComposing&&t?.matches(`:popover-open`)&&(this._closeEmojiPicker(t.matches(`:focus-within`)),e.preventDefault(),e.stopPropagation())},this._onDocumentPointerDown=e=>{let t=this._emojiPicker;if(!t?.matches(`:popover-open`))return;let n=e.composedPath();n.includes(t)||this._emojiButton&&n.includes(this._emojiButton)||t.hidePopover()},this._onEmojiButtonPointerDown=()=>{this._emojiOpenAtPointerDown=!!this._emojiPicker?.matches(`:popover-open`),this._emojiFocusInsideAtPointerDown=!!this._emojiPicker?.matches(`:focus-within`)}}static{this.styles=[_,qv]}#e;get initialHtml(){return this.#e}set initialHtml(e){this.#e=e}#t;get initialJson(){return this.#t}set initialJson(e){this.#t=e}#n;get editorClass(){return this.#n}set editorClass(e){this.#n=e}#r;get toolbar(){return this.#r}set toolbar(e){this.#r=e}#i;get toolbarPreset(){return this.#i}set toolbarPreset(e){this.#i=e}#a;get toolbarPlacement(){return this.#a}set toolbarPlacement(e){this.#a=e}#o;get autofocus(){return this.#o}set autofocus(e){this.#o=e}#s;get placeholder(){return this.#s}set placeholder(e){this.#s=e}#c;get emojiDataSource(){return this.#c}set emojiDataSource(e){this.#c=e}get validationTarget(){return this._editorRoot}get _toolbar(){return this.toolbar.length>0?this.toolbar:Zv[this.toolbarPreset]}firstUpdated(){queueMicrotask(()=>this._initEditor())}_initEditor(){this.isConnected&&(this.editor=new xp({element:this._createEditorRoot(),editorProps:{attributes:{class:this.editorClass,"aria-label":this.getAttribute(`aria-label`)??this._localize.term(`richTextEditor`)}},extensions:[Iv.configure({link:{openOnClick:!1}}),zv,Ov.configure({placeholder:this.placeholder})],content:this._initialContent(),editable:!this.disabled,autofocus:this.autofocus&&!this.disabled,onUpdate:()=>{this.requestUpdate(),this._emitChange()},onTransaction:()=>this.requestUpdate(),onSelectionUpdate:()=>this.requestUpdate()}),this.addEventListener(`focus`,this._onFocus),document.addEventListener(`keydown`,this._onKeyDown,!0),document.addEventListener(`pointerdown`,this._onDocumentPointerDown,!0),this._syncValue(),this.requestUpdate())}updated(e){if(e.has(`disabled`)&&this.editor&&this.editor.setEditable(!this.disabled),this.editor&&!this.editor.isDestroyed&&!this.hasAttribute(`aria-label`)){let e=this._localize.term(`richTextEditor`),t=this.editor.view.dom;t.getAttribute(`aria-label`)!==e&&t.setAttribute(`aria-label`,e)}}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`focus`,this._onFocus),document.removeEventListener(`keydown`,this._onKeyDown,!0),document.removeEventListener(`pointerdown`,this._onDocumentPointerDown,!0),this._stopEmojiAutoUpdate(),this.editor?.destroy(),this._editorRoot?.remove(),this._emojiPicker?.remove();for(let e of this._emojiFocusGuards)e.remove();this._emojiFocusGuards=[],this._emojiPicker=void 0,this._emojiPickerPromise=void 0}getHTML(){if(!this.editor)return``;let e=this.editor.getHTML();return e===`<p></p>`?``:e}getJSON(){return this.editor?.getJSON()??{}}clear(){this.editor.commands.clearContent(!0)}focus(){this.editor.commands.focus()}blur(){this.editor.commands.blur()}toggleBold(){this.editor.chain().focus().toggleBold().run()}toggleItalic(){this.editor.chain().focus().toggleItalic().run()}toggleUnderline(){this.editor.chain().focus().toggleUnderline().run()}toggleStrike(){this.editor.chain().focus().toggleStrike().run()}toggleHighlight(){this.editor.chain().focus().toggleHighlight().run()}toggleHeading(e){this.editor.chain().focus().toggleHeading({level:e}).run()}toggleBulletList(){this.editor.chain().focus().toggleBulletList().run()}toggleOrderedList(){this.editor.chain().focus().toggleOrderedList().run()}toggleBlockquote(){this.editor.chain().focus().toggleBlockquote().run()}toggleCodeBlock(){this.editor.chain().focus().toggleCodeBlock().run()}setHorizontalRule(){this.editor.chain().focus().setHorizontalRule().run()}undo(){this.editor.chain().focus().undo().run()}redo(){this.editor.chain().focus().redo().run()}toggleLink(){if(this.editor.isActive(`link`)){this.editor.chain().focus().unsetLink().run();return}let e=window.prompt(`URL`);if(!e)return;let t=/^https?:\/\//.test(e)?e:`https://${e}`;this.editor.chain().focus().setLink({href:t}).run()}formResetCallback(){super.formResetCallback(),this.editor?.commands.setContent(this._initialContent())}_syncValue(){if(!this.editor)return;let e=this.getHTML();return this._syncFormValue(e),this.required&&this.setValidity(e?{}:{valueMissing:!0},e?``:`Please fill out this field.`),e}_emitChange(){let e=this._syncValue();e!==void 0&&this.dispatchEvent(new Jv(e,this.getJSON()))}_initialContent(){return this.initialHtml?this.initialHtml:this.initialJson?JSON.parse(this.initialJson):``}_createEditorRoot(){let e=document.createElement(`div`);return e.slot=`editor`,this.append(e),this._editorRoot=e,e}_generatedButtons(){return Array.from(this.shadowRoot?.querySelectorAll(`[part="toolbar-button"]`)??[])}_generatedButtonIn(e,t=this._generatedButtons()){return e.composedPath().find(e=>t.includes(e))}async _onEmojiButtonClick(e){let t=await this._ensureEmojiPicker();t&&((e.detail===0?t.matches(`:popover-open`):this._emojiOpenAtPointerDown)?this._closeEmojiPicker(e.detail!==0&&this._emojiFocusInsideAtPointerDown):t.matches(`:popover-open`)||this._openEmojiPicker(t))}_openEmojiPicker(e){this._emojiReturnFocus=this._focusedElementWithin(),e.showPopover();let t=e.shadowRoot;(t?.querySelector(`#search`)??t?.querySelector(`input, button, [tabindex]:not([tabindex="-1"])`))?.focus({preventScroll:!0})}_focusedElementWithin(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(e instanceof HTMLElement)||e===this?null:this.contains(e)||this.shadowRoot?.contains(e)?e:null}_closeEmojiPicker(e){let t=this._emojiPicker;if(t?.matches(`:popover-open`)&&t.hidePopover(),!e)return;let n=this._emojiReturnFocus;n&&this._editorRoot?.contains(n)?this._focusEditor():n?.isConnected?n.focus():this._emojiButton?.focus()}_focusEditor(){this.editor&&!this.editor.isDestroyed&&!this.disabled?this.editor.view.focus():this._emojiButton?.focus()}_ensureEmojiPicker(){return this._emojiPicker?Promise.resolve(this._emojiPicker):this._emojiPickerPromise??=(async()=>{let{default:e}=await Kv(async()=>{let{default:e}=await import(`../../chunks/picker.js`);return{default:e}},[]);if(!this.isConnected)return this._emojiPickerPromise=void 0,null;let t=new e(this.emojiDataSource?{dataSource:this.emojiDataSource}:void 0);t.addEventListener(`emoji-click`,e=>{let n=e.detail.unicode;n&&(this.editor.chain().focus().insertContent(n).run(),this.editor.view.focus(),t.hidePopover())});let n=e=>{let t=document.createElement(`span`);return t.tabIndex=0,Object.assign(t.style,{position:`fixed`,width:`1px`,height:`1px`,opacity:`0`,pointerEvents:`none`,display:`none`}),t.addEventListener(`focus`,()=>{this._closeEmojiPicker(!1),e()}),t};this._emojiFocusGuards=[n(()=>this._emojiButton?.focus()),n(()=>this._focusEditor())];let[r,i]=this._emojiFocusGuards;return this._topLayerContainer().append(r,t,i),t.setAttribute(`popover`,`auto`),Object.assign(t.style,{position:`fixed`,inset:`auto`,margin:`0`,padding:`0`,border:`0`,background:`transparent`,display:`none`}),t.style.setProperty(`--border-radius`,`0.5rem`),t.addEventListener(`beforetoggle`,e=>{let n=e.newState===`open`;t.style.display=n?`flex`:`none`;for(let e of this._emojiFocusGuards)e.style.display=n?`block`:`none`}),t.addEventListener(`toggle`,e=>{e.newState===`open`?this._startEmojiAutoUpdate():this._stopEmojiAutoUpdate()}),this._emojiPicker=t,t})()}_topLayerContainer(){let e=this;for(;e;){if(e instanceof HTMLDialogElement&&e.open)return e;e=e instanceof Element&&e.assignedSlot?e.assignedSlot:e instanceof ShadowRoot?e.host:e.parentNode}return document.body}get _emojiButton(){return this.shadowRoot?.querySelector(`[data-command="emoji"]`)??null}_startEmojiAutoUpdate(){let e=this._emojiButton,t=this._emojiPicker;e&&t&&(this._stopEmojiAutoUpdate(),this._emojiAutoUpdateCleanup=f(e,t,()=>void this._positionEmojiPicker()))}_stopEmojiAutoUpdate(){this._emojiAutoUpdateCleanup?.(),this._emojiAutoUpdateCleanup=void 0}async _positionEmojiPicker(){let e=this._emojiButton,t=this._emojiPicker;if(!e||!t||!t.matches(`:popover-open`))return;let{x:n,y:r}=await m(e,t,{strategy:`fixed`,placement:`bottom`,middleware:[u(4),d(),p({padding:8})]});Object.assign(t.style,{left:`${n}px`,top:`${r}px`})}_renderButton(e,r,i,a=!1,o,s=-1){let c=n(`icon`),l=this._localize.term(Xv[e]);return t`
135
+ `):``,markdownTokenizer:{name:`taskList`,level:`block`,start(e){let t=e.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)?.index;return t===void 0?-1:t},tokenize(e,t,n){let r=e=>{let t=Rf(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:n.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:r},n);if(t){let r={type:`taskList`,raw:t.raw,items:t.items},i=e.slice(t.raw.length);return i.trim()?[r,...n.blockTokens(i)]:[r]}return n.blockTokens(e)},i=Rf(e,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:e=>({indentLevel:e[1].length,mainContent:e[4],checked:e[3].toLowerCase()===`x`}),createToken:(e,t)=>({type:`taskItem`,raw:``,mainContent:e.mainContent,indentLevel:e.indentLevel,checked:e.checked,text:e.mainContent,tokens:n.inlineTokens(e.mainContent),nestedTokens:t}),customNestedParser:r},n);if(i)return{type:`taskList`,raw:i.raw,items:i.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:e})=>e.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});Y.create({name:`listKit`,addExtensions(){let e=[];return this.options.bulletList!==!1&&e.push(Ng.configure(this.options.bulletList)),this.options.listItem!==!1&&e.push(s_.configure(this.options.listItem)),this.options.listKeymap!==!1&&e.push(g_.configure(this.options.listKeymap)),this.options.orderedList!==!1&&e.push(I_.configure(this.options.orderedList)),this.options.taskItem!==!1&&e.push(B_.configure(this.options.taskItem)),this.options.taskList!==!1&&e.push(V_.configure(this.options.taskList)),e}});var H_=`&nbsp;`,U_=`\xA0`,W_=Ep.create({name:`paragraph`,priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:`block`,content:`inline*`,parseHTML(){return[{tag:`p`}]},renderHTML({HTMLAttributes:e}){return[`p`,J(this.options.HTMLAttributes,e),0]},parseMarkdown:(e,t)=>{let n=e.tokens||[];if(n.length===1&&n[0].type===`image`)return t.parseChildren([n[0]]);let r=t.parseInline(n);return n.length===1&&n[0].type===`text`&&(n[0].raw===H_||n[0].text===H_||n[0].raw===U_||n[0].text===U_)&&r.length===1&&r[0].type===`text`&&(r[0].text===H_||r[0].text===U_)?t.createNode(`paragraph`,void 0,[]):t.createNode(`paragraph`,void 0,r)},renderMarkdown:(e,t,n)=>{if(!e)return``;let r=Array.isArray(e.content)?e.content:[];if(r.length===0){var i,a;let e=Array.isArray(n==null||(i=n.previousNode)==null?void 0:i.content)?n.previousNode.content:[];return(n==null||(a=n.previousNode)==null?void 0:a.type)===`paragraph`&&e.length===0?H_:``}return t.renderChildren(r)},addCommands(){return{setParagraph:()=>({commands:e})=>e.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}}),G_=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,K_=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,q_=Qf.create({name:`strike`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`s`},{tag:`del`},{tag:`strike`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`line-through`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`s`,J(this.options.HTMLAttributes,e),0]},markdownTokenName:`del`,parseMarkdown:(e,t)=>t.applyMark(`strike`,t.parseInline(e.tokens||[])),renderMarkdown:(e,t)=>`~~${t.renderChildren(e)}~~`,addCommands(){return{setStrike:()=>({commands:e})=>e.setMark(this.name),toggleStrike:()=>({commands:e})=>e.toggleMark(this.name),unsetStrike:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[Sp({find:G_,type:this.type})]},addPasteRules(){return[Dp({find:K_,type:this.type})]}}),J_=Ep.create({name:`text`,group:`inline`,parseMarkdown:e=>({type:`text`,text:e.text||``}),renderMarkdown:e=>e.text||``}),Y_=Qf.create({name:`underline`,addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:`u`},{style:`text-decoration`,consuming:!1,getAttrs:e=>e.includes(`underline`)?{}:!1}]},renderHTML({HTMLAttributes:e}){return[`u`,J(this.options.HTMLAttributes,e),0]},parseMarkdown(e,t){return t.applyMark(this.name||`underline`,t.parseInline(e.tokens||[]))},renderMarkdown(e,t){return`<u>${t.renderChildren(e)}</u>`},markdownTokenizer:{name:`underline`,level:`inline`,start(e){return e.toLowerCase().indexOf(`<u>`)},tokenize(e,t,n){if(!/^<u>/i.test(e))return;let r=/\\[\s\S]|`+|<\/u>/gi;r.lastIndex=3;let i=r.exec(e);for(;i;){if(i[0].startsWith("`")){let t=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/.exec(e.slice(i.index));t&&(r.lastIndex=i.index+t[0].length)}else if(!i[0].startsWith(`\\`)){let t=e.slice(3,i.index);return t?{type:`underline`,raw:e.slice(0,r.lastIndex),text:t,tokens:n.inlineTokens(t)}:void 0}i=r.exec(e)}}},addCommands(){return{setUnderline:()=>({commands:e})=>e.setMark(this.name),toggleUnderline:()=>({commands:e})=>e.toggleMark(this.name),unsetUnderline:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});function X_(e={}){return new j({view(t){return new Z_(t,e)}})}var Z_=class{constructor(e,t){this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.lastDragEvent=null,this.width=t.width??1,this.color=t.color===!1?void 0:t.color||`black`,this.class=t.class,this.handlers=[`dragover`,`dragend`,`drop`,`dragleave`].map(t=>{let n=e=>{this[t](e)};return e.dom.addEventListener(t,n),{name:t,handler:n}})}destroy(){this.setCursor(null),this.handlers.forEach(({name:e,handler:t})=>this.editorView.dom.removeEventListener(e,t))}update(e,t){if(this.cursorPos!=null&&t.doc!=e.state.doc){if(this.lastDragEvent){let e=this.computeTarget(this.lastDragEvent);e==this.cursorPos?this.updateOverlay():this.setCursor(e)}else this.updateOverlay()}}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),t=!e.parent.inlineContent,n,r=this.editorView.dom,i=r.getBoundingClientRect(),a=i.width/r.offsetWidth,o=i.height/r.offsetHeight;if(t){let t=e.nodeBefore,r=e.nodeAfter;if(t||r){let e=this.editorView.nodeDOM(this.cursorPos-(t?t.nodeSize:0));if(e){let i=e.getBoundingClientRect(),a=t?i.bottom:i.top;t&&r&&(a=(a+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let s=this.width/2*o;n={left:i.left,right:i.right,top:a-s,bottom:a+s}}}}if(!n){let e=this.editorView.coordsAtPos(this.cursorPos),t=this.width/2*a;n={left:e.left-t,right:e.left+t,top:e.top,bottom:e.bottom}}let s=this.editorView.dom.offsetParent;this.element||(this.element=s.appendChild(document.createElement(`div`)),this.class&&(this.element.className=this.class),this.element.style.cssText=`position: absolute; z-index: 50; pointer-events: none;`,this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle(`prosemirror-dropcursor-block`,t),this.element.classList.toggle(`prosemirror-dropcursor-inline`,!t);let c,l;if(!s||s==document.body&&getComputedStyle(s).position==`static`)c=-pageXOffset,l=-pageYOffset;else{let e=s.getBoundingClientRect(),t=e.width/s.offsetWidth,n=e.height/s.offsetHeight;c=e.left-s.scrollLeft*t,l=e.top-s.scrollTop*n}this.element.style.left=(n.left-c)/a+`px`,this.element.style.top=(n.top-l)/o+`px`,this.element.style.width=(n.right-n.left)/a+`px`,this.element.style.height=(n.bottom-n.top)/o+`px`}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}computeTarget(e){let t=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),n=t&&t.inside>=0&&this.editorView.state.doc.nodeAt(t.inside),r=n&&n.type.spec.disableDropCursor,i=typeof r==`function`?r(this.editorView,t,e):r;if(!t||i)return null;let a=t.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let e=hn(this.editorView.state.doc,a,this.editorView.dragging.slice);e!=null&&(a=e)}return a}dragover(e){if(!this.editorView.editable)return;this.lastDragEvent=e;let t=this.computeTarget(e);t!=null&&(this.setCursor(t),this.scheduleRemoval(5e3))}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}},Q_=class e extends O{constructor(e){super(e,e)}map(t,n){let r=t.resolve(n.map(this.head));return e.valid(r)?new e(r):O.near(r)}content(){return w.empty}eq(t){return t instanceof e&&t.head==this.head}toJSON(){return{type:`gapcursor`,pos:this.head}}static fromJSON(t,n){if(typeof n.pos!=`number`)throw RangeError(`Invalid input for GapCursor.fromJSON`);return new e(t.resolve(n.pos))}getBookmark(){return new $_(this.anchor)}static valid(e){let t=e.parent;if(t.inlineContent||!tv(e)||!nv(e))return!1;let n=t.type.spec.allowGapCursor;if(n!=null)return n;let r=t.contentMatchAt(e.index()).defaultType;return r&&r.isTextblock}static findGapCursorFrom(t,n,r=!1){search:for(;;){if(!r&&e.valid(t))return t;let i=t.pos,a=null;for(let r=t.depth;;r--){let o=t.node(r);if(n>0?t.indexAfter(r)<o.childCount:t.index(r)>0){a=o.child(n>0?t.indexAfter(r):t.index(r)-1);break}if(r==0)return null;i+=n;let s=t.doc.resolve(i);if(e.valid(s))return s}for(;;){let o=n>0?a.firstChild:a.lastChild;if(!o){if(a.isAtom&&!a.isText&&!A.isSelectable(a)){t=t.doc.resolve(i+a.nodeSize*n),r=!1;continue search}break}a=o,i+=n;let s=t.doc.resolve(i);if(e.valid(s))return s}return null}}};Q_.prototype.visible=!1,Q_.findFrom=Q_.findGapCursorFrom,O.jsonID(`gapcursor`,Q_);var $_=class e{constructor(e){this.pos=e}map(t){return new e(t.map(this.pos))}resolve(e){let t=e.resolve(this.pos);return Q_.valid(t)?new Q_(t):O.near(t)}};function ev(e){return e.isAtom||e.spec.isolating||e.spec.createGapCursor}function tv(e){for(let t=e.depth;t>=0;t--){let n=e.index(t),r=e.node(t);if(n==0){if(r.type.spec.isolating)return!0}else for(let e=r.child(n-1);;e=e.lastChild){if(e.childCount==0&&!e.inlineContent||ev(e.type))return!0;if(e.inlineContent)return!1}}return!0}function nv(e){for(let t=e.depth;t>=0;t--){let n=e.indexAfter(t),r=e.node(t);if(n==r.childCount){if(r.type.spec.isolating)return!0}else for(let e=r.child(n);;e=e.firstChild){if(e.childCount==0&&!e.inlineContent||ev(e.type))return!0;if(e.inlineContent)return!1}}return!0}function rv(){return new j({props:{decorations:cv,createSelectionBetween(e,t,n){return t.pos==n.pos&&Q_.valid(n)?new Q_(n):null},handleClick:ov,handleKeyDown:iv,handleDOMEvents:{beforeinput:sv}}})}var iv=Dc({ArrowLeft:av(`horiz`,-1),ArrowRight:av(`horiz`,1),ArrowUp:av(`vert`,-1),ArrowDown:av(`vert`,1)});function av(e,t){let n=e==`vert`?t>0?`down`:`up`:t>0?`right`:`left`;return function(e,r,i){let a=e.selection,o=t>0?a.$to:a.$from,s=a.empty;if(a instanceof k){if(!i.endOfTextblock(n)||o.depth==0)return!1;s=!1,o=e.doc.resolve(t>0?o.after():o.before())}let c=Q_.findGapCursorFrom(o,t,s);return c?(r&&r(e.tr.setSelection(new Q_(c))),!0):!1}}function ov(e,t,n){if(!e||!e.editable)return!1;let r=e.state.doc.resolve(t);if(!Q_.valid(r))return!1;let i=e.posAtCoords({left:n.clientX,top:n.clientY});return i&&i.inside>-1&&A.isSelectable(e.state.doc.nodeAt(i.inside))?!1:(e.dispatch(e.state.tr.setSelection(new Q_(r))),!0)}function sv(e,t){if(t.inputType!=`insertCompositionText`||!(e.state.selection instanceof Q_))return!1;let{$from:n}=e.state.selection,r=n.parent.contentMatchAt(n.index()).findWrapping(e.state.schema.nodes.text);if(!r)return!1;let i=x.empty;for(let e=r.length-1;e>=0;e--)i=x.from(r[e].createAndFill(null,i));let a=e.state.tr.replace(n.pos,n.pos,new w(i,0,0));return a.setSelection(k.near(a.doc.resolve(n.pos+1))),e.dispatch(a),!1}function cv(e){if(!(e.selection instanceof Q_))return null;let t=document.createElement(`div`);return t.className=`ProseMirror-gapcursor`,V.create(e.doc,[Es.widget(e.selection.head,t,{key:`gapcursor`})])}Y.create({name:`characterCount`,addOptions(){return{limit:null,autoTrim:!0,mode:`textSize`,textCounter:e=>e.length,wordCounter:e=>e.split(` `).filter(e=>e!==``).length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=e=>{let t=e?.node||this.editor.state.doc;if((e?.mode||this.options.mode)===`textSize`){let e=t.textBetween(0,t.content.size,void 0,` `);return this.options.textCounter(e)}return t.nodeSize},this.storage.words=e=>{let t=e?.node||this.editor.state.doc,n=t.textBetween(0,t.content.size,` `,` `);return this.options.wordCounter(n)}},addProseMirrorPlugins(){let e=!1;return[new j({key:new M(`characterCount`),appendTransaction:(t,n,r)=>{if(e)return;let i=this.options.limit,a=this.options.autoTrim;if(i==null||i===0||a===!1){e=!0;return}let o=this.storage.characters({node:r.doc});if(o>i){let t=o-i;console.warn(`[CharacterCount] Initial content exceeded limit of ${i} characters. Content was automatically trimmed.`);let n=r.tr.deleteRange(0,t);return e=!0,n}e=!0},filterTransaction:(e,t)=>{let n=this.options.limit;if(!e.docChanged||n===0||n==null)return!0;let r=this.storage.characters({node:t.doc}),i=this.storage.characters({node:e.doc});if(i<=n||r>n&&i>n&&i<=r)return!0;if(r>n&&i>n&&i>r||!e.getMeta(`paste`))return!1;let a=e.selection.$head.pos,o=a-(i-n),s=a;return e.deleteRange(o,s),!(this.storage.characters({node:e.doc})>n)}})]}});var lv=Y.create({name:`dropCursor`,addOptions(){return{color:`currentColor`,width:1,class:void 0}},addProseMirrorPlugins(){return[X_(this.options)]}});Y.create({name:`focus`,addOptions(){return{className:`has-focus`,mode:`all`}},addProseMirrorPlugins(){return[new j({key:new M(`focus`),props:{decorations:({doc:e,selection:t})=>{let{isEditable:n,isFocused:r}=this.editor,{anchor:i}=t,a=[];if(!n||!r)return V.create(e,[]);let o=0;this.options.mode===`deepest`&&e.descendants((e,t)=>{if(!e.isText){if(!(i>=t&&i<=t+e.nodeSize-1))return!1;o+=1}});let s=0;return e.descendants((e,t)=>{if(e.isText||!(i>=t&&i<=t+e.nodeSize-1))return!1;if(s+=1,this.options.mode===`deepest`&&o-s>0||this.options.mode===`shallowest`&&s>1)return this.options.mode===`deepest`;a.push(Es.node(t,t+e.nodeSize,{class:this.options.className}))}),V.create(e,a)}}})]}});var uv=Y.create({name:`gapCursor`,addProseMirrorPlugins(){return[rv()]},extendNodeSchema(e){return{allowGapCursor:q(K(e,`allowGapCursor`,{name:e.name,options:e.options,storage:e.storage}))??null}}}),dv=`placeholder`,fv=new M(`tiptap__placeholder`);function pv(e){let{editor:t,placeholder:n,dataAttribute:r,pos:i,node:a,isEmptyDoc:o,hasAnchor:s,classes:{emptyNode:c,emptyEditor:l}}=e,u=[c];return o&&u.push(l),Es.node(i,i+a.nodeSize,{class:u.join(` `),[r]:typeof n==`function`?n({editor:t,node:a,pos:i,hasAnchor:s}):n})}function mv(e,t){return typeof e==`function`?e(t):e}function hv({editor:e,options:t,dataAttribute:n,doc:r,selection:i,from:a,to:o}){let{anchor:s}=i,c=[],l=e.isEmpty;return r.nodesBetween(a,o,(r,i)=>{let a=s>=i&&s<=i+r.nodeSize,o=!r.isLeaf&&pd(r);return r.type.isTextblock&&(a||!t.showOnlyCurrent)&&o&&c.push(pv({editor:e,isEmptyDoc:l,dataAttribute:n,hasAnchor:a,placeholder:t.placeholder,classes:{emptyEditor:t.emptyEditorClass,emptyNode:mv(t.emptyNodeClass,{editor:e,node:r,pos:i,hasAnchor:a})},node:r,pos:i})),t.includeChildren}),c}function gv({editor:e,options:t,dataAttribute:n,doc:r,selection:i}){if(!e.isEditable&&t.showOnlyWhenEditable)return null;let{anchor:a}=i,o=[],s=e.isEmpty;if(t.showOnlyCurrent&&!t.includeChildren){let i=r.resolve(a),c=i.depth>0?i.node(1):i.nodeAfter,l=i.depth>0?i.before(1):a;if(c&&c.type.isTextblock&&pd(c)){let r=a>=l&&a<=l+c.nodeSize;o.push(pv({editor:e,isEmptyDoc:s,dataAttribute:n,hasAnchor:r,placeholder:t.placeholder,classes:{emptyEditor:t.emptyEditorClass,emptyNode:mv(t.emptyNodeClass,{editor:e,node:c,pos:l,hasAnchor:r})},node:c,pos:l}))}}else o.push(...hv({editor:e,options:t,dataAttribute:n,doc:r,selection:i,from:0,to:r.content.size}));return V.create(r,o)}function _v(e,t){let n=e.resolve(t);if(n.depth===0){let e=n.nodeAfter??n.nodeBefore;if(!e)return{from:t,to:t};let r=n.nodeAfter?t:t-e.nodeSize;return{from:r,to:r+e.nodeSize}}let r=n.before(1);return{from:r,to:r+n.node(1).nodeSize}}function vv(e,t){return{from:Math.max(0,t.from),to:Math.min(e.content.size,t.to)}}function yv(e,t,n){let r=[];return e.forEach((e,i)=>{let a=i,o=a+e.nodeSize,s=a+1,c=o+1;s<n&&c>t&&r.push({from:a,to:o})}),r}function bv(e){if(e.length===0)return[];let t=[...e].sort((e,t)=>e.from-t.from),n=[{...t[0]}];for(let e=1;e<t.length;e+=1){let r=n[n.length-1],i=t[e];i.from<=r.to?r.to=Math.max(r.to,i.to):n.push({...i})}return n}function xv(e,t){let n=yv(e,t.from,t.to);return n.push(vv(e,_v(e,t.from))),t.to>t.from?n.push(vv(e,_v(e,Math.min(t.to,e.content.size+1)-1))):t.from<e.content.size+1&&n.push(vv(e,_v(e,Math.min(t.from+1,e.content.size)))),n}function Sv(e,t,n){let r=[];if(e.docChanged){let t=ed(e);for(let e of t)r.push(...xv(n.doc,e.newRange))}return e.selectionSet&&(r.push(vv(n.doc,_v(n.doc,e.mapping.map(t.selection.anchor)))),r.push(vv(n.doc,_v(n.doc,n.selection.anchor)))),bv(r)}function Cv(e,t,n){let r=Math.max(0,Math.min(e,n.content.size));return{from:r,to:Math.max(r,Math.min(t,n.content.size))}}function wv({decorations:e,ranges:t,editor:n,options:r,dataAttribute:i,doc:a,selection:o}){let s=e;for(let e of t){let{from:t,to:c}=Cv(e.from,e.to,a),l=s.find(t,c).filter(e=>e.from>=t&&e.to<=c);l.length&&(s=s.remove(l));let u=hv({editor:n,options:r,dataAttribute:i,doc:a,selection:o,from:t,to:c});u.length&&(s=s.add(a,u))}return s}function Tv({editor:e,options:t,dataAttribute:n}){return{init(r,i){return gv({editor:e,options:t,dataAttribute:n,doc:i.doc,selection:i.selection})??V.empty},apply(r,i,a,o){return!r.docChanged&&!r.selectionSet?i:wv({decorations:i.map(r.mapping,r.doc),ranges:Sv(r,a,o),editor:e,options:t,dataAttribute:n,doc:o.doc,selection:o.selection})}}}function Ev(e){return e.replace(/\s+/g,`-`).replace(/[^a-zA-Z0-9-]/g,``).replace(/^[0-9-]+/,``).replace(/^-+/,``).toLowerCase()}function Dv({editor:e,options:t}){let n=t.dataAttribute?`data-${Ev(t.dataAttribute)}`:`data-${dv}`,r=t.showOnlyCurrent&&!t.includeChildren;return new j({key:fv,...r?{}:{state:Tv({editor:e,options:t,dataAttribute:n})},props:{decorations:r?({doc:r,selection:i})=>gv({editor:e,options:t,dataAttribute:n,doc:r,selection:i}):n=>t.showOnlyWhenEditable&&!e.isEditable?V.empty:fv.getState(n)??V.empty}})}var Ov=Y.create({name:`placeholder`,addOptions(){return{emptyEditorClass:`is-editor-empty`,emptyNodeClass:`is-empty`,dataAttribute:dv,placeholder:`Write something …`,showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){return[Dv({editor:this.editor,options:this.options})]}});function kv(e,t){return!e.selection.empty&&!md(e.selection)&&t.isEditable}function Av(e,t){return kv(e,t)&&!t.isFocused&&!t.view.dragging}function jv(){var e;(e=window.getSelection())==null||e.removeAllRanges()}function Mv(e){e.focus()}Y.create({name:`selection`,addOptions(){return{className:`selection`}},addProseMirrorPlugins(){let{editor:e,options:t}=this;return[new j({key:new M(`selection`),props:{decorations(n){return Av(n,e)?V.create(n.doc,[Es.inline(n.selection.from,n.selection.to,{class:t.className})]):null},handleDOMEvents:{blur(t){return kv(t.state,e)&&jv(),!1},focus(t){return kv(t.state,e)&&requestAnimationFrame(()=>{!e.isDestroyed&&t.hasFocus()&&Mv(t)}),!1}}}})]}});function Nv({types:e,node:t}){return t&&Array.isArray(e)&&e.includes(t.type)||t?.type===e}var Pv=Y.create({name:`trailingNode`,addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){let e=new M(this.name),t=this.options.node||this.editor.schema.topNodeType.contentMatch.defaultType?.name||`paragraph`,n=Object.entries(this.editor.schema.nodes).map(([,e])=>e).filter(e=>(this.options.notAfter||[]).concat(t).includes(e.name));return[new j({key:e,appendTransaction:(n,r,i)=>{let{doc:a,tr:o,schema:s}=i,c=e.getState(i),l=a.content.size,u=s.nodes[t];if(!n.some(e=>e.getMeta(`skipTrailingNode`))&&c)return o.insert(l,u.create())},state:{init:(e,t)=>{let r=t.tr.doc.lastChild;return!Nv({node:r,types:n})},apply:(e,t)=>{if(!e.docChanged||e.getMeta(`__uniqueIDTransaction`))return t;let r=e.doc.lastChild;return!Nv({node:r,types:n})}}})]}}),Fv=Y.create({name:`undoRedo`,addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:e,dispatch:t})=>Xc(e,t),redo:()=>({state:e,dispatch:t})=>Zc(e,t)}},addProseMirrorPlugins(){return[Jc(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}}),Iv=Y.create({name:`starterKit`,addExtensions(){let e=[];return this.options.bold!==!1&&e.push(Hp.configure(this.options.bold)),this.options.blockquote!==!1&&e.push(Lp.configure(this.options.blockquote)),this.options.bulletList!==!1&&e.push(Ng.configure(this.options.bulletList)),this.options.code!==!1&&e.push(Kp.configure(this.options.code)),this.options.codeBlock!==!1&&e.push(Xp.configure(this.options.codeBlock)),this.options.document!==!1&&e.push(Zp.configure(this.options.document)),this.options.dropcursor!==!1&&e.push(lv.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&e.push(uv.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&e.push(Qp.configure(this.options.hardBreak)),this.options.heading!==!1&&e.push($p.configure(this.options.heading)),this.options.undoRedo!==!1&&e.push(Fv.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&e.push(em.configure(this.options.horizontalRule)),this.options.italic!==!1&&e.push(am.configure(this.options.italic)),this.options.listItem!==!1&&e.push(s_.configure(this.options.listItem)),this.options.listKeymap!==!1&&e.push(g_.configure(this.options?.listKeymap)),this.options.link!==!1&&e.push(kg.configure(this.options?.link)),this.options.orderedList!==!1&&e.push(I_.configure(this.options.orderedList)),this.options.paragraph!==!1&&e.push(W_.configure(this.options.paragraph)),this.options.strike!==!1&&e.push(q_.configure(this.options.strike)),this.options.text!==!1&&e.push(J_.configure(this.options.text)),this.options.underline!==!1&&e.push(Y_.configure(this.options?.underline)),this.options.trailingNode!==!1&&e.push(Pv.configure(this.options?.trailingNode)),e}}),Lv=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/,Rv=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g,zv=Qf.create({name:`highlight`,addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:e=>e.getAttribute(`data-color`)||Af(e,`background-color`)||e.style.backgroundColor,renderHTML:e=>Pf(e.color)?{"data-color":e.color,style:`background-color: ${e.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:`mark`}]},renderHTML({HTMLAttributes:e}){return[`mark`,J(this.options.HTMLAttributes,e),0]},renderMarkdown:(e,t)=>`==${t.renderChildren(e)}==`,parseMarkdown:(e,t)=>t.applyMark(`highlight`,t.parseInline(e.tokens||[])),markdownTokenizer:{name:`highlight`,level:`inline`,start:e=>e.indexOf(`==`),tokenize(e,t,n){let r=/^(==)(?!\s)([^=]*[^=\s])(==)/.exec(e);if(r){let e=r[2].trim(),t=n.inlineTokens(e);return{type:`highlight`,raw:r[0],text:e,tokens:t}}}},addCommands(){return{setHighlight:e=>({commands:t})=>t.setMark(this.name,e),toggleHighlight:e=>({commands:t})=>t.toggleMark(this.name,e),unsetHighlight:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-h":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[Sp({find:Lv,type:this.type})]},addPasteRules(){return[Dp({find:Rv,type:this.type})]}}),Bv=`:host{--border-color:var(--l-color-border);--border-color-focus:var(--l-focus-ring);--border-width:1px;--border-radius:var(--l-radius-md);--background:var(--l-color-surface);--color:var(--l-color-text-primary);--toolbar-background:var(--l-color-surface);--toolbar-padding:.5rem;--toolbar-gap:.25rem;--toolbar-divider-color:var(--l-color-divider);--toolbar-button-size:2rem;--toolbar-button-radius:var(--l-radius-sm);--toolbar-button-color:var(--l-color-text-secondary);--toolbar-button-color-active:var(--l-color-text-primary);--toolbar-button-background-hover:var(--l-color-bg-state-hover);--toolbar-button-background-active:var(--l-color-bg-fill-neutral-subtle);--content-padding:.75rem 1rem;--content-min-height:8rem;--placeholder-color:var(--l-color-text-tertiary);box-sizing:border-box;inline-size:100%;display:block}:host([disabled]){opacity:.5;pointer-events:none}.wrapper,.toolbar,.editor{transition-property:border-color,box-shadow;transition-duration:.15s}@media (prefers-reduced-motion:reduce){.wrapper,.toolbar,.editor{transition-duration:0s}}.wrapper{border-radius:var(--border-radius);background-color:var(--background);color:var(--color);flex-direction:column;display:flex}.toolbar{align-items:center;gap:var(--toolbar-gap);padding:var(--toolbar-padding);border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius);background-color:var(--toolbar-background);flex-wrap:wrap;flex:none;display:flex}.editor{border:var(--border-width) solid var(--border-color);border-radius:var(--border-radius)}:host(:not([toolbar-placement])) .toolbar,:host([toolbar-placement=top]) .toolbar{border-bottom:0;border-end-end-radius:0;border-end-start-radius:0}:host(:not([toolbar-placement])) .editor,:host([toolbar-placement=top]) .editor{border-top:0;border-start-start-radius:0;border-start-end-radius:0}:host([toolbar-placement=bottom]) .toolbar{border-top:0;border-start-start-radius:0;border-start-end-radius:0;order:1}:host([toolbar-placement=bottom]) .editor{border-bottom:0;border-end-end-radius:0;border-end-start-radius:0}.toolbar-button{width:var(--toolbar-button-size);height:var(--toolbar-button-size);border-radius:var(--toolbar-button-radius);color:var(--toolbar-button-color);font-size:calc(var(--toolbar-button-size) * .625);cursor:pointer;background-color:#0000;border:0;place-items:center;padding:0;line-height:1;display:grid}@media (hover:hover){.toolbar-button:hover{background-color:var(--toolbar-button-background-hover);color:var(--toolbar-button-color-active)}}.toolbar-button:focus-visible{outline:var(--l-focus-ring-width) solid var(--l-focus-ring);outline-offset:1px}.toolbar-button.is-active{background-color:var(--toolbar-button-background-active);color:var(--toolbar-button-color-active);box-shadow:inset 0 0 0 1px var(--border-color)}@media (prefers-reduced-motion:no-preference){.toolbar-button{transition:background-color .15s,color .15s}}.divider{width:1px;height:calc(var(--toolbar-button-size) * .5);margin-inline:var(--toolbar-gap);background-color:var(--toolbar-divider-color)}`,Vv=`modulepreload`,Hv=function(e){return`/`+e},Uv={},Wv=function(e){return e.pathname.endsWith(`.css`)},Gv=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},Kv=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Hv(t,n);let r=s(t),i=Wv(r);return Gv(Uv,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:Vv,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},qv=e(Bv),Jv=class extends Event{constructor(e,t){super(`change`,{bubbles:!0,composed:!1,cancelable:!1}),this.html=e,this.json=t}},Yv=class extends Event{constructor(){super(`add-file`,{bubbles:!1,composed:!1,cancelable:!1})}},Xv={"heading-1":`heading1`,"heading-2":`heading2`,"heading-3":`heading3`,bold:`bold`,italic:`italic`,underline:`underline`,strike:`strikethrough`,highlight:`highlight`,bulletlist:`bulletList`,orderedlist:`orderedList`,blockquote:`blockquote`,"code-block":`codeBlock`,"horizontal-rule":`horizontalRule`,link:`link`,emoji:`emoji`,attachment:`attachFile`,undo:`undo`,redo:`redo`},Zv={minimal:[`bold`,`italic`,`underline`],default:[`heading-1`,`heading-2`,`heading-3`,`divider`,`bold`,`italic`,`underline`,`highlight`,`bulletlist`,`orderedlist`,`blockquote`,`divider`,`code-block`,`horizontal-rule`,`link`,`emoji`,`divider`,`undo`,`redo`]},Qv=class extends h{constructor(...e){super(...e),this._localize=new g(this),this.#e=``,this.#t=``,this.#n=`prose`,this.#r=[],this.#i=`default`,this.#a=`top`,this.#o=!1,this.#s=``,this.#c=``,this._emojiOpenAtPointerDown=!1,this._emojiFocusInsideAtPointerDown=!1,this._emojiReturnFocus=null,this._emojiFocusGuards=[],this._rovingIndex=0,this._rovingFocusActive=!1,this._onFocus=()=>{this._rovingFocusActive||(this.shadowRoot?.activeElement)?.part?.contains(`toolbar-button`)||!this.disabled&&document.activeElement!==this.editor?.view.dom&&this.focus()},this._onToolbarClick=e=>{let t=this._generatedButtons(),n=this._generatedButtonIn(e,t);n&&(this._rovingIndex=t.indexOf(n),this.requestUpdate())},this._onToolbarKeyDown=e=>{let t=this._generatedButtons();if(t.length===0)return;let n=this.shadowRoot?.activeElement,r=t.indexOf(n);if(r===-1)return;let i=-1;switch(e.key){case`ArrowRight`:i=(r+1)%t.length;break;case`ArrowLeft`:i=(r-1+t.length)%t.length;break;case`Home`:i=0;break;case`End`:i=t.length-1;break;default:return}e.preventDefault(),this._rovingIndex=i,this._rovingFocusActive=!0,t[i]?.focus(),queueMicrotask(()=>{this._rovingFocusActive=!1}),this.requestUpdate()},this._onToolbarMouseDown=e=>{this._generatedButtonIn(e)&&e.preventDefault()},this._onKeyDown=e=>{let t=this._emojiPicker;e.key===`Escape`&&!e.isComposing&&t?.matches(`:popover-open`)&&(this._closeEmojiPicker(t.matches(`:focus-within`)),e.preventDefault(),e.stopPropagation())},this._onDocumentPointerDown=e=>{let t=this._emojiPicker;if(!t?.matches(`:popover-open`))return;let n=e.composedPath();n.includes(t)||this._emojiButton&&n.includes(this._emojiButton)||t.hidePopover()},this._onEmojiButtonPointerDown=()=>{this._emojiOpenAtPointerDown=!!this._emojiPicker?.matches(`:popover-open`),this._emojiFocusInsideAtPointerDown=!!this._emojiPicker?.matches(`:focus-within`)}}static{this.styles=[_,qv]}#e;get initialHtml(){return this.#e}set initialHtml(e){this.#e=e}#t;get initialJson(){return this.#t}set initialJson(e){this.#t=e}#n;get editorClass(){return this.#n}set editorClass(e){this.#n=e}#r;get toolbar(){return this.#r}set toolbar(e){this.#r=e}#i;get toolbarPreset(){return this.#i}set toolbarPreset(e){this.#i=e}#a;get toolbarPlacement(){return this.#a}set toolbarPlacement(e){this.#a=e}#o;get autofocus(){return this.#o}set autofocus(e){this.#o=e}#s;get placeholder(){return this.#s}set placeholder(e){this.#s=e}#c;get emojiDataSource(){return this.#c}set emojiDataSource(e){this.#c=e}get validationTarget(){return this._editorRoot}get _toolbar(){return this.toolbar.length>0?this.toolbar:Zv[this.toolbarPreset]}firstUpdated(){queueMicrotask(()=>this._initEditor())}_initEditor(){this.isConnected&&(this.editor=new xp({element:this._createEditorRoot(),editorProps:{attributes:{class:this.editorClass,"aria-label":this.getAttribute(`aria-label`)??this._localize.term(`richTextEditor`)}},extensions:[Iv.configure({link:{openOnClick:!1}}),zv,Ov.configure({placeholder:this.placeholder})],content:this._initialContent(),editable:!this.disabled,autofocus:this.autofocus&&!this.disabled,onUpdate:()=>{this.requestUpdate(),this._emitChange()},onTransaction:()=>this.requestUpdate(),onSelectionUpdate:()=>this.requestUpdate()}),this.addEventListener(`focus`,this._onFocus),document.addEventListener(`keydown`,this._onKeyDown,!0),document.addEventListener(`pointerdown`,this._onDocumentPointerDown,!0),this._syncValue(),this.requestUpdate())}updated(e){if(e.has(`disabled`)&&this.editor&&this.editor.setEditable(!this.disabled),this.editor&&!this.editor.isDestroyed&&!this.hasAttribute(`aria-label`)){let e=this._localize.term(`richTextEditor`),t=this.editor.view.dom;t.getAttribute(`aria-label`)!==e&&t.setAttribute(`aria-label`,e)}}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`focus`,this._onFocus),document.removeEventListener(`keydown`,this._onKeyDown,!0),document.removeEventListener(`pointerdown`,this._onDocumentPointerDown,!0),this._stopEmojiAutoUpdate(),this.editor?.destroy(),this._editorRoot?.remove(),this._emojiPicker?.remove();for(let e of this._emojiFocusGuards)e.remove();this._emojiFocusGuards=[],this._emojiPicker=void 0,this._emojiPickerPromise=void 0}getHTML(){if(!this.editor)return``;let e=this.editor.getHTML();return e===`<p></p>`?``:e}getJSON(){return this.editor?.getJSON()??{}}clear(){this.editor.commands.clearContent(!0)}focus(){this.editor.commands.focus()}blur(){this.editor.commands.blur()}toggleBold(){this.editor.chain().focus().toggleBold().run()}toggleItalic(){this.editor.chain().focus().toggleItalic().run()}toggleUnderline(){this.editor.chain().focus().toggleUnderline().run()}toggleStrike(){this.editor.chain().focus().toggleStrike().run()}toggleHighlight(){this.editor.chain().focus().toggleHighlight().run()}toggleHeading(e){this.editor.chain().focus().toggleHeading({level:e}).run()}toggleBulletList(){this.editor.chain().focus().toggleBulletList().run()}toggleOrderedList(){this.editor.chain().focus().toggleOrderedList().run()}toggleBlockquote(){this.editor.chain().focus().toggleBlockquote().run()}toggleCodeBlock(){this.editor.chain().focus().toggleCodeBlock().run()}setHorizontalRule(){this.editor.chain().focus().setHorizontalRule().run()}undo(){this.editor.chain().focus().undo().run()}redo(){this.editor.chain().focus().redo().run()}toggleLink(){if(this.editor.isActive(`link`)){this.editor.chain().focus().unsetLink().run();return}let e=window.prompt(`URL`);if(!e)return;let t=/^https?:\/\//.test(e)?e:`https://${e}`;this.editor.chain().focus().setLink({href:t}).run()}formResetCallback(){super.formResetCallback(),this.editor?.commands.setContent(this._initialContent())}_syncValue(){if(!this.editor)return;let e=this.getHTML();return this._syncFormValue(e),this.required&&this.setValidity(e?{}:{valueMissing:!0},e?``:`Please fill out this field.`),e}_emitChange(){let e=this._syncValue();e!==void 0&&this.dispatchEvent(new Jv(e,this.getJSON()))}_initialContent(){return this.initialHtml?this.initialHtml:this.initialJson?JSON.parse(this.initialJson):``}_createEditorRoot(){let e=document.createElement(`div`);return e.slot=`editor`,this.append(e),this._editorRoot=e,e}_generatedButtons(){return Array.from(this.shadowRoot?.querySelectorAll(`[part="toolbar-button"]`)??[])}_generatedButtonIn(e,t=this._generatedButtons()){return e.composedPath().find(e=>t.includes(e))}async _onEmojiButtonClick(e){let t=await this._ensureEmojiPicker();t&&((e.detail===0?t.matches(`:popover-open`):this._emojiOpenAtPointerDown)?this._closeEmojiPicker(e.detail!==0&&this._emojiFocusInsideAtPointerDown):t.matches(`:popover-open`)||this._openEmojiPicker(t))}_openEmojiPicker(e){this._emojiReturnFocus=this._focusedElementWithin(),e.showPopover();let t=e.shadowRoot;(t?.querySelector(`#search`)??t?.querySelector(`input, button, [tabindex]:not([tabindex="-1"])`))?.focus({preventScroll:!0})}_focusedElementWithin(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(e instanceof HTMLElement)||e===this?null:this.contains(e)||this.shadowRoot?.contains(e)?e:null}_closeEmojiPicker(e){let t=this._emojiPicker;if(t?.matches(`:popover-open`)&&t.hidePopover(),!e)return;let n=this._emojiReturnFocus;n&&this._editorRoot?.contains(n)?this._focusEditor():n?.isConnected?n.focus():this._emojiButton?.focus()}_focusEditor(){this.editor&&!this.editor.isDestroyed&&!this.disabled?this.editor.view.focus():this._emojiButton?.focus()}_ensureEmojiPicker(){return this._emojiPicker?Promise.resolve(this._emojiPicker):this._emojiPickerPromise??=(async()=>{let{default:e}=await Kv(async()=>{let{default:e}=await import(`../../chunks/picker.js`);return{default:e}},[]);if(!this.isConnected)return this._emojiPickerPromise=void 0,null;let t=new e(this.emojiDataSource?{dataSource:this.emojiDataSource}:void 0);t.addEventListener(`emoji-click`,e=>{let n=e.detail.unicode;n&&(this.editor.chain().focus().insertContent(n).run(),this.editor.view.focus(),t.hidePopover())});let n=e=>{let t=document.createElement(`span`);return t.tabIndex=0,Object.assign(t.style,{position:`fixed`,width:`1px`,height:`1px`,opacity:`0`,pointerEvents:`none`,display:`none`}),t.addEventListener(`focus`,()=>{this._closeEmojiPicker(!1),e()}),t};this._emojiFocusGuards=[n(()=>this._emojiButton?.focus()),n(()=>this._focusEditor())];let[r,i]=this._emojiFocusGuards;return this._topLayerContainer().append(r,t,i),t.setAttribute(`popover`,`auto`),Object.assign(t.style,{position:`fixed`,inset:`auto`,margin:`0`,padding:`0`,border:`0`,background:`transparent`,display:`none`}),t.style.setProperty(`--border-radius`,`0.5rem`),t.addEventListener(`beforetoggle`,e=>{let n=e.newState===`open`;t.style.display=n?`flex`:`none`;for(let e of this._emojiFocusGuards)e.style.display=n?`block`:`none`}),t.addEventListener(`toggle`,e=>{e.newState===`open`?this._startEmojiAutoUpdate():this._stopEmojiAutoUpdate()}),this._emojiPicker=t,t})()}_topLayerContainer(){let e=this;for(;e;){if(e instanceof HTMLDialogElement&&e.open)return e;e=e instanceof Element&&e.assignedSlot?e.assignedSlot:e instanceof ShadowRoot?e.host:e.parentNode}return document.body}get _emojiButton(){return this.shadowRoot?.querySelector(`[data-command="emoji"]`)??null}_startEmojiAutoUpdate(){let e=this._emojiButton,t=this._emojiPicker;e&&t&&(this._stopEmojiAutoUpdate(),this._emojiAutoUpdateCleanup=f(e,t,()=>void this._positionEmojiPicker()))}_stopEmojiAutoUpdate(){this._emojiAutoUpdateCleanup?.(),this._emojiAutoUpdateCleanup=void 0}async _positionEmojiPicker(){let e=this._emojiButton,t=this._emojiPicker;if(!e||!t||!t.matches(`:popover-open`))return;let{x:n,y:r}=await m(e,t,{strategy:`fixed`,placement:`bottom`,middleware:[u(4),d(),p({padding:8})]});Object.assign(t.style,{left:`${n}px`,top:`${r}px`})}_renderButton(e,r,i,a=!1,o,s=-1){let c=n(`icon`),l=this._localize.term(Xv[e]);return t`
136
136
  <button
137
137
  type="button"
138
138
  part="toolbar-button"