@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.
- package/CHANGELOG.md +17 -0
- package/README.md +3 -3
- package/agent-admin/admin-roster/admin-roster.js +1 -1
- package/agent-admin/admin-settings/admin-settings.js +1 -1
- package/agent-admin/agent-admin/agent-admin.js +1 -1
- package/billing/billing-overview/billing-overview.a2ui.json +281 -0
- package/billing/billing-overview/billing-overview.class.js +838 -0
- package/billing/billing-overview/billing-overview.css +223 -0
- package/billing/billing-overview/billing-overview.js +16 -0
- package/billing/billing-overview/billing-overview.yaml +441 -0
- package/billing/index.js +21 -0
- package/billing/invoice-detail/invoice-detail.a2ui.json +276 -0
- package/billing/invoice-detail/invoice-detail.class.js +711 -0
- package/billing/invoice-detail/invoice-detail.css +305 -0
- package/billing/invoice-detail/invoice-detail.js +16 -0
- package/billing/invoice-detail/invoice-detail.yaml +411 -0
- package/billing/invoice-history/invoice-history.a2ui.json +315 -0
- package/billing/invoice-history/invoice-history.class.js +672 -0
- package/billing/invoice-history/invoice-history.css +130 -0
- package/billing/invoice-history/invoice-history.js +16 -0
- package/billing/invoice-history/invoice-history.yaml +398 -0
- package/billing/payment-method-form/payment-method-form.a2ui.json +310 -0
- package/billing/payment-method-form/payment-method-form.class.js +886 -0
- package/billing/payment-method-form/payment-method-form.css +149 -0
- package/billing/payment-method-form/payment-method-form.js +16 -0
- package/billing/payment-method-form/payment-method-form.yaml +430 -0
- package/billing/payment-method-list/payment-method-list.a2ui.json +283 -0
- package/billing/payment-method-list/payment-method-list.class.js +705 -0
- package/billing/payment-method-list/payment-method-list.css +128 -0
- package/billing/payment-method-list/payment-method-list.js +16 -0
- package/billing/payment-method-list/payment-method-list.yaml +355 -0
- package/billing/plan-picker/plan-picker.a2ui.json +349 -0
- package/billing/plan-picker/plan-picker.class.js +635 -0
- package/billing/plan-picker/plan-picker.css +227 -0
- package/billing/plan-picker/plan-picker.js +16 -0
- package/billing/plan-picker/plan-picker.yaml +453 -0
- package/chat/README.md +1 -1
- package/chat/chat-composer/chat-composer.js +2 -2
- package/chat/chat-empty/chat-empty.js +2 -2
- package/chat/chat-shell/chat-shell.js +4 -4
- package/chat/chat-sidebar/chat-sidebar.js +2 -2
- package/chat/chat-surfaces/chat-surfaces.js +2 -2
- package/chat/chat-thread/chat-thread.js +2 -2
- package/dashboard/dashboard-layout/dashboard-layout.a2ui.json +254 -0
- package/dashboard/dashboard-layout/dashboard-layout.css +190 -0
- package/dashboard/dashboard-layout/dashboard-layout.js +289 -0
- package/dashboard/dashboard-layout/dashboard-layout.yaml +374 -0
- package/dashboard/date-range-selector/date-range-selector.a2ui.json +236 -0
- package/dashboard/date-range-selector/date-range-selector.css +84 -0
- package/dashboard/date-range-selector/date-range-selector.js +686 -0
- package/dashboard/date-range-selector/date-range-selector.yaml +358 -0
- package/dashboard/index.js +14 -0
- package/dist/everything.min.js +1 -1
- package/editor/editor-canvas/editor-canvas.js +2 -2
- package/editor/editor-shell/editor-shell.js +2 -2
- package/editor/editor-sidebar/editor-sidebar.js +2 -2
- package/editor/editor-toolbar/editor-toolbar.js +2 -2
- package/feedback/confirm-dialog/confirm-dialog.a2ui.json +206 -0
- package/feedback/confirm-dialog/confirm-dialog.css +157 -0
- package/feedback/confirm-dialog/confirm-dialog.js +383 -0
- package/feedback/confirm-dialog/confirm-dialog.yaml +297 -0
- package/feedback/index.js +10 -0
- package/form/form-popover/form-popover.js +1 -1
- package/generative/index.d.ts +1 -1
- package/generative/index.js +2 -2
- package/onboarding/index.js +1 -0
- package/onboarding/onboarding-checklist/onboarding-checklist.a2ui.json +263 -0
- package/onboarding/onboarding-checklist/onboarding-checklist.css +157 -0
- package/onboarding/onboarding-checklist/onboarding-checklist.js +428 -0
- package/onboarding/onboarding-checklist/onboarding-checklist.yaml +236 -0
- package/package.json +99 -6
- package/runtime/a2ui-root/a2ui-root.js +3 -3
- package/runtime/gen-root/gen-root.js +5 -5
- package/settings/index.js +12 -0
- package/settings/integrations-page/integrations-page.a2ui.json +274 -0
- package/settings/integrations-page/integrations-page.css +177 -0
- package/settings/integrations-page/integrations-page.d.ts +77 -0
- package/settings/integrations-page/integrations-page.js +413 -0
- package/settings/integrations-page/integrations-page.yaml +317 -0
- package/settings/notification-preferences/notification-preferences.a2ui.json +245 -0
- package/settings/notification-preferences/notification-preferences.css +204 -0
- package/settings/notification-preferences/notification-preferences.js +622 -0
- package/settings/notification-preferences/notification-preferences.yaml +358 -0
- package/shell/admin-command/admin-command.js +2 -2
- package/shell/admin-shell/admin-shell.js +2 -2
- package/shell/admin-sidebar/admin-sidebar.js +2 -2
- package/shell/embed-shell/embed-shell.js +3 -3
- package/simple/simple-shell/simple-shell.js +1 -1
- package/theme/theme-panel/theme-panel.js +2 -2
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
2
|
+
<invoice-detail-ui> — Page-level invoice composite.
|
|
3
|
+
|
|
4
|
+
Composes <card-ui> + <table-ui> + <stat-ui> + <tag-ui> +
|
|
5
|
+
<button-ui> + <empty-state-ui>. The host is a column laying out
|
|
6
|
+
header · parties · lines · totals · footer · empty regions in
|
|
7
|
+
DOM order. The totals stack is right-aligned via auto margin-
|
|
8
|
+
start. A print branch hides the action toolbar + zeroes the
|
|
9
|
+
page padding so the printed output is the invoice document.
|
|
10
|
+
|
|
11
|
+
SPEC: docs/specs/implementation-ready/SPEC-007-invoice-detail-page.md
|
|
12
|
+
Two-block @scope pattern per docs/specs/component-token-contract.md.
|
|
13
|
+
Zero raw color values (repo hard rule); rem only for sizes ≥ 3px.
|
|
14
|
+
═══════════════════════════════════════════════════════════════ */
|
|
15
|
+
|
|
16
|
+
/* ── Block 1: TOKEN DECLARATIONS ───────────────────────────────── */
|
|
17
|
+
|
|
18
|
+
invoice-detail-ui {
|
|
19
|
+
--invoice-detail-bg: transparent;
|
|
20
|
+
--invoice-detail-page-padding: var(--a-space-5);
|
|
21
|
+
--invoice-detail-section-gap: var(--a-space-5);
|
|
22
|
+
--invoice-detail-totals-width: min(360px, 100%);
|
|
23
|
+
--invoice-detail-status-badge-radius: var(--a-radius-md);
|
|
24
|
+
|
|
25
|
+
--invoice-detail-meta-fg: var(--a-fg-muted);
|
|
26
|
+
--invoice-detail-amount-fg: var(--md-sys-color-neutral-on-surface);
|
|
27
|
+
--invoice-detail-total-size: var(--a-text-2xl, 1.5rem);
|
|
28
|
+
--invoice-detail-total-weight: var(--a-weight-bold, 700);
|
|
29
|
+
--invoice-detail-line-amount-align: end;
|
|
30
|
+
|
|
31
|
+
--invoice-detail-heading-size: var(--a-text-2xl, 1.5rem);
|
|
32
|
+
--invoice-detail-heading-weight: var(--a-weight-bold, 700);
|
|
33
|
+
--invoice-detail-party-heading-fg: var(--a-fg-muted);
|
|
34
|
+
--invoice-detail-party-heading-size: var(--a-text-xs, 0.75rem);
|
|
35
|
+
--invoice-detail-totals-row-fg: var(--md-sys-color-neutral-on-surface);
|
|
36
|
+
--invoice-detail-totals-row-muted-fg: var(--a-fg-muted);
|
|
37
|
+
--invoice-detail-totals-border: 1px solid var(--md-sys-color-neutral-outline);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* ── Block 2: SCOPED LAYOUT ────────────────────────────────────── */
|
|
41
|
+
|
|
42
|
+
@scope (invoice-detail-ui) {
|
|
43
|
+
|
|
44
|
+
:scope {
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-direction: column;
|
|
47
|
+
gap: var(--invoice-detail-section-gap);
|
|
48
|
+
background: var(--invoice-detail-bg);
|
|
49
|
+
padding: var(--invoice-detail-page-padding);
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
/* Establish the inline-size container the @container rules below query —
|
|
52
|
+
without it the narrow-width parties-stack + totals-full-width rules were
|
|
53
|
+
dead (queried a non-existent ancestor container). Safe here: a block
|
|
54
|
+
column module that fills its container, not a basis-less flex item. */
|
|
55
|
+
container-type: inline-size;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* ── Header region ── */
|
|
59
|
+
:scope > [data-header] {
|
|
60
|
+
display: grid;
|
|
61
|
+
grid-template-columns: 1fr auto;
|
|
62
|
+
grid-template-areas:
|
|
63
|
+
"title actions"
|
|
64
|
+
"meta actions";
|
|
65
|
+
gap: var(--a-space-2) var(--a-space-4);
|
|
66
|
+
align-items: start;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:scope > [data-header] > [data-header-title] {
|
|
70
|
+
grid-area: title;
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
gap: var(--a-space-3);
|
|
74
|
+
flex-wrap: wrap;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
:scope > [data-header] > [data-header-title] > [data-invoice-number] {
|
|
78
|
+
margin: 0;
|
|
79
|
+
font-size: var(--invoice-detail-heading-size);
|
|
80
|
+
font-weight: var(--invoice-detail-heading-weight);
|
|
81
|
+
color: var(--md-sys-color-neutral-on-surface);
|
|
82
|
+
line-height: 1.2;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
:scope > [data-header] > [data-header-title] > [data-invoice-status] {
|
|
86
|
+
--tag-radius: var(--invoice-detail-status-badge-radius);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:scope > [data-header] > [data-header-title] > [data-invoice-status][hidden] {
|
|
90
|
+
display: none;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
:scope > [data-header] > [data-header-meta] {
|
|
94
|
+
grid-area: meta;
|
|
95
|
+
display: flex;
|
|
96
|
+
gap: var(--a-space-4);
|
|
97
|
+
color: var(--invoice-detail-meta-fg);
|
|
98
|
+
font-size: var(--a-text-sm, 0.875rem);
|
|
99
|
+
flex-wrap: wrap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:scope > [data-header] > [data-header-actions] {
|
|
103
|
+
grid-area: actions;
|
|
104
|
+
display: flex;
|
|
105
|
+
gap: var(--a-space-2);
|
|
106
|
+
justify-content: flex-end;
|
|
107
|
+
flex-wrap: wrap;
|
|
108
|
+
align-items: center;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Action buttons are sized to content (not stretch). The host's
|
|
112
|
+
grid auto column collapses to content width when the toolbar
|
|
113
|
+
is the only inhabitant. */
|
|
114
|
+
:scope > [data-header] > [data-header-actions] > [slot="header-actions"] {
|
|
115
|
+
flex: 0 0 auto;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ── Parties region ── customer + remit-to side by side. */
|
|
119
|
+
:scope > [data-parties] {
|
|
120
|
+
display: grid;
|
|
121
|
+
grid-template-columns: 1fr 1fr;
|
|
122
|
+
gap: var(--a-space-4);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
:scope > [data-parties] > [data-customer],
|
|
126
|
+
:scope > [data-parties] > [data-remit-to] {
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
gap: var(--a-space-1);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
:scope > [data-parties] [data-party-heading] {
|
|
133
|
+
text-transform: uppercase;
|
|
134
|
+
letter-spacing: 0.05em;
|
|
135
|
+
font-size: var(--invoice-detail-party-heading-size);
|
|
136
|
+
color: var(--invoice-detail-party-heading-fg);
|
|
137
|
+
margin-block-end: var(--a-space-1);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
:scope > [data-parties] [data-party-name] {
|
|
141
|
+
font-weight: var(--a-weight-semibold, 600);
|
|
142
|
+
color: var(--md-sys-color-neutral-on-surface);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
:scope > [data-parties] [data-party-email],
|
|
146
|
+
:scope > [data-parties] [data-party-address] {
|
|
147
|
+
color: var(--invoice-detail-meta-fg);
|
|
148
|
+
font-size: var(--a-text-sm, 0.875rem);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* When the override slot is filled, hide the default block. The
|
|
152
|
+
consumer's [slot="customer-block"] / [slot="remit-to-block"]
|
|
153
|
+
children are absorbed into the relevant data-customer /
|
|
154
|
+
data-remit-to wrapper during stamp; we detect that by checking
|
|
155
|
+
for any direct-child with that [slot] attribute. */
|
|
156
|
+
:scope > [data-parties] > [data-customer]:has(> [slot="customer-block"]) > [data-customer-default],
|
|
157
|
+
:scope > [data-parties] > [data-remit-to]:has(> [slot="remit-to-block"]) > [data-remit-to-default] {
|
|
158
|
+
display: none;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* If remit-to has neither slotted content nor default content,
|
|
162
|
+
hide it so the parties region collapses to a single column. */
|
|
163
|
+
:scope > [data-parties] > [data-remit-to]:not(:has(> [slot="remit-to-block"])) > [data-remit-to-default]:empty {
|
|
164
|
+
display: none;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* ── Lines region ── card wrapping the line-items table. */
|
|
168
|
+
:scope > [data-lines] {
|
|
169
|
+
display: block;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
:scope > [data-lines] > [data-lines-card] {
|
|
173
|
+
--card-padding: 0;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* The line-items table fills the card edge-to-edge (--card-padding: 0), so the
|
|
177
|
+
last body row's cell border-bottom lands 1px inside the card's own bottom
|
|
178
|
+
border — a doubled line at the bottom edge (bug-35). table-ui has no outer
|
|
179
|
+
border (the row dividers ARE its edges), so we drop only the LAST row's
|
|
180
|
+
bottom divider here; the card border closes the table. Header + inter-row
|
|
181
|
+
dividers stay. */
|
|
182
|
+
:scope > [data-lines] [data-lines-table] [data-body] > [role="row"]:last-child [role="gridcell"] {
|
|
183
|
+
border-bottom: none;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* ── Totals region ── right-aligned stack. */
|
|
187
|
+
:scope > [data-totals] {
|
|
188
|
+
display: flex;
|
|
189
|
+
flex-direction: column;
|
|
190
|
+
gap: var(--a-space-2);
|
|
191
|
+
margin-inline-start: auto;
|
|
192
|
+
inline-size: var(--invoice-detail-totals-width);
|
|
193
|
+
box-sizing: border-box;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
:scope > [data-totals] > [data-totals-row] {
|
|
197
|
+
display: flex;
|
|
198
|
+
justify-content: space-between;
|
|
199
|
+
align-items: baseline;
|
|
200
|
+
gap: var(--a-space-3);
|
|
201
|
+
color: var(--invoice-detail-totals-row-muted-fg);
|
|
202
|
+
font-size: var(--a-text-sm, 0.875rem);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
:scope > [data-totals] > [data-totals-row] > [data-totals-value] {
|
|
206
|
+
text-align: var(--invoice-detail-line-amount-align);
|
|
207
|
+
color: var(--invoice-detail-amount-fg);
|
|
208
|
+
font-variant-numeric: tabular-nums;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
:scope > [data-totals] > [data-grand-total] {
|
|
212
|
+
border-block-start: var(--invoice-detail-totals-border);
|
|
213
|
+
padding-block-start: var(--a-space-2);
|
|
214
|
+
color: var(--invoice-detail-totals-row-fg);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
:scope > [data-totals] > [data-grand-total] > [data-totals-label] {
|
|
218
|
+
font-weight: var(--invoice-detail-total-weight);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
:scope > [data-totals] > [data-grand-total] > [data-totals-value] {
|
|
222
|
+
font-size: var(--invoice-detail-total-size);
|
|
223
|
+
font-weight: var(--invoice-detail-total-weight);
|
|
224
|
+
color: var(--invoice-detail-amount-fg);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* ── Footer region ── only display when content slotted or notes. */
|
|
228
|
+
:scope > [data-footer] {
|
|
229
|
+
color: var(--invoice-detail-meta-fg);
|
|
230
|
+
font-size: var(--a-text-sm, 0.875rem);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
:scope > [data-footer]:not(:has(> [slot="footer"])) > [data-footer-notes]:empty {
|
|
234
|
+
display: none;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
:scope > [data-footer]:not(:has(> [slot="footer"])):not(:has([data-footer-notes]:not(:empty))) {
|
|
238
|
+
display: none;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* ── Empty state ── gated via the [empty] attribute.
|
|
242
|
+
Hide [data-empty] when host is NOT empty; do NOT set a display
|
|
243
|
+
value when shown (would clobber empty-state-ui's flex layout). */
|
|
244
|
+
:scope:not([empty]) > [data-empty] {
|
|
245
|
+
display: none;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
:scope[empty] > [data-parties],
|
|
249
|
+
:scope[empty] > [data-lines],
|
|
250
|
+
:scope[empty] > [data-totals],
|
|
251
|
+
:scope[empty] > [data-footer] {
|
|
252
|
+
display: none;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* ── Loading state ── dim the chrome + show the busy cursor. */
|
|
256
|
+
:scope[loading] {
|
|
257
|
+
opacity: 0.7;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* ── Density passthrough ── matches table-ui density cascade. */
|
|
261
|
+
:scope[density="compact"] > [data-lines] > [data-lines-card] table-ui {
|
|
262
|
+
--table-row-py: var(--a-space-1);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* ── Print branch ── hides actions + zeroes padding on print. */
|
|
266
|
+
@media print {
|
|
267
|
+
:scope[printable] {
|
|
268
|
+
padding: 0;
|
|
269
|
+
background: transparent;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
:scope[printable] > [data-header] > [data-header-actions] {
|
|
273
|
+
display: none;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
:scope[printable] [data-invoice-status] {
|
|
277
|
+
/* Keep the status legible in print — outline rather than fill. */
|
|
278
|
+
--tag-bg: transparent;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* ── Narrow viewport ── stack parties single-column. */
|
|
283
|
+
@container (max-width: 640px) {
|
|
284
|
+
:scope > [data-parties] {
|
|
285
|
+
grid-template-columns: 1fr;
|
|
286
|
+
}
|
|
287
|
+
/* bug-24: the totals stack drops its 360px cap + right-align and spans the
|
|
288
|
+
full width at narrow widths (where the partial-width block reads as a
|
|
289
|
+
stray right-floated column). */
|
|
290
|
+
:scope > [data-totals] {
|
|
291
|
+
inline-size: 100%;
|
|
292
|
+
margin-inline-start: 0;
|
|
293
|
+
}
|
|
294
|
+
:scope > [data-header] {
|
|
295
|
+
grid-template-columns: 1fr;
|
|
296
|
+
grid-template-areas:
|
|
297
|
+
"title"
|
|
298
|
+
"meta"
|
|
299
|
+
"actions";
|
|
300
|
+
}
|
|
301
|
+
:scope > [data-header] > [data-header-actions] {
|
|
302
|
+
justify-content: flex-start;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<invoice-detail-ui>` — auto-registers the tag on import.
|
|
3
|
+
*
|
|
4
|
+
* For a non-side-effect class import (test isolation, tag override),
|
|
5
|
+
* use the class export from `./invoice-detail.class.js`:
|
|
6
|
+
*
|
|
7
|
+
* import { UIInvoiceDetail } from '@adia-ai/web-modules/billing/invoice-detail/class';
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { UIInvoiceDetail } from './invoice-detail.class.js';
|
|
11
|
+
|
|
12
|
+
if (!customElements.get('invoice-detail-ui')) {
|
|
13
|
+
customElements.define('invoice-detail-ui', UIInvoiceDetail);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { UIInvoiceDetail };
|