@synopackageland/ui 0.23.1 → 0.23.3

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.
@@ -483,12 +483,26 @@ the page, `--ui-chrome-height` tall (44px, plus a 1px rule):
483
483
  tab bar already names the page. The bar keeps its height, its menu or
484
484
  actions and its "…", and still hides on scroll. The `title` prop stays in
485
485
  the bar for screen readers only, and a `PageHeader` title still moves out of
486
- the page. The drawer (from the menu button or the tab bar's More) is still
487
- headed by `brand-name` and `brand-icon`, and the document title is
488
- untouched. A sub-page (Back) shows its title as usual. Only the phone layout
489
- changes; a DSM window and a desktop draw no phone bar. Set it per page:
490
- `:phone-bar-title="onTabPage ? 'none' : 'auto'"`. Do not pass an empty
486
+ the page. When the bar then holds nothing (no menu button, Back, action,
487
+ account entry, "…" or page action) it is not drawn at all: the page starts
488
+ at the top, with no empty strip, and in the DSM portal no empty bar takes
489
+ the place of DSM's banner (the `title` it kept for screen readers goes
490
+ with it; the tab bar's selected tab still names the page). It is drawn
491
+ again as soon as it holds something. The drawer
492
+ (from the menu button or the tab bar's More) is still headed by
493
+ `brand-name` and `brand-icon`, and the document title is untouched. A
494
+ sub-page (Back) shows its title as usual. Only the phone layout changes; a
495
+ DSM window and a desktop draw no phone bar. Set it per page:
496
+ `:phone-bar-title="onTabPage ? 'none' : 'auto'"`, and always pass the
497
+ App's real `title`, `brand-name` and `brand-icon`. Do not pass an empty
491
498
  `title` or brand to hide them: the drawer would lose the App's name.
499
+ - **The drawer's head:** the App's icon and name, then the close button. The
500
+ name takes the row up to the close button and is cut with "…" only when it
501
+ is longer than that.
502
+ - **The drawer's focus:** opened with Enter or Space, focus lands on the
503
+ close button with its ring; opened by a tap or click, on the drawer panel,
504
+ which draws no ring. Tab still moves through the drawer only, and closing it
505
+ gives focus back to what opened it.
492
506
  - **Actions:** first the page's own actions, then `headerActions`
493
507
  (DropdownMenu entries). A pick emits `headerAction` with the key.
494
508
  - **One "…".** The bar never shows two overflow buttons. While the page's own
@@ -598,12 +612,16 @@ change: the same slot moves.
598
612
  row is never under the FAB; there is no room while no FAB is drawn.
599
613
  - A fill page (its content scrolls itself: `PageContent height="fill"`, or an
600
614
  App shell that keeps the PageContent from scrolling; PageContent marks it
601
- `data-ui-page-fills`) keeps that room only while the FAB is in view. While
602
- the FAB is hidden on scroll or by the keyboard, the content's own scroller
603
- takes the room down to the bars' edge, together with the room the hidden
604
- bars give back, so no blank band is left under it. A page that scrolls as a
605
- whole keeps the room at its end, so its length never changes under the
606
- finger.
615
+ `data-ui-page-fills`) puts that room at the end of its own scroller instead.
616
+ PageContent marks the vertical scroller in its body that reaches its bottom
617
+ `data-ui-page-scroller` (its own bottom padding is kept in
618
+ `--ui-page-scroller-pad`) and the page `data-ui-page-scroller-room`; the
619
+ scroller then runs down to the tab bar or the bottom accessory, its rows
620
+ pass under the FAB, which covers only its own circle, and the last row can
621
+ be scrolled above it. No blank band is left under the list, with the FAB
622
+ in view or hidden. A fill page whose scroller is not found keeps the room
623
+ under its content. A page that scrolls as a whole keeps the room at its
624
+ end, so its length never changes under the finger.
607
625
  - A toast sits 8px above the FAB while the FAB is shown, and back at its own
608
626
  place while the FAB is hidden on scroll or by the keyboard, and steps aside
609
627
  (fades out) while the speed dial is open; it moves with the bars (`--ui-motion-bars`, at once with reduced motion). A page without a FAB,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synopackageland/ui",
3
- "version": "0.23.1",
3
+ "version": "0.23.3",
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,62 @@
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:edges": "node scripts/check-edges.mjs",
147
+ "check:data-grid": "node scripts/check-data-grid.mjs",
148
+ "check:truncation": "node scripts/check-truncation.mjs",
149
+ "check:link": "node scripts/check-link.mjs",
150
+ "check:text-select": "node scripts/check-text-select.mjs",
151
+ "check:date-picker": "node scripts/check-date-picker.mjs",
152
+ "check:full-page": "node scripts/check-full-page.mjs",
153
+ "check:short-viewport": "node scripts/check-short-viewport.mjs",
154
+ "check:phone-layout": "node scripts/check-phone-layout.mjs",
155
+ "check:text-zoom": "node scripts/check-text-zoom.mjs",
156
+ "check:focus-restore": "node scripts/check-focus-restore.mjs",
157
+ "check:detail-surface": "node scripts/check-detail-surface.mjs",
158
+ "check:internal": "node --test scripts/check-internal-content.test.mjs scripts/check-npm-metadata.test.mjs && node scripts/check-internal-content.mjs --repo .",
159
+ "check:npm-metadata": "node scripts/check-npm-metadata.mjs",
160
+ "check:package": "node scripts/check-package-content.mjs",
161
+ "check:public-api-consumer": "node scripts/check-public-api-consumer.mjs",
162
+ "notices:update": "node scripts/third-party-notices.mjs --write",
163
+ "notices:check": "node scripts/third-party-notices.mjs --check",
164
+ "check": "bash scripts/docker-check.sh \"npm run gates\"",
165
+ "check:fast": "bash scripts/docker-check.sh \"npm run gates\"",
166
+ "check:local-browser": "node scripts/app-local-browser.mjs",
167
+ "check:infotip": "node scripts/check-infotip.mjs",
168
+ "release:stage": "node scripts/stage-release.mjs",
169
+ "check:polish": "bash scripts/docker-check.sh --build --out .polish-shots 'node scripts/check-polish.mjs'",
170
+ "check:acceptance": "node scripts/check-acceptance.mjs",
171
+ "check:palette": "node scripts/check-palette.mjs",
172
+ "gates": "node scripts/gates.mjs",
173
+ "gates:full": "node scripts/gates.mjs --full",
174
+ "check:layout": "node scripts/check-layout.mjs",
175
+ "release:smoke": "node scripts/release-smoke.mjs",
176
+ "check:browser-install": "playwright install chromium"
177
+ }
178
+ }