@synopackageland/ui 0.20.5 → 0.20.7
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 +27 -3
- package/LICENSES/source-notices.md +110 -0
- package/README.md +1 -1
- package/dist/components/composite/file-picker/FilePicker.vue.d.ts +1 -0
- package/dist/components/composite/form/FormItem.vue.d.ts +1 -1
- package/dist/components/composite/record-panel/recordPanelWidth.d.ts +4 -25
- package/dist/components/primitives/context-menu/ContextMenu.vue.d.ts +2 -2
- package/dist/components/primitives/date-picker/DatePicker.vue.d.ts +1 -1
- package/dist/components/rich-text-editor/extensions.d.ts +2 -0
- package/dist/composables/collisionBoundary.d.ts +7 -1
- package/dist/composables/elementWidth.d.ts +8 -2
- package/dist/dnd/autoScroll.d.ts +3 -22
- package/dist/dnd/dragKit.d.ts +1 -1
- package/dist/grid/cells/number.d.ts +1 -1
- package/dist/grid/cells/types.d.ts +1 -1
- package/dist/grid/clipboard/tsv.d.ts +1 -2
- package/dist/grid/contracts.d.ts +1 -1
- package/dist/grid/focus/editor-style.d.ts +1 -1
- package/dist/grid/host/controller.d.ts +11 -11
- package/dist/grid/range/block.d.ts +1 -1
- package/dist/grid-core/auto-scroll.d.ts +7 -7
- package/dist/grid-core/column-resize.d.ts +1 -1
- package/dist/grid-core/config.d.ts +1 -1
- package/dist/grid-core/keys.d.ts +2 -2
- package/dist/grid-core/renderer/layout.d.ts +1 -1
- package/dist/grid-core/selection-controller.d.ts +2 -2
- package/dist/grid-core/theme.d.ts +5 -5
- package/dist/grid.js +13 -13
- package/dist/index.js +11215 -11172
- package/dist/interaction/ime.d.ts +3 -22
- package/dist/json-preview/preview.js +8655 -8622
- package/dist/lib/adaptiveLayout.d.ts +7 -0
- package/dist/lib/fieldWidth.d.ts +2 -2
- package/dist/reka-runtime.json +1 -1
- package/dist/rich-text.js +259 -255
- 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/layout-rules.md +1 -1
- package/docs/mobile-native.md +2 -2
- package/docs/ux-grid.md +6 -8
- package/package.json +1 -89
- package/LICENSES/ux-foundation.md +0 -83
- package/LICENSES/ux-grid-baserow.md +0 -35
- package/LICENSES/ux-grid-teable.md +0 -48
- package/docs/ux-foundation.md +0 -133
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.20.7 (2026-11-05)
|
|
4
|
+
|
|
5
|
+
- An `AppLayout` inside another one takes its first width measurement only after the containing layout has drawn its own measured layout, still before the first paint. Children mount before their parents, so a page's layout measured the shell's guessed layout and its aside slid once the shell settled
|
|
6
|
+
- Reduced motion and `data-ui-motion="off"` only shorten transitions a rule declares. An element no rule gives a `transition-property` now has none, instead of a 0.01ms transition of `all` that made a change such as a layout's padding land a frame late
|
|
7
|
+
- ContextMenu is placed at the pointer from its first position. Reka moved its anchor from the trigger to the pointer only after the menu mounted, so near an edge the first position beside the trigger left a few px of room, the menu shrank to it and then stayed narrow at the pointer (16px wide at the right edge of a 768px window)
|
|
8
|
+
- A stacked `FormItem` or `SettingsRow` (label over the control in a narrow row) lets an `md` or `lg` control fill the column instead of stopping at 320/480px; `xs`, `sm` and CSS lengths keep their cap, so a field in a phone bottom sheet has the same space on both sides
|
|
9
|
+
- In the mobile layout the `AppLayout` page scroller no longer reserves a scrollbar gutter, which pushed content off centre where scrollbars overlay
|
|
10
|
+
- A Tooltip or Popover whose trigger is a component no longer throws when it reads the floating padding from Reka's virtual anchor
|
|
11
|
+
- The DataGrid and DataTable phone list joins its two subtitle columns with a gap instead of a middle dot, and the sort summary reads "Name, ascending"
|
|
12
|
+
- The pressed tint follows the text colour under a dark app root instead of keeping the light step
|
|
13
|
+
- The DatePicker and Select phone sheets take their field size from `--ui-font-size-field`
|
|
14
|
+
|
|
15
|
+
## 0.20.6 (2026-11-05)
|
|
16
|
+
|
|
17
|
+
- Closed navigation drawer viewports let clicks reach the app in embedded windows and full pages; an open drawer keeps its dismissible backdrop
|
|
18
|
+
- Phone bars preserve short brand names when actions compete for space; action labels shrink first while menu targets stay usable
|
|
19
|
+
- Phone titles use the free bar width and stay centred only when they fit; short and multiword brand names remain readable without trailing actions
|
|
20
|
+
- Phone segment labels stay on one line with ellipsis; up to four segments share a zero flex basis, reserve count pills and keep notification dots inside the track
|
|
21
|
+
- Scoped preflight gives bare elements and pseudo-elements a zero-width border base inside the app, preserving explicit component borders and host styles
|
|
22
|
+
- Dialogs without a description explicitly opt out of `aria-describedby`; supplied descriptions remain linked to the dialog
|
|
23
|
+
- On a phone, a DatePicker with `editable` shows the calendar button and opens the calendar sheet; a typed text field would raise the keyboard under the sheet
|
|
24
|
+
- A compact RichTextEditor on a touch screen labels the keyboard's return key Send (`enterkeyhint="send"`) and sends with it, since a phone keyboard has no Ctrl+Enter; an open @ list still takes Enter to pick
|
|
25
|
+
- FilePicker shows a `dropzone` as the choose button on a touch screen, where nothing can be dragged onto it; its `description` stays as a line above the button
|
|
26
|
+
|
|
3
27
|
## 0.20.5 (2026-11-05)
|
|
4
28
|
|
|
5
29
|
- 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
|
|
@@ -27,12 +51,12 @@
|
|
|
27
51
|
- 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
52
|
- 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
53
|
- 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
|
|
31
|
-
- New `@synopackageland/ui/grid` entry: `GridHost`, a canvas grid
|
|
54
|
+
- 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
|
|
55
|
+
- New `@synopackageland/ui/grid` entry: `GridHost`, a canvas grid with cell renderers for every field kind, editing with IME-safe first keys, and a save-status store. Load it lazily
|
|
32
56
|
- Five new accessible labels (Checked, Not checked, Rating, Saving, Not saved) and `Restore {name}`, in all nine locales
|
|
33
57
|
- 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
58
|
- 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
|
|
59
|
+
- Third-party notices are in `LICENSES/source-notices.md`
|
|
36
60
|
- 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
61
|
|
|
38
62
|
## 0.20.3 (2026-11-04)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Source notices
|
|
2
|
+
|
|
3
|
+
A few source files in this package contain code under the MIT licence from
|
|
4
|
+
the projects below. Those files carry a one-line pointer to this page in their
|
|
5
|
+
header, and the built bundles open with a notice that points here as well. The
|
|
6
|
+
full copyright and permission notices are reproduced below.
|
|
7
|
+
|
|
8
|
+
No upstream name, logo or icon asset is shipped.
|
|
9
|
+
|
|
10
|
+
## Files in the main entry
|
|
11
|
+
|
|
12
|
+
| Source file in this package | Notice |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `src/interaction/ime.ts` | Teable |
|
|
15
|
+
| `src/interaction/gesture.ts` | Teable |
|
|
16
|
+
| `src/components/primitives/popover/overlay.ts` | Teable |
|
|
17
|
+
| `src/components/composite/record-panel/recordPanelWidth.ts` | Teable |
|
|
18
|
+
| `src/components/composite/record-panel/RecordPanel.vue` | Teable |
|
|
19
|
+
| `src/interaction/outside.ts` | Baserow |
|
|
20
|
+
| `src/dnd/dragKit.ts` | Baserow |
|
|
21
|
+
| `src/dnd/autoScroll.ts` | Baserow |
|
|
22
|
+
| `src/virtual/cardHeight.ts` | Baserow |
|
|
23
|
+
|
|
24
|
+
Every file under `src/grid-core/` and `src/grid/cells/` carries the same
|
|
25
|
+
notices in its header, and so does the grid bundle.
|
|
26
|
+
|
|
27
|
+
## Teable notice
|
|
28
|
+
|
|
29
|
+
Teable `packages/*` is MIT licensed.
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
MIT License
|
|
33
|
+
|
|
34
|
+
Copyright (c) 2023-2025 Teable, Inc.
|
|
35
|
+
|
|
36
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
37
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
38
|
+
in the Software without restriction, including without limitation the rights
|
|
39
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
40
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
41
|
+
furnished to do so, subject to the following conditions:
|
|
42
|
+
|
|
43
|
+
The above copyright notice and this permission notice shall be included in all
|
|
44
|
+
copies or substantial portions of the Software.
|
|
45
|
+
|
|
46
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
47
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
48
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
49
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
50
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
51
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
52
|
+
SOFTWARE.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Baserow notice
|
|
56
|
+
|
|
57
|
+
Baserow Open Source Edition (outside `premium/` and `enterprise/`) is MIT
|
|
58
|
+
(Expat) licensed.
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
MIT License
|
|
62
|
+
|
|
63
|
+
Copyright (c) 2019-present Baserow B.V.
|
|
64
|
+
|
|
65
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
66
|
+
software and associated documentation files (the "Software"), to deal in the Software
|
|
67
|
+
without restriction, including without limitation the rights to use, copy, modify,
|
|
68
|
+
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
69
|
+
permit persons to whom the Software is furnished to do so, subject to the following
|
|
70
|
+
conditions:
|
|
71
|
+
|
|
72
|
+
The above copyright notice and this permission notice shall be included in all copies
|
|
73
|
+
or substantial portions of the Software.
|
|
74
|
+
|
|
75
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
76
|
+
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
77
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
78
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
79
|
+
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
80
|
+
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Tailwind CSS palette
|
|
84
|
+
|
|
85
|
+
The grid's default colours come from the Tailwind CSS palette, MIT licensed,
|
|
86
|
+
Copyright (c) Tailwind Labs, Inc.
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
MIT License
|
|
90
|
+
|
|
91
|
+
Copyright (c) Tailwind Labs, Inc.
|
|
92
|
+
|
|
93
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
94
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
95
|
+
in the Software without restriction, including without limitation the rights
|
|
96
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
97
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
98
|
+
furnished to do so, subject to the following conditions:
|
|
99
|
+
|
|
100
|
+
The above copyright notice and this permission notice shall be included in all
|
|
101
|
+
copies or substantial portions of the Software.
|
|
102
|
+
|
|
103
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
104
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
105
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
106
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
107
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
108
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
109
|
+
SOFTWARE.
|
|
110
|
+
```
|
package/README.md
CHANGED
|
@@ -549,7 +549,7 @@ DSM-style application building blocks:
|
|
|
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
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
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 (
|
|
552
|
+
- Interaction core, drag kit and motion helpers for app views (phone and touch rules in [docs/mobile-native.md](docs/mobile-native.md)); the canvas grid is the separate `@synopackageland/ui/grid` entry
|
|
553
553
|
|
|
554
554
|
`Tabs` and `SectionTabs` move a raised selection notch in 120ms. Selected labels
|
|
555
555
|
are blue; main labels are bold 14px and section labels bold 13px. `Tabs` fades its
|
|
@@ -14,6 +14,7 @@ type __VLS_Props = {
|
|
|
14
14
|
maxSize?: number;
|
|
15
15
|
directory?: boolean;
|
|
16
16
|
showList?: boolean;
|
|
17
|
+
/** `dropzone` shows as `compact` on a touch screen, where nothing can be dragged onto it. */
|
|
17
18
|
variant?: 'dropzone' | 'compact';
|
|
18
19
|
/** Takes files pasted while the picker has focus, and adds a Paste button where the browser can read the clipboard (an iPhone has no keyboard to paste with). */
|
|
19
20
|
paste?: boolean;
|
|
@@ -50,7 +50,7 @@ type __VLS_Props = {
|
|
|
50
50
|
direction?: FormDirection;
|
|
51
51
|
/** Width of the label column in the horizontal layout. */
|
|
52
52
|
labelWidth?: string;
|
|
53
|
-
/** Maximum control width; inherits the form's `fieldWidth` (`'md'` by default). */
|
|
53
|
+
/** Maximum control width; inherits the form's `fieldWidth` (`'md'` by default). In a narrow row that stacks its label, `'md'` and `'lg'` fill the column. */
|
|
54
54
|
fieldWidth?: FieldWidth;
|
|
55
55
|
/** Value restored by `resetFields()`; also the initial dirty baseline. */
|
|
56
56
|
initialValue?: unknown;
|
|
@@ -1,30 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
|
-
* The width rule
|
|
4
|
-
* panel, the secondary column added on top and capped at the host
|
|
5
|
-
* from Teable's record side panel
|
|
6
|
-
* (packages/sdk/src/components/expand-record/Panel.tsx:20-26, 83-88 at
|
|
7
|
-
* f8be01fad).
|
|
3
|
+
* The width rule: 560 default, 320 minimum, 240 of the view kept beside the
|
|
4
|
+
* panel, the secondary column added on top and capped at the host.
|
|
8
5
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
12
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
13
|
-
* in the Software without restriction, including without limitation the rights
|
|
14
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
15
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
16
|
-
* furnished to do so, subject to the following conditions:
|
|
17
|
-
*
|
|
18
|
-
* The above copyright notice and this permission notice shall be included in all
|
|
19
|
-
* copies or substantial portions of the Software.
|
|
20
|
-
*
|
|
21
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
24
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
25
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
26
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
27
|
-
* SOFTWARE.
|
|
6
|
+
* Licence: LICENSES/source-notices.md
|
|
28
7
|
*/
|
|
29
8
|
export declare const RECORD_PANEL_DEFAULT_WIDTH = 560;
|
|
30
9
|
export declare const RECORD_PANEL_MIN_WIDTH = 320;
|
|
@@ -32,7 +11,7 @@ export declare const RECORD_PANEL_MIN_WIDTH = 320;
|
|
|
32
11
|
export declare const RECORD_PANEL_MIN_MAIN_WIDTH = 240;
|
|
33
12
|
/** The comments (or other secondary) column, added on the panel's far side. */
|
|
34
13
|
export declare const RECORD_PANEL_SECONDARY_WIDTH = 320;
|
|
35
|
-
/** Body padding switches from 24 to 48 at this body width
|
|
14
|
+
/** Body padding switches from 24 to 48 at this body width. */
|
|
36
15
|
export declare const RECORD_PANEL_WIDE_BODY = 640;
|
|
37
16
|
export interface RecordPanelBounds {
|
|
38
17
|
minWidth: number;
|
|
@@ -5,9 +5,9 @@ type __VLS_Props = {
|
|
|
5
5
|
/** How long a touch press is held before the menu opens, in ms; Reka's 700 when unset. */
|
|
6
6
|
pressOpenDelay?: number;
|
|
7
7
|
};
|
|
8
|
-
declare var
|
|
8
|
+
declare var __VLS_20: {};
|
|
9
9
|
type __VLS_Slots = {} & {
|
|
10
|
-
default?: (props: typeof
|
|
10
|
+
default?: (props: typeof __VLS_20) => any;
|
|
11
11
|
};
|
|
12
12
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
13
13
|
select: (key: string) => any;
|
|
@@ -25,7 +25,7 @@ type __VLS_Props = {
|
|
|
25
25
|
ariaLabel?: string;
|
|
26
26
|
/** Additive: show a time picker under the calendar and emit a local date-time string. */
|
|
27
27
|
showTime?: boolean;
|
|
28
|
-
/** Additive: type the date directly instead of picking it. Cannot be combined with `showTime`. */
|
|
28
|
+
/** Additive: type the date directly instead of picking it. Cannot be combined with `showTime`. On a phone the calendar sheet is used instead. */
|
|
29
29
|
editable?: boolean;
|
|
30
30
|
/** Additive: an empty text field clears the value instead of reporting `required`. */
|
|
31
31
|
allowBlank?: boolean;
|
|
@@ -23,6 +23,8 @@ export type ExtensionOptions = {
|
|
|
23
23
|
mention: Omit<SuggestionOptions<MentionCandidate>, 'editor' | 'char'>;
|
|
24
24
|
/** Ctrl+Enter or Cmd+Enter; returns whether it was taken. Never while an input method composes. */
|
|
25
25
|
submit?: () => boolean;
|
|
26
|
+
/** Plain Enter, before it breaks the line; returns whether it was taken (a compact box on a touch screen sends). Never while an input method composes. */
|
|
27
|
+
enter?: () => boolean;
|
|
26
28
|
/** Ctrl+K or Cmd+K. */
|
|
27
29
|
link: () => boolean;
|
|
28
30
|
escape: () => boolean;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The element behind an anchor. Reka hands a virtual element (a bare rect that
|
|
3
|
+
* carries its context element) whenever the trigger is a component rather than
|
|
4
|
+
* a DOM node, so resolve that first and ignore anything without `closest`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function anchorElement(anchor: Element | null | undefined): Element | null;
|
|
1
7
|
/** Where a popup opened from `anchor` must stay: the app window it opens from,
|
|
2
8
|
* or the whole viewport from a dialog floating over the DSM desktop. Reka flips
|
|
3
9
|
* and shrinks the popup to fit this boundary while it is open. */
|
|
4
|
-
export declare function useCollisionBoundary(anchor: () =>
|
|
10
|
+
export declare function useCollisionBoundary(anchor: () => Element | null | undefined, open: () => boolean): import('vue').ComputedRef<HTMLElement | HTMLElement[]>;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
2
|
/** Observe the component's container, including DSM window resizes that do not
|
|
3
|
-
* resize the document viewport. Zero is unknown (e.g. hidden tab or SSR).
|
|
4
|
-
|
|
3
|
+
* resize the document viewport. Zero is unknown (e.g. hidden tab or SSR).
|
|
4
|
+
* `after` holds the first measurement until it is true (a containing layout
|
|
5
|
+
* that has not drawn its own measured layout yet); `onMeasured` runs once the
|
|
6
|
+
* first measurement has been drawn. */
|
|
7
|
+
export declare function useElementWidth(element: Readonly<Ref<HTMLElement | null | undefined>>, options?: {
|
|
8
|
+
after?: Readonly<Ref<boolean>>;
|
|
9
|
+
onMeasured?: () => void;
|
|
10
|
+
}): Ref<number, number>;
|
package/dist/dnd/autoScroll.d.ts
CHANGED
|
@@ -1,28 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* The edge-zone percentage and the linear speed ramp (full speed at and beyond
|
|
4
|
-
* the edge)
|
|
5
|
-
* (web-frontend/modules/core/directives/autoScroll.js:30-99 at 98f727dc2),
|
|
6
|
-
* rewritten as a requestAnimationFrame loop with a minimum zone and both axes.
|
|
4
|
+
* the edge), as a requestAnimationFrame loop with a minimum zone and both axes.
|
|
7
5
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
11
|
-
* software and associated documentation files (the "Software"), to deal in the Software
|
|
12
|
-
* without restriction, including without limitation the rights to use, copy, modify,
|
|
13
|
-
* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
14
|
-
* permit persons to whom the Software is furnished to do so, subject to the following
|
|
15
|
-
* conditions:
|
|
16
|
-
*
|
|
17
|
-
* The above copyright notice and this permission notice shall be included in all copies
|
|
18
|
-
* or substantial portions of the Software.
|
|
19
|
-
*
|
|
20
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
21
|
-
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
22
|
-
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
23
|
-
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
24
|
-
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
25
|
-
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
6
|
+
* Licence: LICENSES/source-notices.md
|
|
26
7
|
*/
|
|
27
8
|
/** Share of the scroll box, per edge, that scrolls (interaction-spec §5.2). */
|
|
28
9
|
export declare const AUTO_SCROLL_ZONE_PERCENT = 15;
|
|
@@ -47,7 +28,7 @@ export interface AutoScroll {
|
|
|
47
28
|
* Speed for a pointer `offset` px from the box start on an axis `size` long:
|
|
48
29
|
* negative toward the start, positive toward the end, 0 outside both zones.
|
|
49
30
|
* Linear from 0 at the inner zone border to `max` at the edge; a pointer past
|
|
50
|
-
* the edge keeps full speed (
|
|
31
|
+
* the edge keeps full speed (the distance is not clamped to 0).
|
|
51
32
|
*/
|
|
52
33
|
export declare function edgeSpeed(offset: number, size: number, options?: Pick<AutoScrollOptions, 'padding' | 'minZone' | 'maxSpeed'>): number;
|
|
53
34
|
/**
|
package/dist/dnd/dragKit.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export type DragKey = string | number;
|
|
|
5
5
|
export declare const TOUCH_HOLD_MS = 250;
|
|
6
6
|
/** Movement before the hold ends that hands the touch back to native scrolling. */
|
|
7
7
|
export declare const TOUCH_HOLD_TOLERANCE_PX = 6;
|
|
8
|
-
/** After a sibling moves, the target holds still this long (
|
|
8
|
+
/** After a sibling moves, the target holds still this long (100 ms). */
|
|
9
9
|
export declare const SWAP_LOCK_MS = 100;
|
|
10
10
|
export declare const DND_LANE_ATTR = "data-dnd-lane";
|
|
11
11
|
export declare const DND_KEY_ATTR = "data-dnd-key";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GridNumberFormat } from './types';
|
|
2
2
|
/** 12.5 → "12.50"; currency "$1,234.50"; percent 0.125 → "12.50%". Empty for null. */
|
|
3
3
|
export declare const formatGridNumber: (value: number | null | undefined, format?: GridNumberFormat, locale?: string) => string;
|
|
4
|
-
/**
|
|
4
|
+
/** Lenient parse: keeps digits, `.`, `+`, `-`; "12.5abc" → 12.5, "50%" → 0.5. Null when nothing parses. */
|
|
5
5
|
export declare const parseGridNumber: (value: string | null | undefined, format?: GridNumberFormat) => number | null;
|
|
@@ -24,7 +24,7 @@ export interface GridAttachment {
|
|
|
24
24
|
/** Image thumbnail; files without one draw an extension badge. */
|
|
25
25
|
thumbnailUrl?: string;
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/** Number formatting (MIT, see LICENSES/source-notices.md). */
|
|
28
28
|
export type GridNumberFormat = {
|
|
29
29
|
type: 'decimal';
|
|
30
30
|
precision?: number;
|
|
@@ -8,7 +8,6 @@ export declare const toTsv: (rows: readonly (readonly string[])[]) => string;
|
|
|
8
8
|
export declare const parseTsv: (text: string) => string[][];
|
|
9
9
|
/**
|
|
10
10
|
* An HTML table for rich targets (Sheets, Excel, Docs), or undefined for a
|
|
11
|
-
* single cell
|
|
12
|
-
* one cell pastes better as plain text.
|
|
11
|
+
* single cell (MIT): one cell pastes better as plain text.
|
|
13
12
|
*/
|
|
14
13
|
export declare const toHtmlTable: (rows: readonly (readonly string[])[]) => string | undefined;
|
package/dist/grid/contracts.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export interface GridColumn {
|
|
|
11
11
|
name: string;
|
|
12
12
|
/** Width in CSS px. Default 150. */
|
|
13
13
|
width?: number;
|
|
14
|
-
/** Smallest width a resize reaches. Default 100
|
|
14
|
+
/** Smallest width a resize reaches. Default 100. */
|
|
15
15
|
minWidth?: number;
|
|
16
16
|
/** No edit requests for this column (the grid can still select and copy it). */
|
|
17
17
|
readonly?: boolean;
|
|
@@ -2,7 +2,7 @@ import { IGridTheme } from '../../grid-core/theme';
|
|
|
2
2
|
import { GridEditorKind } from '../contracts';
|
|
3
3
|
/** Ring width outside the cell box while editing. */
|
|
4
4
|
export declare const EDITOR_RING_PX = 2;
|
|
5
|
-
/** Inner radius; with the 2 px ring the outer corner is
|
|
5
|
+
/** Inner radius; with the 2 px ring the outer corner is 6 px. */
|
|
6
6
|
export declare const EDITOR_RADIUS_PX = 4;
|
|
7
7
|
/** Line height of wrapped text in the long-text editor and the read-only view. */
|
|
8
8
|
export declare const WRAP_LINE_HEIGHT_PX = 20;
|
|
@@ -25,7 +25,7 @@ export interface GridHostConfig {
|
|
|
25
25
|
fillable?: boolean;
|
|
26
26
|
/**
|
|
27
27
|
* Touch UI (a coarse primary pointer): no fill handle and no column resize
|
|
28
|
-
* handle
|
|
28
|
+
* handle. Touch gestures go through `tap` and
|
|
29
29
|
* `longPress`, never through the pointer methods. At a grid width of
|
|
30
30
|
* `PHONE_MAX_WIDTH` or less it is the phone layout (see `isPhone`).
|
|
31
31
|
*/
|
|
@@ -64,9 +64,9 @@ export type GridKeyInput = Pick<KeyboardEvent, 'key' | 'keyCode' | 'shiftKey' |
|
|
|
64
64
|
export type GridKeyResult = 'prevent' | 'pass' | 'ignore';
|
|
65
65
|
/** Width of the row header: the row number, plus 24 px per row control beyond the first. */
|
|
66
66
|
export declare const rowHeaderWidth: (controls: readonly GridRowControl[]) => number;
|
|
67
|
-
/** Grid widths up to this are a phone on touch: a tap opens the record
|
|
67
|
+
/** Grid widths up to this are a phone on touch: a tap opens the record. */
|
|
68
68
|
export declare const PHONE_MAX_WIDTH = 640;
|
|
69
|
-
/** The phone's row header: row numbers only
|
|
69
|
+
/** The phone's row header: row numbers only. */
|
|
70
70
|
export declare const PHONE_ROW_HEADER_WIDTH = 50;
|
|
71
71
|
export declare class GridHostController {
|
|
72
72
|
coord: CoordinateManager;
|
|
@@ -101,7 +101,7 @@ export declare class GridHostController {
|
|
|
101
101
|
/**
|
|
102
102
|
* Touch on a grid no wider than 640 px. There a tap opens the record (the
|
|
103
103
|
* cell and its editor cannot fit beside the keyboard), the row header shows
|
|
104
|
-
* numbers only and no column is frozen
|
|
104
|
+
* numbers only and no column is frozen.
|
|
105
105
|
*/
|
|
106
106
|
get isPhone(): boolean;
|
|
107
107
|
private visibleRowControls;
|
|
@@ -110,7 +110,7 @@ export declare class GridHostController {
|
|
|
110
110
|
private applyColumns;
|
|
111
111
|
/**
|
|
112
112
|
* Frozen columns that fit: the scrolling part keeps at least 240 px, so on a
|
|
113
|
-
* phone a wide first column stops freezing
|
|
113
|
+
* phone a wide first column stops freezing.
|
|
114
114
|
*/
|
|
115
115
|
private freezeCount;
|
|
116
116
|
configure(next: GridHostConfig): void;
|
|
@@ -140,11 +140,11 @@ export declare class GridHostController {
|
|
|
140
140
|
}): void;
|
|
141
141
|
private selectCell;
|
|
142
142
|
getCellRect(cell: GridCell): GridRect | null;
|
|
143
|
-
/** Minimal scroll that shows the cell with
|
|
143
|
+
/** Minimal scroll that shows the cell with a 16 px buffer; instant. */
|
|
144
144
|
scrollToCell(cell: GridCell): void;
|
|
145
145
|
private regionContext;
|
|
146
146
|
private get isFillEnabled();
|
|
147
|
-
/** No resize handle on touch: a 5 px edge is no finger target
|
|
147
|
+
/** No resize handle on touch: a 5 px edge is no finger target. */
|
|
148
148
|
private get isResizeEnabled();
|
|
149
149
|
/** True while the fill handle is dragged. */
|
|
150
150
|
get isFilling(): boolean;
|
|
@@ -183,11 +183,11 @@ export declare class GridHostController {
|
|
|
183
183
|
* The tapped row or header keeps a pressed tint until `clearTapFeedback`.
|
|
184
184
|
*
|
|
185
185
|
* - A cell on a phone (`isPhone`): selects it and opens the record
|
|
186
|
-
* (`rowExpand` with the column)
|
|
186
|
+
* (`rowExpand` with the column).
|
|
187
187
|
* - A cell on a wider touch screen: the first tap selects it, a second tap
|
|
188
188
|
* on the selected cell asks for an edit (`tap` trigger).
|
|
189
|
-
* - A header with a menu opens the menu
|
|
190
|
-
*
|
|
189
|
+
* - A header with a menu opens the menu (the 16 px chevron is no finger
|
|
190
|
+
* target); without one it selects the column.
|
|
191
191
|
* - The row header is one target: on a phone it opens the record; wider, it
|
|
192
192
|
* expands the row with the `expand` control, else toggles the checkbox.
|
|
193
193
|
*
|
|
@@ -201,7 +201,7 @@ export declare class GridHostController {
|
|
|
201
201
|
private requestEdit;
|
|
202
202
|
/**
|
|
203
203
|
* After an edit of `cell` commits: Enter moves down, Tab right, Shift+Tab
|
|
204
|
-
* left
|
|
204
|
+
* left, from the edited cell.
|
|
205
205
|
*/
|
|
206
206
|
moveAfterEdit(cell: GridCell, move: 'down' | 'right' | 'left'): void;
|
|
207
207
|
/** An input method started composing on the selected cell. */
|
|
@@ -10,7 +10,7 @@ export interface GridCellRange {
|
|
|
10
10
|
* The cells a selection covers, as ordered row and column indexes. A cell
|
|
11
11
|
* selection is one rectangle; a row selection covers every column of its
|
|
12
12
|
* rows; a column selection covers every row of its columns. Several runs
|
|
13
|
-
* (Cmd+click on headers) are joined in index order
|
|
13
|
+
* (Cmd+click on headers) are joined in index order.
|
|
14
14
|
*/
|
|
15
15
|
export interface GridCellBlock {
|
|
16
16
|
rows: readonly number[];
|
|
@@ -19,16 +19,16 @@ export interface IAutoScrollBounds {
|
|
|
19
19
|
* Scroll direction for a pointer at `position` (relative to the grid's
|
|
20
20
|
* top-left). Right/bottom: within 30 px of the edge or beyond it. Left/top:
|
|
21
21
|
* within 30 px past the frozen columns / header, over the row header or header,
|
|
22
|
-
* or beyond the grid.
|
|
23
|
-
* leaves the grid on the left or top
|
|
22
|
+
* or beyond the grid. It keeps scrolling when the pointer passes over the
|
|
23
|
+
* header or leaves the grid on the left or top.
|
|
24
24
|
* `dragType` limits a row drag to y and a column drag to x.
|
|
25
25
|
*/
|
|
26
26
|
export declare const getAutoScrollDirection: (position: IPosition, bounds: IAutoScrollBounds, dragType?: DragRegionType, threshold?: number) => [IScrollDirection, IScrollDirection];
|
|
27
27
|
/**
|
|
28
|
-
* One frame of
|
|
29
|
-
* `px = speed
|
|
30
|
-
*
|
|
31
|
-
*
|
|
28
|
+
* One frame of the ramp: `speed = min(1, speed + dt/1200)`, then
|
|
29
|
+
* `px = speed * dt * 2`. With `carry` the fractional part moves to the next
|
|
30
|
+
* frame instead of being floored, so the distance does not depend on the
|
|
31
|
+
* refresh rate.
|
|
32
32
|
*/
|
|
33
33
|
export declare const autoScrollStep: (speed: number, dt: number, carry?: number) => {
|
|
34
34
|
speed: number;
|
|
@@ -40,7 +40,7 @@ export interface IAutoScrollerOptions {
|
|
|
40
40
|
scrollBy: (deltaX: number, deltaY: number) => void;
|
|
41
41
|
/** After each scroll; re-derive the selection head from the last pointer here. */
|
|
42
42
|
onTick?: (deltaX: number, deltaY: number) => void;
|
|
43
|
-
/** Default true. False floors each frame
|
|
43
|
+
/** Default true. False floors each frame, the classic ramp. */
|
|
44
44
|
carryFraction?: boolean;
|
|
45
45
|
requestFrame?: (callback: (time: number) => void) => number;
|
|
46
46
|
cancelFrame?: (id: number) => void;
|
|
@@ -8,7 +8,7 @@ export declare const resolveResizeColumnIndex: (coordInstance: CoordinateManager
|
|
|
8
8
|
export interface IColumnResizeControllerOptions {
|
|
9
9
|
coordInstance: () => CoordinateManager;
|
|
10
10
|
scrollState: () => Pick<IScrollState, 'scrollLeft'>;
|
|
11
|
-
/** Minimum width, per column if a function. Default 100 px
|
|
11
|
+
/** Minimum width, per column if a function. Default 100 px. */
|
|
12
12
|
minWidth?: number | ((columnIndex: number) => number);
|
|
13
13
|
/** Every width change while dragging, and the restored width on cancel. */
|
|
14
14
|
onResize?: (width: number, columnIndex: number) => void;
|
|
@@ -15,7 +15,7 @@ export declare const GRID_DEFAULT: {
|
|
|
15
15
|
readonly columnResizeHandlerPaddingTop: 4;
|
|
16
16
|
readonly columnFreezeHandlerWidth: 8;
|
|
17
17
|
readonly columnFreezeHandlerHeight: 30;
|
|
18
|
-
/**
|
|
18
|
+
/** The minimum while resizing. */
|
|
19
19
|
readonly columnMinWidth: 100;
|
|
20
20
|
readonly cellHorizontalPadding: 8;
|
|
21
21
|
readonly cellVerticalPaddingXS: 3;
|
package/dist/grid-core/keys.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** keyCode values
|
|
1
|
+
/** keyCode values, by key name. */
|
|
2
2
|
export declare const KeyCode: {
|
|
3
3
|
readonly Space: 32;
|
|
4
4
|
readonly Digit0: 48;
|
|
@@ -20,7 +20,7 @@ export declare const KeyCode: {
|
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* The first-key test and the composition guard are shared with editors outside
|
|
23
|
-
* the grid, so they live in the interaction core
|
|
23
|
+
* the grid, so they live in the interaction core.
|
|
24
24
|
* Ask `guard.ownsKey(event)` before handling Enter, Esc or Tab; ask
|
|
25
25
|
* `isComposingKey(event)` before arrows.
|
|
26
26
|
*/
|
|
@@ -92,7 +92,7 @@ export declare const calcCells: (p: IResolvedProps, region: IRenderRegion) => {
|
|
|
92
92
|
export declare const drawRowHeader: (ctx: CanvasRenderingContext2D, props: IRowHeaderProps, p: IResolvedProps) => void;
|
|
93
93
|
/** Backgrounds and grid lines on the main canvas; cell content on the cache canvas when `shouldRerender`. */
|
|
94
94
|
export declare const drawCells: (mainCtx: CanvasRenderingContext2D, cacheCtx: CanvasRenderingContext2D, p: IResolvedProps) => void;
|
|
95
|
-
/** The active cell: cell background, a 1 px neutral ring with radius 2
|
|
95
|
+
/** The active cell: cell background, a 1 px neutral ring with radius 2, and its content on top. */
|
|
96
96
|
export declare const drawActiveCell: (ctx: CanvasRenderingContext2D, p: IResolvedProps) => void;
|
|
97
97
|
/** While dragging the fill handle: a tinted box over the target rows only, above or below the range. */
|
|
98
98
|
export declare const drawFillPreview: (ctx: CanvasRenderingContext2D, p: IResolvedProps) => void;
|
|
@@ -23,8 +23,8 @@ export interface ISelectionControllerOptions {
|
|
|
23
23
|
onRowRangeSelected?: (ranges: IRange[]) => void;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Pointer rules for the selection, as a plain state holder
|
|
27
|
-
*
|
|
26
|
+
* Pointer rules for the selection, as a plain state holder. Selection starts
|
|
27
|
+
* on pointerdown on a cell;
|
|
28
28
|
* header, checkbox and corner selection happen on click.
|
|
29
29
|
*
|
|
30
30
|
* - Shift+click on a cell keeps the anchor and moves the head; Cmd+click is a plain click.
|
|
@@ -19,7 +19,7 @@ export interface IGridTheme {
|
|
|
19
19
|
cellBgSelected: string;
|
|
20
20
|
cellBgLoading: string;
|
|
21
21
|
cellLineColor: string;
|
|
22
|
-
/** The active cell's ring: 1 px, neutral
|
|
22
|
+
/** The active cell's ring: 1 px, neutral. */
|
|
23
23
|
cellLineColorActived: string;
|
|
24
24
|
cellTextColor: string;
|
|
25
25
|
cellTextColorHighlight: string;
|
|
@@ -49,12 +49,12 @@ export interface IGridTheme {
|
|
|
49
49
|
export type IGridThemeColorKey = {
|
|
50
50
|
[K in keyof IGridTheme]: IGridTheme[K] extends string ? K : never;
|
|
51
51
|
}[keyof IGridTheme];
|
|
52
|
-
/**
|
|
53
|
-
export declare const
|
|
52
|
+
/** Default light theme values. */
|
|
53
|
+
export declare const defaultGridTheme: IGridTheme;
|
|
54
54
|
/**
|
|
55
55
|
* Which UI library token feeds each theme colour. Task 08 owns the token
|
|
56
56
|
* values; this only names them. The active-cell ring uses the text colour for a
|
|
57
|
-
* 1 px neutral ring
|
|
57
|
+
* 1 px neutral ring.
|
|
58
58
|
*/
|
|
59
59
|
export declare const GRID_THEME_TOKENS: Record<Exclude<IGridThemeColorKey, 'themeKey' | 'fontFamily'>, string>;
|
|
60
60
|
export declare const GRID_FONT_TOKENS: {
|
|
@@ -66,7 +66,7 @@ export declare const GRID_FONT_TOKENS: {
|
|
|
66
66
|
export type IGridTokenSource = (token: string) => string | undefined;
|
|
67
67
|
/**
|
|
68
68
|
* Builds the theme from token values. Colours come back as the source resolved
|
|
69
|
-
* them; missing tokens keep
|
|
69
|
+
* them; missing tokens keep the default value.
|
|
70
70
|
*/
|
|
71
71
|
export declare const createGridTheme: (source: IGridTokenSource, overrides?: Partial<IGridTheme>) => IGridTheme;
|
|
72
72
|
/**
|