@adia-ai/web-modules 0.8.36 → 0.8.37

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.
Files changed (89) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +3 -3
  3. package/agent-admin/admin-roster/admin-roster.js +1 -1
  4. package/agent-admin/admin-settings/admin-settings.js +1 -1
  5. package/agent-admin/agent-admin/agent-admin.js +1 -1
  6. package/billing/billing-overview/billing-overview.a2ui.json +281 -0
  7. package/billing/billing-overview/billing-overview.class.js +838 -0
  8. package/billing/billing-overview/billing-overview.css +223 -0
  9. package/billing/billing-overview/billing-overview.js +16 -0
  10. package/billing/billing-overview/billing-overview.yaml +441 -0
  11. package/billing/index.js +21 -0
  12. package/billing/invoice-detail/invoice-detail.a2ui.json +276 -0
  13. package/billing/invoice-detail/invoice-detail.class.js +711 -0
  14. package/billing/invoice-detail/invoice-detail.css +305 -0
  15. package/billing/invoice-detail/invoice-detail.js +16 -0
  16. package/billing/invoice-detail/invoice-detail.yaml +411 -0
  17. package/billing/invoice-history/invoice-history.a2ui.json +315 -0
  18. package/billing/invoice-history/invoice-history.class.js +672 -0
  19. package/billing/invoice-history/invoice-history.css +130 -0
  20. package/billing/invoice-history/invoice-history.js +16 -0
  21. package/billing/invoice-history/invoice-history.yaml +398 -0
  22. package/billing/payment-method-form/payment-method-form.a2ui.json +310 -0
  23. package/billing/payment-method-form/payment-method-form.class.js +886 -0
  24. package/billing/payment-method-form/payment-method-form.css +149 -0
  25. package/billing/payment-method-form/payment-method-form.js +16 -0
  26. package/billing/payment-method-form/payment-method-form.yaml +430 -0
  27. package/billing/payment-method-list/payment-method-list.a2ui.json +283 -0
  28. package/billing/payment-method-list/payment-method-list.class.js +705 -0
  29. package/billing/payment-method-list/payment-method-list.css +128 -0
  30. package/billing/payment-method-list/payment-method-list.js +16 -0
  31. package/billing/payment-method-list/payment-method-list.yaml +355 -0
  32. package/billing/plan-picker/plan-picker.a2ui.json +349 -0
  33. package/billing/plan-picker/plan-picker.class.js +635 -0
  34. package/billing/plan-picker/plan-picker.css +227 -0
  35. package/billing/plan-picker/plan-picker.js +16 -0
  36. package/billing/plan-picker/plan-picker.yaml +453 -0
  37. package/chat/README.md +1 -1
  38. package/chat/chat-composer/chat-composer.js +2 -2
  39. package/chat/chat-empty/chat-empty.js +2 -2
  40. package/chat/chat-shell/chat-shell.js +4 -4
  41. package/chat/chat-sidebar/chat-sidebar.js +2 -2
  42. package/chat/chat-surfaces/chat-surfaces.js +2 -2
  43. package/chat/chat-thread/chat-thread.js +2 -2
  44. package/dashboard/dashboard-layout/dashboard-layout.a2ui.json +254 -0
  45. package/dashboard/dashboard-layout/dashboard-layout.css +190 -0
  46. package/dashboard/dashboard-layout/dashboard-layout.js +289 -0
  47. package/dashboard/dashboard-layout/dashboard-layout.yaml +374 -0
  48. package/dashboard/date-range-selector/date-range-selector.a2ui.json +236 -0
  49. package/dashboard/date-range-selector/date-range-selector.css +84 -0
  50. package/dashboard/date-range-selector/date-range-selector.js +686 -0
  51. package/dashboard/date-range-selector/date-range-selector.yaml +358 -0
  52. package/dashboard/index.js +14 -0
  53. package/dist/everything.min.js +1 -1
  54. package/editor/editor-canvas/editor-canvas.js +2 -2
  55. package/editor/editor-shell/editor-shell.js +2 -2
  56. package/editor/editor-sidebar/editor-sidebar.js +2 -2
  57. package/editor/editor-toolbar/editor-toolbar.js +2 -2
  58. package/feedback/confirm-dialog/confirm-dialog.a2ui.json +206 -0
  59. package/feedback/confirm-dialog/confirm-dialog.css +157 -0
  60. package/feedback/confirm-dialog/confirm-dialog.js +383 -0
  61. package/feedback/confirm-dialog/confirm-dialog.yaml +297 -0
  62. package/feedback/index.js +10 -0
  63. package/form/form-popover/form-popover.js +1 -1
  64. package/generative/index.d.ts +1 -1
  65. package/generative/index.js +2 -2
  66. package/onboarding/index.js +1 -0
  67. package/onboarding/onboarding-checklist/onboarding-checklist.a2ui.json +263 -0
  68. package/onboarding/onboarding-checklist/onboarding-checklist.css +157 -0
  69. package/onboarding/onboarding-checklist/onboarding-checklist.js +428 -0
  70. package/onboarding/onboarding-checklist/onboarding-checklist.yaml +236 -0
  71. package/package.json +99 -6
  72. package/runtime/a2ui-root/a2ui-root.js +3 -3
  73. package/runtime/gen-root/gen-root.js +5 -5
  74. package/settings/index.js +12 -0
  75. package/settings/integrations-page/integrations-page.a2ui.json +274 -0
  76. package/settings/integrations-page/integrations-page.css +177 -0
  77. package/settings/integrations-page/integrations-page.d.ts +77 -0
  78. package/settings/integrations-page/integrations-page.js +413 -0
  79. package/settings/integrations-page/integrations-page.yaml +317 -0
  80. package/settings/notification-preferences/notification-preferences.a2ui.json +245 -0
  81. package/settings/notification-preferences/notification-preferences.css +204 -0
  82. package/settings/notification-preferences/notification-preferences.js +622 -0
  83. package/settings/notification-preferences/notification-preferences.yaml +358 -0
  84. package/shell/admin-command/admin-command.js +2 -2
  85. package/shell/admin-shell/admin-shell.js +2 -2
  86. package/shell/admin-sidebar/admin-sidebar.js +2 -2
  87. package/shell/embed-shell/embed-shell.js +3 -3
  88. package/simple/simple-shell/simple-shell.js +1 -1
  89. package/theme/theme-panel/theme-panel.js +2 -2
@@ -0,0 +1,206 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://adiaui.dev/a2ui/v0_9/components/ConfirmDialog.json",
4
+ "title": "ConfirmDialog",
5
+ "description": "Non-destructive yes/no confirmation dialog — a thin composite over\n<modal-ui> that pre-stamps the canonical confirm shape: header (title\n+ optional icon), body (description + optional rich slot), and\nfooter (cancel + confirm buttons). Wires Cancel-default focus,\nconfirm / cancel / close events, and the [loading] in-flight state.\n\nUse confirm-dialog-ui for benign questions: \"Save changes?\", \"Switch\ntheme?\", \"Apply preset?\". For irreversible destructive operations\n(delete account, drop database, deploy to prod) use <alert-dialog-ui>\ninstead — it carries role=\"alertdialog\", danger chrome, and the\noptional typed-name speed-bump.\n\nComposed primitive: <modal-ui> owns the native <dialog>, focus trap,\nbackdrop, and Escape-dismiss. confirm-dialog-ui decorates; it does\nnot reimplement.\n\nSpec: .claude/docs/specs/implementation-ready/SPEC-049-confirm-dialog-yes-no.md.\n",
6
+ "type": "object",
7
+ "allOf": [
8
+ {
9
+ "$ref": "common_types.json#/$defs/ComponentCommon"
10
+ },
11
+ {
12
+ "$ref": "common_types.json#/$defs/CatalogComponentCommon"
13
+ }
14
+ ],
15
+ "properties": {
16
+ "title": {
17
+ "description": "Dialog title; rendered in the modal header via <modal-ui>[text]\nand announced through aria-labelledby on the inner <dialog>.\n",
18
+ "type": "string",
19
+ "default": ""
20
+ },
21
+ "description": {
22
+ "description": "Body description; rendered as a paragraph above any default-slot\ncontent. Wired as the aria-describedby target.\n",
23
+ "type": "string",
24
+ "default": ""
25
+ },
26
+ "cancel-text": {
27
+ "description": "Cancel button label. Defaults to \"Cancel\".",
28
+ "type": "string",
29
+ "default": "Cancel"
30
+ },
31
+ "component": {
32
+ "const": "ConfirmDialog"
33
+ },
34
+ "confirm-text": {
35
+ "description": "Primary action button label. Defaults to \"Confirm\".",
36
+ "type": "string",
37
+ "default": "Confirm"
38
+ },
39
+ "confirm-variant": {
40
+ "description": "Tone of the confirm button. \"primary\" (default) for the typical\naffirmative-action case; \"ghost\" when both choices are roughly\nbalanced and a tonal primary would over-weight the affirmative.\n",
41
+ "type": "string",
42
+ "enum": [
43
+ "primary",
44
+ "ghost"
45
+ ],
46
+ "default": "primary"
47
+ },
48
+ "icon": {
49
+ "description": "Optional Phosphor icon glyph stamped in the header. Opt-in —\nconsumer supplies the name (e.g. \"info\", \"question\"). When\nempty, no icon disc renders.\n",
50
+ "type": "string",
51
+ "default": ""
52
+ },
53
+ "loading": {
54
+ "description": "In-flight state. When set, both buttons disable and the confirm\nbutton shows a spinner — the consumer toggles [loading] off and\ncloses via [open]=false when the underlying action resolves.\n",
55
+ "type": "boolean",
56
+ "default": false
57
+ },
58
+ "open": {
59
+ "description": "Mirrors <modal-ui>[open]. Setting to true opens the dialog with\nentry animation; setting to false animates close.\n",
60
+ "type": "boolean",
61
+ "default": false
62
+ },
63
+ "size": {
64
+ "description": "Forwarded to <modal-ui>[size]. sm = ~24rem, md = ~32rem,\nlg = ~48rem. Confirm dialogs default to sm.\n",
65
+ "type": "string",
66
+ "enum": [
67
+ "sm",
68
+ "md",
69
+ "lg"
70
+ ],
71
+ "default": "sm"
72
+ }
73
+ },
74
+ "required": [
75
+ "component"
76
+ ],
77
+ "unevaluatedProperties": false,
78
+ "x-adiaui": {
79
+ "anti_patterns": [
80
+ {
81
+ "description": "Re-deriving the confirm shape from a raw <modal-ui> instead of using ConfirmDialog. The header/body/footer triplet, the Cancel-default focus, and the confirm/cancel event wiring all need to be re-authored, and the WAI-APG contract drifts per consumer.",
82
+ "right": "<confirm-dialog-ui open\n title=\"Save changes?\"\n description=\"Save changes before closing?\"\n confirm-text=\"Save\"\n cancel-text=\"Discard\">\n</confirm-dialog-ui>\n",
83
+ "rule": "Reach for ConfirmDialog (not raw Modal) for non-destructive yes/no prompts. The composite owns the contract.",
84
+ "wrong": "<modal-ui open size=\"sm\" text=\"Save?\">\n <p>Save changes before closing?</p>\n <footer>\n <button-ui variant=\"ghost\" text=\"Discard\"></button-ui>\n <button-ui variant=\"primary\" text=\"Save\"></button-ui>\n </footer>\n</modal-ui>\n"
85
+ },
86
+ {
87
+ "description": "Using ConfirmDialog for destructive irreversible operations. The primary-toned confirm button reads as benign and primes the user to click through; the WAI-APG `alertdialog` role + danger chrome live in AlertDialog for that reason.",
88
+ "right": "<alert-dialog-ui open\n title=\"Delete project?\"\n description=\"This is permanent.\"\n confirm-text=\"Delete\">\n</alert-dialog-ui>\n",
89
+ "rule": "Destructive intent → AlertDialog. Non-destructive intent → ConfirmDialog. The tag name carries the semantic; do not cross the streams.",
90
+ "wrong": "<confirm-dialog-ui open\n title=\"Delete project?\"\n description=\"This is permanent.\"\n confirm-text=\"Delete\">\n</confirm-dialog-ui>\n"
91
+ }
92
+ ],
93
+ "category": "feedback",
94
+ "composes": [
95
+ "modal-ui",
96
+ "button-ui",
97
+ "icon-ui",
98
+ "text-ui"
99
+ ],
100
+ "events": {
101
+ "cancel": {
102
+ "description": "Fired when the user activates the cancel button, presses Escape,\nor clicks the backdrop. Bubbles.\n",
103
+ "detail": {}
104
+ },
105
+ "close": {
106
+ "description": "Re-emitted from the underlying <modal-ui> when the dialog\nfinishes closing via any path. Bubbles.\n",
107
+ "detail": {}
108
+ },
109
+ "confirm": {
110
+ "description": "Fired when the user activates the confirm button. Bubbles.\nConsumer wires the actual action handler off this event.\n",
111
+ "detail": {}
112
+ }
113
+ },
114
+ "examples": [],
115
+ "keywords": [
116
+ "confirm",
117
+ "confirm-dialog",
118
+ "dialog",
119
+ "confirmation",
120
+ "yes-no",
121
+ "ok-cancel",
122
+ "save-confirm",
123
+ "prompt",
124
+ "dialog-modal"
125
+ ],
126
+ "name": "ConfirmDialog",
127
+ "related": [
128
+ "Modal",
129
+ "AlertDialog",
130
+ "Button",
131
+ "Icon",
132
+ "Text"
133
+ ],
134
+ "slots": {
135
+ "description": {
136
+ "description": "Override the stamped description line below the heading. Author-fills with richer markup when the [description] attribute isn't enough."
137
+ },
138
+ "default": {
139
+ "description": "Optional rich content rendered above the description — supplementary\nlists, hints, or markup the [description] string can't carry.\n"
140
+ },
141
+ "body": {
142
+ "description": "Dialog body region (between header and footer). For rich content — paragraphs, lists, embedded form fields. Distinct from [slot=\"default\"] which sits above [description] in the header region."
143
+ },
144
+ "footer": {
145
+ "description": "Wholesale override of the stamped footer (Cancel / Confirm action cluster). Use only for full custom-footer markup; otherwise the host's [cancel-text] / [confirm-text] / [confirm-variant] attrs drive the default footer rendering."
146
+ },
147
+ "header": {
148
+ "description": "Wholesale override of the stamped header (icon + heading + description cluster). Use only when full custom-header markup is needed; otherwise prefer the granular icon/heading/description slot overrides."
149
+ },
150
+ "heading": {
151
+ "description": "Override the stamped heading. Author-fillable when richer markup than the plain [text] string is needed (inline links, code spans, etc.)."
152
+ },
153
+ "icon": {
154
+ "description": "Override the [icon] glyph with a custom node (e.g. a colored\n<icon-ui>, an image, or arbitrary markup). Mutually exclusive\nwith [icon]; if a slot child is present, the [icon] attribute\nis ignored.\n"
155
+ }
156
+ },
157
+ "states": [
158
+ {
159
+ "description": "Default — closed, no <dialog> in the top layer.",
160
+ "name": "idle"
161
+ },
162
+ {
163
+ "description": "Visible in the top layer; focus trapped; Cancel focused by default.",
164
+ "attribute": "open",
165
+ "name": "open"
166
+ },
167
+ {
168
+ "description": "Both buttons disabled; confirm shows spinner.",
169
+ "attribute": "loading",
170
+ "name": "loading"
171
+ }
172
+ ],
173
+ "status": "stable",
174
+ "synonyms": {
175
+ "cancel": [
176
+ "dismiss",
177
+ "back",
178
+ "no"
179
+ ],
180
+ "confirm": [
181
+ "confirmation",
182
+ "prompt",
183
+ "ok",
184
+ "yes"
185
+ ],
186
+ "dialog": [
187
+ "modal",
188
+ "popup"
189
+ ]
190
+ },
191
+ "tag": "confirm-dialog-ui",
192
+ "tokens": {
193
+ "--confirm-dialog-confirm-bg": {
194
+ "description": "Confirm-button background under [confirm-variant=\"primary\"].\nDefaults to var(--a-primary-bg). When [confirm-variant=\"ghost\"]\nthe button uses transparent background regardless of this token.\n"
195
+ },
196
+ "--confirm-dialog-icon-bg": {
197
+ "description": "Optional header-icon disc background. Defaults to var(--a-bg-muted)."
198
+ },
199
+ "--confirm-dialog-icon-fg": {
200
+ "description": "Optional header-icon glyph color. Defaults to var(--a-fg)."
201
+ }
202
+ },
203
+ "traits": [],
204
+ "version": 1
205
+ }
206
+ }
@@ -0,0 +1,157 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ <confirm-dialog-ui> — Non-destructive yes/no confirmation dialog.
3
+
4
+ Thin composite over <modal-ui>. The host uses display:contents so
5
+ layout passes straight through to the inner modal-ui; this scope
6
+ only carries (a) the local token defaults consumed by the icon
7
+ disc + confirm button, and (b) the header/body/footer slot rules
8
+ that style the inner modal-ui parts.
9
+
10
+ Two-block @scope pattern per docs/specs/component-token-contract.md.
11
+ Zero raw color values (repo hard rule); zero raw px ≥ 3.
12
+ ═══════════════════════════════════════════════════════════════ */
13
+
14
+ /* ── 1. Token declarations ── */
15
+
16
+ confirm-dialog-ui {
17
+ --confirm-dialog-icon-bg: var(--a-bg-muted);
18
+ --confirm-dialog-icon-fg: var(--md-sys-color-neutral-on-surface);
19
+ --confirm-dialog-confirm-bg: var(--a-primary-bg);
20
+
21
+ --confirm-dialog-header-gap: var(--a-space-3);
22
+ --confirm-dialog-body-gap: var(--a-space-3);
23
+ --confirm-dialog-footer-gap: var(--a-space-2);
24
+ /* Disc diameter — must be LARGER than the inner glyph (the glyph is
25
+ driven below via --a-icon-size = disc − space-2). Padding on a
26
+ border-box icon-ui collapses the SVG, so we size the disc box. */
27
+ --confirm-dialog-icon-size: var(--a-space-7);
28
+ }
29
+
30
+ /* ── 2. Scoped layout ── */
31
+
32
+ @scope (confirm-dialog-ui) {
33
+ :scope {
34
+ display: contents;
35
+ }
36
+
37
+ /* Inner modal-ui — keep default chrome, but ensure body has enough
38
+ vertical breathing room when only a description renders. */
39
+ :scope > modal-ui {
40
+ --modal-pad-body: var(--a-space-4);
41
+ }
42
+
43
+ /* ═══════ Header — icon + heading + description ═══════
44
+ Targets the bare <header slot="header"> stamped by confirm-dialog
45
+ and its child slot=icon/heading/description elements.
46
+
47
+ SPECIFICITY NOTE: must beat modal/modal.css's `:scope [slot="header"]
48
+ { display: flex }` which targets the same element when confirm-dialog
49
+ stamps its <header slot="header"> inside <modal-ui>. Equal-attribute-
50
+ specificity ties resolve by source order — and modal.css is loaded
51
+ by the consumer wrapper after web-modules CSS in most pages — so
52
+ modal's flex layout wins and heading + description render as a
53
+ side-by-side flex row instead of stacked grid rows. The `header`
54
+ element selector bumps specificity from (0,1,0) → (0,1,1), which is
55
+ enough to win regardless of source order. Caught 2026-05-24 in QA. */
56
+ :scope header[slot="header"] {
57
+ display: grid;
58
+ /* icon | text | close — the third track holds the modal-stamped
59
+ <button-ui slot="close"> so it pins top-right instead of orphaning
60
+ into an auto-placed row. */
61
+ grid-template-columns: auto 1fr auto;
62
+ column-gap: var(--confirm-dialog-header-gap);
63
+ row-gap: var(--a-space-1);
64
+ align-items: center;
65
+ }
66
+
67
+ /* Close affordance — pin to the header's top-right corner. */
68
+ :scope header[slot="header"] > [slot="close"] {
69
+ grid-column: 3;
70
+ grid-row: 1;
71
+ justify-self: end;
72
+ align-self: start;
73
+ }
74
+
75
+ /* Stamped header icon — circular disc behind the glyph. Hidden by
76
+ default; render() unhides when [icon] is set. The header is a single
77
+ row (icon · title · close) — the description now lives in the body. */
78
+ :scope header[slot="header"] > [slot="icon"] {
79
+ grid-row: 1;
80
+ grid-column: 1;
81
+ flex-shrink: 0;
82
+ /* Explicit disc box + glyph sized DOWN from it (disc − space-2). Sizing
83
+ the box rather than padding a border-box icon-ui keeps the SVG from
84
+ collapsing to 0×0. */
85
+ inline-size: var(--confirm-dialog-icon-size);
86
+ block-size: var(--confirm-dialog-icon-size);
87
+ --a-icon-size: calc(var(--confirm-dialog-icon-size) - var(--a-space-2));
88
+ box-sizing: border-box;
89
+ background: var(--confirm-dialog-icon-bg);
90
+ color: var(--confirm-dialog-icon-fg);
91
+ border-radius: 50%;
92
+ display: inline-flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ }
96
+
97
+ :scope header[slot="header"] > [slot="heading"] {
98
+ font-weight: var(--a-weight-semibold);
99
+ color: var(--md-sys-color-neutral-on-surface);
100
+ grid-column: 2;
101
+ }
102
+
103
+ /* Description — lives in the BODY section as the dialog's body copy
104
+ (moved out of the header so the title row stays compact and the body
105
+ band isn't empty). */
106
+ :scope [slot="body"] [slot="description"] {
107
+ color: var(--a-fg-muted);
108
+ line-height: var(--a-line-height-prose, 1.5);
109
+ margin: 0;
110
+ }
111
+ :scope [slot="body"] [slot="description"][hidden] {
112
+ display: none;
113
+ }
114
+
115
+ /* ═══════ Body — default-slot consumer content ═══════ */
116
+ :scope [slot="body"] {
117
+ display: flex;
118
+ flex-direction: column;
119
+ gap: var(--confirm-dialog-body-gap);
120
+ }
121
+
122
+ :scope [slot="body"] > [data-extra] {
123
+ /* Container for default-slot content; collapse-when-empty so
124
+ authoring an empty <confirm-dialog-ui> doesn't reserve space. */
125
+ display: contents;
126
+ }
127
+
128
+ /* ═══════ Footer — cancel + confirm buttons (slot="action") ═══════ */
129
+ :scope [slot="footer"] {
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: flex-end;
133
+ gap: var(--confirm-dialog-footer-gap);
134
+ }
135
+
136
+ /* Confirm button — primary variant uses the token-mapped accent
137
+ background by default; consumers can override via
138
+ --confirm-dialog-confirm-bg. Targeted by data-confirm-action
139
+ instead of the legacy [part="confirm"] hook. */
140
+ :scope [data-confirm-action="confirm"] {
141
+ --button-background: var(--confirm-dialog-confirm-bg);
142
+ }
143
+
144
+ /* Ghost-variant confirm — transparent background; foreground from
145
+ the standard text role. Overrides the L3-tokened default above. */
146
+ :scope[confirm-variant="ghost"] [data-confirm-action="confirm"] {
147
+ --button-background: transparent;
148
+ --button-foreground: var(--md-sys-color-neutral-on-surface);
149
+ }
150
+
151
+ /* ═══════ Loading state — disabled + spinner-marked ═══════ */
152
+ :scope[loading] [data-confirm-action="cancel"],
153
+ :scope[loading] [data-confirm-action="confirm"] {
154
+ pointer-events: none;
155
+ opacity: var(--a-opacity-disabled, 0.6);
156
+ }
157
+ }