@columenlabs/lumen-ui 0.0.0-stage → 0.2.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/LICENSE +21 -0
- package/NOTICE +12 -0
- package/README.md +4 -2
- package/dist/add-column.d.ts +23 -0
- package/dist/add-column.js +62 -0
- package/dist/api-fetch.d.ts +9 -0
- package/dist/api-fetch.js +60 -0
- package/dist/app-switcher.d.ts +21 -0
- package/dist/app-switcher.js +12 -0
- package/dist/app-views.d.ts +18 -0
- package/dist/app-views.js +41 -0
- package/dist/assistant-context.d.ts +72 -0
- package/dist/assistant-context.js +30 -0
- package/dist/assistant-panel.d.ts +58 -0
- package/dist/assistant-panel.js +244 -0
- package/dist/assistant-screen.d.ts +124 -0
- package/dist/assistant-screen.js +252 -0
- package/dist/card-switch.d.ts +16 -0
- package/dist/card-switch.js +16 -0
- package/dist/color-dot.d.ts +14 -0
- package/dist/color-dot.js +19 -0
- package/dist/confirm.d.ts +18 -0
- package/dist/confirm.js +5 -0
- package/dist/connections.d.ts +45 -0
- package/dist/connections.js +275 -0
- package/dist/coverage-calendar-map.d.ts +27 -0
- package/dist/coverage-calendar-map.js +84 -0
- package/dist/coverage-cells.d.ts +55 -0
- package/dist/coverage-cells.js +85 -0
- package/dist/coverage-map.d.ts +112 -0
- package/dist/coverage-map.js +428 -0
- package/dist/details-table.d.ts +20 -0
- package/dist/details-table.js +13 -0
- package/dist/drawer-section.d.ts +27 -0
- package/dist/drawer-section.js +23 -0
- package/dist/floating-head.d.ts +2 -0
- package/dist/floating-head.js +57 -0
- package/dist/fold.d.ts +16 -0
- package/dist/fold.js +70 -0
- package/dist/form-issues.d.ts +32 -0
- package/dist/form-issues.js +60 -0
- package/dist/formula-input.d.ts +17 -0
- package/dist/formula-input.js +104 -0
- package/dist/frame-script.d.ts +7 -0
- package/dist/frame-script.js +103 -0
- package/dist/freshness.d.ts +24 -0
- package/dist/freshness.js +99 -0
- package/dist/group-button.d.ts +33 -0
- package/dist/group-button.js +67 -0
- package/dist/growth-chart.d.ts +77 -0
- package/dist/growth-chart.js +195 -0
- package/dist/hooks/use-keyboard-fit.d.ts +15 -0
- package/dist/hooks/use-keyboard-fit.js +29 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-mobile.js +15 -0
- package/dist/icon-button.d.ts +21 -0
- package/dist/icon-button.js +22 -0
- package/dist/icon-picker.d.ts +14 -0
- package/dist/icon-picker.js +36 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.js +90 -0
- package/dist/integrations.d.ts +57 -0
- package/dist/integrations.js +73 -0
- package/dist/joins.d.ts +128 -0
- package/dist/joins.js +767 -0
- package/dist/kit-config.d.ts +13 -0
- package/dist/kit-config.js +15 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +5 -0
- package/dist/lumen-boundary.d.ts +7 -0
- package/dist/lumen-boundary.js +10 -0
- package/dist/lumen-code-editor-impl.d.ts +2 -0
- package/dist/lumen-code-editor-impl.js +16 -0
- package/dist/lumen-code-editor.d.ts +11 -0
- package/dist/lumen-code-editor.js +11 -0
- package/dist/lumen-code.d.ts +22 -0
- package/dist/lumen-code.js +75 -0
- package/dist/lumen-drawer.d.ts +30 -0
- package/dist/lumen-drawer.js +27 -0
- package/dist/lumen-echart.d.ts +58 -0
- package/dist/lumen-echart.js +129 -0
- package/dist/lumen-filter.d.ts +75 -0
- package/dist/lumen-filter.js +546 -0
- package/dist/lumen-finder.d.ts +62 -0
- package/dist/lumen-finder.js +275 -0
- package/dist/lumen-form.d.ts +34 -0
- package/dist/lumen-form.js +81 -0
- package/dist/lumen-geo-map.d.ts +9 -0
- package/dist/lumen-geo-map.js +135 -0
- package/dist/lumen-grid.d.ts +49 -0
- package/dist/lumen-grid.js +203 -0
- package/dist/lumen-layout.d.ts +150 -0
- package/dist/lumen-layout.js +658 -0
- package/dist/lumen-links.d.ts +96 -0
- package/dist/lumen-links.js +213 -0
- package/dist/lumen-page-state.d.ts +20 -0
- package/dist/lumen-page-state.js +15 -0
- package/dist/lumen-selector.d.ts +139 -0
- package/dist/lumen-selector.js +308 -0
- package/dist/lumen-source.d.ts +137 -0
- package/dist/lumen-source.js +327 -0
- package/dist/lumen-tab-drawer.d.ts +27 -0
- package/dist/lumen-tab-drawer.js +26 -0
- package/dist/lumen-tabs.d.ts +21 -0
- package/dist/lumen-tabs.js +6 -0
- package/dist/lumen-toast.d.ts +11 -0
- package/dist/lumen-toast.js +16 -0
- package/dist/lumen-trend.d.ts +18 -0
- package/dist/lumen-trend.js +157 -0
- package/dist/lumen-view-card.d.ts +35 -0
- package/dist/lumen-view-card.js +50 -0
- package/dist/lumen-view.d.ts +172 -0
- package/dist/lumen-view.js +645 -0
- package/dist/lumen-widget-charts.d.ts +57 -0
- package/dist/lumen-widget-charts.js +69 -0
- package/dist/lumen-widget.d.ts +614 -0
- package/dist/lumen-widget.js +594 -0
- package/dist/market/compare-chart.d.ts +34 -0
- package/dist/market/compare-chart.js +292 -0
- package/dist/market/indicator-picker.d.ts +29 -0
- package/dist/market/indicator-picker.js +125 -0
- package/dist/market/indicators.d.ts +63 -0
- package/dist/market/indicators.js +314 -0
- package/dist/market/live.d.ts +120 -0
- package/dist/market/live.js +444 -0
- package/dist/market/lumen-chart.d.ts +88 -0
- package/dist/market/lumen-chart.js +645 -0
- package/dist/market/market-widget.d.ts +45 -0
- package/dist/market/market-widget.js +346 -0
- package/dist/market/option-chain.d.ts +19 -0
- package/dist/market/option-chain.js +53 -0
- package/dist/market/price-chart.d.ts +128 -0
- package/dist/market/price-chart.js +619 -0
- package/dist/mcp-settings.d.ts +20 -0
- package/dist/mcp-settings.js +65 -0
- package/dist/nav.d.ts +77 -0
- package/dist/nav.js +73 -0
- package/dist/note-line.d.ts +13 -0
- package/dist/note-line.js +5 -0
- package/dist/notifications.d.ts +9 -0
- package/dist/notifications.js +166 -0
- package/dist/origin-legend.d.ts +14 -0
- package/dist/origin-legend.js +38 -0
- package/dist/overview.d.ts +84 -0
- package/dist/overview.js +105 -0
- package/dist/page-inputs.d.ts +14 -0
- package/dist/page-inputs.js +16 -0
- package/dist/page.d.ts +32 -0
- package/dist/page.js +45 -0
- package/dist/pager.d.ts +10 -0
- package/dist/pager.js +14 -0
- package/dist/prefs.d.ts +71 -0
- package/dist/prefs.js +126 -0
- package/dist/query-client.d.ts +7 -0
- package/dist/query-client.js +19 -0
- package/dist/refresh.d.ts +4 -0
- package/dist/refresh.js +19 -0
- package/dist/rename-field.d.ts +11 -0
- package/dist/rename-field.js +26 -0
- package/dist/reset-button.d.ts +9 -0
- package/dist/reset-button.js +10 -0
- package/dist/route-error.d.ts +42 -0
- package/dist/route-error.js +229 -0
- package/dist/schedules.d.ts +88 -0
- package/dist/schedules.js +221 -0
- package/dist/settings.d.ts +51 -0
- package/dist/settings.js +181 -0
- package/dist/shell.d.ts +99 -0
- package/dist/shell.js +137 -0
- package/dist/source-health.d.ts +12 -0
- package/dist/source-health.js +58 -0
- package/dist/spotlight.d.ts +23 -0
- package/dist/spotlight.js +138 -0
- package/dist/status-health.d.ts +16 -0
- package/dist/status-health.js +41 -0
- package/dist/status.d.ts +9 -0
- package/dist/status.js +12 -0
- package/dist/summary-cards.d.ts +56 -0
- package/dist/summary-cards.js +270 -0
- package/dist/symbol-sheet-context.d.ts +4 -0
- package/dist/symbol-sheet-context.js +5 -0
- package/dist/symbol-sheet.d.ts +9 -0
- package/dist/symbol-sheet.js +24 -0
- package/dist/tasks.d.ts +29 -0
- package/dist/tasks.js +278 -0
- package/dist/theme.css +606 -0
- package/dist/tile.d.ts +37 -0
- package/dist/tile.js +23 -0
- package/dist/ui/alert-dialog.d.ts +18 -0
- package/dist/ui/alert-dialog.js +41 -0
- package/dist/ui/alert.d.ts +10 -0
- package/dist/ui/alert.js +27 -0
- package/dist/ui/avatar.d.ts +11 -0
- package/dist/ui/avatar.js +22 -0
- package/dist/ui/badge.d.ts +9 -0
- package/dist/ui/badge.js +27 -0
- package/dist/ui/breadcrumb.d.ts +11 -0
- package/dist/ui/breadcrumb.js +27 -0
- package/dist/ui/button-group.d.ts +11 -0
- package/dist/ui/button-group.js +27 -0
- package/dist/ui/button.d.ts +10 -0
- package/dist/ui/button.js +38 -0
- package/dist/ui/card.d.ts +11 -0
- package/dist/ui/card.js +24 -0
- package/dist/ui/chart.d.ts +44 -0
- package/dist/ui/chart.js +117 -0
- package/dist/ui/checkbox.d.ts +4 -0
- package/dist/ui/checkbox.js +8 -0
- package/dist/ui/collapsible.d.ts +5 -0
- package/dist/ui/collapsible.js +12 -0
- package/dist/ui/combobox.d.ts +24 -0
- package/dist/ui/combobox.js +60 -0
- package/dist/ui/command.d.ts +18 -0
- package/dist/ui/command.js +34 -0
- package/dist/ui/dialog.d.ts +23 -0
- package/dist/ui/dialog.js +50 -0
- package/dist/ui/dropdown-menu.d.ts +29 -0
- package/dist/ui/dropdown-menu.js +50 -0
- package/dist/ui/emoji-picker.d.ts +6 -0
- package/dist/ui/emoji-picker.js +28 -0
- package/dist/ui/empty.d.ts +11 -0
- package/dist/ui/empty.js +33 -0
- package/dist/ui/field.d.ts +24 -0
- package/dist/ui/field.js +65 -0
- package/dist/ui/hover-card.d.ts +6 -0
- package/dist/ui/hover-card.js +13 -0
- package/dist/ui/input-group.d.ts +16 -0
- package/dist/ui/input-group.js +56 -0
- package/dist/ui/input.d.ts +3 -0
- package/dist/ui/input.js +6 -0
- package/dist/ui/item.d.ts +23 -0
- package/dist/ui/item.js +67 -0
- package/dist/ui/kbd.d.ts +3 -0
- package/dist/ui/kbd.js +9 -0
- package/dist/ui/label.d.ts +4 -0
- package/dist/ui/label.js +7 -0
- package/dist/ui/popover.d.ts +10 -0
- package/dist/ui/popover.js +25 -0
- package/dist/ui/progress.d.ts +4 -0
- package/dist/ui/progress.js +9 -0
- package/dist/ui/resizable.d.ts +7 -0
- package/dist/ui/resizable.js +13 -0
- package/dist/ui/scroll-area.d.ts +5 -0
- package/dist/ui/scroll-area.js +10 -0
- package/dist/ui/select.d.ts +15 -0
- package/dist/ui/select.js +36 -0
- package/dist/ui/separator.d.ts +4 -0
- package/dist/ui/separator.js +7 -0
- package/dist/ui/sheet.d.ts +14 -0
- package/dist/ui/sheet.js +54 -0
- package/dist/ui/sidebar.d.ts +69 -0
- package/dist/ui/sidebar.js +206 -0
- package/dist/ui/skeleton.d.ts +2 -0
- package/dist/ui/skeleton.js +6 -0
- package/dist/ui/slider.d.ts +4 -0
- package/dist/ui/slider.js +9 -0
- package/dist/ui/sonner.d.ts +3 -0
- package/dist/ui/sonner.js +24 -0
- package/dist/ui/spinner.d.ts +2 -0
- package/dist/ui/spinner.js +7 -0
- package/dist/ui/switch.d.ts +6 -0
- package/dist/ui/switch.js +7 -0
- package/dist/ui/table.d.ts +10 -0
- package/dist/ui/table.js +31 -0
- package/dist/ui/tabs.d.ts +7 -0
- package/dist/ui/tabs.js +22 -0
- package/dist/ui/textarea.d.ts +3 -0
- package/dist/ui/textarea.js +6 -0
- package/dist/ui/toggle-group.d.ts +10 -0
- package/dist/ui/toggle-group.js +22 -0
- package/dist/ui/toggle.d.ts +9 -0
- package/dist/ui/toggle.js +25 -0
- package/dist/ui/tooltip.d.ts +7 -0
- package/dist/ui/tooltip.js +16 -0
- package/dist/view-edit-cell.d.ts +49 -0
- package/dist/view-edit-cell.js +198 -0
- package/dist/view-editor.d.ts +52 -0
- package/dist/view-editor.js +940 -0
- package/dist/view-formulas.d.ts +61 -0
- package/dist/view-formulas.js +247 -0
- package/dist/view-icons.d.ts +20 -0
- package/dist/view-icons.js +70 -0
- package/dist/view-model.d.ts +390 -0
- package/dist/view-model.js +316 -0
- package/dist/whats-new.d.ts +3 -0
- package/dist/whats-new.js +53 -0
- package/dist/widget-controls.d.ts +9 -0
- package/dist/widget-controls.js +26 -0
- package/dist/widget-settings.d.ts +436 -0
- package/dist/widget-settings.js +290 -0
- package/dist/widget-thumbs.d.ts +3 -0
- package/dist/widget-thumbs.js +29 -0
- package/dist/workspace-keys.d.ts +12 -0
- package/dist/workspace-keys.js +13 -0
- package/dist/workspaces.d.ts +57 -0
- package/dist/workspaces.js +473 -0
- package/package.json +82 -4
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
import { type CustomViewConfig, type ViewCard, type ViewCardKind, type ViewWidget } from '@columenlabs/lumen-ui-types/views';
|
|
2
|
+
import { type LucideIcon } from 'lucide-react';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
import { type FilterField } from './lumen-filter.js';
|
|
5
|
+
import { type LinkColor } from './lumen-links.js';
|
|
6
|
+
import { type LumenLoad } from './lumen-source.js';
|
|
7
|
+
import { type ViewDomain, type ViewField } from './view-model.js';
|
|
8
|
+
/** A card's icon, from its kind and style. */
|
|
9
|
+
export declare const cardIcon: (c: {
|
|
10
|
+
kind: ViewCardKind;
|
|
11
|
+
style?: string;
|
|
12
|
+
}) => LucideIcon;
|
|
13
|
+
/** The widths a card can take, in columns of the desktop's 6. */
|
|
14
|
+
export declare const CARD_COLUMNS: readonly [1, 2, 3, 4, 5, 6];
|
|
15
|
+
/** The longest name a widget takes. */
|
|
16
|
+
export declare const CARD_TITLE_MAX = 40;
|
|
17
|
+
export declare const cardTitle: (b: ViewCard, viewName: string) => string;
|
|
18
|
+
/** The domain's fields as the filter box reads them, for a card's own tokens. */
|
|
19
|
+
export declare function cardFilterFields<T>(fields: ViewField<T>[]): FilterField<T>[];
|
|
20
|
+
/** A chart, top-N or market widget's body over `rows` (the view's shown rows). */
|
|
21
|
+
export declare function WidgetBody<T>({ card, domain, rows, fields, merge, onDetails, }: {
|
|
22
|
+
card: ViewCard;
|
|
23
|
+
domain: ViewDomain<T>;
|
|
24
|
+
/** Every row of the view (not the table's filter). */
|
|
25
|
+
rows: T[];
|
|
26
|
+
fields: FilterField<T>[];
|
|
27
|
+
/** Folds rows the way the view's flat table does (one line per symbol). */
|
|
28
|
+
merge: (rows: T[]) => T[];
|
|
29
|
+
onDetails?: (row: T) => void;
|
|
30
|
+
}): import("react").JSX.Element | null;
|
|
31
|
+
export type CardAction = 'edit' | 'duplicate' | 'up' | 'down' | 'remove';
|
|
32
|
+
/** What LumenLayout gives each of its cards: the layout's edit state and the card's place in it. */
|
|
33
|
+
export interface CardControls {
|
|
34
|
+
/** The page's layout is being edited. */
|
|
35
|
+
layout: boolean;
|
|
36
|
+
/** The person may change this view (an app view is read-only). */
|
|
37
|
+
editable: boolean;
|
|
38
|
+
first: boolean;
|
|
39
|
+
last: boolean;
|
|
40
|
+
/** A card given its own height by its corner: back to as tall as it draws. */
|
|
41
|
+
onFit?: () => void;
|
|
42
|
+
onAction: (a: CardAction) => void;
|
|
43
|
+
/** A card the page draws itself: it moves and sizes, but has no Edit, Duplicate or Remove. */
|
|
44
|
+
fixed?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** A card's link colour on its frame. */
|
|
47
|
+
export interface CardLink {
|
|
48
|
+
color: LinkColor | null;
|
|
49
|
+
onPick: (c: LinkColor | null) => void;
|
|
50
|
+
/** What it follows from other cards' linked chips: `IRA, Roth`. */
|
|
51
|
+
follows?: string;
|
|
52
|
+
/** Its own filter's linked chips (the phone's count beside the funnel). */
|
|
53
|
+
linked?: number;
|
|
54
|
+
}
|
|
55
|
+
export declare function LumenWidget({ id, kind, icon, title, note, controls, tools, filter, filterCount, load, rows, loadNote, pad, pinned, compact, className, children, link: given, help, assistant, strip, shown, style, }: {
|
|
56
|
+
id: string;
|
|
57
|
+
/** Its controls (Edit widget ▸ Controls): Ask the assistant, Refresh, Filter box and
|
|
58
|
+
* Footer show or hide here; missing keys take the type's default. */
|
|
59
|
+
shown?: ViewCard['controls'];
|
|
60
|
+
/** Its style, where it sets the type (a trend's spark or tracker is a Metric). */
|
|
61
|
+
style?: string;
|
|
62
|
+
/** ⓘ How to read: a few lines on what the card shows and how to read it,
|
|
63
|
+
* opened from the header. */
|
|
64
|
+
help?: ReactNode;
|
|
65
|
+
/** ✦ Ask the assistant on every card where the assistant answers: what the assistant needs beyond the
|
|
66
|
+
* card's title to read it ("Tune tn_… of playbook …: read it with tune_read"); false: no button. */
|
|
67
|
+
assistant?: string | false;
|
|
68
|
+
/** Its link colour: the square before the title, what it follows after it,
|
|
69
|
+
* and how many of its filter's chips are linked. Left out: the page's colour for `id` (every
|
|
70
|
+
* card carries the square); false: none (a form, with no data to link). */
|
|
71
|
+
link?: CardLink | false;
|
|
72
|
+
/** The card's kind; null for a card a page builds in code (not in the view's config). */
|
|
73
|
+
kind: ViewCardKind | null;
|
|
74
|
+
icon?: LucideIcon;
|
|
75
|
+
title: string;
|
|
76
|
+
note?: ReactNode;
|
|
77
|
+
/** Left out: a card the layout cannot edit. */
|
|
78
|
+
controls?: CardControls;
|
|
79
|
+
/** Buttons before the ↻, e.g. a view's pager. */
|
|
80
|
+
tools?: ReactNode;
|
|
81
|
+
/** The card's own filter (a view's LumenTokenizedFilter and Group): on the title's line
|
|
82
|
+
* when the header is wide, on a line under it when narrow, behind a funnel button on phone. */
|
|
83
|
+
filter?: ReactNode;
|
|
84
|
+
/** Active filter tokens, the count on the phone's funnel button. */
|
|
85
|
+
filterCount?: number;
|
|
86
|
+
/**
|
|
87
|
+
* A line under the header and filter (widget anatomy zone 4): what the card
|
|
88
|
+
* follows, or an offer such as Link to Holdings by Symbol.
|
|
89
|
+
*/
|
|
90
|
+
strip?: ReactNode;
|
|
91
|
+
/** The card's source: its ↻, and its load time below the body. */
|
|
92
|
+
load?: LumenLoad;
|
|
93
|
+
rows?: number;
|
|
94
|
+
/** Said in the load line instead of rows, e.g. "from the view's rows". */
|
|
95
|
+
loadNote?: string;
|
|
96
|
+
pad?: boolean;
|
|
97
|
+
/** The header stays in sight while a wide view scrolls sideways under it. */
|
|
98
|
+
pinned?: boolean;
|
|
99
|
+
/** A LumenCard (one number): its title is a small label over the number, no rule under it. */
|
|
100
|
+
compact?: boolean;
|
|
101
|
+
className?: string;
|
|
102
|
+
children: ReactNode;
|
|
103
|
+
}): import("react").JSX.Element;
|
|
104
|
+
/**
|
|
105
|
+
* One widget in its card. Widgets over the view's rows (tiles,
|
|
106
|
+
* charts, top N) load with the view: its states, its ↻. Market and price chart widgets read their own
|
|
107
|
+
* data and start once their card scrolls into view.
|
|
108
|
+
*/
|
|
109
|
+
export declare function LumenSavedWidget<T>({ widget, title, domain, rows, fields, merge, onDetails, load, tiles, controls, link, }: {
|
|
110
|
+
widget: ViewWidget;
|
|
111
|
+
/** Its link colour and what it follows (the layout narrows `rows` by it). */
|
|
112
|
+
link?: CardLink;
|
|
113
|
+
title: string;
|
|
114
|
+
domain: ViewDomain<T>;
|
|
115
|
+
/** Every row of the view (not the table's filter). */
|
|
116
|
+
rows: T[];
|
|
117
|
+
fields: FilterField<T>[];
|
|
118
|
+
/** Folds rows the way the view's flat table does (one line per symbol). */
|
|
119
|
+
merge: (rows: T[]) => T[];
|
|
120
|
+
onDetails?: (row: T) => void;
|
|
121
|
+
/** The view's rows' loading state, for widgets drawn from them. */
|
|
122
|
+
load?: LumenLoad;
|
|
123
|
+
/** The tiles widget's tiles, drawn by the layout. */
|
|
124
|
+
tiles?: ReactNode;
|
|
125
|
+
controls?: CardControls;
|
|
126
|
+
}): import("react").JSX.Element;
|
|
127
|
+
/** The page header's layout slot while a page's layout is edited: Add widget, Cancel and Save,
|
|
128
|
+
* icons only (in the header, not a bar of their own: Cancel
|
|
129
|
+
* drops the changes and leaves, in place of Reset). */
|
|
130
|
+
export declare function LayoutActions({ onCancel, onAdd, onSave, onReset, }: {
|
|
131
|
+
onCancel: () => void;
|
|
132
|
+
onAdd: () => void;
|
|
133
|
+
onSave: () => void;
|
|
134
|
+
/** A built-in page the person changed: puts it back to its default. */
|
|
135
|
+
onReset?: () => void;
|
|
136
|
+
}): import("react").JSX.Element;
|
|
137
|
+
/** The chip beside the title while a page's layout is edited. */
|
|
138
|
+
export declare function LayoutChip(): import("react").JSX.Element;
|
|
139
|
+
/** An id not yet used in `cards`: `base`, else `base_2`, `base_3`... */
|
|
140
|
+
export declare function freeId(cards: ViewCard[], base: string): string;
|
|
141
|
+
/** A new card of a style (`kind:style`) with sensible fields of this domain. */
|
|
142
|
+
export declare function draftOf<T>(styleId: string, domain: ViewDomain<T>, cards: ViewCard[]): ViewCard;
|
|
143
|
+
/** Whether the app can draw a style: Market needs its live feed, Price its history route, Growth
|
|
144
|
+
* of $1 a domain that draws curves. */
|
|
145
|
+
export declare function useOffered<T>(domain: ViewDomain<T>): (styleId: string) => boolean;
|
|
146
|
+
/** Add widget: the domain's pre-built widgets, or a kind to build. */
|
|
147
|
+
export declare function AddWidgetDialog<T>({ open, onOpenChange, domain, cards, onAdd, onBuild, }: {
|
|
148
|
+
open: boolean;
|
|
149
|
+
onOpenChange: (o: boolean) => void;
|
|
150
|
+
domain: ViewDomain<T>;
|
|
151
|
+
cards: ViewCard[];
|
|
152
|
+
/** Adds a ready card (a pre-built widget, or the view's tiles or the view itself). */
|
|
153
|
+
onAdd: (card: ViewCard) => void;
|
|
154
|
+
/** Opens Edit widget on a new card of a kind. */
|
|
155
|
+
onBuild: (card: ViewCard) => void;
|
|
156
|
+
}): import("react").JSX.Element;
|
|
157
|
+
/** A page's cards after `action` on card `i`, or null for Edit (the caller opens a dialog). */
|
|
158
|
+
export declare function cardsAfter(cards: ViewCard[], i: number, action: CardAction): ({
|
|
159
|
+
id: string;
|
|
160
|
+
title: string | null;
|
|
161
|
+
w: number;
|
|
162
|
+
h?: number | undefined;
|
|
163
|
+
x?: number | undefined;
|
|
164
|
+
y?: number | undefined;
|
|
165
|
+
phone?: {
|
|
166
|
+
x: number;
|
|
167
|
+
y: number;
|
|
168
|
+
w: number;
|
|
169
|
+
h?: number | undefined;
|
|
170
|
+
} | undefined;
|
|
171
|
+
filter: {
|
|
172
|
+
key: string;
|
|
173
|
+
value: string;
|
|
174
|
+
not?: boolean | undefined;
|
|
175
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
176
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
177
|
+
}[];
|
|
178
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
179
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
180
|
+
kind: "table";
|
|
181
|
+
style: "table";
|
|
182
|
+
table?: {
|
|
183
|
+
shape: "group" | "pivot" | "table";
|
|
184
|
+
columns: string[];
|
|
185
|
+
hidden?: string[] | undefined;
|
|
186
|
+
chips: {
|
|
187
|
+
key: string;
|
|
188
|
+
placement: "column" | "inline";
|
|
189
|
+
}[];
|
|
190
|
+
formats?: Record<string, "compact" | "integer" | "number" | "percent" | "price" | "price_rounded" | "price_signed" | "rounded" | "signed" | "weight"> | undefined;
|
|
191
|
+
aggs?: Record<string, "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "none" | "sum"> | undefined;
|
|
192
|
+
group: {
|
|
193
|
+
fields: string[];
|
|
194
|
+
default: string | null;
|
|
195
|
+
};
|
|
196
|
+
subgroup?: string | null | undefined;
|
|
197
|
+
pivot: {
|
|
198
|
+
rows: string;
|
|
199
|
+
columns: string;
|
|
200
|
+
value: string;
|
|
201
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
202
|
+
} | null;
|
|
203
|
+
sort: {
|
|
204
|
+
key: string;
|
|
205
|
+
desc: boolean;
|
|
206
|
+
} | null;
|
|
207
|
+
pagination: {
|
|
208
|
+
on: boolean;
|
|
209
|
+
size: 25 | 50 | 100 | 250;
|
|
210
|
+
};
|
|
211
|
+
width?: "fit" | "scroll" | undefined;
|
|
212
|
+
} | undefined;
|
|
213
|
+
} | {
|
|
214
|
+
id: string;
|
|
215
|
+
title: string | null;
|
|
216
|
+
w: number;
|
|
217
|
+
h?: number | undefined;
|
|
218
|
+
x?: number | undefined;
|
|
219
|
+
y?: number | undefined;
|
|
220
|
+
phone?: {
|
|
221
|
+
x: number;
|
|
222
|
+
y: number;
|
|
223
|
+
w: number;
|
|
224
|
+
h?: number | undefined;
|
|
225
|
+
} | undefined;
|
|
226
|
+
filter: {
|
|
227
|
+
key: string;
|
|
228
|
+
value: string;
|
|
229
|
+
not?: boolean | undefined;
|
|
230
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
231
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
232
|
+
}[];
|
|
233
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
234
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
235
|
+
kind: "table";
|
|
236
|
+
style: "top_n";
|
|
237
|
+
sort: string;
|
|
238
|
+
desc: boolean;
|
|
239
|
+
n: number;
|
|
240
|
+
columns: string[];
|
|
241
|
+
} | {
|
|
242
|
+
id: string;
|
|
243
|
+
title: string | null;
|
|
244
|
+
h?: number | undefined;
|
|
245
|
+
x?: number | undefined;
|
|
246
|
+
y?: number | undefined;
|
|
247
|
+
phone?: {
|
|
248
|
+
x: number;
|
|
249
|
+
y: number;
|
|
250
|
+
w: number;
|
|
251
|
+
h?: number | undefined;
|
|
252
|
+
} | undefined;
|
|
253
|
+
filter: {
|
|
254
|
+
key: string;
|
|
255
|
+
value: string;
|
|
256
|
+
not?: boolean | undefined;
|
|
257
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
258
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
259
|
+
}[];
|
|
260
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
261
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
262
|
+
kind: "metric";
|
|
263
|
+
style: "number" | "progress_bar" | "progress_circle";
|
|
264
|
+
w: number;
|
|
265
|
+
tile: {
|
|
266
|
+
key: string;
|
|
267
|
+
label: string;
|
|
268
|
+
field: string;
|
|
269
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
270
|
+
filter: {
|
|
271
|
+
key: string;
|
|
272
|
+
value: string;
|
|
273
|
+
not?: boolean | undefined;
|
|
274
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
275
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
276
|
+
}[];
|
|
277
|
+
sign: boolean;
|
|
278
|
+
suffix: string;
|
|
279
|
+
lines: ({
|
|
280
|
+
kind: "value";
|
|
281
|
+
field: string;
|
|
282
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
283
|
+
filter: {
|
|
284
|
+
key: string;
|
|
285
|
+
value: string;
|
|
286
|
+
not?: boolean | undefined;
|
|
287
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
288
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
289
|
+
}[];
|
|
290
|
+
suffix: string;
|
|
291
|
+
} | {
|
|
292
|
+
kind: "pct";
|
|
293
|
+
field: string;
|
|
294
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
295
|
+
} | {
|
|
296
|
+
kind: "text";
|
|
297
|
+
text: string;
|
|
298
|
+
})[];
|
|
299
|
+
} | {
|
|
300
|
+
key: string;
|
|
301
|
+
};
|
|
302
|
+
target?: number | undefined;
|
|
303
|
+
meter?: "health" | "usage" | undefined;
|
|
304
|
+
bands?: {
|
|
305
|
+
warn: number;
|
|
306
|
+
bad: number;
|
|
307
|
+
} | undefined;
|
|
308
|
+
} | {
|
|
309
|
+
id: string;
|
|
310
|
+
title: string | null;
|
|
311
|
+
w: number;
|
|
312
|
+
h?: number | undefined;
|
|
313
|
+
x?: number | undefined;
|
|
314
|
+
y?: number | undefined;
|
|
315
|
+
phone?: {
|
|
316
|
+
x: number;
|
|
317
|
+
y: number;
|
|
318
|
+
w: number;
|
|
319
|
+
h?: number | undefined;
|
|
320
|
+
} | undefined;
|
|
321
|
+
filter: {
|
|
322
|
+
key: string;
|
|
323
|
+
value: string;
|
|
324
|
+
not?: boolean | undefined;
|
|
325
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
326
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
327
|
+
}[];
|
|
328
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
329
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
330
|
+
kind: "metric";
|
|
331
|
+
style: "row";
|
|
332
|
+
tiles?: ({
|
|
333
|
+
key: string;
|
|
334
|
+
label: string;
|
|
335
|
+
field: string;
|
|
336
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
337
|
+
filter: {
|
|
338
|
+
key: string;
|
|
339
|
+
value: string;
|
|
340
|
+
not?: boolean | undefined;
|
|
341
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
342
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
343
|
+
}[];
|
|
344
|
+
sign: boolean;
|
|
345
|
+
suffix: string;
|
|
346
|
+
lines: ({
|
|
347
|
+
kind: "value";
|
|
348
|
+
field: string;
|
|
349
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
350
|
+
filter: {
|
|
351
|
+
key: string;
|
|
352
|
+
value: string;
|
|
353
|
+
not?: boolean | undefined;
|
|
354
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
355
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
356
|
+
}[];
|
|
357
|
+
suffix: string;
|
|
358
|
+
} | {
|
|
359
|
+
kind: "pct";
|
|
360
|
+
field: string;
|
|
361
|
+
agg: "count" | "distinct" | "first" | "last" | "max" | "mean" | "min" | "sum";
|
|
362
|
+
} | {
|
|
363
|
+
kind: "text";
|
|
364
|
+
text: string;
|
|
365
|
+
})[];
|
|
366
|
+
} | {
|
|
367
|
+
key: string;
|
|
368
|
+
})[] | undefined;
|
|
369
|
+
rank?: string | undefined;
|
|
370
|
+
cash?: boolean | undefined;
|
|
371
|
+
} | {
|
|
372
|
+
id: string;
|
|
373
|
+
title: string | null;
|
|
374
|
+
h?: number | undefined;
|
|
375
|
+
x?: number | undefined;
|
|
376
|
+
y?: number | undefined;
|
|
377
|
+
phone?: {
|
|
378
|
+
x: number;
|
|
379
|
+
y: number;
|
|
380
|
+
w: number;
|
|
381
|
+
h?: number | undefined;
|
|
382
|
+
} | undefined;
|
|
383
|
+
filter: {
|
|
384
|
+
key: string;
|
|
385
|
+
value: string;
|
|
386
|
+
not?: boolean | undefined;
|
|
387
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
388
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
389
|
+
}[];
|
|
390
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
391
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
392
|
+
w: number;
|
|
393
|
+
date: string;
|
|
394
|
+
values: string[];
|
|
395
|
+
bucket: "day" | "month" | "week" | "year";
|
|
396
|
+
agg: "count" | "last" | "mean" | "sum";
|
|
397
|
+
kind: "metric";
|
|
398
|
+
style: "spark" | "tracker";
|
|
399
|
+
} | {
|
|
400
|
+
id: string;
|
|
401
|
+
title: string | null;
|
|
402
|
+
w: number;
|
|
403
|
+
h?: number | undefined;
|
|
404
|
+
x?: number | undefined;
|
|
405
|
+
y?: number | undefined;
|
|
406
|
+
phone?: {
|
|
407
|
+
x: number;
|
|
408
|
+
y: number;
|
|
409
|
+
w: number;
|
|
410
|
+
h?: number | undefined;
|
|
411
|
+
} | undefined;
|
|
412
|
+
filter: {
|
|
413
|
+
key: string;
|
|
414
|
+
value: string;
|
|
415
|
+
not?: boolean | undefined;
|
|
416
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
417
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
418
|
+
}[];
|
|
419
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
420
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
421
|
+
kind: "allocation";
|
|
422
|
+
style: "bar";
|
|
423
|
+
by: string;
|
|
424
|
+
value: string;
|
|
425
|
+
max: number;
|
|
426
|
+
} | {
|
|
427
|
+
id: string;
|
|
428
|
+
title: string | null;
|
|
429
|
+
w: number;
|
|
430
|
+
h?: number | undefined;
|
|
431
|
+
x?: number | undefined;
|
|
432
|
+
y?: number | undefined;
|
|
433
|
+
phone?: {
|
|
434
|
+
x: number;
|
|
435
|
+
y: number;
|
|
436
|
+
w: number;
|
|
437
|
+
h?: number | undefined;
|
|
438
|
+
} | undefined;
|
|
439
|
+
filter: {
|
|
440
|
+
key: string;
|
|
441
|
+
value: string;
|
|
442
|
+
not?: boolean | undefined;
|
|
443
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
444
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
445
|
+
}[];
|
|
446
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
447
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
448
|
+
kind: "allocation";
|
|
449
|
+
style: "donut";
|
|
450
|
+
by: string;
|
|
451
|
+
value: string;
|
|
452
|
+
max: number;
|
|
453
|
+
} | {
|
|
454
|
+
id: string;
|
|
455
|
+
title: string | null;
|
|
456
|
+
w: number;
|
|
457
|
+
h?: number | undefined;
|
|
458
|
+
x?: number | undefined;
|
|
459
|
+
y?: number | undefined;
|
|
460
|
+
phone?: {
|
|
461
|
+
x: number;
|
|
462
|
+
y: number;
|
|
463
|
+
w: number;
|
|
464
|
+
h?: number | undefined;
|
|
465
|
+
} | undefined;
|
|
466
|
+
filter: {
|
|
467
|
+
key: string;
|
|
468
|
+
value: string;
|
|
469
|
+
not?: boolean | undefined;
|
|
470
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
471
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
472
|
+
}[];
|
|
473
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
474
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
475
|
+
kind: "allocation";
|
|
476
|
+
style: "bar_list";
|
|
477
|
+
by: string;
|
|
478
|
+
value: string;
|
|
479
|
+
signed: boolean;
|
|
480
|
+
stack?: string | undefined;
|
|
481
|
+
desc: boolean;
|
|
482
|
+
n: number;
|
|
483
|
+
} | {
|
|
484
|
+
id: string;
|
|
485
|
+
title: string | null;
|
|
486
|
+
w: number;
|
|
487
|
+
h?: number | undefined;
|
|
488
|
+
x?: number | undefined;
|
|
489
|
+
y?: number | undefined;
|
|
490
|
+
phone?: {
|
|
491
|
+
x: number;
|
|
492
|
+
y: number;
|
|
493
|
+
w: number;
|
|
494
|
+
h?: number | undefined;
|
|
495
|
+
} | undefined;
|
|
496
|
+
filter: {
|
|
497
|
+
key: string;
|
|
498
|
+
value: string;
|
|
499
|
+
not?: boolean | undefined;
|
|
500
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
501
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
502
|
+
}[];
|
|
503
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
504
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
505
|
+
kind: "chart";
|
|
506
|
+
style: "price";
|
|
507
|
+
symbol: string;
|
|
508
|
+
window: "1D" | "1M" | "1Y" | "5D" | "5Y" | "6M" | "Max" | "YTD";
|
|
509
|
+
type: "candles" | "line";
|
|
510
|
+
} | {
|
|
511
|
+
id: string;
|
|
512
|
+
title: string | null;
|
|
513
|
+
w: number;
|
|
514
|
+
h?: number | undefined;
|
|
515
|
+
x?: number | undefined;
|
|
516
|
+
y?: number | undefined;
|
|
517
|
+
phone?: {
|
|
518
|
+
x: number;
|
|
519
|
+
y: number;
|
|
520
|
+
w: number;
|
|
521
|
+
h?: number | undefined;
|
|
522
|
+
} | undefined;
|
|
523
|
+
filter: {
|
|
524
|
+
key: string;
|
|
525
|
+
value: string;
|
|
526
|
+
not?: boolean | undefined;
|
|
527
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
528
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
529
|
+
}[];
|
|
530
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
531
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
532
|
+
kind: "chart";
|
|
533
|
+
style: "growth";
|
|
534
|
+
scale: "linear" | "log";
|
|
535
|
+
} | {
|
|
536
|
+
id: string;
|
|
537
|
+
title: string | null;
|
|
538
|
+
w: number;
|
|
539
|
+
h?: number | undefined;
|
|
540
|
+
x?: number | undefined;
|
|
541
|
+
y?: number | undefined;
|
|
542
|
+
phone?: {
|
|
543
|
+
x: number;
|
|
544
|
+
y: number;
|
|
545
|
+
w: number;
|
|
546
|
+
h?: number | undefined;
|
|
547
|
+
} | undefined;
|
|
548
|
+
filter: {
|
|
549
|
+
key: string;
|
|
550
|
+
value: string;
|
|
551
|
+
not?: boolean | undefined;
|
|
552
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
553
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
554
|
+
}[];
|
|
555
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
556
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
557
|
+
kind: "chart";
|
|
558
|
+
style: "market";
|
|
559
|
+
symbols: string[];
|
|
560
|
+
layout: "lines" | "tiles" | "today";
|
|
561
|
+
} | {
|
|
562
|
+
id: string;
|
|
563
|
+
title: string | null;
|
|
564
|
+
h?: number | undefined;
|
|
565
|
+
x?: number | undefined;
|
|
566
|
+
y?: number | undefined;
|
|
567
|
+
phone?: {
|
|
568
|
+
x: number;
|
|
569
|
+
y: number;
|
|
570
|
+
w: number;
|
|
571
|
+
h?: number | undefined;
|
|
572
|
+
} | undefined;
|
|
573
|
+
filter: {
|
|
574
|
+
key: string;
|
|
575
|
+
value: string;
|
|
576
|
+
not?: boolean | undefined;
|
|
577
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
578
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
579
|
+
}[];
|
|
580
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
581
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
582
|
+
w: number;
|
|
583
|
+
date: string;
|
|
584
|
+
values: string[];
|
|
585
|
+
bucket: "day" | "month" | "week" | "year";
|
|
586
|
+
agg: "count" | "last" | "mean" | "sum";
|
|
587
|
+
kind: "chart";
|
|
588
|
+
style: "area" | "bars" | "combo" | "line" | "stacked";
|
|
589
|
+
} | {
|
|
590
|
+
id: string;
|
|
591
|
+
title: string | null;
|
|
592
|
+
w: number;
|
|
593
|
+
h?: number | undefined;
|
|
594
|
+
x?: number | undefined;
|
|
595
|
+
y?: number | undefined;
|
|
596
|
+
phone?: {
|
|
597
|
+
x: number;
|
|
598
|
+
y: number;
|
|
599
|
+
w: number;
|
|
600
|
+
h?: number | undefined;
|
|
601
|
+
} | undefined;
|
|
602
|
+
filter: {
|
|
603
|
+
key: string;
|
|
604
|
+
value: string;
|
|
605
|
+
not?: boolean | undefined;
|
|
606
|
+
op?: "between" | "eq" | "gt" | "lt" | undefined;
|
|
607
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
608
|
+
}[];
|
|
609
|
+
link?: "amber" | "blue" | "lime" | "pink" | "teal" | undefined;
|
|
610
|
+
controls?: Partial<Record<"ask" | "columns" | "download" | "filter" | "footer" | "group" | "header" | "legend" | "pager" | "refresh" | "window", boolean>> | undefined;
|
|
611
|
+
kind: "page";
|
|
612
|
+
amount?: number | undefined;
|
|
613
|
+
})[] | null;
|
|
614
|
+
export type { CustomViewConfig };
|