@synopackageland/ui 0.20.3 → 0.20.5
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 +35 -0
- package/LICENSES/THIRD_PARTY.md +2 -32
- package/LICENSES/ux-foundation.md +83 -0
- package/LICENSES/ux-grid-baserow.md +35 -0
- package/LICENSES/ux-grid-teable.md +48 -0
- package/README.md +3 -0
- package/dist/components/app/app-layout/AppLayout.vue.d.ts +52 -5
- package/dist/components/app/app-layout/pageTitle.d.ts +24 -0
- package/dist/components/app/app-root/AppRoot.vue.d.ts +9 -0
- package/dist/components/app/app-tab-bar/AppTabBar.vue.d.ts +1 -1
- package/dist/components/app/aside-panel/AsidePanel.vue.d.ts +69 -0
- package/dist/components/app/aside-panel/asidePreference.d.ts +28 -0
- package/dist/components/app/section-tabs/SectionTabs.vue.d.ts +22 -4
- package/dist/components/composite/about-dialog/AboutDialog.vue.d.ts +1 -1
- package/dist/components/composite/adaptive-panel/AdaptivePanel.vue.d.ts +61 -0
- package/dist/components/composite/connection-topology/ConnectionTopology.vue.d.ts +1 -1
- package/dist/components/composite/data-grid/DataGrid.vue.d.ts +19 -1
- package/dist/components/composite/data-grid/labels.d.ts +15 -0
- package/dist/components/composite/data-grid/listLayout.d.ts +26 -0
- package/dist/components/composite/data-table/DataTable.vue.d.ts +33 -7
- package/dist/components/composite/file-picker/FilePicker.vue.d.ts +2 -2
- package/dist/components/composite/form/FormGroup.vue.d.ts +1 -1
- package/dist/components/composite/form/context.d.ts +13 -0
- package/dist/components/composite/form-actions/FormActions.vue.d.ts +6 -2
- package/dist/components/composite/mention-list/MentionList.vue.d.ts +2 -2
- package/dist/components/composite/overflow-toolbar/OverflowToolbar.vue.d.ts +2 -2
- package/dist/components/composite/record-panel/RecordPanel.vue.d.ts +91 -0
- package/dist/components/composite/record-panel/recordPanelWidth.d.ts +54 -0
- package/dist/components/composite/settings-section/SettingsSection.vue.d.ts +1 -1
- package/dist/components/composite/summary-card/SummaryCard.vue.d.ts +1 -1
- package/dist/components/composite/tag-editor/TagEditor.vue.d.ts +4 -4
- package/dist/components/composite/tree-view/TreeView.vue.d.ts +4 -4
- package/dist/components/composite/wizard/Wizard.vue.d.ts +2 -2
- package/dist/components/composite/wizard/WizardDialog.vue.d.ts +4 -4
- package/dist/components/containers/card/Card.vue.d.ts +1 -1
- package/dist/components/containers/card/CardField.vue.d.ts +26 -0
- package/dist/components/containers/card-grid/CardCover.vue.d.ts +16 -0
- package/dist/components/containers/card-grid/CardGrid.vue.d.ts +1 -1
- package/dist/components/containers/card-grid/VirtualCardGrid.vue.d.ts +71 -0
- package/dist/components/containers/expandable-item/ExpandableItem.vue.d.ts +1 -1
- package/dist/components/containers/fieldset/Fieldset.vue.d.ts +1 -1
- package/dist/components/containers/list-detail/ListDetail.vue.d.ts +6 -4
- package/dist/components/containers/split-pane/SplitPane.vue.d.ts +1 -1
- package/dist/components/feedback/notification/Notification.vue.d.ts +1 -1
- package/dist/components/feedback/notification/NotificationProvider.vue.d.ts +1 -1
- package/dist/components/feedback/validation-popup/ValidationPopup.vue.d.ts +1 -1
- package/dist/components/primitives/breadcrumb/Breadcrumb.vue.d.ts +2 -2
- package/dist/components/primitives/color-picker/ColorPicker.vue.d.ts +4 -4
- package/dist/components/primitives/combobox/Combobox.vue.d.ts +4 -4
- package/dist/components/primitives/context-menu/ContextMenu.vue.d.ts +5 -2
- package/dist/components/primitives/context-menu/ContextMenuItems.vue.d.ts +4 -5
- package/dist/components/primitives/dialog/Dialog.vue.d.ts +16 -8
- package/dist/components/primitives/dropdown-menu/DropdownMenu.vue.d.ts +7 -3
- package/dist/components/primitives/dropdown-menu/DropdownMenuItems.vue.d.ts +6 -3
- package/dist/components/primitives/dropdown-menu/DropdownMenuSheet.vue.d.ts +28 -0
- package/dist/components/primitives/input/Input.vue.d.ts +8 -1
- package/dist/components/primitives/input/Textarea.vue.d.ts +1 -1
- package/dist/components/primitives/input-steppers/InputSteppers.vue.d.ts +1 -1
- package/dist/components/primitives/motion/PushTransition.vue.d.ts +38 -0
- package/dist/components/primitives/multiple-select/MultipleSelect.vue.d.ts +4 -4
- package/dist/components/primitives/pagination/Pagination.vue.d.ts +22 -9
- package/dist/components/primitives/pagination/PaginationSheet.vue.d.ts +27 -0
- package/dist/components/primitives/pagination/labels.d.ts +6 -0
- package/dist/components/primitives/popover/Popover.vue.d.ts +11 -3
- package/dist/components/primitives/popover/floating.d.ts +27 -0
- package/dist/components/primitives/popover/overlay.d.ts +36 -0
- package/dist/components/primitives/segment-control/SegmentControl.vue.d.ts +4 -1
- package/dist/components/primitives/segment-control/context.d.ts +3 -0
- package/dist/components/primitives/select/Select.vue.d.ts +4 -0
- package/dist/components/primitives/select/internal/ComboboxField.vue.d.ts +6 -5
- package/dist/components/primitives/select/internal/SelectSheet.vue.d.ts +42 -0
- package/dist/components/primitives/select/internal/types.d.ts +2 -0
- package/dist/components/primitives/sheet/BottomSheet.vue.d.ts +69 -0
- package/dist/components/primitives/sheet/Sheet.vue.d.ts +13 -5
- package/dist/components/primitives/sheet/phone.d.ts +7 -0
- package/dist/components/primitives/skeleton/SectionSkeleton.vue.d.ts +25 -4
- package/dist/components/primitives/skeleton/Skeleton.vue.d.ts +3 -0
- package/dist/components/primitives/superbox-select/SuperboxSelect.vue.d.ts +4 -4
- package/dist/components/primitives/tag/Tag.vue.d.ts +2 -2
- package/dist/components/primitives/toast/ToastProvider.vue.d.ts +0 -2
- package/dist/components/primitives/toast/toast.d.ts +21 -1
- package/dist/components/primitives/tooltip/Tooltip.vue.d.ts +8 -3
- package/dist/components/primitives/tooltip/tooltipStyle.d.ts +11 -1
- package/dist/components/rich-text-editor/RichTextEditor.vue.d.ts +1 -1
- package/dist/composables/backDismiss.d.ts +19 -0
- package/dist/composables/formControl.d.ts +18 -0
- package/dist/composables/phone.d.ts +8 -0
- package/dist/composables/phoneSurface.d.ts +35 -0
- package/dist/composables/softKeyboard.d.ts +26 -4
- package/dist/composables/visualViewport.d.ts +31 -0
- package/dist/dnd/autoScroll.d.ts +57 -0
- package/dist/dnd/dragKit.d.ts +111 -0
- package/dist/dnd/index.d.ts +4 -0
- package/dist/dnd/layout.d.ts +57 -0
- package/dist/dnd/vue.d.ts +16 -0
- package/dist/feedback/StatusSlot.vue.d.ts +24 -0
- package/dist/feedback/showAfter.d.ts +15 -0
- package/dist/feedback/stackMotion.d.ts +13 -0
- package/dist/feedback/timing.d.ts +23 -0
- package/dist/grid/cells/draw.d.ts +57 -0
- package/dist/grid/cells/images.d.ts +5 -0
- package/dist/grid/cells/index.d.ts +7 -0
- package/dist/grid/cells/number.d.ts +5 -0
- package/dist/grid/cells/registry.d.ts +56 -0
- package/dist/grid/cells/renderers.d.ts +8 -0
- package/dist/grid/cells/status.d.ts +6 -0
- package/dist/grid/cells/types.d.ts +200 -0
- package/dist/grid/cells/use.d.ts +7 -0
- package/dist/grid/clipboard/copy.d.ts +17 -0
- package/dist/grid/clipboard/index.d.ts +4 -0
- package/dist/grid/clipboard/proposal.d.ts +35 -0
- package/dist/grid/clipboard/tsv.d.ts +14 -0
- package/dist/grid/clipboard/write.d.ts +21 -0
- package/dist/grid/contracts.d.ts +200 -0
- package/dist/grid/edit/cell-status.d.ts +33 -0
- package/dist/grid/edit/edit-session.d.ts +97 -0
- package/dist/grid/edit/use-grid-edit.d.ts +48 -0
- package/dist/grid/focus/editor-style.d.ts +67 -0
- package/dist/grid/host/GridHost.vue.d.ts +137 -0
- package/dist/grid/host/controller.d.ts +219 -0
- package/dist/grid/host/dom.d.ts +10 -0
- package/dist/grid/index.d.ts +8 -0
- package/dist/grid/range/block.d.ts +30 -0
- package/dist/grid/range/fill.d.ts +27 -0
- package/dist/grid/range/index.d.ts +2 -0
- package/dist/grid/theme.d.ts +61 -0
- package/dist/grid-core/auto-scroll.d.ts +67 -0
- package/dist/grid-core/column-resize.d.ts +43 -0
- package/dist/grid-core/config.d.ts +39 -0
- package/dist/grid-core/coordinate.d.ts +64 -0
- package/dist/grid-core/drag.d.ts +46 -0
- package/dist/grid-core/freeze.d.ts +11 -0
- package/dist/grid-core/index.d.ts +17 -0
- package/dist/grid-core/keyboard.d.ts +34 -0
- package/dist/grid-core/keys.d.ts +38 -0
- package/dist/grid-core/lru.d.ts +10 -0
- package/dist/grid-core/range.d.ts +28 -0
- package/dist/grid-core/region.d.ts +73 -0
- package/dist/grid-core/renderer/base.d.ts +92 -0
- package/dist/grid-core/renderer/layout.d.ts +129 -0
- package/dist/grid-core/selection-controller.d.ts +62 -0
- package/dist/grid-core/selection.d.ts +35 -0
- package/dist/grid-core/theme.d.ts +81 -0
- package/dist/grid-core/types.d.ts +178 -0
- package/dist/grid.js +6272 -0
- package/dist/i18n/text.d.ts +17 -0
- package/dist/index.d.ts +39 -4
- package/dist/index.js +23037 -14390
- package/dist/interaction/editSession.d.ts +49 -0
- package/dist/interaction/focus.d.ts +28 -0
- package/dist/interaction/gesture.d.ts +49 -0
- package/dist/interaction/ime.d.ts +55 -0
- package/dist/interaction/index.d.ts +6 -0
- package/dist/interaction/outside.d.ts +40 -0
- package/dist/interaction/vue.d.ts +21 -0
- package/dist/json-ai-prompt.md +1 -1
- package/dist/json-preview/preview.js +16780 -11595
- package/dist/json.js +10 -10
- package/dist/lib/adaptiveLayout.d.ts +32 -2
- package/dist/lib/deviceViewport.d.ts +2 -1
- package/dist/lib/motion.d.ts +12 -0
- package/dist/reka-runtime.json +15 -12
- package/dist/rich-text.js +1 -1
- package/dist/theme.css +1 -1
- package/dist/themes/dsm7-embedded-reset.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/dist/virtual/cardHeight.d.ts +39 -0
- package/dist/virtual/galleryColumns.d.ts +11 -0
- package/dist/virtual/layoutMotion.d.ts +30 -0
- package/docs/adaptive-layout.md +148 -25
- package/docs/app-local-modal.md +1 -1
- package/docs/callout.md +22 -1
- package/docs/layout-rules.md +14 -0
- package/docs/list-detail.md +60 -0
- package/docs/mobile-native.md +502 -0
- package/docs/release-checks.md +28 -0
- package/docs/theme-hooks.md +28 -7
- package/docs/ux-foundation.md +133 -0
- package/docs/ux-grid.md +217 -0
- package/package.json +100 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.20.5 (2026-11-05)
|
|
4
|
+
|
|
5
|
+
- In a DSM window on a touch device, a small Button, IconButton, checkbox, radio, switch or tappable Tag keeps its 44px tap box around itself. The host reset made these controls static, so the tap box covered the nearest positioned ancestor (a whole board or panel) and took every tap in it. `check:mobile` now fails when a tap box reaches past twice its control or 64px
|
|
6
|
+
- Mobile overflow checks now block the full release gate. Tables and nowrap examples scroll within their parent; wizard actions wrap, topology and Select labels fit, and Slider bubbles stay inside their track. Sheets, heading links, preset options and settings switches use the touch hit area; the rich text toolbar moves 44px tools into More earlier
|
|
7
|
+
- Phone tabs have 44px tap targets and selected-tab scrolling; short segmented controls fill the available width
|
|
8
|
+
- On a phone, RecordPanel and AsidePanel open as the BottomSheet: the record sheet is 92% with an optional Previous / Next footer and comments as a pushed page, and the assistant rests at half or 92%. Their own swipe code is gone
|
|
9
|
+
- Phone shell: `AppLayout`'s phone bar is one 48px row with a menu or Back button (`back`, emits `back`), the page title (new `title` prop, else the page's `PageHeader` title, else the brand) and one action plus "…" (`headerActions`, emits `headerAction`); the navigation drawer is Reka's Drawer from the left (85%, up to 320px), swipes left to close, moves 240/180ms and closes on Back. `AppTabBar` shows at most five slots, the rest under More, and pads by `--ui-safe-bottom`
|
|
10
|
+
- Phone forms: Input and SearchField set keyboard hints by type (new `integer` and `decimal` types), Form gives fields Next / Done in order, and FormActions sticks above the keyboard with full-width buttons by default on a phone
|
|
11
|
+
- New `BottomSheet` on Reka's Drawer (reka-ui 2.11.0): grabber, swipe to close, keyboard-aware heights, Back to close and `confirm-close`. `Dialog` on a phone and `Sheet side="bottom"` use it
|
|
12
|
+
- Phone push navigation: `ListDetail` at 640px or narrower pushes the detail over the list (Back, browser Back and an edge swipe pop it); `SectionTabs` on a phone shows five or more sections or a `fill` settings page as a grouped list that pushes each section, and four or fewer as a full-width SegmentControl; new `PushTransition`
|
|
13
|
+
- On a phone, Select and the combobox selects, DatePicker, ColorPicker and menus with more than five actions or a submenu open as bottom sheets (48px rows, a pinned search, Done or Cancel); new `usePhoneSurface` decides popover or sheet
|
|
14
|
+
- On a phone, `Pagination` is `‹ Page 1 of N ›` with 44px buttons and a sheet for the page and page size. `DataGrid` and `DataTable` show a list (title, subtitle, trailing status; new column `list` role); DataGrid selects by long press with a bottom selection bar and moves sorting and columns into a sheet. DataTable's `auto` view is the list instead of cards
|
|
15
|
+
|
|
16
|
+
## 0.20.4 (2026-11-05)
|
|
17
|
+
|
|
18
|
+
- Keep anchored menus, pickers and tips within the shared floating boundary, safe area and keyboard inset
|
|
19
|
+
- On a phone, toasts sit at the bottom full width above the tab bar or keyboard, swipe down and show one at a time; notifications sit full width at the top. Hover-only card actions, the ScheduleTable pen and the TypoHeader anchor show at rest without hover, and a 250ms press opens a card's menu
|
|
20
|
+
|
|
21
|
+
- Compact chrome is the only density: web chrome rows 48px (window and phone keep 44px), chrome controls 28px, header actions 32px, web navigation rows 32px, icons 16px. The `web` presentation uses the system font stack (no Inter)
|
|
22
|
+
- Final motion tokens: fast 150ms, normal 200ms, slow 240ms, new `--ui-motion-panel` 300ms and `--ui-motion-exit` 100ms, plus stack, flash, skeleton pulse, drag and drag settle tokens. Under reduced motion or `data-ui-motion="off"` every duration token reads 0ms; `motionMs()` reads a token from computed style
|
|
23
|
+
- `AppLayout wide-layout="web"` starts at a 960px container; at 960–1199px the sidebar starts as the 48px rail (was 64px). The sidebar moves its own width on the panel token instead of animating the grid columns. `PageHeader` and `PageToolbar` are one 48px row in the web presentation
|
|
24
|
+
- `AppLayout` takes an `aside` slot with `v-model:aside` (`open`, `collapsed`, `expanded`) and `v-model:aside-width` (380px, 320–560px). New `AsidePanel` fills it: a 48px rail, a docked panel, a floating panel when the page would be narrower than 480px, and a bottom sheet on a phone. `useAsidePreference` stores its state and width
|
|
25
|
+
- New `RecordPanel`: a non-modal record panel docked over the view, so opening, closing and resizing never change the view's width; 560px default, a sash to resize, an optional comments column, a full-screen sheet at 640px and narrower
|
|
26
|
+
- New `AdaptivePanel`: a popover in a wide host and a bottom sheet at 640px and narrower, keeping the draft and focus across the switch
|
|
27
|
+
- Popover, DropdownMenu, Select and the combobox selects share one layer stack: Escape closes only the topmost surface, and an Escape that ends an IME composition closes nothing. `provideOverlayMotion('none')` makes popups inside a grid editor appear at once
|
|
28
|
+
- Skeletons take the final geometry (`SectionSkeleton variant="grid" | "cards" | "fields"`); shapes show after 300ms. Toasts: success 3s, info and warning 5s, danger stays; `pending()` turns into its result in place. New `StatusSlot` and `useShowAfter`. `ToastProvider` drops its `duration` prop
|
|
29
|
+
- New `VirtualCardGrid`, `CardCover` and `CardField`: a virtual card gallery whose card height comes from `cardHeight()`, whose column count is known before the first card renders, and which holds its columns while a side region moves
|
|
30
|
+
- The interaction core (outside layers, IME guard, focus, pointer gesture, edit session), the drag kit (`createDragKit`, `useDragKit`, auto-scroll) and the motion helpers are exported from the package entry ([UX foundation](docs/ux-foundation.md))
|
|
31
|
+
- New `@synopackageland/ui/grid` entry: `GridHost`, a canvas grid ported from Teable's MIT grid, with cell renderers for every field kind, editing with IME-safe first keys, and a save-status store. Load it lazily
|
|
32
|
+
- Five new accessible labels (Checked, Not checked, Rating, Saving, Not saved) and `Restore {name}`, in all nine locales
|
|
33
|
+
- Phone viewport and keyboard layer: `AppRoot full-page` makes the root a `100dvh` page whose document never scrolls (no overscroll reload) and calls `ensureDeviceViewport()`, which now adds `viewport-fit=cover, interactive-widget=resizes-content` (zoom stays on). Every `AppRoot` publishes `--ui-vvh`, `--ui-vv-top`, `--ui-kb-inset` and `data-ui-keyboard="open"` from the visual viewport (60px threshold, one read per frame) and keeps the focused field visible inside its own scroller. New `useVisualViewport`, `focusWithoutScroll` and `useBackDismiss` (Back closes the top sheet, drawer or pushed page only); `useSoftKeyboard` is exported and confirms the keyboard with the viewport
|
|
34
|
+
- Phone and touch: the touch rules now apply in every app (they were keyed on a theme name nobody set). On a coarse pointer every field, select and editable text is 16px, and small controls get a 44px tap box. A phone (640px and narrower) reads 15px body, 13px secondary text, 44px fields and form buttons, 48px list and menu rows and one 48px header; long words break instead of widening a row; hover styles apply only where hover exists ([Mobile-native UI](docs/mobile-native.md))
|
|
35
|
+
- Third-party notices for the ported Teable and Baserow code are in `LICENSES/ux-foundation.md` and `LICENSES/ux-grid-teable.md`
|
|
36
|
+
- Popover and Tooltip use one floating preset (`floating.ts`): 8px plus safe area and soft keyboard from the edge, `sticky: 'partial'`, `hideWhenDetached`, sizes from Reka's available room instead of `100vw`. The AppRoot portal layer clips so a popup never grows the page. Tooltip `openOnTap` is on by default on coarse pointers, and a real tap (with its click) no longer closes it at once
|
|
37
|
+
|
|
3
38
|
## 0.20.3 (2026-11-04)
|
|
4
39
|
|
|
5
40
|
- `DataGrid` and `DataTable` remember column widths and view state per App and `stateKey`, so two Apps with the same key no longer share widths; widths saved under the previous key are still read
|
package/LICENSES/THIRD_PARTY.md
CHANGED
|
@@ -211,7 +211,7 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
211
211
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
212
212
|
```
|
|
213
213
|
|
|
214
|
-
## @floating-ui/vue@
|
|
214
|
+
## @floating-ui/vue@2.0.1
|
|
215
215
|
|
|
216
216
|
Declared license: MIT
|
|
217
217
|
|
|
@@ -3393,7 +3393,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
3393
3393
|
THE SOFTWARE.
|
|
3394
3394
|
```
|
|
3395
3395
|
|
|
3396
|
-
## reka-ui@2.
|
|
3396
|
+
## reka-ui@2.11.0
|
|
3397
3397
|
|
|
3398
3398
|
Declared license: MIT
|
|
3399
3399
|
|
|
@@ -3603,36 +3603,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
3603
3603
|
THE SOFTWARE.
|
|
3604
3604
|
```
|
|
3605
3605
|
|
|
3606
|
-
## vue-demi@0.14.10
|
|
3607
|
-
|
|
3608
|
-
Declared license: MIT
|
|
3609
|
-
|
|
3610
|
-
### LICENSE
|
|
3611
|
-
|
|
3612
|
-
```text
|
|
3613
|
-
MIT License
|
|
3614
|
-
|
|
3615
|
-
Copyright (c) 2020-present, Anthony Fu
|
|
3616
|
-
|
|
3617
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
3618
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
3619
|
-
in the Software without restriction, including without limitation the rights
|
|
3620
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
3621
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
3622
|
-
furnished to do so, subject to the following conditions:
|
|
3623
|
-
|
|
3624
|
-
The above copyright notice and this permission notice shall be included in all
|
|
3625
|
-
copies or substantial portions of the Software.
|
|
3626
|
-
|
|
3627
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
3628
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
3629
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
3630
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
3631
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
3632
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
3633
|
-
SOFTWARE.
|
|
3634
|
-
```
|
|
3635
|
-
|
|
3636
3606
|
## w3c-keyname@2.2.8
|
|
3637
3607
|
|
|
3638
3608
|
Declared license: MIT
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# @synopackageland/ui UX foundation: third-party notices
|
|
2
|
+
|
|
3
|
+
`dist/index.js` contains small ports of MIT-licensed code from Teable and
|
|
4
|
+
Baserow in the interaction core, drag kit, panels and virtual cards. Each
|
|
5
|
+
ported source file keeps the notice below in its header; the built file drops
|
|
6
|
+
those comments and starts with a one-line notice pointing here instead. The
|
|
7
|
+
canvas grid in `dist/grid.js` has its own notices in
|
|
8
|
+
[ux-grid-teable.md](ux-grid-teable.md) and [ux-grid-baserow.md](ux-grid-baserow.md).
|
|
9
|
+
|
|
10
|
+
Nothing is taken from Teable `apps/*` (AGPL-3.0), Baserow `premium/` or
|
|
11
|
+
`enterprise/` (proprietary) or NocoDB (Sustainable Use License); where those
|
|
12
|
+
projects informed a behaviour, only the technique was used. No Teable or
|
|
13
|
+
Baserow name, logo or icon asset is shipped.
|
|
14
|
+
|
|
15
|
+
## Ported files
|
|
16
|
+
|
|
17
|
+
| Source file in this package | Ported from | Upstream commit |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `src/interaction/ime.ts` (`isPrintableKey`) | Teable `packages/sdk/src/components/grid/utils/hotkey.ts` | `f8be01fad` |
|
|
20
|
+
| `src/interaction/gesture.ts` (5px threshold, half-item drop rule) | Teable `packages/sdk/src/components/grid/hooks/useDrag.ts:8-119` | `f8be01fad` |
|
|
21
|
+
| `src/components/primitives/popover/overlay.ts` (`skipAutoFocusOnTouch`) | Teable `packages/ui-lib/src/shadcn/ui/popover.tsx:30-45` | `f8be01fad` |
|
|
22
|
+
| `src/components/composite/record-panel/recordPanelWidth.ts` (width rule) | Teable `packages/sdk/src/components/expand-record/Panel.tsx:20-26, 83-88` | `f8be01fad` |
|
|
23
|
+
| `src/components/composite/record-panel/RecordPanel.vue` (sash, clip layer, drag-to-width) | Teable `packages/sdk/src/components/expand-record/Panel.tsx:100-171`, `packages/ui-lib/src/base/resize-handle/ResizeHandleBar.tsx:1-35` | `f8be01fad` |
|
|
24
|
+
| `src/interaction/outside.ts` (outside-press snapshot and ignore list) | Baserow `web-frontend/modules/core/utils/dom.js` `onClickOutside` | `98f727dc2` |
|
|
25
|
+
| `src/dnd/dragKit.ts` (buffered-rows drag and drop, 100ms swap lock) | Baserow `web-frontend/modules/database/mixins/bufferedRowsDragAndDrop.js:64-235`, `store/view/bufferedRows.js` | `98f727dc2` |
|
|
26
|
+
| `src/dnd/autoScroll.ts` (edge zone and speed ramp) | Baserow `web-frontend/modules/core/directives/autoScroll.js:30-99` | `98f727dc2` |
|
|
27
|
+
| `src/virtual/cardHeight.ts` (`cardHeight`) | Baserow `web-frontend/modules/database/utils/card.js:1-24` | `aa2402b7c716c3eadc5a382af3e880756e026d9c` |
|
|
28
|
+
|
|
29
|
+
## Teable licence
|
|
30
|
+
|
|
31
|
+
Teable `packages/*` is MIT licensed.
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
MIT License
|
|
35
|
+
|
|
36
|
+
Copyright (c) 2023-2025 Teable, Inc.
|
|
37
|
+
|
|
38
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
39
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
40
|
+
in the Software without restriction, including without limitation the rights
|
|
41
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
42
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
43
|
+
furnished to do so, subject to the following conditions:
|
|
44
|
+
|
|
45
|
+
The above copyright notice and this permission notice shall be included in all
|
|
46
|
+
copies or substantial portions of the Software.
|
|
47
|
+
|
|
48
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
49
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
50
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
51
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
52
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
53
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
54
|
+
SOFTWARE.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Baserow licence
|
|
58
|
+
|
|
59
|
+
Baserow Open Source Edition (outside `premium/` and `enterprise/`) is MIT
|
|
60
|
+
(Expat) licensed.
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
MIT License
|
|
64
|
+
|
|
65
|
+
Copyright (c) 2019-present Baserow B.V.
|
|
66
|
+
|
|
67
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
68
|
+
software and associated documentation files (the "Software"), to deal in the Software
|
|
69
|
+
without restriction, including without limitation the rights to use, copy, modify,
|
|
70
|
+
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
71
|
+
permit persons to whom the Software is furnished to do so, subject to the following
|
|
72
|
+
conditions:
|
|
73
|
+
|
|
74
|
+
The above copyright notice and this permission notice shall be included in all copies
|
|
75
|
+
or substantial portions of the Software.
|
|
76
|
+
|
|
77
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
78
|
+
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
79
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
80
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
81
|
+
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
82
|
+
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
83
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# @synopackageland/ui/grid: Baserow notice
|
|
2
|
+
|
|
3
|
+
`dist/grid.js` (source `src/grid/clipboard/write.ts`, `writeClipboardAsync`)
|
|
4
|
+
contains a TypeScript port of `copySelectionToClipboard` and
|
|
5
|
+
`writeToClipboard` from Baserow's
|
|
6
|
+
`web-frontend/modules/database/mixins/copyPasteHelper.js:147-218` (commit
|
|
7
|
+
`98f727dc2ed8140fe44e3e797eedb05339562659`). The HTML-table rule in
|
|
8
|
+
`src/grid/clipboard/tsv.ts` (`toHtmlTable`: no table for a single cell) follows
|
|
9
|
+
`prepareHTMLData` in the same file. Baserow licenses all client-side
|
|
10
|
+
JavaScript, including that file, under the MIT (Expat) licence below. Nothing
|
|
11
|
+
from Baserow's `premium/` or `enterprise/` directories is included, and no
|
|
12
|
+
Baserow name, logo or other asset is shipped.
|
|
13
|
+
|
|
14
|
+
## Baserow licence
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
Copyright (c) 2019-present Baserow B.V.
|
|
18
|
+
|
|
19
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
20
|
+
software and associated documentation files (the "Software"), to deal in the Software
|
|
21
|
+
without restriction, including without limitation the rights to use, copy, modify,
|
|
22
|
+
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
23
|
+
permit persons to whom the Software is furnished to do so, subject to the following
|
|
24
|
+
conditions:
|
|
25
|
+
|
|
26
|
+
The above copyright notice and this permission notice shall be included in all copies
|
|
27
|
+
or substantial portions of the Software.
|
|
28
|
+
|
|
29
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
30
|
+
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
31
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
32
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
33
|
+
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
34
|
+
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
35
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# @synopackageland/ui/grid: third-party notice
|
|
2
|
+
|
|
3
|
+
`dist/grid.js` (source `src/grid/` and `src/grid-core/`) contains a TypeScript
|
|
4
|
+
port, without React, of the canvas grid in Teable's SDK package
|
|
5
|
+
(`packages/sdk/src/components/grid/`, commit
|
|
6
|
+
`f8be01fadb86790d3d3a878bedd10cf949f9a8f8`, 2026-11-03). That package is MIT
|
|
7
|
+
licensed (`packages/sdk/LICENSE` and `"license": "MIT"` in
|
|
8
|
+
`packages/sdk/package.json` at that commit). Nothing from Teable's `apps/*`
|
|
9
|
+
(AGPL-3.0) is included, and no Teable name, logo or icon asset is shipped.
|
|
10
|
+
|
|
11
|
+
The Vue host in `src/grid/host/` is new code that follows the coordinate set-up
|
|
12
|
+
in `Grid.tsx` and the pointer flow of `InteractionLayer.tsx`; it calls the
|
|
13
|
+
ported modules and copies no React code. Default theme colours that fill
|
|
14
|
+
missing tokens are Tailwind CSS palette values (MIT, Copyright (c) Tailwind
|
|
15
|
+
Labs, Inc.), as Teable uses them.
|
|
16
|
+
|
|
17
|
+
The fill-handle gesture in `src/grid/host/controller.ts` and `src/grid/range/`
|
|
18
|
+
follows the fill flow of `InteractionLayer.tsx` (preview over the target rows,
|
|
19
|
+
selection grows on release). The fill value rules, the clipboard TSV
|
|
20
|
+
parser/writer and the paste proposal are new code; Teable's fill and
|
|
21
|
+
copy/paste rules live in AGPL `apps/*` code and were not copied. The async
|
|
22
|
+
clipboard write is ported from Baserow (MIT); see `ux-grid-baserow.md`.
|
|
23
|
+
|
|
24
|
+
## Teable licence
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
MIT License
|
|
28
|
+
|
|
29
|
+
Copyright (c) 2023-2025 Teable, Inc.
|
|
30
|
+
|
|
31
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
32
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
33
|
+
in the Software without restriction, including without limitation the rights
|
|
34
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
35
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
36
|
+
furnished to do so, subject to the following conditions:
|
|
37
|
+
|
|
38
|
+
The above copyright notice and this permission notice shall be included in all
|
|
39
|
+
copies or substantial portions of the Software.
|
|
40
|
+
|
|
41
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
42
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
43
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
44
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
45
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
46
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
47
|
+
SOFTWARE.
|
|
48
|
+
```
|
package/README.md
CHANGED
|
@@ -547,6 +547,9 @@ DSM-style application building blocks:
|
|
|
547
547
|
- FacetPanel (filter groups with counts; a bottom sheet on a phone) / TagEditor (tags edited in place, saved optimistically)
|
|
548
548
|
- SplitPane / StorageMeter / StackedBar (see [docs/size-and-split.md](docs/size-and-split.md))
|
|
549
549
|
- ListDetail (a list with the selected item's detail beside it, the pane's width set by dragging and remembered; see [docs/list-detail.md](docs/list-detail.md))
|
|
550
|
+
- AsidePanel (the right side region: rail, docked, floating, sheet) / RecordPanel (a non-modal record panel docked over the view) / AdaptivePanel (a popover on desktop, a bottom sheet on a phone) / StatusSlot
|
|
551
|
+
- VirtualCardGrid / CardCover / CardField (a virtual card gallery whose card height is computed, never measured)
|
|
552
|
+
- Interaction core, drag kit and motion helpers for app views (see [docs/ux-foundation.md](docs/ux-foundation.md); phone and touch rules in [docs/mobile-native.md](docs/mobile-native.md)); the canvas grid is the separate `@synopackageland/ui/grid` entry
|
|
550
553
|
|
|
551
554
|
`Tabs` and `SectionTabs` move a raised selection notch in 120ms. Selected labels
|
|
552
555
|
are blue; main labels are bold 14px and section labels bold 13px. `Tabs` fades its
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DropdownMenuEntry } from '../../primitives/dropdown-menu/DropdownMenu.vue';
|
|
2
|
+
import { AppAsideState, AppNavigation, WideLayout } from '../../../lib/adaptiveLayout';
|
|
2
3
|
type __VLS_Props = {
|
|
3
4
|
sidebarWidth?: string;
|
|
4
5
|
minHeight?: string;
|
|
5
6
|
/** Disable responsive layout if an application deliberately manages it itself. */
|
|
6
7
|
responsive?: boolean;
|
|
7
|
-
/** `web` opts a full-page Portal into the full-page layout at
|
|
8
|
+
/** `web` opts a full-page Portal into the full-page layout at 960px or wider (the sidebar starts as the rail below 1200); DSM windows keep `window`. */
|
|
8
9
|
wideLayout?: WideLayout;
|
|
9
10
|
/** Remembers the web sidebar's width and collapse under `${key}:app-sidebar`; use an app-unique key. */
|
|
10
11
|
sidebarStorageKey?: string;
|
|
11
|
-
/** Heads the web sidebar and the phone bar; defaults to the
|
|
12
|
+
/** Heads the web sidebar and the phone drawer (and the phone bar when no page title is known); defaults to the document title. A DSM window shows it in its title bar instead. */
|
|
12
13
|
brandName?: string;
|
|
13
14
|
/** Logo URL beside the brand name; defaults to the page icon. */
|
|
14
15
|
brandIcon?: string;
|
|
@@ -24,6 +25,18 @@ type __VLS_Props = {
|
|
|
24
25
|
* drawer. Defaults to the left sidebar.
|
|
25
26
|
*/
|
|
26
27
|
navigation?: AppNavigation;
|
|
28
|
+
/**
|
|
29
|
+
* The phone bar's title. Without it the bar shows the title of the page's
|
|
30
|
+
* `PageHeader`, and without one of those the brand.
|
|
31
|
+
*/
|
|
32
|
+
title?: string;
|
|
33
|
+
/** The phone bar leads with a Back button (emits `back`) instead of the menu button, for a pushed page. */
|
|
34
|
+
back?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The phone bar's actions: the first is one button (its icon, or else its
|
|
37
|
+
* label); the rest open from "…". A pick emits `headerAction` with the key.
|
|
38
|
+
*/
|
|
39
|
+
headerActions?: DropdownMenuEntry[];
|
|
27
40
|
};
|
|
28
41
|
type __VLS_Slots = {
|
|
29
42
|
sidebar?: () => unknown;
|
|
@@ -34,14 +47,47 @@ type __VLS_Slots = {
|
|
|
34
47
|
footer?: () => unknown;
|
|
35
48
|
/** A phone's bottom tab bar (AppTabBar), shown only in the mobile presentation. */
|
|
36
49
|
tabbar?: () => unknown;
|
|
50
|
+
/**
|
|
51
|
+
* The right side region. `overlay` is true when the open aside floats over
|
|
52
|
+
* the page (the page would be narrower than 480px, or the layout is not
|
|
53
|
+
* `web`); on a phone the region has no width and its content places itself.
|
|
54
|
+
*/
|
|
55
|
+
aside?: (props: {
|
|
56
|
+
state: AppAsideState;
|
|
57
|
+
overlay: boolean;
|
|
58
|
+
width: number;
|
|
59
|
+
presentation: 'mobile' | 'window' | 'web';
|
|
60
|
+
}) => unknown;
|
|
61
|
+
};
|
|
62
|
+
type __VLS_ModelProps = {
|
|
63
|
+
/**
|
|
64
|
+
* The `aside` slot's state: `open` beside the page, `collapsed` to the 48px
|
|
65
|
+
* rail, or `expanded` over the whole content area (the sidebar stays). The
|
|
66
|
+
* slot's content (an AsidePanel) draws the panel and the rail; the layout
|
|
67
|
+
* only sizes the region and moves it.
|
|
68
|
+
*/
|
|
69
|
+
'aside'?: AppAsideState;
|
|
70
|
+
/** The open aside's width in px, kept within 320-560; the handle on its start edge writes it. */
|
|
71
|
+
'asideWidth'?: number;
|
|
37
72
|
};
|
|
38
|
-
|
|
73
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
74
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
75
|
+
back: () => any;
|
|
39
76
|
brand: (event: MouseEvent) => any;
|
|
40
|
-
|
|
77
|
+
headerAction: (key: string) => any;
|
|
78
|
+
"update:aside": (value: AppAsideState) => any;
|
|
79
|
+
"update:asideWidth": (value: number) => any;
|
|
80
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
81
|
+
onBack?: (() => any) | undefined;
|
|
41
82
|
onBrand?: ((event: MouseEvent) => any) | undefined;
|
|
83
|
+
onHeaderAction?: ((key: string) => any) | undefined;
|
|
84
|
+
"onUpdate:aside"?: ((value: AppAsideState) => any) | undefined;
|
|
85
|
+
"onUpdate:asideWidth"?: ((value: number) => any) | undefined;
|
|
42
86
|
}>, {
|
|
87
|
+
title: string;
|
|
43
88
|
height: "auto" | "fill";
|
|
44
89
|
minHeight: string;
|
|
90
|
+
back: boolean;
|
|
45
91
|
sidebarWidth: string;
|
|
46
92
|
responsive: boolean;
|
|
47
93
|
wideLayout: WideLayout;
|
|
@@ -49,6 +95,7 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
49
95
|
brandName: string;
|
|
50
96
|
brandIcon: string;
|
|
51
97
|
navigation: AppNavigation;
|
|
98
|
+
headerActions: DropdownMenuEntry[];
|
|
52
99
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
53
100
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
54
101
|
declare const _default: typeof __VLS_export;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ComputedRef, InjectionKey, Ref } from 'vue';
|
|
2
|
+
interface PageTitleEntry {
|
|
3
|
+
title: () => string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* The phone bar's page title. A PageHeader in the layout's content registers
|
|
7
|
+
* its title; the last one mounted is the page's, and the bar shows it unless
|
|
8
|
+
* AppLayout's own `title` prop is set.
|
|
9
|
+
*/
|
|
10
|
+
export interface AppPageTitleHost {
|
|
11
|
+
/** The content column: a PageHeader outside it (in a dialog or sheet) keeps its own title. */
|
|
12
|
+
main: Readonly<Ref<HTMLElement | null>>;
|
|
13
|
+
entries: Ref<readonly PageTitleEntry[]>;
|
|
14
|
+
/** Whether the bar shows this entry's title (a phone, and no `title` prop). */
|
|
15
|
+
shows: (entry: PageTitleEntry) => boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const APP_PAGE_TITLE_KEY: InjectionKey<AppPageTitleHost>;
|
|
18
|
+
export declare function createPageTitleHost(main: Readonly<Ref<HTMLElement | null>>, active: () => boolean): AppPageTitleHost;
|
|
19
|
+
/**
|
|
20
|
+
* Hands a PageHeader's title to the phone bar. Returns whether the bar shows
|
|
21
|
+
* it, so the header can keep its own heading for screen readers only.
|
|
22
|
+
*/
|
|
23
|
+
export declare function usePageTitle(element: Readonly<Ref<HTMLElement | null>>, title: () => string): ComputedRef<boolean>;
|
|
24
|
+
export {};
|
|
@@ -25,6 +25,14 @@ type __VLS_Props = {
|
|
|
25
25
|
* then DSM's language in a DSM window, then the browser's.
|
|
26
26
|
*/
|
|
27
27
|
locale?: UiLocale;
|
|
28
|
+
/**
|
|
29
|
+
* The app owns the whole page (a Portal or standalone launch, never a DSM
|
|
30
|
+
* desktop window). The root becomes the page: `100dvh` tall, the document
|
|
31
|
+
* under it never scrolls and has no overscroll reload, and the page gets a
|
|
32
|
+
* device-width, safe-area and keyboard-resizing viewport
|
|
33
|
+
* (`ensureDeviceViewport`). Fixed for the mounted root.
|
|
34
|
+
*/
|
|
35
|
+
fullPage?: boolean;
|
|
28
36
|
};
|
|
29
37
|
declare var __VLS_7: {}, __VLS_9: {};
|
|
30
38
|
type __VLS_Slots = {} & {
|
|
@@ -40,6 +48,7 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
40
48
|
modalScope: "document" | "app";
|
|
41
49
|
dialogBounds: "app" | "viewport";
|
|
42
50
|
colorScheme: "light" | "dark";
|
|
51
|
+
fullPage: boolean;
|
|
43
52
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
44
53
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
45
54
|
declare const _default: typeof __VLS_export;
|
|
@@ -28,9 +28,9 @@ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {
|
|
|
28
28
|
"onUpdate:modelValue"?: ((key: string) => any) | undefined;
|
|
29
29
|
onMore?: (() => any) | undefined;
|
|
30
30
|
}>, {
|
|
31
|
+
hidden: boolean;
|
|
31
32
|
modelValue: string;
|
|
32
33
|
ariaLabel: string;
|
|
33
|
-
hidden: boolean;
|
|
34
34
|
more: boolean;
|
|
35
35
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
36
36
|
declare const _default: typeof __VLS_export;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
import { AppAsideState } from '../../../lib/adaptiveLayout';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
/** The panel's title and accessible name, already translated (e.g. the assistant's name). */
|
|
5
|
+
title: string;
|
|
6
|
+
/** The rail and phone button's icon. */
|
|
7
|
+
icon?: Component;
|
|
8
|
+
/** A 6px dot on the rail and the phone button. */
|
|
9
|
+
unread?: boolean;
|
|
10
|
+
/** The phone button that opens the sheet; without it the app opens the sheet itself. */
|
|
11
|
+
fab?: boolean;
|
|
12
|
+
/** Offers `expanded` (the panel takes the content area). */
|
|
13
|
+
expandable?: boolean;
|
|
14
|
+
/** Where focus goes when the panel opens: `field` (the first field in the composer or body, not on touch), the `panel`, or `none`. */
|
|
15
|
+
initialFocus?: 'field' | 'panel' | 'none';
|
|
16
|
+
/** Shown after the rail button's name in its tooltip, e.g. `Ctrl+J`. The app binds the key. */
|
|
17
|
+
shortcut?: string;
|
|
18
|
+
openLabel?: string;
|
|
19
|
+
collapseLabel?: string;
|
|
20
|
+
expandLabel?: string;
|
|
21
|
+
restoreLabel?: string;
|
|
22
|
+
};
|
|
23
|
+
type SlotProps = {
|
|
24
|
+
state: AppAsideState;
|
|
25
|
+
mode: Mode;
|
|
26
|
+
collapse: () => void;
|
|
27
|
+
expand: () => void;
|
|
28
|
+
restore: () => void;
|
|
29
|
+
};
|
|
30
|
+
type __VLS_Slots = {
|
|
31
|
+
/** Surface tabs above the header row (a SegmentControl size="sm"); shown only when given. */
|
|
32
|
+
tabs?: (props: SlotProps) => unknown;
|
|
33
|
+
/** Extra header actions before expand and collapse (a ⋯ menu). */
|
|
34
|
+
actions?: (props: SlotProps) => unknown;
|
|
35
|
+
/** The thread: it scrolls, and its scroll position survives every state. */
|
|
36
|
+
default?: (props: SlotProps) => unknown;
|
|
37
|
+
/** The composer, kept at the bottom; its draft survives every state. */
|
|
38
|
+
composer?: (props: SlotProps) => unknown;
|
|
39
|
+
};
|
|
40
|
+
type Mode = 'docked' | 'floating' | 'sheet';
|
|
41
|
+
declare function open(): void;
|
|
42
|
+
declare function collapse(): void;
|
|
43
|
+
declare function expand(): void;
|
|
44
|
+
declare function restore(): void;
|
|
45
|
+
declare function toggle(): void;
|
|
46
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
47
|
+
open: typeof open;
|
|
48
|
+
collapse: typeof collapse;
|
|
49
|
+
expand: typeof expand;
|
|
50
|
+
restore: typeof restore;
|
|
51
|
+
toggle: typeof toggle;
|
|
52
|
+
state: import('vue').WritableComputedRef<AppAsideState, AppAsideState>;
|
|
53
|
+
mode: import('vue').ComputedRef<Mode>;
|
|
54
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
55
|
+
initialFocus: "field" | "panel" | "none";
|
|
56
|
+
icon: Component;
|
|
57
|
+
shortcut: string;
|
|
58
|
+
expandable: boolean;
|
|
59
|
+
unread: boolean;
|
|
60
|
+
fab: boolean;
|
|
61
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
62
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
63
|
+
declare const _default: typeof __VLS_export;
|
|
64
|
+
export default _default;
|
|
65
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
66
|
+
new (): {
|
|
67
|
+
$slots: S;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
import { AppAsideState } from '../../../lib/adaptiveLayout';
|
|
3
|
+
/**
|
|
4
|
+
* One stored entry per scope (a page kind the app names, such as `editor` or
|
|
5
|
+
* `shell`) under one localStorage key:
|
|
6
|
+
* `{"v":1,"editor":{"state":"open","width":380},"shell":{"state":"collapsed","width":380}}`.
|
|
7
|
+
* Other fields an app keeps in a scope's entry (a selected tab) are left as they are.
|
|
8
|
+
* The library knows no routes: the app picks the scope for the page it shows.
|
|
9
|
+
*/
|
|
10
|
+
export type AsidePreference = {
|
|
11
|
+
state: AppAsideState;
|
|
12
|
+
width: number;
|
|
13
|
+
};
|
|
14
|
+
export declare function clampAsideWidth(width: number): number;
|
|
15
|
+
/** The stored state and width for `scope`, or the defaults. Synchronous, so a first paint can use it. */
|
|
16
|
+
export declare function readAsidePreference(key: string, scope: string, defaults?: Partial<AsidePreference>): AsidePreference;
|
|
17
|
+
export declare function writeAsidePreference(key: string, scope: string, value: Partial<AsidePreference>): void;
|
|
18
|
+
/**
|
|
19
|
+
* The aside's state and width for AppLayout's `v-model:aside` and
|
|
20
|
+
* `v-model:aside-width`, read during setup (no second paint) and written on
|
|
21
|
+
* every change. AppLayout changes the width only when a drag ends or a key
|
|
22
|
+
* moves the handle, so the width is written once per resize. Another tab's
|
|
23
|
+
* change is picked up on the next page load, never live.
|
|
24
|
+
*/
|
|
25
|
+
export declare function useAsidePreference(key: string, scope: string, defaults?: Partial<AsidePreference>): {
|
|
26
|
+
state: Ref<AppAsideState>;
|
|
27
|
+
width: Ref<number>;
|
|
28
|
+
};
|
|
@@ -2,7 +2,17 @@ export type SectionTab = {
|
|
|
2
2
|
value: string;
|
|
3
3
|
label: string;
|
|
4
4
|
disabled?: boolean;
|
|
5
|
+
/** On a phone's section list, sections with the same group sit in one block under this heading. */
|
|
6
|
+
group?: string;
|
|
5
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* How the sections show on a phone (an App 640px wide or less):
|
|
10
|
+
* `list` a grouped list that pushes each section as a page, `segment` a
|
|
11
|
+
* full-width SegmentControl, `strip` the scrolling strip (inside a pushed page
|
|
12
|
+
* or a sheet). `auto`: a list for five or more sections or a `fill` settings
|
|
13
|
+
* page, else a SegmentControl.
|
|
14
|
+
*/
|
|
15
|
+
export type SectionTabsPhoneLayout = 'auto' | 'list' | 'segment' | 'strip';
|
|
6
16
|
type __VLS_Props = {
|
|
7
17
|
ariaLabel?: string;
|
|
8
18
|
modelValue: string;
|
|
@@ -15,19 +25,27 @@ type __VLS_Props = {
|
|
|
15
25
|
fill?: boolean;
|
|
16
26
|
/** Mount all supplied item panels and hide inactive ones, preserving local drafts. */
|
|
17
27
|
keepMounted?: boolean;
|
|
28
|
+
/** How the sections show on a phone; see SectionTabsPhoneLayout. */
|
|
29
|
+
phone?: SectionTabsPhoneLayout;
|
|
30
|
+
/** On a phone's section list, whether the selected section is pushed (`v-model:pushed`). */
|
|
31
|
+
pushed?: boolean;
|
|
18
32
|
};
|
|
19
|
-
declare var
|
|
33
|
+
declare var __VLS_8: {}, __VLS_35: {}, __VLS_44: `panel-${string}`, __VLS_45: {}, __VLS_48: `panel-${string}`, __VLS_49: {};
|
|
20
34
|
type __VLS_Slots = {} & {
|
|
21
|
-
[K in NonNullable<typeof
|
|
35
|
+
[K in NonNullable<typeof __VLS_44>]?: (props: typeof __VLS_45) => any;
|
|
22
36
|
} & {
|
|
23
|
-
[K in NonNullable<typeof
|
|
37
|
+
[K in NonNullable<typeof __VLS_48>]?: (props: typeof __VLS_49) => any;
|
|
24
38
|
} & {
|
|
25
|
-
actions?: (props: typeof
|
|
39
|
+
actions?: (props: typeof __VLS_8) => any;
|
|
40
|
+
} & {
|
|
41
|
+
actions?: (props: typeof __VLS_35) => any;
|
|
26
42
|
};
|
|
27
43
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
28
44
|
"update:modelValue": (value: string) => any;
|
|
45
|
+
"update:pushed": (value: boolean) => any;
|
|
29
46
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
30
47
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
48
|
+
"onUpdate:pushed"?: ((value: boolean) => any) | undefined;
|
|
31
49
|
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
32
50
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
33
51
|
declare const _default: typeof __VLS_export;
|
|
@@ -60,10 +60,10 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
60
60
|
"onCheck-result"?: ((info: AboutVersionInfo | null) => any) | undefined;
|
|
61
61
|
"onCheck-error"?: ((error: unknown) => any) | undefined;
|
|
62
62
|
}>, {
|
|
63
|
+
open: boolean;
|
|
63
64
|
width: string;
|
|
64
65
|
version: string;
|
|
65
66
|
defaultOpen: boolean;
|
|
66
|
-
open: boolean;
|
|
67
67
|
tagline: string;
|
|
68
68
|
iconSrc: string;
|
|
69
69
|
beta: boolean;
|