@synopackageland/ui 0.25.2 → 0.25.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.
@@ -1,5 +1,8 @@
1
- /** Container width (px) at which the gallery gains its 2nd…6th column (layout-spec §2.6). */
2
- export declare const GALLERY_BREAKPOINTS: readonly [640, 768, 1024, 1280, 1536];
1
+ /**
2
+ * Container width (px) at which the gallery gains its 2nd…6th column (layout-spec §2.6). A page beside a
3
+ * sidebar on a portrait tablet (about 470px) holds two cards of at least 212px; a phone keeps one.
4
+ */
5
+ export declare const GALLERY_BREAKPOINTS: readonly [440, 720, 1024, 1280, 1536];
3
6
  /** Gallery columns for a container `width` px wide; 0 while the width is unknown. */
4
7
  export declare function galleryColumns(width: number): number;
5
8
  /**
@@ -23,9 +23,9 @@ errors; a rejected overlay must be closed/unmounted by the app's error handler.
23
23
 
24
24
  | Concern | Document mode (opt-in) | App mode (default) |
25
25
  | --- | --- | --- |
26
- | Pointer | Original Reka document stack and body lock. | Inert only this root's background and lower local modal layers; other roots/host remain interactive. |
26
+ | Pointer | Original Reka document stack and body lock. | The mask over this root's background takes presses, wheel and touch; lower local modal layers are inert. Other roots/host remain interactive. |
27
27
  | Scroll | Shared body scroll lock and compensation policy. | Lock the background wrapper, preserve its scroll position, and contain backdrop wheel/touch gestures locally. Active panels and host/other-app scrolling remain native. |
28
- | Accessibility | Original Reka hideOthers semantics. | Local inert/aria-hidden ownership; keep the active dialog and registered popup branches accessible. Dialogs keep role, title and description references and omit aria-modal, since the rest of the page is available. |
28
+ | Accessibility | Original Reka hideOthers semantics. | Local aria-hidden on the background and inert/aria-hidden on lower layers; keep the active dialog and registered popup branches accessible. Dialogs keep role, title and description references and omit aria-modal, since the rest of the page is available. |
29
29
  | Focus | Original document FocusScope coordination. | Loop Tab/Shift+Tab in the active local panel while focus belongs to it. Deliberate other-app/host transitions remain outside the local trap. |
30
30
  | Escape | Original document layer routing. | Route once to the focused root's top layer. IME composition is ignored and cancellation is preserved. Host/body events infer no local app. |
31
31
  | Cleanup | Shared Reka lock counts. | Restore locally owned inert/ARIA/style values only when still owned. Remove listeners/branches on unmount and never mutate body. |
@@ -38,6 +38,13 @@ Nested panels retain the parent background lock, temporarily hide/inert the
38
38
  parent panel, and restore its interaction on close. Presence/exit animations
39
39
  retain layer ownership until Reka actually removes the layer.
40
40
 
41
+ The background is not `inert`: Chrome restyles every element under an element
42
+ whose `inert` changes, so an inert background made opening a dialog restyle the
43
+ whole app before its first frame. The mask, the focus loop and `focusin` (focus
44
+ that reaches the background goes back to the panel) keep the background out of
45
+ reach; focus left on the background when a dialog skips autofocus is released,
46
+ as inert would.
47
+
41
48
  A host must provide an accessible window switch mechanism: a looping Tab
42
49
  sequence inside a local dialog does not itself reach another app. There is no
43
50
  claim of whole-document modality in app mode. VoiceOver/NVDA exposure and
@@ -127,7 +134,7 @@ DropdownMenu), ContextMenu (through Menu), and Tooltip use the same patched
127
134
  DismissableLayer/focus boundary. Portal branches are part of the local stack;
128
135
  closing a child does not also close the parent. Tooltip-open coordination is
129
136
  local to the root. Toast portals/live announcements remain in the sibling
130
- portal host, outside the inert background. Raw Reka primitives from a separate
137
+ portal host, outside the hidden background. Raw Reka primitives from a separate
131
138
  consumer import are outside this contract. Each popper wrapper takes its
132
139
  z-index from the local layer stack, not from Reka's copy of the content's own
133
140
  z-index, so a modal backdrop never covers a popup opened inside the modal.
@@ -139,7 +146,7 @@ submenu-only step for DropdownMenu and OverflowToolbar in both document and
139
146
  app-local mode.
140
147
 
141
148
  The wrapper is the registered background scroll container in this version.
142
- Scroll containers within it are blocked by inert/background containment while
149
+ Scroll containers within it are blocked by the mask and background containment while
143
150
  a local modal is present. Apps with their own external Teleports or desktop
144
151
  scrolling cannot claim independent containment. Keep custom portals inside the
145
152
  root and inside the active panel, or use the library's supported popup components.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/ui",
3
- "version": "0.25.2",
3
+ "version": "0.25.4",
4
4
  "description": "Shared Vue 3 UI component library with a DSM 7 inspired application theme",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -79,6 +79,34 @@
79
79
  "@tiptap/vue-3": "3.32.1",
80
80
  "zod": "^4.6.5"
81
81
  },
82
+ "devDependencies": {
83
+ "@eslint/js": "10.0.1",
84
+ "@histoire/plugin-vue": "1.0.0-beta.1",
85
+ "@tailwindcss/vite": "4.3.3",
86
+ "@tanstack/vue-virtual": "3.13.39",
87
+ "@vitejs/plugin-vue": "6.0.9",
88
+ "@vue/test-utils": "2.5.1",
89
+ "@vueuse/core": "14.4.0",
90
+ "eslint": "10.11.0",
91
+ "eslint-plugin-vue": "10.11.1",
92
+ "flexsearch": "0.8.212",
93
+ "globals": "17.12.0",
94
+ "histoire": "1.0.0-beta.1",
95
+ "jsdom": "30.1.1",
96
+ "playwright": "1.58.2",
97
+ "reka-ui": "2.11.0",
98
+ "tailwindcss": "4.3.3",
99
+ "typescript": "5.9.3",
100
+ "typescript-eslint": "8.71.0",
101
+ "vite": "7.3.6",
102
+ "vite-plugin-dts": "5.1.1",
103
+ "vitest": "5.0.2",
104
+ "vscode-oniguruma": "2.0.1",
105
+ "vscode-textmate": "9.3.2",
106
+ "vue": "3.5.43",
107
+ "vue-eslint-parser": "10.4.1",
108
+ "vue-tsc": "3.3.11"
109
+ },
82
110
  "engines": {
83
111
  "node": ">=20"
84
112
  },
@@ -89,5 +117,65 @@
89
117
  "reka-ui": "2.11.0"
90
118
  }
91
119
  },
92
- "homepage": "https://www.varvis.me/docs/"
93
- }
120
+ "homepage": "https://www.varvis.me/docs/",
121
+ "scripts": {
122
+ "check:docs": "node --test scripts/check-doc-versions.test.mjs && node scripts/check-doc-versions.mjs",
123
+ "dev": "vite build --watch",
124
+ "build": "vite build && vite build --mode json && vite build --mode rich-text && vite build --mode grid && vite build --mode cli && vite build --mode preview && vite build --mode embedded && node scripts/postbuild.mjs",
125
+ "lint": "eslint .",
126
+ "typecheck": "vue-tsc --noEmit -p tsconfig.json",
127
+ "test": "vitest run",
128
+ "test:watch": "vitest",
129
+ "test:changed": "echo \"test:changed skips the tests the changes since ${SYNOPKGLAND_GATE_BASE:-origin/master} do not reach (vitest --changed); pnpm check runs them all\" && vitest run --changed ${SYNOPKGLAND_GATE_BASE:-origin/master}",
130
+ "story": "histoire dev",
131
+ "story:build": "histoire build",
132
+ "check:host": "node scripts/dsm-host-shots.mjs",
133
+ "check:switch": "node scripts/check-switch.mjs",
134
+ "check:tabs": "node scripts/check-tabs.mjs",
135
+ "check:mobile": "node scripts/check-mobile-overflow.mjs",
136
+ "check:ui-patch": "node scripts/check-ui-patch.mjs",
137
+ "check:narrow": "node scripts/check-narrow-controls.mjs",
138
+ "check:drawer-form": "node scripts/check-drawer-form.mjs",
139
+ "check:responsive": "node scripts/check-responsive.mjs",
140
+ "check:adaptive": "node scripts/check-adaptive.mjs",
141
+ "check:sidebar-focus": "node scripts/check-sidebar-focus.mjs",
142
+ "check:json-render": "node scripts/check-json-render.mjs",
143
+ "check:motion": "node scripts/check-motion.mjs",
144
+ "check:topology": "node scripts/check-topology.mjs",
145
+ "check:wizard": "node scripts/check-wizard.mjs",
146
+ "check:press": "node scripts/check-press.mjs",
147
+ "check:edges": "node scripts/check-edges.mjs",
148
+ "check:data-grid": "node scripts/check-data-grid.mjs",
149
+ "check:truncation": "node scripts/check-truncation.mjs",
150
+ "check:link": "node scripts/check-link.mjs",
151
+ "check:text-select": "node scripts/check-text-select.mjs",
152
+ "check:date-picker": "node scripts/check-date-picker.mjs",
153
+ "check:full-page": "node scripts/check-full-page.mjs",
154
+ "check:short-viewport": "node scripts/check-short-viewport.mjs",
155
+ "check:phone-layout": "node scripts/check-phone-layout.mjs",
156
+ "check:phone-bars": "node scripts/check-phone-bars.mjs",
157
+ "check:text-zoom": "node scripts/check-text-zoom.mjs",
158
+ "check:focus-restore": "node scripts/check-focus-restore.mjs",
159
+ "check:detail-surface": "node scripts/check-detail-surface.mjs",
160
+ "check:internal": "node --test scripts/check-internal-content.test.mjs scripts/check-npm-metadata.test.mjs && node scripts/check-internal-content.mjs --repo .",
161
+ "check:npm-metadata": "node scripts/check-npm-metadata.mjs",
162
+ "check:package": "node scripts/check-package-content.mjs",
163
+ "trace:restyle": "node scripts/trace-restyle.mjs",
164
+ "check:public-api-consumer": "node scripts/check-public-api-consumer.mjs",
165
+ "notices:update": "node scripts/third-party-notices.mjs --write",
166
+ "notices:check": "node scripts/third-party-notices.mjs --check",
167
+ "check": "bash scripts/docker-check.sh \"npm run gates\"",
168
+ "check:fast": "bash scripts/docker-check.sh \"npm run gates\"",
169
+ "check:local-browser": "node scripts/app-local-browser.mjs",
170
+ "check:infotip": "node scripts/check-infotip.mjs",
171
+ "release:stage": "node scripts/stage-release.mjs",
172
+ "check:polish": "bash scripts/docker-check.sh --build --out .polish-shots 'node scripts/check-polish.mjs'",
173
+ "check:acceptance": "node scripts/check-acceptance.mjs",
174
+ "check:palette": "node scripts/check-palette.mjs",
175
+ "gates": "node scripts/gates.mjs",
176
+ "gates:full": "node scripts/gates.mjs --full",
177
+ "check:layout": "node scripts/check-layout.mjs",
178
+ "release:smoke": "node scripts/release-smoke.mjs",
179
+ "check:browser-install": "playwright install chromium webkit"
180
+ }
181
+ }