@mtdt/observeops-ds-spec 0.1.2 → 0.1.4

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.
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "layout-screen-regions",
3
+ "component": "screenRegions / contentLayouts",
4
+ "display": "Screen regions",
5
+ "tier": "foundation",
6
+ "section": "Foundations",
7
+ "family": "Layout",
8
+ "status": "stable",
9
+ "summary": "Inside the content panel a standard page stacks four regions top-to-bottom: Page header (required) → Toolbar / filter bar (optional) → Body (required) → Footer / pagination (optional). The body takes one of 6 content layouts — single column, two-pane, master-detail, dashboard grid, three-pane, chart-over-grid.",
10
+ "props": {
11
+ "shape": {
12
+ "type": "string",
13
+ "default": "two-pane",
14
+ "enum": [
15
+ "single",
16
+ "two-pane",
17
+ "master-detail",
18
+ "dashboard",
19
+ "three-pane",
20
+ "chart-over-grid"
21
+ ],
22
+ "note": "the body's content layout"
23
+ },
24
+ "toolbar": {
25
+ "type": "boolean",
26
+ "default": "false",
27
+ "note": "show the optional toolbar / filter bar"
28
+ },
29
+ "footer": {
30
+ "type": "boolean",
31
+ "default": "false",
32
+ "note": "show the optional footer / pagination"
33
+ },
34
+ "callouts": {
35
+ "type": "boolean",
36
+ "default": "false",
37
+ "note": "render the annotated 4-region wireframe instead of the interactive panel"
38
+ }
39
+ },
40
+ "regions": [
41
+ "Page header — required; the page title + primary actions (carries the --primary left accent)",
42
+ "Toolbar / filter bar — optional; search, filters, view switches",
43
+ "Body — required; one of the 6 content layouts",
44
+ "Footer / pagination — optional; pagination, bulk-action summary"
45
+ ],
46
+ "contentLayouts": [
47
+ "single column — list / form",
48
+ "two-pane — left tree/menu + content",
49
+ "master-detail — list + drawer slide-over",
50
+ "dashboard grid — tiles",
51
+ "three-pane — saved-views rail + picker + content (e.g. Metric Explorer)",
52
+ "chart-over-grid — a fixed chart above a grid (e.g. Trap Viewer / log dashboards)"
53
+ ],
54
+ "do": [
55
+ "Compose top-down: Page header → Toolbar → Body → Footer.",
56
+ "Mark required regions (Page header, Body) with the primary left accent.",
57
+ "Pick the content layout that matches the task (two-pane for tree+content, master-detail for list+record)."
58
+ ],
59
+ "dont": [
60
+ "Don't omit the Page header (it's required).",
61
+ "Don't use a drawer for a panel-sized record where two-pane reads better."
62
+ ],
63
+ "tokensUsed": [
64
+ "--border-color",
65
+ "--page-background-color",
66
+ "--primary",
67
+ "--code-tag-background-color",
68
+ "--nav-panel-bg",
69
+ "--neutral-shadow-light"
70
+ ],
71
+ "related": [
72
+ "layout-app-shell",
73
+ "layout-grid"
74
+ ],
75
+ "storybook": "Foundations/Layout/Screen regions",
76
+ "a11y": {
77
+ "summary": "Region grammar. The Page header hosts the page heading (h1) + primary actions; the Body is the <main> content. Required regions carry the primary left accent.",
78
+ "issues": []
79
+ },
80
+ "knownIssues": [
81
+ "Shape references for the body — not live components."
82
+ ],
83
+ "changelog": [
84
+ "2026-06-29: added — the 4-region stack + 6 content layouts; interactive shape/toolbar/footer.",
85
+ "2026-06-29: fixed two-pane (30/70) and three-pane (18/26/56) column proportions (were rendering as equal columns).",
86
+ "2026-06-29: Usage enriched — when-to-use + where-it's-used."
87
+ ],
88
+ "whenToUse": "Compose a page top-to-bottom — header → (toolbar) → body → (footer) — then give the body one of six content layouts.",
89
+ "usedIn": [
90
+ "Every in-app page's content panel.",
91
+ "Two-pane → explorers, settings · Master-detail → alert/inventory records · Dashboard grid → dashboards.",
92
+ "Three-pane → metric / apm explorers · Chart-over-grid → trap viewer / log dashboards."
93
+ ]
94
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "layout-shells",
3
+ "component": "views/layouts/*",
4
+ "display": "Layout shells",
5
+ "tier": "foundation",
6
+ "section": "Foundations",
7
+ "family": "Layout",
8
+ "status": "stable",
9
+ "summary": "The 4 route shells (chosen by the src/app.vue switcher + route.meta.layout override) + 2 content layouts that render inside Layout. They differ by chrome: Layout (nav + header + content, the default) · LoginLayout (bare sign-in) · EmptyLayout / PublicLayout (no chrome, padded) · MonitorHierarchyLayout (tree + content) · Settings two-pane (menu + content).",
10
+ "props": {
11
+ "shell": {
12
+ "type": "string",
13
+ "default": "layout",
14
+ "enum": [
15
+ "layout",
16
+ "login",
17
+ "empty",
18
+ "public",
19
+ "monitor-hierarchy",
20
+ "settings"
21
+ ],
22
+ "note": "which shell to preview"
23
+ }
24
+ },
25
+ "do": [
26
+ "Use Layout for in-app pages (default — no route override).",
27
+ "Use LoginLayout for auth screens; it's also the not-logged-in fallback.",
28
+ "MonitorHierarchyLayout / Settings two-pane render INSIDE Layout — they are content layouts, not route shells."
29
+ ],
30
+ "dont": [
31
+ "Don't treat MonitorHierarchyLayout as a route shell (0 meta.layout overrides).",
32
+ "Don't add a route layout override unless you need EmptyLayout / PublicLayout."
33
+ ],
34
+ "tokensUsed": [
35
+ "--nav-panel-bg",
36
+ "--border-color",
37
+ "--page-background-color",
38
+ "--primary",
39
+ "--code-tag-background-color",
40
+ "--nav-hover-bg",
41
+ "--neutral-shadow-light"
42
+ ],
43
+ "related": [
44
+ "layout-app-shell",
45
+ "layout-screen-regions",
46
+ "layout-page-templates"
47
+ ],
48
+ "storybook": "Foundations/Layout/Layout shells",
49
+ "a11y": {
50
+ "summary": "Shell chrome reference. Each shell wraps the routed page; landmarks + focus order follow the App shell. LoginLayout is a bare, focus-trapped auth screen.",
51
+ "issues": []
52
+ },
53
+ "knownIssues": [
54
+ "MonitorHierarchyLayout is a content layout, NOT a route shell (0 meta.layout overrides) — a common misclassification."
55
+ ],
56
+ "changelog": [
57
+ "2026-06-29: added — the 4 route shells + 2 content layouts, with a recognizable per-shell preview.",
58
+ "2026-06-29: Usage enriched — when-to-use + where-it's-used."
59
+ ],
60
+ "whenToUse": "Which page frame to use — almost always the default Layout; switch only for login, print/export, or system (upgrade/restore) pages.",
61
+ "usedIn": [
62
+ "Layout — ~all authenticated routes (the default).",
63
+ "LoginLayout — login / reset / forgot + disk-full + the unauth fallback.",
64
+ "EmptyLayout — print-safe report export · PublicLayout — upgrade / restore.",
65
+ "MonitorHierarchyLayout — log / inventory / topology (inside Layout) · Settings two-pane — all settings submodules."
66
+ ]
67
+ }
@@ -177,7 +177,8 @@
177
177
  "MSelect"
178
178
  ],
179
179
  "changelog": [
180
- "2026-06-07: added — 3 render modes mapped; teal pills + JetBrains Mono verified light+dark; F1-F4; classified as Tag family input member (D12); Option B pages."
180
+ "2026-06-07: added — 3 render modes mapped; teal pills + JetBrains Mono verified light+dark; F1-F4; classified as Tag family input member (D12); Option B pages.",
181
+ "2026-06-29: rebuilt as the unified Tags Input — type=\"loose\" (free-create teal pills) + type=\"select\" (pick-from-list chips); added the suggestion menu + chevron, select disabled/loading states (FA spinner-third), and fixed the loading placeholder + field width."
181
182
  ],
182
183
  "storybook": "Molecules/LooseTags",
183
184
  "figma": {
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "selected-pills",
3
+ "component": "SelectedItemPills",
4
+ "display": "Selected Pills",
5
+ "tier": "molecule",
6
+ "family": "Tag",
7
+ "status": "stable",
8
+ "summary": "Teal key:value pills for a current selection inside a picker/multi-select trigger. Truncates to max-items, then a \"+N\" pill opens a popover listing the rest. Display-only (the home of the teal pills, read-only mode).",
9
+ "props": {
10
+ "value": {
11
+ "type": "string",
12
+ "default": "\"\"",
13
+ "note": "CSV (\"a:1,b:2\") or JSON array; or an Array set as a property."
14
+ },
15
+ "max-items": {
16
+ "type": "number",
17
+ "default": "1",
18
+ "note": "How many pills to show before collapsing the rest into +N."
19
+ }
20
+ },
21
+ "do": [
22
+ "Use inside a picker/multi-select trigger to show the current selection as teal key:value pills.",
23
+ "Set max-items to control how many show before collapsing into a +N overflow pill."
24
+ ],
25
+ "dont": [
26
+ "Don't use for an editable tag list — use Tags Input.",
27
+ "Don't rely on it for interaction; it is a display surface (the +N popover is the only affordance)."
28
+ ],
29
+ "a11y": {
30
+ "summary": "Read-only display. Pills are not interactive; the only affordance is the +N popover, which must be keyboard-reachable and dismissible. Each pill reads as \"key: value\".",
31
+ "issues": [
32
+ "The +N popover is hover/click-opened; ensure it is also keyboard-focusable in the product."
33
+ ]
34
+ },
35
+ "knownIssues": [
36
+ "Display-only — for an editable selection use the Dropdown (multiple) or Tags Input."
37
+ ],
38
+ "changelog": [
39
+ "2026-06-29: added a full registry (Details / Usage / Accessibility / Known issues / Changelog) — it previously rendered from a manifest fallback with only Details."
40
+ ],
41
+ "tokensUsed": [
42
+ "--main-tags-bg-color",
43
+ "--main-tags-text-color",
44
+ "--border-color",
45
+ "--page-background-color",
46
+ "--neutral-light"
47
+ ],
48
+ "related": [
49
+ "loose-tags",
50
+ "dropdown-picker",
51
+ "tag"
52
+ ],
53
+ "storybook": "Molecules/TagsList"
54
+ }
@@ -175,5 +175,9 @@
175
175
  "doc": "Atoms/Severity/Accessibility",
176
176
  "$note": "Catalogue-wide gap SF-001 = no visible :focus-visible ring; tracked in findings/."
177
177
  },
178
- "slots": "none — presentational (renders the dot + optional label from props; no slots)"
178
+ "slots": "none — presentational (renders the dot + optional label from props; no slots)",
179
+ "changelog": [
180
+ "2026-06-27: added to the Elements site — 13 severity levels in dot / dot+label / solid-chip / coloured-text / bg-fill shapes; source-accurate 11px dot (the Storybook reproduction enlarges to 14px).",
181
+ "2026-06-29: stripe shown in both real usages — the standalone bar AND the table/list left-rule row."
182
+ ]
179
183
  }
@@ -171,5 +171,10 @@
171
171
  ],
172
172
  "doc": "Molecules/Tooltip/Accessibility",
173
173
  "$note": "Catalogue-wide gap SF-001 = no visible :focus-visible ring; tracked in findings/."
174
- }
174
+ },
175
+ "changelog": [
176
+ "2026-06-29: added to the Elements site — obs-tooltip (hover/focus bubble): dark default + chart-like light variant, placements, disabled; render-first from tooltip.stories.js + popover.less.",
177
+ "2026-06-30: added the Rich content example (slotted title + key/values host hover-card, placement=right) to match the RichContent story; reworked the Examples gallery layout so open bubbles get directional breathing room (placements stacked & centered) — no longer overlap labels/neighbours or clip at the panel edge.",
178
+ "2026-06-30: added a Playground 'Content' control (Plain text / Rich host hover-card) via a new slot-preset control kind — lets you drive the slotted rich-content body live (snippet now serializes innerHTML)."
179
+ ]
175
180
  }
@@ -0,0 +1,112 @@
1
+ # Divider (`MDivider`) — Spec, Findings & Solutions
2
+
3
+ **Tier:** atom · **Source:** mkit (wraps Ant `a-divider`) · **Status:** core · **Maturity:** stable ·
4
+ **Storybook:** `Atoms/Divider` · **Registry:** `registry/divider.json` · **Figma:** not started
5
+
6
+ ## 1. Usage analytics
7
+
8
+ Total **133×** across **93** files. By type: **horizontal 126** (implicit default), **vertical 7**
9
+ (`type="vertical"`). By module: settings 31 · shared components 14 · alert 10 · ncm-approval 6 · ncm 6 ·
10
+ topology 5 · apm 4 · … `dashed` and with-text/`orientation` have **zero** product uses. *(byType exact
11
+ from the sweep; the horizontal count is total − vertical.)*
12
+
13
+ ## 2. Overview
14
+
15
+ A divider is a thin rule that marks a **semantic break** between content. Use **horizontal** (the
16
+ default) to separate stacked sections and **vertical** (`type="vertical"`) to separate inline items. If
17
+ you only want breathing room, that is **spacing**, not a divider — the product leans on plain horizontal
18
+ rules and reserves vertical for genuinely inline groupings.
19
+
20
+ ## 3. Anatomy
21
+
22
+ A single `role="separator"` rule: the **line** (1px, `var(--border-color)`) and, for a with-text
23
+ divider, an **inner label** (`var(--page-text-color)`) breaking the line, positioned center / start / end.
24
+
25
+ ## 4. Options
26
+
27
+ | Type | What | Usage |
28
+ | --- | --- | --- |
29
+ | `horizontal` (default) | full-width rule between stacked sections | 126× |
30
+ | `vertical` | inline separator between row items | 7× |
31
+ | `dashed` | dashed/soft boundary | 0× (kit-supported) |
32
+ | with-text (slot + `orientation`) | labelled section rule | 0× (kit-supported) |
33
+ | `darkVariant` | tuned for a dark background | rare |
34
+
35
+ ## 5. Behaviors
36
+
37
+ Static and decorative — no interactive states, no overflow behavior. A vertical divider is inline-block
38
+ and inherits line height from its row; a with-text divider splits into `::before`/`::after` segments
39
+ whose widths shift with `orientation` (`start` → label flush left, `end` → flush right).
40
+
41
+ ## 6. Content & writing
42
+
43
+ With-text labels should be short section names (1–3 words), Title Case, no trailing punctuation. Prefer
44
+ a real heading when the section is important — a label-on-a-rule is a lightweight affordance, not a heading.
45
+
46
+ ## 7. Accessibility
47
+
48
+ Ant renders `role="separator"`, conveying a thematic break to assistive tech. A rule is a **visual**
49
+ break, not a landmark/heading — give navigable sections a real heading. Line contrast is a low hairline
50
+ by design (`--border-color`: `#e3e8f2` light / `#1d2a3e` dark); never rely on a divider alone to convey
51
+ meaning. See `Atoms/Divider/Accessibility`.
52
+
53
+ ## 8. Props / API
54
+
55
+ | Prop | Type | Default | Notes |
56
+ | --- | --- | --- | --- |
57
+ | `type` | string | `horizontal` | `horizontal` \| `vertical` (inline separator) |
58
+ | `dashed` | boolean | `false` | dashed instead of solid |
59
+ | `orientation` | string | `''` (center) | `start` → left, `end` → right (label position) |
60
+ | `darkVariant` | boolean | `false` | tuned for a dark background |
61
+
62
+ Slot: default = optional label text (renders a with-text divider). Events: none.
63
+
64
+ ## 9. Design tokens used
65
+
66
+ `--border-color` (the line), `--page-text-color` (with-text label), `--neutral-lightest` (label
67
+ background in forms), `--action-dropdown-divider` (menu dividers), `--nav-divider-bg` (nav dividers).
68
+
69
+ ## 10. Findings & inconsistencies
70
+
71
+ ### F1 — `dashed` renders solid (no-op) · Low · Open
72
+
73
+ The `dashed` prop has **no visible effect**. The DS override `.ant-divider { background: var(--border-color) }`
74
+ (general.less:213, form.less:448) paints a solid 1px line via `background` over Ant's dashed `border-top`.
75
+ Verified by computed style: the dashed element carries `border-top-style: dashed` **and**
76
+ `background: rgb(227,232,242)` on a 1px-high box — the solid fill wins. 0× product use (the no-op is why).
77
+
78
+ Note: with-text / `orientation` are kit-supported but unused — surfaced as available options so the catalogue
79
+ matches reality.
80
+
81
+ ## 11. Recommended solutions
82
+
83
+ **F1:** to make `dashed` work, stop painting the line via `background` on `.ant-divider` and let Ant's
84
+ `border-top` render it — e.g. scope the `background` fill to the non-dashed case, or add
85
+ `.ant-divider-dashed { background: transparent }`. Until then, treat `dashed` as unavailable. Otherwise
86
+ guidance-only: prefer spacing over dividers for non-semantic gaps; reserve vertical for inline groupings.
87
+
88
+ ## 12. Do / Don't
89
+
90
+ **Do:** one rule per boundary; try whitespace first; inherit `var(--border-color)`; vertical for inline,
91
+ horizontal for stacked. · **Don't:** use a divider as a spacer; stack dividers / box every section;
92
+ rely on a divider alone to convey meaning.
93
+
94
+ ## 13. Decision-grade usage
95
+
96
+ Decision flow (first match wins): space-only → margin, not a divider · inline items → `vertical` ·
97
+ labelled group → with-text · else stacked → horizontal · modifiers dashed/darkVariant. Per-type
98
+ Use-when/Don't/Example/As-seen-in cards are word-identical to `registry/divider.json` `usageRules` and
99
+ the `Atoms/Divider/Usage` page.
100
+
101
+ ## 14. Related components
102
+
103
+ `Table` (row rules) · `Toolbars` (inline action groups that use a vertical divider) · `Form Item`
104
+ (form-section boundaries) · spacing tokens (the first thing to try instead of a divider).
105
+
106
+ ## 15. Changelog
107
+
108
+ - **2026-07-04** — Added to the DS (first catalogue). Swept 133×/93 files (126 horizontal + 7 vertical;
109
+ with-text unused). Line verified as `var(--border-color)` (light + dark). Decision-grade Usage authored
110
+ and mirrored into the registry.
111
+ - **2026-07-04** — **F1 (owner-caught):** `dashed` is a no-op (renders solid) — the `.ant-divider` background
112
+ override paints over Ant's dashed border. Flagged in the Dashed story + Usage; measured by computed style.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mtdt/observeops-ds-spec",
3
- "version": "0.1.2",
4
- "description": "Machine-readable spec and AI operating contract for the Motadata ObserveOps design system components, tokens, page recipes, layout structure, and the rules an AI tool follows to build ObserveOps UI faithfully.",
3
+ "version": "0.1.4",
4
+ "description": "Machine-readable spec and AI operating contract for the Motadata ObserveOps design system \u2014 components, tokens, page recipes, layout structure, and the rules an AI tool follows to build ObserveOps UI faithfully.",
5
5
  "license": "UNLICENSED",
6
6
  "main": "index.js",
7
7
  "files": [
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@mtdt/observeops-ds-spec",
3
- "version": "0.1.2",
4
- "generated": "2026-06-19T04:10:19.781Z",
3
+ "version": "0.1.4",
4
+ "generated": "2026-07-05T05:26:44.368Z",
5
5
  "entry": "llms.txt",
6
6
  "contract": "AGENTS.md",
7
7
  "index": "components/index.json",
8
8
  "counts": {
9
- "components": 26,
10
- "registries": 26,
9
+ "components": 27,
10
+ "registries": 34,
11
11
  "recipes": 12,
12
- "specs": 26,
13
- "files": 78
12
+ "specs": 27,
13
+ "files": 89
14
14
  },
15
15
  "files": [
16
16
  {
17
17
  "path": "AGENTS.md",
18
- "bytes": 7025,
19
- "sha256": "ab1db8b5626c0be5be3f72fbf7e11e5342c91da475d1940784e8e7070075b773"
18
+ "bytes": 7316,
19
+ "sha256": "d95aa28d3135860ef1eea03a153344a26fe904462ba7c0b255e930d0a4ff79a2"
20
20
  },
21
21
  {
22
22
  "path": "README.md",
@@ -25,8 +25,8 @@
25
25
  },
26
26
  {
27
27
  "path": "components/index.json",
28
- "bytes": 39047,
29
- "sha256": "d82d1fc5e16dfe7e870dbadd48145f15fb4b95ed7eb7a8b9da34d3f6b1b7bf2d"
28
+ "bytes": 40180,
29
+ "sha256": "69b5bb8ba33bc65801bdc6388acf88eab9f99ada65d7048591c02f17bbdc0d57"
30
30
  },
31
31
  {
32
32
  "path": "components/recipes/README.md",
@@ -50,8 +50,8 @@
50
50
  },
51
51
  {
52
52
  "path": "components/registry/button.json",
53
- "bytes": 11751,
54
- "sha256": "e9386f39e5f312c7386c6334ee5a7baad27a83d049187f7a3596ebecce1eb05d"
53
+ "bytes": 13613,
54
+ "sha256": "4b98033fc2df599f6e81dfcfb4ce24b5ebe869b336cd7fad99c6cf12c714506b"
55
55
  },
56
56
  {
57
57
  "path": "components/registry/checkbox.json",
@@ -60,13 +60,18 @@
60
60
  },
61
61
  {
62
62
  "path": "components/registry/data-viz-tooltips.json",
63
- "bytes": 10395,
64
- "sha256": "4a2534cfca43d1026db23eb513adc83ddb95c70312fed0d3640079d72a913e9e"
63
+ "bytes": 11334,
64
+ "sha256": "574aad8896e5cb7ab1799d2e44f0fbf49c059a292675ab7d4fbfdc824896bd7b"
65
65
  },
66
66
  {
67
67
  "path": "components/registry/date-time-pickers.json",
68
- "bytes": 13126,
69
- "sha256": "bd2f41e4beef9332d1a781cf4919ae4118c237e8739f50c82b55ec22d8f75234"
68
+ "bytes": 16339,
69
+ "sha256": "9eaa586c32200bb5a7cc2fb7b4eddcb3384bd81b69ad90d06ef81f2ba9e0c4bc"
70
+ },
71
+ {
72
+ "path": "components/registry/divider.json",
73
+ "bytes": 7159,
74
+ "sha256": "77666f73dd0fb333429faf67e34652a3d76d362bab01032ba9d13c8becadd721"
70
75
  },
71
76
  {
72
77
  "path": "components/registry/drawer.json",
@@ -80,8 +85,8 @@
80
85
  },
81
86
  {
82
87
  "path": "components/registry/filters.json",
83
- "bytes": 7343,
84
- "sha256": "036bf8dd8cf79f00be42d76eeb702b5c659dde63a7792b4d21741626e2764157"
88
+ "bytes": 8732,
89
+ "sha256": "0e65867bb45829842c9b65f6f9919f99209d31c861d8a5ddcafe31e4ce18082b"
85
90
  },
86
91
  {
87
92
  "path": "components/registry/form-item.json",
@@ -93,6 +98,36 @@
93
98
  "bytes": 8618,
94
99
  "sha256": "538679e44180798fa6f8a0e644b9e074c4e863d494cc3e27f6fff8e7faa70160"
95
100
  },
101
+ {
102
+ "path": "components/registry/layout-app-shell.json",
103
+ "bytes": 3554,
104
+ "sha256": "67d42f505968e99b528e5112f7c7207d0a99ad4374dc48aef215b72a39124e4e"
105
+ },
106
+ {
107
+ "path": "components/registry/layout-grid.json",
108
+ "bytes": 3056,
109
+ "sha256": "417a44caf66272b35cec774c55d8d8f58a97fb9c88b2f3f78b4f4e4d494cb9ca"
110
+ },
111
+ {
112
+ "path": "components/registry/layout-page-templates.json",
113
+ "bytes": 2778,
114
+ "sha256": "aeefa91cb185b442d9f34a92bc109c90df67d514e12c20100316d161d483008c"
115
+ },
116
+ {
117
+ "path": "components/registry/layout-panels.json",
118
+ "bytes": 2766,
119
+ "sha256": "fd0e163716739e50fd5226517069780807cf9040880e5c58fa4b5f73e0cc3479"
120
+ },
121
+ {
122
+ "path": "components/registry/layout-screen-regions.json",
123
+ "bytes": 3696,
124
+ "sha256": "4e90ce2e876a49e1db07f3138f2c55d97c51b7901059ef0848b048ff378791be"
125
+ },
126
+ {
127
+ "path": "components/registry/layout-shells.json",
128
+ "bytes": 2738,
129
+ "sha256": "e07b6a7d3cd1bc1b9b4133d51d722d982319ea19ddeb14ef233492b3f6d3892e"
130
+ },
96
131
  {
97
132
  "path": "components/registry/link.json",
98
133
  "bytes": 6575,
@@ -100,8 +135,8 @@
100
135
  },
101
136
  {
102
137
  "path": "components/registry/loose-tags.json",
103
- "bytes": 6261,
104
- "sha256": "01b28b99f5938984176dd09cfae6d59a21c6ec45fedce6eafaf4e29a30b7bdac"
138
+ "bytes": 6537,
139
+ "sha256": "7f12ffc13f505d4a75372ff27a1259f6f0641fec44f93f3e45b0aebc308458b2"
105
140
  },
106
141
  {
107
142
  "path": "components/registry/menu.json",
@@ -138,10 +173,15 @@
138
173
  "bytes": 7514,
139
174
  "sha256": "6643c5479e7347cd08860c821de71d02da9ce286250c27a8b767ef4d24eec394"
140
175
  },
176
+ {
177
+ "path": "components/registry/selected-pills.json",
178
+ "bytes": 2001,
179
+ "sha256": "6dc19f24f96ed2e1d9c8e9ef5387417ae0bab4f9c64ae0c68f7672db48e3fab7"
180
+ },
141
181
  {
142
182
  "path": "components/registry/severity.json",
143
- "bytes": 6781,
144
- "sha256": "d9453cd3151b41ca6a37b5419f8138e152e8a9ff6d39687eeac785af8029ce05"
183
+ "bytes": 7118,
184
+ "sha256": "9aec8f6752f98d825bcd78e001284a98b737682b0da9125de6dd38c1fee1ff7b"
145
185
  },
146
186
  {
147
187
  "path": "components/registry/switch.json",
@@ -175,8 +215,8 @@
175
215
  },
176
216
  {
177
217
  "path": "components/registry/tooltip.json",
178
- "bytes": 5805,
179
- "sha256": "86f0a203cdd0d7270c18dabd08feae017ebaebe90408696ccbfa34df00bc7a41"
218
+ "bytes": 6570,
219
+ "sha256": "7b006388640f62ba3ca9d74b480bdfd0d5e42d2ac1d8c91bc5ee028ef1342960"
180
220
  },
181
221
  {
182
222
  "path": "components/specs/README.md",
@@ -203,6 +243,11 @@
203
243
  "bytes": 9578,
204
244
  "sha256": "b9c4bc271bbc891715450e8f9de196439d93715477a5480416ca52afc4e321af"
205
245
  },
246
+ {
247
+ "path": "components/specs/divider.md",
248
+ "bytes": 5720,
249
+ "sha256": "73cf96d53c8591444c98beb71cdd7e0c04b033e8cf535a4fe814f5337d7a92d8"
250
+ },
206
251
  {
207
252
  "path": "components/specs/drawer.md",
208
253
  "bytes": 9625,
@@ -308,6 +353,16 @@
308
353
  "bytes": 5516,
309
354
  "sha256": "6fc27b526ee89a67f57ee62c7313faf1f37da35baf78f224eb397ceb22c71b92"
310
355
  },
356
+ {
357
+ "path": "conformance/README.md",
358
+ "bytes": 1375,
359
+ "sha256": "6df6686842599d521c4df035159df08dd15e79d0b9b7dbd24f8f901b2ac385fd"
360
+ },
361
+ {
362
+ "path": "conformance/ds-conformance.mjs",
363
+ "bytes": 14797,
364
+ "sha256": "6c0ab765d85ffbb63f37bbecb31f4c1d0dc53f95dbce01044d0e6fb9baf5fd03"
365
+ },
311
366
  {
312
367
  "path": "foundation/README.md",
313
368
  "bytes": 2990,
@@ -355,8 +410,8 @@
355
410
  },
356
411
  {
357
412
  "path": "package.json",
358
- "bytes": 1049,
359
- "sha256": "26809537d841ebfcd690cb8ca1e855074d91b07e1d06fb7b4a177fc0d807c2f2"
413
+ "bytes": 1052,
414
+ "sha256": "2532a62d6b53789f2b85f8352aa55160808022b5ad68fe46994ccff5e14376a7"
360
415
  },
361
416
  {
362
417
  "path": "tokens/README.md",
@@ -395,8 +450,8 @@
395
450
  },
396
451
  {
397
452
  "path": "tokens/structural.json",
398
- "bytes": 1042,
399
- "sha256": "5441e71a2e1898f3f709781b6dffa7da50bdf60f71c97e703514750dbafd2224"
453
+ "bytes": 2173,
454
+ "sha256": "af4549e3a1f809ac3db464fcf1074db2fd7872b0c6e654843316a17a6972f590"
400
455
  },
401
456
  {
402
457
  "path": "tokens/variables.json",
@@ -1,25 +1,55 @@
1
1
  {
2
- "$description": "TIER 0 — STRUCTURAL LESS @vars (spacing, sizing, radii, typography) from src/design/index.less. Not themed. AI: these are the @-prefixed LESS vars (compile-time), distinct from the runtime CSS --vars in variables.json.",
2
+ "$description": "TIER 0 — STRUCTURAL LESS @vars (spacing, sizing, radii, border-width, shadow, typography). Complete sweep of @-prefixed structural vars defined across src/design/*.less (compile-time, not themed; distinct from the runtime CSS --vars in variables.json). LESS references/arithmetic are resolved to final values.",
3
3
  "spacing": {
4
4
  "@padding-lg": "24px",
5
5
  "@padding-md": "16px",
6
6
  "@padding-sm": "12px",
7
- "@padding-xs": "8px"
7
+ "@padding-xs": "8px",
8
+ "@common-padd-space": "15px",
9
+ "@collapse-content-padding": "10px 6px",
10
+ "@control-padding-horizontal": "12px",
11
+ "@control-padding-horizontal-sm": "8px",
12
+ "@input-padding-horizontal": "11px",
13
+ "@input-padding-horizontal-base": "11px",
14
+ "@input-padding-vertical-base": "4px",
15
+ "@layout-header-padding": "0 12px"
8
16
  },
9
17
  "sizing": {
10
18
  "@navbar-height": "50px",
11
19
  "@nav-icon-width": "50px",
12
20
  "@nav-icon-height": "40px",
21
+ "@nav-icon-line-height": "40px",
22
+ "@nav-icon-size": "1.1rem",
23
+ "@nav-menu-height": "30px",
24
+ "@menu-collapsed-width": "70px",
13
25
  "@input-height-base": "32px",
14
26
  "@header-height": "55px",
27
+ "@layout-header-height": "55px",
15
28
  "@header-drop-width": "320px",
16
29
  "@search-height": "36px",
17
30
  "@search-width": "18rem",
18
- "@btn-height": "2.1rem"
31
+ "@btn-height": "2.1rem",
32
+ "@tag-height": "24px",
33
+ "@tabs-card-height": "32px",
34
+ "@user-count-height": "23px",
35
+ "@pop-footer-height": "75px",
36
+ "@popover-arrow-width": "6px",
37
+ "@picker-popover-max-height": "35vh",
38
+ "@picker-popover-max-width": "80vw",
39
+ "@chat-height": "400px",
40
+ "@chat-width": "50vw"
19
41
  },
20
42
  "radius": {
21
43
  "@btn-radius": "4px",
22
- "@btn-raidus-full": "150px"
44
+ "@btn-raidus-full": "150px",
45
+ "@widget-border-radius": "7px"
46
+ },
47
+ "borderWidth": {
48
+ "@menu-item-active-border-width": "3px",
49
+ "@overlay-border-width": "4px"
50
+ },
51
+ "shadow": {
52
+ "@panel-side-box-shadow": "-1px 6px 6px 0 rgba(0, 0, 0, 0.2)"
23
53
  },
24
54
  "typography": {
25
55
  "@font-family": "'Poppins', sans-serif",
@@ -32,4 +62,4 @@
32
62
  "@font-size-sm": "0.8rem",
33
63
  "@font-size-10": "10px"
34
64
  }
35
- }
65
+ }