@adia-ai/web-components 0.8.39 → 0.8.41
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 +59 -0
- package/MIGRATION.md +1269 -3
- package/README.md +25 -30
- package/USAGE.md +26 -0
- package/bin/audit-template-children.mjs +556 -0
- package/components/accordion/accordion-item.a2ui.json +4 -0
- package/components/accordion/accordion-item.yaml +2 -0
- package/components/accordion/accordion.a2ui.json +4 -0
- package/components/accordion/accordion.yaml +2 -0
- package/components/action-list/action-item.a2ui.json +24 -2
- package/components/action-list/action-item.yaml +28 -3
- package/components/action-list/action-list.a2ui.json +6 -1
- package/components/action-list/action-list.class.js +52 -11
- package/components/action-list/action-list.css +43 -3
- package/components/action-list/action-list.d.ts +4 -2
- package/components/action-list/action-list.yaml +5 -0
- package/components/adia-mark/adia-mark.a2ui.json +1 -0
- package/components/adia-wordmark/adia-wordmark.a2ui.json +1 -0
- package/components/agent-artifact/agent-artifact.a2ui.json +1 -0
- package/components/agent-artifact/agent-artifact.css +1 -1
- package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +6 -5
- package/components/agent-feedback-bar/agent-feedback-bar.yaml +6 -2
- package/components/agent-questions/agent-questions.a2ui.json +1 -0
- package/components/agent-reasoning/agent-reasoning.a2ui.json +6 -5
- package/components/agent-reasoning/agent-reasoning.css +2 -2
- package/components/agent-reasoning/agent-reasoning.yaml +6 -2
- package/components/agent-suggestions/agent-suggestions.a2ui.json +11 -2
- package/components/agent-suggestions/agent-suggestions.class.js +2 -1
- package/components/agent-suggestions/agent-suggestions.d.ts +4 -4
- package/components/agent-suggestions/agent-suggestions.yaml +4 -2
- package/components/agent-trace/agent-trace.a2ui.json +6 -5
- package/components/agent-trace/agent-trace.css +3 -3
- package/components/agent-trace/agent-trace.yaml +6 -2
- package/components/alert/alert.a2ui.json +1 -0
- package/components/alert/alert.css +2 -2
- package/components/anchor-bar/anchor-bar.a2ui.json +1 -0
- package/components/aside/aside.a2ui.json +1 -0
- package/components/avatar/avatar-group.a2ui.json +7 -1
- package/components/avatar/avatar-group.yaml +1 -0
- package/components/avatar/avatar.a2ui.json +12 -11
- package/components/avatar/avatar.css +1 -1
- package/components/avatar/avatar.d.ts +1 -1
- package/components/avatar/avatar.yaml +4 -4
- package/components/badge/badge.a2ui.json +1 -0
- package/components/badge/badge.css +1 -1
- package/components/block/block.a2ui.json +1 -0
- package/components/blockquote/blockquote.a2ui.json +1 -0
- package/components/breadcrumb/breadcrumb.a2ui.json +1 -0
- package/components/button/button.a2ui.json +1 -3
- package/components/button/button.css +6 -5
- package/components/button/button.yaml +1 -3
- package/components/calendar-grid/calendar-grid.a2ui.json +1 -0
- package/components/calendar-grid/calendar-grid.class.js +2 -1
- package/components/calendar-picker/calendar-picker.a2ui.json +143 -24
- package/components/calendar-picker/calendar-picker.class.js +490 -197
- package/components/calendar-picker/calendar-picker.css +121 -172
- package/components/calendar-picker/calendar-picker.yaml +225 -47
- package/components/canvas/canvas.a2ui.json +6 -5
- package/components/canvas/canvas.d.ts +37 -0
- package/components/canvas/canvas.js +72 -3
- package/components/canvas/canvas.yaml +6 -2
- package/components/card/card.a2ui.json +25 -2
- package/components/card/card.class.js +3 -0
- package/components/card/card.css +34 -4
- package/components/card/card.d.ts +2 -2
- package/components/card/card.examples.md +3 -3
- package/components/card/card.yaml +28 -4
- package/components/chart/chart.a2ui.json +13 -8
- package/components/chart/chart.class.js +10 -10
- package/components/chart/chart.css +12 -10
- package/components/chart/chart.d.ts +2 -2
- package/components/chart/chart.yaml +8 -5
- package/components/chart-legend/chart-legend.a2ui.json +1 -0
- package/components/chat-thread/chat-input.a2ui.json +1 -0
- package/components/chat-thread/chat-thread.a2ui.json +10 -9
- package/components/chat-thread/chat-thread.css +1 -1
- package/components/chat-thread/chat-thread.yaml +13 -20
- package/components/check/check.a2ui.json +10 -9
- package/components/check/check.yaml +4 -4
- package/components/code/code.a2ui.json +1 -0
- package/components/code/code.css +6 -6
- package/components/col/col.a2ui.json +1 -0
- package/components/color-input/color-input.a2ui.json +1 -0
- package/components/color-picker/color-picker.a2ui.json +1 -0
- package/components/combobox/combobox.a2ui.json +3 -2
- package/components/combobox/combobox.css +2 -2
- package/components/combobox/combobox.yaml +2 -2
- package/components/command/command.a2ui.json +12 -10
- package/components/command/command.class.js +3 -2
- package/components/command/command.css +3 -3
- package/components/command/command.yaml +17 -4
- package/components/context-menu/context-menu.a2ui.json +1 -0
- package/components/date-range-picker/date-range-picker.a2ui.json +2 -1
- package/components/date-range-picker/date-range-picker.css +1 -1
- package/components/date-range-picker/date-range-picker.yaml +1 -1
- package/components/datetime-picker/datetime-picker.a2ui.json +15 -108
- package/components/datetime-picker/datetime-picker.class.js +37 -690
- package/components/datetime-picker/datetime-picker.css +11 -183
- package/components/datetime-picker/datetime-picker.d.ts +4 -5
- package/components/datetime-picker/datetime-picker.yaml +44 -135
- package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
- package/components/demo-toggle/demo-toggle.css +1 -1
- package/components/description-list/description-list.a2ui.json +1 -0
- package/components/description-list/description-list.css +2 -2
- package/components/display-field/display-field.a2ui.json +1 -0
- package/components/display-field/display-field.css +3 -3
- package/components/divider/divider.a2ui.json +1 -0
- package/components/divider/divider.css +1 -1
- package/components/drawer/drawer.a2ui.json +1 -3
- package/components/drawer/drawer.css +3 -3
- package/components/drawer/drawer.yaml +0 -2
- package/components/drilldown/drilldown.a2ui.json +22 -20
- package/components/drilldown/drilldown.class.js +4 -3
- package/components/drilldown/drilldown.css +8 -8
- package/components/drilldown/drilldown.yaml +40 -9
- package/components/embed/embed.a2ui.json +6 -5
- package/components/embed/embed.yaml +2 -2
- package/components/empty-state/empty-state.a2ui.json +1 -0
- package/components/empty-state/empty-state.css +2 -2
- package/components/feed/feed-item.a2ui.json +25 -5
- package/components/feed/feed-item.yaml +28 -7
- package/components/feed/feed.a2ui.json +9 -2
- package/components/feed/feed.class.js +19 -12
- package/components/feed/feed.css +8 -8
- package/components/feed/feed.yaml +14 -1
- package/components/field/field.a2ui.json +1 -0
- package/components/field/field.css +1 -1
- package/components/field/field.examples.md +1 -1
- package/components/fields/fields.a2ui.json +1 -0
- package/components/fields/fields.examples.md +1 -1
- package/components/footer/footer.a2ui.json +1 -0
- package/components/frame/frame.a2ui.json +1 -0
- package/components/grid/grid.a2ui.json +1 -0
- package/components/header/header.a2ui.json +3 -2
- package/components/header/header.yaml +3 -3
- package/components/heatmap/heatmap.a2ui.json +2 -1
- package/components/heatmap/heatmap.class.js +1 -1
- package/components/heatmap/heatmap.css +6 -6
- package/components/heatmap/heatmap.yaml +1 -1
- package/components/icon/icon.a2ui.json +1 -0
- package/components/image/image.a2ui.json +28 -14
- package/components/image/image.class.js +38 -23
- package/components/image/image.css +18 -8
- package/components/image/image.d.ts +2 -2
- package/components/image/image.examples.md +3 -3
- package/components/image/image.yaml +23 -7
- package/components/inline-edit/inline-edit.a2ui.json +1 -0
- package/components/inline-message/inline-message.a2ui.json +3 -1
- package/components/inline-message/inline-message.class.js +3 -1
- package/components/inline-message/inline-message.css +1 -1
- package/components/inline-message/inline-message.d.ts +2 -2
- package/components/inline-message/inline-message.yaml +2 -1
- package/components/input/input.a2ui.json +66 -16
- package/components/input/input.class.js +64 -7
- package/components/input/input.css +19 -18
- package/components/input/input.d.ts +9 -4
- package/components/input/input.yaml +83 -10
- package/components/inspector/inspector.a2ui.json +1 -0
- package/components/integration-card/integration-card.a2ui.json +1 -0
- package/components/integration-card/integration-card.css +4 -4
- package/components/kbd/kbd.a2ui.json +1 -0
- package/components/kbd/kbd.css +1 -1
- package/components/link/link.a2ui.json +2 -1
- package/components/link/link.yaml +1 -1
- package/components/list/list-item.a2ui.json +9 -0
- package/components/list/list-item.yaml +12 -0
- package/components/list/list.a2ui.json +9 -3
- package/components/list/list.class.js +14 -1
- package/components/list/list.css +14 -3
- package/components/list/list.d.ts +7 -5
- package/components/list/list.yaml +16 -6
- package/components/list-window/list-window.a2ui.json +1 -0
- package/components/list-window/list-window.class.js +2 -1
- package/components/loading-overlay/loading-overlay.a2ui.json +1 -0
- package/components/mark/mark.a2ui.json +2 -1
- package/components/mark/mark.yaml +1 -1
- package/components/menu/menu-divider.a2ui.json +1 -0
- package/components/menu/menu-item.a2ui.json +3 -1
- package/components/menu/menu-item.yaml +6 -0
- package/components/menu/menu-label.a2ui.json +1 -0
- package/components/menu/menu.a2ui.json +3 -2
- package/components/menu/menu.class.js +2 -2
- package/components/menu/menu.d.ts +2 -2
- package/components/menu/menu.yaml +3 -3
- package/components/modal/modal.a2ui.json +1 -0
- package/components/nav/nav.a2ui.json +1 -0
- package/components/nav/nav.class.js +14 -3
- package/components/nav/nav.css +2 -2
- package/components/nav-group/nav-group.a2ui.json +1 -0
- package/components/nav-group/nav-group.class.js +3 -1
- package/components/nav-group/nav-group.css +3 -3
- package/components/nav-item/nav-item.a2ui.json +1 -0
- package/components/nav-item/nav-item.css +2 -2
- package/components/noodles/noodles.a2ui.json +1 -0
- package/components/noodles/noodles.class.js +5 -1
- package/components/number-format/number-format.a2ui.json +1 -0
- package/components/option-card/option-card.a2ui.json +1 -0
- package/components/option-card/option-card.css +1 -1
- package/components/otp-input/otp-input.a2ui.json +3 -2
- package/components/otp-input/otp-input.css +1 -1
- package/components/otp-input/otp-input.yaml +9 -2
- package/components/page/page.a2ui.json +13 -0
- package/components/page/page.css +2 -2
- package/components/page/page.d.ts +1 -1
- package/components/page/page.yaml +1 -0
- package/components/pagination/pagination.a2ui.json +1 -0
- package/components/pagination/pagination.class.js +3 -2
- package/components/pagination/pagination.css +1 -1
- package/components/pane/pane.a2ui.json +6 -0
- package/components/pane/pane.class.js +3 -3
- package/components/pane/pane.css +3 -3
- package/components/pane/pane.yaml +3 -0
- package/components/password-strength/password-strength.a2ui.json +1 -0
- package/components/pipeline-status/pipeline-status.a2ui.json +1 -0
- package/components/popover/popover.a2ui.json +7 -6
- package/components/popover/popover.class.js +2 -2
- package/components/popover/popover.d.ts +2 -2
- package/components/popover/popover.yaml +4 -4
- package/components/preview/preview.a2ui.json +1 -0
- package/components/preview/preview.class.js +5 -1
- package/components/progress/progress.a2ui.json +47 -24
- package/components/progress/progress.class.js +66 -11
- package/components/progress/progress.css +44 -26
- package/components/progress/progress.d.ts +7 -5
- package/components/progress/progress.examples.md +2 -2
- package/components/progress/progress.yaml +235 -53
- package/components/progress-row/progress-row.a2ui.json +16 -12
- package/components/progress-row/progress-row.css +2 -2
- package/components/progress-row/progress-row.d.ts +2 -2
- package/components/progress-row/progress-row.examples.md +2 -14
- package/components/progress-row/progress-row.yaml +28 -36
- package/components/qr-code/qr-code.a2ui.json +13 -12
- package/components/qr-code/qr-code.class.js +7 -7
- package/components/qr-code/qr-code.css +1 -1
- package/components/qr-code/qr-code.d.ts +10 -7
- package/components/qr-code/qr-code.yaml +18 -12
- package/components/radio/radio.a2ui.json +8 -7
- package/components/radio/radio.class.js +8 -0
- package/components/radio/radio.yaml +3 -3
- package/components/radio-group/radio-group.a2ui.json +5 -3
- package/components/radio-group/radio-group.class.js +11 -0
- package/components/radio-group/radio-group.yaml +7 -1
- package/components/range/range.a2ui.json +6 -0
- package/components/range/range.class.js +2 -2
- package/components/range/range.css +3 -3
- package/components/range/range.yaml +3 -0
- package/components/rating/rating.a2ui.json +1 -0
- package/components/rating/rating.css +1 -1
- package/components/relative-time/relative-time.a2ui.json +1 -0
- package/components/richtext/richtext.a2ui.json +2 -1
- package/components/richtext/richtext.css +3 -3
- package/components/richtext/richtext.yaml +1 -1
- package/components/row/row.a2ui.json +1 -0
- package/components/search/search.a2ui.json +1 -0
- package/components/search/search.class.js +4 -1
- package/components/section/section.a2ui.json +1 -0
- package/components/segment/segment.a2ui.json +21 -10
- package/components/segment/segment.css +20 -4
- package/components/segment/segment.d.ts +2 -1
- package/components/segment/segment.yaml +20 -13
- package/components/segmented/segmented.a2ui.json +36 -7
- package/components/segmented/segmented.class.js +113 -22
- package/components/segmented/segmented.css +3 -0
- package/components/segmented/segmented.d.ts +3 -1
- package/components/segmented/segmented.yaml +80 -8
- package/components/select/select.a2ui.json +18 -13
- package/components/select/select.class.js +61 -37
- package/components/select/select.css +18 -16
- package/components/select/select.yaml +18 -7
- package/components/skeleton/skeleton.a2ui.json +8 -7
- package/components/skeleton/skeleton.class.js +8 -7
- package/components/skeleton/skeleton.css +21 -6
- package/components/skeleton/skeleton.d.ts +2 -2
- package/components/skeleton/skeleton.examples.md +2 -2
- package/components/skeleton/skeleton.yaml +3 -2
- package/components/skip-nav/skip-nav.a2ui.json +1 -0
- package/components/slider/slider.a2ui.json +6 -0
- package/components/slider/slider.class.js +20 -3
- package/components/slider/slider.css +2 -2
- package/components/slider/slider.yaml +3 -0
- package/components/spinner/spinner.a2ui.json +1 -0
- package/components/spinner/spinner.css +1 -1
- package/components/stack/stack.a2ui.json +1 -0
- package/components/stat/stat.a2ui.json +1 -0
- package/components/stat/stat.css +3 -3
- package/components/stat/stat.js +2 -2
- package/components/step-progress/step-progress.a2ui.json +1 -0
- package/components/step-progress/step-progress.css +1 -1
- package/components/step-progress/step-progress.yaml +1 -1
- package/components/stepper/stepper-item.a2ui.json +7 -3
- package/components/stepper/stepper-item.yaml +15 -5
- package/components/stepper/stepper.a2ui.json +5 -1
- package/components/stepper/stepper.class.js +31 -16
- package/components/stepper/stepper.css +2 -2
- package/components/stepper/stepper.d.ts +1 -1
- package/components/stepper/stepper.yaml +4 -2
- package/components/stream/stream.a2ui.json +1 -0
- package/components/swatch/swatch.a2ui.json +1 -0
- package/components/swatch/swatch.css +2 -2
- package/components/swiper/swiper.a2ui.json +1 -0
- package/components/swiper/swiper.class.js +5 -1
- package/components/switch/switch.a2ui.json +12 -11
- package/components/switch/switch.css +1 -1
- package/components/switch/switch.yaml +6 -6
- package/components/table/table.a2ui.json +1 -10
- package/components/table/table.class.js +18 -16
- package/components/table/table.css +17 -18
- package/components/table/table.d.ts +0 -2
- package/components/table/table.yaml +0 -9
- package/components/table-toolbar/table-toolbar.a2ui.json +1 -0
- package/components/table-toolbar/table-toolbar.class.js +38 -19
- package/components/table-toolbar/table-toolbar.css +2 -2
- package/components/tabs/tab.a2ui.json +9 -0
- package/components/tabs/tab.js +4 -0
- package/components/tabs/tab.yaml +15 -0
- package/components/tabs/tabs.a2ui.json +9 -4
- package/components/tabs/tabs.class.js +13 -1
- package/components/tabs/tabs.css +9 -1
- package/components/tabs/tabs.d.ts +2 -0
- package/components/tabs/tabs.yaml +9 -2
- package/components/tag/tag.a2ui.json +1 -0
- package/components/tag/tag.css +2 -2
- package/components/tags-input/tags-input.a2ui.json +22 -17
- package/components/tags-input/tags-input.class.js +13 -11
- package/components/tags-input/tags-input.css +11 -7
- package/components/tags-input/tags-input.d.ts +16 -7
- package/components/tags-input/tags-input.examples.md +2 -2
- package/components/tags-input/tags-input.yaml +25 -8
- package/components/text/text.a2ui.json +6 -5
- package/components/text/text.css +10 -5
- package/components/text/text.d.ts +2 -2
- package/components/text/text.yaml +9 -4
- package/components/textarea/textarea.a2ui.json +2 -1
- package/components/textarea/textarea.css +1 -1
- package/components/textarea/textarea.yaml +1 -1
- package/components/theme-provider/theme-provider.a2ui.json +2 -1
- package/components/theme-provider/theme-provider.d.ts +5 -3
- package/components/theme-provider/theme-provider.yaml +5 -3
- package/components/time-picker/time-picker.a2ui.json +1 -0
- package/components/time-picker/time-picker.class.js +4 -2
- package/components/time-picker/time-picker.css +1 -1
- package/components/timeline/timeline-item.a2ui.json +26 -3
- package/components/timeline/timeline-item.yaml +22 -7
- package/components/timeline/timeline.a2ui.json +4 -0
- package/components/timeline/timeline.class.js +29 -18
- package/components/timeline/timeline.css +4 -4
- package/components/timeline/timeline.d.ts +3 -3
- package/components/timeline/timeline.yaml +2 -0
- package/components/toast/toast.a2ui.json +10 -3
- package/components/toast/toast.yaml +20 -13
- package/components/toc/toc.a2ui.json +1 -0
- package/components/toc/toc.css +1 -1
- package/components/toggle-group/toggle-group.a2ui.json +7 -3
- package/components/toggle-group/toggle-group.class.js +43 -12
- package/components/toggle-group/toggle-group.css +7 -4
- package/components/toggle-group/toggle-group.d.ts +3 -4
- package/components/toggle-group/toggle-group.yaml +22 -16
- package/components/toggle-group/toggle-option.a2ui.json +8 -4
- package/components/toggle-group/toggle-option.yaml +15 -13
- package/components/toggle-scheme/toggle-scheme.a2ui.json +2 -1
- package/components/toggle-scheme/toggle-scheme.yaml +1 -1
- package/components/toolbar/toolbar-group.a2ui.json +1 -0
- package/components/toolbar/toolbar.a2ui.json +1 -0
- package/components/toolbar/toolbar.class.js +3 -0
- package/components/tooltip/tooltip.a2ui.json +1 -0
- package/components/tooltip/tooltip.css +1 -1
- package/components/tour/tour-step.a2ui.json +4 -0
- package/components/tour/tour-step.yaml +2 -0
- package/components/tour/tour.a2ui.json +4 -0
- package/components/tour/tour.css +2 -2
- package/components/tour/tour.yaml +2 -0
- package/components/tree/tree-item.a2ui.json +5 -0
- package/components/tree/tree-item.yaml +3 -0
- package/components/tree/tree.a2ui.json +4 -0
- package/components/tree/tree.class.js +2 -1
- package/components/tree/tree.css +1 -1
- package/components/tree/tree.yaml +2 -0
- package/components/upload/upload.a2ui.json +8 -1
- package/components/upload/upload.class.js +35 -5
- package/components/upload/upload.css +28 -0
- package/components/upload/upload.d.ts +16 -0
- package/components/upload/upload.yaml +27 -7
- package/components/visually-hidden/visually-hidden.a2ui.json +1 -0
- package/core/dom.d.ts +11 -0
- package/core/dom.js +34 -0
- package/core/form.js +7 -0
- package/core/index.d.ts +1 -0
- package/core/index.js +1 -0
- package/core/responsive.js +16 -4
- package/core/template.js +2 -1
- package/custom-elements.json +442 -502
- package/dist/host.min.css +1 -1
- package/dist/host.sheet.js +1 -1
- package/dist/theme-provider.min.js +5 -5
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +91 -104
- package/dist/web-components.sheet.js +1 -1
- package/package.json +4 -2
- package/patterns/conversion-funnel/conversion-funnel.examples.html +15 -15
- package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
- package/patterns/inline-dialog/inline-dialog.html +4 -0
- package/patterns/timezone-selector/timezone-selector.examples.html +1 -1
- package/patterns/timezone-selector/timezone-selector.html +2 -2
- package/styles/api/text.css +7 -0
- package/styles/type/scale.css +6 -7
- package/traits/_catalog.json +129 -41
- package/traits/anchor-positioning/anchor-positioning.js +1 -0
- package/traits/announcer/announcer.js +1 -0
- package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -0
- package/traits/attention-pulse/attention-pulse.js +1 -0
- package/traits/count-up/count-up.js +1 -0
- package/traits/define.js +78 -0
- package/traits/focus-restore/focus-restore.js +2 -1
- package/traits/haptic-feedback/haptic-feedback.js +1 -0
- package/traits/input-mask/input-mask.js +1 -0
- package/traits/intersection-observer/intersection-observer.js +1 -0
- package/traits/layout-animation/layout-animation.js +1 -0
- package/traits/noise-texture/noise-texture.js +1 -0
- package/traits/resize-observer/resize-observer.js +1 -0
- package/traits/scroll-progress/scroll-progress.js +1 -0
- package/traits/snap-to-grid/snap-to-grid.js +1 -0
- package/traits/sound-feedback/sound-feedback.js +1 -0
- package/traits/spring-animate/spring-animate.js +1 -0
- package/traits/validation/validation.js +1 -0
|
@@ -3,12 +3,19 @@
|
|
|
3
3
|
$schema: ../../../../scripts/schemas/component.yaml.schema.json
|
|
4
4
|
name: UIProgressRow
|
|
5
5
|
tag: progress-row-ui
|
|
6
|
-
status:
|
|
6
|
+
status: deprecated
|
|
7
7
|
component: ProgressRow
|
|
8
|
-
category:
|
|
8
|
+
category: feedback
|
|
9
9
|
version: 1
|
|
10
|
-
description:
|
|
11
|
-
|
|
10
|
+
description: >-
|
|
11
|
+
DEPRECATED (gh#1363 C4) — absorbed into <progress-ui>: set
|
|
12
|
+
`label` (and optional `meta`) directly on <progress-ui> instead, which
|
|
13
|
+
activates the identical row layout in place. progress-row-ui keeps
|
|
14
|
+
working (still composes <progress-ui> internally, unchanged behavior)
|
|
15
|
+
for existing back-compat markup, but is no longer taught or generated
|
|
16
|
+
for new work. Was: inline labeled progress row with label, progress
|
|
17
|
+
bar, and meta text — storage quotas, capacity breakdowns, usage
|
|
18
|
+
indicators.
|
|
12
19
|
# Per ADR-0027 — primitives that programmatically create other primitives
|
|
13
20
|
# do NOT auto-import them. Consumer (or demo shell) must explicitly import.
|
|
14
21
|
composes:
|
|
@@ -48,38 +55,23 @@ traits: []
|
|
|
48
55
|
tokens: {}
|
|
49
56
|
a2ui:
|
|
50
57
|
rules:
|
|
51
|
-
- rule: '
|
|
52
|
-
reason: '
|
|
53
|
-
- rule: 'For standalone progress bars without a row context use <progress-ui> directly.'
|
|
54
|
-
reason: 'Composition boundary.'
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "sec",
|
|
72
|
-
"component": "Section",
|
|
73
|
-
"children": [
|
|
74
|
-
"comp"
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"id": "comp",
|
|
79
|
-
"component": "ProgressRow",
|
|
80
|
-
"label": "Example ProgressRow"
|
|
81
|
-
}
|
|
82
|
-
]
|
|
58
|
+
- rule: 'DEPRECATED — do not generate ProgressRow. Set `label` (and optional `meta`) directly on <progress-ui> instead; label present activates the identical row layout.'
|
|
59
|
+
reason: 'Absorbed progress-row-ui''s row layout into progress-ui (gh#1363 C4); this component is now a back-compat alias only.'
|
|
60
|
+
- rule: 'For standalone progress bars without a row context use <progress-ui> directly (no `label`).'
|
|
61
|
+
reason: 'Composition boundary — unchanged by the absorption.'
|
|
62
|
+
anti_patterns:
|
|
63
|
+
- wrong: |
|
|
64
|
+
{"component": "ProgressRow", "label": "CPU", "value": 92}
|
|
65
|
+
why: |
|
|
66
|
+
ProgressRow is deprecated — its row layout was absorbed
|
|
67
|
+
into Progress directly.
|
|
68
|
+
fix: |
|
|
69
|
+
{"component": "Progress", "label": "CPU", "value": 92}
|
|
70
|
+
# Deliberately empty (gh#1363 C4) — deprecated components carry no
|
|
71
|
+
# A2UI examples: the catalog/corpus must never teach `"component":
|
|
72
|
+
# "ProgressRow"` as a generation target. See progress.yaml's own examples
|
|
73
|
+
# for the equivalent (and current) label+row shape.
|
|
74
|
+
examples: []
|
|
83
75
|
keywords:
|
|
84
76
|
- progressrow
|
|
85
77
|
- progress-row
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://adiaui.dev/a2ui/v0_9/components/QRCode.json",
|
|
4
4
|
"title": "QRCode",
|
|
5
|
-
"description": "Inline QR code generator — renders a scannable code as inline SVG.\nTwo modes:\n\n**A. Auto-encode (default).** Set `[value]` to a string (URL, plain\ntext, share link, 2FA secret). The component encodes the data with\nthe built-in zero-deps QR encoder (byte mode, ECC level configurable,\nversions 1–10 up to ~150 byte chars) and renders an SVG.\n\n**B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a\n2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the\nsupplied matrix directly without invoking its own encoder. Use this\nwhen you need versions 11–40, kanji/alphanumeric mode, or any\nencoder feature beyond the built-in. When both `[value]` and\n`[matrix]` are set, the matrix wins (BYO override).\n\nOutput is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges\nrendering preserves the scannable cell boundaries at any size.\nSizing is controlled by the `[size]` prop (host CSS-pixel dimension);\ninternal cell size is computed from `size / (matrix-size + 2 ·\
|
|
5
|
+
"description": "Inline QR code generator — renders a scannable code as inline SVG.\nTwo modes:\n\n**A. Auto-encode (default).** Set `[value]` to a string (URL, plain\ntext, share link, 2FA secret). The component encodes the data with\nthe built-in zero-deps QR encoder (byte mode, ECC level configurable,\nversions 1–10 up to ~150 byte chars) and renders an SVG.\n\n**B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a\n2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the\nsupplied matrix directly without invoking its own encoder. Use this\nwhen you need versions 11–40, kanji/alphanumeric mode, or any\nencoder feature beyond the built-in. When both `[value]` and\n`[matrix]` are set, the matrix wins (BYO override).\n\nOutput is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges\nrendering preserves the scannable cell boundaries at any size.\nSizing is controlled by the `[size]` prop (host CSS-pixel dimension);\ninternal cell size is computed from `size / (matrix-size + 2 ·\nquiet-zone)`. ARIA: `role=\"img\"` with `aria-label` (default \"QR code\"\nor the `[label]` prop).\n",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"allOf": [
|
|
8
8
|
{
|
|
@@ -42,18 +42,18 @@
|
|
|
42
42
|
"type": "string",
|
|
43
43
|
"default": "QR code"
|
|
44
44
|
},
|
|
45
|
-
"margin": {
|
|
46
|
-
"description": "Quiet zone in cells around the QR pattern. QR spec requires a\nminimum 4-cell margin for reliable scanning; smaller values may\nnot scan on some devices. Default `4`.\n",
|
|
47
|
-
"type": "number",
|
|
48
|
-
"default": 4
|
|
49
|
-
},
|
|
50
45
|
"matrix": {
|
|
51
46
|
"description": "BYO precomputed bit matrix as JSON — a 2-D array of 0/1\n(`[[1,0,...],[0,1,...],...]`). When set, the built-in encoder is\nbypassed and this matrix renders directly. Useful for QR variants\nthe built-in doesn't support (versions 11–40, alphanumeric mode,\nkanji, etc.) — bring your own encoder, pass the matrix here.\n",
|
|
52
47
|
"type": "string",
|
|
53
48
|
"default": ""
|
|
54
49
|
},
|
|
50
|
+
"quietZone": {
|
|
51
|
+
"description": "Quiet zone in cells around the QR pattern. QR spec requires a\nminimum 4-cell quiet zone for reliable scanning; smaller values\nmay not scan on some devices. Default `4`. (Renamed from\n`[margin]` — that name collided with the framework's global\n`[margin]` Scale attribute; `margin` on `qr-code-ui` now means\nthe global spacing attribute, per ADR-0053.)\n",
|
|
52
|
+
"type": "number",
|
|
53
|
+
"default": 4
|
|
54
|
+
},
|
|
55
55
|
"size": {
|
|
56
|
-
"description": "Host display size in CSS pixels (width and height; the SVG is\nalways square). Default 200. Internal cell size is computed from\nthis divided by `matrix-size + 2·
|
|
56
|
+
"description": "Host display size in CSS pixels (width and height; the SVG is\nalways square). Default 200. Internal cell size is computed from\nthis divided by `matrix-size + 2·quiet-zone`.\n",
|
|
57
57
|
"type": "number",
|
|
58
58
|
"default": 200
|
|
59
59
|
},
|
|
@@ -71,13 +71,13 @@
|
|
|
71
71
|
"anti_patterns": [
|
|
72
72
|
{
|
|
73
73
|
"fix": "Drop the ECC level (lower L gives more capacity for the same\nversion), OR shorten the URL (use a URL shortener), OR encode\nwith a BYO encoder library + pass the [matrix]:\n`<qr-code-ui matrix=\"[[1,0,1,...],...]\"></qr-code-ui>`\n",
|
|
74
|
-
"why": "Built-in encoder covers versions 1–10. Data beyond v10 capacity\
|
|
74
|
+
"why": "Built-in encoder covers versions 1–10. Data beyond v10 capacity\nis caught internally: the component renders empty and sets [error]\n(no exception reaches the consumer). Console warns with the value's\nUTF-16 code-unit length (String.length, not UTF-8 bytes) so\nconsumers can diagnose.\n",
|
|
75
75
|
"wrong": "<qr-code-ui value=\"https://very.long.url.that.exceeds.150.bytes.of.utf8.encoded.length...\"></qr-code-ui>\n"
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
|
-
"fix": "<qr-code-ui value=\"...\"
|
|
79
|
-
"why": "Zero
|
|
80
|
-
"wrong": "<qr-code-ui value=\"...\"
|
|
78
|
+
"fix": "<qr-code-ui value=\"...\" quiet-zone=\"4\"></qr-code-ui>\n",
|
|
79
|
+
"why": "Zero quiet zone breaks scanning. QR spec requires a 4-cell quiet\nzone for reliable detection.\n",
|
|
80
|
+
"wrong": "<qr-code-ui value=\"...\" quiet-zone=\"0\"></qr-code-ui>\n"
|
|
81
81
|
}
|
|
82
82
|
],
|
|
83
83
|
"category": "display",
|
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
"share-link"
|
|
111
111
|
],
|
|
112
112
|
"name": "UIQRCode",
|
|
113
|
+
"parts": {},
|
|
113
114
|
"related": [
|
|
114
115
|
"link",
|
|
115
116
|
"share"
|
|
@@ -122,7 +123,7 @@
|
|
|
122
123
|
},
|
|
123
124
|
{
|
|
124
125
|
"description": "Auto-encode failed (data too long for v1–10 at requested ECC). Renders an empty placeholder; logs a console warning. Switch to a BYO matrix from an external encoder, or downgrade the ECC level.",
|
|
125
|
-
"attribute": "
|
|
126
|
+
"attribute": "error",
|
|
126
127
|
"name": "error"
|
|
127
128
|
}
|
|
128
129
|
],
|
|
@@ -33,7 +33,7 @@ export class UIQRCode extends UIElement {
|
|
|
33
33
|
matrix: { type: String, default: '', reflect: true },
|
|
34
34
|
size: { type: Number, default: 200, reflect: true },
|
|
35
35
|
errorCorrection: { type: String, default: 'M', reflect: true, attribute: 'error-correction' },
|
|
36
|
-
|
|
36
|
+
quietZone: { type: Number, default: 4, reflect: true, attribute: 'quiet-zone' },
|
|
37
37
|
color: { type: String, default: '', reflect: true },
|
|
38
38
|
background: { type: String, default: '', reflect: true },
|
|
39
39
|
label: { type: String, default: 'QR code', reflect: true },
|
|
@@ -62,19 +62,19 @@ export class UIQRCode extends UIElement {
|
|
|
62
62
|
// BYO matrix wins
|
|
63
63
|
const byo = this.#parseMatrix(this.matrix);
|
|
64
64
|
if (byo) {
|
|
65
|
-
this.removeAttribute('
|
|
65
|
+
this.removeAttribute('error');
|
|
66
66
|
return byo;
|
|
67
67
|
}
|
|
68
68
|
if (!this.value) {
|
|
69
|
-
this.removeAttribute('
|
|
69
|
+
this.removeAttribute('error');
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
72
72
|
try {
|
|
73
73
|
const result = encodeQR(this.value, { errorCorrection: this.errorCorrection || 'M' });
|
|
74
|
-
this.removeAttribute('
|
|
74
|
+
this.removeAttribute('error');
|
|
75
75
|
return result.matrix;
|
|
76
76
|
} catch (e) {
|
|
77
|
-
this.setAttribute('
|
|
77
|
+
this.setAttribute('error', '');
|
|
78
78
|
// eslint-disable-next-line no-console
|
|
79
79
|
console.warn(`[qr-code-ui] encode failed for value (${this.value?.length || 0} chars at ECC=${this.errorCorrection}): ${e.message}. Lower ECC, shorten input, or supply a precomputed [matrix].`);
|
|
80
80
|
return null;
|
|
@@ -91,7 +91,7 @@ export class UIQRCode extends UIElement {
|
|
|
91
91
|
// Cheap idempotence: compute a signature of inputs, skip re-render
|
|
92
92
|
// if nothing changed (encoding is non-trivial — version selection +
|
|
93
93
|
// RS ECC + 8 mask evaluations).
|
|
94
|
-
const sig = `${this.value}|${this.matrix}|${this.size}|${this.errorCorrection}|${this.
|
|
94
|
+
const sig = `${this.value}|${this.matrix}|${this.size}|${this.errorCorrection}|${this.quietZone}|${this.color}|${this.background}`;
|
|
95
95
|
if (sig === this.#lastSig && this.querySelector('svg')) return;
|
|
96
96
|
this.#lastSig = sig;
|
|
97
97
|
|
|
@@ -106,7 +106,7 @@ export class UIQRCode extends UIElement {
|
|
|
106
106
|
|
|
107
107
|
const svg = matrixToSVG(matrix, {
|
|
108
108
|
cellSize: 8, // arbitrary internal unit; host CSS controls actual size via [size]
|
|
109
|
-
margin: Number.isFinite(this.
|
|
109
|
+
margin: Number.isFinite(this.quietZone) ? this.quietZone : 4,
|
|
110
110
|
// Hardcoded fallback to black-on-white — the scannable convention.
|
|
111
111
|
// Theme-aware `currentColor` produces light-on-dark in dark mode,
|
|
112
112
|
// which most phone cameras (iPhone Camera in particular) refuse to
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
the configured ECC. Render an empty placeholder; the warning
|
|
36
36
|
went to console. Visually: a dashed outline at the requested
|
|
37
37
|
size so the layout doesn't collapse silently. */
|
|
38
|
-
:scope[
|
|
38
|
+
:scope[error] {
|
|
39
39
|
border: 1px dashed var(--a-border-strong);
|
|
40
40
|
border-radius: var(--a-radius-sm);
|
|
41
41
|
min-width: 4em;
|
|
@@ -18,7 +18,7 @@ Output is a single `<svg>` with `viewBox="0 0 N N"`. Crisp-edges
|
|
|
18
18
|
rendering preserves the scannable cell boundaries at any size.
|
|
19
19
|
Sizing is controlled by the `[size]` prop (host CSS-pixel dimension);
|
|
20
20
|
internal cell size is computed from `size / (matrix-size + 2 ·
|
|
21
|
-
|
|
21
|
+
quiet-zone)`. ARIA: `role="img"` with `aria-label` (default "QR code"
|
|
22
22
|
or the `[label]` prop).
|
|
23
23
|
|
|
24
24
|
*
|
|
@@ -58,11 +58,6 @@ from more damage at the cost of QR-version size growth.
|
|
|
58
58
|
better AT context (e.g. "Share link QR code", "2FA setup QR").
|
|
59
59
|
*/
|
|
60
60
|
label: string;
|
|
61
|
-
/** Quiet zone in cells around the QR pattern. QR spec requires a
|
|
62
|
-
minimum 4-cell margin for reliable scanning; smaller values may
|
|
63
|
-
not scan on some devices. Default `4`.
|
|
64
|
-
*/
|
|
65
|
-
margin: number;
|
|
66
61
|
/** BYO precomputed bit matrix as JSON — a 2-D array of 0/1
|
|
67
62
|
(`[[1,0,...],[0,1,...],...]`). When set, the built-in encoder is
|
|
68
63
|
bypassed and this matrix renders directly. Useful for QR variants
|
|
@@ -70,9 +65,17 @@ the built-in doesn't support (versions 11–40, alphanumeric mode,
|
|
|
70
65
|
kanji, etc.) — bring your own encoder, pass the matrix here.
|
|
71
66
|
*/
|
|
72
67
|
matrix: string;
|
|
68
|
+
/** Quiet zone in cells around the QR pattern. QR spec requires a
|
|
69
|
+
minimum 4-cell quiet zone for reliable scanning; smaller values
|
|
70
|
+
may not scan on some devices. Default `4`. (Renamed from
|
|
71
|
+
`[margin]` — that name collided with the framework's global
|
|
72
|
+
`[margin]` Scale attribute; `margin` on `qr-code-ui` now means
|
|
73
|
+
the global spacing attribute, per ADR-0053.)
|
|
74
|
+
*/
|
|
75
|
+
quietZone: number;
|
|
73
76
|
/** Host display size in CSS pixels (width and height; the SVG is
|
|
74
77
|
always square). Default 200. Internal cell size is computed from
|
|
75
|
-
this divided by `matrix-size + 2·
|
|
78
|
+
this divided by `matrix-size + 2·quiet-zone`.
|
|
76
79
|
*/
|
|
77
80
|
size: number;
|
|
78
81
|
/** The string to encode (URL / text / share link / 2FA seed). When
|
|
@@ -25,7 +25,7 @@ description: |
|
|
|
25
25
|
rendering preserves the scannable cell boundaries at any size.
|
|
26
26
|
Sizing is controlled by the `[size]` prop (host CSS-pixel dimension);
|
|
27
27
|
internal cell size is computed from `size / (matrix-size + 2 ·
|
|
28
|
-
|
|
28
|
+
quiet-zone)`. ARIA: `role="img"` with `aria-label` (default "QR code"
|
|
29
29
|
or the `[label]` prop).
|
|
30
30
|
props:
|
|
31
31
|
value:
|
|
@@ -50,7 +50,7 @@ props:
|
|
|
50
50
|
description: |
|
|
51
51
|
Host display size in CSS pixels (width and height; the SVG is
|
|
52
52
|
always square). Default 200. Internal cell size is computed from
|
|
53
|
-
this divided by `matrix-size + 2·
|
|
53
|
+
this divided by `matrix-size + 2·quiet-zone`.
|
|
54
54
|
type: number
|
|
55
55
|
default: 200
|
|
56
56
|
reflect: true
|
|
@@ -64,14 +64,18 @@ props:
|
|
|
64
64
|
enum: [L, M, Q, H]
|
|
65
65
|
reflect: true
|
|
66
66
|
attribute: error-correction
|
|
67
|
-
|
|
67
|
+
quietZone:
|
|
68
68
|
description: |
|
|
69
69
|
Quiet zone in cells around the QR pattern. QR spec requires a
|
|
70
|
-
minimum 4-cell
|
|
71
|
-
not scan on some devices. Default `4`.
|
|
70
|
+
minimum 4-cell quiet zone for reliable scanning; smaller values
|
|
71
|
+
may not scan on some devices. Default `4`. (Renamed from
|
|
72
|
+
`[margin]` — that name collided with the framework's global
|
|
73
|
+
`[margin]` Scale attribute; `margin` on `qr-code-ui` now means
|
|
74
|
+
the global spacing attribute, per ADR-0053.)
|
|
72
75
|
type: number
|
|
73
76
|
default: 4
|
|
74
77
|
reflect: true
|
|
78
|
+
attribute: quiet-zone
|
|
75
79
|
color:
|
|
76
80
|
description: |
|
|
77
81
|
Foreground (dark-cell) color. Any CSS color string (hex, rgb,
|
|
@@ -107,7 +111,7 @@ states:
|
|
|
107
111
|
description: Default — QR rendered (or empty if no value/matrix).
|
|
108
112
|
- name: error
|
|
109
113
|
description: Auto-encode failed (data too long for v1–10 at requested ECC). Renders an empty placeholder; logs a console warning. Switch to a BYO matrix from an external encoder, or downgrade the ECC level.
|
|
110
|
-
attribute:
|
|
114
|
+
attribute: error
|
|
111
115
|
traits: []
|
|
112
116
|
tokens:
|
|
113
117
|
--qr-code-fg:
|
|
@@ -125,27 +129,29 @@ a2ui:
|
|
|
125
129
|
reason: "Encoder capacity contract."
|
|
126
130
|
- rule: "When QR sits over a non-white surface, set [background] to a solid color. White-on-image QR backgrounds are unreliable for scanners — quiet-zone contrast against the dark cells is the load-bearing visual."
|
|
127
131
|
reason: "Scannability constraint."
|
|
128
|
-
- rule: "The [
|
|
132
|
+
- rule: "The [quiet-zone] defaults to 4 cells per QR spec. Smaller values may scan on some devices but not others; do not go below 2."
|
|
129
133
|
reason: "Quiet-zone requirement."
|
|
130
134
|
anti_patterns:
|
|
131
135
|
- wrong: |
|
|
132
136
|
<qr-code-ui value="https://very.long.url.that.exceeds.150.bytes.of.utf8.encoded.length..."></qr-code-ui>
|
|
133
137
|
why: |
|
|
134
138
|
Built-in encoder covers versions 1–10. Data beyond v10 capacity
|
|
135
|
-
|
|
136
|
-
the
|
|
139
|
+
is caught internally: the component renders empty and sets [error]
|
|
140
|
+
(no exception reaches the consumer). Console warns with the value's
|
|
141
|
+
UTF-16 code-unit length (String.length, not UTF-8 bytes) so
|
|
142
|
+
consumers can diagnose.
|
|
137
143
|
fix: |
|
|
138
144
|
Drop the ECC level (lower L gives more capacity for the same
|
|
139
145
|
version), OR shorten the URL (use a URL shortener), OR encode
|
|
140
146
|
with a BYO encoder library + pass the [matrix]:
|
|
141
147
|
`<qr-code-ui matrix="[[1,0,1,...],...]"></qr-code-ui>`
|
|
142
148
|
- wrong: |
|
|
143
|
-
<qr-code-ui value="..."
|
|
149
|
+
<qr-code-ui value="..." quiet-zone="0"></qr-code-ui>
|
|
144
150
|
why: |
|
|
145
|
-
Zero
|
|
151
|
+
Zero quiet zone breaks scanning. QR spec requires a 4-cell quiet
|
|
146
152
|
zone for reliable detection.
|
|
147
153
|
fix: |
|
|
148
|
-
<qr-code-ui value="..."
|
|
154
|
+
<qr-code-ui value="..." quiet-zone="4"></qr-code-ui>
|
|
149
155
|
examples:
|
|
150
156
|
- name: default
|
|
151
157
|
description: Plain URL encoding at default size + ECC-M.
|
|
@@ -101,18 +101,19 @@
|
|
|
101
101
|
"poll"
|
|
102
102
|
],
|
|
103
103
|
"name": "UIRadio",
|
|
104
|
-
"
|
|
105
|
-
"button",
|
|
106
|
-
"radio-group"
|
|
107
|
-
],
|
|
108
|
-
"slots": {
|
|
104
|
+
"parts": {
|
|
109
105
|
"dot": {
|
|
110
|
-
"description": "Radio dot indicator, sized via --dot-size"
|
|
106
|
+
"description": "Radio dot indicator, sized via --dot-size — template-owned anatomy part, not a light-DOM insertion point"
|
|
111
107
|
},
|
|
112
108
|
"label": {
|
|
113
|
-
"description": "Label text
|
|
109
|
+
"description": "Label text beside the dot — set via the `label` attribute (rendered by CSS `attr(label)` on `::after`); template-owned, not a light-DOM insertion point (gh#1435, gh#1447)"
|
|
114
110
|
}
|
|
115
111
|
},
|
|
112
|
+
"related": [
|
|
113
|
+
"button",
|
|
114
|
+
"radio-group"
|
|
115
|
+
],
|
|
116
|
+
"slots": {},
|
|
116
117
|
"states": [
|
|
117
118
|
{
|
|
118
119
|
"description": "Default, ready for interaction.",
|
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
/**
|
|
15
15
|
* <radio-ui> — Radio button. The host IS the control.
|
|
16
16
|
* Pure CSS dot via [slot="dot"]::after inner circle. No SVG, no inset shadow hack.
|
|
17
|
+
*
|
|
18
|
+
* ADR-0056 exemption (#1363 B7): [checked] — not [selected] — is the
|
|
19
|
+
* state surface here. radio-ui is a native form-control primitive (like
|
|
20
|
+
* option-card-ui's [checked] and accordion-item-ui's [open]); ADR-0056
|
|
21
|
+
* governs the parent-managed selection-item shape (segment-ui,
|
|
22
|
+
* toggle-option-ui), a different convention. radio-ui self-selects on
|
|
23
|
+
* click/keydown and stays independently form-participating per [name] —
|
|
24
|
+
* it is not a child a parent stamps top-down.
|
|
17
25
|
*/
|
|
18
26
|
|
|
19
27
|
import { UIFormElement } from '../../core/form.js';
|
|
@@ -56,11 +56,11 @@ props:
|
|
|
56
56
|
events:
|
|
57
57
|
change:
|
|
58
58
|
description: Fired when this radio becomes selected (bubbles)
|
|
59
|
-
|
|
59
|
+
parts:
|
|
60
60
|
dot:
|
|
61
|
-
description: Radio dot indicator, sized via --dot-size
|
|
61
|
+
description: Radio dot indicator, sized via --dot-size — template-owned anatomy part, not a light-DOM insertion point
|
|
62
62
|
label:
|
|
63
|
-
description: Label text
|
|
63
|
+
description: Label text beside the dot — set via the `label` attribute (rendered by CSS `attr(label)` on `::after`); template-owned, not a light-DOM insertion point (gh#1435, gh#1447)
|
|
64
64
|
states:
|
|
65
65
|
- name: idle
|
|
66
66
|
description: Default, ready for interaction.
|
|
@@ -63,6 +63,11 @@
|
|
|
63
63
|
"aria-labelledby"
|
|
64
64
|
],
|
|
65
65
|
"name": "UIRadioGroup",
|
|
66
|
+
"parts": {
|
|
67
|
+
"label": {
|
|
68
|
+
"description": "Auto-minted label element (mounted by radio-group-ui from the [label] prop) — do not author this slot directly; template-owned anatomy part, not a light-DOM insertion point (gh#1454). `#ensureLabelElement()` only recognizes its own `[data-radio-group-label]` marker, never a bare consumer-authored `[slot=\"label\"]` element."
|
|
69
|
+
}
|
|
70
|
+
},
|
|
66
71
|
"related": [
|
|
67
72
|
"radio",
|
|
68
73
|
"field"
|
|
@@ -70,9 +75,6 @@
|
|
|
70
75
|
"slots": {
|
|
71
76
|
"default": {
|
|
72
77
|
"description": "radio-ui children sharing one [name=] — exclusivity and arrow-key navigation are unchanged; they still resolve via closest('fieldset, [role=radiogroup]'), which now matches this host."
|
|
73
|
-
},
|
|
74
|
-
"label": {
|
|
75
|
-
"description": "Auto-minted label element (mounted by radio-group-ui from the [label] prop) — do not author this slot directly."
|
|
76
78
|
}
|
|
77
79
|
},
|
|
78
80
|
"states": [
|
|
@@ -28,6 +28,17 @@
|
|
|
28
28
|
*
|
|
29
29
|
* Not a form-associated element itself — it carries no value; each child
|
|
30
30
|
* radio-ui is its own form participant per the existing [name=] contract.
|
|
31
|
+
*
|
|
32
|
+
* ADR-0056 scope note (#1363 B7 flagged "radio-group exposes no value
|
|
33
|
+
* surface at all" against segmented/tabs/select's parent [value]):
|
|
34
|
+
* evaluated and NOT adopted here. ADR-0056 itself governs only a
|
|
35
|
+
* selection-item CHILD's own state surface (segment-ui/toggle-option-ui's
|
|
36
|
+
* [selected]) — radio-ui already conforms via its native [checked]
|
|
37
|
+
* (radio.class.js, same exemption class as option-card-ui/
|
|
38
|
+
* accordion-item-ui). A parent-level [value] on this host would
|
|
39
|
+
* contradict the "not form-associated" design documented above and has
|
|
40
|
+
* no ratifying ADR of its own; left as a named rejected alternative
|
|
41
|
+
* (gh#1379) pending a future naming-convention ruling (B5/B9-shaped).
|
|
31
42
|
*/
|
|
32
43
|
import { UIElement } from '../../core/element.js';
|
|
33
44
|
|
|
@@ -37,8 +37,14 @@ events: {}
|
|
|
37
37
|
slots:
|
|
38
38
|
default:
|
|
39
39
|
description: "radio-ui children sharing one [name=] — exclusivity and arrow-key navigation are unchanged; they still resolve via closest('fieldset, [role=radiogroup]'), which now matches this host."
|
|
40
|
+
parts:
|
|
40
41
|
label:
|
|
41
|
-
description:
|
|
42
|
+
description: >-
|
|
43
|
+
Auto-minted label element (mounted by radio-group-ui from the [label]
|
|
44
|
+
prop) — do not author this slot directly; template-owned anatomy part,
|
|
45
|
+
not a light-DOM insertion point (gh#1454).
|
|
46
|
+
`#ensureLabelElement()` only recognizes its own `[data-radio-group-label]`
|
|
47
|
+
marker, never a bare consumer-authored `[slot="label"]` element.
|
|
42
48
|
states:
|
|
43
49
|
- name: idle
|
|
44
50
|
description: Default, ready for interaction.
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
"volume"
|
|
96
96
|
],
|
|
97
97
|
"name": "UIRange",
|
|
98
|
+
"parts": {},
|
|
98
99
|
"related": [
|
|
99
100
|
"input",
|
|
100
101
|
"button"
|
|
@@ -105,6 +106,11 @@
|
|
|
105
106
|
"description": "Default, ready for interaction.",
|
|
106
107
|
"name": "idle"
|
|
107
108
|
},
|
|
109
|
+
{
|
|
110
|
+
"description": "The field is mid-drag (pointer down through pointerup).",
|
|
111
|
+
"attribute": "dragging",
|
|
112
|
+
"name": "dragging"
|
|
113
|
+
},
|
|
108
114
|
{
|
|
109
115
|
"description": "Non-interactive; dimmed.",
|
|
110
116
|
"attribute": "disabled",
|
|
@@ -138,7 +138,7 @@ export class UIRange extends UIFormElement {
|
|
|
138
138
|
this.#dragging = true;
|
|
139
139
|
this.#startX = e.clientX;
|
|
140
140
|
this.#startVal = this.value;
|
|
141
|
-
this.setAttribute('
|
|
141
|
+
this.setAttribute('dragging', '');
|
|
142
142
|
this.#fieldEl.setPointerCapture(e.pointerId);
|
|
143
143
|
this.#fieldEl.addEventListener('pointermove', this.#onPointerMove);
|
|
144
144
|
this.#fieldEl.addEventListener('pointerup', this.#onPointerUp);
|
|
@@ -156,7 +156,7 @@ export class UIRange extends UIFormElement {
|
|
|
156
156
|
|
|
157
157
|
#onPointerUp = (e) => {
|
|
158
158
|
this.#dragging = false;
|
|
159
|
-
this.removeAttribute('
|
|
159
|
+
this.removeAttribute('dragging');
|
|
160
160
|
this.#fieldEl.releasePointerCapture(e.pointerId);
|
|
161
161
|
this.#fieldEl.removeEventListener('pointermove', this.#onPointerMove);
|
|
162
162
|
this.#fieldEl.removeEventListener('pointerup', this.#onPointerUp);
|
|
@@ -69,7 +69,7 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
|
|
|
69
69
|
/* font-family floor — see segment.css rationale. */
|
|
70
70
|
font-family: var(--range-font-family);
|
|
71
71
|
font-size: var(--range-font-size);
|
|
72
|
-
line-height:
|
|
72
|
+
line-height: var(--a-font-leading-none);
|
|
73
73
|
transition:
|
|
74
74
|
border-color var(--range-duration) var(--range-easing),
|
|
75
75
|
background var(--range-duration) var(--range-easing);
|
|
@@ -147,10 +147,10 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
|
|
|
147
147
|
/* Hover-fill brighten moved outside @scope — see Safari 17.x bug note at top. */
|
|
148
148
|
|
|
149
149
|
/* Dragging: deepest fill, sharper border, instant (no transition lag on the clip) */
|
|
150
|
-
:scope[
|
|
150
|
+
:scope[dragging] [slot="field"] {
|
|
151
151
|
border-color: var(--range-border-dragging);
|
|
152
152
|
}
|
|
153
|
-
:scope[
|
|
153
|
+
:scope[dragging] [data-layer="fill"] {
|
|
154
154
|
background: var(--range-fill-bg-active);
|
|
155
155
|
transition: none;
|
|
156
156
|
}
|
|
@@ -61,6 +61,9 @@ slots: {}
|
|
|
61
61
|
states:
|
|
62
62
|
- name: idle
|
|
63
63
|
description: Default, ready for interaction.
|
|
64
|
+
- name: dragging
|
|
65
|
+
description: The field is mid-drag (pointer down through pointerup).
|
|
66
|
+
attribute: dragging
|
|
64
67
|
- name: disabled
|
|
65
68
|
description: Non-interactive; dimmed.
|
|
66
69
|
attribute: disabled
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"unevaluatedProperties": false,
|
|
39
39
|
"x-adiaui": {
|
|
40
40
|
"anti_patterns": [],
|
|
41
|
-
"category": "
|
|
41
|
+
"category": "display",
|
|
42
42
|
"composes": [],
|
|
43
43
|
"events": {},
|
|
44
44
|
"examples": [
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"richtext"
|
|
68
68
|
],
|
|
69
69
|
"name": "UIRichText",
|
|
70
|
+
"parts": {},
|
|
70
71
|
"related": [
|
|
71
72
|
"Code",
|
|
72
73
|
"Text",
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
font-weight: var(--richtext-h4-weight);
|
|
165
165
|
color: var(--richtext-fg-muted);
|
|
166
166
|
text-transform: uppercase;
|
|
167
|
-
letter-spacing:
|
|
167
|
+
letter-spacing: var(--a-font-tracking-wide);
|
|
168
168
|
margin: var(--richtext-h4-margin-top) 0 var(--richtext-h4-margin-bottom);
|
|
169
169
|
}
|
|
170
170
|
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
font-weight: var(--richtext-h4-weight);
|
|
174
174
|
color: var(--richtext-fg-muted);
|
|
175
175
|
text-transform: uppercase;
|
|
176
|
-
letter-spacing:
|
|
176
|
+
letter-spacing: var(--a-font-tracking-wider);
|
|
177
177
|
margin: var(--richtext-h4-margin-top) 0 var(--richtext-h4-margin-bottom);
|
|
178
178
|
}
|
|
179
179
|
|
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
padding: var(--richtext-pre-inset);
|
|
213
213
|
overflow-x: auto;
|
|
214
214
|
font-size: var(--richtext-code-size);
|
|
215
|
-
line-height:
|
|
215
|
+
line-height: var(--a-font-leading-relaxed);
|
|
216
216
|
margin: var(--richtext-pre-my) 0;
|
|
217
217
|
}
|
|
218
218
|
|
|
@@ -41,8 +41,11 @@ export class UISearch extends UIFormElement {
|
|
|
41
41
|
|
|
42
42
|
if (!this.querySelector('input-ui')) {
|
|
43
43
|
const size = this.getAttribute('size');
|
|
44
|
+
// No `type` attribute here — input-ui's `type` enum no longer
|
|
45
|
+
// includes "search" (gh#1381, gh#1363 B10); it was always
|
|
46
|
+
// decorative on this primitive (input.class.js never branched on
|
|
47
|
+
// it), so dropping it is a no-op on rendered behavior.
|
|
44
48
|
this.innerHTML = `<input-ui
|
|
45
|
-
type="search"
|
|
46
49
|
prefix="magnifying-glass"
|
|
47
50
|
suffix="x-circle"
|
|
48
51
|
placeholder="${this.placeholder}"
|