@aceshooting/lyra-ui 12.0.0 → 12.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/custom-elements.json +1 -1
- package/dist/autoloader.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +0 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
- package/dist/components/charts/chart/histogram-bin.d.ts +0 -1
- package/dist/components/charts/chart/histogram-bin.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +22 -9
- package/dist/components/charts/chart/lite-chart.class.js +6 -6
- package/dist/components/conversation/code-block/code-block-shared.d.ts +4 -54
- package/dist/components/conversation/code-block/code-block-shared.js +1 -1
- package/dist/components/conversation/code-block/shiki-types.d.ts +2 -1
- package/dist/components/conversation/generation-metrics/generation-metrics.class.js +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +0 -3
- package/dist/components/conversation/model-select/model-select.class.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +0 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.js +1 -1
- package/dist/components/data/data-grid/data-grid.class.js +1 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +4 -1
- package/dist/components/data/heatmap/heatmap.class.js +2 -2
- package/dist/components/data/table/table.class.d.ts +18 -4
- package/dist/components/data/table/table.class.js +2 -2
- package/dist/components/data/table/table.styles.js +2 -1
- package/dist/components/data/timeline/timeline-cluster.d.ts +1 -0
- package/dist/components/data/timeline/timeline-cluster.js +1 -0
- package/dist/components/data/timeline/timeline-item.class.d.ts +17 -2
- package/dist/components/data/timeline/timeline-item.class.js +13 -2
- package/dist/components/data/timeline/timeline-item.styles.js +65 -0
- package/dist/components/data/timeline/timeline.class.d.ts +83 -27
- package/dist/components/data/timeline/timeline.class.js +3 -3
- package/dist/components/data/timeline/timeline.d.ts +1 -0
- package/dist/components/data/timeline/timeline.js +1 -1
- package/dist/components/data/timeline/timeline.styles.js +14 -0
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +0 -1
- package/dist/components/forms/checkbox/checkbox.class.js +1 -1
- package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +0 -1
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.js +1 -1
- package/dist/components/forms/combobox/combobox.class.d.ts +7 -1
- package/dist/components/forms/combobox/combobox.class.js +3 -2
- package/dist/components/forms/combobox/combobox.styles.js +1 -1
- package/dist/components/forms/date-picker/date-input.class.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +0 -1
- package/dist/components/forms/input/native-time-input.class.js +1 -1
- package/dist/components/forms/input/time-input-shared.d.ts +2 -1
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +0 -1
- package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
- package/dist/components/forms/radio/radio-button.styles.d.ts +0 -1
- package/dist/components/forms/radio/radio-button.styles.js +1 -1
- package/dist/components/forms/radio/radio-group.class.d.ts +0 -1
- package/dist/components/forms/radio/radio-group.class.js +1 -1
- package/dist/components/forms/radio/radio.class.d.ts +0 -1
- package/dist/components/forms/radio/radio.class.js +1 -1
- package/dist/components/forms/rubric-form/rubric-form.class.d.ts +0 -1
- package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
- package/dist/components/forms/select/select.class.d.ts +0 -1
- package/dist/components/forms/select/select.class.js +1 -1
- package/dist/components/forms/slider/slider.class.d.ts +0 -1
- package/dist/components/forms/slider/slider.class.js +1 -1
- package/dist/components/forms/switch/switch.class.d.ts +0 -1
- package/dist/components/forms/switch/switch.class.js +1 -1
- package/dist/components/forms/time-range/time-range.class.d.ts +0 -1
- package/dist/components/forms/time-range/time-range.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.d.ts +0 -1
- package/dist/components/forms/token-input/token-input.class.js +1 -1
- package/dist/components/layout/dashboard-grid/layout-internal.d.ts +0 -1
- package/dist/components/layout/dashboard-grid/layout-internal.js +1 -1
- package/dist/components/layout/details/accordion-owner.d.ts +1 -1
- package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
- package/dist/components/layout/menu/menu-item.class.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
- package/dist/components/media/av-player/av-metadata.d.ts +0 -2
- package/dist/components/media/av-player/av-metadata.js +1 -1
- package/dist/components/media/file-input/file-input.class.d.ts +0 -1
- package/dist/components/media/file-input/file-input.class.js +1 -1
- package/dist/components/media/map/map-loader.d.ts +4 -1
- package/dist/components/media/map/map.class.d.ts +50 -12
- package/dist/components/media/map/map.class.js +2 -2
- package/dist/components/overlays/overlay/popover.class.d.ts +7 -1
- package/dist/components/overlays/overlay/popover.class.js +1 -1
- package/dist/components/overlays/overlay/tooltip.class.d.ts +1 -0
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/progress/progress-shared.d.ts +0 -2
- package/dist/components/overlays/progress/progress-shared.js +1 -1
- package/dist/components/overlays/rating/rating.class.js +1 -1
- package/dist/components/retrieval/graph/graph-canvas.d.ts +10 -9
- package/dist/components/retrieval/mind-map/mind-map-layout.d.ts +0 -4
- package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
- package/dist/components/utility/format/format-options.d.ts +0 -2
- package/dist/components/utility/format/format-options.js +1 -1
- package/dist/components/utility/icon/icon-resource.d.ts +0 -2
- package/dist/components/utility/icon/icon-resource.js +1 -1
- package/dist/components/viewers/archive-viewer/zip-resource-guard.d.ts +2 -1
- package/dist/components/viewers/docx-viewer/docx-resource-guard.d.ts +0 -3
- package/dist/components/viewers/docx-viewer/docx-resource-guard.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +2 -1
- package/dist/components/viewers/ebook-viewer/epub-resource-guard.d.ts +0 -3
- package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +1 -1
- package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +2 -2
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +2 -2
- package/dist/components/viewers/pptx-viewer/pptx-resource-guard.d.ts +0 -2
- package/dist/components/viewers/pptx-viewer/pptx-resource-guard.js +1 -1
- package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.d.ts +0 -5
- package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.js +1 -1
- package/dist/custom-elements-jsx.d.ts +4 -4
- package/dist/events.d.ts +15 -0
- package/dist/internal/accessibility-visibility.d.ts +1 -1
- package/dist/internal/anchor-target.d.ts +1 -3
- package/dist/internal/anchor-target.js +2 -2
- package/dist/internal/anchored-overlay-runtime.d.ts +7 -0
- package/dist/internal/anchored-overlay-runtime.js +1 -0
- package/dist/internal/announcement-text.d.ts +1 -1
- package/dist/internal/ansi.d.ts +0 -4
- package/dist/internal/ansi.js +1 -1
- package/dist/internal/aria-ownership.d.ts +2 -1
- package/dist/internal/default-strings.generated.d.ts +1 -0
- package/dist/internal/default-strings.generated.js +1 -1
- package/dist/internal/focus-navigation.d.ts +3 -2
- package/dist/internal/form-associated.d.ts +0 -1
- package/dist/internal/form-associated.js +1 -1
- package/dist/internal/form-control-labels.d.ts +0 -3
- package/dist/internal/form-control-labels.js +1 -1
- package/dist/internal/localization-runtime.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +1 -1
- package/dist/internal/lyra-element.d.ts +0 -13
- package/dist/internal/lyra-element.js +1 -1
- package/dist/internal/nonmodal-overlay-manager.d.ts +9 -0
- package/dist/internal/nonmodal-overlay-manager.js +1 -0
- package/dist/internal/overlay-manager.d.ts +4 -20
- package/dist/internal/overlay-manager.js +1 -1
- package/dist/internal/overlay-stack.d.ts +66 -0
- package/dist/internal/overlay-stack.js +1 -0
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/positioner.js +1 -1
- package/dist/internal/text-quote.d.ts +1 -1
- package/dist/lyra.d.ts +2 -3
- package/dist/svelte.d.ts +4 -4
- package/dist/translations/ar.js +1 -1
- package/dist/translations/de.js +1 -1
- package/dist/translations/es.js +1 -1
- package/dist/translations/fa.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/he.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/translations/pt-BR.js +1 -1
- package/dist/translations/ru.js +1 -1
- package/dist/translations/zh-CN.js +1 -1
- package/dist/utilities/localization.js +1 -1
- package/dist/vue.d.ts +4 -4
- package/llms/components/lr-combobox.md +42 -0
- package/llms/components/lr-date-input.md +1 -1
- package/llms/components/lr-date-picker.md +1 -1
- package/llms/components/lr-filter-bar.md +2 -2
- package/llms/components/lr-heatmap.md +4 -1
- package/llms/components/lr-lite-chart.md +20 -8
- package/llms/components/lr-map.md +52 -22
- package/llms/components/lr-option.md +42 -0
- package/llms/components/lr-popover.md +39 -0
- package/llms/components/lr-table.md +7 -3
- package/llms/components/lr-timeline-item.md +49 -24
- package/llms/components/lr-timeline.md +49 -24
- package/llms-full.txt +224 -60
- package/package.json +3 -4
- package/vscode-css-data.json +21 -0
- package/vscode-html-data.json +12 -6
- package/web-types.json +47 -16
package/llms-full.txt
CHANGED
|
@@ -4165,6 +4165,48 @@ Filterable single/multi-select combining a text input with a listbox. Mirrors th
|
|
|
4165
4165
|
`<wa-combobox>` API under the `lr-` prefix. **Form-associated** (hand-rolled internals, not the
|
|
4166
4166
|
shared `FormAssociated` mixin — see gotchas).
|
|
4167
4167
|
|
|
4168
|
+
**First-interaction registration.** Where initial-route weight is stricter than a static combobox
|
|
4169
|
+
registration allows, keep a labelled native `<input list>` as the working pre-JavaScript control
|
|
4170
|
+
and import only the granular combobox registration on its first focus. Copy the native value after
|
|
4171
|
+
the import resolves so typing that happens while the chunk is in flight is not lost, then transfer
|
|
4172
|
+
focus explicitly — the browser does not replay the focus event after custom-element upgrade:
|
|
4173
|
+
|
|
4174
|
+
```html
|
|
4175
|
+
<div id="country-fallback">
|
|
4176
|
+
<label for="country-native">Country</label>
|
|
4177
|
+
<input id="country-native" name="country" list="country-options">
|
|
4178
|
+
<datalist id="country-options"><option value="France"></option></datalist>
|
|
4179
|
+
</div>
|
|
4180
|
+
<lr-combobox id="country-enhanced" name="country" label="Country" hidden>
|
|
4181
|
+
<lr-option value="France">France</lr-option>
|
|
4182
|
+
</lr-combobox>
|
|
4183
|
+
<script type="module">
|
|
4184
|
+
const fallback = document.querySelector("#country-fallback");
|
|
4185
|
+
const input = document.querySelector("#country-native");
|
|
4186
|
+
const combobox = document.querySelector("#country-enhanced");
|
|
4187
|
+
let registration;
|
|
4188
|
+
input.addEventListener("focus", async () => {
|
|
4189
|
+
if (!combobox.hidden) return;
|
|
4190
|
+
registration ??= import(
|
|
4191
|
+
"@aceshooting/lyra-ui/components/forms/combobox/combobox.js"
|
|
4192
|
+
).catch((error) => {
|
|
4193
|
+
registration = undefined; // let a later interaction retry
|
|
4194
|
+
throw error;
|
|
4195
|
+
});
|
|
4196
|
+
await registration;
|
|
4197
|
+
await customElements.whenDefined("lr-combobox");
|
|
4198
|
+
combobox.value = input.value;
|
|
4199
|
+
fallback.hidden = true;
|
|
4200
|
+
combobox.hidden = false;
|
|
4201
|
+
combobox.focus();
|
|
4202
|
+
});
|
|
4203
|
+
</script>
|
|
4204
|
+
```
|
|
4205
|
+
|
|
4206
|
+
Leave the native control in place if registration fails. This pattern preserves the initial shell;
|
|
4207
|
+
the full form-label, option, overlay, and first-open positioning contracts arrive in deferred
|
|
4208
|
+
chunks instead of being weakened in a separate partial combobox implementation.
|
|
4209
|
+
|
|
4168
4210
|
An `lr-option` row remains bounded by its owning listbox: the default label ellipsizes and each
|
|
4169
4211
|
`start`/`end` (or `prefix`/`suffix`) adornment is capped at 40% of the row. Unbroken metadata
|
|
4170
4212
|
therefore cannot widen a 320px LTR or RTL picker.
|
|
@@ -5072,7 +5114,7 @@ Text field + calendar popover, **form-associated** via the shared `FormAssociate
|
|
|
5072
5114
|
**Properties (44):**
|
|
5073
5115
|
|
|
5074
5116
|
- `appearance: 'filled'|'outlined'|'filled-outlined' = 'outlined'` (reflected)
|
|
5075
|
-
- `appliedPreset: LyraDateRangePreset | undefined` (read-only, new in
|
|
5117
|
+
- `appliedPreset: LyraDateRangePreset | undefined` (read-only, new in 12.1.0) — the `presets` entry
|
|
5076
5118
|
whose button produced the current `value`, or `undefined` when the value was picked on the
|
|
5077
5119
|
calendar, typed into the field, cleared, or reset. Read it inside your own `change`/`input`
|
|
5078
5120
|
handler; it is updated before those events are relayed, so a handler observes the preset that
|
|
@@ -10309,7 +10351,7 @@ no-rows states return the empty element as the shadow root's own root, with no `
|
|
|
10309
10351
|
wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero
|
|
10310
10352
|
one — and that `empty` disappears entirely once the `empty` slot is filled.
|
|
10311
10353
|
|
|
10312
|
-
- `scrollMode: 'self' | 'page' = 'self'` (attribute `scroll-mode`, reflected) — which element
|
|
10354
|
+
- `scrollMode: 'self' | 'page' | 'auto' = 'self'` (attribute `scroll-mode`, reflected) — which element
|
|
10313
10355
|
scrolls when the table overflows. `'self'` makes `[part="base"]` the scroll container, which is
|
|
10314
10356
|
what pairs with `--lr-table-max-height` and makes the sticky header pin inside the table's own
|
|
10315
10357
|
viewport. `'page'` hands scrolling back to the document. Needed because a scroll container clips
|
|
@@ -10317,8 +10359,12 @@ one — and that `empty` disappears entirely once the `empty` slot is filled.
|
|
|
10317
10359
|
still `overflow: auto` becomes a sticky containing block that never scrolls, and its header
|
|
10318
10360
|
scrolls away with the page. With `'page'` the header's nearest scrollport is the page, so it pins
|
|
10319
10361
|
there; the cost is that a table wider than its host overflows the page instead of scrolling
|
|
10320
|
-
inside itself.
|
|
10321
|
-
|
|
10362
|
+
inside itself. The opt-in `'auto'` mode resolves between those two behaviors from the rendered
|
|
10363
|
+
allocation: while content fits it uses page flow, and only while content actually overflows
|
|
10364
|
+
horizontally does `[part="base"]` become the contained scrollport. It re-evaluates when either
|
|
10365
|
+
the allocated width or the rendered table's intrinsic width changes, so the same table can flow
|
|
10366
|
+
with a desktop page and contain itself in a 320px panel. The default remains `'self'`. Named
|
|
10367
|
+
`scrollMode` rather than `scroll` because a `scroll` property would shadow `Element.prototype.scroll()`
|
|
10322
10368
|
|
|
10323
10369
|
**Themeable custom properties:** `--lr-table-cell-color` (default `inherit`),
|
|
10324
10370
|
`--lr-table-cell-link-color` (default `var(--lr-color-brand)`) and
|
|
@@ -11286,7 +11332,10 @@ color?: string; label?: string; partOfRamp?: boolean }`: a discrete legend key r
|
|
|
11286
11332
|
are never consulted by the color ramp, the bucket math, the tooltip, or the generated accessible
|
|
11287
11333
|
name, so adding them changes nothing a cell renders. Labeled `annotations` still render their
|
|
11288
11334
|
`[part="legend-annotation"]` entries after the stops. Unset (the default) or an empty array
|
|
11289
|
-
reproduces the exact gradient legend, unchanged.
|
|
11335
|
+
reproduces the exact gradient legend, unchanged. Reassigning stops whose `value`/`color`/`label`/
|
|
11336
|
+
`partOfRamp` fields are unchanged does not schedule a canvas redraw. The assignment still takes
|
|
11337
|
+
a fresh frozen ownership snapshot, so mutating and reassigning the same caller array is detected
|
|
11338
|
+
while mutation without reassignment remains isolated. A dev-mode-only warning fires when a stop's
|
|
11290
11339
|
`color` doesn't match the corresponding `colorSteps` entry — set `partOfRamp: false` on a stop
|
|
11291
11340
|
that is a real, distinctly-colored swatch deliberately outside the sequential ramp (e.g. a fixed
|
|
11292
11341
|
"no data" color next to an N-step ramp) to exclude just that stop from the comparison; defaults to
|
|
@@ -12597,20 +12646,21 @@ renders each event as a `<button part="agenda-event">`.
|
|
|
12597
12646
|
|
|
12598
12647
|
## `lr-timeline` and `lr-timeline-item`
|
|
12599
12648
|
|
|
12600
|
-
Read-only chronological sequence. `lr-timeline` is a `role="list"` flex container; each
|
|
12649
|
+
Read-only chronological sequence by default. `lr-timeline` is a `role="list"` flex container; each
|
|
12601
12650
|
`lr-timeline-item` is a light-DOM child that sets `role="listitem"` on itself and renders its own
|
|
12602
12651
|
marker plus the trailing rail segment reaching toward the next item's marker. The last item's rail is
|
|
12603
12652
|
suppressed purely in CSS (`::slotted([role='listitem']:last-child)`) — no JS coordination anywhere.
|
|
12604
|
-
|
|
12605
|
-
|
|
12606
|
-
|
|
12653
|
+
Items have no keyboard navigation or selection model: a passive record display, by design (an
|
|
12654
|
+
item's `title`/`description` routinely hold focusable content, so wrapping the row in `role="button"`
|
|
12655
|
+
would trip `nested-interactive`). The opt-in clustered time scale adds only native count-marker
|
|
12656
|
+
buttons; it does not make the individual rows interactive.
|
|
12607
12657
|
|
|
12608
12658
|
**`lr-timeline` properties:** `orientation: 'vertical' | 'horizontal' = 'vertical'` — note the
|
|
12609
12659
|
opposite default from `lr-stepper`; `horizontal` makes `[part='base']` a horizontally scrollable row.
|
|
12610
12660
|
`accessibleLabel: string = ''` (attribute `aria-label`) overrides the localized `"Timeline"` name
|
|
12611
12661
|
(the `role="list"` element is in the shadow root and never inherits a host attribute). Read-only
|
|
12612
|
-
`itemCount: number` is the live count of
|
|
12613
|
-
unrelated slotted elements and text nodes are ignored.
|
|
12662
|
+
`itemCount: number` is the live count of default-slot `<lr-timeline-item>` assignments (including
|
|
12663
|
+
flattened forwarding slots); unrelated slotted elements and text nodes are ignored.
|
|
12614
12664
|
`scale: 'flow' | 'time' = 'flow'` (attribute `scale`, type `LyraTimelineScale`) chooses how items
|
|
12615
12665
|
are distributed along the main axis. `'flow'` is the default even sequence, where `timestamp` is
|
|
12616
12666
|
rendered as text but carries no positional meaning. `'time'` positions each item at its true
|
|
@@ -12618,23 +12668,34 @@ proportion of the range, so a gap of weeks and a gap of decades stop looking ide
|
|
|
12618
12668
|
needs a definite extent to distribute along — `--lr-timeline-time-extent` (default
|
|
12619
12669
|
`var(--lr-size-20rem)`), applied as `block-size` when vertical and `inline-size` when horizontal —
|
|
12620
12670
|
because items are absolutely positioned and a percentage against an auto-sized track resolves to
|
|
12621
|
-
zero. `collision: 'overlap' | 'stack' = 'overlap'` (attribute `collision`, type
|
|
12622
|
-
chooses what `scale="time"` does with items landing on nearly the same
|
|
12623
|
-
them stacked on one another, `'stack'` steps each colliding item one
|
|
12624
|
-
(indent per lane: `--lr-timeline-collision-offset`, default
|
|
12625
|
-
|
|
12626
|
-
|
|
12627
|
-
|
|
12628
|
-
|
|
12671
|
+
zero. `collision: 'overlap' | 'stack' | 'cluster' = 'overlap'` (attribute `collision`, type
|
|
12672
|
+
`LyraTimelineCollision`) chooses what `scale="time"` does with items landing on nearly the same
|
|
12673
|
+
position: `'overlap'` leaves them stacked on one another, `'stack'` steps each colliding item one
|
|
12674
|
+
lane along the **cross** axis (indent per lane: `--lr-timeline-collision-offset`, default
|
|
12675
|
+
`var(--lr-space-l)`), and `'cluster'` replaces every group of at least two colliding items with one
|
|
12676
|
+
count marker. The group's first member in author order becomes its representative and renders the
|
|
12677
|
+
button in that item's existing list/Tab position; the remaining members are hidden, so visual,
|
|
12678
|
+
semantic, and keyboard order do not diverge merely because clustering is enabled. Stack mode and
|
|
12679
|
+
the cluster floor treat items within 1.5% of the axis as colliding.
|
|
12680
|
+
Cluster mode widens that floor to the rendered count action's footprint on the currently allocated
|
|
12681
|
+
axis, then reclusters when the allocation or rendered action size changes, so interactive marker
|
|
12682
|
+
hit areas do not overlap.
|
|
12683
|
+
Cluster windows are bounded from their first sorted position rather than transitively chaining every
|
|
12684
|
+
dense neighbour, so a large history becomes a useful sequence of markers rather than one axis-wide
|
|
12685
|
+
cluster. An isolated item remains an ordinary timeline item. Activating a count marker is a
|
|
12686
|
+
notification only; it never expands or selects items internally.
|
|
12629
12687
|
`rangeStart` / `rangeEnd` (`Date | string | number`, attribute: false) pin the axis instead of
|
|
12630
12688
|
deriving it from the earliest/latest item; a reversed or non-finite pair falls back to the derived
|
|
12631
12689
|
range. An item with no parseable `timestamp` (including one supplied only through the `timestamp`
|
|
12632
12690
|
slot, which carries no machine-readable instant) keeps document order and is spread evenly, so a
|
|
12633
|
-
partially-timestamped list degrades rather than stacking at the origin.
|
|
12634
|
-
|
|
12635
|
-
selection belong to a denser component than this deliberately passive one. Positions are written to
|
|
12691
|
+
partially-timestamped list degrades rather than stacking at the origin. Reassigning an item's
|
|
12692
|
+
`timestamp` reclusters without requiring a slot mutation. Positions are written to
|
|
12636
12693
|
each child as a private `--_lr-timeline-item-offset` custom property and removed again on a switch
|
|
12637
|
-
back to `'flow'
|
|
12694
|
+
back to `'flow'`. Cluster mode adds and removes a private visibility marker on non-representative
|
|
12695
|
+
members and temporarily changes only the representative item's shadow presentation; switching
|
|
12696
|
+
mode, shrinking the data, or disconnecting restores every ordinary row. If regrouping would remove
|
|
12697
|
+
the focused row content or count action, focus moves to the replacement cluster action, the first
|
|
12698
|
+
surviving item action, or the timeline list as a programmatic fallback.
|
|
12638
12699
|
|
|
12639
12700
|
**`lr-timeline-item` properties:** `timestamp?: Date | string | number` (attribute: false — `Date`
|
|
12640
12701
|
isn't attribute-serializable; invalid input normalizes to unset and renders no timestamp UI),
|
|
@@ -12644,8 +12705,16 @@ isn't attribute-serializable; invalid input normalizes to unset and renders no t
|
|
|
12644
12705
|
optional pulse disabled under `prefers-reduced-motion: reduce`, with explicit `aria-current="true"`
|
|
12645
12706
|
or `"false"` on the host).
|
|
12646
12707
|
|
|
12647
|
-
**Events:**
|
|
12648
|
-
|
|
12708
|
+
**Events:** `lr-timeline` emits `lr-cluster-activate` when a `collision="cluster"` marker is
|
|
12709
|
+
activated by pointer, Enter, or Space. Its non-cancelable, bubbling, composed
|
|
12710
|
+
`detail: LyraTimelineClusterActivateDetail` is `{ items: readonly LyraTimelineItem[] }`: a fresh
|
|
12711
|
+
frozen snapshot of the cluster members in document order, preserving each element's identity.
|
|
12712
|
+
`LyraTimelineClusterActivateDetail {
|
|
12713
|
+
items: unknown;
|
|
12714
|
+
}`
|
|
12715
|
+
Use it to open a consumer-owned popover, dialog, or detail view. `lr-timeline-item` emits no events.
|
|
12716
|
+
Read the reactive `itemCount` property after changing assigned items; the internal slot's
|
|
12717
|
+
non-composed `slotchange` event is not a host-level public signal.
|
|
12649
12718
|
|
|
12650
12719
|
**Slots:** `lr-timeline`'s default slot holds the items, in display order. On an item the **default
|
|
12651
12720
|
slot is the title** (there is no `title` slot), plus `marker-icon` (marker glyph override; an empty
|
|
@@ -12654,7 +12723,9 @@ slot falls back to a color-coded dot), `timestamp` (wins outright over the
|
|
|
12654
12723
|
entirely when empty).
|
|
12655
12724
|
|
|
12656
12725
|
**CSS parts:** timeline `base` — the `role="list"` flex container (no separate `list` part). Item:
|
|
12657
|
-
`
|
|
12726
|
+
`cluster` — the native count button rendered while that item represents a cluster, with a 40px
|
|
12727
|
+
minimum action surface; `cluster-count` — its painted count pill; `base`, `track`
|
|
12728
|
+
(marker + rail spine, always the opposite axis from `base`), `marker`
|
|
12658
12729
|
(`aria-hidden="true"`, decorative), `rail` (the connecting segment; `visibility: hidden` rather than
|
|
12659
12730
|
removed on the last item, so marker alignment stays consistent), `content`, `header` (flex row
|
|
12660
12731
|
wrapping `title` and `timestamp`; wraps at narrow widths rather than truncating), `title`,
|
|
@@ -12662,8 +12733,11 @@ wrapping `title` and `timestamp`; wraps at narrow widths rather than truncating)
|
|
|
12662
12733
|
|
|
12663
12734
|
**Themeable custom properties:** `--lr-timeline-gap` (default `var(--lr-space-l)`) — declared on
|
|
12664
12735
|
`lr-timeline` but consumed inside each item via inheritance across the slot boundary; it is both the
|
|
12665
|
-
inter-item spacing and the length each rail bridges. `--lr-
|
|
12666
|
-
|
|
12736
|
+
inter-item spacing and the length each rail bridges. `--lr-timeline-cluster-size` (default
|
|
12737
|
+
`var(--lr-size-2rem)`) sizes the painted count pill, `--lr-timeline-cluster-bg` (default
|
|
12738
|
+
`var(--lr-color-brand)`) sets its background, and `--lr-timeline-cluster-color` (default
|
|
12739
|
+
`var(--lr-color-on-brand)`) sets its foreground. `--lr-scroll-fade-size` (default `2rem`) controls
|
|
12740
|
+
each horizontal-overflow edge fade; forced-colors mode removes the masks while retaining native
|
|
12667
12741
|
scrolling. On the item: `--lr-timeline-marker-size`
|
|
12668
12742
|
(default `var(--lr-size-1-25rem)`, both dimensions so the dot stays circular),
|
|
12669
12743
|
`--lr-timeline-rail-width` (default `var(--lr-border-width-medium)`), `--lr-timeline-rail-color`
|
|
@@ -16848,7 +16922,7 @@ value therefore stays inside a 320px LTR or RTL bar, with the chip's own label e
|
|
|
16848
16922
|
overflow ownership rather than widening the page.
|
|
16849
16923
|
|
|
16850
16924
|
Each edit exposes one filter-bar `lr-input` carrying a detached, deeply frozen snapshot of the
|
|
16851
|
-
complete value object, plus the `filterId` that changed and (new in
|
|
16925
|
+
complete value object, plus the `filterId` that changed and (new in 12.1.0) `appliedPreset` — see
|
|
16852
16926
|
"Date-range quick ranges" below. A built-in or
|
|
16853
16927
|
custom control's own `lr-input`/`lr-change` aliases stay inside the wrapper so their incompatible
|
|
16854
16928
|
detail shapes cannot escape as duplicate bar events; native-style `input`/`change` events from the
|
|
@@ -16901,7 +16975,7 @@ text the user typed, not a truncated or normalized form.
|
|
|
16901
16975
|
|
|
16902
16976
|
### Date-range quick ranges
|
|
16903
16977
|
|
|
16904
|
-
A `'date-range'` definition also accepts `presets?: readonly LyraDateRangePreset[]` (new in
|
|
16978
|
+
A `'date-range'` definition also accepts `presets?: readonly LyraDateRangePreset[]` (new in 12.1.0),
|
|
16905
16979
|
forwarded to its composed `<lr-date-input>` exactly like `min`/`max`, so the quick-range row
|
|
16906
16980
|
("Today", "Last 7 days", "All time") renders inside that filter's own calendar popover. Entries are
|
|
16907
16981
|
`LyraDateRangePreset { label, start?, end? }` with ISO `YYYY-MM-DD` bounds; an omitted bound is open
|
|
@@ -18921,6 +18995,45 @@ from the shared positioner and caps its dimensions to the measured available spa
|
|
|
18921
18995
|
|
|
18922
18996
|
A click-triggered, light-dismiss floating surface positioned with the shared Floating UI positioner.
|
|
18923
18997
|
|
|
18998
|
+
**First-interaction registration.** A performance-sensitive navigation shell can keep a native
|
|
18999
|
+
`<details>` disclosure working before JavaScript, then load only the granular popover registration
|
|
19000
|
+
when that fallback first opens. The interaction that starts an async import is not replayed after
|
|
19001
|
+
the custom element upgrades, so finish the handoff explicitly with `show()`:
|
|
19002
|
+
|
|
19003
|
+
```html
|
|
19004
|
+
<details id="account-fallback">
|
|
19005
|
+
<summary>Account</summary>
|
|
19006
|
+
<nav aria-label="Account"><a href="/profile">Profile</a></nav>
|
|
19007
|
+
</details>
|
|
19008
|
+
<lr-popover id="account-popover" popup-role="none" hidden>
|
|
19009
|
+
<button slot="trigger">Account</button>
|
|
19010
|
+
<nav aria-label="Account"><a href="/profile">Profile</a></nav>
|
|
19011
|
+
</lr-popover>
|
|
19012
|
+
<script type="module">
|
|
19013
|
+
const fallback = document.querySelector("#account-fallback");
|
|
19014
|
+
const popover = document.querySelector("#account-popover");
|
|
19015
|
+
let registration;
|
|
19016
|
+
fallback.addEventListener("toggle", async () => {
|
|
19017
|
+
if (!fallback.open || !popover.hidden) return;
|
|
19018
|
+
registration ??= import(
|
|
19019
|
+
"@aceshooting/lyra-ui/components/overlays/overlay/popover.js"
|
|
19020
|
+
).catch((error) => {
|
|
19021
|
+
registration = undefined; // let a later interaction retry
|
|
19022
|
+
throw error;
|
|
19023
|
+
});
|
|
19024
|
+
await registration;
|
|
19025
|
+
await customElements.whenDefined("lr-popover");
|
|
19026
|
+
fallback.hidden = true;
|
|
19027
|
+
popover.hidden = false;
|
|
19028
|
+
await popover.show();
|
|
19029
|
+
});
|
|
19030
|
+
</script>
|
|
19031
|
+
```
|
|
19032
|
+
|
|
19033
|
+
This keeps the fallback's markup and semantics in the initial document. The registration, Lyra
|
|
19034
|
+
base, nonmodal stack, and first-open positioning runtime remain outside that initial module graph.
|
|
19035
|
+
If the import fails, leave the native disclosure visible and usable.
|
|
19036
|
+
|
|
18924
19037
|
**Properties:**
|
|
18925
19038
|
|
|
18926
19039
|
- `open: boolean = false` (reflected) — assigning it runs the same `lr-show`/`lr-hide` lifecycle as
|
|
@@ -22378,12 +22491,17 @@ dimming at `itemCount <= 1`), `--lr-focus-ring-*`.
|
|
|
22378
22491
|
A `maplibre-gl` wrapper with a declarative legend, a single choropleth GeoJSON fill layer, markers,
|
|
22379
22492
|
and additive `dataLayers` — plain GeoJSON, natively clustered points, or a heatmap density surface —
|
|
22380
22493
|
plus a peer-neutral `map` getter for common imperative operations. Its runtime value is the
|
|
22381
|
-
underlying MapLibre map.
|
|
22494
|
+
underlying MapLibre map. The component observes its own map-container allocation and calls the
|
|
22495
|
+
peer's `resize()` when that allocation changes.
|
|
22382
22496
|
|
|
22383
22497
|
**Properties:**
|
|
22384
22498
|
|
|
22385
22499
|
- `center: [number, number] = [0, 0]`
|
|
22386
22500
|
- `zoom: number = 2`
|
|
22501
|
+
- `renderWorldCopies?: boolean` (attribute: false) — forwarded to MapLibre when its map is
|
|
22502
|
+
constructed. Leave it unset to preserve MapLibre's own current default; set `false` before
|
|
22503
|
+
construction to stop repeating the world horizontally. This is a construction-time option, so a
|
|
22504
|
+
later change takes effect after the component is disconnected and reconnected.
|
|
22387
22505
|
- `mapStyle?: LyraMapStyleSpecification | string` (attribute: false) — required before a map is
|
|
22388
22506
|
constructed. Object assignments are detached and recursively frozen; create and reassign a new
|
|
22389
22507
|
style to update it. `LyraMapStyleSpecification` is the peer-neutral structural subset accepted from
|
|
@@ -22458,6 +22576,10 @@ string; geojson: GeoJSON.FeatureCollection; field: string; stops: [number, strin
|
|
|
22458
22576
|
gotchas. Entries with non-finite coordinates or latitude outside `[-90, 90]` are skipped without
|
|
22459
22577
|
aborting valid siblings. `color` is used only when the browser accepts it as CSS `color`;
|
|
22460
22578
|
declaration breaks and `url()` paint servers fall back to MapLibre's default marker color.
|
|
22579
|
+
Every retained marker is a named `role="button"` tab stop, including one without a popup. Click,
|
|
22580
|
+
Enter, and Space emit `lr-map-marker-activate`; Space suppresses its page-scroll default while
|
|
22581
|
+
preserving MapLibre's popup toggle. A popup-bearing marker additionally exposes
|
|
22582
|
+
`aria-haspopup="dialog"`, `aria-controls`, and explicit `aria-expanded`.
|
|
22461
22583
|
- `dataLayers: LyraMapGeoJsonDataLayer[] = []` (attribute: false) —
|
|
22462
22584
|
`LyraMapGeoJsonDataLayer { sourceId: string; geojson: GeoJSON.Feature |
|
|
22463
22585
|
GeoJSON.FeatureCollection; tone?: 'accent' | 'success' | 'warning' |
|
|
@@ -22482,11 +22604,12 @@ heatmap?: LyraMapHeatmapOptions; cluster?: LyraMapClusterOptions }`. `sourceId`
|
|
|
22482
22604
|
from overwriting or removing a same-named source supplied by `mapStyle`. Independent of
|
|
22483
22605
|
`choropleth` — no `field`/`stops` color-interpolation, just the geometry rendered in a flat tone;
|
|
22484
22606
|
use `choropleth` instead when you need a data-driven color ramp. An entry whose `sourceId`
|
|
22485
|
-
persists across a `dataLayers` reassignment gets its GeoJSON updated in place (`
|
|
22486
|
-
|
|
22487
|
-
|
|
22607
|
+
persists across a `dataLayers` reassignment gets its GeoJSON updated in place (`updateData()`
|
|
22608
|
+
when stable feature IDs make a safe diff possible, otherwise `setData()`), one that's dropped has
|
|
22609
|
+
its private source/layers removed, and a genuinely new `sourceId` gets new resources — nothing
|
|
22610
|
+
leaks on removal, style change, or disconnect.
|
|
22488
22611
|
|
|
22489
|
-
`cluster` and `kind` (both new in
|
|
22612
|
+
`cluster` and `kind` (both new in 12.1.0) opt one entry out of that three-layer geometry split.
|
|
22490
22613
|
**Both are strictly additive: an entry that sets neither renders exactly what it rendered before,
|
|
22491
22614
|
down to the layer ids and the point layer's filter.**
|
|
22492
22615
|
|
|
@@ -22516,7 +22639,9 @@ number][]; colorSteps?: [number, string][]; countFont?: string[] }` turns the en
|
|
|
22516
22639
|
renders the source as MapLibre's own first-class `heatmap` layer instead, which the geometry split
|
|
22517
22640
|
cannot express at all: thousands of overlapping circles read as one opaque blob rather than as
|
|
22518
22641
|
where the data is concentrated. `heatmap?: LyraMapHeatmapOptions { weightField?: string;
|
|
22519
|
-
weightRange?: [number, number]; stops?: [number, string][]; radius?:
|
|
22642
|
+
weightRange?: [number, number]; stops?: [number, string][]; radius?: LyraMapHeatmapZoomValue;
|
|
22643
|
+
intensity?: LyraMapHeatmapZoomValue; opacity?: number }`, where `LyraMapHeatmapZoomValue` is a
|
|
22644
|
+
scalar number or bounded `[zoom, value][]` stops,
|
|
22520
22645
|
configures it. `weightField` weights each point by a feature property, and `weightRange` maps that
|
|
22521
22646
|
property's own units onto the 0–1 weight MapLibre expects — without it the raw value is passed
|
|
22522
22647
|
through, which saturates the surface for any quantity above ~1; with neither, every point weighs 1.
|
|
@@ -22530,10 +22655,14 @@ weightRange?: [number, number]; stops?: [number, string][]; radius?: number; int
|
|
|
22530
22655
|
describes a flat colour rather than a gradient; that one — like an unset or wholly unusable
|
|
22531
22656
|
`stops` — falls back to the built-in ramp, which runs transparent → `--lr-color-brand` →
|
|
22532
22657
|
`--lr-color-success` → `--lr-color-warning` → `--lr-color-danger`, so a retheme moves the density
|
|
22533
|
-
surface with everything else. `radius`
|
|
22534
|
-
|
|
22535
|
-
|
|
22536
|
-
|
|
22658
|
+
surface with everything else. Scalar `radius` (default 30) and `intensity` (default 1) preserve
|
|
22659
|
+
their established behavior. Two or more usable `[zoom, value]` stops emit linear zoom
|
|
22660
|
+
interpolation; stops are sorted, duplicate zooms removed, zoom clamped into `[0, 24]`, radius
|
|
22661
|
+
into `[1, 200]`, and intensity into `[0, 100]`. One usable stop becomes a scalar and an unusable
|
|
22662
|
+
array falls back to the existing default. `opacity` is clamped into `[0, 1]`; omission leaves the
|
|
22663
|
+
peer's default untouched on construction, and dropping a previously-authored value restores 1.
|
|
22664
|
+
`cluster` is ignored on a heatmap entry: a heatmap already aggregates density, and clustering its
|
|
22665
|
+
input would feed it one point per cluster instead of the real distribution.
|
|
22537
22666
|
- `maxBounds: LyraMapBounds | null = null` (attribute: false) — box the map may not pan outside,
|
|
22538
22667
|
`[[west, south], [east, north]]`. Prefer it over calling `map.setMaxBounds()` through the `.map`
|
|
22539
22668
|
escape hatch: constraining the camera can wedge maplibre-gl at a sub-1 fractional zoom in a wide
|
|
@@ -22545,14 +22674,15 @@ weightRange?: [number, number]; stops?: [number, string][]; radius?: number; int
|
|
|
22545
22674
|
|
|
22546
22675
|
**Choropleth and `dataLayers` updates are diffed before they reach the peer.** `setData()`
|
|
22547
22676
|
unconditionally re-tiles and repaints an entire source, which is invisible on a static map and
|
|
22548
|
-
expensive on an animated one. When
|
|
22549
|
-
|
|
22550
|
-
|
|
22551
|
-
|
|
22552
|
-
|
|
22553
|
-
|
|
22554
|
-
|
|
22555
|
-
`setData()` with no change in behaviour. Peers
|
|
22677
|
+
expensive on an animated one. When every feature has a unique `string`/`number` `id` and retained
|
|
22678
|
+
features keep semantically unchanged geometry/bbox values, the component emits MapLibre's
|
|
22679
|
+
incremental `updateData()` for property changes, additions, removals, and order changes. The exact
|
|
22680
|
+
next order is preserved: an unchanged prefix stays in place and only the invalidated suffix is
|
|
22681
|
+
removed and re-added. Lyra's immutable ownership boundary detaches GeoJSON assignments, so geometry
|
|
22682
|
+
reference identity cannot survive between frames; a bounded, accessor-free comparison verifies the
|
|
22683
|
+
JSON geometry graph instead. A missing/duplicate ID, changed geometry, exceeded bound, or uncertain
|
|
22684
|
+
comparison falls back to `setData()` with no change in rendered behaviour. Peers without
|
|
22685
|
+
`updateData()` always take the old path.
|
|
22556
22686
|
|
|
22557
22687
|
**Feature properties are tiled, and therefore bounded in numeric magnitude.** MapLibre GL tiles
|
|
22558
22688
|
every GeoJSON source through a worker into a protobuf vector tile, so a property carrying a huge
|
|
@@ -22572,7 +22702,8 @@ payload beside the map.
|
|
|
22572
22702
|
|
|
22573
22703
|
**Authoring types:** `LyraMapLegendEntry`, `LyraMapLegendPattern`, `LyraMapLegendProjection`, `LyraMapChoroplethLayer`,
|
|
22574
22704
|
`LyraMapGeoJsonDataLayer`, `LyraMapDataLayerKind`, `LyraMapClusterOptions`, `LyraMapHeatmapOptions`,
|
|
22575
|
-
`
|
|
22705
|
+
`LyraMapHeatmapZoomValue`, `LyraMapMarker`, `LyraMapMarkerActivationDetail`,
|
|
22706
|
+
`LyraMapMarkerActivationSource`, `LyraMapStyleSpecification`, and `LyraMapInstance`.
|
|
22576
22707
|
The former `LegendEntry`, `ChoroplethLayer`, `GeoJsonDataLayer`, and `MapMarker` names are removed
|
|
22577
22708
|
in v9 rather than retained as aliases.
|
|
22578
22709
|
|
|
@@ -22587,7 +22718,10 @@ shared `maplibre-gl` import without constructing a map or allocating a WebGL con
|
|
|
22587
22718
|
`false` when the peer is unavailable, allowing an application to choose a fallback before connecting
|
|
22588
22719
|
an element.
|
|
22589
22720
|
|
|
22590
|
-
**Events:** `lr-map-load` (fired once, after the underlying map's own `'load'`),
|
|
22721
|
+
**Events:** `lr-map-load` (fired once, after the underlying map's own `'load'`),
|
|
22722
|
+
`lr-map-marker-activate` (non-cancelable; frozen `LyraMapMarkerActivationDetail { id, lngLat,
|
|
22723
|
+
marker, source }`; `id` is the trimmed explicit identity or `undefined`, `marker` is the accepted
|
|
22724
|
+
declarative snapshot, and `source` is `'pointer' | 'keyboard'`), and `lr-map-click`
|
|
22591
22725
|
(frozen `detail: { readonly lngLat: readonly [lng, lat], readonly feature?, readonly origin?,
|
|
22592
22726
|
readonly sourceId? }`; the tuple and any hit GeoJSON feature are detached and recursively frozen).
|
|
22593
22727
|
`feature` resolves against the choropleth fill layer **and** every applied `dataLayers`
|
|
@@ -22665,6 +22799,10 @@ Vite with v6:
|
|
|
22665
22799
|
{ color: "#0969da", label: "High", pattern: "diagonal" },
|
|
22666
22800
|
];
|
|
22667
22801
|
m.markers = [{ lngLat: [2.29, 48.86], label: "Eiffel Tower" }];
|
|
22802
|
+
m.renderWorldCopies = false;
|
|
22803
|
+
m.addEventListener("lr-map-marker-activate", (e) =>
|
|
22804
|
+
console.log(e.detail.id, e.detail.lngLat)
|
|
22805
|
+
);
|
|
22668
22806
|
m.addEventListener("lr-map-click", (e) =>
|
|
22669
22807
|
console.log(e.detail.feature?.properties)
|
|
22670
22808
|
);
|
|
@@ -22681,8 +22819,9 @@ https://maplibre.org/maplibre-gl-js/docs/#esm.
|
|
|
22681
22819
|
created peer instance, renders only the localized initialization failure, and can retry after a
|
|
22682
22820
|
new style or reconnect without an unhandled promise rejection. Capability probes and error
|
|
22683
22821
|
constructors come from the current owner document, including after same-origin adoption.
|
|
22684
|
-
-
|
|
22685
|
-
|
|
22822
|
+
- Every marker handles Enter and Space as button activation. Space suppresses the page-scroll
|
|
22823
|
+
default whether or not a popup exists; when one does, MapLibre still receives its own popup
|
|
22824
|
+
toggle and the component emits exactly one `lr-map-marker-activate` notification.
|
|
22686
22825
|
- clearing or swapping the choropleth no longer leaks the old layer: setting `choropleth =
|
|
22687
22826
|
undefined`, or changing `choropleth.sourceId` to a different value, now calls `removeLayer`/
|
|
22688
22827
|
`removeSource` on whatever was previously applied before adding the new one (or nothing, if
|
|
@@ -22727,6 +22866,10 @@ undefined`, or changing `choropleth.sourceId` to a different value, now calls `r
|
|
|
22727
22866
|
`lr-map-load` never fires until the element is actually scrolled into view. Deliberate: caps
|
|
22728
22867
|
concurrent WebGL contexts when many `<lr-map>`s sit in one dashboard/grid. Skipped entirely
|
|
22729
22868
|
(constructs immediately once the peer loads) when `IntersectionObserver` itself is unavailable.
|
|
22869
|
+
- Once constructed, the owner realm's `ResizeObserver` watches the rendered map container and calls
|
|
22870
|
+
the current peer's `resize()` on allocation changes. It is replaced on reconnect/adoption and
|
|
22871
|
+
disconnected before peer teardown, so a stale delivery cannot resize a removed map. Browsers
|
|
22872
|
+
without `ResizeObserver` retain MapLibre's own window-resize behavior.
|
|
22730
22873
|
|
|
22731
22874
|
---
|
|
22732
22875
|
|
|
@@ -24766,6 +24909,8 @@ These named interfaces and helper signatures are available to typed integrations
|
|
|
24766
24909
|
- **`components-media-map-map-loader-contracts`** — Supporting data types and helpers for this component family.
|
|
24767
24910
|
`loadMaplibre(): unknown`
|
|
24768
24911
|
`MapLibreGeoJsonDiff {
|
|
24912
|
+
remove: unknown;
|
|
24913
|
+
add: unknown;
|
|
24769
24914
|
update: unknown;
|
|
24770
24915
|
id: unknown;
|
|
24771
24916
|
addOrUpdateProperties: unknown;
|
|
@@ -24883,6 +25028,7 @@ These named interfaces and helper signatures are available to typed integrations
|
|
|
24883
25028
|
stops: unknown;
|
|
24884
25029
|
radius: unknown;
|
|
24885
25030
|
intensity: unknown;
|
|
25031
|
+
opacity: unknown;
|
|
24886
25032
|
}`
|
|
24887
25033
|
`LyraMapInstance {
|
|
24888
25034
|
getCanvas: unknown;
|
|
@@ -24916,6 +25062,12 @@ These named interfaces and helper signatures are available to typed integrations
|
|
|
24916
25062
|
color: unknown;
|
|
24917
25063
|
label: unknown;
|
|
24918
25064
|
unsafeHtml: unknown;
|
|
25065
|
+
}`
|
|
25066
|
+
`LyraMapMarkerActivationDetail {
|
|
25067
|
+
id: unknown;
|
|
25068
|
+
lngLat: unknown;
|
|
25069
|
+
marker: unknown;
|
|
25070
|
+
source: unknown;
|
|
24919
25071
|
}`
|
|
24920
25072
|
`LyraMapStyleSpecification {
|
|
24921
25073
|
version: unknown;
|
|
@@ -25507,13 +25659,16 @@ passthrough). Not a subclass of `LyraChart`.
|
|
|
25507
25659
|
- `barWidth: number = 32` (attribute `bar-width`, px) — each bar's fixed width in `layout="scroll"`
|
|
25508
25660
|
mode; ignored in the default `'fit'` mode. An excessive value is reduced as needed by the
|
|
25509
25661
|
1,000,000px scroll-content ceiling.
|
|
25510
|
-
- `maxLabels?: number` (attribute `max-labels
|
|
25511
|
-
actually render *text
|
|
25512
|
-
|
|
25513
|
-
|
|
25514
|
-
|
|
25515
|
-
|
|
25516
|
-
|
|
25662
|
+
- `maxLabels?: number | 'auto'` (attribute `max-labels`) — decimates which category axis labels
|
|
25663
|
+
actually render *text*: always shows the first and last label and roughly evenly distributes the
|
|
25664
|
+
rest between them. A number is authoritative. `'auto'` derives the cap after each resize from the
|
|
25665
|
+
resolved plot width and widest rendered caller label, using the same deterministic 7px-per-
|
|
25666
|
+
character estimate as label ellipsis plus 10px of lane breathing room. It therefore responds to
|
|
25667
|
+
either `layout` mode without DOM text measurement or browser-specific font metrics. Unset (the
|
|
25668
|
+
default) renders every label, unchanged. Each rendered category label is allocation-aware:
|
|
25669
|
+
narrow/long text is ellipsized before paint, with the complete caller label retained as its
|
|
25670
|
+
accessible name. Independently, the global 1,000-record safety sampler may bound both marks and
|
|
25671
|
+
labels for very large category×series input.
|
|
25517
25672
|
- `barX?: (index: number) => number` (attribute: false, bar type only) — overrides the internal
|
|
25518
25673
|
per-category x-origin formula (`plotX + i * slot`) used by both bars and their axis labels, so a
|
|
25519
25674
|
consumer can pixel-align this chart's bars with a sibling `<lr-heatmap>` calendar's week columns
|
|
@@ -25535,7 +25690,16 @@ passthrough). Not a subclass of `LyraChart`.
|
|
|
25535
25690
|
- `skipZero: boolean = false` (attribute `skip-zero`, bar type only) — omits a bar entirely (no
|
|
25536
25691
|
mark/tabindex/tooltip) for a value that is exactly `0`; `null`/non-finite values are always
|
|
25537
25692
|
skipped regardless.
|
|
25538
|
-
- `valueAxisGutter?: number` (attribute `value-axis-gutter`) — value-axis gutter width
|
|
25693
|
+
- `valueAxisGutter?: number | 'auto'` (attribute `value-axis-gutter`) — value-axis gutter width in
|
|
25694
|
+
CSS px. A finite number is authoritative (clamped to 0…1,000,000px as before). `'auto'` sizes the
|
|
25695
|
+
gutter from the exact value-tick strings rendered in that pass — `formatter` output first, then
|
|
25696
|
+
`tickFormat`, then the component's `effectiveLocale` number formatting — using the deterministic
|
|
25697
|
+
7px-per-character estimate plus 14px for the tick offset and font-width variance. Automatic
|
|
25698
|
+
sizing never shrinks below the legacy 36px default. In `layout="fit"` it is bounded to the smaller
|
|
25699
|
+
of 240px or 40% of the measured SVG width, so a pathological formatter result cannot consume the
|
|
25700
|
+
plot. In `layout="scroll"` the cap is 240px: that SVG has an explicit content width, so deriving a
|
|
25701
|
+
percentage cap from its own ResizeObserver result would create a shrinking feedback loop. The
|
|
25702
|
+
gutter remains at logical start under RTL. Unset keeps exactly 36px.
|
|
25539
25703
|
- `barGapRatio?: number` (attribute `bar-gap-ratio`) — overrides the internal 0.2 `BAR_GROUP_GAP`
|
|
25540
25704
|
fraction of a category slot left as a gap between categories. Unset keeps the fixed 0.2.
|
|
25541
25705
|
- `scale: 'linear' | 'sqrt' | 'logarithmic' = 'linear'` — `'sqrt'` (**bar type only**) maps a bar's
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aceshooting/lyra-ui",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.1.1",
|
|
4
4
|
"description": "Free, independent Lit web components: an open-source alternative to Shoelace and Web Awesome with accessible forms, dashboards, charts, and agent UI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
@@ -2396,7 +2396,6 @@
|
|
|
2396
2396
|
"@lit-labs/ssr": "^4.1.0",
|
|
2397
2397
|
"@open-wc/testing": "^5.0.0",
|
|
2398
2398
|
"@sgratzl/chartjs-chart-boxplot": "^4.4.5",
|
|
2399
|
-
"@sinonjs/fake-timers": "^15.4.0",
|
|
2400
2399
|
"@types/d3-drag": "^3.0.7",
|
|
2401
2400
|
"@types/d3-force": "^3.0.10",
|
|
2402
2401
|
"@types/d3-selection": "^3.0.11",
|
|
@@ -2405,7 +2404,6 @@
|
|
|
2405
2404
|
"@types/papaparse": "^5.5.2",
|
|
2406
2405
|
"@types/qrcode": "^1.5.6",
|
|
2407
2406
|
"@types/react": "^19.2.18",
|
|
2408
|
-
"@types/sinonjs__fake-timers": "^15.0.1",
|
|
2409
2407
|
"@web/dev-server-esbuild": "^2.0.0",
|
|
2410
2408
|
"@web/test-runner": "^1.0.0",
|
|
2411
2409
|
"@web/test-runner-commands": "^1.0.1",
|
|
@@ -2524,7 +2522,7 @@
|
|
|
2524
2522
|
"test:default-string-slices": "node scripts/generate-default-string-slices.test.mjs",
|
|
2525
2523
|
"check:default-strings": "node scripts/check-default-strings.mjs",
|
|
2526
2524
|
"test:default-strings": "node scripts/check-default-strings.test.mjs",
|
|
2527
|
-
"test:tooling": "node scripts/build-llms.test.mjs && node --test scripts/create-component.test.mjs && node --test scripts/full-engine-shard.test.mjs && node --test scripts/web-test-runner-config.test.mjs && node scripts/component-families.test.mjs && node scripts/maplibre-peer-range.test.mjs && node scripts/migrate-wa.test.mjs && node scripts/visual-regression-compare.test.mjs && node --test scripts/visual-regression-shard.test.mjs && node scripts/visual-regression-config.test.mjs && node --test scripts/check-source-policy.test.mjs scripts/check-test-assertions.test.mjs && node scripts/bundle-budgets.test.mjs && node scripts/compact-build-js.test.mjs && node --test scripts/normalize-mixin-declarations.test.mjs && node --test scripts/check-palette-freshness.test.mjs && node scripts/manifest-compact.test.mjs && node --test scripts/viewer-fixture-generators.test.mjs && node --test scripts/strip-css-comments.test.mjs && node scripts/editor-web-types.test.mjs",
|
|
2525
|
+
"test:tooling": "node scripts/build-llms.test.mjs && node --test scripts/create-component.test.mjs && node --test scripts/full-engine-shard.test.mjs && node --test scripts/coverage-shard-runner.test.mjs && node --test scripts/lint-ci-shard.test.mjs && node --test scripts/web-test-runner-config.test.mjs && node scripts/component-families.test.mjs && node scripts/maplibre-peer-range.test.mjs && node scripts/migrate-wa.test.mjs && node scripts/visual-regression-compare.test.mjs && node --test scripts/visual-regression-shard.test.mjs && node scripts/visual-regression-config.test.mjs && node --test scripts/check-source-policy.test.mjs scripts/check-test-assertions.test.mjs && node scripts/bundle-budgets.test.mjs && node scripts/compact-build-js.test.mjs && node --test scripts/normalize-mixin-declarations.test.mjs && node --test scripts/check-palette-freshness.test.mjs && node scripts/manifest-compact.test.mjs && node --test scripts/viewer-fixture-generators.test.mjs && node --test scripts/strip-css-comments.test.mjs && node scripts/editor-web-types.test.mjs",
|
|
2528
2526
|
"framework-types": "node scripts/generate-framework-types.mjs",
|
|
2529
2527
|
"check:framework-types": "node scripts/check-framework-types.mjs",
|
|
2530
2528
|
"test:framework-types": "node scripts/generate-framework-types.test.mjs",
|
|
@@ -2559,6 +2557,7 @@
|
|
|
2559
2557
|
"migrate-wa": "node scripts/migrate-wa.mjs",
|
|
2560
2558
|
"test:migrate-wa": "node scripts/migrate-wa.test.mjs",
|
|
2561
2559
|
"contract-policy": "pnpm run check:script-paths && pnpm run test:script-paths && pnpm run check:package-exports && pnpm run test:package-exports && pnpm run check:doc-specifiers && pnpm run test:doc-specifiers && pnpm run check:package-metadata && pnpm run test:package-metadata && pnpm run test:public-api && pnpm run style-policy && pnpm run check:source-policy && pnpm run check:lifecycle-super && pnpm run test:lifecycle-super && pnpm run check:test-assertions && pnpm run check:part-reachability && pnpm run test:part-reachability && pnpm run provenance-policy && pnpm run contract-checklist && node scripts/check-component-coverage.mjs && node scripts/check-migration-coverage.mjs && node scripts/check-token-references.mjs && node scripts/check-contrast.mjs && pnpm run manifest:check && pnpm run manifest:coverage && pnpm run check:framework-types && pnpm run test:framework-types && pnpm run llms-freshness && pnpm run llms:check && pnpm run check:component-inventory && pnpm run test:component-inventory && pnpm run test:pinned-upstream-manifests && pnpm run check:component-metadata && pnpm run test:component-metadata && pnpm run check:autoloader-manifest && pnpm run test:autoloader-manifest && pnpm run check:tag-aliases && pnpm run test:tag-aliases && pnpm run test:architecture && pnpm run check-side-effects && pnpm run test:side-effects && pnpm run check:form-associated && pnpm run check:component-dependencies && pnpm run test:component-dependencies && pnpm run check:composed-child-contracts && pnpm run test:composed-child-contracts && pnpm run check:component-quality && pnpm run test:package-size && pnpm run check:qualification && pnpm run test:qualification && pnpm run check:event-barrel && pnpm run check:event-contracts && pnpm run test:event-contracts && pnpm run check:event-types && pnpm run check:collection-event-ownership && pnpm run check:cycles && pnpm run check:interaction-states && pnpm run test:interaction-states && pnpm run check:value-named-tokens && pnpm run check:design-tokens && pnpm run test:design-tokens && pnpm run check:hit-area && pnpm run test:hit-area && pnpm run check:numeric-guards && pnpm run check:palette-freshness && pnpm run check:default-string-slices && pnpm run test:default-string-slices && pnpm run check:default-strings && pnpm run check:translations && pnpm run test:translation-reviews && pnpm run check:style-vocabulary && pnpm run test:style-vocabulary && pnpm run test:default-strings && pnpm run test:tooling && pnpm run check:llms-root-barrel && pnpm run test:llms-root-barrel && pnpm run test:llms-gaps",
|
|
2560
|
+
"lint:ci-shard": "node scripts/lint-ci-shard.mjs",
|
|
2562
2561
|
"lint": "pnpm run contract-policy && tsc --noEmit -p tsconfig.json && pnpm run test:types",
|
|
2563
2562
|
"check:translations": "node scripts/check-translations.mjs",
|
|
2564
2563
|
"test:translation-reviews": "node scripts/translation-review.test.mjs",
|
package/vscode-css-data.json
CHANGED
|
@@ -13329,6 +13329,27 @@
|
|
|
13329
13329
|
"value": "**`<lr-timeline-item>`** (default: `var(--lr-timeline-marker-color)`) — Static outline color for the current/in-progress marker. The outline remains visible when reduced motion disables the optional pulse animation."
|
|
13330
13330
|
}
|
|
13331
13331
|
},
|
|
13332
|
+
{
|
|
13333
|
+
"name": "--lr-timeline-cluster-bg",
|
|
13334
|
+
"description": {
|
|
13335
|
+
"kind": "markdown",
|
|
13336
|
+
"value": "**`<lr-timeline>`, `<lr-timeline-item>`** (default: `var(--lr-color-brand)`) — Cluster count pill background."
|
|
13337
|
+
}
|
|
13338
|
+
},
|
|
13339
|
+
{
|
|
13340
|
+
"name": "--lr-timeline-cluster-color",
|
|
13341
|
+
"description": {
|
|
13342
|
+
"kind": "markdown",
|
|
13343
|
+
"value": "**`<lr-timeline>`, `<lr-timeline-item>`** (default: `var(--lr-color-on-brand)`) — Cluster count pill foreground."
|
|
13344
|
+
}
|
|
13345
|
+
},
|
|
13346
|
+
{
|
|
13347
|
+
"name": "--lr-timeline-cluster-size",
|
|
13348
|
+
"description": {
|
|
13349
|
+
"kind": "markdown",
|
|
13350
|
+
"value": "**`<lr-timeline>`** (default: `var(--lr-size-2rem)`) — Minimum inline and block size of the painted count pill. Its containing button retains the shared 40px minimum action surface.\n\n**`<lr-timeline-item>`** (default: `var(--lr-size-2rem)`) — Minimum inline and block size of the painted cluster count pill. Its containing button retains the shared 40px minimum action surface."
|
|
13351
|
+
}
|
|
13352
|
+
},
|
|
13332
13353
|
{
|
|
13333
13354
|
"name": "--lr-timeline-collision-offset",
|
|
13334
13355
|
"description": {
|