@adia-ai/web-components 0.8.6 → 0.8.7

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 (102) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/theme-provider.min.js +1 -1
  3. package/dist/web-components.min.js +1 -1
  4. package/package.json +2 -1
  5. package/patterns/access-requests/access-requests.examples.html +132 -0
  6. package/patterns/access-requests/access-requests.html +60 -0
  7. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +236 -0
  8. package/patterns/admin-keys-and-export/admin-keys-and-export.html +64 -0
  9. package/patterns/admin-shell/admin-shell.examples.html +327 -0
  10. package/patterns/admin-shell/admin-shell.html +44 -0
  11. package/patterns/agent-cost/agent-cost.examples.html +111 -0
  12. package/patterns/agent-cost/agent-cost.html +62 -0
  13. package/patterns/agent-memory/agent-memory.examples.html +155 -0
  14. package/patterns/agent-memory/agent-memory.html +64 -0
  15. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +181 -0
  16. package/patterns/agent-prompt-library/agent-prompt-library.html +64 -0
  17. package/patterns/agent-tool-call/agent-tool-call.examples.html +123 -0
  18. package/patterns/agent-tool-call/agent-tool-call.html +60 -0
  19. package/patterns/alert-dialog/alert-dialog.examples.html +105 -0
  20. package/patterns/alert-dialog/alert-dialog.html +57 -0
  21. package/patterns/app-nav/app-nav.examples.html +421 -0
  22. package/patterns/app-nav/app-nav.html +50 -0
  23. package/patterns/approvals/approvals.examples.html +131 -0
  24. package/patterns/approvals/approvals.html +58 -0
  25. package/patterns/audit-log/audit-log.examples.html +74 -0
  26. package/patterns/audit-log/audit-log.examples.js +60 -0
  27. package/patterns/audit-log/audit-log.html +63 -0
  28. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +89 -0
  29. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.js +69 -0
  30. package/patterns/bulk-action-toolbar/bulk-action-toolbar.html +62 -0
  31. package/patterns/changelog-feed/changelog-feed.examples.html +151 -0
  32. package/patterns/changelog-feed/changelog-feed.html +57 -0
  33. package/patterns/chart-in-card/chart-in-card.examples.html +193 -0
  34. package/patterns/chart-in-card/chart-in-card.examples.js +46 -0
  35. package/patterns/chart-in-card/chart-in-card.html +66 -0
  36. package/patterns/chat-shell/chat-shell.examples.html +129 -0
  37. package/patterns/chat-shell/chat-shell.html +46 -0
  38. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +241 -0
  39. package/patterns/comments-and-collaboration/comments-and-collaboration.html +66 -0
  40. package/patterns/component-tokens/component-tokens.examples.html +483 -0
  41. package/patterns/component-tokens/component-tokens.html +42 -0
  42. package/patterns/conversion-funnel/conversion-funnel.examples.html +158 -0
  43. package/patterns/conversion-funnel/conversion-funnel.examples.js +4 -0
  44. package/patterns/conversion-funnel/conversion-funnel.html +64 -0
  45. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +196 -0
  46. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.html +58 -0
  47. package/patterns/diff-review/diff-review.examples.html +147 -0
  48. package/patterns/diff-review/diff-review.html +56 -0
  49. package/patterns/editor-shell/editor-shell.examples.html +139 -0
  50. package/patterns/editor-shell/editor-shell.html +62 -0
  51. package/patterns/export-flow/export-flow.examples.html +152 -0
  52. package/patterns/export-flow/export-flow.examples.js +37 -0
  53. package/patterns/export-flow/export-flow.html +65 -0
  54. package/patterns/filter-bar/filter-bar.examples.html +116 -0
  55. package/patterns/filter-bar/filter-bar.examples.js +23 -0
  56. package/patterns/filter-bar/filter-bar.html +70 -0
  57. package/patterns/form-drawer/form-drawer.examples.html +210 -0
  58. package/patterns/form-drawer/form-drawer.html +64 -0
  59. package/patterns/form-system/form-system.examples.html +383 -0
  60. package/patterns/form-system/form-system.html +48 -0
  61. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +189 -0
  62. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.html +64 -0
  63. package/patterns/inline-dialog/inline-dialog.examples.html +143 -0
  64. package/patterns/inline-dialog/inline-dialog.html +59 -0
  65. package/patterns/kanban-board/kanban-board.examples.html +224 -0
  66. package/patterns/kanban-board/kanban-board.html +58 -0
  67. package/patterns/layout/layout.examples.html +365 -0
  68. package/patterns/layout/layout.html +54 -0
  69. package/patterns/marketing-engagement/marketing-engagement.examples.html +280 -0
  70. package/patterns/marketing-engagement/marketing-engagement.html +64 -0
  71. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +213 -0
  72. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.html +58 -0
  73. package/patterns/overview/overview.examples.html +119 -0
  74. package/patterns/overview/overview.html +42 -0
  75. package/patterns/permissions-matrix/permissions-matrix.examples.html +91 -0
  76. package/patterns/permissions-matrix/permissions-matrix.examples.js +28 -0
  77. package/patterns/permissions-matrix/permissions-matrix.html +56 -0
  78. package/patterns/permissions-role-picker/permissions-role-picker.examples.html +81 -0
  79. package/patterns/permissions-role-picker/permissions-role-picker.html +56 -0
  80. package/patterns/permissions-sharing/permissions-sharing.examples.html +175 -0
  81. package/patterns/permissions-sharing/permissions-sharing.html +66 -0
  82. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +227 -0
  83. package/patterns/profile-public-and-verification/profile-public-and-verification.html +70 -0
  84. package/patterns/record-detail-drawer/record-detail-drawer.examples.html +164 -0
  85. package/patterns/record-detail-drawer/record-detail-drawer.html +64 -0
  86. package/patterns/responsive-shell-sidebar/README.md +37 -0
  87. package/patterns/responsive-shell-sidebar/responsive-shell-sidebar.css +39 -0
  88. package/patterns/responsive-shell-sidebar/responsive-shell-sidebar.examples.html +208 -0
  89. package/patterns/responsive-shell-sidebar/responsive-shell-sidebar.html +47 -0
  90. package/patterns/retention-cohort/retention-cohort.examples.html +149 -0
  91. package/patterns/retention-cohort/retention-cohort.examples.js +37 -0
  92. package/patterns/retention-cohort/retention-cohort.html +62 -0
  93. package/patterns/search-discovery/search-discovery.examples.html +263 -0
  94. package/patterns/search-discovery/search-discovery.html +58 -0
  95. package/patterns/system-banners/system-banners.examples.html +150 -0
  96. package/patterns/system-banners/system-banners.html +52 -0
  97. package/patterns/timezone-selector/timezone-selector.examples.html +82 -0
  98. package/patterns/timezone-selector/timezone-selector.examples.js +72 -0
  99. package/patterns/timezone-selector/timezone-selector.html +57 -0
  100. package/patterns/wizard-drawer/wizard-drawer.examples.html +144 -0
  101. package/patterns/wizard-drawer/wizard-drawer.examples.js +33 -0
  102. package/patterns/wizard-drawer/wizard-drawer.html +72 -0
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" theme="auto">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>API keys, webhooks &amp; data export (pattern) — AdiaUI</title>
7
+
8
+ <!-- Token base -->
9
+ <link rel="stylesheet" href="../../styles/resets.css">
10
+ <link rel="stylesheet" href="../../styles/tokens.css">
11
+
12
+ <!-- Component CSS — primitives this pattern composes -->
13
+ <link rel="stylesheet" href="../../components/alert/alert.css">
14
+ <link rel="stylesheet" href="../../components/button/button.css">
15
+ <link rel="stylesheet" href="../../components/card/card.css">
16
+ <link rel="stylesheet" href="../../components/col/col.css">
17
+ <link rel="stylesheet" href="../../components/field/field.css">
18
+ <link rel="stylesheet" href="../../components/icon/icon.css">
19
+ <link rel="stylesheet" href="../../components/input/input.css">
20
+ <link rel="stylesheet" href="../../components/list/list.css">
21
+ <link rel="stylesheet" href="../../components/row/row.css">
22
+ <link rel="stylesheet" href="../../components/select/select.css">
23
+ <link rel="stylesheet" href="../../components/tag/tag.css">
24
+ <link rel="stylesheet" href="../../components/text/text.css">
25
+
26
+ <!-- Component JS -->
27
+ <script type="module" src="../../components/alert/alert.js"></script>
28
+ <script type="module" src="../../components/button/button.js"></script>
29
+ <script type="module" src="../../components/card/card.js"></script>
30
+ <script type="module" src="../../components/col/col.js"></script>
31
+ <script type="module" src="../../components/field/field.js"></script>
32
+ <script type="module" src="../../components/icon/icon.js"></script>
33
+ <script type="module" src="../../components/input/input.js"></script>
34
+ <script type="module" src="../../components/list/list.js"></script>
35
+ <script type="module" src="../../components/row/row.js"></script>
36
+ <script type="module" src="../../components/select/select.js"></script>
37
+ <script type="module" src="../../components/tag/tag.js"></script>
38
+ <script type="module" src="../../components/text/text.js"></script>
39
+
40
+ <style>
41
+ :where(html, body) { margin: 0; min-height: 100vh; background: var(--md-sys-color-neutral-background); color: var(--md-sys-color-neutral-on-surface); font-family: var(--a-font-family); }
42
+ main { max-width: 960px; margin-inline: auto; padding: var(--a-space-6) var(--a-space-5); }
43
+ </style>
44
+ </head>
45
+ <body>
46
+
47
+ <main id="demo-root">
48
+ <p>Loading examples…</p>
49
+ </main>
50
+
51
+ <script type="module">
52
+ const root = document.getElementById('demo-root');
53
+ try {
54
+ const res = await fetch('./admin-keys-and-export.examples.html');
55
+ if (!res.ok) throw new Error(`fetch failed (${res.status})`);
56
+ root.innerHTML = await res.text();
57
+ } catch (err) {
58
+ root.innerHTML = `<p style="color:var(--a-danger-strong);">Failed to load admin-keys-and-export.examples.html — ${err.message}</p>`;
59
+ console.error('[admin-keys-and-export.html]', err);
60
+ }
61
+ </script>
62
+
63
+ </body>
64
+ </html>
@@ -0,0 +1,327 @@
1
+ <header>
2
+ <div>
3
+ <h1>Admin Shell — Composition Pattern</h1>
4
+ <div data-actions>
5
+ <tag-ui size="sm">admin-shell</tag-ui>
6
+ <tag-ui size="sm" variant="ghost">cluster-namespaced</tag-ui>
7
+ </div>
8
+ </div>
9
+ <p>
10
+ The canonical composition pattern for an admin / SaaS / dashboard
11
+ application. Built from cluster-namespaced bespoke children — every
12
+ structural part has its own custom element with its own state-as-attribute
13
+ semantics. The legacy raw-HTML form (<code>&lt;aside data-sidebar&gt;</code>,
14
+ <code>&lt;main&gt;</code>, <code>&lt;dialog data-command&gt;</code>) was
15
+ retired in v0.4.0 per
16
+ <a href="../../../../.brain/adrs/0024-legacy-shell-shapes-retired.md">ADR-0024</a>;
17
+ new code uses the bespoke shape exclusively per
18
+ <a href="../../../../.brain/adrs/0023-bespoke-shell-tier-children.md">ADR-0023</a>.
19
+ </p>
20
+ </header>
21
+
22
+ <section data-section data-property="canonical-hierarchy">
23
+ <h2 variant="section">Canonical hierarchy</h2>
24
+ <p data-note>
25
+ The live docs site you're reading runs inside one of these. The
26
+ paste-ready reference at
27
+ <a href="/site/examples/admin-dashboard">/site/examples/admin-dashboard</a>
28
+ matches this hierarchy exactly.
29
+ </p>
30
+ <code-ui language="html">&lt;admin-shell mode="rounded borderless"&gt;
31
+
32
+ &lt;!-- LEADING sidebar — workspace switcher · nav rail · user switcher --&gt;
33
+ &lt;admin-sidebar slot="leading" resizable collapsible&gt;
34
+ &lt;admin-topbar slot="header"&gt;
35
+ &lt;select-ui avatar="…" value="workspace" variant="ghost" style="flex:1"&gt;&lt;/select-ui&gt;
36
+ &lt;/admin-topbar&gt;
37
+ &lt;section-ui&gt;
38
+ &lt;nav-ui&gt;
39
+ &lt;nav-item-ui icon="house" text="Home" selected&gt;&lt;/nav-item-ui&gt;
40
+ &lt;nav-item-ui icon="gear" text="Settings"&gt;&lt;/nav-item-ui&gt;
41
+ &lt;/nav-ui&gt;
42
+ &lt;/section-ui&gt;
43
+ &lt;admin-statusbar slot="footer"&gt;
44
+ &lt;select-ui avatar="…" value="user" variant="ghost" style="flex:1"&gt;&lt;/select-ui&gt;
45
+ &lt;/admin-statusbar&gt;
46
+ &lt;div data-resize&gt;&lt;/div&gt;
47
+ &lt;/admin-sidebar&gt;
48
+
49
+ &lt;!-- MAIN content column — breadcrumb topbar · scrollable page · status footer --&gt;
50
+ &lt;admin-content&gt;
51
+ &lt;admin-topbar&gt;
52
+ &lt;button-ui data-sidebar-toggle="leading" icon="sidebar" variant="ghost" size="sm"&gt;&lt;/button-ui&gt;
53
+ &lt;breadcrumb-ui&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;span&gt;Dashboard&lt;/span&gt;&lt;/breadcrumb-ui&gt;
54
+ &lt;span data-spacer&gt;&lt;/span&gt;
55
+ &lt;div data-actions&gt;
56
+ &lt;button-ui text="Export" icon="download" variant="outline" size="sm"&gt;&lt;/button-ui&gt;
57
+ &lt;button-ui text="+ New" variant="primary" size="sm"&gt;&lt;/button-ui&gt;
58
+ &lt;/div&gt;
59
+ &lt;/admin-topbar&gt;
60
+ &lt;admin-scroll&gt;
61
+ &lt;admin-page&gt;
62
+ &lt;admin-page-header&gt;
63
+ &lt;header&gt;
64
+ &lt;div&gt;
65
+ &lt;h1&gt;Dashboard&lt;/h1&gt;
66
+ &lt;div data-actions&gt;…page-level actions…&lt;/div&gt;
67
+ &lt;/div&gt;
68
+ &lt;p&gt;Description.&lt;/p&gt;
69
+ &lt;/header&gt;
70
+ &lt;/admin-page-header&gt;
71
+ &lt;admin-page-body&gt;
72
+ …grid-ui · card-ui · stat-ui · table-ui · etc.…
73
+ &lt;/admin-page-body&gt;
74
+ &lt;/admin-page&gt;
75
+ &lt;/admin-scroll&gt;
76
+ &lt;admin-statusbar&gt;
77
+ &lt;span&gt;My App&lt;/span&gt;
78
+ &lt;span data-spacer&gt;&lt;/span&gt;
79
+ &lt;span&gt;v1.0.0&lt;/span&gt;
80
+ &lt;/admin-statusbar&gt;
81
+ &lt;/admin-content&gt;
82
+
83
+ &lt;!-- TRAILING sidebar (optional) — context inspector / changelog rail --&gt;
84
+ &lt;admin-sidebar slot="trailing" resizable collapsible hidden&gt;
85
+ &lt;admin-topbar slot="header"&gt;
86
+ &lt;span slot="heading"&gt;Inspector&lt;/span&gt;
87
+ &lt;button-ui slot="action" data-sidebar-toggle="trailing" icon="x" variant="ghost" size="sm"&gt;&lt;/button-ui&gt;
88
+ &lt;/admin-topbar&gt;
89
+ &lt;section-ui&gt;…&lt;/section-ui&gt;
90
+ &lt;div data-resize&gt;&lt;/div&gt;
91
+ &lt;/admin-sidebar&gt;
92
+
93
+ &lt;!-- Command palette — top-level child, NOT nested in admin-content --&gt;
94
+ &lt;admin-command&gt;
95
+ &lt;command-ui placeholder="Search pages..."&gt;&lt;/command-ui&gt;
96
+ &lt;/admin-command&gt;
97
+
98
+ &lt;/admin-shell&gt;</code-ui>
99
+ </section>
100
+
101
+ <section data-section data-property="part-by-part-reference">
102
+ <h2 variant="section">Part-by-part reference</h2>
103
+ <p>Each part owns its own state-as-attribute semantics and has its own per-part docs page covering variants and permutations.</p>
104
+ <table>
105
+ <thead>
106
+ <tr><th>Part</th><th>Role</th><th>Variants</th></tr>
107
+ </thead>
108
+ <tbody>
109
+ <tr>
110
+ <td><a href="/site/components/admin-shell"><code>&lt;admin-shell&gt;</code></a></td>
111
+ <td>Behavior-only host. Wires sidebar toggle, command palette, ResizeObserver responsive collapse.</td>
112
+ <td><code>mode="rounded borderless"</code></td>
113
+ </tr>
114
+ <tr>
115
+ <td><a href="/site/components/admin-sidebar"><code>&lt;admin-sidebar&gt;</code></a> · <a href="/site/patterns/admin-sidebar">pattern</a></td>
116
+ <td>Leading or trailing rail. Holds workspace switcher + nav + user switcher.</td>
117
+ <td>Simple · grouped · with dividers · with sub-navs · workspace+user variants</td>
118
+ </tr>
119
+ <tr>
120
+ <td><a href="/site/components/admin-topbar"><code>&lt;admin-topbar&gt;</code></a></td>
121
+ <td>Sticky band. Inside sidebar = workspace switcher; inside content = breadcrumb + actions; with <code>slot="header"</code> = sidebar header band.</td>
122
+ <td>Breadcrumb + actions · breadcrumb only · with tabs · with search · with sidebar-toggle</td>
123
+ </tr>
124
+ <tr>
125
+ <td><a href="/site/components/admin-content"><code>&lt;admin-content&gt;</code></a> · <a href="/site/patterns/admin-content-topbar">pattern</a></td>
126
+ <td>Main column. Wraps topbar + scroll + statusbar.</td>
127
+ <td>With trailing-aside subnav · with multiple pages (router-ui)</td>
128
+ </tr>
129
+ <tr>
130
+ <td><a href="/site/components/admin-scroll"><code>&lt;admin-scroll&gt;</code></a></td>
131
+ <td>Scrollable region inside content. Wraps the page (or router).</td>
132
+ <td>Single page · router · with section-rail aside</td>
133
+ </tr>
134
+ <tr>
135
+ <td><a href="/site/components/admin-page"><code>&lt;admin-page&gt;</code></a></td>
136
+ <td>Page boundary inside admin-scroll. Holds page-header + page-body.</td>
137
+ <td>—</td>
138
+ </tr>
139
+ <tr>
140
+ <td><a href="/site/components/admin-page-header"><code>&lt;admin-page-header&gt;</code></a> · <a href="/site/patterns/admin-page-header">pattern</a></td>
141
+ <td>Page title band. Wraps <code>&lt;header&gt;</code> with title + actions + description.</td>
142
+ <td>Regular · with actions · with tabs · with breadcrumb above · <code>data-flush</code> (no border)</td>
143
+ </tr>
144
+ <tr>
145
+ <td><a href="/site/components/admin-page-body"><code>&lt;admin-page-body&gt;</code></a></td>
146
+ <td>Page content area. Holds the actual UI (grids, cards, tables, etc.).</td>
147
+ <td>—</td>
148
+ </tr>
149
+ <tr>
150
+ <td><a href="/site/components/admin-statusbar"><code>&lt;admin-statusbar&gt;</code></a></td>
151
+ <td>Footer band. Inside sidebar = user switcher; inside content = global status footer.</td>
152
+ <td>User switcher · sign-in CTA · static brand · version + spacer</td>
153
+ </tr>
154
+ <tr>
155
+ <td><a href="/site/components/admin-command"><code>&lt;admin-command&gt;</code></a></td>
156
+ <td>Cmd+K palette. Top-level child of <code>admin-shell</code>, self-stamps a <code>&lt;dialog&gt;</code>.</td>
157
+ <td>—</td>
158
+ </tr>
159
+ </tbody>
160
+ </table>
161
+ </section>
162
+
163
+ <section data-section data-property="authoring-rules">
164
+ <h2 variant="section">Authoring rules</h2>
165
+ <ul>
166
+ <li><strong>Cluster-namespaced children only.</strong> Inside <code>&lt;admin-shell&gt;</code>, use <code>&lt;admin-sidebar&gt;</code>, <code>&lt;admin-content&gt;</code>, <code>&lt;admin-topbar&gt;</code>, <code>&lt;admin-statusbar&gt;</code>, <code>&lt;admin-page&gt;</code>, <code>&lt;admin-command&gt;</code>. Don't use raw <code>&lt;aside&gt;</code>, <code>&lt;main&gt;</code>, <code>&lt;dialog&gt;</code> — they no longer style or wire (ADR-0024).</li>
167
+ <li><strong>Sidebar nav uses <code>&lt;nav-ui&gt;</code> + <code>&lt;nav-item-ui&gt;</code>.</strong> NOT <code>&lt;menu-ui&gt;</code> / <code>&lt;menu-item-ui&gt;</code> — those are popover action menus (dropdowns), wrong primitive for nav.</li>
168
+ <li><strong>Workspace + user switcher use <code>&lt;select-ui avatar="…" value="…" variant="ghost"&gt;</code>.</strong> Auto-stamps avatar + label + caret-up-down row. The <code>&lt;menu-ui&gt;</code>-with-button-trigger form documented elsewhere is the v0.5.x legacy shape; new code uses <code>&lt;select-ui&gt;</code>.</li>
169
+ <li><strong>Page-header wraps an inner <code>&lt;header&gt;</code>.</strong> The shape is <code>&lt;admin-page-header&gt;&lt;header&gt;&lt;div&gt;&lt;h1&gt;…&lt;/h1&gt;&lt;div data-actions&gt;…&lt;/div&gt;&lt;/div&gt;&lt;p&gt;…&lt;/p&gt;&lt;/header&gt;&lt;/admin-page-header&gt;</code>. Add <code>data-flush</code> on the inner <code>&lt;header&gt;</code> to drop the bottom border.</li>
170
+ <li><strong>Sidebar collapses to icons.</strong> <code>&lt;nav-item-ui&gt;</code> rows centre to their icon when the rail is collapsed — every row needs an <code>icon=</code> attribute or a <code>[slot="icon"]</code> child to remain legible.</li>
171
+ <li><strong>State is queryable as attributes.</strong> <code>shell.querySelector('admin-sidebar[slot="leading"]').hasAttribute('collapsed')</code>. Style cross-cuts via <code>:has()</code>; no <code>getBoundingClientRect</code> math.</li>
172
+ </ul>
173
+ </section>
174
+
175
+ <section data-section data-property="where-to-next">
176
+ <h2 variant="section">Where to next</h2>
177
+ <ul>
178
+ <li><a href="/site/examples/admin-dashboard">Live example</a> — paste-ready full dashboard at the canonical hierarchy.</li>
179
+ <li><a href="/site/patterns/admin-page-header">admin-page-header pattern</a> — title row · actions · tabs · breadcrumb-above · flush.</li>
180
+ <li><a href="/site/patterns/admin-sidebar">admin-sidebar pattern</a> — simple · groups · dividers · sub-navs · topbar/statusbar variants.</li>
181
+ <li><a href="/site/patterns/admin-content-topbar">admin-content topbar pattern</a> — breadcrumb · actions · tabs · search · trailing-toggle.</li>
182
+ <li><a href="/site/patterns/admin-content-aside">admin-content aside pattern</a> — section subnav · changelog rail · context inspector.</li>
183
+ <li><a href="/site/getting-started/cdn-usage">CDN usage</a> — drop AdiaUI into any HTML page (CodePen, marketing, static).</li>
184
+ </ul>
185
+ </section>
186
+
187
+ <style>
188
+ /* Tamed admin-shell demos — fixed height, in-flow positioning */
189
+ .admin-shell-demo {
190
+ position: static;
191
+ inset: auto;
192
+ height: 440px;
193
+ border: 1px solid var(--md-sys-color-neutral-outline-variant);
194
+ border-radius: var(--a-radius-lg);
195
+ overflow: hidden;
196
+ margin-block: var(--a-space-3);
197
+ }
198
+ .admin-shell-demo admin-content { border-inline-start: none; }
199
+ .demo-content-area {
200
+ flex: 1;
201
+ min-height: 0;
202
+ overflow: auto;
203
+ padding: var(--a-space-6);
204
+ color: var(--a-fg-muted);
205
+ font-size: var(--a-ui-sm);
206
+ }
207
+ </style>
208
+
209
+ <section data-section data-property="live-demos">
210
+ <h2 variant="section">Live demos</h2>
211
+ <p data-note>Each demo is a real <code>&lt;admin-shell&gt;</code> rendered at fixed height. These are the patterns to emit when generating admin/SaaS/dashboard surfaces.</p>
212
+
213
+ <div data-artifact-container>
214
+
215
+ <div data-artifact-item data-artifact-label="standard — leading nav + content"
216
+ data-chunk="admin-shell-standard"
217
+ data-chunk-kind="page"
218
+ data-chunk-domain="layout"
219
+ data-chunk-description="Standard admin shell — leading sidebar with workspace switcher, nav rail, user switcher; content column with topbar breadcrumb and scrollable page."
220
+ data-chunk-keywords="admin shell layout sidebar nav topbar breadcrumb content page dashboard saas">
221
+ <admin-shell class="admin-shell-demo" mode="">
222
+ <admin-sidebar slot="leading" name="demo-standard">
223
+ <admin-topbar slot="header">
224
+ <select-ui avatar="/icons/agent-ui-light.svg" value="my-app" variant="ghost" style="flex:1">
225
+ <option value="my-app">My App</option>
226
+ <option value="my-app-staging">My App · Staging</option>
227
+ </select-ui>
228
+ </admin-topbar>
229
+ <section-ui>
230
+ <nav-ui>
231
+ <nav-item-ui icon="house" text="Dashboard" selected></nav-item-ui>
232
+ <nav-item-ui icon="users" text="Team"></nav-item-ui>
233
+ <nav-item-ui icon="chart-bar" text="Reports"></nav-item-ui>
234
+ <nav-item-ui icon="gear" text="Settings"></nav-item-ui>
235
+ </nav-ui>
236
+ </section-ui>
237
+ <admin-statusbar slot="footer">
238
+ <admin-entity-item slot="heading">
239
+ <avatar-ui slot="icon" text="MC" size="sm"></avatar-ui>
240
+ <span slot="label">Maya Chen</span>
241
+ </admin-entity-item>
242
+ </admin-statusbar>
243
+ </admin-sidebar>
244
+ <admin-content>
245
+ <admin-topbar>
246
+ <button-ui data-sidebar-toggle="leading" icon="sidebar" variant="ghost" size="sm"></button-ui>
247
+ <breadcrumb-ui><a href="#">My App</a><span>Dashboard</span></breadcrumb-ui>
248
+ <span data-spacer></span>
249
+ <div data-actions>
250
+ <button-ui text="+ New" variant="primary" size="sm"></button-ui>
251
+ </div>
252
+ </admin-topbar>
253
+ <admin-scroll>
254
+ <admin-page>
255
+ <admin-page-header>
256
+ <header>
257
+ <div><h1>Dashboard</h1></div>
258
+ <p>Welcome back. Here's what's happening today.</p>
259
+ </header>
260
+ </admin-page-header>
261
+ <admin-page-body>
262
+ <section>
263
+ <div class="demo-content-area"><p>Page content goes here.</p></div>
264
+ </section>
265
+ </admin-page-body>
266
+ </admin-page>
267
+ </admin-scroll>
268
+ </admin-content>
269
+ </admin-shell>
270
+ </div>
271
+
272
+ <div data-artifact-item data-artifact-label="borderless rounded — modern aesthetic"
273
+ data-chunk="admin-shell-rounded-borderless"
274
+ data-chunk-kind="page"
275
+ data-chunk-domain="layout"
276
+ data-chunk-description="Rounded borderless admin shell — floating card aesthetic with gap between sidebar and content. Modern SaaS visual style."
277
+ data-chunk-keywords="admin shell rounded borderless floating card sidebar content modern saas aesthetic layout">
278
+ <admin-shell class="admin-shell-demo" mode="rounded borderless">
279
+ <admin-sidebar slot="leading" name="demo-rounded">
280
+ <admin-topbar slot="header">
281
+ <admin-entity-item slot="heading">
282
+ <icon-ui slot="icon" name="lightning"></icon-ui>
283
+ <span slot="label">Adia Studio</span>
284
+ </admin-entity-item>
285
+ </admin-topbar>
286
+ <section-ui>
287
+ <nav-ui>
288
+ <nav-item-ui icon="house" text="Home" selected></nav-item-ui>
289
+ <nav-item-ui icon="tray" text="Inbox" badge="4"></nav-item-ui>
290
+ <nav-item-ui icon="chart-bar" text="Analytics"></nav-item-ui>
291
+ <nav-item-ui icon="gear" text="Settings"></nav-item-ui>
292
+ </nav-ui>
293
+ </section-ui>
294
+ <admin-statusbar slot="footer">
295
+ <admin-entity-item slot="heading">
296
+ <avatar-ui slot="icon" text="KG" size="sm"></avatar-ui>
297
+ <span slot="label">Kim Granlund</span>
298
+ </admin-entity-item>
299
+ </admin-statusbar>
300
+ </admin-sidebar>
301
+ <admin-content>
302
+ <admin-topbar>
303
+ <button-ui data-sidebar-toggle="leading" icon="sidebar" variant="ghost" size="sm"></button-ui>
304
+ <breadcrumb-ui><span>Home</span></breadcrumb-ui>
305
+ <span data-spacer></span>
306
+ <button-ui icon="bell" variant="ghost" size="sm"></button-ui>
307
+ </admin-topbar>
308
+ <admin-scroll>
309
+ <admin-page>
310
+ <admin-page-header>
311
+ <header data-flush>
312
+ <div><h1>Home</h1></div>
313
+ </header>
314
+ </admin-page-header>
315
+ <admin-page-body>
316
+ <section>
317
+ <div class="demo-content-area"><p>Page body.</p></div>
318
+ </section>
319
+ </admin-page-body>
320
+ </admin-page>
321
+ </admin-scroll>
322
+ </admin-content>
323
+ </admin-shell>
324
+ </div>
325
+
326
+ </div>
327
+ </section>
@@ -0,0 +1,44 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" theme="auto">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Admin Shell (pattern) — AdiaUI</title>
7
+
8
+ <!-- Token base -->
9
+ <link rel="stylesheet" href="../../styles/resets.css">
10
+ <link rel="stylesheet" href="../../styles/tokens.css">
11
+
12
+ <!-- Component CSS — primitives this pattern composes -->
13
+ <link rel="stylesheet" href="../../components/code/code.css">
14
+ <link rel="stylesheet" href="../../components/tag/tag.css">
15
+
16
+ <!-- Component JS -->
17
+ <script type="module" src="../../components/code/code.js"></script>
18
+ <script type="module" src="../../components/tag/tag.js"></script>
19
+
20
+ <style>
21
+ :where(html, body) { margin: 0; min-height: 100vh; background: var(--md-sys-color-neutral-background); color: var(--md-sys-color-neutral-on-surface); font-family: var(--a-font-family); }
22
+ main { max-width: 960px; margin-inline: auto; padding: var(--a-space-6) var(--a-space-5); }
23
+ </style>
24
+ </head>
25
+ <body>
26
+
27
+ <main id="demo-root">
28
+ <p>Loading examples…</p>
29
+ </main>
30
+
31
+ <script type="module">
32
+ const root = document.getElementById('demo-root');
33
+ try {
34
+ const res = await fetch('./admin-shell.examples.html');
35
+ if (!res.ok) throw new Error(`fetch failed (${res.status})`);
36
+ root.innerHTML = await res.text();
37
+ } catch (err) {
38
+ root.innerHTML = `<p style="color:var(--a-danger-strong);">Failed to load admin-shell.examples.html — ${err.message}</p>`;
39
+ console.error('[admin-shell.html]', err);
40
+ }
41
+ </script>
42
+
43
+ </body>
44
+ </html>
@@ -0,0 +1,111 @@
1
+ <header>
2
+ <div>
3
+ <h1>Agent Cost &amp; Usage</h1>
4
+ <div data-actions>
5
+ <tag-ui size="sm">tag-ui</tag-ui> <tag-ui size="sm">stat-ui</tag-ui> <tag-ui size="sm">alert-ui</tag-ui>
6
+ </div>
7
+ </div>
8
+ <p>How an agent surfaces its own consumption: token usage, dollar cost, rate-limit headroom. Three shapes — an inline footer indicator, a detailed breakdown card for billing/admin pages, and a rate-limit alert for soft warnings.</p>
9
+ </header>
10
+
11
+ <section data-section data-property="when-to-use">
12
+ <h2 variant="section">When to use</h2>
13
+ <p data-note>
14
+ The user is paying for the agent — directly (per-call billing) or
15
+ indirectly (their company's plan). Surface usage where it informs
16
+ a decision: at the bottom of a chat thread (inline), in the
17
+ workspace billing tab (detailed), and as an inline alert when
18
+ they're approaching a cap. Don't surface it inside every
19
+ individual reply — the noise outweighs the signal.
20
+ </p>
21
+ </section>
22
+
23
+ <section data-section data-property="inline">
24
+ <h2 variant="section">Inline indicator</h2>
25
+ <p data-note>Compact footer for the chat thread. Tokens + cost + duration. Uses <code>tag-ui</code> in a row; subtle text color so it doesn't compete with replies.</p>
26
+ <div data-artifact-container>
27
+ <div data-artifact-item data-artifact-label="inline cost indicator">
28
+ <row-ui data-chunk="agent-cost-inline" gap="2" align="center" padding="2" style="max-width: 560px;">
29
+ <tag-ui icon="coins" size="sm">$0.014</tag-ui>
30
+ <tag-ui icon="hash" size="sm">2,184 tok</tag-ui>
31
+ <tag-ui icon="timer" size="sm">3.2s</tag-ui>
32
+ <row-ui grow></row-ui>
33
+ <text-ui color="subtle" size="sm">claude-opus-4-7</text-ui>
34
+ </row-ui>
35
+ </div>
36
+ </div>
37
+ </section>
38
+
39
+ <section data-section data-property="detailed">
40
+ <h2 variant="section">Detailed breakdown card</h2>
41
+ <p data-note>Full breakdown for a billing or admin view. Stat tiles for the headline numbers; <code>description-list-ui</code> for the per-channel decomposition (input / output / cache).</p>
42
+ <div data-artifact-container>
43
+ <div data-artifact-item data-artifact-label="cost breakdown card">
44
+ <card-ui data-chunk="agent-cost-detailed" style="max-width: 560px;">
45
+ <header>
46
+ <span slot="heading" variant="section">Today's usage</span>
47
+ <text-ui slot="description" color="subtle">Apr 29 · across all sessions</text-ui>
48
+ </header>
49
+ <section>
50
+ <col-ui gap="3">
51
+ <grid-ui columns="3" gap="2">
52
+ <stat-ui label="Cost" value="$2.41" trend="up" delta="+18%"></stat-ui>
53
+ <stat-ui label="Tokens" value="184k" trend="up" delta="+12%"></stat-ui>
54
+ <stat-ui label="Calls" value="47" trend="flat"></stat-ui>
55
+ </grid-ui>
56
+ <description-list-ui layout="inline" align="between">
57
+ <dt>Input tokens</dt><dd>142,108 · $0.43</dd>
58
+ <dt>Output tokens</dt><dd>38,294 · $1.72</dd>
59
+ <dt>Cache reads</dt><dd>3,841 · $0.01</dd>
60
+ <dt>Cache writes</dt><dd>1,267 · $0.25</dd>
61
+ </description-list-ui>
62
+ </col-ui>
63
+ </section>
64
+ <footer divider>
65
+ <text-ui slot="description" color="subtle" size="sm">Plan limit: 1M tokens / day</text-ui>
66
+ <button-ui slot="action" text="View invoice" variant="ghost" size="sm" icon-leading="receipt"></button-ui>
67
+ </footer>
68
+ </card-ui>
69
+ </div>
70
+ </div>
71
+ </section>
72
+
73
+ <section data-section data-property="rate-limit">
74
+ <h2 variant="section">Rate-limit warning</h2>
75
+ <p data-note>Soft warning when the user is approaching a rate-limit. <code>alert-ui variant="warning"</code> with a <code>progress-ui</code> showing remaining headroom. Action button offers upgrade or wait-time.</p>
76
+ <div data-artifact-container>
77
+ <div data-artifact-item data-artifact-label="rate-limit warning">
78
+ <alert-ui data-chunk="agent-rate-limit" variant="warning" icon="warning" style="max-width: 560px;">
79
+ <col-ui slot="content" gap="2">
80
+ <text-ui strong>Approaching token limit</text-ui>
81
+ <text-ui>You've used 870k of your 1M daily token allowance. Resets at midnight UTC (in 4h 12m).</text-ui>
82
+ <progress-ui value="87" size="sm"></progress-ui>
83
+ <row-ui gap="2" justify="end">
84
+ <button-ui text="Wait" variant="ghost" size="sm"></button-ui>
85
+ <button-ui text="Upgrade plan" variant="primary" size="sm"></button-ui>
86
+ </row-ui>
87
+ </col-ui>
88
+ </alert-ui>
89
+ </div>
90
+ </div>
91
+ </section>
92
+
93
+ <section data-section data-property="composition">
94
+ <h2 variant="section">Composition rules</h2>
95
+ <ul>
96
+ <li><strong>Inline = three signals max</strong> — cost, tokens, duration. Anything more belongs in the detailed view.</li>
97
+ <li><strong>Stats round consistently</strong> — kilo-tokens at 3 sig figs (184k, 1.42M); cost to 2 decimals ($0.01 floor).</li>
98
+ <li><strong>Rate-limit warning fires at 80%, not 100%</strong> — gives the user time to act. The 100% case is an error, not a warning.</li>
99
+ <li><strong>Trend deltas are vs the prior day</strong> — week-over-week deltas confuse users in active sessions. Use week comparison only on the billing tab.</li>
100
+ </ul>
101
+ </section>
102
+
103
+ <section data-section data-property="cross-references">
104
+ <h2 variant="section">See also</h2>
105
+ <ul>
106
+ <li><a href="/site/components/stat">stat-ui</a> — tile primitive used in detailed breakdown.</li>
107
+ <li><a href="/site/components/alert">alert-ui</a> — the rate-limit warning surface.</li>
108
+ <li><a href="/site/components/progress">progress-ui</a> — headroom indicator.</li>
109
+ <li><a href="/site/components/tag">tag-ui</a> — inline indicator chips.</li>
110
+ </ul>
111
+ </section>
@@ -0,0 +1,62 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" theme="auto">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Agent Cost &amp; Usage (pattern) — AdiaUI</title>
7
+
8
+ <!-- Token base -->
9
+ <link rel="stylesheet" href="../../styles/resets.css">
10
+ <link rel="stylesheet" href="../../styles/tokens.css">
11
+
12
+ <!-- Component CSS — primitives this pattern composes -->
13
+ <link rel="stylesheet" href="../../components/alert/alert.css">
14
+ <link rel="stylesheet" href="../../components/button/button.css">
15
+ <link rel="stylesheet" href="../../components/card/card.css">
16
+ <link rel="stylesheet" href="../../components/col/col.css">
17
+ <link rel="stylesheet" href="../../components/description-list/description-list.css">
18
+ <link rel="stylesheet" href="../../components/grid/grid.css">
19
+ <link rel="stylesheet" href="../../components/progress/progress.css">
20
+ <link rel="stylesheet" href="../../components/row/row.css">
21
+ <link rel="stylesheet" href="../../components/stat/stat.css">
22
+ <link rel="stylesheet" href="../../components/tag/tag.css">
23
+ <link rel="stylesheet" href="../../components/text/text.css">
24
+
25
+ <!-- Component JS -->
26
+ <script type="module" src="../../components/alert/alert.js"></script>
27
+ <script type="module" src="../../components/button/button.js"></script>
28
+ <script type="module" src="../../components/card/card.js"></script>
29
+ <script type="module" src="../../components/col/col.js"></script>
30
+ <script type="module" src="../../components/description-list/description-list.js"></script>
31
+ <script type="module" src="../../components/grid/grid.js"></script>
32
+ <script type="module" src="../../components/progress/progress.js"></script>
33
+ <script type="module" src="../../components/row/row.js"></script>
34
+ <script type="module" src="../../components/stat/stat.js"></script>
35
+ <script type="module" src="../../components/tag/tag.js"></script>
36
+ <script type="module" src="../../components/text/text.js"></script>
37
+
38
+ <style>
39
+ :where(html, body) { margin: 0; min-height: 100vh; background: var(--md-sys-color-neutral-background); color: var(--md-sys-color-neutral-on-surface); font-family: var(--a-font-family); }
40
+ main { max-width: 960px; margin-inline: auto; padding: var(--a-space-6) var(--a-space-5); }
41
+ </style>
42
+ </head>
43
+ <body>
44
+
45
+ <main id="demo-root">
46
+ <p>Loading examples…</p>
47
+ </main>
48
+
49
+ <script type="module">
50
+ const root = document.getElementById('demo-root');
51
+ try {
52
+ const res = await fetch('./agent-cost.examples.html');
53
+ if (!res.ok) throw new Error(`fetch failed (${res.status})`);
54
+ root.innerHTML = await res.text();
55
+ } catch (err) {
56
+ root.innerHTML = `<p style="color:var(--a-danger-strong);">Failed to load agent-cost.examples.html — ${err.message}</p>`;
57
+ console.error('[agent-cost.html]', err);
58
+ }
59
+ </script>
60
+
61
+ </body>
62
+ </html>