@synopackageland/ui 0.21.0 → 0.22.0
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 +17 -0
- package/dist/cli.js +0 -0
- package/dist/components/app/app-layout/AppLayout.vue.d.ts +8 -0
- package/dist/index.js +8779 -8726
- package/dist/json-preview/preview.js +6808 -6755
- package/dist/reka-runtime.json +1 -1
- package/dist/theme.css +1 -1
- package/dist/themes/dsm7-embedded-theme.css +1 -1
- package/dist/themes/dsm7-embedded.css +1 -1
- package/dist/themes/dsm7.css +1 -1
- package/docs/mobile-native.md +58 -6
- package/package.json +59 -66
package/docs/mobile-native.md
CHANGED
|
@@ -267,7 +267,7 @@ are in `src/feedback/feedback.css`.
|
|
|
267
267
|
|
|
268
268
|
| | Desktop, tablet, narrow window with a mouse | Phone |
|
|
269
269
|
|---|---|---|
|
|
270
|
-
| Toast | bottom right, 360px, swipe right, a stack | bottom, 8px from each side, above the visible tab bar or the keyboard (`--ui-kb-inset`), whichever is higher, plus `--ui-safe-bottom` and 8px; swipe down; only the newest shows, with a `+N` count of the others still open |
|
|
270
|
+
| Toast | bottom right, 360px, swipe right, a stack | bottom, 8px from each side, above the visible tab bar or the keyboard (`--ui-kb-inset`), whichever is higher, plus `--ui-safe-bottom` and 8px, and 8px above a shown FAB; swipe down; only the newest shows, with a `+N` count of the others still open |
|
|
271
271
|
| Notification | the chosen corner, 360px | top, 8px from each side, below `--ui-safe-top` plus 8px; `alignment` is ignored |
|
|
272
272
|
|
|
273
273
|
- Toasts behind the front one keep their own timers, so a short one can
|
|
@@ -414,7 +414,7 @@ Where it is used:
|
|
|
414
414
|
|---|---|---|
|
|
415
415
|
| `ListDetail` | the list fills the room; the detail is pushed over it, with Back in place of Close | the split view, unchanged |
|
|
416
416
|
| `SectionTabs`, five or more sections or `fill` (a settings page) | a grouped list (`group` on each item sets the blocks, 48px rows with a chevron) that pushes the tapped section; `v-model:pushed` | the strip |
|
|
417
|
-
| `SectionTabs`, four or fewer sections | the scrolling underline strip on a touch phone
|
|
417
|
+
| `SectionTabs`, four or fewer sections | the scrolling underline strip on a touch phone; a full-width SegmentControl with equal segments in a narrow window used with a mouse, or with `phone="segment"` | the strip |
|
|
418
418
|
| `SectionTabs` with `phone="strip"` | the scrolling strip, for tabs inside a pushed page or a sheet | the strip |
|
|
419
419
|
|
|
420
420
|
`phone` (`auto`, `list`, `segment`, `strip`) overrides the choice. A phone
|
|
@@ -503,7 +503,7 @@ them at the bottom of the screen). The root carries
|
|
|
503
503
|
`data-ui-layout-scroll="page"`. A DataGrid or another page that scrolls
|
|
504
504
|
itself keeps its layout.
|
|
505
505
|
|
|
506
|
-
### Native phone shell
|
|
506
|
+
### Native phone shell
|
|
507
507
|
|
|
508
508
|
A *touch phone* is an `AppLayout` 640px or narrower under a coarse pointer
|
|
509
509
|
(the root carries `data-ui-phone`). A narrow DSM window driven by a mouse is
|
|
@@ -531,18 +531,33 @@ change: the same slot moves.
|
|
|
531
531
|
it and focus returns to the FAB. A pick runs the action and closes the dial;
|
|
532
532
|
an action that opens a menu closes it once the menu closes. The page behind
|
|
533
533
|
is inert while it is open. Reduced motion shows and hides it at once.
|
|
534
|
+
- Every pill is its icon and its text. An action with no text of its own (an
|
|
535
|
+
`IconButton` such as "More actions", an icon-only Button) shows its
|
|
536
|
+
accessible name, from `aria-label` or `title`; the pill sizes to it and a
|
|
537
|
+
name too long for the screen ends in an ellipsis inside the pill.
|
|
534
538
|
- Rare or destructive items belong in `headerActions` ("…" in the bar), not
|
|
535
539
|
in the page actions.
|
|
536
540
|
- `phone-actions` on `AppLayout`, and on a `PageHeader`, `AppToolbar` or
|
|
537
|
-
`PushTransition` for one page: `fab` (default), `bar` (icons in the bar
|
|
538
|
-
in 0.20.20) or `inline` (the page's own header row).
|
|
541
|
+
`PushTransition` for one page: `fab` (default), `bar` (icons in the bar) or `inline` (the page's own header row).
|
|
539
542
|
- `PageFab` picks the FAB explicitly: `<PageFab><Button variant="primary">…</Button></PageFab>`
|
|
540
543
|
inside the page's actions. On a touch phone its content is the FAB and the
|
|
541
544
|
page's other actions go to the bar; elsewhere it renders in place.
|
|
542
545
|
- A page whose primary action is in a footer bar (a `SettingsPage` footer, a
|
|
543
546
|
sticky `FormActions`) keeps its actions in the bar: the bottom already has a
|
|
544
547
|
primary. Content gets `--ui-fab-room` (88px) of bottom padding so the last
|
|
545
|
-
row is never under the FAB
|
|
548
|
+
row is never under the FAB; there is no room while no FAB is drawn.
|
|
549
|
+
- A fill page (its content scrolls itself: `PageContent height="fill"`, or an
|
|
550
|
+
App shell that keeps the PageContent from scrolling; PageContent marks it
|
|
551
|
+
`data-ui-page-fills`) keeps that room only while the FAB is in view. While
|
|
552
|
+
the FAB is hidden on scroll or by the keyboard, the content's own scroller
|
|
553
|
+
takes the room down to the bars' edge, together with the room the hidden
|
|
554
|
+
bars give back, so no blank band is left under it. A page that scrolls as a
|
|
555
|
+
whole keeps the room at its end, so its length never changes under the
|
|
556
|
+
finger.
|
|
557
|
+
- A toast sits 8px above the FAB while the FAB is shown, and back at its own
|
|
558
|
+
place while the FAB is hidden on scroll or by the keyboard, and steps aside
|
|
559
|
+
(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,
|
|
560
|
+
a DSM window and a desktop place toasts as before.
|
|
546
561
|
|
|
547
562
|
**Hide on scroll.** On by default (`AppLayout` `hide-on-scroll`). Scrolling
|
|
548
563
|
the page down 16px or more slides the bar, the tab bar, the FAB and a clean
|
|
@@ -565,6 +580,43 @@ than the bars' room never hides them.
|
|
|
565
580
|
footer stays at rest: it slides away only with the bars, so Reset / Apply
|
|
566
581
|
never appear or vanish under the finger while the user edits.
|
|
567
582
|
|
|
583
|
+
**Bottom accessory.** `AppLayout`'s `#accessory` slot is a bar across the
|
|
584
|
+
bottom of the page for something the App is running (a recording bar, a mini
|
|
585
|
+
player). Put the bar's content in it, with `v-if` while nothing runs (an
|
|
586
|
+
empty slot draws nothing):
|
|
587
|
+
|
|
588
|
+
```vue
|
|
589
|
+
<AppLayout>
|
|
590
|
+
…
|
|
591
|
+
<template #accessory><RecordingBar v-if="recording" /></template>
|
|
592
|
+
<template #tabbar><AppTabBar v-model="tab" :items="tabs" /></template>
|
|
593
|
+
</AppLayout>
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
- On a phone it docks right above the tab bar (the bottom-most bar without
|
|
597
|
+
one, over the home indicator's strip), with a 1px rule on top and the bar's
|
|
598
|
+
colour.
|
|
599
|
+
- It stays while the bars hide on scroll: it slides down into the tab bar's
|
|
600
|
+
place, in `--ui-motion-bars`, and comes back up with it. It hides while the
|
|
601
|
+
keyboard is up on a touch phone, as the tab bar does.
|
|
602
|
+
- The layout measures it (`--ui-bottom-accessory-height`, also on the App's
|
|
603
|
+
root) and lifts what must stay clear of it: the FAB sits 16px above it, a
|
|
604
|
+
toast above the FAB (or above the accessory without one), an AsidePanel's
|
|
605
|
+
phone button above it, and the page's end clears it. An App sets none of `--ui-tab-bar-height`, `--ui-fab-tab-bar` or
|
|
606
|
+
toast offsets for it.
|
|
607
|
+
- Elsewhere (a DSM window, a desktop) it is the column's bottom row, sticking
|
|
608
|
+
to the bottom while the document scrolls.
|
|
609
|
+
|
|
610
|
+
**Sticky rows in a padded page scroller.** An App shell that makes the
|
|
611
|
+
PageContent its page's scroller and pads its top (a page without a header)
|
|
612
|
+
would leave a stuck row (a group heading, a DataGrid's header row) that
|
|
613
|
+
padding below the scroller's top, with the rows scrolling under it showing
|
|
614
|
+
in the strip above. PageContent covers that strip
|
|
615
|
+
(`[data-ui-page-scroll-cover]`, in the page header's colour; the padding is
|
|
616
|
+
`--ui-page-scroll-pad`), so a stuck row reads as flush with the bar above it.
|
|
617
|
+
The content starts where it did, and a `position: sticky; top: 0` row needs
|
|
618
|
+
no offset of its own.
|
|
619
|
+
|
|
568
620
|
**Footer hints.** In any footer bar (`data-ui-footer-bar`: SettingsPage,
|
|
569
621
|
Dialog, Sheet, BottomSheet, Card, Panel, Wizard, AppActionBar) a hint or
|
|
570
622
|
status beside the buttons ("Enter a Custom ASR API key") takes a full-width
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synopackageland/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Shared Vue 3 UI component library with a DSM 7 inspired application theme",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -60,62 +60,6 @@
|
|
|
60
60
|
"./themes/dsm7-embedded-reset.css": "./dist/themes/dsm7-embedded-reset.css",
|
|
61
61
|
"./themes/dsm7-embedded-theme.css": "./dist/themes/dsm7-embedded-theme.css"
|
|
62
62
|
},
|
|
63
|
-
"scripts": {
|
|
64
|
-
"check:docs": "node --test scripts/check-doc-versions.test.mjs && node scripts/check-doc-versions.mjs",
|
|
65
|
-
"dev": "vite build --watch",
|
|
66
|
-
"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",
|
|
67
|
-
"lint": "eslint .",
|
|
68
|
-
"typecheck": "vue-tsc --noEmit -p tsconfig.json",
|
|
69
|
-
"test": "vitest run",
|
|
70
|
-
"test:watch": "vitest",
|
|
71
|
-
"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}",
|
|
72
|
-
"story": "histoire dev",
|
|
73
|
-
"story:build": "histoire build",
|
|
74
|
-
"check:host": "node scripts/dsm-host-shots.mjs",
|
|
75
|
-
"check:switch": "node scripts/check-switch.mjs",
|
|
76
|
-
"check:tabs": "node scripts/check-tabs.mjs",
|
|
77
|
-
"check:mobile": "node scripts/check-mobile-overflow.mjs",
|
|
78
|
-
"check:ui-patch": "node scripts/check-ui-patch.mjs",
|
|
79
|
-
"check:narrow": "node scripts/check-narrow-controls.mjs",
|
|
80
|
-
"check:drawer-form": "node scripts/check-drawer-form.mjs",
|
|
81
|
-
"check:responsive": "node scripts/check-responsive.mjs",
|
|
82
|
-
"check:adaptive": "node scripts/check-adaptive.mjs",
|
|
83
|
-
"check:sidebar-focus": "node scripts/check-sidebar-focus.mjs",
|
|
84
|
-
"check:json-render": "node scripts/check-json-render.mjs",
|
|
85
|
-
"check:motion": "node scripts/check-motion.mjs",
|
|
86
|
-
"check:topology": "node scripts/check-topology.mjs",
|
|
87
|
-
"check:wizard": "node scripts/check-wizard.mjs",
|
|
88
|
-
"check:edges": "node scripts/check-edges.mjs",
|
|
89
|
-
"check:data-grid": "node scripts/check-data-grid.mjs",
|
|
90
|
-
"check:truncation": "node scripts/check-truncation.mjs",
|
|
91
|
-
"check:link": "node scripts/check-link.mjs",
|
|
92
|
-
"check:text-select": "node scripts/check-text-select.mjs",
|
|
93
|
-
"check:date-picker": "node scripts/check-date-picker.mjs",
|
|
94
|
-
"check:full-page": "node scripts/check-full-page.mjs",
|
|
95
|
-
"check:short-viewport": "node scripts/check-short-viewport.mjs",
|
|
96
|
-
"check:phone-layout": "node scripts/check-phone-layout.mjs",
|
|
97
|
-
"check:focus-restore": "node scripts/check-focus-restore.mjs",
|
|
98
|
-
"check:detail-surface": "node scripts/check-detail-surface.mjs",
|
|
99
|
-
"check:internal": "node --test scripts/check-internal-content.test.mjs scripts/check-npm-metadata.test.mjs && node scripts/check-internal-content.mjs --repo .",
|
|
100
|
-
"check:npm-metadata": "node scripts/check-npm-metadata.mjs",
|
|
101
|
-
"check:package": "node scripts/check-package-content.mjs",
|
|
102
|
-
"check:public-api-consumer": "node scripts/check-public-api-consumer.mjs",
|
|
103
|
-
"notices:update": "node scripts/third-party-notices.mjs --write",
|
|
104
|
-
"notices:check": "node scripts/third-party-notices.mjs --check",
|
|
105
|
-
"check": "bash scripts/docker-check.sh \"npm run gates\"",
|
|
106
|
-
"check:fast": "bash scripts/docker-check.sh \"npm run gates\"",
|
|
107
|
-
"check:local-browser": "node scripts/app-local-browser.mjs",
|
|
108
|
-
"check:infotip": "node scripts/check-infotip.mjs",
|
|
109
|
-
"release:stage": "node scripts/stage-release.mjs",
|
|
110
|
-
"check:polish": "bash scripts/docker-check.sh --build --out .polish-shots 'node scripts/check-polish.mjs'",
|
|
111
|
-
"check:acceptance": "node scripts/check-acceptance.mjs",
|
|
112
|
-
"check:palette": "node scripts/check-palette.mjs",
|
|
113
|
-
"gates": "node scripts/gates.mjs",
|
|
114
|
-
"gates:full": "node scripts/gates.mjs --full",
|
|
115
|
-
"check:layout": "node scripts/check-layout.mjs",
|
|
116
|
-
"release:smoke": "node scripts/release-smoke.mjs",
|
|
117
|
-
"check:browser-install": "playwright install chromium"
|
|
118
|
-
},
|
|
119
63
|
"peerDependencies": {
|
|
120
64
|
"vue": "^3.5.0"
|
|
121
65
|
},
|
|
@@ -166,13 +110,6 @@
|
|
|
166
110
|
"engines": {
|
|
167
111
|
"node": ">=20"
|
|
168
112
|
},
|
|
169
|
-
"packageManager": "pnpm@10.33.2",
|
|
170
|
-
"pnpm": {
|
|
171
|
-
"onlyBuiltDependencies": [
|
|
172
|
-
"esbuild",
|
|
173
|
-
"vue-demi"
|
|
174
|
-
]
|
|
175
|
-
},
|
|
176
113
|
"config": {
|
|
177
114
|
"bundledRuntime": {
|
|
178
115
|
"@tanstack/vue-virtual": "3.13.39",
|
|
@@ -180,5 +117,61 @@
|
|
|
180
117
|
"reka-ui": "2.11.0"
|
|
181
118
|
}
|
|
182
119
|
},
|
|
183
|
-
"homepage": "https://www.varvis.me/docs/"
|
|
184
|
-
|
|
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:focus-restore": "node scripts/check-focus-restore.mjs",
|
|
156
|
+
"check:detail-surface": "node scripts/check-detail-surface.mjs",
|
|
157
|
+
"check:internal": "node --test scripts/check-internal-content.test.mjs scripts/check-npm-metadata.test.mjs && node scripts/check-internal-content.mjs --repo .",
|
|
158
|
+
"check:npm-metadata": "node scripts/check-npm-metadata.mjs",
|
|
159
|
+
"check:package": "node scripts/check-package-content.mjs",
|
|
160
|
+
"check:public-api-consumer": "node scripts/check-public-api-consumer.mjs",
|
|
161
|
+
"notices:update": "node scripts/third-party-notices.mjs --write",
|
|
162
|
+
"notices:check": "node scripts/third-party-notices.mjs --check",
|
|
163
|
+
"check": "bash scripts/docker-check.sh \"npm run gates\"",
|
|
164
|
+
"check:fast": "bash scripts/docker-check.sh \"npm run gates\"",
|
|
165
|
+
"check:local-browser": "node scripts/app-local-browser.mjs",
|
|
166
|
+
"check:infotip": "node scripts/check-infotip.mjs",
|
|
167
|
+
"release:stage": "node scripts/stage-release.mjs",
|
|
168
|
+
"check:polish": "bash scripts/docker-check.sh --build --out .polish-shots 'node scripts/check-polish.mjs'",
|
|
169
|
+
"check:acceptance": "node scripts/check-acceptance.mjs",
|
|
170
|
+
"check:palette": "node scripts/check-palette.mjs",
|
|
171
|
+
"gates": "node scripts/gates.mjs",
|
|
172
|
+
"gates:full": "node scripts/gates.mjs --full",
|
|
173
|
+
"check:layout": "node scripts/check-layout.mjs",
|
|
174
|
+
"release:smoke": "node scripts/release-smoke.mjs",
|
|
175
|
+
"check:browser-install": "playwright install chromium"
|
|
176
|
+
}
|
|
177
|
+
}
|