@nldd/design-system 0.8.88 → 0.8.90

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 (108) hide show
  1. package/README.md +4 -4
  2. package/custom-elements.json +303 -64
  3. package/dist/components/components.js +897 -201
  4. package/dist/components/content/image/image.d.ts +23 -3
  5. package/dist/components/content/image/image.d.ts.map +1 -1
  6. package/dist/components/content/image/image.js +74 -17
  7. package/dist/components/content/image/image.js.map +1 -1
  8. package/dist/components/content/image/image.template.js +1 -1
  9. package/dist/components/content/image/image.template.js.map +1 -1
  10. package/dist/components/{dist-LX8LuMac.js → dist-BLaE_n_F.js} +1 -1
  11. package/dist/components/{dist-CX3DK4i7.js → dist-BeymuiGt.js} +3 -3
  12. package/dist/components/{dist-CbCO0WCd.js → dist-CENYEz7C.js} +1 -1
  13. package/dist/components/{dist-B_Mnmrj4.js → dist-CYLM5ciE.js} +1 -1
  14. package/dist/components/{dist-fIxe0l7k.js → dist-DHA-0RyT.js} +91 -34
  15. package/dist/components/{dist-CgDuh26K.js → dist-D_ckX1sK.js} +1 -1
  16. package/dist/components/{dist-eVFegyjM.js → dist-Dh_b9r4M.js} +1 -1
  17. package/dist/components/{dist-DXZ-cFAl.js → dist-DkZlotgT.js} +2 -2
  18. package/dist/components/{dist-CSrO_mYe.js → dist-TCqV9dho.js} +1 -1
  19. package/dist/components/{dist-ByH8hQze.js → dist-Y54Lma86.js} +2 -2
  20. package/dist/components/{dist-CRwuSgMM.js → dist-yyE8P2O6.js} +2 -2
  21. package/dist/components/inputs/radio-button/radio-button.d.ts +58 -18
  22. package/dist/components/inputs/radio-button/radio-button.d.ts.map +1 -1
  23. package/dist/components/inputs/radio-button/radio-button.js +136 -29
  24. package/dist/components/inputs/radio-button/radio-button.js.map +1 -1
  25. package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
  26. package/dist/components/inputs/radio-button/radio-button.styles.js +17 -23
  27. package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
  28. package/dist/components/inputs/radio-button/radio-button.template.d.ts.map +1 -1
  29. package/dist/components/inputs/radio-button/radio-button.template.js +13 -10
  30. package/dist/components/inputs/radio-button/radio-button.template.js.map +1 -1
  31. package/dist/components/inputs/radio-button-field/radio-button-field.d.ts +65 -18
  32. package/dist/components/inputs/radio-button-field/radio-button-field.d.ts.map +1 -1
  33. package/dist/components/inputs/radio-button-field/radio-button-field.js +151 -29
  34. package/dist/components/inputs/radio-button-field/radio-button-field.js.map +1 -1
  35. package/dist/components/inputs/radio-button-field/radio-button-field.styles.d.ts.map +1 -1
  36. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js +17 -0
  37. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js.map +1 -1
  38. package/dist/components/inputs/radio-button-field/radio-button-field.template.d.ts.map +1 -1
  39. package/dist/components/inputs/radio-button-field/radio-button-field.template.js +21 -12
  40. package/dist/components/inputs/radio-button-field/radio-button-field.template.js.map +1 -1
  41. package/dist/components/inputs/radio-button-group/radio-button-group.d.ts +3 -0
  42. package/dist/components/inputs/radio-button-group/radio-button-group.d.ts.map +1 -1
  43. package/dist/components/inputs/radio-button-group/radio-button-group.js +16 -4
  44. package/dist/components/inputs/radio-button-group/radio-button-group.js.map +1 -1
  45. package/dist/components/inputs/segmented-control/segmented-control.d.ts +46 -13
  46. package/dist/components/inputs/segmented-control/segmented-control.d.ts.map +1 -1
  47. package/dist/components/inputs/segmented-control/segmented-control.js +145 -16
  48. package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
  49. package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
  50. package/dist/components/inputs/segmented-control/segmented-control.styles.js +16 -0
  51. package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
  52. package/dist/components/inputs/segmented-control/segmented-control.template.d.ts.map +1 -1
  53. package/dist/components/inputs/segmented-control/segmented-control.template.js +47 -24
  54. package/dist/components/inputs/segmented-control/segmented-control.template.js.map +1 -1
  55. package/dist/components/inputs/text-editor/text-editor.cursor.d.ts.map +1 -1
  56. package/dist/components/inputs/text-editor/text-editor.cursor.js +14 -1
  57. package/dist/components/inputs/text-editor/text-editor.cursor.js.map +1 -1
  58. package/dist/components/inputs/text-editor/text-editor.mentions.d.ts.map +1 -1
  59. package/dist/components/inputs/text-editor/text-editor.mentions.js +3 -1
  60. package/dist/components/inputs/text-editor/text-editor.mentions.js.map +1 -1
  61. package/dist/components/inputs/toggle-button/toggle-button.d.ts +36 -2
  62. package/dist/components/inputs/toggle-button/toggle-button.d.ts.map +1 -1
  63. package/dist/components/inputs/toggle-button/toggle-button.js +116 -3
  64. package/dist/components/inputs/toggle-button/toggle-button.js.map +1 -1
  65. package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
  66. package/dist/components/inputs/toggle-button/toggle-button.styles.js +17 -1
  67. package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
  68. package/dist/components/inputs/toggle-button/toggle-button.template.d.ts.map +1 -1
  69. package/dist/components/inputs/toggle-button/toggle-button.template.js +25 -2
  70. package/dist/components/inputs/toggle-button/toggle-button.template.js.map +1 -1
  71. package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts +4 -0
  72. package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts.map +1 -1
  73. package/dist/components/inputs/toggle-button-group/toggle-button-group.js +21 -2
  74. package/dist/components/inputs/toggle-button-group/toggle-button-group.js.map +1 -1
  75. package/dist/components/lists-and-tables/list/list.d.ts +1 -1
  76. package/dist/components/lists-and-tables/list/list.d.ts.map +1 -1
  77. package/dist/components/lists-and-tables/list/list.js +4 -3
  78. package/dist/components/lists-and-tables/list/list.js.map +1 -1
  79. package/dist/components/lists-and-tables/list/list.template.d.ts.map +1 -1
  80. package/dist/components/lists-and-tables/list/list.template.js +15 -10
  81. package/dist/components/lists-and-tables/list/list.template.js.map +1 -1
  82. package/dist/components/status-and-feedback/notification/notification-region.d.ts +4 -0
  83. package/dist/components/status-and-feedback/notification/notification-region.d.ts.map +1 -1
  84. package/dist/components/status-and-feedback/notification/notification-region.js +99 -30
  85. package/dist/components/status-and-feedback/notification/notification-region.js.map +1 -1
  86. package/dist/components/status-and-feedback/notification/notification.d.ts +7 -1
  87. package/dist/components/status-and-feedback/notification/notification.d.ts.map +1 -1
  88. package/dist/components/status-and-feedback/notification/notification.js +21 -1
  89. package/dist/components/status-and-feedback/notification/notification.js.map +1 -1
  90. package/dist/components/status-and-feedback/notification/notification.styles.d.ts.map +1 -1
  91. package/dist/components/status-and-feedback/notification/notification.styles.js +6 -0
  92. package/dist/components/status-and-feedback/notification/notification.styles.js.map +1 -1
  93. package/dist/css/variables.css +2 -2
  94. package/dist/nldd.min.js +618 -540
  95. package/dist/types/vue.d.ts +22 -18
  96. package/dist/utilities/described-by-mixin.d.ts +2 -2
  97. package/dist/utilities/described-by-mixin.d.ts.map +1 -1
  98. package/dist/utilities/described-by-mixin.js +11 -6
  99. package/dist/utilities/described-by-mixin.js.map +1 -1
  100. package/dist/utilities/radio-grouping.d.ts +66 -0
  101. package/dist/utilities/radio-grouping.d.ts.map +1 -0
  102. package/dist/utilities/radio-grouping.js +133 -0
  103. package/dist/utilities/radio-grouping.js.map +1 -0
  104. package/dist/utilities/radio-position.d.ts +20 -0
  105. package/dist/utilities/radio-position.d.ts.map +1 -0
  106. package/dist/utilities/radio-position.js +11 -0
  107. package/dist/utilities/radio-position.js.map +1 -0
  108. package/package.json +10 -10
@@ -13,7 +13,7 @@
13
13
  * @element nldd-image
14
14
  *
15
15
  * @attr {string} src - Image URL
16
- * @attr {string} alt - Alt text. Required unless `decorative`.
16
+ * @attr {string} alt - Alt text for the image from `src`. Required unless `decorative`; slotted media carries its own.
17
17
  * @attr {string} srcset - Responsive source set
18
18
  * @attr {string} sizes - Source sizes hint
19
19
  * @attr {number|'full'} width - Display width. `full` (default) fills the parent.
@@ -50,7 +50,7 @@
50
50
  * @attr {object} translations - Override translation keys (e.g. the message
51
51
  * shown when the image fails to load); unset keys fall back to Dutch.
52
52
  *
53
- * @slot - Custom `<img>`, `<picture>` or inline `<svg>` (overrides the src-based default). An inline svg keeps its own colors and scales by its viewBox, so a drawing gets the same box, ratio and caption as a photo.
53
+ * @slot - Custom `<img>`, `<picture>` or inline `<svg>` (overrides the src-based default). An inline svg keeps its own colors and scales by its viewBox, so a drawing gets the same box, ratio and caption as a photo. Slotted media carries its own text alternative: an `alt` on the img (empty when it conveys nothing), or `role="img"` with an `aria-label`, `aria-labelledby` or `<title>` on the svg.
54
54
  * The internal `error` listener is attached only to the built-in `<img>`, so
55
55
  * slotted content does not trigger the error-state overlay automatically.
56
56
  * Consumers slotting their own image are responsible for handling its
@@ -133,8 +133,28 @@ export declare class NLDDImage extends LitElement {
133
133
  get _hasCaption(): boolean;
134
134
  willUpdate(changed: Map<string, unknown>): void;
135
135
  updated(changed: Map<string, unknown>): void;
136
- /** DEV-only "missing alt" warning latch; see updated(). */
136
+ /**
137
+ * Says in DEV when an image has no text alternative. A non-decorative image
138
+ * without one is a silent a11y failure (WCAG H37), so this surfaces it
139
+ * during build and Storybook and stays quiet in production.
140
+ *
141
+ * Slotted media replaces the built-in `<img>` and carries its own
142
+ * alternative, so once something is slotted, that is what gets judged.
143
+ * With neither slotted media nor a `src` or `srcset` there is no image yet:
144
+ * a source or media that arrives later is judged when it does. The latch
145
+ * resets once the problem is solved, so bringing it back warns again.
146
+ */
147
+ private _warnMissingAlt;
148
+ /** DEV-only "missing alt" warning latch; see _warnMissingAlt(). */
137
149
  private _warnedAlt;
150
+ /**
151
+ * What the consumer put in the default slot, followed through a forwarded
152
+ * slot. The top level is deliberately not flattened: with nothing assigned,
153
+ * flattening returns the built-in fallback `<img>`, which always has an
154
+ * `alt` attribute and would pass every time.
155
+ */
156
+ private _slottedMedia;
157
+ _onMediaSlotChange: () => void;
138
158
  firstUpdated(): void;
139
159
  _onImageLoad: () => void;
140
160
  _onImageError: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../src/components/content/image/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAMjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,iBAAiB,CAAC;AAEzB,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AACzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AACjF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAEzD,qBACa,SAAU,SAAQ,UAAU;IACxC,OAAgB,MAAM,0BAAe;IAGrC,GAAG,SAAM;IAGT,GAAG,SAAM;IAGT,MAAM,SAAM;IAGZ,KAAK,SAAM;IAEX;;;;uEAImE;IAEnE,KAAK,EAAE,MAAM,CAAU;IAGvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,OAAO,EAAE,YAAY,CAAU;IAG/B,QAAQ,EAAE,aAAa,CAAW;IAGlC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAGnC,WAAW,SAAM;IAGjB,SAAS,EAAE,cAAc,CAAW;IAGpC,cAAc,EAAE,mBAAmB,CAAY;IAG/C,KAAK,EAAE,UAAU,CAAY;IAG7B,OAAO,SAAM;IAGb,MAAM,SAAM;IAGZ,UAAU,UAAS;IAGnB,IAAI,SAAM;IAEV,kFAAkF;IAElF,YAAY,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAM;IAE3C,EAAE,CAAC,GAAG,EAAE,MAAM,qBAAqB,GAAG,MAAM;IAInD;;;;iCAI6B;IAC7B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAkD;IAE1E;;;6BAGyB;IACzB,IAAI,WAAW,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAoB1D;IAGD,kBAAkB,UAAS;IAE3B;iFAC6E;IAE7E,YAAY,UAAS;IAErB;;uCAEmC;IAEnC,aAAa,UAAS;IAEtB;yDACqD;IACrD,IAAI,eAAe,IAAI,MAAM,CAG5B;IAED;;;;;;;iEAO6D;IAC7D,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAStC;IAED,6DAA6D;IAC7D,OAAO,CAAC,YAAY,CAAS;IAE7B,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEQ,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAY/C,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkCrD,2DAA2D;IAC3D,OAAO,CAAC,UAAU,CAAS;IAElB,YAAY,IAAI,IAAI;IAgB7B,YAAY,QAAO,IAAI,CAGrB;IAEF,aAAa,QAAO,IAAI,CAGtB;IAEF;;6EAEyE;IACzE,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAUhD,oBAAoB,GAAI,GAAG,KAAK,KAAG,IAAI,CAErC;IAEO,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,YAAY,EAAE,SAAS,CAAC;KACxB;CACD"}
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../src/components/content/image/image.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@
13
13
  * @element nldd-image
14
14
  *
15
15
  * @attr {string} src - Image URL
16
- * @attr {string} alt - Alt text. Required unless `decorative`.
16
+ * @attr {string} alt - Alt text for the image from `src`. Required unless `decorative`; slotted media carries its own.
17
17
  * @attr {string} srcset - Responsive source set
18
18
  * @attr {string} sizes - Source sizes hint
19
19
  * @attr {number|'full'} width - Display width. `full` (default) fills the parent.
@@ -50,7 +50,7 @@
50
50
  * @attr {object} translations - Override translation keys (e.g. the message
51
51
  * shown when the image fails to load); unset keys fall back to Dutch.
52
52
  *
53
- * @slot - Custom `<img>`, `<picture>` or inline `<svg>` (overrides the src-based default). An inline svg keeps its own colors and scales by its viewBox, so a drawing gets the same box, ratio and caption as a photo.
53
+ * @slot - Custom `<img>`, `<picture>` or inline `<svg>` (overrides the src-based default). An inline svg keeps its own colors and scales by its viewBox, so a drawing gets the same box, ratio and caption as a photo. Slotted media carries its own text alternative: an `alt` on the img (empty when it conveys nothing), or `role="img"` with an `aria-label`, `aria-labelledby` or `<title>` on the svg.
54
54
  * The internal `error` listener is attached only to the built-in `<img>`, so
55
55
  * slotted content does not trigger the error-state overlay automatically.
56
56
  * Consumers slotting their own image are responsible for handling its
@@ -70,6 +70,32 @@ import { imageStyles } from './image.styles.js';
70
70
  import { imageTemplate } from './image.template.js';
71
71
  import { nlddImageTranslations } from './image.i18n.js';
72
72
  import '../icon/icon.js';
73
+ /**
74
+ * Whether slotted media carries a text alternative, or takes itself out of the
75
+ * accessibility tree the way HTML and ARIA intend. An element that is not media
76
+ * itself is judged by the first media inside it; with none, there is nothing to
77
+ * judge and it passes.
78
+ */
79
+ function hasTextAlternative(el) {
80
+ const media = el.matches('img, picture, svg') ? el : el.querySelector('img, picture, svg');
81
+ if (!media)
82
+ return true;
83
+ if (media.getAttribute('aria-hidden') === 'true')
84
+ return true;
85
+ if (media.localName === 'picture') {
86
+ const img = media.querySelector('img');
87
+ return img !== null && hasTextAlternative(img);
88
+ }
89
+ if (media.localName === 'svg') {
90
+ const title = media.querySelector(':scope > title')?.textContent?.trim();
91
+ return media.getAttribute('role') === 'img' && (hasAriaName(media) || Boolean(title));
92
+ }
93
+ // An empty alt counts too: that is how an img says it is decorative.
94
+ return media.hasAttribute('alt') || hasAriaName(media);
95
+ }
96
+ function hasAriaName(el) {
97
+ return Boolean(el.getAttribute('aria-label')?.trim() || el.getAttribute('aria-labelledby')?.trim());
98
+ }
73
99
  let NLDDImage = class NLDDImage extends LitElement {
74
100
  constructor() {
75
101
  super(...arguments);
@@ -106,8 +132,11 @@ let NLDDImage = class NLDDImage extends LitElement {
106
132
  this._imageErrored = false;
107
133
  /** DEV-only "bad width" warning latch; see _numericWidth. */
108
134
  this._warnedWidth = false;
109
- /** DEV-only "missing alt" warning latch; see updated(). */
135
+ /** DEV-only "missing alt" warning latch; see _warnMissingAlt(). */
110
136
  this._warnedAlt = false;
137
+ this._onMediaSlotChange = () => {
138
+ this._warnMissingAlt();
139
+ };
111
140
  this._onImageLoad = () => {
112
141
  this._imageLoaded = true;
113
142
  this._imageErrored = false;
@@ -205,26 +234,54 @@ let NLDDImage = class NLDDImage extends LitElement {
205
234
  this.style.removeProperty('--_max-width');
206
235
  }
207
236
  }
208
- // Non-decorative images without alt text are a silent a11y failure
209
- // (WCAG H37). Warn once in dev so the issue surfaces during build /
210
- // Storybook, but stay quiet in production. Reset the flag when the
211
- // situation is resolved so re-introducing the bug warns again.
212
- if (import.meta.env?.DEV) {
213
- const inaccessible = !this.decorative && !this.alt.trim();
214
- if (inaccessible && !this._warnedAlt) {
215
- this._warnedAlt = true;
216
- console.warn('<nldd-image>: Non-decorative images need a non-empty `alt`. Set `decorative` if the image conveys no information.');
217
- }
218
- else if (!inaccessible) {
219
- this._warnedAlt = false;
220
- }
221
- }
237
+ this._warnMissingAlt();
222
238
  // Reflect load/error state to host attributes so the whole component —
223
239
  // and consumer CSS (`nldd-image[loaded]` / `[errored]`) — can react to
224
240
  // it, not just the internal <img>.
225
241
  this.toggleAttribute('loaded', this._imageLoaded);
226
242
  this.toggleAttribute('errored', this._imageErrored);
227
243
  }
244
+ /**
245
+ * Says in DEV when an image has no text alternative. A non-decorative image
246
+ * without one is a silent a11y failure (WCAG H37), so this surfaces it
247
+ * during build and Storybook and stays quiet in production.
248
+ *
249
+ * Slotted media replaces the built-in `<img>` and carries its own
250
+ * alternative, so once something is slotted, that is what gets judged.
251
+ * With neither slotted media nor a `src` or `srcset` there is no image yet:
252
+ * a source or media that arrives later is judged when it does. The latch
253
+ * resets once the problem is solved, so bringing it back warns again.
254
+ */
255
+ _warnMissingAlt() {
256
+ if (!import.meta.env?.DEV)
257
+ return;
258
+ const slotted = this._slottedMedia();
259
+ const inaccessible = !this.decorative && (slotted.length > 0
260
+ ? !slotted.every(hasTextAlternative)
261
+ : Boolean(this.src || this.srcset) && !this.alt.trim());
262
+ if (!inaccessible) {
263
+ this._warnedAlt = false;
264
+ return;
265
+ }
266
+ if (this._warnedAlt)
267
+ return;
268
+ this._warnedAlt = true;
269
+ console.warn(slotted.length > 0
270
+ ? '<nldd-image>: The slotted image has no text alternative. Give the `<img>` an `alt` (empty when the image conveys no information), or give the `<svg>` `role="img"` and an `aria-label`, `aria-labelledby` or `<title>`.'
271
+ : '<nldd-image>: Non-decorative images need a non-empty `alt`. Set `decorative` if the image conveys no information.', this);
272
+ }
273
+ /**
274
+ * What the consumer put in the default slot, followed through a forwarded
275
+ * slot. The top level is deliberately not flattened: with nothing assigned,
276
+ * flattening returns the built-in fallback `<img>`, which always has an
277
+ * `alt` attribute and would pass every time.
278
+ */
279
+ _slottedMedia() {
280
+ const slot = this.shadowRoot?.querySelector('slot:not([name])');
281
+ return (slot?.assignedElements() ?? []).flatMap(el => el instanceof HTMLSlotElement
282
+ ? el.assignedElements({ flatten: true })
283
+ : [el]);
284
+ }
228
285
  firstUpdated() {
229
286
  // If the image was cached or already loaded by the time the listener
230
287
  // attached, the load event won't fire — sync state directly.
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../src/components/content/image/image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../src/components/content/image/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,iBAAiB,CAAC;AASzB;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,EAAW;IACtC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3F,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9D,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,GAAG,KAAK,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,qEAAqE;IACrE,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,EAAW;IAC/B,OAAO,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACrG,CAAC;AAGM,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QAIN,QAAG,GAAG,EAAE,CAAC;QAGT,QAAG,GAAG,EAAE,CAAC;QAGT,WAAM,GAAG,EAAE,CAAC;QAGZ,UAAK,GAAG,EAAE,CAAC;QAEX;;;;2EAImE;QAEnE,UAAK,GAAW,MAAM,CAAC;QAMvB,YAAO,GAAiB,MAAM,CAAC;QAG/B,aAAQ,GAAkB,OAAO,CAAC;QAMlC,gBAAW,GAAG,EAAE,CAAC;QAGjB,cAAS,GAAmB,OAAO,CAAC;QAGpC,mBAAc,GAAwB,QAAQ,CAAC;QAG/C,UAAK,GAAe,QAAQ,CAAC;QAG7B,YAAO,GAAG,EAAE,CAAC;QAGb,WAAM,GAAG,EAAE,CAAC;QAGZ,eAAU,GAAG,KAAK,CAAC;QAGnB,SAAI,GAAG,EAAE,CAAC;QAEV,kFAAkF;QAElF,iBAAY,GAAmC,EAAE,CAAC;QAY1C,qBAAgB,GAA6C,IAAI,CAAC;QA6B1E,uBAAkB,GAAG,KAAK,CAAC;QAE3B;qFAC6E;QAE7E,iBAAY,GAAG,KAAK,CAAC;QAErB;;2CAEmC;QAEnC,kBAAa,GAAG,KAAK,CAAC;QA4BtB,6DAA6D;QACrD,iBAAY,GAAG,KAAK,CAAC;QAuE7B,mEAAmE;QAC3D,eAAU,GAAG,KAAK,CAAC;QAe3B,uBAAkB,GAAG,GAAS,EAAE;YAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACxB,CAAC,CAAC;QAkBF,iBAAY,GAAG,GAAS,EAAE;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC;QAEF,kBAAa,GAAG,GAAS,EAAE;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC;QAeF,yBAAoB,GAAG,CAAC,CAAQ,EAAQ,EAAE;YACzC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAyB,CAAC,CAAC;QACvD,CAAC,CAAC;IAKH,CAAC;IAxNO,EAAE,CAAC,GAAgC;QACzC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IAUD;;;6BAGyB;IACzB,IAAI,WAAW;QACd,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IAgBD;yDACqD;IACrD,IAAI,eAAe;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;iEAO6D;IAC7D,IAAI,aAAa;QAChB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,KAAK,qDAAqD,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAKD,IAAI,WAAW;QACd,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC;IACnE,CAAC;IAEQ,UAAU,CAAC,OAA6B;QAChD,sEAAsE;QACtE,oEAAoE;QACpE,oEAAoE;QACpE,yEAAyE;QACzE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,CAAC;IACF,CAAC;IAEQ,OAAO,CAAC,OAA6B;QAC7C,sEAAsE;QACtE,sEAAsE;QACtE,oEAAoE;QACpE,iEAAiE;QACjE,+CAA+C;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAC7B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,uEAAuE;QACvE,uEAAuE;QACvE,mCAAmC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;;;;;OAUG;IACK,eAAe;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG;YAAE,OAAO;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC3D,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACpC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,OAAO;QACR,CAAC;QACD,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,IAAI,CACX,OAAO,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,yNAAyN;YAC3N,CAAC,CAAC,mHAAmH,EACtH,IAAI,CACJ,CAAC;IACH,CAAC;IAKD;;;;;OAKG;IACK,aAAa;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAkB,kBAAkB,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,eAAe;YAClF,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACV,CAAC;IAMQ,YAAY;QACpB,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAmB,aAAa,CAAC,CAAC;QAC5E,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,qEAAqE;QACrE,iEAAiE;QACjE,kEAAkE;QAClE,gEAAgE;QAChE,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAkB,sBAAsB,CAAC,CAAC;QAC5F,IAAI,WAAW;YAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAYD;;6EAEyE;IACzE,mBAAmB,CAAC,IAAqB;QACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aAC7D,IAAI,CAAC,IAAI,CAAC,EAAE;YACZ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC/C,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAMQ,MAAM;QACd,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;;AArRe,gBAAM,GAAG,WAAW,AAAd,CAAe;AAGrC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sCACjC;AAGT;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sCAClB;AAGT;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yCACf;AAGZ;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAChB;AAQX;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAS,MAAM,CAAC,EAAE,CAAC;wCACnD;AAGvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yCAC1B;AAGhB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CACI;AAG/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CACO;AAGlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gDACpB;AAGnC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8CACpD;AAGjB;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,CAAiB,OAAO,CAAC,EAAE,CAAC;4CACxE;AAGpC;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,CAAsB,QAAQ,CAAC,EAAE,CAAC;iDACxE;AAG/C;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAa,QAAQ,CAAC,EAAE,CAAC;wCACnD;AAG7B;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAS,EAAE,CAAC,EAAE,CAAC;0CACzD;AAGb;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAS,EAAE,CAAC,EAAE,CAAC;yCAC1D;AAGZ;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CACxB;AAGnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uCACjB;AAIV;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACuB;AAyClD;IADC,KAAK,EAAE;qDACmB;AAK3B;IADC,KAAK,EAAE;+CACa;AAMrB;IADC,KAAK,EAAE;gDACc;AAjHV,SAAS;IADrB,aAAa,CAAC,YAAY,CAAC;GACf,SAAS,CAuRrB"}
@@ -82,7 +82,7 @@ export function imageTemplate(component) {
82
82
  <div class=${mediaClasses}
83
83
  style=${styleMap(mediaStyles)}
84
84
  >
85
- <slot>${fallbackImg}</slot>
85
+ <slot @slotchange=${component._onMediaSlotChange}>${fallbackImg}</slot>
86
86
  ${errorOverlay}
87
87
  ${liveRegion}
88
88
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"image.template.js","sourceRoot":"","sources":["../../../../src/components/content/image/image.template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image.template.js","sourceRoot":"","sources":["../../../../src/components/content/image/image.template.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { C as indentNodeProp, M as styleTags, N as tags, m as continuedIndent, r as LRParser, s as LRLanguage, u as LanguageSupport, v as foldInside, y as foldNodeProp } from "./dist-fIxe0l7k.js";
1
+ import { C as indentNodeProp, M as styleTags, N as tags, m as continuedIndent, r as LRParser, s as LRLanguage, u as LanguageSupport, v as foldInside, y as foldNodeProp } from "./dist-DHA-0RyT.js";
2
2
  //#region node_modules/@lezer/json/dist/index.js
3
3
  var jsonHighlighting = styleTags({
4
4
  String: tags.string,
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { A as syntaxTree, C as indentNodeProp, M as styleTags, N as tags, V as parseMixed, W as EditorView, ct as EditorSelection, n as ExternalTokenizer, p as bracketMatchingHandle, r as LRParser, s as LRLanguage, t as ContextTracker, u as LanguageSupport, y as foldNodeProp } from "./dist-fIxe0l7k.js";
3
- import { n as cssLanguage, t as css } from "./dist-B_Mnmrj4.js";
4
- import { a as tsxLanguage, i as jsxLanguage, n as javascript, o as typescriptLanguage, r as javascriptLanguage } from "./dist-ByH8hQze.js";
2
+ import { A as syntaxTree, C as indentNodeProp, M as styleTags, N as tags, V as parseMixed, W as EditorView, ct as EditorSelection, n as ExternalTokenizer, p as bracketMatchingHandle, r as LRParser, s as LRLanguage, t as ContextTracker, u as LanguageSupport, y as foldNodeProp } from "./dist-DHA-0RyT.js";
3
+ import { n as cssLanguage, t as css } from "./dist-CYLM5ciE.js";
4
+ import { a as tsxLanguage, i as jsxLanguage, n as javascript, o as typescriptLanguage, r as javascriptLanguage } from "./dist-Y54Lma86.js";
5
5
  //#region node_modules/@lezer/html/dist/index.js
6
6
  var scriptText = 55;
7
7
  var StartCloseScriptTag = 1;
@@ -1,4 +1,4 @@
1
- import { C as indentNodeProp, M as styleTags, N as tags, m as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as foldInside, y as foldNodeProp } from "./dist-fIxe0l7k.js";
1
+ import { C as indentNodeProp, M as styleTags, N as tags, m as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as foldInside, y as foldNodeProp } from "./dist-DHA-0RyT.js";
2
2
  //#region node_modules/@lezer/rust/dist/index.js
3
3
  var closureParamDelim = 1;
4
4
  var tpOpen = 2;
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { A as syntaxTree, C as indentNodeProp, M as styleTags, N as tags$1, P as IterMode, R as NodeWeakMap, i as LocalTokenGroup, m as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as foldInside, y as foldNodeProp } from "./dist-fIxe0l7k.js";
2
+ import { A as syntaxTree, C as indentNodeProp, M as styleTags, N as tags$1, P as IterMode, R as NodeWeakMap, i as LocalTokenGroup, m as continuedIndent, n as ExternalTokenizer, r as LRParser, s as LRLanguage, u as LanguageSupport, v as foldInside, y as foldNodeProp } from "./dist-DHA-0RyT.js";
3
3
  //#region node_modules/@lezer/css/dist/index.js
4
4
  var descendantOp = 148;
5
5
  var Unit = 1;
@@ -2775,7 +2775,7 @@ var Chunk = class Chunk {
2775
2775
  this.maxPoint = maxPoint;
2776
2776
  }
2777
2777
  get length() {
2778
- return this.to[this.to.length - 1];
2778
+ return last(this.to);
2779
2779
  }
2780
2780
  findIndex(pos, side, end, startAt = 0) {
2781
2781
  let arr = end ? this.to : this.from;
@@ -2791,9 +2791,9 @@ var Chunk = class Chunk {
2791
2791
  between(offset, from, to, f) {
2792
2792
  for (let i = this.findIndex(from, -1e9, true), e = this.findIndex(to, 1e9, false, i); i < e; i++) if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false) return false;
2793
2793
  }
2794
- map(offset, changes) {
2794
+ map(offset, changes, basePos, baseSide, spill) {
2795
2795
  let value = [], from = [], to = [], newPos = -1, maxPoint = -1;
2796
- for (let i = 0; i < this.value.length; i++) {
2796
+ iter: for (let i = 0; i < this.value.length; i++) {
2797
2797
  let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;
2798
2798
  if (curFrom == curTo) {
2799
2799
  let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);
@@ -2811,9 +2811,24 @@ var Chunk = class Chunk {
2811
2811
  if ((newTo - newFrom || val.endSide - val.startSide) < 0) continue;
2812
2812
  if (newPos < 0) newPos = newFrom;
2813
2813
  if (val.point) maxPoint = Math.max(maxPoint, newTo - newFrom);
2814
- value.push(val);
2815
- from.push(newFrom - newPos);
2816
- to.push(newTo - newPos);
2814
+ if ((newFrom - basePos || val.startSide - baseSide) >= 0) {
2815
+ value.push(val);
2816
+ from.push(newFrom - newPos);
2817
+ to.push(newTo - newPos);
2818
+ basePos = newTo;
2819
+ baseSide = val.endSide;
2820
+ } else {
2821
+ if (newFrom == newTo) for (let i = value.length; i > 0; i--) {
2822
+ if ((newFrom - (to[i - 1] + newPos) || val.startSide - value[i - 1].endSide) >= 0) {
2823
+ value.splice(i, 0, val);
2824
+ from.splice(i, 0, newFrom - newPos);
2825
+ to.splice(i, 0, newTo - newPos);
2826
+ continue iter;
2827
+ }
2828
+ if ((newFrom - (from[i - 1] + newPos) || val.endSide - value[i - 1].startSide) > 0) break;
2829
+ }
2830
+ spill(newFrom, newTo, val);
2831
+ }
2817
2832
  }
2818
2833
  return {
2819
2834
  mapped: value.length ? new Chunk(from, to, value, maxPoint) : null,
@@ -2881,11 +2896,11 @@ var RangeSet = class RangeSet {
2881
2896
  let builder = new RangeSetBuilder();
2882
2897
  while (cur.value || i < add.length) if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {
2883
2898
  let range = add[i++];
2884
- if (!builder.addInner(range.from, range.to, range.value)) spill.push(range);
2899
+ if (!builder.addInner(range.from, range.to, range.value, false)) spill.push(range);
2885
2900
  } else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length && (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) && (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) && builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) cur.nextChunk();
2886
2901
  else {
2887
2902
  if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {
2888
- if (!builder.addInner(cur.from, cur.to, cur.value)) spill.push(Range$1.create(cur.from, cur.to, cur.value));
2903
+ if (!builder.addInner(cur.from, cur.to, cur.value, false)) spill.push(Range$1.create(cur.from, cur.to, cur.value));
2889
2904
  }
2890
2905
  cur.next();
2891
2906
  }
@@ -2902,6 +2917,11 @@ var RangeSet = class RangeSet {
2902
2917
  map(changes) {
2903
2918
  if (changes.empty || this.isEmpty) return this;
2904
2919
  let chunks = [], chunkPos = [], maxPoint = -1;
2920
+ let spilled;
2921
+ let spill = (from, to, value) => {
2922
+ if (!spilled) spilled = new RangeSetBuilder();
2923
+ spilled.addRange(from, to, value, false);
2924
+ };
2905
2925
  for (let i = 0; i < this.chunk.length; i++) {
2906
2926
  let start = this.chunkPos[i], chunk = this.chunk[i];
2907
2927
  let touch = changes.touchesRange(start, start + chunk.length);
@@ -2910,7 +2930,8 @@ var RangeSet = class RangeSet {
2910
2930
  chunks.push(chunk);
2911
2931
  chunkPos.push(changes.mapPos(start));
2912
2932
  } else if (touch === true) {
2913
- let { mapped, pos } = chunk.map(start, changes);
2933
+ let [prevPos, prevSide] = !chunks.length ? [-1, -1] : [last(chunkPos) + last(chunks).length, last(last(chunks).value).endSide];
2934
+ let { mapped, pos } = chunk.map(start, changes, prevPos, prevSide, spill);
2914
2935
  if (mapped) {
2915
2936
  maxPoint = Math.max(maxPoint, mapped.maxPoint);
2916
2937
  chunks.push(mapped);
@@ -2919,6 +2940,7 @@ var RangeSet = class RangeSet {
2919
2940
  }
2920
2941
  }
2921
2942
  let next = this.nextLayer.map(changes);
2943
+ if (spilled) next = spilled.finishInner(next);
2922
2944
  return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);
2923
2945
  }
2924
2946
  /**
@@ -3030,7 +3052,7 @@ var RangeSet = class RangeSet {
3030
3052
  */
3031
3053
  static join(sets) {
3032
3054
  if (!sets.length) return RangeSet.empty;
3033
- let result = sets[sets.length - 1];
3055
+ let result = last(sets);
3034
3056
  for (let i = sets.length - 2; i >= 0; i--) for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer) result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));
3035
3057
  return result;
3036
3058
  }
@@ -3039,6 +3061,9 @@ var RangeSet = class RangeSet {
3039
3061
  The empty set of ranges.
3040
3062
  */
3041
3063
  RangeSet.empty = /*@__PURE__*/ new RangeSet([], [], null, -1);
3064
+ function last(arr) {
3065
+ return arr[arr.length - 1];
3066
+ }
3042
3067
  function lazySort(ranges) {
3043
3068
  if (ranges.length > 1) for (let prev = ranges[0], i = 1; i < ranges.length; i++) {
3044
3069
  let cur = ranges[i];
@@ -3088,14 +3113,20 @@ var RangeSetBuilder = class RangeSetBuilder {
3088
3113
  `value.startSide`) order.
3089
3114
  */
3090
3115
  add(from, to, value) {
3091
- if (!this.addInner(from, to, value)) (this.nextLayer || (this.nextLayer = new RangeSetBuilder())).add(from, to, value);
3116
+ this.addRange(from, to, value, true);
3117
+ }
3118
+ /**
3119
+ @internal
3120
+ */
3121
+ addRange(from, to, value, strict) {
3122
+ if (!this.addInner(from, to, value, strict)) (this.nextLayer || (this.nextLayer = new RangeSetBuilder())).addRange(from, to, value, strict);
3092
3123
  }
3093
3124
  /**
3094
3125
  @internal
3095
3126
  */
3096
- addInner(from, to, value) {
3127
+ addInner(from, to, value, strict) {
3097
3128
  let diff = from - this.lastTo || value.startSide - this.last.endSide;
3098
- if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0) throw new Error("Ranges must be added sorted by `from` position and `startSide`");
3129
+ if (strict && diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0) throw new Error("Ranges must be added sorted by `from` position and `startSide`");
3099
3130
  if (diff < 0) return false;
3100
3131
  if (this.from.length == 250) this.finishChunk(true);
3101
3132
  if (this.chunkStart < 0) this.chunkStart = from;
@@ -3386,7 +3417,10 @@ function compare(a, startA, b, startB, length, comparator) {
3386
3417
  if (!(a.point && b.point && cmpVal(a.point, b.point) && sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to)))) comparator.comparePoint(pos, clipEnd, a.point, b.point);
3387
3418
  boundChange = false;
3388
3419
  } else {
3389
- if (boundChange) comparator.boundChange(pos);
3420
+ if (boundChange) {
3421
+ comparator.boundChange(pos);
3422
+ boundChange = false;
3423
+ }
3390
3424
  if (clipEnd > pos && !sameValues(a.active, b.active)) comparator.compareRange(pos, clipEnd, a.active, b.active);
3391
3425
  if (bounds && clipEnd < endB && (dEnd || a.openEnd(end) != b.openEnd(end))) boundChange = true;
3392
3426
  }
@@ -5539,11 +5573,11 @@ var TileBuilder = class {
5539
5573
  if (last.dom != mark.dom) last.setDOM(freeNode(mark.dom));
5540
5574
  head = last;
5541
5575
  } else {
5576
+ let { dom } = mark;
5542
5577
  if (this.cache.reused.get(mark)) {
5543
- let tile = Tile.get(mark.dom);
5544
- if (tile) tile.setDOM(freeNode(mark.dom));
5578
+ if (Tile.get(mark.dom)) dom = freeNode(mark.dom);
5545
5579
  }
5546
- let nw = MarkTile.of(mark.mark, mark.dom);
5580
+ let nw = MarkTile.of(mark.mark, dom);
5547
5581
  head.append(nw);
5548
5582
  head = nw;
5549
5583
  }
@@ -5956,12 +5990,13 @@ var TileUpdate = class {
5956
5990
  if (tile instanceof MarkTile) marks.push(tile);
5957
5991
  else if (tile === null || tile === void 0 ? void 0 : tile.isLine()) line = tile;
5958
5992
  else if (tile instanceof BlockWrapperTile);
5959
- else if (parent.nodeName == "DIV" && !line && parent != this.view.contentDOM) line = new LineTile(parent, lineBaseAttrs);
5993
+ else if (parent.nodeName == "DIV" && !line) line = new LineTile(parent, lineBaseAttrs);
5960
5994
  else if (!line) marks.push(MarkTile.of(new MarkDecoration({
5961
5995
  tagName: parent.nodeName.toLowerCase(),
5962
5996
  attributes: getAttrs(parent)
5963
5997
  }), parent));
5964
5998
  }
5999
+ if (!line) return null;
5965
6000
  return {
5966
6001
  line,
5967
6002
  marks
@@ -6653,18 +6688,20 @@ function blockAt(view, pos, side) {
6653
6688
  return line;
6654
6689
  }
6655
6690
  function moveToLineBoundary(view, start, forward, includeWrap) {
6656
- let line = blockAt(view, start.head, start.assoc || -1);
6657
- let coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);
6691
+ let block = blockAt(view, start.head, start.assoc || -1);
6692
+ let coords = !includeWrap || block.type != BlockType.Text || !(view.lineWrapping || block.widgetLineBreaks) ? null : view.coordsAtPos(start.assoc < 0 && start.head > block.from ? start.head - 1 : start.head);
6658
6693
  if (coords) {
6659
6694
  let editorRect = view.dom.getBoundingClientRect();
6660
- let direction = view.textDirectionAt(line.from);
6695
+ let direction = view.textDirectionAt(block.from);
6661
6696
  let pos = view.posAtCoords({
6662
6697
  x: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,
6663
6698
  y: (coords.top + coords.bottom) / 2
6664
6699
  });
6665
6700
  if (pos != null) return EditorSelection.cursor(pos, forward ? -1 : 1);
6666
6701
  }
6667
- return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);
6702
+ let line = view.state.doc.lineAt(start.head);
6703
+ if (forward ? line.to == block.to : line.from == block.from) return view.visualLineSide(line, forward);
6704
+ return EditorSelection.cursor(forward ? block.to : block.from, forward ? -1 : 1);
6668
6705
  }
6669
6706
  function moveByChar(view, start, forward, by) {
6670
6707
  let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);
@@ -6868,7 +6905,7 @@ var InlineCoordsScan = class {
6868
6905
  }
6869
6906
  if (!closestRect) {
6870
6907
  if (!below && !above) return {
6871
- i: positions[0],
6908
+ i: 0,
6872
6909
  after: false
6873
6910
  };
6874
6911
  let side = above && (!below || this.y - above.bottom < below.top - this.y) ? above : below;
@@ -7374,7 +7411,7 @@ var InputState = class {
7374
7411
  keyCode: event.keyCode,
7375
7412
  mods
7376
7413
  };
7377
- setTimeout(() => this.flushIOSKey(), 250);
7414
+ setTimeout(() => this.flushIOSKey(), 50);
7378
7415
  return true;
7379
7416
  }
7380
7417
  if (event.keyCode != 229) this.view.observer.forceFlush();
@@ -7382,7 +7419,7 @@ var InputState = class {
7382
7419
  }
7383
7420
  flushIOSKey(change) {
7384
7421
  let key = this.pendingIOSKey;
7385
- if (!key) return false;
7422
+ if (!key || this.view.observer.pendingRecords().length) return false;
7386
7423
  if (key.key == "Enter" && change && change.from < change.to && /^\S+$/.test(change.insert.toString())) return false;
7387
7424
  this.pendingIOSKey = void 0;
7388
7425
  return dispatchKey(this.view.contentDOM, key.key, key.keyCode, key.mods);
@@ -7959,7 +7996,17 @@ observers.blur = (view) => {
7959
7996
  observers.compositionstart = observers.compositionupdate = (view) => {
7960
7997
  if (view.observer.editContext) return;
7961
7998
  if (view.inputState.compositionFirstChange == null) view.inputState.compositionFirstChange = true;
7962
- if (view.inputState.composing < 0) view.inputState.composing = 0;
7999
+ if (view.inputState.composing < 0) {
8000
+ let { main } = view.state.selection;
8001
+ if (!main.empty && view.lineBlockAt(main.from).from != view.lineBlockAt(main.to).from) view.dispatch({
8002
+ changes: view.state.selection.ranges.filter((r) => !r.empty).map((r) => ({
8003
+ from: r.from,
8004
+ to: r.to
8005
+ })),
8006
+ userEvent: "input"
8007
+ });
8008
+ view.inputState.composing = 0;
8009
+ }
7963
8010
  };
7964
8011
  observers.compositionend = (view) => {
7965
8012
  if (view.observer.editContext) return;
@@ -9077,7 +9124,7 @@ var ViewState = class {
9077
9124
  return height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom && this.viewportLines.find((l) => l.top <= height && l.bottom >= height) || scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);
9078
9125
  }
9079
9126
  getScrollOffset() {
9080
- return (this.scrollParent == this.view.scrollDOM ? this.scrollParent.scrollTop : (this.scrollParent ? this.scrollParent.getBoundingClientRect().top : 0) - this.view.contentDOM.getBoundingClientRect().top) * this.scaleY;
9127
+ return this.scrollParent == this.view.scrollDOM ? this.scrollParent.scrollTop * this.scaleY : (this.scrollParent ? this.scrollParent.getBoundingClientRect().top : 0) - this.view.contentDOM.getBoundingClientRect().top;
9081
9128
  }
9082
9129
  scrollAnchorAt(scrollOffset) {
9083
9130
  let block = this.lineBlockAtHeight(scrollOffset + 8);
@@ -9429,8 +9476,9 @@ var baseTheme$1 = /*@__PURE__*/ buildTheme("." + baseThemeID, {
9429
9476
  userSelect: "none"
9430
9477
  },
9431
9478
  ".cm-highlightSpace": {
9432
- backgroundImage: "radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",
9433
- backgroundPosition: "center"
9479
+ background: "radial-gradient(circle at 50% 55%, #aaa 20%, transparent 0) no-repeat",
9480
+ backgroundSize: ".4em",
9481
+ backgroundPosition: "calc(min(50%, 0px)) center"
9434
9482
  },
9435
9483
  ".cm-highlightTab": {
9436
9484
  backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,
@@ -10128,6 +10176,7 @@ var EditorView = class EditorView {
10128
10176
  @internal
10129
10177
  */
10130
10178
  this.measureRequests = [];
10179
+ this.clearAnnouncement = -1;
10131
10180
  this.contentDOM = document.createElement("div");
10132
10181
  this.scrollDOM = document.createElement("div");
10133
10182
  this.scrollDOM.tabIndex = -1;
@@ -10322,7 +10371,7 @@ var EditorView = class EditorView {
10322
10371
  if (flush) this.observer.forceFlush();
10323
10372
  let updated = null;
10324
10373
  let scroll = this.viewState.scrollParent, scrollOffset = this.viewState.getScrollOffset();
10325
- let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;
10374
+ let { scrollAnchorPos, scrollAnchorHeight, scaleY: scrollScale } = this.viewState;
10326
10375
  if (Math.abs(scrollOffset - this.viewState.scrollOffset) > 1) scrollAnchorHeight = -1;
10327
10376
  this.viewState.scrollAnchorHeight = -1;
10328
10377
  try {
@@ -10330,12 +10379,13 @@ var EditorView = class EditorView {
10330
10379
  if (scrollAnchorHeight < 0) {
10331
10380
  if (isScrolledToBottom(scroll || this.win)) {
10332
10381
  scrollAnchorPos = -1;
10333
- scrollAnchorHeight = this.viewState.heightMap.height;
10382
+ scrollAnchorHeight = this.viewState.heightMap.height / this.viewState.scaleY;
10334
10383
  } else {
10335
10384
  let block = this.viewState.scrollAnchorAt(scrollOffset);
10336
10385
  scrollAnchorPos = block.from;
10337
10386
  scrollAnchorHeight = block.top;
10338
10387
  }
10388
+ scrollScale = this.viewState.scaleY;
10339
10389
  }
10340
10390
  this.updateState = 1;
10341
10391
  let changed = this.viewState.measure();
@@ -10381,7 +10431,7 @@ var EditorView = class EditorView {
10381
10431
  scrollAnchorHeight = -1;
10382
10432
  continue;
10383
10433
  } else {
10384
- let diff = ((scrollAnchorPos < 0 ? this.viewState.heightMap.height : this.viewState.lineBlockAt(scrollAnchorPos).top) - scrollAnchorHeight) / this.scaleY;
10434
+ let diff = (scrollAnchorPos < 0 ? this.viewState.heightMap.height : this.viewState.lineBlockAt(scrollAnchorPos).top) / this.viewState.scaleY - scrollAnchorHeight / scrollScale;
10385
10435
  if ((diff > 1 || diff < -1) && !(browser.ios && this.inputState.lastIOSMomentumScroll > Date.now() - 100) && (scroll == this.scrollDOM || this.hasFocus || Math.max(this.inputState.lastWheelEvent, this.inputState.lastTouchTime) > Date.now() - 100)) {
10386
10436
  scrollOffset = scrollOffset + diff;
10387
10437
  if (!scroll) this.win.scrollBy(0, diff);
@@ -10435,8 +10485,14 @@ var EditorView = class EditorView {
10435
10485
  showAnnouncements(trs) {
10436
10486
  let first = true;
10437
10487
  for (let tr of trs) for (let effect of tr.effects) if (effect.is(EditorView.announce)) {
10438
- if (first) this.announceDOM.textContent = "";
10439
- first = false;
10488
+ if (first) {
10489
+ this.announceDOM.textContent = "";
10490
+ this.win.clearTimeout(this.clearAnnouncement);
10491
+ this.clearAnnouncement = this.win.setTimeout(() => {
10492
+ this.announceDOM.textContent = "\xA0";
10493
+ }, 200);
10494
+ first = false;
10495
+ }
10440
10496
  let div = this.announceDOM.appendChild(document.createElement("div"));
10441
10497
  div.textContent = effect.value;
10442
10498
  }
@@ -10780,6 +10836,7 @@ var EditorView = class EditorView {
10780
10836
  this.docView.destroy();
10781
10837
  this.dom.remove();
10782
10838
  this.observer.destroy();
10839
+ this.win.clearTimeout(this.clearAnnouncement);
10783
10840
  if (this.measureScheduled > -1) this.win.cancelAnimationFrame(this.measureScheduled);
10784
10841
  this.destroyed = true;
10785
10842
  }
@@ -1,4 +1,4 @@
1
- import { A as syntaxTree, H as Decoration, K as ViewPlugin, Q as keymap, T as indentUnit, U as Direction, W as EditorView, Z as getTooltip, _t as Text, bt as codePointSize, ct as EditorSelection, dt as MapMode, ft as Prec, gt as StateField, ht as StateEffect, it as Annotation, mt as RangeValue, q as WidgetType, rt as showTooltip, tt as logException, ut as Facet, vt as Transaction, wt as fromCodePoint, xt as combineConfig, yt as codePointAt } from "./dist-fIxe0l7k.js";
1
+ import { A as syntaxTree, H as Decoration, K as ViewPlugin, Q as keymap, T as indentUnit, U as Direction, W as EditorView, Z as getTooltip, _t as Text, bt as codePointSize, ct as EditorSelection, dt as MapMode, ft as Prec, gt as StateField, ht as StateEffect, it as Annotation, mt as RangeValue, q as WidgetType, rt as showTooltip, tt as logException, ut as Facet, vt as Transaction, wt as fromCodePoint, xt as combineConfig, yt as codePointAt } from "./dist-DHA-0RyT.js";
2
2
  //#region node_modules/@codemirror/autocomplete/dist/index.js
3
3
  /**
4
4
  An instance of this is passed to completion source functions.