@adia-ai/web-components 0.6.33 → 0.6.35
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 +64 -0
- package/color/index.js +1 -1
- package/components/accordion/accordion-item.yaml +2 -2
- package/components/accordion/accordion.css +2 -2
- package/components/accordion/accordion.js +1 -1
- package/components/action-list/action-item.yaml +2 -2
- package/components/action-list/action-list.css +2 -2
- package/components/action-list/action-list.js +1 -1
- package/components/agent-artifact/{class.js → agent-artifact.class.js} +1 -1
- package/components/agent-artifact/agent-artifact.css +31 -31
- package/components/agent-artifact/agent-artifact.js +1 -1
- package/components/agent-feedback-bar/agent-feedback-bar.css +10 -10
- package/components/agent-feedback-bar/agent-feedback-bar.js +1 -1
- package/components/agent-questions/agent-questions.css +57 -57
- package/components/agent-questions/agent-questions.js +1 -1
- package/components/agent-reasoning/agent-reasoning.css +62 -62
- package/components/agent-reasoning/agent-reasoning.js +1 -1
- package/components/agent-suggestions/agent-suggestions.css +4 -4
- package/components/agent-suggestions/agent-suggestions.js +1 -1
- package/components/agent-trace/agent-trace.css +53 -53
- package/components/alert/alert.a2ui.json +64 -1
- package/components/alert/{class.js → alert.class.js} +189 -2
- package/components/alert/alert.css +119 -41
- package/components/alert/alert.d.ts +14 -0
- package/components/alert/alert.js +1 -1
- package/components/alert/alert.test.js +184 -0
- package/components/alert/alert.yaml +114 -1
- package/components/avatar/avatar-group.yaml +2 -2
- package/components/avatar/avatar.css +27 -27
- package/components/avatar/avatar.js +1 -1
- package/components/badge/badge.css +27 -27
- package/components/badge/badge.js +1 -1
- package/components/block/block.css +16 -16
- package/components/block/block.js +1 -1
- package/components/breadcrumb/breadcrumb.css +23 -23
- package/components/breadcrumb/breadcrumb.js +1 -1
- package/components/button/button.css +101 -91
- package/components/button/button.js +1 -1
- package/components/calendar-grid/calendar-grid.a2ui.json +146 -0
- package/components/calendar-grid/calendar-grid.class.js +326 -0
- package/components/calendar-grid/calendar-grid.css +246 -0
- package/components/calendar-grid/calendar-grid.d.ts +41 -0
- package/components/calendar-grid/calendar-grid.js +17 -0
- package/components/calendar-grid/calendar-grid.yaml +136 -0
- package/components/calendar-picker/calendar-picker.css +139 -139
- package/components/calendar-picker/calendar-picker.js +1 -1
- package/components/canvas/canvas.css +12 -12
- package/components/card/card.css +83 -83
- package/components/card/card.js +1 -1
- package/components/chart/chart.css +224 -224
- package/components/chart/chart.js +1 -1
- package/components/chart-legend/chart-legend.css +26 -26
- package/components/chart-legend/chart-legend.js +1 -1
- package/components/chat-thread/chat-input.a2ui.json +1 -1
- package/components/chat-thread/chat-input.js +6 -1
- package/components/chat-thread/chat-input.yaml +4 -1
- package/components/chat-thread/chat-thread.js +1 -1
- package/components/check/check.css +40 -40
- package/components/check/check.js +1 -1
- package/components/code/code.css +125 -125
- package/components/code/code.js +1 -1
- package/components/col/col.css +15 -15
- package/components/col/col.js +1 -1
- package/components/color-input/color-input.js +1 -1
- package/components/color-picker/color-picker.css +55 -55
- package/components/color-picker/color-picker.js +1 -1
- package/components/combobox/combobox.a2ui.json +363 -0
- package/components/combobox/combobox.class.js +861 -0
- package/components/combobox/combobox.css +244 -0
- package/components/combobox/combobox.d.ts +113 -0
- package/components/combobox/combobox.examples.md +59 -0
- package/components/combobox/combobox.js +17 -0
- package/components/combobox/combobox.test.js +181 -0
- package/components/combobox/combobox.yaml +369 -0
- package/components/command/command.css +90 -90
- package/components/command/command.js +1 -1
- package/components/date-range-picker/date-range-picker.a2ui.json +300 -0
- package/components/date-range-picker/date-range-picker.class.js +791 -0
- package/components/date-range-picker/date-range-picker.css +224 -0
- package/components/date-range-picker/date-range-picker.d.ts +82 -0
- package/components/date-range-picker/date-range-picker.examples.md +37 -0
- package/components/date-range-picker/date-range-picker.js +17 -0
- package/components/date-range-picker/date-range-picker.test.js +387 -0
- package/components/date-range-picker/date-range-picker.yaml +285 -0
- package/components/datetime-picker/datetime-picker.a2ui.json +334 -0
- package/components/datetime-picker/datetime-picker.class.js +706 -0
- package/components/datetime-picker/datetime-picker.css +150 -0
- package/components/datetime-picker/datetime-picker.d.ts +86 -0
- package/components/datetime-picker/datetime-picker.examples.md +46 -0
- package/components/datetime-picker/datetime-picker.js +17 -0
- package/components/datetime-picker/datetime-picker.test.js +454 -0
- package/components/datetime-picker/datetime-picker.yaml +332 -0
- package/components/demo-toggle/demo-toggle.css +27 -27
- package/components/demo-toggle/demo-toggle.js +1 -1
- package/components/description-list/description-list.css +18 -18
- package/components/description-list/description-list.js +1 -1
- package/components/divider/divider.css +24 -24
- package/components/divider/divider.js +1 -1
- package/components/drawer/drawer.js +1 -1
- package/components/embed/embed.css +6 -6
- package/components/embed/embed.js +1 -1
- package/components/empty-state/empty-state.css +27 -27
- package/components/empty-state/empty-state.js +1 -1
- package/components/feed/feed.css +12 -12
- package/components/feed/feed.js +1 -1
- package/components/field/field.css +28 -28
- package/components/field/field.js +1 -1
- package/components/field/field.test.js +1 -1
- package/components/fields/fields.css +5 -5
- package/components/fields/fields.js +1 -1
- package/components/grid/grid.css +5 -5
- package/components/grid/grid.js +1 -1
- package/components/heatmap/heatmap.css +63 -63
- package/components/heatmap/heatmap.js +1 -1
- package/components/icon/icon.css +12 -12
- package/components/icon/icon.js +1 -1
- package/components/image/image.css +14 -14
- package/components/image/image.js +1 -1
- package/components/index.js +11 -0
- package/components/inline-message/inline-message.a2ui.json +143 -0
- package/components/inline-message/inline-message.class.js +169 -0
- package/components/inline-message/inline-message.css +75 -0
- package/components/inline-message/inline-message.d.ts +31 -0
- package/components/inline-message/inline-message.examples.md +19 -0
- package/components/inline-message/inline-message.js +17 -0
- package/components/inline-message/inline-message.test.js +203 -0
- package/components/inline-message/inline-message.yaml +205 -0
- package/components/input/input.css +67 -67
- package/components/input/input.js +1 -1
- package/components/input/input.yaml +5 -4
- package/components/inspector/inspector.css +6 -6
- package/components/inspector/inspector.js +1 -1
- package/components/integration-card/integration-card.a2ui.json +268 -0
- package/components/integration-card/integration-card.class.js +410 -0
- package/components/integration-card/integration-card.css +169 -0
- package/components/integration-card/integration-card.d.ts +63 -0
- package/components/integration-card/integration-card.examples.md +41 -0
- package/components/integration-card/integration-card.js +17 -0
- package/components/integration-card/integration-card.test.js +306 -0
- package/components/integration-card/integration-card.yaml +280 -0
- package/components/kbd/kbd.css +32 -32
- package/components/kbd/kbd.js +1 -1
- package/components/link/link.css +12 -12
- package/components/link/link.js +1 -1
- package/components/list/list-item.yaml +2 -2
- package/components/list/list.css +8 -8
- package/components/list/list.js +1 -1
- package/components/list-window/list-window.a2ui.json +277 -0
- package/components/list-window/list-window.class.js +688 -0
- package/components/list-window/list-window.css +124 -0
- package/components/list-window/list-window.d.ts +84 -0
- package/components/list-window/list-window.examples.md +73 -0
- package/components/list-window/list-window.js +17 -0
- package/components/list-window/list-window.test.js +303 -0
- package/components/list-window/list-window.yaml +270 -0
- package/components/loading-overlay/loading-overlay.a2ui.json +176 -0
- package/components/loading-overlay/loading-overlay.class.js +203 -0
- package/components/loading-overlay/loading-overlay.css +81 -0
- package/components/loading-overlay/loading-overlay.d.ts +24 -0
- package/components/loading-overlay/loading-overlay.examples.md +50 -0
- package/components/loading-overlay/loading-overlay.js +17 -0
- package/components/loading-overlay/loading-overlay.test.js +257 -0
- package/components/loading-overlay/loading-overlay.yaml +260 -0
- package/components/menu/menu-divider.yaml +1 -1
- package/components/menu/menu-item.yaml +1 -1
- package/components/menu/menu.a2ui.json +3 -0
- package/components/menu/menu.css +8 -8
- package/components/menu/menu.js +1 -1
- package/components/menu/menu.yaml +7 -0
- package/components/modal/{class.js → modal.class.js} +12 -1
- package/components/modal/modal.css +54 -44
- package/components/modal/modal.js +1 -1
- package/components/nav/nav.css +40 -40
- package/components/nav/nav.js +1 -1
- package/components/nav-group/nav-group.css +52 -52
- package/components/nav-group/nav-group.js +1 -1
- package/components/nav-item/nav-item.css +44 -44
- package/components/nav-item/nav-item.js +1 -1
- package/components/noodles/noodles.css +31 -31
- package/components/noodles/noodles.js +1 -1
- package/components/option-card/option-card.css +69 -69
- package/components/option-card/option-card.js +1 -1
- package/components/otp-input/otp-input.css +30 -30
- package/components/otp-input/otp-input.js +1 -1
- package/components/page/page.css +18 -18
- package/components/page/page.js +1 -1
- package/components/pagination/pagination.css +61 -61
- package/components/pagination/pagination.js +1 -1
- package/components/pane/pane.css +57 -57
- package/components/pane/pane.js +1 -1
- package/components/pipeline-status/pipeline-status.css +65 -65
- package/components/pipeline-status/pipeline-status.js +1 -1
- package/components/popover/popover.a2ui.json +8 -1
- package/components/popover/popover.css +17 -17
- package/components/popover/popover.js +1 -1
- package/components/popover/popover.yaml +14 -1
- package/components/progress/progress.css +23 -23
- package/components/progress/progress.js +1 -1
- package/components/progress-row/progress-row.css +17 -17
- package/components/progress-row/progress-row.js +1 -1
- package/components/radio/radio.css +39 -39
- package/components/radio/radio.js +1 -1
- package/components/range/range.css +55 -55
- package/components/range/range.js +1 -1
- package/components/rating/rating.css +28 -28
- package/components/rating/rating.js +1 -1
- package/components/richtext/richtext.css +133 -133
- package/components/richtext/richtext.js +1 -1
- package/components/row/row.css +19 -19
- package/components/row/row.js +1 -1
- package/components/search/search.css +5 -5
- package/components/search/search.js +1 -1
- package/components/segment/segment.css +24 -24
- package/components/segment/segment.js +1 -1
- package/components/segmented/segmented.css +25 -25
- package/components/segmented/segmented.js +1 -1
- package/components/select/select.a2ui.json +58 -4
- package/components/select/{class.js → select.class.js} +415 -6
- package/components/select/select.css +242 -84
- package/components/select/select.d.ts +31 -1
- package/components/select/select.js +1 -1
- package/components/select/select.test.js +202 -0
- package/components/select/select.yaml +126 -5
- package/components/skeleton/skeleton.css +14 -14
- package/components/skeleton/skeleton.js +1 -1
- package/components/slider/slider.css +46 -46
- package/components/slider/slider.js +1 -1
- package/components/spinner/spinner.a2ui.json +198 -0
- package/components/spinner/spinner.class.js +99 -0
- package/components/spinner/spinner.css +221 -0
- package/components/spinner/spinner.d.ts +26 -0
- package/components/spinner/spinner.examples.md +26 -0
- package/components/spinner/spinner.js +17 -0
- package/components/spinner/spinner.test.js +272 -0
- package/components/spinner/spinner.yaml +238 -0
- package/components/stack/stack.css +11 -11
- package/components/stack/stack.js +1 -1
- package/components/stat/stat.css +25 -25
- package/components/step-progress/step-progress.css +20 -20
- package/components/step-progress/step-progress.js +1 -1
- package/components/stepper/stepper-item.yaml +1 -1
- package/components/stepper/stepper.css +29 -29
- package/components/stepper/stepper.js +1 -1
- package/components/stream/stream.css +12 -12
- package/components/stream/stream.js +1 -1
- package/components/swatch/swatch.css +68 -68
- package/components/swatch/swatch.js +1 -1
- package/components/swiper/swiper.css +57 -57
- package/components/swiper/swiper.js +1 -1
- package/components/switch/switch.css +52 -52
- package/components/switch/switch.js +1 -1
- package/components/table/table.css +163 -163
- package/components/table/table.js +1 -1
- package/components/table-toolbar/{class.js → table-toolbar.class.js} +1 -1
- package/components/table-toolbar/table-toolbar.css +32 -32
- package/components/table-toolbar/table-toolbar.js +1 -1
- package/components/tabs/tab.yaml +2 -2
- package/components/tabs/tabs.css +51 -51
- package/components/tabs/tabs.js +1 -1
- package/components/tag/tag.css +48 -48
- package/components/tag/tag.js +1 -1
- package/components/tags-input/tags-input.a2ui.json +337 -0
- package/components/tags-input/tags-input.class.js +776 -0
- package/components/tags-input/tags-input.css +201 -0
- package/components/tags-input/tags-input.d.ts +120 -0
- package/components/tags-input/tags-input.examples.md +92 -0
- package/components/tags-input/tags-input.js +17 -0
- package/components/tags-input/tags-input.test.js +368 -0
- package/components/tags-input/tags-input.yaml +367 -0
- package/components/text/text.css +44 -44
- package/components/text/text.js +1 -1
- package/components/textarea/textarea.a2ui.json +1 -1
- package/components/textarea/textarea.css +46 -46
- package/components/textarea/textarea.js +1 -1
- package/components/textarea/textarea.yaml +11 -8
- package/components/time-picker/time-picker.a2ui.json +267 -0
- package/components/time-picker/time-picker.class.js +693 -0
- package/components/time-picker/time-picker.css +122 -0
- package/components/time-picker/time-picker.d.ts +75 -0
- package/components/time-picker/time-picker.examples.md +35 -0
- package/components/time-picker/time-picker.js +17 -0
- package/components/time-picker/time-picker.test.js +287 -0
- package/components/time-picker/time-picker.yaml +256 -0
- package/components/timeline/timeline-item.yaml +2 -2
- package/components/timeline/{class.js → timeline.class.js} +1 -1
- package/components/timeline/timeline.css +50 -50
- package/components/timeline/timeline.js +1 -1
- package/components/toast/toast.css +58 -58
- package/components/toast/toast.js +1 -1
- package/components/toggle-group/toggle-group.css +6 -6
- package/components/toggle-group/toggle-group.js +1 -1
- package/components/toggle-group/toggle-option.yaml +1 -1
- package/components/toggle-scheme/toggle-scheme.css +2 -2
- package/components/toggle-scheme/toggle-scheme.js +1 -1
- package/components/toolbar/toolbar-group.yaml +1 -1
- package/components/toolbar/toolbar.css +17 -17
- package/components/toolbar/toolbar.js +1 -1
- package/components/tooltip/tooltip.css +2 -2
- package/components/tooltip/tooltip.js +1 -1
- package/components/tree/tree-item.yaml +1 -1
- package/components/tree/tree.css +37 -37
- package/components/tree/tree.js +1 -1
- package/components/upload/upload.css +49 -49
- package/components/upload/upload.js +1 -1
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +146 -87
- package/package.json +3 -3
- package/styles/components.css +11 -0
- /package/components/accordion/{class.js → accordion.class.js} +0 -0
- /package/components/action-list/{class.js → action-list.class.js} +0 -0
- /package/components/agent-feedback-bar/{class.js → agent-feedback-bar.class.js} +0 -0
- /package/components/agent-questions/{class.js → agent-questions.class.js} +0 -0
- /package/components/agent-reasoning/{class.js → agent-reasoning.class.js} +0 -0
- /package/components/agent-suggestions/{class.js → agent-suggestions.class.js} +0 -0
- /package/components/avatar/{class.js → avatar.class.js} +0 -0
- /package/components/badge/{class.js → badge.class.js} +0 -0
- /package/components/block/{class.js → block.class.js} +0 -0
- /package/components/breadcrumb/{class.js → breadcrumb.class.js} +0 -0
- /package/components/button/{class.js → button.class.js} +0 -0
- /package/components/calendar-picker/{class.js → calendar-picker.class.js} +0 -0
- /package/components/card/{class.js → card.class.js} +0 -0
- /package/components/chart/{class.js → chart.class.js} +0 -0
- /package/components/chart-legend/{class.js → chart-legend.class.js} +0 -0
- /package/components/chat-thread/{class.js → chat-thread.class.js} +0 -0
- /package/components/check/{class.js → check.class.js} +0 -0
- /package/components/code/{class.js → code.class.js} +0 -0
- /package/components/col/{class.js → col.class.js} +0 -0
- /package/components/color-input/{class.js → color-input.class.js} +0 -0
- /package/components/color-picker/{class.js → color-picker.class.js} +0 -0
- /package/components/command/{class.js → command.class.js} +0 -0
- /package/components/demo-toggle/{class.js → demo-toggle.class.js} +0 -0
- /package/components/description-list/{class.js → description-list.class.js} +0 -0
- /package/components/divider/{class.js → divider.class.js} +0 -0
- /package/components/drawer/{class.js → drawer.class.js} +0 -0
- /package/components/embed/{class.js → embed.class.js} +0 -0
- /package/components/empty-state/{class.js → empty-state.class.js} +0 -0
- /package/components/feed/{class.js → feed.class.js} +0 -0
- /package/components/field/{class.js → field.class.js} +0 -0
- /package/components/fields/{class.js → fields.class.js} +0 -0
- /package/components/grid/{class.js → grid.class.js} +0 -0
- /package/components/heatmap/{class.js → heatmap.class.js} +0 -0
- /package/components/icon/{class.js → icon.class.js} +0 -0
- /package/components/image/{class.js → image.class.js} +0 -0
- /package/components/input/{class.js → input.class.js} +0 -0
- /package/components/inspector/{class.js → inspector.class.js} +0 -0
- /package/components/kbd/{class.js → kbd.class.js} +0 -0
- /package/components/link/{class.js → link.class.js} +0 -0
- /package/components/list/{class.js → list.class.js} +0 -0
- /package/components/menu/{class.js → menu.class.js} +0 -0
- /package/components/nav/{class.js → nav.class.js} +0 -0
- /package/components/nav-group/{class.js → nav-group.class.js} +0 -0
- /package/components/nav-item/{class.js → nav-item.class.js} +0 -0
- /package/components/noodles/{class.js → noodles.class.js} +0 -0
- /package/components/option-card/{class.js → option-card.class.js} +0 -0
- /package/components/otp-input/{class.js → otp-input.class.js} +0 -0
- /package/components/page/{class.js → page.class.js} +0 -0
- /package/components/pagination/{class.js → pagination.class.js} +0 -0
- /package/components/pane/{class.js → pane.class.js} +0 -0
- /package/components/pipeline-status/{class.js → pipeline-status.class.js} +0 -0
- /package/components/popover/{class.js → popover.class.js} +0 -0
- /package/components/progress/{class.js → progress.class.js} +0 -0
- /package/components/progress-row/{class.js → progress-row.class.js} +0 -0
- /package/components/radio/{class.js → radio.class.js} +0 -0
- /package/components/range/{class.js → range.class.js} +0 -0
- /package/components/rating/{class.js → rating.class.js} +0 -0
- /package/components/richtext/{class.js → richtext.class.js} +0 -0
- /package/components/row/{class.js → row.class.js} +0 -0
- /package/components/search/{class.js → search.class.js} +0 -0
- /package/components/segment/{class.js → segment.class.js} +0 -0
- /package/components/segmented/{class.js → segmented.class.js} +0 -0
- /package/components/skeleton/{class.js → skeleton.class.js} +0 -0
- /package/components/slider/{class.js → slider.class.js} +0 -0
- /package/components/stack/{class.js → stack.class.js} +0 -0
- /package/components/step-progress/{class.js → step-progress.class.js} +0 -0
- /package/components/stepper/{class.js → stepper.class.js} +0 -0
- /package/components/stream/{class.js → stream.class.js} +0 -0
- /package/components/swatch/{class.js → swatch.class.js} +0 -0
- /package/components/swiper/{class.js → swiper.class.js} +0 -0
- /package/components/switch/{class.js → switch.class.js} +0 -0
- /package/components/table/{class.js → table.class.js} +0 -0
- /package/components/tabs/{class.js → tabs.class.js} +0 -0
- /package/components/tag/{class.js → tag.class.js} +0 -0
- /package/components/text/{class.js → text.class.js} +0 -0
- /package/components/textarea/{class.js → textarea.class.js} +0 -0
- /package/components/toast/{class.js → toast.class.js} +0 -0
- /package/components/toggle-group/{class.js → toggle-group.class.js} +0 -0
- /package/components/toggle-scheme/{class.js → toggle-scheme.class.js} +0 -0
- /package/components/toolbar/{class.js → toolbar.class.js} +0 -0
- /package/components/tooltip/{class.js → tooltip.class.js} +0 -0
- /package/components/tree/{class.js → tree.class.js} +0 -0
- /package/components/upload/{class.js → upload.class.js} +0 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Hand-authored per SPEC-034 (docs/specs/implementation-ready/SPEC-034-loading-overlay.md).
|
|
2
|
+
# Edit this file; run `npm run build:components` to regenerate loading-overlay.a2ui.json.
|
|
3
|
+
$schema: ../../../../scripts/schemas/component.yaml.schema.json
|
|
4
|
+
name: UILoadingOverlay
|
|
5
|
+
tag: loading-overlay-ui
|
|
6
|
+
status: stable
|
|
7
|
+
component: LoadingOverlay
|
|
8
|
+
category: feedback
|
|
9
|
+
version: 1
|
|
10
|
+
description: >-
|
|
11
|
+
Container-scoped busy overlay. Covers a positioned parent region with a
|
|
12
|
+
centered spinner (auto-stamped) or slotted indicator (skeleton-ui,
|
|
13
|
+
progress-ui, custom) while async work is in flight. Wires aria-busy
|
|
14
|
+
onto the parent on connect; applies a [delay] grace window to avoid
|
|
15
|
+
flash on fast loads. For viewport-scoped / route loaders use a
|
|
16
|
+
dedicated route-loader pattern; for submit-button busy use
|
|
17
|
+
<button-ui loading>.
|
|
18
|
+
props:
|
|
19
|
+
active:
|
|
20
|
+
description: When set, overlay is visible and the parent container is marked aria-busy. Toggle from consumer code; default hidden.
|
|
21
|
+
type: boolean
|
|
22
|
+
default: false
|
|
23
|
+
reflect: true
|
|
24
|
+
dynamic: true
|
|
25
|
+
delay:
|
|
26
|
+
description: Suppress the overlay until this many ms elapse. Prevents flash on fast loads. Default 200ms.
|
|
27
|
+
type: number
|
|
28
|
+
default: 200
|
|
29
|
+
reflect: true
|
|
30
|
+
dynamic: true
|
|
31
|
+
label:
|
|
32
|
+
description: Accessible operation name used by the host aria-label and forwarded to the auto-stamped spinner.
|
|
33
|
+
type: string
|
|
34
|
+
default: Loading…
|
|
35
|
+
reflect: true
|
|
36
|
+
dynamic: true
|
|
37
|
+
variant:
|
|
38
|
+
description: Backdrop treatment — default (muted scrim), transparent (no backdrop fill — useful with full-area skeleton indicators), blur (light scrim with backdrop-filter blur).
|
|
39
|
+
type: string
|
|
40
|
+
default: default
|
|
41
|
+
enum:
|
|
42
|
+
- default
|
|
43
|
+
- transparent
|
|
44
|
+
- blur
|
|
45
|
+
reflect: true
|
|
46
|
+
dynamic: true
|
|
47
|
+
events: {}
|
|
48
|
+
slots:
|
|
49
|
+
default:
|
|
50
|
+
description: Busy indicator content — <spinner-ui>, <skeleton-ui>, <progress-ui>, or custom. If empty, a centered <spinner-ui size="lg"> is auto-stamped.
|
|
51
|
+
states:
|
|
52
|
+
- name: idle
|
|
53
|
+
description: Default, hidden. Parent interactive.
|
|
54
|
+
- name: active
|
|
55
|
+
description: Overlay visible; parent has aria-busy="true".
|
|
56
|
+
attribute: active
|
|
57
|
+
traits: []
|
|
58
|
+
tokens:
|
|
59
|
+
--loading-overlay-bg:
|
|
60
|
+
description: Backdrop fill color. Default uses the generic neutral scrim token.
|
|
61
|
+
default: var(--a-scrim-default)
|
|
62
|
+
--loading-overlay-radius:
|
|
63
|
+
description: Backdrop corner radius. Matches the parent surface by default.
|
|
64
|
+
default: var(--a-radius-md)
|
|
65
|
+
--loading-overlay-z:
|
|
66
|
+
description: Stacking order. Sits above sibling content, below modal-ui (which uses ::backdrop on top-layer dialog).
|
|
67
|
+
default: '50'
|
|
68
|
+
--loading-overlay-duration:
|
|
69
|
+
description: Fade in / fade out duration.
|
|
70
|
+
default: var(--a-duration)
|
|
71
|
+
--loading-overlay-easing:
|
|
72
|
+
description: Fade easing curve.
|
|
73
|
+
default: var(--a-easing-out)
|
|
74
|
+
--loading-overlay-gap:
|
|
75
|
+
description: Vertical gap between the indicator and any sibling content (e.g. label, skeleton stack).
|
|
76
|
+
default: var(--a-space-3)
|
|
77
|
+
a2ui:
|
|
78
|
+
rules:
|
|
79
|
+
- >-
|
|
80
|
+
<LoadingOverlay> MUST be placed inside a sized container with
|
|
81
|
+
content (Card, Section, Table body, Chart). It absolutely positions
|
|
82
|
+
against the nearest positioned ancestor. The parent's CSS must
|
|
83
|
+
include `position: relative` (or any non-static positioning) — the
|
|
84
|
+
component does not mutate parent layout styles.
|
|
85
|
+
- >-
|
|
86
|
+
Toggle <LoadingOverlay active> from consumer code while async work
|
|
87
|
+
is in flight. The overlay applies aria-busy="true" to its parent
|
|
88
|
+
while active; on dismiss, both inert and aria-busy are released.
|
|
89
|
+
- >-
|
|
90
|
+
The [delay] grace window (default 200ms) suppresses paint on
|
|
91
|
+
fast-resolving loads. For server-rendered "definitely-slow" states
|
|
92
|
+
(>1s known wait) consider [delay="0"] for immediate feedback.
|
|
93
|
+
- >-
|
|
94
|
+
Do NOT use as a page-level / viewport loader — use a dedicated
|
|
95
|
+
route-loader pattern. <LoadingOverlay> is container-scoped.
|
|
96
|
+
- >-
|
|
97
|
+
Do NOT nest <LoadingOverlay> inside <Modal> or <Drawer> — those
|
|
98
|
+
primitives own their own busy state. When they support it, pass
|
|
99
|
+
[loading] to those directly.
|
|
100
|
+
- >-
|
|
101
|
+
Do NOT use <LoadingOverlay> to disable a form during submit — use
|
|
102
|
+
<Button type="submit" loading> for the submit affordance.
|
|
103
|
+
- >-
|
|
104
|
+
The default slot accepts any busy indicator. When empty, a
|
|
105
|
+
centered <Spinner size="lg"> is auto-stamped. Slot a <Skeleton>
|
|
106
|
+
stack for placeholder-shaped loading; slot <Progress value=…> when
|
|
107
|
+
the wait is determinate.
|
|
108
|
+
anti_patterns:
|
|
109
|
+
- wrong: |
|
|
110
|
+
{"component": "Page", "children": [
|
|
111
|
+
{"component": "LoadingOverlay", "active": true}
|
|
112
|
+
]}
|
|
113
|
+
why: |
|
|
114
|
+
LoadingOverlay is container-scoped. Attaching it directly to Page
|
|
115
|
+
covers the entire viewport but lacks the route-loader's wiring
|
|
116
|
+
(skeleton routing, route-level animation). Use the route loader.
|
|
117
|
+
fix: |
|
|
118
|
+
{"component": "Card", "children": [
|
|
119
|
+
{"component": "LoadingOverlay", "active": true},
|
|
120
|
+
{"component": "Table", "data-stream-src": "..."}
|
|
121
|
+
]}
|
|
122
|
+
- wrong: |
|
|
123
|
+
{"component": "Modal", "open": true, "children": [
|
|
124
|
+
{"component": "LoadingOverlay", "active": true}
|
|
125
|
+
]}
|
|
126
|
+
why: |
|
|
127
|
+
Modal owns its own busy state and focus trap; nesting a
|
|
128
|
+
LoadingOverlay introduces two competing inert toggles.
|
|
129
|
+
fix: |
|
|
130
|
+
{"component": "Modal", "open": true, "loading": true}
|
|
131
|
+
- wrong: |
|
|
132
|
+
{"component": "Form", "children": [
|
|
133
|
+
{"component": "Button", "text": "Submit", "type": "submit"},
|
|
134
|
+
{"component": "LoadingOverlay", "active": true}
|
|
135
|
+
]}
|
|
136
|
+
why: |
|
|
137
|
+
A form-submit affordance belongs on the button itself, not as an
|
|
138
|
+
overlay over the entire form region. Use Button[loading].
|
|
139
|
+
fix: |
|
|
140
|
+
{"component": "Form", "children": [
|
|
141
|
+
{"component": "Button", "text": "Submitting", "type": "submit", "loading": true, "disabled": true}
|
|
142
|
+
]}
|
|
143
|
+
examples:
|
|
144
|
+
- name: card-with-loading-table
|
|
145
|
+
description: Card containing a table that loads on mount; the overlay covers the card's body while data streams.
|
|
146
|
+
a2ui: >-
|
|
147
|
+
[
|
|
148
|
+
{
|
|
149
|
+
"id": "card",
|
|
150
|
+
"component": "Card",
|
|
151
|
+
"children": ["sec"]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "sec",
|
|
155
|
+
"component": "Section",
|
|
156
|
+
"children": ["overlay", "table"]
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "overlay",
|
|
160
|
+
"component": "LoadingOverlay",
|
|
161
|
+
"active": true,
|
|
162
|
+
"label": "Loading orders…"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "table",
|
|
166
|
+
"component": "Table",
|
|
167
|
+
"data-stream-src": "/api/orders"
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
- name: skeleton-overlay
|
|
171
|
+
description: Skeleton-shaped placeholder overlay using the transparent variant — slot a stack of <Skeleton> rows.
|
|
172
|
+
a2ui: >-
|
|
173
|
+
[
|
|
174
|
+
{
|
|
175
|
+
"id": "ov",
|
|
176
|
+
"component": "LoadingOverlay",
|
|
177
|
+
"active": true,
|
|
178
|
+
"variant": "transparent",
|
|
179
|
+
"label": "Loading content…",
|
|
180
|
+
"children": ["sk-stack"]
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"id": "sk-stack",
|
|
184
|
+
"component": "Column",
|
|
185
|
+
"gap": "2",
|
|
186
|
+
"children": ["sk1", "sk2", "sk3"]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": "sk1",
|
|
190
|
+
"component": "Skeleton",
|
|
191
|
+
"width": "100%",
|
|
192
|
+
"height": "1rem"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "sk2",
|
|
196
|
+
"component": "Skeleton",
|
|
197
|
+
"width": "80%",
|
|
198
|
+
"height": "1rem"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "sk3",
|
|
202
|
+
"component": "Skeleton",
|
|
203
|
+
"width": "60%",
|
|
204
|
+
"height": "1rem"
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
- name: fast-load-no-flash
|
|
208
|
+
description: Overlay with the default 200ms grace window. If the underlying load resolves in less than 200ms, the overlay never paints.
|
|
209
|
+
a2ui: >-
|
|
210
|
+
[
|
|
211
|
+
{
|
|
212
|
+
"id": "ov",
|
|
213
|
+
"component": "LoadingOverlay",
|
|
214
|
+
"active": true,
|
|
215
|
+
"delay": 200,
|
|
216
|
+
"label": "Loading"
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
keywords:
|
|
220
|
+
- loading
|
|
221
|
+
- overlay
|
|
222
|
+
- busy
|
|
223
|
+
- spinner
|
|
224
|
+
- skeleton
|
|
225
|
+
- placeholder
|
|
226
|
+
- feedback
|
|
227
|
+
- progress
|
|
228
|
+
- indicator
|
|
229
|
+
- wait
|
|
230
|
+
synonyms:
|
|
231
|
+
loading:
|
|
232
|
+
- loading
|
|
233
|
+
- overlay
|
|
234
|
+
- busy
|
|
235
|
+
- spinner
|
|
236
|
+
- skeleton
|
|
237
|
+
overlay:
|
|
238
|
+
- loading
|
|
239
|
+
- overlay
|
|
240
|
+
- busy
|
|
241
|
+
busy:
|
|
242
|
+
- loading
|
|
243
|
+
- overlay
|
|
244
|
+
- busy
|
|
245
|
+
- spinner
|
|
246
|
+
spinner:
|
|
247
|
+
- loading
|
|
248
|
+
- overlay
|
|
249
|
+
- spinner
|
|
250
|
+
loader:
|
|
251
|
+
- loading
|
|
252
|
+
- overlay
|
|
253
|
+
- spinner
|
|
254
|
+
related:
|
|
255
|
+
- Spinner
|
|
256
|
+
- Skeleton
|
|
257
|
+
- Progress
|
|
258
|
+
- Card
|
|
259
|
+
- Table
|
|
260
|
+
- Modal
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
2
2
|
#
|
|
3
3
|
# §228 (v0.5.9): authored to close the §229 baseline class-export-undeclared
|
|
4
|
-
# drift for UIMenuDivider. Ships as a sibling class in menu/class.js +
|
|
4
|
+
# drift for UIMenuDivider. Ships as a sibling class in menu/menu.class.js +
|
|
5
5
|
# is registered alongside UIMenu + UIMenuItem.
|
|
6
6
|
|
|
7
7
|
# Child component of <menu-ui>. Surface only inside that parent.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Edit this file; run `npm run build:components` to regenerate a2ui.json.
|
|
2
2
|
#
|
|
3
3
|
# §228 (v0.5.9): authored to close the §229 baseline class-export-undeclared
|
|
4
|
-
# drift for UIMenuItem. The item ships as a sibling class in menu/class.js
|
|
4
|
+
# drift for UIMenuItem. The item ships as a sibling class in menu/menu.class.js
|
|
5
5
|
# + is registered alongside UIMenu + UIMenuDivider.
|
|
6
6
|
|
|
7
7
|
# Child component of <menu-ui>. Surface only inside that parent.
|
|
@@ -91,6 +91,9 @@
|
|
|
91
91
|
"slots": {
|
|
92
92
|
"default": {
|
|
93
93
|
"description": "Menu items with role=\"menuitem\" and optional <hr> dividers"
|
|
94
|
+
},
|
|
95
|
+
"trigger": {
|
|
96
|
+
"description": "Required. Focusable element that opens the menu when activated. Exactly one child must have slot=\"trigger\" — typically <button-ui>, but any focusable element works. Without it the menu cannot open via keyboard or pointer. Lives in light DOM; the items are hoisted to a top-layer popover on open."
|
|
94
97
|
}
|
|
95
98
|
},
|
|
96
99
|
"states": [
|
package/components/menu/menu.css
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
@scope (menu-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
|
-
--menu-popover-padding: var(--a-space-1);
|
|
4
|
-
--menu-popover-border: var(--a-border-subtle);
|
|
5
|
-
--menu-popover-radius: var(--a-radius-lg);
|
|
6
|
-
--menu-popover-bg: var(--a-bg-subtle);
|
|
7
|
-
--menu-popover-shadow: var(--a-shadow-lg);
|
|
8
|
-
--menu-popover-min-width: 10rem;
|
|
9
|
-
--menu-popover-font-size: var(--a-ui-size);
|
|
10
|
-
--menu-popover-fg: var(--a-fg);
|
|
3
|
+
--menu-popover-padding-default: var(--a-space-1);
|
|
4
|
+
--menu-popover-border-default: var(--a-border-subtle);
|
|
5
|
+
--menu-popover-radius-default: var(--a-radius-lg);
|
|
6
|
+
--menu-popover-bg-default: var(--a-bg-subtle);
|
|
7
|
+
--menu-popover-shadow-default: var(--a-shadow-lg);
|
|
8
|
+
--menu-popover-min-width-default: 10rem;
|
|
9
|
+
--menu-popover-font-size-default: var(--a-ui-size);
|
|
10
|
+
--menu-popover-fg-default: var(--a-fg);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
:scope {
|
package/components/menu/menu.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { defineIfFree } from '../../core/register.js';
|
|
13
|
-
import { UIMenu, UIMenuItem, UIMenuDivider } from './class.js';
|
|
13
|
+
import { UIMenu, UIMenuItem, UIMenuDivider } from './menu.class.js';
|
|
14
14
|
|
|
15
15
|
defineIfFree('menu-ui', UIMenu);
|
|
16
16
|
defineIfFree('menu-item-ui', UIMenuItem);
|
|
@@ -42,6 +42,13 @@ events:
|
|
|
42
42
|
type: string
|
|
43
43
|
description: Menu item text.
|
|
44
44
|
slots:
|
|
45
|
+
trigger:
|
|
46
|
+
description: >-
|
|
47
|
+
Required. Focusable element that opens the menu when activated.
|
|
48
|
+
Exactly one child must have slot="trigger" — typically <button-ui>,
|
|
49
|
+
but any focusable element works. Without it the menu cannot open
|
|
50
|
+
via keyboard or pointer. Lives in light DOM; the items are
|
|
51
|
+
hoisted to a top-layer popover on open.
|
|
45
52
|
default:
|
|
46
53
|
description: Menu items with role="menuitem" and optional <hr> dividers
|
|
47
54
|
states:
|
|
@@ -142,7 +142,18 @@ export class UIModal extends UIElement {
|
|
|
142
142
|
|
|
143
143
|
const header = this.ensure('header');
|
|
144
144
|
if (header.parentElement !== panel) panel.prepend(header);
|
|
145
|
-
|
|
145
|
+
// Only set `text=` when actually present — the CSS rule
|
|
146
|
+
// `:scope [slot="header"][text]:not([text=""])::before { content: attr(text); flex: 1 }`
|
|
147
|
+
// generates a flex:1 pseudo-element. Setting `text=""` unconditionally
|
|
148
|
+
// creates a phantom flex slot that pushes slotted title content
|
|
149
|
+
// (e.g., confirm-dialog-ui's stamped <text-ui slot="heading">) to the
|
|
150
|
+
// trailing edge of the header row. Defense-in-depth alongside the
|
|
151
|
+
// CSS gate.
|
|
152
|
+
if (this.text) {
|
|
153
|
+
header.setAttribute('text', this.text);
|
|
154
|
+
} else {
|
|
155
|
+
header.removeAttribute('text');
|
|
156
|
+
}
|
|
146
157
|
|
|
147
158
|
if (!this.permanent) {
|
|
148
159
|
const close = this.ensure('close');
|
|
@@ -9,24 +9,24 @@
|
|
|
9
9
|
|
|
10
10
|
@scope (modal-ui) {
|
|
11
11
|
:where(:scope) {
|
|
12
|
-
--modal-width: 32rem;
|
|
13
|
-
--modal-radius: var(--a-radius-lg);
|
|
14
|
-
--modal-bg: var(--a-bg-subtle);
|
|
15
|
-
--modal-border: var(--a-border-subtle);
|
|
16
|
-
--modal-shadow: var(--a-shadow-lg);
|
|
17
|
-
--modal-backdrop: var(--a-scrim-dialog);
|
|
18
|
-
--modal-duration: var(--a-duration);
|
|
19
|
-
--modal-easing: var(--a-easing-out);
|
|
20
|
-
--modal-heading-size: var(--a-ui-lg);
|
|
21
|
-
--modal-heading-weight: var(--a-weight-semibold);
|
|
22
|
-
--modal-header-fg: var(--a-fg);
|
|
23
|
-
--modal-close-fg: var(--a-fg-muted);
|
|
24
|
-
--modal-close-hover: var(--a-fg);
|
|
25
|
-
--modal-pad-header: var(--a-space-3);
|
|
26
|
-
--modal-pad-body: var(--a-space-4);
|
|
27
|
-
--modal-pad-footer: var(--a-space-3);
|
|
28
|
-
--modal-font-family: var(--a-font-family);
|
|
29
|
-
--modal-footer-gap: var(--a-space-2);
|
|
12
|
+
--modal-width-default: 32rem;
|
|
13
|
+
--modal-radius-default: var(--a-radius-lg);
|
|
14
|
+
--modal-bg-default: var(--a-bg-subtle);
|
|
15
|
+
--modal-border-default: var(--a-border-subtle);
|
|
16
|
+
--modal-shadow-default: var(--a-shadow-lg);
|
|
17
|
+
--modal-backdrop-default: var(--a-scrim-dialog);
|
|
18
|
+
--modal-duration-default: var(--a-duration);
|
|
19
|
+
--modal-easing-default: var(--a-easing-out);
|
|
20
|
+
--modal-heading-size-default: var(--a-ui-lg);
|
|
21
|
+
--modal-heading-weight-default: var(--a-weight-semibold);
|
|
22
|
+
--modal-header-fg-default: var(--a-fg);
|
|
23
|
+
--modal-close-fg-default: var(--a-fg-muted);
|
|
24
|
+
--modal-close-hover-default: var(--a-fg);
|
|
25
|
+
--modal-pad-header-default: var(--a-space-3);
|
|
26
|
+
--modal-pad-body-default: var(--a-space-4);
|
|
27
|
+
--modal-pad-footer-default: var(--a-space-3);
|
|
28
|
+
--modal-font-family-default: var(--a-font-family);
|
|
29
|
+
--modal-footer-gap-default: var(--a-space-2);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
:scope {
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/* ── Size variants ── */
|
|
38
|
-
:scope[size="sm"] { --modal-width: min(24rem, 90vw); }
|
|
39
|
-
:scope[size="md"] { --modal-width: min(32rem, 90vw); }
|
|
40
|
-
:scope[size="lg"] { --modal-width: min(48rem, 90vw); }
|
|
38
|
+
:scope[size="sm"] { --modal-width-default: min(24rem, 90vw); }
|
|
39
|
+
:scope[size="md"] { --modal-width-default: min(32rem, 90vw); }
|
|
40
|
+
:scope[size="lg"] { --modal-width-default: min(48rem, 90vw); }
|
|
41
41
|
|
|
42
42
|
/* ═══════ Closed ═══════ */
|
|
43
43
|
:scope > [slot="dialog"]:not([open]) { display: none; }
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
|
|
64
64
|
/* ═══════ Backdrop ═══════ */
|
|
65
65
|
:scope > [slot="dialog"]::backdrop {
|
|
66
|
-
background: var(--modal-backdrop);
|
|
66
|
+
background: var(--modal-backdrop, var(--modal-backdrop-default));
|
|
67
67
|
opacity: 0;
|
|
68
|
-
transition: opacity var(--modal-duration) var(--modal-easing);
|
|
68
|
+
transition: opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
|
|
69
69
|
}
|
|
70
70
|
:scope > [slot="dialog"][data-open]::backdrop { opacity: 1; }
|
|
71
71
|
:scope > [slot="dialog"][data-closing]::backdrop { opacity: 0; }
|
|
@@ -75,14 +75,14 @@
|
|
|
75
75
|
box-sizing: border-box;
|
|
76
76
|
display: flex;
|
|
77
77
|
flex-direction: column;
|
|
78
|
-
width: var(--modal-width);
|
|
78
|
+
width: var(--modal-width, var(--modal-width-default));
|
|
79
79
|
max-height: 85vh;
|
|
80
|
-
background: var(--modal-bg);
|
|
81
|
-
color: var(--modal-header-fg);
|
|
82
|
-
font-family: var(--modal-font-family);
|
|
83
|
-
border: 1px solid var(--modal-border);
|
|
84
|
-
border-radius: var(--modal-radius);
|
|
85
|
-
box-shadow: var(--modal-shadow);
|
|
80
|
+
background: var(--modal-bg, var(--modal-bg-default));
|
|
81
|
+
color: var(--modal-header-fg, var(--modal-header-fg-default));
|
|
82
|
+
font-family: var(--modal-font-family, var(--modal-font-family-default));
|
|
83
|
+
border: 1px solid var(--modal-border, var(--modal-border-default));
|
|
84
|
+
border-radius: var(--modal-radius, var(--modal-radius-default));
|
|
85
|
+
box-shadow: var(--modal-shadow, var(--modal-shadow-default));
|
|
86
86
|
overflow: hidden;
|
|
87
87
|
opacity: 0;
|
|
88
88
|
transform: scale(0.95);
|
|
@@ -90,16 +90,16 @@
|
|
|
90
90
|
|
|
91
91
|
/* ═══════ Open animation ═══════ */
|
|
92
92
|
:scope > [slot="dialog"][data-open] > [slot="panel"] {
|
|
93
|
-
transition: transform var(--modal-duration) var(--modal-easing),
|
|
94
|
-
opacity var(--modal-duration) var(--modal-easing);
|
|
93
|
+
transition: transform var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default)),
|
|
94
|
+
opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
|
|
95
95
|
transform: scale(1);
|
|
96
96
|
opacity: 1;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
/* ═══════ Close animation ═══════ */
|
|
100
100
|
:scope > [slot="dialog"][data-closing] > [slot="panel"] {
|
|
101
|
-
transition: transform var(--modal-duration) var(--modal-easing),
|
|
102
|
-
opacity var(--modal-duration) var(--modal-easing);
|
|
101
|
+
transition: transform var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default)),
|
|
102
|
+
opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
|
|
103
103
|
transform: scale(0.95);
|
|
104
104
|
opacity: 0;
|
|
105
105
|
}
|
|
@@ -109,14 +109,24 @@
|
|
|
109
109
|
display: flex;
|
|
110
110
|
align-items: center;
|
|
111
111
|
justify-content: space-between;
|
|
112
|
-
padding: var(--modal-pad-header) var(--modal-pad-body);
|
|
113
|
-
border-bottom: 1px solid var(--modal-border);
|
|
114
|
-
font-size: var(--modal-heading-size);
|
|
115
|
-
font-weight: var(--modal-heading-weight);
|
|
116
|
-
color: var(--modal-header-fg);
|
|
112
|
+
padding: var(--modal-pad-header, var(--modal-pad-header-default)) var(--modal-pad-body, var(--modal-pad-body-default));
|
|
113
|
+
border-bottom: 1px solid var(--modal-border, var(--modal-border-default));
|
|
114
|
+
font-size: var(--modal-heading-size, var(--modal-heading-size-default));
|
|
115
|
+
font-weight: var(--modal-heading-weight, var(--modal-heading-weight-default));
|
|
116
|
+
color: var(--modal-header-fg, var(--modal-header-fg-default));
|
|
117
117
|
flex-shrink: 0;
|
|
118
118
|
}
|
|
119
|
-
|
|
119
|
+
/* `[text]` gate — same drift class as button-ui / tag-ui / badge-ui /
|
|
120
|
+
segment-ui (Apr-May 2026 phantom-gap arc). Without the `[text]`
|
|
121
|
+
attribute selector, an empty `attr(text)` still generates a
|
|
122
|
+
pseudo-element with `flex: 1` — it claims the row's free space and
|
|
123
|
+
pushes any slotted title text-ui / icon-ui to the trailing edge,
|
|
124
|
+
leaving only the close button on the right looking like the title.
|
|
125
|
+
Gated on `[text]:not([text=""])` because modal/modal.class.js sets
|
|
126
|
+
`header.setAttribute('text', this.text)` unconditionally; the
|
|
127
|
+
defensive selector + class skip (see modal/modal.class.js render())
|
|
128
|
+
close the same trap from both directions. */
|
|
129
|
+
:scope [slot="header"][text]:not([text=""])::before {
|
|
120
130
|
content: attr(text);
|
|
121
131
|
flex: 1;
|
|
122
132
|
}
|
|
@@ -128,7 +138,7 @@
|
|
|
128
138
|
|
|
129
139
|
/* ═══════ Body ═══════ */
|
|
130
140
|
:scope [slot="body"] {
|
|
131
|
-
padding: var(--modal-pad-body);
|
|
141
|
+
padding: var(--modal-pad-body, var(--modal-pad-body-default));
|
|
132
142
|
flex: 1;
|
|
133
143
|
overflow: auto;
|
|
134
144
|
}
|
|
@@ -138,9 +148,9 @@
|
|
|
138
148
|
display: flex;
|
|
139
149
|
align-items: center;
|
|
140
150
|
justify-content: flex-end;
|
|
141
|
-
gap: var(--modal-footer-gap);
|
|
142
|
-
padding: var(--modal-pad-footer) var(--modal-pad-body);
|
|
143
|
-
border-top: 1px solid var(--modal-border);
|
|
151
|
+
gap: var(--modal-footer-gap, var(--modal-footer-gap-default));
|
|
152
|
+
padding: var(--modal-pad-footer, var(--modal-pad-footer-default)) var(--modal-pad-body, var(--modal-pad-body-default));
|
|
153
|
+
border-top: 1px solid var(--modal-border, var(--modal-border-default));
|
|
144
154
|
flex-shrink: 0;
|
|
145
155
|
}
|
|
146
156
|
}
|