@aceshooting/lyra-ui 11.2.0 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +407 -0
- package/README.md +11 -8
- package/custom-elements.json +1 -1
- package/dist/all.d.ts +1 -0
- package/dist/all.js +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/chart.class.d.ts +13 -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/funnel/funnel.class.d.ts +92 -0
- package/dist/components/data/funnel/funnel.class.js +25 -0
- package/dist/components/data/funnel/funnel.d.ts +1 -0
- package/dist/components/data/funnel/funnel.js +1 -0
- package/dist/components/data/funnel/funnel.styles.d.ts +1 -0
- package/dist/components/data/funnel/funnel.styles.js +127 -0
- 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 +199 -14
- package/dist/components/data/heatmap/heatmap.class.js +30 -22
- package/dist/components/data/heatmap/heatmap.styles.js +36 -0
- package/dist/components/data/index.d.ts +1 -0
- package/dist/components/data/index.js +1 -1
- 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.d.ts +23 -0
- 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/app-rail/app-rail-item.class.d.ts +16 -0
- package/dist/components/layout/app-rail/app-rail-item.class.js +4 -4
- 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.d.ts +32 -3
- package/dist/components/layout/filter-bar/filter-bar.class.js +2 -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/layout/widget/widget.class.d.ts +16 -0
- package/dist/components/layout/widget/widget.class.js +2 -2
- package/dist/components/lr-funnel.d.ts +1 -0
- package/dist/components/lr-funnel.js +1 -0
- 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/flag/flag-peer-bulk-standard.d.ts +25 -0
- package/dist/components/media/flag/flag-peer-bulk-standard.js +1 -0
- package/dist/components/media/flag/flag.class.d.ts +8 -0
- package/dist/components/media/flag/flag.class.js +1 -1
- package/dist/components/media/map/map-loader.d.ts +4 -1
- package/dist/components/media/map/map.class.d.ts +242 -23
- package/dist/components/media/map/map.class.js +2 -2
- package/dist/components/overlays/chip/chip-group.class.d.ts +16 -0
- package/dist/components/overlays/chip/chip-group.class.js +10 -3
- 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 +16 -8
- 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/autoloader-manifest.js +1 -1
- package/dist/internal/autoloader-tags.d.ts +1 -1
- package/dist/internal/autoloader-tags.js +1 -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 +7 -14
- 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/root-registration-allowlist.d.ts +1 -1
- package/dist/internal/root-registration-allowlist.js +1 -1
- package/dist/internal/text-quote.d.ts +1 -1
- package/dist/lyra.d.ts +5 -4
- package/dist/lyra.js +1 -1
- package/dist/ssr/all.d.ts +1 -0
- package/dist/ssr/all.js +1 -1
- package/dist/ssr.d.ts +4 -4
- package/dist/styles/tokens-root.css +488 -0
- package/dist/svelte.d.ts +17 -8
- 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 +16 -8
- package/llms/components/lr-app-rail-item.md +8 -1
- package/llms/components/lr-app-rail.md +6 -0
- package/llms/components/lr-chip-group.md +7 -0
- package/llms/components/lr-chip.md +7 -0
- package/llms/components/lr-combobox.md +42 -0
- package/llms/components/lr-date-input.md +19 -1
- package/llms/components/lr-date-picker.md +19 -1
- package/llms/components/lr-filter-bar.md +50 -1
- package/llms/components/lr-flag.md +14 -0
- package/llms/components/lr-funnel.md +122 -0
- package/llms/components/lr-heatmap.md +55 -8
- package/llms/components/lr-lite-chart.md +20 -8
- package/llms/components/lr-map.md +109 -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/components/lr-widget.md +7 -1
- package/llms/index.md +3 -2
- package/llms/peers.md +1 -1
- package/llms/shared.md +110 -1
- package/llms-full.txt +681 -67
- package/llms.txt +1 -1
- package/package.json +26 -8
- package/vscode-css-data.json +63 -0
- package/vscode-html-data.json +108 -23
- package/web-types.json +32738 -310
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,412 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 12.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 6504adc: Expand `lr-map` with zoom-responsive heatmap radius and intensity, heatmap opacity,
|
|
8
|
+
construction-time world-copy control, allocation-aware resizing, and accessible declarative marker
|
|
9
|
+
activation events.
|
|
10
|
+
- 81dbb6a: Add opt-in automatic value-axis gutter sizing and category-label density to `lr-lite-chart`.
|
|
11
|
+
- acf4c5f: Avoid redundant `lr-heatmap` redraws for unchanged legend snapshots, and keep stable-ID `lr-map`
|
|
12
|
+
GeoJSON additions, removals, and order changes on MapLibre's incremental update path.
|
|
13
|
+
- 5e801f9: Add an opt-in `scroll-mode="auto"` to `lr-table` that keeps page flow while content fits and contains horizontal overflow when the table narrows.
|
|
14
|
+
- 12b4791: Add opt-in collision clustering to time-scaled timelines, with allocation-aware accessible count markers and a typed member activation event.
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- b36d915: Defer anchored-positioning and form-label runtime paths until they are needed, keeping granular
|
|
19
|
+
popover and combobox registrations lighter and documenting first-interaction progressive loading
|
|
20
|
+
for strict initial-JavaScript budgets.
|
|
21
|
+
|
|
22
|
+
## 12.0.0
|
|
23
|
+
|
|
24
|
+
### Major Changes
|
|
25
|
+
|
|
26
|
+
- bd0f05f: **Breaking:** `LyraElement` no longer declares the static `getPropertyDescriptor()`, so that member
|
|
27
|
+
is gone from every element's public surface in `custom-elements.json`.
|
|
28
|
+
|
|
29
|
+
This is the release's only substantive breaking change, and in practice nothing consumer-callable
|
|
30
|
+
was removed: `getPropertyDescriptor()` is Lit's own finalization hook, called *by* `ReactiveElement`
|
|
31
|
+
during `finalize()` and never by application code. It appeared on all 285 tags purely because this
|
|
32
|
+
library overrode it, and the manifest projects an inherited static onto every subclass. Only code
|
|
33
|
+
that subclassed an `lr-*` element and overrode the hook itself is affected — a path Lit has already
|
|
34
|
+
deprecated and states will not be called under standard decorators.
|
|
35
|
+
|
|
36
|
+
The major is nonetheless correct rather than pedantic. By this package's own definition of public
|
|
37
|
+
surface, a public static was removed from every element, and the reachable-declaration set of every
|
|
38
|
+
export shrank as a result. The semver gate reports that honestly, and the alternative — shipping it
|
|
39
|
+
as a minor behind a blanket exception — would have meant weakening the gate to let one change past
|
|
40
|
+
it.
|
|
41
|
+
|
|
42
|
+
`@lit/reactive-element` 2.1.2 deprecates that hook and warns during `finalize()`, so every consumer
|
|
43
|
+
saw an unactionable dev-mode warning on every page load that mounted any `lr-*` element, not
|
|
44
|
+
silenceable without disabling Lit's dev warnings wholesale.
|
|
45
|
+
|
|
46
|
+
The more important half was invisible. That override was what implemented the documented
|
|
47
|
+
clone-owned/bounded/frozen collection contract on 182 enrolled property names across 87 modules
|
|
48
|
+
(`colorSteps`, `legendStops`, `annotations` and their equivalents): it wrapped every reactive setter
|
|
49
|
+
and routed owned values through the snapshot helpers. It worked only because the published dist
|
|
50
|
+
ships experimental decorators, which still call the hook. Lit states plainly that standard
|
|
51
|
+
decorators will not — so a migration, or a consumer build applying them, would have silently
|
|
52
|
+
reverted every one of those properties to storing the caller's live array by reference. No clone, no
|
|
53
|
+
freeze, no error, no warning, and no test would have caught it.
|
|
54
|
+
|
|
55
|
+
The contract now rides a decorator-agnostic seam that re-defines the already-finished prototype
|
|
56
|
+
accessor. Legacy `@property`, standard `accessor`/setter decorators, a `static properties` block and
|
|
57
|
+
hand-written getter/setter pairs all end in a prototype accessor by finalization, so this walks the
|
|
58
|
+
finished accessor rather than the hook Lit refuses to call. It installs from the finalization
|
|
59
|
+
trigger Lit itself documents, and registration strictly precedes every instance — constructing an
|
|
60
|
+
unregistered custom element throws — so no assignment can reach an unwrapped setter.
|
|
61
|
+
|
|
62
|
+
`finalize()` was deliberately not hooked: that would add a static method to the class surface, which
|
|
63
|
+
the component inventory records per component and a pinned-manifest gate grades. The chosen seam
|
|
64
|
+
changes no static surface at all.
|
|
65
|
+
|
|
66
|
+
**No migration is expected.** If you do not override `getPropertyDescriptor()` on an `lr-*`
|
|
67
|
+
subclass, there is nothing to do.
|
|
68
|
+
|
|
69
|
+
### Minor Changes
|
|
70
|
+
|
|
71
|
+
- 103922d: `<lr-chip-group>` gained `accessibleLabel` (attribute `aria-label`) and now renders
|
|
72
|
+
`role="group"` on `[part='base']` whenever a name is supplied.
|
|
73
|
+
|
|
74
|
+
A chip group is a group, and every peer grouping primitive in this library already said so —
|
|
75
|
+
`<lr-radio-group>` renders `role="radiogroup"`, `<lr-segmented>` the same, each forwarding a host
|
|
76
|
+
`aria-label` inward to the element that owns the role. `<lr-chip-group>` rendered a roleless
|
|
77
|
+
container and read no accessible name at all. Because a host `aria-label` does not cross a shadow
|
|
78
|
+
boundary, a consumer labelling the host named nothing: the chips were announced as unrelated
|
|
79
|
+
toggle buttons with no indication of what set they belonged to.
|
|
80
|
+
|
|
81
|
+
This surfaced from a real multi-select filter row, where the consumer had to hand-write
|
|
82
|
+
`role="group" aria-label="…"` onto the host to get a named group. That workaround is the evidence
|
|
83
|
+
the capability was wanted and was reachable only by reaching around the component.
|
|
84
|
+
|
|
85
|
+
The role is applied only *with* a name, deliberately. An unnamed group role adds verbosity without
|
|
86
|
+
adding information, and applying it unconditionally would change the accessibility tree of every
|
|
87
|
+
decorative chip row already shipped. An explicit unset-regression test pins that.
|
|
88
|
+
- bd0f05f: Completed the date-preset story across the three components that share it.
|
|
89
|
+
|
|
90
|
+
`<lr-date-input>` now mirrors the nested picker's `appliedPreset` as a read-only getter. 11.0.0 added
|
|
91
|
+
`presets` to `<lr-date-picker>`; 11.1.0 then separately forwarded `presets` to `<lr-date-input>` and
|
|
92
|
+
added `appliedPreset` to the picker — but never joined the two halves, so the readback landed on the
|
|
93
|
+
component that does not need it and the component that does could set presets and not read the
|
|
94
|
+
result. `appliedPreset`'s own documentation describes the dashboard time filter ("'Last 7 days' must
|
|
95
|
+
still mean the last 7 days after tomorrow's reload"), and that shape is the compact
|
|
96
|
+
text-field-plus-popover input, not the inline calendar.
|
|
97
|
+
|
|
98
|
+
There was no workaround. The nested picker lives in the input's shadow root with no documented
|
|
99
|
+
readback path: `input`/`change` are deliberately native events and carry no detail, and every
|
|
100
|
+
alternative the docs already reject applied — matching `value` back against the preset list is "the
|
|
101
|
+
mapping table `presets` exists to delete" and is ambiguous (Today and This month coincide on the
|
|
102
|
+
1st), while reaching for `[part='preset-button'][data-active]` depends on private structure and on
|
|
103
|
+
the popover having been opened at least once.
|
|
104
|
+
|
|
105
|
+
The mirror is the input's own field rather than a shadow-root lookup, so it is correct (`undefined`)
|
|
106
|
+
when the popover has never been opened. It carries both halves of the picker's contract — set before
|
|
107
|
+
`commit()`, so a consumer reading it inside their own `change` handler sees the causing preset, and
|
|
108
|
+
cleared on a hand-pick — plus three clear paths the picker cannot see because typing, clearing and
|
|
109
|
+
resetting never reach it: a typed commit that actually changes the value (deliberately not a no-op
|
|
110
|
+
re-commit, which would otherwise silently drop the preset), `clear()`, and `formResetCallback()`.
|
|
111
|
+
|
|
112
|
+
`<lr-filter-bar>` can now pass `presets` on its `date-range` filter and reports the resolved preset
|
|
113
|
+
on the `lr-input` detail as `appliedPreset`. The bar already composed `<lr-date-input>` and already
|
|
114
|
+
forwarded that control's `min`/`max`, but had no path at all for `presets` — so the quick-range row
|
|
115
|
+
and the component built for the same dashboard shape could not be combined. `type: 'custom'` was a
|
|
116
|
+
poor substitute: hand-rendering the control plus a full adapter to set one property, and forfeiting
|
|
117
|
+
the built-in date-range chip localization the docs themselves flag as non-trivial.
|
|
118
|
+
|
|
119
|
+
`presets` is declared on the `date-range` definition only, not the shared base: a preset names two
|
|
120
|
+
dates and the picker ignores the list outside range mode, so putting it on `'date'` would type-check
|
|
121
|
+
a guaranteed-inert field.
|
|
122
|
+
- bd0f05f: `<lr-heatmap>` gained `sticky-labels` (`'none' | 'rows' | 'cols' | 'both'`, default `'none'`), which
|
|
123
|
+
paints the matrix label bands into their own layers instead of into the scrolling bitmap.
|
|
124
|
+
|
|
125
|
+
Matrix labels shared one canvas with the cells, so a tall grid lost its column header on scroll: a
|
|
126
|
+
160-row matrix at cell-size 32 is about 5,100px of bitmap, and a header baked into it cannot be
|
|
127
|
+
`position: sticky` on its own. The only workaround was a light-DOM mirror row, which had to follow
|
|
128
|
+
the gutter width and cell size — and before `matrixGeometry` shipped it had to hardcode them, which
|
|
129
|
+
made the workaround mutually exclusive with `row-label-width="auto"`: a consumer got the automatic
|
|
130
|
+
fit or the sticky header, never both. (Scale on why the gutter matters: against the component's own
|
|
131
|
+
10px label font, 160 country names ellipsized 37 times in the built-in 60px gutter and 3 times in a
|
|
132
|
+
120px one.)
|
|
133
|
+
|
|
134
|
+
A closed set rather than a boolean, because a boolean cannot express one axis at all and a later
|
|
135
|
+
one-axis need would force either a second property or a breaking type change; and rather than a
|
|
136
|
+
`sticky-row-labels`/`sticky-col-labels` pair, which is two attributes and four states for one
|
|
137
|
+
concept with no single reflected value to select on in CSS. `rows`/`cols` name the axes this
|
|
138
|
+
component already names everywhere else (`rowLabels`, `row-label-width`, `colLabels`,
|
|
139
|
+
`col-label-height`), which `freeze-axis="x|y"` would have clashed with.
|
|
140
|
+
|
|
141
|
+
Default `'none'` reproduces today's single-canvas output exactly, including in calendar mode, and an
|
|
142
|
+
unrecognized value normalizes back to `'none'` and repairs the attribute.
|
|
143
|
+
- bd0f05f: New component `<lr-funnel>`: a conversion funnel — an ordered set of stages, each drawn as a bar
|
|
144
|
+
whose length is that stage's share of the FIRST stage, read top-to-bottom as progressive drop-off.
|
|
145
|
+
|
|
146
|
+
Nothing in the catalogue expressed this. A funnel is not a sorted bar chart: it normalizes to the
|
|
147
|
+
first stage rather than the data maximum, its value axis carries no information worth drawing, and it
|
|
148
|
+
is read as stage-to-stage retention rather than category comparison. Reaching one through
|
|
149
|
+
`lr-bar-chart` meant switching off axes, grid and legend, hand-computing every percentage, and still
|
|
150
|
+
pulling the Chart.js peers for what is a handful of rectangles. `lr-span-waterfall` encodes time
|
|
151
|
+
offset, not share; `lr-flow-canvas` draws a graph, not a quantitative comparison; `lr-stepper` and
|
|
152
|
+
`lr-progress-bar` express position or completion, not per-stage magnitude.
|
|
153
|
+
|
|
154
|
+
It lives in the `data` family beside `lr-heatmap` and `lr-gauge` as an analytics primitive, and pulls
|
|
155
|
+
no peer at all.
|
|
156
|
+
|
|
157
|
+
Each stage carries both its absolute value and its share, because the interesting question is usually
|
|
158
|
+
the percentage but the credibility check is the count. `comparison` draws a second series behind each
|
|
159
|
+
bar, normalized to ITS OWN first stage, so a cohort's funnel *shape* can be read against a baseline
|
|
160
|
+
whose absolute volumes are not comparable — comparing one entity against a many-entity peer group is
|
|
161
|
+
the common case, and per-series normalization is what makes it legible. `dropoff` (on by default)
|
|
162
|
+
renders the consecutive-stage change.
|
|
163
|
+
|
|
164
|
+
The chart is plain HTML — an ordered list of stages with real text and a percentage-width bar — so
|
|
165
|
+
the accessible representation *is* the chart rather than a transcript bolted onto a sighted-only
|
|
166
|
+
drawing.
|
|
167
|
+
|
|
168
|
+
Degenerate cases are defined and tested rather than left to chance: an empty series renders a
|
|
169
|
+
localized empty state, a single stage renders one bar and no drop-off, a zero or negative first stage
|
|
170
|
+
suppresses shares instead of dividing by it, a stage larger than its predecessor (real in funnels
|
|
171
|
+
with re-entry) is not clamped, and a comparison series of a different length is matched by position.
|
|
172
|
+
- bd0f05f: `<lr-map>`'s `dataLayers` gained declarative marker clustering and a heatmap layer kind. Both are
|
|
173
|
+
strictly additive — today's behaviour is the default in each.
|
|
174
|
+
|
|
175
|
+
`cluster?: { radius?, maxZoom?, radiusSteps?, colorSteps?, countFont? }` opts an entry into
|
|
176
|
+
MapLibre's native clustering: the source gains `cluster`/`clusterRadius`/`clusterMaxZoom` and the
|
|
177
|
+
entry emits a cluster circle layer, a count symbol layer, and a circle layer for points that stayed
|
|
178
|
+
unclustered. `markers` creates one `maplibregl.Marker` per entry, which is right for tens of pins and
|
|
179
|
+
wrong for thousands — a consumer rendering up to 5,000 listings in a country-sized viewport got 5,000
|
|
180
|
+
DOM nodes and an unreadable map. `radiusSteps`/`colorSteps` are `['step', …]` breaks on `point_count`
|
|
181
|
+
in the same ascending `[value, output]` vocabulary `choropleth.stops` already uses, including the
|
|
182
|
+
same "the first stop's output is also the base" rule.
|
|
183
|
+
|
|
184
|
+
`kind?: 'auto' | 'heatmap'` plus `heatmap?: { weightField?, weightRange?, stops?, radius?, intensity? }`
|
|
185
|
+
reaches MapLibre's first-class `heatmap` layer type. `dataLayers` emitted exactly three
|
|
186
|
+
geometry-filtered layers — fill, line and circle — so a weighted-point density surface was
|
|
187
|
+
unreachable declaratively even though the peer implements it. The colour ramp reuses the same
|
|
188
|
+
`[value, color]` stop vocabulary `choropleth.stops` and `legendGradient` share.
|
|
189
|
+
|
|
190
|
+
Between them these were the only remaining reason for raw MapLibre in at least one consumer, which
|
|
191
|
+
carried roughly 212 lines behind the `.map` escape hatch — plus a `style.load` listener and
|
|
192
|
+
idempotent remove-then-add, because a basemap swap wipes every layer and `<lr-map>` restored only its
|
|
193
|
+
own. Both new renderings join the component's existing re-application path, so a `mapStyle` swap
|
|
194
|
+
restores them too.
|
|
195
|
+
- bd0f05f: New opt-in stylesheet `@aceshooting/lyra-ui/tokens-root.css` publishes a curated subset of the
|
|
196
|
+
resolved `--lr-*` layer at document scope, so an application's own custom elements can read the
|
|
197
|
+
kit's tokens.
|
|
198
|
+
|
|
199
|
+
`theme.css` ships the `--lr-theme-*` INPUT layer at `:root`, but the resolved OUTPUT layer
|
|
200
|
+
(`--lr-color-*`, `--lr-space-*`, `--lr-radius`, `--lr-shadow-*`, `--lr-font-*`) is declared only
|
|
201
|
+
inside each `lr-*` component's own shadow `:host`. An app's own elements are not descendants of any
|
|
202
|
+
`lr-*` host, so nothing inherits it to them. Consumers measured the consequence in Chromium rather
|
|
203
|
+
than inferring it: at document scope `--lr-color-brand`, `--lr-color-border` and `--lr-focus-ring`
|
|
204
|
+
all resolve to the empty string while `--lr-theme-focus-ring-width` resolves fine. One project found
|
|
205
|
+
550 `var(--lr-*)` references in its own components reading nothing — 358 with no fallback at all,
|
|
206
|
+
the rest silently running on a literal fallback that never tracked the theme. Neither failure is
|
|
207
|
+
detectable without reading computed styles in a browser, because an undefined custom property is not
|
|
208
|
+
an error.
|
|
209
|
+
|
|
210
|
+
The subset is curated rather than complete, deliberately: `--lr-*` is documented as the internal
|
|
211
|
+
output layer precisely so it can change without a major, and publishing all of it would make several
|
|
212
|
+
hundred names permanent public API. 114 names are in — ambient surfaces/text/borders, the semantic
|
|
213
|
+
colour grid and its flat aliases, the spacing scale, radii, border widths, elevation, font sizes and
|
|
214
|
+
weights, the focus-ring parts, and the base motion pair — each with a stated reason in the file, as
|
|
215
|
+
is each deliberate omission.
|
|
216
|
+
|
|
217
|
+
It is generated from the same canonical token source as everything else, so it cannot drift, and a
|
|
218
|
+
fail-closed validator in the existing `check:design-tokens` gate rejects a curated token whose value
|
|
219
|
+
reaches an internal name the file does not declare — the case that would otherwise ship an empty
|
|
220
|
+
`var()` at `:root`. Ramp references resolve to literals at generation time and stay behind their
|
|
221
|
+
`--lr-theme-*` input, so the file is self-sufficient without `theme.css`, still fully rethemable,
|
|
222
|
+
publishes no ramp names, and computes byte-identical values to what a component reaches through the
|
|
223
|
+
ramp.
|
|
224
|
+
|
|
225
|
+
Opt-in, and layered in `lr-theme` like `theme.css`, so it changes nothing for anyone who does not
|
|
226
|
+
import it and an app's own unlayered rules still win.
|
|
227
|
+
- bd0f05f: `web-types.json` now carries `js.properties`, `js.events` and `slots` alongside its attributes.
|
|
228
|
+
|
|
229
|
+
It previously declared attributes and nothing else: 0 of 284 tags had properties, events or slots,
|
|
230
|
+
while `custom-elements.json` in the same tarball described 1,029 events, 3,102 public fields and 445
|
|
231
|
+
slots. 865 of those fields are `attribute: false` and were therefore invisible to JetBrains
|
|
232
|
+
completion entirely — and they are frequently the primary API rather than an edge case
|
|
233
|
+
(`lr-chart.datasets`, `.labels`, `.config`, `lr-heatmap.legendStops`, `.colorSteps`, `.cellColor`,
|
|
234
|
+
`lr-lite-chart.datasets`).
|
|
235
|
+
|
|
236
|
+
That gap mattered more here than it would for a typical component library: these are Lit components,
|
|
237
|
+
so the idiomatic usage is `.prop=${…}` and `@event=${…}` in a template, not attributes. The shipped
|
|
238
|
+
metadata covered the minority binding style and omitted the majority.
|
|
239
|
+
|
|
240
|
+
The web-types schema the file already declared supports all three directly, and the data was already
|
|
241
|
+
generated for the manifest, so this was a projection gap rather than missing information. It now
|
|
242
|
+
emits every public instance field with its type and default, every declared event with its
|
|
243
|
+
`CustomEvent<…Detail>` handler type, and every slot. Static fields and methods are deliberately
|
|
244
|
+
excluded (a `.formAssociated=` completion would be wrong, and web-types has no IDE-integrated method
|
|
245
|
+
kind).
|
|
246
|
+
|
|
247
|
+
The sibling `vscode-html-data.json` stays attributes-only, which is correct: the VS Code custom-data
|
|
248
|
+
format defines no properties/events/slots concept.
|
|
249
|
+
|
|
250
|
+
### Patch Changes
|
|
251
|
+
|
|
252
|
+
- 103922d: Documented that `<lr-chart>`'s `description` **replaces** the generated accessible summary rather
|
|
253
|
+
than adding to it.
|
|
254
|
+
|
|
255
|
+
Unset, the component builds an sr-only per-series summary from the actual data; set, it discards
|
|
256
|
+
that summary entirely and substitutes the supplied text. That is the right behaviour for a full
|
|
257
|
+
override, but the property was documented only as "Accessible chart description", which reads as
|
|
258
|
+
additive — and a consumer adding a one-line caveat to five charts would have silently traded away
|
|
259
|
+
the data summary on all five. They caught it by reading the source, and applied it only where the
|
|
260
|
+
trade was actually wanted.
|
|
261
|
+
|
|
262
|
+
No behaviour change; the JSDoc and the family reference now state the trade and point at the better
|
|
263
|
+
tool for a caveat, which is visible text beside the chart rather than a note only screen-reader
|
|
264
|
+
users hear.
|
|
265
|
+
- 2a156eb: Added the missing package-export route for
|
|
266
|
+
`@aceshooting/lyra-ui/components/media/flag/flag-peer-bulk.js`. 11.2.0 led with that module as the
|
|
267
|
+
opt-in bulk peer-registration entry point for `<lr-flag>`, and `llms/components/lr-flag.md` and
|
|
268
|
+
`flag.class.d.ts` both told readers to import it — but it was never listed in `package.json`'s
|
|
269
|
+
`exports`, and an exports map blocks everything it does not list. Following the documentation was a
|
|
270
|
+
hard build error (`"…/flag-peer-bulk.js" is not exported under the conditions […]`), so the
|
|
271
|
+
release's headline `<lr-flag>` feature was unreachable by any consumer.
|
|
272
|
+
|
|
273
|
+
The derivation that exists to prevent exactly this — every `*-loader.ts` / `*-peer.ts` /
|
|
274
|
+
`*-register.ts` / `registry.ts` module must be explicitly classified as public or internal — missed
|
|
275
|
+
it because a *qualified* suffix (`-peer-bulk`) is not the bare suffix (`-peer`). The convention now
|
|
276
|
+
accepts qualified variants; across the whole source tree that widening catches this file and
|
|
277
|
+
nothing else.
|
|
278
|
+
|
|
279
|
+
A second, independent instance surfaced in the same sweep and is fixed too:
|
|
280
|
+
`@aceshooting/lyra-ui/components/data/flow-canvas/flow-types.js` is shown as an import in
|
|
281
|
+
`llms/data.md` and in the generated `llms/components/lr-flow-canvas.md`, and was likewise
|
|
282
|
+
unlisted. (Those types were still reachable through `flow-canvas.class.js`, so this adds the route
|
|
283
|
+
the docs already named rather than any new surface.)
|
|
284
|
+
|
|
285
|
+
Both were promises made in documentation, which no naming convention over the source tree can see.
|
|
286
|
+
So a new release gate, `check:doc-specifiers`, now reads the promises instead: every
|
|
287
|
+
`@aceshooting/lyra-ui/…` specifier a shipped file tells a reader to import must resolve through the
|
|
288
|
+
exports map. It understands prose instructions as well as fenced code examples — the
|
|
289
|
+
`flag-peer-bulk.js` promise was a sentence, not a code block.
|
|
290
|
+
- 8084d04: Added `flag-peer-bulk.js` (and the new `flag-peer-bulk-standard.js`) to `package.json`'s
|
|
291
|
+
`sideEffects` list.
|
|
292
|
+
|
|
293
|
+
These modules exist purely for their import-time side effect: a consumer writes a bare
|
|
294
|
+
`import '…/flag-peer-bulk.js'` and never reads an export, so a bundler honouring `sideEffects` drops
|
|
295
|
+
the module outright unless it is declared. The generator that derives these entries matched the bare
|
|
296
|
+
suffix `-peer.ts` but not the qualified `-peer-bulk.ts` — the same blind spot that left the module
|
|
297
|
+
out of the `exports` map.
|
|
298
|
+
|
|
299
|
+
This half failed more quietly than that one. The missing export route was a hard build error; a
|
|
300
|
+
missing `sideEffects` entry compiles cleanly and then simply does nothing in a production build, so
|
|
301
|
+
`<lr-flag>` would fall back to no resolver with no diagnostic at all.
|
|
302
|
+
- bd0f05f: `<lr-flag>` now distinguishes a peer that is not installed from one that is installed but does not
|
|
303
|
+
carry the capability the chosen entry point needs.
|
|
304
|
+
|
|
305
|
+
Both cases previously produced the same warning — "install it with `pnpm add
|
|
306
|
+
@aceshooting/lyra-flags`" — which is advice a reader in the second case has already followed, and
|
|
307
|
+
which sends them looking for the wrong problem entirely.
|
|
308
|
+
|
|
309
|
+
That case stops being exotic from this release on. `flag-peer-bulk-standard.js` requires
|
|
310
|
+
`createFlagUrlResolver()` on the tier-committed `./standard` subpath, which older peers do not
|
|
311
|
+
export at all, so a consumer who upgrades `@aceshooting/lyra-ui` while pinning
|
|
312
|
+
`@aceshooting/lyra-flags` reaches it by the ordinary route. The peer-range floor moves in the same
|
|
313
|
+
release to make that a resolution warning rather than a silent one, and this makes the runtime
|
|
314
|
+
message match: it now says the package is present, that this is a version mismatch, and where to
|
|
315
|
+
look for the floor it expects.
|
|
316
|
+
- 2a156eb: `<lr-heatmap>`'s `matrixGeometry` now returns the geometry the last matrix-mode draw actually
|
|
317
|
+
painted with, instead of recomputing from current layout on every read.
|
|
318
|
+
|
|
319
|
+
It is documented as "the gutter/cell geometry the last matrix-mode draw actually painted with", and
|
|
320
|
+
11.2.0's notes claimed it "can never disagree" with the canvas because it reuses the same internal
|
|
321
|
+
getters `drawMatrix()` calls. Reusing those getters is precisely what made it disagree: they read
|
|
322
|
+
*current* layout, not the last paint, so any interval where layout has moved but no draw has
|
|
323
|
+
happened made the getter describe a canvas that does not exist. Two such intervals are routine —
|
|
324
|
+
full redraws pause while the host is outside the viewport (documented behaviour of this component),
|
|
325
|
+
and `rowLabelWidth`/`colLabelHeight` are not redraw-triggering properties at all, so assigning one
|
|
326
|
+
moved the getter *permanently* ahead of the canvas rather than for a transient window.
|
|
327
|
+
|
|
328
|
+
That landed squarely on the use case the property was added for: a light-DOM sticky-header mirror
|
|
329
|
+
for a tall matrix — i.e. exactly the component most likely to be scrolled out of view. A mirror
|
|
330
|
+
synced from the getter while the grid was off-screen lined up with geometry the canvas was not
|
|
331
|
+
using, which is the same misalignment the property exists to eliminate. It also silently disagreed
|
|
332
|
+
with `lr-matrix-geometry-change`, which fires only from the draw path and was always correct.
|
|
333
|
+
|
|
334
|
+
The getter now returns the frozen object the draw stored and the event carried, so the two are
|
|
335
|
+
equal by construction. The returned object is frozen, so a consumer cannot corrupt the component's
|
|
336
|
+
own change detection by mutating it.
|
|
337
|
+
- 2a156eb: Fixed two defects in `<lr-map>`'s `maxBounds`, reported together because the first was the only
|
|
338
|
+
thing hiding the second.
|
|
339
|
+
|
|
340
|
+
`maxBounds` never reached maplibre-gl when set declaratively. It is `attribute: false`, so a
|
|
341
|
+
property binding is the only way to set it, which puts its one and only appearance in `changed` on
|
|
342
|
+
the first update — before the component's asynchronous peer import and WebGL initialization have
|
|
343
|
+
produced a map. The `updated()` guard `changed.has('maxBounds') && this._map` therefore
|
|
344
|
+
short-circuited, and because the property never changed again it was never retried: a documented
|
|
345
|
+
property that read back as set, did nothing, permanently, and warned about none of it. It is now
|
|
346
|
+
applied from the map-ready path as well, so a declaratively-set box reaches the peer; a later
|
|
347
|
+
reassignment still goes through `updated()` as before.
|
|
348
|
+
|
|
349
|
+
The property's guard also could not run in the case it was written for. It applies the bounds and
|
|
350
|
+
then reads the camera back to detect a non-finite zoom — but at the conditions its own warning text
|
|
351
|
+
names (sub-1 fractional zooms in wide containers) maplibre-gl 6.x throws synchronously out of
|
|
352
|
+
`setMaxBounds()` instead, so the readback line was never reached. With no `try`/`catch` the
|
|
353
|
+
exception escaped `updated()` into the consumer's render cycle, degenerating into repeated throws
|
|
354
|
+
from the peer's own matrix math on every later `resize`/`setZoom` and a canvas that never painted
|
|
355
|
+
again. A throw now routes into the same drop-the-constraint-and-restore-the-camera path the
|
|
356
|
+
non-finite-camera branch already used, so the documented worst case — an unconstrained map plus one
|
|
357
|
+
dev-mode warning — is now the real worst case.
|
|
358
|
+
- 2a156eb: The release process now fails when the published upgrade feed lags npm.
|
|
359
|
+
|
|
360
|
+
The documented upgrade workflow tells consumers — and upgrading agents — to fetch
|
|
361
|
+
`https://www.lyra-ui.com/changelog.json` and read every release between their installed version and
|
|
362
|
+
its `latest`. That feed is built from this package's `CHANGELOG.md` by the sibling website and
|
|
363
|
+
deployed separately, after the release, so between `npm publish` and that deploy it advertises the
|
|
364
|
+
*previous* release as current.
|
|
365
|
+
|
|
366
|
+
Consumers reported that window twice, from two different projects, on two consecutive releases: the
|
|
367
|
+
site said 11.0.0 while npm had 11.1.0, then 11.1.0 while npm had 11.2.0. It fails silently and it
|
|
368
|
+
inverts the workflow's own advice — a reader who trusts the feed concludes they are already current
|
|
369
|
+
and never reads the new release. One release skipped that way contained a fix the reader was
|
|
370
|
+
waiting for. Both reporters caught it only by reading the installed tarball's `CHANGELOG.md`
|
|
371
|
+
instead, which is what the workflow tells them they should not have to do.
|
|
372
|
+
|
|
373
|
+
`release-integrity.mjs verify-site-freshness` now checks npm's dist-tag, the published feed's
|
|
374
|
+
`latest`, the presence of the new version in its `releases` array (it went missing entirely once,
|
|
375
|
+
which defeats even a reader who ignores `latest`), and the component catalog's `catalog_version` —
|
|
376
|
+
which rides the same deploy and was caught a release behind at the same time. The release script
|
|
377
|
+
waits on it, so a stale feed is now a loud, actionable release failure rather than something a
|
|
378
|
+
consumer discovers weeks later.
|
|
379
|
+
|
|
380
|
+
No published component surface changes.
|
|
381
|
+
- 8084d04: Restored two public property names that were renamed with no alias, no changelog entry and no
|
|
382
|
+
deprecation record, silently breaking shipped consumers.
|
|
383
|
+
|
|
384
|
+
- `<lr-app-rail-item>`: `active` is back as a deprecated alias for `current`, read alongside it —
|
|
385
|
+
the item is current when either is true, in both property and attribute form.
|
|
386
|
+
- `<lr-widget>`: `activeView` is back as a deprecated alias for `activeViewId`, which it seeds.
|
|
387
|
+
|
|
388
|
+
Both were the members' *original* public names. `active` shipped documented as public API ("add an
|
|
389
|
+
`active` property that reflects `aria-current="page"` onto the item"), and a later release's notes
|
|
390
|
+
still described it as `active` after the rename had already happened. `activeView` never appears in
|
|
391
|
+
`CHANGELOG.md` at all, so its rename was never announced in any form.
|
|
392
|
+
|
|
393
|
+
The breakage was invisible by construction: a Lit `.prop=${…}` binding on a custom element is
|
|
394
|
+
untyped, so `.active=${…}` and `.activeView=${…}` did not error — they became dead expandos. No
|
|
395
|
+
consumer type check, test suite or build step could see it. One consumer's app rail consequently
|
|
396
|
+
had no current-item indicator and a permanent `aria-current="false"` — an accessibility regression
|
|
397
|
+
— and its widgets fell back to their first view, with everything still passing.
|
|
398
|
+
|
|
399
|
+
This is what the house rule about mirrored members already required in general: a rename adds a
|
|
400
|
+
second name, it does not swap one out from under shipped consumers. The compatibility window runs
|
|
401
|
+
long (`removalNotBefore` two majors out) because these aliases are not new API — they are the names
|
|
402
|
+
consumers already wrote.
|
|
403
|
+
|
|
404
|
+
`activeView` seeds rather than being read alongside, because unlike a boolean flag it is a property
|
|
405
|
+
the component itself writes (a view-toggle click, and the fallback when `views` no longer contains
|
|
406
|
+
the active id); a read-alongside alias would undo a later interactive change on the next update.
|
|
407
|
+
- Updated dependencies [bd0f05f]
|
|
408
|
+
- @aceshooting/lyra-flags@2.2.0
|
|
409
|
+
|
|
3
410
|
## 11.2.0
|
|
4
411
|
|
|
5
412
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
**Lyra UI — the free, independent web-component alternative.** A MIT-licensed [Lit](https://lit.dev)
|
|
28
28
|
library for accessible forms, dashboards, charts, data visualization, and Conversation & Agent UI.
|
|
29
29
|
It is a practical open-source alternative to [Shoelace](https://shoelace.style/) and
|
|
30
|
-
[Web Awesome](https://webawesome.com/), with
|
|
30
|
+
[Web Awesome](https://webawesome.com/), with 285 custom elements, native custom-element APIs,
|
|
31
31
|
tree-shakeable imports, its own `--lr-*` design tokens, built-in localization and RTL support,
|
|
32
32
|
and no runtime dependency on either project.
|
|
33
33
|
|
|
@@ -892,12 +892,14 @@ them — typically in a workspace `.vscode/settings.json` so the whole team pick
|
|
|
892
892
|
```
|
|
893
893
|
|
|
894
894
|
Both settings accept an array, so add these alongside any other custom-data files the workspace
|
|
895
|
-
already references. WebStorm/IntelliJ users get the
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
895
|
+
already references. WebStorm/IntelliJ users get more from the bundled `web-types.json`, with no
|
|
896
|
+
extra configuration once the package is installed: tag, attribute, JS property (`.prop=${…}`), DOM
|
|
897
|
+
event (`@lr-event=${…}`), slot and custom-property completion. The property and event contributions
|
|
898
|
+
matter most here — these are Lit components, so the idiomatic binding style is `.prop=`/`@event=`
|
|
899
|
+
rather than attributes, and 865 public members are declared `attribute: false` and reachable no other
|
|
900
|
+
way. The VS Code custom-data format defines no properties/events/slots concept, so in
|
|
901
|
+
`vscode-html-data.json` those names remain reference prose in each tag's hover description. CSS-part
|
|
902
|
+
names are prose in both files.
|
|
901
903
|
|
|
902
904
|
Build tools can import the published manifest directly through its explicit package export:
|
|
903
905
|
|
|
@@ -914,7 +916,7 @@ resolved `web-types.json`/`vscode-html-data.json` above instead.
|
|
|
914
916
|
|
|
915
917
|
## Components
|
|
916
918
|
|
|
917
|
-
The catalog below lists all
|
|
919
|
+
The catalog below lists all 285 tags in the current Custom Elements Manifest, grouped by
|
|
918
920
|
capability. The manifest and live docs are the authoritative sources for the complete generated
|
|
919
921
|
API details.
|
|
920
922
|
|
|
@@ -995,6 +997,7 @@ API details.
|
|
|
995
997
|
| `<lr-time-range>` | — (extra) | Two-handle brush/scrubber over a numeric domain |
|
|
996
998
|
| `<lr-sequence-playback>` | — (extra) | Play/pause sequence index stepper over `itemCount`, with `currentIndex` and `lr-sequence-step` |
|
|
997
999
|
| `<lr-heatmap>` | — (extra) | DPR-aware Canvas heatmap with matrix and calendar (`mode="calendar"`) layouts, `fit-to-width` responsive scaling |
|
|
1000
|
+
| `<lr-funnel>` | — (extra) | Dependency-free conversion funnel: each stage a bar sized as its share of the FIRST stage, labelled with both its absolute value and its share, with per-stage drop-off and an optional comparison series normalized to its own first stage; plain HTML, so the accessible representation is the chart itself |
|
|
998
1001
|
| `<lr-sequence-strip>` | — (extra) | Compact, one-thin-cell-per-item strip visualizing a sequence of categorical states with an optional secondary per-cell marker — pure CSS/flex, no chart.js/SVG/canvas; a named roving `role="list"` whose `role="listitem"` cells are individually inspectable with Arrow/Home/End navigation but deliberately non-activating |
|
|
999
1002
|
| `<lr-graph>` | — (extra) | Force-directed node-link diagram with pan/zoom/drag, directed/styled relationship links, and rich accessible metadata — needs the optional peer deps `d3-force`, `d3-drag`, `d3-zoom`, `d3-selection` |
|
|
1000
1003
|
| `<lr-tree>` + `<lr-tree-item>` | `wa-tree` / `wa-tree-item` / `sl-tree` / `sl-tree-item` | Expand/collapse hierarchy with structured icon/label/description/badge rows, optional richer accessible labels, and APG tree keyboard navigation |
|