@adia-ai/web-modules 0.6.17 → 0.6.19

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 CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog — @adia-ai/web-modules
2
2
 
3
+ ## [0.6.19] — 2026-05-21
4
+
5
+ ### Added — `./shell/with-css` opt-in export (FEEDBACK-25)
6
+
7
+ - `import '@adia-ai/web-modules/shell/with-css'` registers the JS-backed
8
+ shell elements (`admin-shell`, `admin-sidebar`, `admin-command`) AND
9
+ mounts the shell layout CSS in one side-effect import. The default
10
+ `./shell` subpath stays CSS-free to preserve the explicit-import contract
11
+ (ADR-0030); `/with-css` is the named opt-in. New `shell/with-css.js` +
12
+ `shell/with-css.d.ts`.
13
+
14
+ ### Added — `types` condition on CSS subpath exports (FEEDBACK-26)
15
+
16
+ - The `shell` / `chat` / `editor` / `simple` / `runtime` / `theme` `.css`
17
+ subpath exports now carry a `types` condition (`css-module.d.ts` stub),
18
+ fixing TS2882 under `moduleResolution: bundler`.
19
+
20
+ ### Docs — per-cluster import contract (FEEDBACK-25)
21
+
22
+ - README documents that the per-cluster JS import registers only the
23
+ JS-backed elements — the CSS-only structural children (`admin-content`,
24
+ `admin-topbar`, `admin-page`, …) need no JS registration by design — plus
25
+ the new `/with-css` opt-in.
26
+
27
+ ## [0.6.18] — 2026-05-21
28
+
29
+ ### Added — `admin-sidebar` resize-handle diagnostic (FB-17)
30
+
31
+ - **`<admin-sidebar resizable>` now warns when no `[data-resize]` child is
32
+ present.** `#setupResizeHandle()` previously returned silently when the
33
+ author-supplied drag-handle element was missing, leaving `resizable` a no-op
34
+ with zero diagnostic signal. It now emits a one-shot `console.warn`
35
+ (WeakSet-guarded) naming the fix. Warning-only; no functional change.
36
+ (~22 LOC `admin-sidebar.js`.)
37
+
38
+ ### Docs
39
+
40
+ - **Live `<admin-sidebar>` variant gallery + collapse/expand demo** added to `admin-shell.html` and `admin-shell.examples.html` — covers the resizable / collapsible / variant axes in one browsable surface.
41
+
42
+ ### Note
43
+
44
+ - The headline v0.6.18 work shipped in `@adia-ai/web-components` — `stat-ui` + `table-ui` `loading` props (FB-12 P2) and `text-ui` `size` / `color` / `weight` / `text-align` overlay attributes (FB-10). See `packages/web-components/CHANGELOG.md#0618--2026-05-21` for details.
45
+
3
46
  ## [0.6.17] — 2026-05-21
4
47
 
5
48
  ### Fixed
package/README.md CHANGED
@@ -33,6 +33,13 @@ import '@adia-ai/web-modules/theme'; // theme-panel
33
33
  import '@adia-ai/web-modules/runtime'; // gen-root + a2ui-root
34
34
  ```
35
35
 
36
+ > The per-cluster import registers the **JS-backed** elements only. Each
37
+ > cluster also has **CSS-only** structural children (e.g. `admin-content`,
38
+ > `admin-topbar`, `admin-page` — see the [Clusters](#clusters) table) that
39
+ > need no JS registration: they are plain custom elements styled entirely
40
+ > by the cluster CSS. `customElements.get()` returning `undefined` for one
41
+ > of them is expected, not a bug.
42
+
36
43
  ## Import: CSS (since v0.4.5)
37
44
 
38
45
  > ⚠️ **Required — shell layouts depend on this CSS.** Shell JS modules
@@ -58,6 +65,27 @@ import '@adia-ai/web-modules/runtime/gen-root.css';
58
65
 
59
66
  > **For pre-v0.4.5 consumers:** if you were importing CSS via the relative `node_modules` path (`'../node_modules/@adia-ai/web-modules/editor/editor-shell/editor-shell.css'`), switch to the package-specifier form above. The relative-path form is fragile under pnpm, Yarn PnP, and npm hoisting; the new package-specifier form works under all three.
60
67
 
68
+ ## Import: JS + CSS in one line (`/with-css`)
69
+
70
+ For the `shell` cluster, the `/with-css` opt-in collapses the JS + CSS
71
+ imports into a single side-effect import:
72
+
73
+ ```js
74
+ import '@adia-ai/web-modules/shell/with-css';
75
+ ```
76
+
77
+ This registers the JS-backed shell elements (`admin-shell`,
78
+ `admin-sidebar`, `admin-command`) **and** mounts the shell layout CSS
79
+ (`admin-shell.css` bundles every sub-component style). It is the one-line
80
+ equivalent of `import '@adia-ai/web-modules/shell'` +
81
+ `import '@adia-ai/web-modules/shell/admin-shell.css'`.
82
+
83
+ The default `@adia-ai/web-modules/shell` subpath stays CSS-free to
84
+ preserve the explicit-import contract ([ADR-0030](../../.brain/adrs/0030-shell-with-css-opt-in-carve-out.md));
85
+ `/with-css` is the named opt-in. Per-element companions
86
+ (`@adia-ai/web-modules/shell/admin-shell/with-css`) also exist for
87
+ finer-grained imports.
88
+
61
89
  Each cluster carries a **shell host** (behavior-only orchestrator) plus
62
90
  a **family of bespoke shell-tier children** (cluster-namespaced custom
63
91
  elements with state-as-attribute semantics) per [ADR-0023](../../.brain/adrs/0023-bespoke-shell-tier-children.md). The bespoke vocabulary is the only recognized authoring shape since v0.4.0 ([ADR-0024](../../.brain/adrs/0024-legacy-shell-shapes-retired.md)).
@@ -0,0 +1,6 @@
1
+ // Ambient declaration so TypeScript (moduleResolution: bundler / node16)
2
+ // can resolve CSS side-effect subpath imports — e.g.
3
+ // import '@adia-ai/web-components/css';
4
+ // without a TS2882 "no type declarations for side-effect import" error.
5
+ // See FEEDBACK-26.
6
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-modules",
3
- "version": "0.6.17",
3
+ "version": "0.6.19",
4
4
  "description": "AdiaUI composite custom elements \u2014 shell, chat, editor, runtime clusters built from @adia-ai/web-components primitives. Subpath exports per cluster.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -14,6 +14,11 @@
14
14
  "import": "./shell/index.js",
15
15
  "default": "./shell/index.js"
16
16
  },
17
+ "./shell/with-css": {
18
+ "types": "./shell/with-css.d.ts",
19
+ "import": "./shell/with-css.js",
20
+ "default": "./shell/with-css.js"
21
+ },
17
22
  "./shell/*": {
18
23
  "types": "./shell/*/*.d.ts",
19
24
  "import": "./shell/*/*.js",
@@ -24,9 +29,18 @@
24
29
  "import": "./shell/*/with-css.js",
25
30
  "default": "./shell/*/with-css.js"
26
31
  },
27
- "./shell/*.css": "./shell/*/*.css",
28
- "./shell/*/*.css": "./shell/*/*.css",
29
- "./shell/*/css/*.css": "./shell/*/css/*.css",
32
+ "./shell/*.css": {
33
+ "types": "./css-module.d.ts",
34
+ "default": "./shell/*/*.css"
35
+ },
36
+ "./shell/*/*.css": {
37
+ "types": "./css-module.d.ts",
38
+ "default": "./shell/*/*.css"
39
+ },
40
+ "./shell/*/css/*.css": {
41
+ "types": "./css-module.d.ts",
42
+ "default": "./shell/*/css/*.css"
43
+ },
30
44
  "./chat": {
31
45
  "types": "./chat/index.d.ts",
32
46
  "import": "./chat/index.js",
@@ -42,9 +56,18 @@
42
56
  "import": "./chat/*/with-css.js",
43
57
  "default": "./chat/*/with-css.js"
44
58
  },
45
- "./chat/*.css": "./chat/*/*.css",
46
- "./chat/*/*.css": "./chat/*/*.css",
47
- "./chat/*/css/*.css": "./chat/*/css/*.css",
59
+ "./chat/*.css": {
60
+ "types": "./css-module.d.ts",
61
+ "default": "./chat/*/*.css"
62
+ },
63
+ "./chat/*/*.css": {
64
+ "types": "./css-module.d.ts",
65
+ "default": "./chat/*/*.css"
66
+ },
67
+ "./chat/*/css/*.css": {
68
+ "types": "./css-module.d.ts",
69
+ "default": "./chat/*/css/*.css"
70
+ },
48
71
  "./editor": {
49
72
  "types": "./editor/index.d.ts",
50
73
  "import": "./editor/index.js",
@@ -65,9 +88,18 @@
65
88
  "import": "./editor/*/with-css.js",
66
89
  "default": "./editor/*/with-css.js"
67
90
  },
68
- "./editor/*.css": "./editor/*/*.css",
69
- "./editor/*/*.css": "./editor/*/*.css",
70
- "./editor/*/css/*.css": "./editor/*/css/*.css",
91
+ "./editor/*.css": {
92
+ "types": "./css-module.d.ts",
93
+ "default": "./editor/*/*.css"
94
+ },
95
+ "./editor/*/*.css": {
96
+ "types": "./css-module.d.ts",
97
+ "default": "./editor/*/*.css"
98
+ },
99
+ "./editor/*/css/*.css": {
100
+ "types": "./css-module.d.ts",
101
+ "default": "./editor/*/css/*.css"
102
+ },
71
103
  "./simple": {
72
104
  "types": "./simple/index.d.ts",
73
105
  "import": "./simple/index.js",
@@ -83,9 +115,18 @@
83
115
  "import": "./simple/*/with-css.js",
84
116
  "default": "./simple/*/with-css.js"
85
117
  },
86
- "./simple/*.css": "./simple/*/*.css",
87
- "./simple/*/*.css": "./simple/*/*.css",
88
- "./simple/*/css/*.css": "./simple/*/css/*.css",
118
+ "./simple/*.css": {
119
+ "types": "./css-module.d.ts",
120
+ "default": "./simple/*/*.css"
121
+ },
122
+ "./simple/*/*.css": {
123
+ "types": "./css-module.d.ts",
124
+ "default": "./simple/*/*.css"
125
+ },
126
+ "./simple/*/css/*.css": {
127
+ "types": "./css-module.d.ts",
128
+ "default": "./simple/*/css/*.css"
129
+ },
89
130
  "./runtime": {
90
131
  "types": "./runtime/index.d.ts",
91
132
  "import": "./runtime/index.js",
@@ -96,9 +137,18 @@
96
137
  "import": "./runtime/*/*.js",
97
138
  "default": "./runtime/*/*.js"
98
139
  },
99
- "./runtime/*.css": "./runtime/*/*.css",
100
- "./runtime/*/*.css": "./runtime/*/*.css",
101
- "./runtime/*/css/*.css": "./runtime/*/css/*.css",
140
+ "./runtime/*.css": {
141
+ "types": "./css-module.d.ts",
142
+ "default": "./runtime/*/*.css"
143
+ },
144
+ "./runtime/*/*.css": {
145
+ "types": "./css-module.d.ts",
146
+ "default": "./runtime/*/*.css"
147
+ },
148
+ "./runtime/*/css/*.css": {
149
+ "types": "./css-module.d.ts",
150
+ "default": "./runtime/*/css/*.css"
151
+ },
102
152
  "./theme": {
103
153
  "types": "./theme/index.d.ts",
104
154
  "import": "./theme/index.js",
@@ -109,9 +159,18 @@
109
159
  "import": "./theme/*/*.js",
110
160
  "default": "./theme/*/*.js"
111
161
  },
112
- "./theme/*.css": "./theme/*/*.css",
113
- "./theme/*/*.css": "./theme/*/*.css",
114
- "./theme/*/css/*.css": "./theme/*/css/*.css",
162
+ "./theme/*.css": {
163
+ "types": "./css-module.d.ts",
164
+ "default": "./theme/*/*.css"
165
+ },
166
+ "./theme/*/*.css": {
167
+ "types": "./css-module.d.ts",
168
+ "default": "./theme/*/*.css"
169
+ },
170
+ "./theme/*/css/*.css": {
171
+ "types": "./css-module.d.ts",
172
+ "default": "./theme/*/css/*.css"
173
+ },
115
174
  "./generative": {
116
175
  "types": "./generative/index.d.ts",
117
176
  "import": "./generative/index.js",
@@ -149,6 +208,7 @@
149
208
  "!generative/**/*.examples.js",
150
209
  "!generative/**/*.html",
151
210
  "index.js",
211
+ "css-module.d.ts",
152
212
  "README.md",
153
213
  "CHANGELOG.md"
154
214
  ],
@@ -54,6 +54,10 @@ class AdminSidebar extends UIElement {
54
54
 
55
55
  static template = () => null;
56
56
 
57
+ // FEEDBACK-17: elements already warned about a missing [data-resize]
58
+ // handle — one-shot per element so re-renders stay quiet. GC-friendly.
59
+ static #warnedNoHandle = new WeakSet();
60
+
57
61
  // The width the sidebar had before being collapsed — used for restore.
58
62
  // Map keyed by sidebar name allows multiple sidebars on one host.
59
63
  #previousExpandedWidth = '';
@@ -149,7 +153,23 @@ class AdminSidebar extends UIElement {
149
153
 
150
154
  #setupResizeHandle() {
151
155
  const handle = this.querySelector(':scope > [data-resize]');
152
- if (!handle) return;
156
+ if (!handle) {
157
+ // FEEDBACK-17: `resizable` opts in to drag-resize but relies on an
158
+ // author-supplied `[data-resize]` child. A silent return left authors
159
+ // with a no-op `resizable` attribute and zero diagnostic signal.
160
+ if (!AdminSidebar.#warnedNoHandle.has(this)) {
161
+ AdminSidebar.#warnedNoHandle.add(this);
162
+ // eslint-disable-next-line no-console
163
+ console.warn(
164
+ '[admin-sidebar] `resizable` is set but no `[data-resize]` child ' +
165
+ 'was found. Add `<div data-resize></div>` as a direct child to ' +
166
+ 'enable drag-to-resize. (Unlike `collapsible`, `resizable` requires ' +
167
+ 'this author-supplied handle.)',
168
+ this,
169
+ );
170
+ }
171
+ return;
172
+ }
153
173
 
154
174
  const slot = this.getAttribute('slot');
155
175
  const isLeading = slot === 'leading';
@@ -0,0 +1,3 @@
1
+ // Opt-in `/with-css` companion for the shell cluster (FEEDBACK-25).
2
+ // Side-effect-only module — no type surface.
3
+ export {};
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Opt-in `/with-css` companion for the whole shell cluster.
3
+ *
4
+ * Side-effect-only module. Importing this:
5
+ * 1. Loads `./index.js` — registers the JS-backed shell vocabulary
6
+ * (admin-shell, admin-sidebar, admin-command)
7
+ * 2. Side-effect-imports `./admin-shell/admin-shell.css` — the shell
8
+ * layout CSS. One file bundles every sub-component style (topbar,
9
+ * content, page, scroll, statusbar), so the CSS-only shell elements
10
+ * (admin-topbar, admin-content, admin-page, admin-page-header,
11
+ * admin-page-body, admin-scroll) are styled by it too.
12
+ *
13
+ * Consumer-facing entry point:
14
+ * import '@adia-ai/web-modules/shell/with-css';
15
+ *
16
+ * The default `@adia-ai/web-modules/shell` subpath preserves the
17
+ * explicit-import CSS contract (ADR-0030); this `/with-css` companion is
18
+ * the named opt-in for a one-line working shell. See FEEDBACK-25.
19
+ */
20
+ import './index.js';
21
+ import './admin-shell/admin-shell.css';