@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.
- package/README.md +4 -4
- package/custom-elements.json +303 -64
- package/dist/components/components.js +897 -201
- package/dist/components/content/image/image.d.ts +23 -3
- package/dist/components/content/image/image.d.ts.map +1 -1
- package/dist/components/content/image/image.js +74 -17
- package/dist/components/content/image/image.js.map +1 -1
- package/dist/components/content/image/image.template.js +1 -1
- package/dist/components/content/image/image.template.js.map +1 -1
- package/dist/components/{dist-LX8LuMac.js → dist-BLaE_n_F.js} +1 -1
- package/dist/components/{dist-CX3DK4i7.js → dist-BeymuiGt.js} +3 -3
- package/dist/components/{dist-CbCO0WCd.js → dist-CENYEz7C.js} +1 -1
- package/dist/components/{dist-B_Mnmrj4.js → dist-CYLM5ciE.js} +1 -1
- package/dist/components/{dist-fIxe0l7k.js → dist-DHA-0RyT.js} +91 -34
- package/dist/components/{dist-CgDuh26K.js → dist-D_ckX1sK.js} +1 -1
- package/dist/components/{dist-eVFegyjM.js → dist-Dh_b9r4M.js} +1 -1
- package/dist/components/{dist-DXZ-cFAl.js → dist-DkZlotgT.js} +2 -2
- package/dist/components/{dist-CSrO_mYe.js → dist-TCqV9dho.js} +1 -1
- package/dist/components/{dist-ByH8hQze.js → dist-Y54Lma86.js} +2 -2
- package/dist/components/{dist-CRwuSgMM.js → dist-yyE8P2O6.js} +2 -2
- package/dist/components/inputs/radio-button/radio-button.d.ts +58 -18
- package/dist/components/inputs/radio-button/radio-button.d.ts.map +1 -1
- package/dist/components/inputs/radio-button/radio-button.js +136 -29
- package/dist/components/inputs/radio-button/radio-button.js.map +1 -1
- package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
- package/dist/components/inputs/radio-button/radio-button.styles.js +17 -23
- package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
- package/dist/components/inputs/radio-button/radio-button.template.d.ts.map +1 -1
- package/dist/components/inputs/radio-button/radio-button.template.js +13 -10
- package/dist/components/inputs/radio-button/radio-button.template.js.map +1 -1
- package/dist/components/inputs/radio-button-field/radio-button-field.d.ts +65 -18
- package/dist/components/inputs/radio-button-field/radio-button-field.d.ts.map +1 -1
- package/dist/components/inputs/radio-button-field/radio-button-field.js +151 -29
- package/dist/components/inputs/radio-button-field/radio-button-field.js.map +1 -1
- package/dist/components/inputs/radio-button-field/radio-button-field.styles.d.ts.map +1 -1
- package/dist/components/inputs/radio-button-field/radio-button-field.styles.js +17 -0
- package/dist/components/inputs/radio-button-field/radio-button-field.styles.js.map +1 -1
- package/dist/components/inputs/radio-button-field/radio-button-field.template.d.ts.map +1 -1
- package/dist/components/inputs/radio-button-field/radio-button-field.template.js +21 -12
- package/dist/components/inputs/radio-button-field/radio-button-field.template.js.map +1 -1
- package/dist/components/inputs/radio-button-group/radio-button-group.d.ts +3 -0
- package/dist/components/inputs/radio-button-group/radio-button-group.d.ts.map +1 -1
- package/dist/components/inputs/radio-button-group/radio-button-group.js +16 -4
- package/dist/components/inputs/radio-button-group/radio-button-group.js.map +1 -1
- package/dist/components/inputs/segmented-control/segmented-control.d.ts +46 -13
- package/dist/components/inputs/segmented-control/segmented-control.d.ts.map +1 -1
- package/dist/components/inputs/segmented-control/segmented-control.js +145 -16
- package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
- package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
- package/dist/components/inputs/segmented-control/segmented-control.styles.js +16 -0
- package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
- package/dist/components/inputs/segmented-control/segmented-control.template.d.ts.map +1 -1
- package/dist/components/inputs/segmented-control/segmented-control.template.js +47 -24
- package/dist/components/inputs/segmented-control/segmented-control.template.js.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.cursor.d.ts.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.cursor.js +14 -1
- package/dist/components/inputs/text-editor/text-editor.cursor.js.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.mentions.d.ts.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.mentions.js +3 -1
- package/dist/components/inputs/text-editor/text-editor.mentions.js.map +1 -1
- package/dist/components/inputs/toggle-button/toggle-button.d.ts +36 -2
- package/dist/components/inputs/toggle-button/toggle-button.d.ts.map +1 -1
- package/dist/components/inputs/toggle-button/toggle-button.js +116 -3
- package/dist/components/inputs/toggle-button/toggle-button.js.map +1 -1
- package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
- package/dist/components/inputs/toggle-button/toggle-button.styles.js +17 -1
- package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
- package/dist/components/inputs/toggle-button/toggle-button.template.d.ts.map +1 -1
- package/dist/components/inputs/toggle-button/toggle-button.template.js +25 -2
- package/dist/components/inputs/toggle-button/toggle-button.template.js.map +1 -1
- package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts +4 -0
- package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts.map +1 -1
- package/dist/components/inputs/toggle-button-group/toggle-button-group.js +21 -2
- package/dist/components/inputs/toggle-button-group/toggle-button-group.js.map +1 -1
- package/dist/components/lists-and-tables/list/list.d.ts +1 -1
- package/dist/components/lists-and-tables/list/list.d.ts.map +1 -1
- package/dist/components/lists-and-tables/list/list.js +4 -3
- package/dist/components/lists-and-tables/list/list.js.map +1 -1
- package/dist/components/lists-and-tables/list/list.template.d.ts.map +1 -1
- package/dist/components/lists-and-tables/list/list.template.js +15 -10
- package/dist/components/lists-and-tables/list/list.template.js.map +1 -1
- package/dist/components/status-and-feedback/notification/notification-region.d.ts +4 -0
- package/dist/components/status-and-feedback/notification/notification-region.d.ts.map +1 -1
- package/dist/components/status-and-feedback/notification/notification-region.js +99 -30
- package/dist/components/status-and-feedback/notification/notification-region.js.map +1 -1
- package/dist/components/status-and-feedback/notification/notification.d.ts +7 -1
- package/dist/components/status-and-feedback/notification/notification.d.ts.map +1 -1
- package/dist/components/status-and-feedback/notification/notification.js +21 -1
- package/dist/components/status-and-feedback/notification/notification.js.map +1 -1
- package/dist/components/status-and-feedback/notification/notification.styles.d.ts.map +1 -1
- package/dist/components/status-and-feedback/notification/notification.styles.js +6 -0
- package/dist/components/status-and-feedback/notification/notification.styles.js.map +1 -1
- package/dist/css/variables.css +2 -2
- package/dist/nldd.min.js +618 -540
- package/dist/types/vue.d.ts +22 -18
- package/dist/utilities/described-by-mixin.d.ts +2 -2
- package/dist/utilities/described-by-mixin.d.ts.map +1 -1
- package/dist/utilities/described-by-mixin.js +11 -6
- package/dist/utilities/described-by-mixin.js.map +1 -1
- package/dist/utilities/radio-grouping.d.ts +66 -0
- package/dist/utilities/radio-grouping.d.ts.map +1 -0
- package/dist/utilities/radio-grouping.js +133 -0
- package/dist/utilities/radio-grouping.js.map +1 -0
- package/dist/utilities/radio-position.d.ts +20 -0
- package/dist/utilities/radio-position.d.ts.map +1 -0
- package/dist/utilities/radio-position.js +11 -0
- package/dist/utilities/radio-position.js.map +1 -0
- 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
|
|
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
|
-
/**
|
|
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;
|
|
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
|
|
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
|
|
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
|
-
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../src/components/content/image/image.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAGvD,MAAM,UAAU,aAAa,CAAC,SAAoB;IACjD,mEAAmE;IACnE,uEAAuE;IACvE,+CAA+C;IAC/C,wEAAwE;IACxE,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,8CAA8C;IAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,KAAK,IAAI,CAAC;IACpC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,SAAS,CAAC,eAAe;QAAE,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC;IACnF,IAAI,OAAO,EAAE,CAAC;QACb,WAAW,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7D,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACpC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC;QAC7B,cAAc,EAAE,IAAI;QACpB,oEAAoE;QACpE,kEAAkE;QAClE,kDAAkD;QAClD,oBAAoB,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa;KACzD,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,CAAA;;SAEhB,SAAS,CAAC,GAAG,IAAI,OAAO;SACxB,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG;iBACjC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC5C,SAAS,CAAC,MAAM,IAAI,OAAO;WAC5B,SAAS,CAAC,KAAK,IAAI,OAAO;WAC1B,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;YACjC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;aAC1B,SAAS,CAAC,OAAO;cAChB,SAAS,CAAC,QAAQ;mBACb,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;WAC1C,SAAS,CAAC,YAAY;YACrB,SAAS,CAAC,aAAa;;EAEjC,CAAC;IAEF,2EAA2E;IAC3E,2EAA2E;IAC3E,wCAAwC;IACxC,2EAA2E;IAC3E,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAA;;iBAEnC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;;;KAGnD,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA,mCAAmC,SAAS,CAAC,GAAG,SAAS;;EAEjG,CAAC,CAAC,CAAC,OAAO,CAAC;IAEZ,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IACxE,sEAAsE;IACtE,sEAAsE;IACtE,uDAAuD;IACvD,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC;IAC9D,MAAM,kBAAkB,GAAG,SAAS,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,UAAU;QAC1E,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,UAAU,GAAG,IAAI,CAAA;;IAEpB,kBAAkB,SAAS,CAAC;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAA;eACJ,YAAY;WAChB,QAAQ,CAAC,WAAW,CAAC;;uBAET,SAAS,CAAC,kBAAkB,IAAI,WAAW;KAC7D,YAAY;KACZ,UAAU;;EAEb,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAA;;KAEP,KAAK;;uCAE6B,SAAS,CAAC,oBAAoB;OAC9D,SAAS,CAAC,OAAO;MAClB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA,+BAA+B,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,OAAO;;;EAG7F,CAAC;AACH,CAAC"}
|
|
@@ -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-
|
|
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-
|
|
3
|
-
import { n as cssLanguage, t as css } from "./dist-
|
|
4
|
-
import { a as tsxLanguage, i as jsxLanguage, n as javascript, o as typescriptLanguage, r as javascriptLanguage } from "./dist-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
|
6657
|
-
let coords = !includeWrap ||
|
|
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(
|
|
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
|
-
|
|
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:
|
|
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(),
|
|
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)
|
|
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
|
|
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
|
-
|
|
9433
|
-
|
|
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 = (
|
|
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)
|
|
10439
|
-
|
|
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-
|
|
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.
|