@getdom/studio 0.1.1 → 0.2.1
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 +54 -0
- package/README.md +31 -0
- package/SKILL.md +21 -1
- package/package.json +10 -4
- package/public/llms.txt +13 -2
- package/src/pages/_layout/componentCatalog.generated.js +1185 -44
- package/src/pages/_layout/componentLoaders.js +41 -0
- package/src/pages/_layout/componentManager.js +38 -27
- package/src/pages/_layout/componentRuntimeRecords.js +3 -1
- package/src/pages/charts/_shared/ChartContainer.vue +67 -0
- package/src/pages/charts/_shared/ChartLegend.vue +22 -0
- package/src/pages/charts/_shared/ChartTooltip.vue +18 -0
- package/src/pages/charts/_shared/DonutRenderer.vue +33 -0
- package/src/pages/charts/_shared/XYChart.vue +140 -0
- package/src/pages/charts/_shared/XYRenderer.vue +90 -0
- package/src/pages/charts/_shared/chartProps.js +23 -0
- package/src/pages/charts/_shared/chartUtils.js +95 -0
- package/src/pages/charts/area-chart/DomAreaChart.vue +27 -0
- package/src/pages/charts/bar-chart/DomBarChart.vue +29 -0
- package/src/pages/charts/date-range-picker/DomDateRangePicker.vue +104 -0
- package/src/pages/charts/date-range-picker/dateRange.js +69 -0
- package/src/pages/charts/donut-chart/DomDonutChart.vue +117 -0
- package/src/pages/charts/line-chart/DomLineChart.vue +26 -0
- package/src/pages/charts/metric-card/DomMetricCard.vue +49 -0
- package/src/pages/charts/sparkline/DomSparkline.vue +30 -0
- package/src/pages/components/_shared/media/MediaDeviceSelect.vue +28 -0
- package/src/pages/components/_shared/media/useMediaInput.js +200 -0
- package/src/pages/components/audio-controls/DomAudioControls.vue +91 -0
- package/src/pages/components/audio-input/DomAudioInput.vue +58 -0
- package/src/pages/components/button/DomButton.vue +10 -4
- package/src/pages/components/button/buttonStyles.js +5 -0
- package/src/pages/components/camera-input/DomCameraInput.vue +75 -0
- package/src/pages/components/command-palette/DomCommandPalette.vue +12 -2
- package/src/pages/components/dialog/DomDialog.vue +338 -36
- package/src/pages/components/icon-button/DomIconButton.vue +8 -2
- package/src/pages/components/menu-stack/DomMenuStack.vue +111 -0
- package/src/pages/components/menu-stack/menuTree.js +35 -0
- package/src/pages/components/popover/DomPopover.vue +1 -53
- package/src/pages/components/popover/popover.css +50 -0
- package/src/pages/components/video-feed/DomVideoFeed.vue +551 -0
- package/src/pages/data/agent-chat/DomAgentChatShell.vue +1 -0
- package/src/pages/data/agent-chat/DomAgentConversation.vue +1 -0
- package/src/pages/data/agent-chat/DomAgentConversationList.vue +1 -0
- package/src/pages/data/gantt/DomGantt.vue +788 -0
- package/src/pages/data/gantt/ganttTime.js +223 -0
- package/src/pages/data/month-calendar/DomMonthCalendar.vue +84 -9
- package/src/pages/data/notification-inbox/DomNotificationInbox.vue +505 -0
- package/src/pages/data/notification-inbox/notificationPresentation.js +34 -0
- package/src/pages/designer/_shared/ControlIconButton.vue +62 -0
- package/src/pages/designer/_shared/StyleControlSection.vue +59 -0
- package/src/pages/designer/_shared/cssEditorContext.js +19 -0
- package/src/pages/designer/backdrop-editor/BackdropControl.vue +57 -0
- package/src/pages/designer/backdrop-editor/DomBackdropEditor.vue +33 -0
- package/src/pages/designer/backdrop-editor/backdropModel.js +39 -0
- package/src/pages/designer/background-editor/BackgroundLayers.vue +210 -0
- package/src/pages/designer/background-editor/DomBackgroundEditor.vue +33 -0
- package/src/pages/designer/background-editor/backgroundModel.js +102 -0
- package/src/pages/designer/border-editor/BorderControl.vue +72 -0
- package/src/pages/designer/border-editor/DomBorderEditor.vue +34 -0
- package/src/pages/designer/border-editor/borderModel.js +21 -0
- package/src/pages/designer/color-swatch/DomColorSwatch.vue +95 -0
- package/src/pages/designer/frame/DomDesignerFrame.vue +16 -0
- package/src/pages/designer/frame/DomFrameLayoutEditor.vue +41 -0
- package/src/pages/designer/frame/frameLayout.js +93 -0
- package/src/pages/designer/layers/DomDesignerLayers.vue +11 -0
- package/src/pages/designer/shadow-editor/DomShadowEditor.vue +32 -0
- package/src/pages/designer/shadow-editor/ShadowLayers.vue +185 -0
- package/src/pages/designer/shadow-editor/shadowModel.js +73 -0
- package/src/pages/designer/stage/DesignerBounds.vue +31 -0
- package/src/pages/designer/stage/DomDesignerStage.vue +237 -0
- package/src/pages/designer/stage/SpacingGuides.vue +33 -0
- package/src/pages/designer/stage/resizeGeometry.js +15 -0
- package/src/pages/designer/stage/snapGeometry.js +69 -0
- package/src/pages/designer/stage/snapPipeline.js +17 -0
- package/src/pages/designer/stage/spacingGeometry.js +129 -0
- package/src/pages/forms/native-select/DomNativeSelect.vue +8 -3
- package/src/pages/forms/number-input/DomNumberInput.vue +39 -3
- package/src/pages/forms/range-input/DomRangeInput.vue +75 -23
- package/src/pages/forms/textarea-composer/DomTextareaComposer.vue +91 -9
- package/src/pages/forms/toggle/DomToggle.vue +1 -1
- package/src/pages/lib/headless/base.js +10 -5
- package/src/pages/lib/headless/dialog.js +25 -6
- package/src/pages/lib/headless/drawer.js +49 -21
- package/src/pages/lib/vue/index.d.ts +1161 -14
- package/src/pages/lib/vue/index.js +43 -0
- package/src/pages/mobile/_shared/interactionMath.js +46 -0
- package/src/pages/mobile/_shared/useKeyboardViewport.js +91 -0
- package/src/pages/mobile/action-sheet/DomActionSheet.vue +102 -65
- package/src/pages/mobile/bottom-nav/DomAppBottomNav.vue +4 -2
- package/src/pages/mobile/bottom-sheet/DomBottomSheet.vue +221 -0
- package/src/pages/mobile/list-item/DomAppListItem.vue +6 -6
- package/src/pages/mobile/profile/DomAppProfile.vue +42 -0
- package/src/pages/mobile/safe-area/DomSafeArea.vue +6 -6
- package/src/pages/mobile/shell/DomAppShell.vue +60 -9
- package/src/pages/mobile/stack/DomAppStack.vue +214 -55
- package/src/pages/mobile/swipe-actions/DomSwipeActions.vue +346 -0
- package/src/pages/mobile/top-bar/DomAppTopBar.vue +3 -3
- package/src/pages/visual/audio-visualizer/DomAudioVisualizer.vue +143 -0
- package/src/theme.css +13 -0
|
@@ -10,6 +10,110 @@ export const componentCatalog = [
|
|
|
10
10
|
"doc": {},
|
|
11
11
|
"studio": {}
|
|
12
12
|
},
|
|
13
|
+
{
|
|
14
|
+
"id": "components/audio-controls",
|
|
15
|
+
"path": "../components/audio-controls/DomAudioControls.vue",
|
|
16
|
+
"section": "components",
|
|
17
|
+
"slug": "audio-controls",
|
|
18
|
+
"exportName": "DomAudioControls",
|
|
19
|
+
"route": "/components/audio-controls",
|
|
20
|
+
"doc": {
|
|
21
|
+
"nav": {
|
|
22
|
+
"section": "ai"
|
|
23
|
+
},
|
|
24
|
+
"name": "Audio controls",
|
|
25
|
+
"tag": "<DomAudioControls>",
|
|
26
|
+
"description": "Click to talk becomes a compact microphone control: stop, live waveform, mute, and input selection. Ready for voice AI, calls, and collaboration.",
|
|
27
|
+
"icon": "M4 9v6M8 5v14M12 8v8M16 3v18M20 9v6",
|
|
28
|
+
"events": [
|
|
29
|
+
{
|
|
30
|
+
"name": "stream",
|
|
31
|
+
"payload": "(stream: MediaStream | null)",
|
|
32
|
+
"description": "Initial/replacement microphone stream, or null on stop. This component releases its owned tracks."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "update:deviceId",
|
|
36
|
+
"payload": "(deviceId: string)",
|
|
37
|
+
"description": "Committed input selection, with v-model:deviceId support."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "update:muted",
|
|
41
|
+
"payload": "(muted: boolean)",
|
|
42
|
+
"description": "Microphone mute state, with v-model:muted support."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "state",
|
|
46
|
+
"payload": "(state: 'idle' | 'requesting' | 'active' | 'error')",
|
|
47
|
+
"description": "Local capture lifecycle, independent of your remote connection."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "error",
|
|
51
|
+
"payload": "({ name, message })",
|
|
52
|
+
"description": "Permission, missing device, or capture failure."
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"keyboard": [
|
|
56
|
+
{
|
|
57
|
+
"keys": "Tab",
|
|
58
|
+
"action": "Move between stop, mute, and microphone settings."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"keys": "Enter / Space",
|
|
62
|
+
"action": "Activate the focused control."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"keys": "Escape",
|
|
66
|
+
"action": "Dismiss microphone settings and return to the trigger."
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"studio": {}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "components/audio-input",
|
|
74
|
+
"path": "../components/audio-input/DomAudioInput.vue",
|
|
75
|
+
"section": "components",
|
|
76
|
+
"slug": "audio-input",
|
|
77
|
+
"exportName": "DomAudioInput",
|
|
78
|
+
"route": "/components/audio-input",
|
|
79
|
+
"doc": {
|
|
80
|
+
"nav": {
|
|
81
|
+
"section": "ai"
|
|
82
|
+
},
|
|
83
|
+
"name": "Audio input",
|
|
84
|
+
"tag": "<DomAudioInput>",
|
|
85
|
+
"description": "Microphone setup with device selection, a live input meter, mute, and explicit start/stop. Emits a local MediaStream for your meeting or AI application.",
|
|
86
|
+
"icon": "M12 15a3 3 0 0 0 3-3V5a3 3 0 0 0-6 0v7a3 3 0 0 0 3 3ZM5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8",
|
|
87
|
+
"events": [
|
|
88
|
+
{
|
|
89
|
+
"name": "stream",
|
|
90
|
+
"payload": "(stream: MediaStream | null)",
|
|
91
|
+
"description": "Emits the initial or replacement stream; null means capture stopped. This component owns and releases its tracks."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "update:deviceId",
|
|
95
|
+
"payload": "(deviceId: string)",
|
|
96
|
+
"description": "Committed microphone selection. Supports v-model:deviceId."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "update:muted",
|
|
100
|
+
"payload": "(muted: boolean)",
|
|
101
|
+
"description": "Track enabled state changed. Supports v-model:muted."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "state",
|
|
105
|
+
"payload": "(state: 'idle' | 'requesting' | 'active' | 'error')",
|
|
106
|
+
"description": "Local device lifecycle. Active does not imply a network connection."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "error",
|
|
110
|
+
"payload": "({ name, message })",
|
|
111
|
+
"description": "Actionable capture failure. A failed microphone switch keeps the previous stream."
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"studio": {}
|
|
116
|
+
},
|
|
13
117
|
{
|
|
14
118
|
"id": "components/breadcrumbs",
|
|
15
119
|
"path": "../components/breadcrumbs/DomBreadcrumbs.vue",
|
|
@@ -76,6 +180,46 @@ export const componentCatalog = [
|
|
|
76
180
|
},
|
|
77
181
|
"studio": {}
|
|
78
182
|
},
|
|
183
|
+
{
|
|
184
|
+
"id": "components/camera-input",
|
|
185
|
+
"path": "../components/camera-input/DomCameraInput.vue",
|
|
186
|
+
"section": "components",
|
|
187
|
+
"slug": "camera-input",
|
|
188
|
+
"exportName": "DomCameraInput",
|
|
189
|
+
"route": "/components/camera-input",
|
|
190
|
+
"doc": {
|
|
191
|
+
"nav": {
|
|
192
|
+
"section": "ai"
|
|
193
|
+
},
|
|
194
|
+
"name": "Camera input",
|
|
195
|
+
"tag": "<DomCameraInput>",
|
|
196
|
+
"description": "Select a webcam and check a private local preview before joining a call. Emits a video-only MediaStream and releases the camera when stopped.",
|
|
197
|
+
"icon": "M3 5h12v14H3zM15 10l6-4v12l-6-4",
|
|
198
|
+
"events": [
|
|
199
|
+
{
|
|
200
|
+
"name": "stream",
|
|
201
|
+
"payload": "(stream: MediaStream | null)",
|
|
202
|
+
"description": "Video-only local stream or null when released. Cameras are released before switching for mobile compatibility."
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"name": "update:deviceId",
|
|
206
|
+
"payload": "(deviceId: string)",
|
|
207
|
+
"description": "Committed camera selection. Supports v-model:deviceId."
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"name": "state",
|
|
211
|
+
"payload": "(state: 'idle' | 'requesting' | 'active' | 'error')",
|
|
212
|
+
"description": "Local camera capture state."
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "error",
|
|
216
|
+
"payload": "({ name, message })",
|
|
217
|
+
"description": "Camera access or device failure."
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"studio": {}
|
|
222
|
+
},
|
|
79
223
|
{
|
|
80
224
|
"id": "components/command-palette",
|
|
81
225
|
"path": "../components/command-palette/DomCommandPalette.vue",
|
|
@@ -166,12 +310,17 @@ export const componentCatalog = [
|
|
|
166
310
|
},
|
|
167
311
|
{
|
|
168
312
|
"name": "header",
|
|
169
|
-
"payload": "{ title, description, titleId, descriptionId }",
|
|
170
|
-
"description": "Replace the default title and description block. Apply the provided IDs to custom heading and description elements to preserve the dialog accessibility relationships."
|
|
313
|
+
"payload": "{ title, description, titleId, descriptionId, companionOpen, companionMode, companionTriggerProps, toggleCompanion }",
|
|
314
|
+
"description": "Replace the default title and description block. Apply the provided IDs to custom heading and description elements to preserve the dialog accessibility relationships. Companion helpers wire an in-dialog toggle when the companion slot is present."
|
|
171
315
|
},
|
|
172
316
|
{
|
|
173
317
|
"name": "footer",
|
|
174
318
|
"description": "Action buttons. Add `data-close` on a control to dismiss the dialog."
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"name": "companion",
|
|
322
|
+
"payload": "{ open, mode, closeCompanion, toggleCompanion }",
|
|
323
|
+
"description": "Optional contextual surface shown beside the dialog on wide screens and over it below companionBreakpoint."
|
|
175
324
|
}
|
|
176
325
|
],
|
|
177
326
|
"events": [
|
|
@@ -184,6 +333,11 @@ export const componentCatalog = [
|
|
|
184
333
|
"name": "before-open",
|
|
185
334
|
"description": "Emitted immediately before the dialog opens; prepare draft data or item snapshots here."
|
|
186
335
|
},
|
|
336
|
+
{
|
|
337
|
+
"name": "update:companionOpen",
|
|
338
|
+
"payload": "(open: boolean)",
|
|
339
|
+
"description": "Emitted when the companion surface opens or closes."
|
|
340
|
+
},
|
|
187
341
|
{
|
|
188
342
|
"name": "close",
|
|
189
343
|
"description": "Emitted when the dialog is dismissed."
|
|
@@ -196,7 +350,7 @@ export const componentCatalog = [
|
|
|
196
350
|
"keyboard": [
|
|
197
351
|
{
|
|
198
352
|
"keys": "Esc",
|
|
199
|
-
"action": "Closes
|
|
353
|
+
"action": "Closes an open companion first, then closes the dialog unless `static` is set."
|
|
200
354
|
},
|
|
201
355
|
{
|
|
202
356
|
"keys": "Tab / Shift+Tab",
|
|
@@ -616,6 +770,86 @@ export const componentCatalog = [
|
|
|
616
770
|
},
|
|
617
771
|
"studio": {}
|
|
618
772
|
},
|
|
773
|
+
{
|
|
774
|
+
"id": "components/menu-stack",
|
|
775
|
+
"path": "../components/menu-stack/DomMenuStack.vue",
|
|
776
|
+
"section": "components",
|
|
777
|
+
"slug": "menu-stack",
|
|
778
|
+
"exportName": "DomMenuStack",
|
|
779
|
+
"route": "/components/menu-stack",
|
|
780
|
+
"doc": {
|
|
781
|
+
"name": "Menu stack",
|
|
782
|
+
"tag": "<DomMenuStack>",
|
|
783
|
+
"description": "Nested navigation that slides inside its container on mobile and desktop. Reuses App stack transitions, retained page state, scrolling, and focus. Each item has a unique id and label, plus children, a component and props, or a named slot for richer pages. Leaf items accept to or href, or emit select for application actions.",
|
|
784
|
+
"slots": [
|
|
785
|
+
{
|
|
786
|
+
"name": "root",
|
|
787
|
+
"payload": "{ screen, stack }",
|
|
788
|
+
"description": "Content above the root menu rows."
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"name": "(item.slot)",
|
|
792
|
+
"payload": "{ screen, stack }",
|
|
793
|
+
"description": "Page content above child rows. Set an item’s slot to this slot name; components receive screen and stack props too."
|
|
794
|
+
}
|
|
795
|
+
],
|
|
796
|
+
"events": [
|
|
797
|
+
{
|
|
798
|
+
"name": "select",
|
|
799
|
+
"payload": "(item)",
|
|
800
|
+
"description": "A leaf was selected. Close the containing popover here if desired."
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"name": "update:path",
|
|
804
|
+
"payload": "(path: string[])",
|
|
805
|
+
"description": "Two-way stack path, starting with root."
|
|
806
|
+
},
|
|
807
|
+
{
|
|
808
|
+
"name": "navigate",
|
|
809
|
+
"payload": "({ path, previousPath, direction, screen, reason })",
|
|
810
|
+
"description": "A contained page opened or returned."
|
|
811
|
+
}
|
|
812
|
+
],
|
|
813
|
+
"keyboard": [
|
|
814
|
+
{
|
|
815
|
+
"keys": "Tab / Shift+Tab",
|
|
816
|
+
"action": "Move between visible links, rows, Back, and custom page controls."
|
|
817
|
+
},
|
|
818
|
+
{
|
|
819
|
+
"keys": "Enter / Space",
|
|
820
|
+
"action": "Activate a focused button. Enter follows links."
|
|
821
|
+
}
|
|
822
|
+
],
|
|
823
|
+
"playground": {
|
|
824
|
+
"initial": {
|
|
825
|
+
"title": "Workspace",
|
|
826
|
+
"items": [
|
|
827
|
+
{
|
|
828
|
+
"id": "account",
|
|
829
|
+
"label": "Account",
|
|
830
|
+
"children": [
|
|
831
|
+
{
|
|
832
|
+
"id": "preferences",
|
|
833
|
+
"label": "Preferences",
|
|
834
|
+
"children": [
|
|
835
|
+
{
|
|
836
|
+
"id": "language",
|
|
837
|
+
"label": "English (UK)"
|
|
838
|
+
}
|
|
839
|
+
]
|
|
840
|
+
}
|
|
841
|
+
]
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
"id": "help",
|
|
845
|
+
"label": "Help"
|
|
846
|
+
}
|
|
847
|
+
]
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
},
|
|
851
|
+
"studio": {}
|
|
852
|
+
},
|
|
619
853
|
{
|
|
620
854
|
"id": "components/pagination",
|
|
621
855
|
"path": "../components/pagination/DomPagination.vue",
|
|
@@ -1201,6 +1435,81 @@ export const componentCatalog = [
|
|
|
1201
1435
|
},
|
|
1202
1436
|
"studio": {}
|
|
1203
1437
|
},
|
|
1438
|
+
{
|
|
1439
|
+
"id": "components/video-feed",
|
|
1440
|
+
"path": "../components/video-feed/DomVideoFeed.vue",
|
|
1441
|
+
"section": "components",
|
|
1442
|
+
"slug": "video-feed",
|
|
1443
|
+
"exportName": "DomVideoFeed",
|
|
1444
|
+
"route": "/components/video-feed",
|
|
1445
|
+
"doc": {
|
|
1446
|
+
"name": "Video feed",
|
|
1447
|
+
"tag": "<DomVideoFeed>",
|
|
1448
|
+
"description": "A vertical video feed with touch scrolling, snap navigation, and one active player. Built for desktop and mobile.",
|
|
1449
|
+
"icon": "M8 3h8v18H8zM11 9l4 3-4 3M3 9l2-2 2 2M3 15l2 2 2-2",
|
|
1450
|
+
"slots": [
|
|
1451
|
+
{
|
|
1452
|
+
"name": "caption",
|
|
1453
|
+
"payload": "{ item, index }",
|
|
1454
|
+
"description": "Replaces the title, creator, and description overlay. Include media attribution here when required."
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
"name": "actions",
|
|
1458
|
+
"payload": "{ item, index }",
|
|
1459
|
+
"description": "Application-owned actions beside the caption, such as save or like."
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"name": "empty",
|
|
1463
|
+
"description": "Content shown when the feed has no items."
|
|
1464
|
+
}
|
|
1465
|
+
],
|
|
1466
|
+
"events": [
|
|
1467
|
+
{
|
|
1468
|
+
"name": "update:index",
|
|
1469
|
+
"payload": "(index: number)",
|
|
1470
|
+
"description": "The active item changed through scrolling, keyboard, or navigation."
|
|
1471
|
+
},
|
|
1472
|
+
{
|
|
1473
|
+
"name": "update:muted",
|
|
1474
|
+
"payload": "(muted: boolean)",
|
|
1475
|
+
"description": "The viewer changed the sound preference."
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"name": "change",
|
|
1479
|
+
"payload": "({ item, index })",
|
|
1480
|
+
"description": "Active item changed; use this to request another page near the end."
|
|
1481
|
+
},
|
|
1482
|
+
{
|
|
1483
|
+
"name": "error",
|
|
1484
|
+
"payload": "({ item, index, error })",
|
|
1485
|
+
"description": "A video failed to load or play. Autoplay policy blocks show a play button instead."
|
|
1486
|
+
}
|
|
1487
|
+
],
|
|
1488
|
+
"keyboard": [
|
|
1489
|
+
{
|
|
1490
|
+
"keys": "↑ / ↓",
|
|
1491
|
+
"action": "Previous or next video when the feed is focused."
|
|
1492
|
+
},
|
|
1493
|
+
{
|
|
1494
|
+
"keys": "Home / End",
|
|
1495
|
+
"action": "First or last video."
|
|
1496
|
+
},
|
|
1497
|
+
{
|
|
1498
|
+
"keys": "Space / K",
|
|
1499
|
+
"action": "Play or pause."
|
|
1500
|
+
},
|
|
1501
|
+
{
|
|
1502
|
+
"keys": "M",
|
|
1503
|
+
"action": "Toggle sound."
|
|
1504
|
+
},
|
|
1505
|
+
{
|
|
1506
|
+
"keys": "Tab",
|
|
1507
|
+
"action": "Move through playback, seek, caption, and application controls."
|
|
1508
|
+
}
|
|
1509
|
+
]
|
|
1510
|
+
},
|
|
1511
|
+
"studio": {}
|
|
1512
|
+
},
|
|
1204
1513
|
{
|
|
1205
1514
|
"id": "data/activity-timeline",
|
|
1206
1515
|
"path": "../data/activity-timeline/DomActivityTimeline.vue",
|
|
@@ -1260,6 +1569,10 @@ export const componentCatalog = [
|
|
|
1260
1569
|
"exportName": "DomAgentChatShell",
|
|
1261
1570
|
"route": "/data/agent-chat",
|
|
1262
1571
|
"doc": {
|
|
1572
|
+
"nav": {
|
|
1573
|
+
"section": "ai",
|
|
1574
|
+
"primary": true
|
|
1575
|
+
},
|
|
1263
1576
|
"name": "Agent chat shell",
|
|
1264
1577
|
"tag": "<DomAgentChatShell>",
|
|
1265
1578
|
"description": "A three-pane AI chat application shell with a resizable conversation sidebar, scroll-contained conversation window, closable context aside, streaming tool calls, and audio/text handoff controls.",
|
|
@@ -1354,6 +1667,9 @@ export const componentCatalog = [
|
|
|
1354
1667
|
"exportName": "DomAgentConversation",
|
|
1355
1668
|
"route": "/data/agent-chat",
|
|
1356
1669
|
"doc": {
|
|
1670
|
+
"nav": {
|
|
1671
|
+
"section": "ai"
|
|
1672
|
+
},
|
|
1357
1673
|
"name": "Agent conversation",
|
|
1358
1674
|
"tag": "<DomAgentConversation>",
|
|
1359
1675
|
"description": "A scroll-contained AI conversation surface with a fixed header, streaming messages, reasoning summaries, audio/text mode switching, tool-call rendering, and a composer footer.",
|
|
@@ -1457,6 +1773,9 @@ export const componentCatalog = [
|
|
|
1457
1773
|
"exportName": "DomAgentConversationList",
|
|
1458
1774
|
"route": "/data/agent-chat",
|
|
1459
1775
|
"doc": {
|
|
1776
|
+
"nav": {
|
|
1777
|
+
"section": "ai"
|
|
1778
|
+
},
|
|
1460
1779
|
"name": "Agent conversation list",
|
|
1461
1780
|
"tag": "<DomAgentConversationList>",
|
|
1462
1781
|
"description": "A reusable AI conversation navigation list with search, agent labels, unread counts, status pills, and active-thread selection.",
|
|
@@ -1788,6 +2107,123 @@ export const componentCatalog = [
|
|
|
1788
2107
|
},
|
|
1789
2108
|
"studio": {}
|
|
1790
2109
|
},
|
|
2110
|
+
{
|
|
2111
|
+
"id": "data/gantt",
|
|
2112
|
+
"path": "../data/gantt/DomGantt.vue",
|
|
2113
|
+
"section": "data",
|
|
2114
|
+
"slug": "gantt",
|
|
2115
|
+
"exportName": "DomGantt",
|
|
2116
|
+
"route": "/data/gantt",
|
|
2117
|
+
"doc": {
|
|
2118
|
+
"name": "Gantt",
|
|
2119
|
+
"tag": "<DomGantt>",
|
|
2120
|
+
"description": "One horizontal timeline for team resources, project schedules, and roadmaps, with time zoom, working hours, and drag-to-plan ranges.",
|
|
2121
|
+
"icon": "M4 4v16h16M7 7h6M10 11h8M8 15h7",
|
|
2122
|
+
"events": [
|
|
2123
|
+
{
|
|
2124
|
+
"name": "time-range-select",
|
|
2125
|
+
"payload": "GanttRangePayload",
|
|
2126
|
+
"description": "A requested span with source row, rowKey, Date start/end, elapsed durationMinutes, and original event. End is exclusive; the application creates the item."
|
|
2127
|
+
},
|
|
2128
|
+
{
|
|
2129
|
+
"name": "row-create",
|
|
2130
|
+
"payload": "{ name: string }",
|
|
2131
|
+
"description": "Validated row name. The application assigns an id and adds its row."
|
|
2132
|
+
},
|
|
2133
|
+
{
|
|
2134
|
+
"name": "item-click",
|
|
2135
|
+
"payload": "GanttItemPayload",
|
|
2136
|
+
"description": "Source item and row, resolved dates, and original event for an application-owned editor."
|
|
2137
|
+
},
|
|
2138
|
+
{
|
|
2139
|
+
"name": "item-move",
|
|
2140
|
+
"payload": "GanttItemChangePayload",
|
|
2141
|
+
"description": "Proposed dates and source/target rows after a drag or keyboard move. Source records remain unchanged until the application accepts the event."
|
|
2142
|
+
},
|
|
2143
|
+
{
|
|
2144
|
+
"name": "item-resize",
|
|
2145
|
+
"payload": "GanttItemChangePayload",
|
|
2146
|
+
"description": "Proposed exclusive end after right-edge resizing. The start and row are preserved."
|
|
2147
|
+
},
|
|
2148
|
+
{
|
|
2149
|
+
"name": "update:zoom",
|
|
2150
|
+
"payload": "'months' | 'weeks' | 'days'",
|
|
2151
|
+
"description": "Toolbar zoom changed, preserving the date at the left of the viewport."
|
|
2152
|
+
},
|
|
2153
|
+
{
|
|
2154
|
+
"name": "update:planMode",
|
|
2155
|
+
"payload": "boolean",
|
|
2156
|
+
"description": "Plan mode changed."
|
|
2157
|
+
},
|
|
2158
|
+
{
|
|
2159
|
+
"name": "update:hideNonWorkingHours",
|
|
2160
|
+
"payload": "boolean",
|
|
2161
|
+
"description": "Out-of-hours visibility changed."
|
|
2162
|
+
},
|
|
2163
|
+
{
|
|
2164
|
+
"name": "update:hideWeekends",
|
|
2165
|
+
"payload": "boolean",
|
|
2166
|
+
"description": "Non-working day visibility changed."
|
|
2167
|
+
},
|
|
2168
|
+
{
|
|
2169
|
+
"name": "visible-range-change",
|
|
2170
|
+
"payload": "{ startDate: Date, endDate: Date }",
|
|
2171
|
+
"description": "Visible date window after scrolling or zooming, for application-owned data loading."
|
|
2172
|
+
}
|
|
2173
|
+
],
|
|
2174
|
+
"slots": [
|
|
2175
|
+
{
|
|
2176
|
+
"name": "row",
|
|
2177
|
+
"payload": "{ row, rowKey, label }",
|
|
2178
|
+
"description": "Replace a row label, for example with a member avatar and role."
|
|
2179
|
+
},
|
|
2180
|
+
{
|
|
2181
|
+
"name": "item",
|
|
2182
|
+
"payload": "{ item, row, startDate, endDate }",
|
|
2183
|
+
"description": "Replace bar content inside its focusable item button. Avoid nested interactive controls."
|
|
2184
|
+
},
|
|
2185
|
+
{
|
|
2186
|
+
"name": "toolbar",
|
|
2187
|
+
"description": "Append application filters or actions."
|
|
2188
|
+
},
|
|
2189
|
+
{
|
|
2190
|
+
"name": "empty",
|
|
2191
|
+
"description": "Replace the empty collection message."
|
|
2192
|
+
}
|
|
2193
|
+
],
|
|
2194
|
+
"keyboard": [
|
|
2195
|
+
{
|
|
2196
|
+
"keys": "← / →",
|
|
2197
|
+
"action": "Move the focused row’s time cursor one selection step."
|
|
2198
|
+
},
|
|
2199
|
+
{
|
|
2200
|
+
"keys": "Shift + ← / →",
|
|
2201
|
+
"action": "Extend a time selection."
|
|
2202
|
+
},
|
|
2203
|
+
{
|
|
2204
|
+
"keys": "Enter",
|
|
2205
|
+
"action": "Request the selected time span."
|
|
2206
|
+
},
|
|
2207
|
+
{
|
|
2208
|
+
"keys": "Escape",
|
|
2209
|
+
"action": "Cancel a pointer or keyboard selection."
|
|
2210
|
+
},
|
|
2211
|
+
{
|
|
2212
|
+
"keys": "Alt + ← / →",
|
|
2213
|
+
"action": "Move a focused draggable item one time increment."
|
|
2214
|
+
},
|
|
2215
|
+
{
|
|
2216
|
+
"keys": "Alt + ↑ / ↓",
|
|
2217
|
+
"action": "Move a focused item to the previous/next resource row when row changes are enabled."
|
|
2218
|
+
},
|
|
2219
|
+
{
|
|
2220
|
+
"keys": "← / → on resize grip",
|
|
2221
|
+
"action": "Shorten or extend an item by one time increment."
|
|
2222
|
+
}
|
|
2223
|
+
]
|
|
2224
|
+
},
|
|
2225
|
+
"studio": {}
|
|
2226
|
+
},
|
|
1791
2227
|
{
|
|
1792
2228
|
"id": "data/kanban",
|
|
1793
2229
|
"path": "../data/kanban/DomKanban.vue",
|
|
@@ -2159,6 +2595,80 @@ export const componentCatalog = [
|
|
|
2159
2595
|
},
|
|
2160
2596
|
"studio": {}
|
|
2161
2597
|
},
|
|
2598
|
+
{
|
|
2599
|
+
"id": "data/notification-inbox",
|
|
2600
|
+
"path": "../data/notification-inbox/DomNotificationInbox.vue",
|
|
2601
|
+
"section": "data",
|
|
2602
|
+
"slug": "notification-inbox",
|
|
2603
|
+
"exportName": "DomNotificationInbox",
|
|
2604
|
+
"route": "/data/notification-inbox",
|
|
2605
|
+
"doc": {
|
|
2606
|
+
"name": "Notification inbox",
|
|
2607
|
+
"tag": "<DomNotificationInbox>",
|
|
2608
|
+
"description": "A polished notification bell and durable inbox panel for application-owned in-app records, including unread, action, archive, pagination, loading, and failure-ready states.",
|
|
2609
|
+
"icon": "M18 8a6 6 0 0 0-12 0c0 7-3 7-3 9h18c0-2-3-2-3-9M10 21h4",
|
|
2610
|
+
"slots": [
|
|
2611
|
+
{
|
|
2612
|
+
"name": "trigger",
|
|
2613
|
+
"payload": "{ unreadCount, open }",
|
|
2614
|
+
"description": "Replace the default bell trigger while retaining the inbox popover."
|
|
2615
|
+
},
|
|
2616
|
+
{
|
|
2617
|
+
"name": "header",
|
|
2618
|
+
"payload": "{ unreadCount, refresh }",
|
|
2619
|
+
"description": "Replace the panel heading and refresh control."
|
|
2620
|
+
},
|
|
2621
|
+
{
|
|
2622
|
+
"name": "item",
|
|
2623
|
+
"payload": "{ item, unread, transition, action }",
|
|
2624
|
+
"description": "Replace one notification row while retaining the panel list and state helpers."
|
|
2625
|
+
},
|
|
2626
|
+
{
|
|
2627
|
+
"name": "item-icon",
|
|
2628
|
+
"payload": "{ item, tone }",
|
|
2629
|
+
"description": "Replace the semantic icon shown for one default notification row."
|
|
2630
|
+
},
|
|
2631
|
+
{
|
|
2632
|
+
"name": "empty",
|
|
2633
|
+
"description": "Replace the caught-up empty state."
|
|
2634
|
+
},
|
|
2635
|
+
{
|
|
2636
|
+
"name": "footer",
|
|
2637
|
+
"payload": "{ hasMore, loadingMore, loadMore }",
|
|
2638
|
+
"description": "Replace the optional pagination footer."
|
|
2639
|
+
}
|
|
2640
|
+
],
|
|
2641
|
+
"events": [
|
|
2642
|
+
{
|
|
2643
|
+
"name": "transition",
|
|
2644
|
+
"payload": "({ item, transition: \"read\" | \"unread\" | \"archive\" })",
|
|
2645
|
+
"description": "Requests an application-owned durable state transition."
|
|
2646
|
+
},
|
|
2647
|
+
{
|
|
2648
|
+
"name": "action",
|
|
2649
|
+
"payload": "({ item, action })",
|
|
2650
|
+
"description": "Fired when the recipient follows a notification action."
|
|
2651
|
+
},
|
|
2652
|
+
{
|
|
2653
|
+
"name": "refresh",
|
|
2654
|
+
"description": "Requests a fresh first page without marking any item read."
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
"name": "load-more",
|
|
2658
|
+
"description": "Requests the next application-owned inbox page."
|
|
2659
|
+
},
|
|
2660
|
+
{
|
|
2661
|
+
"name": "open",
|
|
2662
|
+
"description": "Fired when the inbox popover opens."
|
|
2663
|
+
},
|
|
2664
|
+
{
|
|
2665
|
+
"name": "close",
|
|
2666
|
+
"description": "Fired when the inbox popover closes."
|
|
2667
|
+
}
|
|
2668
|
+
]
|
|
2669
|
+
},
|
|
2670
|
+
"studio": {}
|
|
2671
|
+
},
|
|
2162
2672
|
{
|
|
2163
2673
|
"id": "data/week-planner",
|
|
2164
2674
|
"path": "../data/week-planner/DomWeekPlanner.vue",
|
|
@@ -2235,40 +2745,264 @@ export const componentCatalog = [
|
|
|
2235
2745
|
],
|
|
2236
2746
|
"slots": [
|
|
2237
2747
|
{
|
|
2238
|
-
"name": "(default)",
|
|
2239
|
-
"payload": "{ cell, month, week, timeSlots, drag, dragAttrs, rangeStyle }",
|
|
2240
|
-
"typeRef": "WeekPlannerDaySlotPayload",
|
|
2241
|
-
"description": "Timed content layer for each day. Use rangeStyle(record) with records containing startTime and endTime."
|
|
2748
|
+
"name": "(default)",
|
|
2749
|
+
"payload": "{ cell, month, week, timeSlots, drag, dragAttrs, rangeStyle }",
|
|
2750
|
+
"typeRef": "WeekPlannerDaySlotPayload",
|
|
2751
|
+
"description": "Timed content layer for each day. Use rangeStyle(record) with records containing startTime and endTime."
|
|
2752
|
+
},
|
|
2753
|
+
{
|
|
2754
|
+
"name": "day-header",
|
|
2755
|
+
"payload": "{ cell, month, week }",
|
|
2756
|
+
"description": "Custom day-column header content."
|
|
2757
|
+
},
|
|
2758
|
+
{
|
|
2759
|
+
"name": "all-day",
|
|
2760
|
+
"payload": "{ cell, month, week, drag, dragAttrs }",
|
|
2761
|
+
"description": "All-day content rendered above the timed rows."
|
|
2762
|
+
},
|
|
2763
|
+
{
|
|
2764
|
+
"name": "time-label",
|
|
2765
|
+
"payload": "{ slot }",
|
|
2766
|
+
"description": "Custom sticky time-rail label."
|
|
2767
|
+
},
|
|
2768
|
+
{
|
|
2769
|
+
"name": "corner",
|
|
2770
|
+
"payload": "{ range }",
|
|
2771
|
+
"description": "Content above the sticky time rail."
|
|
2772
|
+
}
|
|
2773
|
+
],
|
|
2774
|
+
"keyboard": [
|
|
2775
|
+
{
|
|
2776
|
+
"keys": "Tab",
|
|
2777
|
+
"action": "Move through day headers, all-day cells, and time rows when clickable is enabled."
|
|
2778
|
+
},
|
|
2779
|
+
{
|
|
2780
|
+
"keys": "Enter / Space",
|
|
2781
|
+
"action": "Activate the focused day or time row."
|
|
2782
|
+
}
|
|
2783
|
+
]
|
|
2784
|
+
},
|
|
2785
|
+
"studio": {}
|
|
2786
|
+
},
|
|
2787
|
+
{
|
|
2788
|
+
"id": "charts/area-chart",
|
|
2789
|
+
"path": "../charts/area-chart/DomAreaChart.vue",
|
|
2790
|
+
"section": "charts",
|
|
2791
|
+
"slug": "area-chart",
|
|
2792
|
+
"exportName": "DomAreaChart",
|
|
2793
|
+
"route": "/charts/area-chart",
|
|
2794
|
+
"doc": {
|
|
2795
|
+
"name": "Area chart",
|
|
2796
|
+
"tag": "<DomAreaChart>",
|
|
2797
|
+
"description": "Show volume over time as overlapping or stacked areas.",
|
|
2798
|
+
"icon": "M4 4v16h16M7 14l4-5 4 3 5-7",
|
|
2799
|
+
"events": [
|
|
2800
|
+
{
|
|
2801
|
+
"name": "select",
|
|
2802
|
+
"payload": "{ row, index }",
|
|
2803
|
+
"description": "Original application record selected by click or Enter."
|
|
2804
|
+
},
|
|
2805
|
+
{
|
|
2806
|
+
"name": "retry",
|
|
2807
|
+
"description": "Requests another attempt to load application data."
|
|
2808
|
+
}
|
|
2809
|
+
],
|
|
2810
|
+
"keyboard": [
|
|
2811
|
+
{
|
|
2812
|
+
"keys": "Arrow keys / Home / End",
|
|
2813
|
+
"action": "Inspect data points."
|
|
2814
|
+
},
|
|
2815
|
+
{
|
|
2816
|
+
"keys": "Enter",
|
|
2817
|
+
"action": "Select the inspected record."
|
|
2818
|
+
}
|
|
2819
|
+
]
|
|
2820
|
+
},
|
|
2821
|
+
"studio": {}
|
|
2822
|
+
},
|
|
2823
|
+
{
|
|
2824
|
+
"id": "charts/bar-chart",
|
|
2825
|
+
"path": "../charts/bar-chart/DomBarChart.vue",
|
|
2826
|
+
"section": "charts",
|
|
2827
|
+
"slug": "bar-chart",
|
|
2828
|
+
"exportName": "DomBarChart",
|
|
2829
|
+
"route": "/charts/bar-chart",
|
|
2830
|
+
"doc": {
|
|
2831
|
+
"name": "Bar chart",
|
|
2832
|
+
"tag": "<DomBarChart>",
|
|
2833
|
+
"description": "Compare categories with vertical or horizontal bars, grouped series, and percentage stacks.",
|
|
2834
|
+
"icon": "M4 4v16h16M7 14l4-5 4 3 5-7",
|
|
2835
|
+
"events": [
|
|
2836
|
+
{
|
|
2837
|
+
"name": "select",
|
|
2838
|
+
"payload": "{ row, index }",
|
|
2839
|
+
"description": "Original application record selected by click or Enter."
|
|
2840
|
+
},
|
|
2841
|
+
{
|
|
2842
|
+
"name": "retry",
|
|
2843
|
+
"description": "Requests another attempt to load application data."
|
|
2844
|
+
}
|
|
2845
|
+
],
|
|
2846
|
+
"keyboard": [
|
|
2847
|
+
{
|
|
2848
|
+
"keys": "Arrow keys / Home / End",
|
|
2849
|
+
"action": "Inspect data points."
|
|
2850
|
+
},
|
|
2851
|
+
{
|
|
2852
|
+
"keys": "Enter",
|
|
2853
|
+
"action": "Select the inspected record."
|
|
2854
|
+
}
|
|
2855
|
+
]
|
|
2856
|
+
},
|
|
2857
|
+
"studio": {}
|
|
2858
|
+
},
|
|
2859
|
+
{
|
|
2860
|
+
"id": "charts/date-range-picker",
|
|
2861
|
+
"path": "../charts/date-range-picker/DomDateRangePicker.vue",
|
|
2862
|
+
"section": "charts",
|
|
2863
|
+
"slug": "date-range-picker",
|
|
2864
|
+
"exportName": "DomDateRangePicker",
|
|
2865
|
+
"route": "/charts/date-range-picker",
|
|
2866
|
+
"doc": {
|
|
2867
|
+
"name": "Date range picker",
|
|
2868
|
+
"tag": "<DomDateRangePicker>",
|
|
2869
|
+
"description": "Inclusive reporting dates with useful presets, explicit Apply and Cancel actions, and optional period comparisons.",
|
|
2870
|
+
"icon": "M5 4v3M19 4v3M4 9h16M4 6h16v14H4zM8 13h8M8 16h5",
|
|
2871
|
+
"events": [
|
|
2872
|
+
{
|
|
2873
|
+
"name": "update:modelValue",
|
|
2874
|
+
"payload": "{ start, end }",
|
|
2875
|
+
"description": "Committed inclusive YYYY-MM-DD dates."
|
|
2876
|
+
},
|
|
2877
|
+
{
|
|
2878
|
+
"name": "update:comparison",
|
|
2879
|
+
"payload": "string",
|
|
2880
|
+
"description": "Committed comparison mode."
|
|
2881
|
+
},
|
|
2882
|
+
{
|
|
2883
|
+
"name": "change",
|
|
2884
|
+
"payload": "{ range, comparison, comparisonRange }",
|
|
2885
|
+
"description": "Atomic reporting query change; fetching remains application-owned."
|
|
2886
|
+
}
|
|
2887
|
+
]
|
|
2888
|
+
},
|
|
2889
|
+
"studio": {}
|
|
2890
|
+
},
|
|
2891
|
+
{
|
|
2892
|
+
"id": "charts/donut-chart",
|
|
2893
|
+
"path": "../charts/donut-chart/DomDonutChart.vue",
|
|
2894
|
+
"section": "charts",
|
|
2895
|
+
"slug": "donut-chart",
|
|
2896
|
+
"exportName": "DomDonutChart",
|
|
2897
|
+
"route": "/charts/donut-chart",
|
|
2898
|
+
"doc": {
|
|
2899
|
+
"name": "Donut chart",
|
|
2900
|
+
"tag": "<DomDonutChart>",
|
|
2901
|
+
"description": "Compare non-negative category shares with a centre total, selectable legend, and accessible data table.",
|
|
2902
|
+
"icon": "M12 3v9h9A9 9 0 1 1 12 3ZM15 3.5A9 9 0 0 1 20.5 9H15z",
|
|
2903
|
+
"slots": [
|
|
2904
|
+
{
|
|
2905
|
+
"name": "center",
|
|
2906
|
+
"payload": "{ total, formattedTotal }",
|
|
2907
|
+
"description": "Replaces the centre labels with custom content, such as an audit score out of 100. Keep content small enough to fit inside the ring."
|
|
2908
|
+
}
|
|
2909
|
+
],
|
|
2910
|
+
"events": [
|
|
2911
|
+
{
|
|
2912
|
+
"name": "select",
|
|
2913
|
+
"payload": "{ row, index }",
|
|
2914
|
+
"description": "Original record for the selected category."
|
|
2915
|
+
},
|
|
2916
|
+
{
|
|
2917
|
+
"name": "retry",
|
|
2918
|
+
"description": "Requests application data recovery."
|
|
2919
|
+
}
|
|
2920
|
+
]
|
|
2921
|
+
},
|
|
2922
|
+
"studio": {}
|
|
2923
|
+
},
|
|
2924
|
+
{
|
|
2925
|
+
"id": "charts/line-chart",
|
|
2926
|
+
"path": "../charts/line-chart/DomLineChart.vue",
|
|
2927
|
+
"section": "charts",
|
|
2928
|
+
"slug": "line-chart",
|
|
2929
|
+
"exportName": "DomLineChart",
|
|
2930
|
+
"route": "/charts/line-chart",
|
|
2931
|
+
"doc": {
|
|
2932
|
+
"name": "Line chart",
|
|
2933
|
+
"tag": "<DomLineChart>",
|
|
2934
|
+
"description": "Compare trends, reporting periods, and targets with proportional time or ordered category axes.",
|
|
2935
|
+
"icon": "M4 4v16h16M7 14l4-5 4 3 5-7",
|
|
2936
|
+
"events": [
|
|
2937
|
+
{
|
|
2938
|
+
"name": "select",
|
|
2939
|
+
"payload": "{ row, index }",
|
|
2940
|
+
"description": "Original application record selected by click or Enter."
|
|
2242
2941
|
},
|
|
2243
2942
|
{
|
|
2244
|
-
"name": "
|
|
2245
|
-
"
|
|
2246
|
-
|
|
2247
|
-
|
|
2943
|
+
"name": "retry",
|
|
2944
|
+
"description": "Requests another attempt to load application data."
|
|
2945
|
+
}
|
|
2946
|
+
],
|
|
2947
|
+
"keyboard": [
|
|
2248
2948
|
{
|
|
2249
|
-
"
|
|
2250
|
-
"
|
|
2251
|
-
"description": "All-day content rendered above the timed rows."
|
|
2949
|
+
"keys": "Arrow keys / Home / End",
|
|
2950
|
+
"action": "Inspect data points."
|
|
2252
2951
|
},
|
|
2253
2952
|
{
|
|
2254
|
-
"
|
|
2255
|
-
"
|
|
2256
|
-
|
|
2953
|
+
"keys": "Enter",
|
|
2954
|
+
"action": "Select the inspected record."
|
|
2955
|
+
}
|
|
2956
|
+
]
|
|
2957
|
+
},
|
|
2958
|
+
"studio": {}
|
|
2959
|
+
},
|
|
2960
|
+
{
|
|
2961
|
+
"id": "charts/metric-card",
|
|
2962
|
+
"path": "../charts/metric-card/DomMetricCard.vue",
|
|
2963
|
+
"section": "charts",
|
|
2964
|
+
"slug": "metric-card",
|
|
2965
|
+
"exportName": "DomMetricCard",
|
|
2966
|
+
"route": "/charts/metric-card",
|
|
2967
|
+
"doc": {
|
|
2968
|
+
"name": "Metric card",
|
|
2969
|
+
"tag": "<DomMetricCard>",
|
|
2970
|
+
"description": "A formatted measurement, explicit comparison, and optional sparkline for reporting dashboards.",
|
|
2971
|
+
"icon": "M4 5h16v14H4zM7 15l3-3 3 1 4-5"
|
|
2972
|
+
},
|
|
2973
|
+
"studio": {}
|
|
2974
|
+
},
|
|
2975
|
+
{
|
|
2976
|
+
"id": "charts/sparkline",
|
|
2977
|
+
"path": "../charts/sparkline/DomSparkline.vue",
|
|
2978
|
+
"section": "charts",
|
|
2979
|
+
"slug": "sparkline",
|
|
2980
|
+
"exportName": "DomSparkline",
|
|
2981
|
+
"route": "/charts/sparkline",
|
|
2982
|
+
"doc": {
|
|
2983
|
+
"name": "Sparkline",
|
|
2984
|
+
"tag": "<DomSparkline>",
|
|
2985
|
+
"description": "Compact trends for metric cards, table cells, and resource lists.",
|
|
2986
|
+
"icon": "M4 4v16h16M7 14l4-5 4 3 5-7",
|
|
2987
|
+
"events": [
|
|
2988
|
+
{
|
|
2989
|
+
"name": "select",
|
|
2990
|
+
"payload": "{ row, index }",
|
|
2991
|
+
"description": "Original application record selected by click or Enter."
|
|
2257
2992
|
},
|
|
2258
2993
|
{
|
|
2259
|
-
"name": "
|
|
2260
|
-
"
|
|
2261
|
-
"description": "Content above the sticky time rail."
|
|
2994
|
+
"name": "retry",
|
|
2995
|
+
"description": "Requests another attempt to load application data."
|
|
2262
2996
|
}
|
|
2263
2997
|
],
|
|
2264
2998
|
"keyboard": [
|
|
2265
2999
|
{
|
|
2266
|
-
"keys": "
|
|
2267
|
-
"action": "
|
|
3000
|
+
"keys": "Arrow keys / Home / End",
|
|
3001
|
+
"action": "Inspect data points."
|
|
2268
3002
|
},
|
|
2269
3003
|
{
|
|
2270
|
-
"keys": "Enter
|
|
2271
|
-
"action": "
|
|
3004
|
+
"keys": "Enter",
|
|
3005
|
+
"action": "Select the inspected record."
|
|
2272
3006
|
}
|
|
2273
3007
|
]
|
|
2274
3008
|
},
|
|
@@ -3143,7 +3877,39 @@ export const componentCatalog = [
|
|
|
3143
3877
|
"slug": "number-input",
|
|
3144
3878
|
"exportName": "DomNumberInput",
|
|
3145
3879
|
"route": "/forms/number-input",
|
|
3146
|
-
"doc": {
|
|
3880
|
+
"doc": {
|
|
3881
|
+
"name": "Vue number input",
|
|
3882
|
+
"tag": "<DomNumberInput>",
|
|
3883
|
+
"description": "An accessible Vue 3 number input with v-model, labels, validation, and native min, max, and step constraints.",
|
|
3884
|
+
"icon": "M8 7h8M8 12h8M8 17h8",
|
|
3885
|
+
"events": [
|
|
3886
|
+
{
|
|
3887
|
+
"name": "update:modelValue",
|
|
3888
|
+
"payload": "number | string",
|
|
3889
|
+
"description": "Fired with a number as the user types, or an empty string when cleared."
|
|
3890
|
+
},
|
|
3891
|
+
{
|
|
3892
|
+
"name": "focus",
|
|
3893
|
+
"payload": "FocusEvent",
|
|
3894
|
+
"description": "Fired when the number input receives focus."
|
|
3895
|
+
},
|
|
3896
|
+
{
|
|
3897
|
+
"name": "blur",
|
|
3898
|
+
"payload": "FocusEvent",
|
|
3899
|
+
"description": "Fired when the number input loses focus."
|
|
3900
|
+
}
|
|
3901
|
+
],
|
|
3902
|
+
"playground": {
|
|
3903
|
+
"initial": {
|
|
3904
|
+
"label": "Quantity",
|
|
3905
|
+
"description": "Choose between 1 and 99 items.",
|
|
3906
|
+
"modelValue": 3,
|
|
3907
|
+
"min": 1,
|
|
3908
|
+
"max": 99,
|
|
3909
|
+
"step": 1
|
|
3910
|
+
}
|
|
3911
|
+
}
|
|
3912
|
+
},
|
|
3147
3913
|
"studio": {}
|
|
3148
3914
|
},
|
|
3149
3915
|
{
|
|
@@ -3249,6 +4015,18 @@ export const componentCatalog = [
|
|
|
3249
4015
|
"description": "A compact slider input for numeric values with a stylable track and handle.",
|
|
3250
4016
|
"icon": "M5 12h14M8 12a2 2 0 1 0 0.01 0M16 12a2 2 0 1 0 0.01 0",
|
|
3251
4017
|
"slots": [],
|
|
4018
|
+
"events": [
|
|
4019
|
+
{
|
|
4020
|
+
"name": "update:modelValue",
|
|
4021
|
+
"payload": "number",
|
|
4022
|
+
"description": "The value changed through pointer or keyboard input."
|
|
4023
|
+
},
|
|
4024
|
+
{
|
|
4025
|
+
"name": "update:dragging",
|
|
4026
|
+
"payload": "boolean",
|
|
4027
|
+
"description": "Pointer scrubbing started or finished, including cancellation."
|
|
4028
|
+
}
|
|
4029
|
+
],
|
|
3252
4030
|
"playground": {
|
|
3253
4031
|
"initial": {
|
|
3254
4032
|
"label": "Confidence",
|
|
@@ -3478,18 +4256,18 @@ export const componentCatalog = [
|
|
|
3478
4256
|
},
|
|
3479
4257
|
{
|
|
3480
4258
|
"name": "submit",
|
|
3481
|
-
"payload": "{ submit, disabled, submitting, label }",
|
|
3482
|
-
"description": "Replace the built-in circular submit button."
|
|
4259
|
+
"payload": "{ submit, disabled, submitting, label, pressed }",
|
|
4260
|
+
"description": "Replace the built-in circular submit button. Bind pressed to DomButton or DomIconButton to retain keyboard submit feedback."
|
|
3483
4261
|
}
|
|
3484
4262
|
],
|
|
3485
4263
|
"keyboard": [
|
|
3486
4264
|
{
|
|
3487
4265
|
"keys": "Enter",
|
|
3488
|
-
"action": "Submit when submitOnEnter is enabled."
|
|
4266
|
+
"action": "Submit with button press feedback when submitOnEnter is enabled; otherwise insert a new line."
|
|
3489
4267
|
},
|
|
3490
4268
|
{
|
|
3491
4269
|
"keys": "Shift + Enter",
|
|
3492
|
-
"action": "Insert a new line."
|
|
4270
|
+
"action": "Insert a new line when submitOnEnter is enabled; otherwise submit with button press feedback."
|
|
3493
4271
|
}
|
|
3494
4272
|
]
|
|
3495
4273
|
},
|
|
@@ -3770,7 +4548,7 @@ export const componentCatalog = [
|
|
|
3770
4548
|
"doc": {
|
|
3771
4549
|
"name": "Action sheet",
|
|
3772
4550
|
"tag": "<DomActionSheet>",
|
|
3773
|
-
"description": "A bottom action sheet for
|
|
4551
|
+
"description": "A bottom action sheet for mobile and desktop, with bounded scrolling, keyboard dismissal, focus return, and drag dismissal. Works standalone as a viewport overlay. In DomAppShell, place it in the overlay slot and it stays inside that app.",
|
|
3774
4552
|
"events": [
|
|
3775
4553
|
{
|
|
3776
4554
|
"name": "update:modelValue",
|
|
@@ -3793,16 +4571,23 @@ export const componentCatalog = [
|
|
|
3793
4571
|
{
|
|
3794
4572
|
"label": "Share project",
|
|
3795
4573
|
"description": "Open the native share sheet",
|
|
3796
|
-
"value": "share"
|
|
4574
|
+
"value": "share",
|
|
4575
|
+
"variant": "",
|
|
4576
|
+
"disabled": false
|
|
3797
4577
|
},
|
|
3798
4578
|
{
|
|
3799
4579
|
"label": "Duplicate screen",
|
|
3800
|
-
"
|
|
4580
|
+
"description": "",
|
|
4581
|
+
"value": "duplicate",
|
|
4582
|
+
"variant": "",
|
|
4583
|
+
"disabled": false
|
|
3801
4584
|
},
|
|
3802
4585
|
{
|
|
3803
4586
|
"label": "Delete draft",
|
|
4587
|
+
"description": "",
|
|
3804
4588
|
"value": "delete",
|
|
3805
|
-
"variant": "danger"
|
|
4589
|
+
"variant": "danger",
|
|
4590
|
+
"disabled": false
|
|
3806
4591
|
}
|
|
3807
4592
|
]
|
|
3808
4593
|
}
|
|
@@ -3857,6 +4642,66 @@ export const componentCatalog = [
|
|
|
3857
4642
|
},
|
|
3858
4643
|
"studio": {}
|
|
3859
4644
|
},
|
|
4645
|
+
{
|
|
4646
|
+
"id": "mobile/bottom-sheet",
|
|
4647
|
+
"path": "../mobile/bottom-sheet/DomBottomSheet.vue",
|
|
4648
|
+
"section": "mobile",
|
|
4649
|
+
"slug": "bottom-sheet",
|
|
4650
|
+
"exportName": "DomBottomSheet",
|
|
4651
|
+
"route": "/mobile/bottom-sheet",
|
|
4652
|
+
"doc": {
|
|
4653
|
+
"name": "Bottom sheet",
|
|
4654
|
+
"tag": "<DomBottomSheet>",
|
|
4655
|
+
"description": "A modal content sheet with configurable snap heights, a draggable and keyboard-operable handle, scrolling body, and pinned footer. Uses the shared drawer for focus, dismissal, and scroll locking. Works standalone or in the DomAppShell overlay slot.",
|
|
4656
|
+
"slots": [
|
|
4657
|
+
{
|
|
4658
|
+
"name": "(default)",
|
|
4659
|
+
"payload": "{ close, expand }",
|
|
4660
|
+
"description": "Scrollable sheet content."
|
|
4661
|
+
},
|
|
4662
|
+
{
|
|
4663
|
+
"name": "header",
|
|
4664
|
+
"description": "Custom heading content beside the close button."
|
|
4665
|
+
},
|
|
4666
|
+
{
|
|
4667
|
+
"name": "footer",
|
|
4668
|
+
"payload": "{ close, expand }",
|
|
4669
|
+
"description": "Pinned controls, such as a reply composer."
|
|
4670
|
+
}
|
|
4671
|
+
],
|
|
4672
|
+
"events": [
|
|
4673
|
+
{
|
|
4674
|
+
"name": "update:modelValue",
|
|
4675
|
+
"payload": "boolean",
|
|
4676
|
+
"description": "Open or dismiss the sheet."
|
|
4677
|
+
},
|
|
4678
|
+
{
|
|
4679
|
+
"name": "update:snapPoint",
|
|
4680
|
+
"payload": "number",
|
|
4681
|
+
"description": "The selected fraction of the available sheet viewport."
|
|
4682
|
+
}
|
|
4683
|
+
],
|
|
4684
|
+
"keyboard": [
|
|
4685
|
+
{
|
|
4686
|
+
"keys": "Handle: Arrow Up / Down",
|
|
4687
|
+
"action": "Expand or collapse to the next visible stop."
|
|
4688
|
+
},
|
|
4689
|
+
{
|
|
4690
|
+
"keys": "Handle: Home / End",
|
|
4691
|
+
"action": "Choose the smallest or largest visible stop."
|
|
4692
|
+
},
|
|
4693
|
+
{
|
|
4694
|
+
"keys": "Handle: Enter / Space",
|
|
4695
|
+
"action": "Cycle through visible snap heights."
|
|
4696
|
+
},
|
|
4697
|
+
{
|
|
4698
|
+
"keys": "Escape",
|
|
4699
|
+
"action": "Dismiss and return focus to the opener."
|
|
4700
|
+
}
|
|
4701
|
+
]
|
|
4702
|
+
},
|
|
4703
|
+
"studio": {}
|
|
4704
|
+
},
|
|
3860
4705
|
{
|
|
3861
4706
|
"id": "mobile/list-item",
|
|
3862
4707
|
"path": "../mobile/list-item/DomAppListItem.vue",
|
|
@@ -3867,7 +4712,7 @@ export const componentCatalog = [
|
|
|
3867
4712
|
"doc": {
|
|
3868
4713
|
"name": "App list item",
|
|
3869
4714
|
"tag": "<DomAppListItem>",
|
|
3870
|
-
"description": "A touch-sized
|
|
4715
|
+
"description": "A touch-sized row that works in any layout. Use as=\"div\" for rows containing switches, inputs, or other controls so interactive elements are never nested inside a button.",
|
|
3871
4716
|
"slots": [
|
|
3872
4717
|
{
|
|
3873
4718
|
"name": "icon",
|
|
@@ -3890,6 +4735,41 @@ export const componentCatalog = [
|
|
|
3890
4735
|
},
|
|
3891
4736
|
"studio": {}
|
|
3892
4737
|
},
|
|
4738
|
+
{
|
|
4739
|
+
"id": "mobile/profile",
|
|
4740
|
+
"path": "../mobile/profile/DomAppProfile.vue",
|
|
4741
|
+
"section": "mobile",
|
|
4742
|
+
"slug": "profile",
|
|
4743
|
+
"exportName": "DomAppProfile",
|
|
4744
|
+
"route": "/mobile/profile",
|
|
4745
|
+
"doc": {
|
|
4746
|
+
"name": "App profile",
|
|
4747
|
+
"tag": "<DomAppProfile>",
|
|
4748
|
+
"description": "An iOS-style account header with a circular profile image, name, email, and an optional action. Place it above settings rows or inside any app stack screen.",
|
|
4749
|
+
"slots": [
|
|
4750
|
+
{
|
|
4751
|
+
"name": "actions",
|
|
4752
|
+
"description": "Replace the default profile action with account controls."
|
|
4753
|
+
}
|
|
4754
|
+
],
|
|
4755
|
+
"events": [
|
|
4756
|
+
{
|
|
4757
|
+
"name": "action",
|
|
4758
|
+
"payload": "()",
|
|
4759
|
+
"description": "Fired when the profile action is selected. The application owns navigation or editing."
|
|
4760
|
+
}
|
|
4761
|
+
],
|
|
4762
|
+
"playground": {
|
|
4763
|
+
"mobileSlot": "content",
|
|
4764
|
+
"initial": {
|
|
4765
|
+
"name": "Alex Morgan",
|
|
4766
|
+
"email": "alex@example.com",
|
|
4767
|
+
"src": "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?auto=format&fit=crop&crop=faces&w=192&h=192&q=80"
|
|
4768
|
+
}
|
|
4769
|
+
}
|
|
4770
|
+
},
|
|
4771
|
+
"studio": {}
|
|
4772
|
+
},
|
|
3893
4773
|
{
|
|
3894
4774
|
"id": "mobile/safe-area",
|
|
3895
4775
|
"path": "../mobile/safe-area/DomSafeArea.vue",
|
|
@@ -3900,7 +4780,7 @@ export const componentCatalog = [
|
|
|
3900
4780
|
"doc": {
|
|
3901
4781
|
"name": "Safe area",
|
|
3902
4782
|
"tag": "<DomSafeArea>",
|
|
3903
|
-
"description": "Applies safe-area
|
|
4783
|
+
"description": "Applies selected device safe-area insets in any layout. App shell and app stack already reserve their own insets, so no extra wrapper is needed there. Enable viewport-fit=cover in the app viewport meta tag for edge-to-edge iOS layouts.",
|
|
3904
4784
|
"slots": [
|
|
3905
4785
|
{
|
|
3906
4786
|
"name": "(default)",
|
|
@@ -3908,7 +4788,7 @@ export const componentCatalog = [
|
|
|
3908
4788
|
}
|
|
3909
4789
|
],
|
|
3910
4790
|
"playground": {
|
|
3911
|
-
"mobileSlot": "
|
|
4791
|
+
"mobileSlot": "safe-area"
|
|
3912
4792
|
}
|
|
3913
4793
|
},
|
|
3914
4794
|
"studio": {}
|
|
@@ -3923,7 +4803,7 @@ export const componentCatalog = [
|
|
|
3923
4803
|
"doc": {
|
|
3924
4804
|
"name": "App shell",
|
|
3925
4805
|
"tag": "<DomAppShell>",
|
|
3926
|
-
"description": "A
|
|
4806
|
+
"description": "A bounded app viewport with safe areas, pinned top and bottom slots, and one scrolling content region. Fills the viewport by default; use height=\"100%\" only inside an explicitly sized parent. Set content-scroll to false when a nested DomAppStack owns scrolling.",
|
|
3927
4807
|
"slots": [
|
|
3928
4808
|
{
|
|
3929
4809
|
"name": "top",
|
|
@@ -3935,15 +4815,26 @@ export const componentCatalog = [
|
|
|
3935
4815
|
},
|
|
3936
4816
|
{
|
|
3937
4817
|
"name": "bottom",
|
|
3938
|
-
"
|
|
4818
|
+
"payload": "{ keyboardOpen }",
|
|
4819
|
+
"description": "Bottom navigation or persistent controls. Receives the detected keyboard state."
|
|
3939
4820
|
},
|
|
3940
4821
|
{
|
|
3941
4822
|
"name": "overlay",
|
|
3942
4823
|
"description": "Absolute overlay layer for drawers, action sheets, and app-level panels."
|
|
3943
4824
|
}
|
|
3944
4825
|
],
|
|
4826
|
+
"events": [
|
|
4827
|
+
{
|
|
4828
|
+
"name": "keyboard-change",
|
|
4829
|
+
"payload": "{ open, height }",
|
|
4830
|
+
"description": "Estimated keyboard state or the app-supplied native keyboard inset."
|
|
4831
|
+
}
|
|
4832
|
+
],
|
|
3945
4833
|
"playground": {
|
|
3946
|
-
"mobileSlot": "shell"
|
|
4834
|
+
"mobileSlot": "shell",
|
|
4835
|
+
"initial": {
|
|
4836
|
+
"height": "100%"
|
|
4837
|
+
}
|
|
3947
4838
|
}
|
|
3948
4839
|
},
|
|
3949
4840
|
"studio": {}
|
|
@@ -3958,16 +4849,21 @@ export const componentCatalog = [
|
|
|
3958
4849
|
"doc": {
|
|
3959
4850
|
"name": "App stack",
|
|
3960
4851
|
"tag": "<DomAppStack>",
|
|
3961
|
-
"description": "A
|
|
4852
|
+
"description": "A bounded screen stack with an iOS-style back button and sliding title on mobile, desktop breadcrumbs, and lazy screens. Fills the viewport by default. Inside DomAppShell, set height=\"100%\" and disable the shell content-scroll so each screen owns scrolling.",
|
|
3962
4853
|
"slots": [
|
|
3963
4854
|
{
|
|
3964
4855
|
"name": "(default)",
|
|
3965
4856
|
"description": "Optional DomAppStackScreen children used to register slot-driven screens."
|
|
3966
4857
|
},
|
|
4858
|
+
{
|
|
4859
|
+
"name": "header",
|
|
4860
|
+
"payload": "{ activeScreen, canGoBack, back, path }",
|
|
4861
|
+
"description": "Replace the mobile header; the header transitions with its screen."
|
|
4862
|
+
},
|
|
3967
4863
|
{
|
|
3968
4864
|
"name": "breadcrumb",
|
|
3969
4865
|
"payload": "{ crumbs, canGoBack, back, goTo, push, path }",
|
|
3970
|
-
"description": "Replace the breadcrumb and back control while keeping the stack state."
|
|
4866
|
+
"description": "Replace the desktop breadcrumb and back control while keeping the stack state."
|
|
3971
4867
|
}
|
|
3972
4868
|
],
|
|
3973
4869
|
"events": [
|
|
@@ -3993,8 +4889,9 @@ export const componentCatalog = [
|
|
|
3993
4889
|
}
|
|
3994
4890
|
],
|
|
3995
4891
|
"playground": {
|
|
3996
|
-
"mobileSlot": "
|
|
4892
|
+
"mobileSlot": "stack",
|
|
3997
4893
|
"initial": {
|
|
4894
|
+
"height": "100%",
|
|
3998
4895
|
"root": "settings",
|
|
3999
4896
|
"screens": [
|
|
4000
4897
|
{
|
|
@@ -4003,12 +4900,51 @@ export const componentCatalog = [
|
|
|
4003
4900
|
"children": [
|
|
4004
4901
|
"account",
|
|
4005
4902
|
"notifications"
|
|
4006
|
-
]
|
|
4903
|
+
],
|
|
4904
|
+
"description": ""
|
|
4007
4905
|
},
|
|
4008
4906
|
{
|
|
4009
4907
|
"id": "account",
|
|
4010
4908
|
"title": "Account",
|
|
4011
|
-
"description": "Profile
|
|
4909
|
+
"description": "Profile and preferences.",
|
|
4910
|
+
"children": [
|
|
4911
|
+
"general",
|
|
4912
|
+
"apps"
|
|
4913
|
+
]
|
|
4914
|
+
},
|
|
4915
|
+
{
|
|
4916
|
+
"id": "general",
|
|
4917
|
+
"title": "General",
|
|
4918
|
+
"children": [
|
|
4919
|
+
"language"
|
|
4920
|
+
],
|
|
4921
|
+
"description": ""
|
|
4922
|
+
},
|
|
4923
|
+
{
|
|
4924
|
+
"id": "language",
|
|
4925
|
+
"title": "Language & Region",
|
|
4926
|
+
"description": "English (UK), United Kingdom."
|
|
4927
|
+
},
|
|
4928
|
+
{
|
|
4929
|
+
"id": "apps",
|
|
4930
|
+
"title": "Apps",
|
|
4931
|
+
"children": [
|
|
4932
|
+
"calendar"
|
|
4933
|
+
],
|
|
4934
|
+
"description": ""
|
|
4935
|
+
},
|
|
4936
|
+
{
|
|
4937
|
+
"id": "calendar",
|
|
4938
|
+
"title": "Calendar",
|
|
4939
|
+
"children": [
|
|
4940
|
+
"calendar-notifications"
|
|
4941
|
+
],
|
|
4942
|
+
"description": ""
|
|
4943
|
+
},
|
|
4944
|
+
{
|
|
4945
|
+
"id": "calendar-notifications",
|
|
4946
|
+
"title": "Notifications",
|
|
4947
|
+
"description": "Event reminders, invitations, and shared calendars."
|
|
4012
4948
|
},
|
|
4013
4949
|
{
|
|
4014
4950
|
"id": "notifications",
|
|
@@ -4021,6 +4957,58 @@ export const componentCatalog = [
|
|
|
4021
4957
|
},
|
|
4022
4958
|
"studio": {}
|
|
4023
4959
|
},
|
|
4960
|
+
{
|
|
4961
|
+
"id": "mobile/swipe-actions",
|
|
4962
|
+
"path": "../mobile/swipe-actions/DomSwipeActions.vue",
|
|
4963
|
+
"section": "mobile",
|
|
4964
|
+
"slug": "swipe-actions",
|
|
4965
|
+
"exportName": "DomSwipeActions",
|
|
4966
|
+
"route": "/mobile/swipe-actions",
|
|
4967
|
+
"doc": {
|
|
4968
|
+
"name": "Swipe actions",
|
|
4969
|
+
"tag": "<DomSwipeActions>",
|
|
4970
|
+
"description": "Reveal row actions with a horizontal swipe while preserving vertical scrolling. Includes an Actions button, keyboard access, coordinated open rows, and opt-in full-swipe shortcuts. Applications own mutations and undo.",
|
|
4971
|
+
"slots": [
|
|
4972
|
+
{
|
|
4973
|
+
"name": "(default)",
|
|
4974
|
+
"description": "Row content, including an ordinary button or link."
|
|
4975
|
+
},
|
|
4976
|
+
{
|
|
4977
|
+
"name": "action",
|
|
4978
|
+
"payload": "{ action, side }",
|
|
4979
|
+
"description": "Optional visual content inside each action button."
|
|
4980
|
+
}
|
|
4981
|
+
],
|
|
4982
|
+
"events": [
|
|
4983
|
+
{
|
|
4984
|
+
"name": "action",
|
|
4985
|
+
"payload": "SwipeActionPayload",
|
|
4986
|
+
"typeRef": "SwipeActionPayload",
|
|
4987
|
+
"description": "An enabled action selected by button or full swipe. source is button or swipe."
|
|
4988
|
+
},
|
|
4989
|
+
{
|
|
4990
|
+
"name": "open",
|
|
4991
|
+
"payload": "string",
|
|
4992
|
+
"description": "The revealed side: start, end, or menu."
|
|
4993
|
+
},
|
|
4994
|
+
{
|
|
4995
|
+
"name": "close",
|
|
4996
|
+
"description": "All action controls have closed."
|
|
4997
|
+
}
|
|
4998
|
+
],
|
|
4999
|
+
"keyboard": [
|
|
5000
|
+
{
|
|
5001
|
+
"keys": "Actions button",
|
|
5002
|
+
"action": "Shows every action without requiring a gesture."
|
|
5003
|
+
},
|
|
5004
|
+
{
|
|
5005
|
+
"keys": "Escape",
|
|
5006
|
+
"action": "Closes revealed actions and returns focus to Actions."
|
|
5007
|
+
}
|
|
5008
|
+
]
|
|
5009
|
+
},
|
|
5010
|
+
"studio": {}
|
|
5011
|
+
},
|
|
4024
5012
|
{
|
|
4025
5013
|
"id": "mobile/top-bar",
|
|
4026
5014
|
"path": "../mobile/top-bar/DomAppTopBar.vue",
|
|
@@ -4100,6 +5088,36 @@ export const componentCatalog = [
|
|
|
4100
5088
|
},
|
|
4101
5089
|
"studio": {}
|
|
4102
5090
|
},
|
|
5091
|
+
{
|
|
5092
|
+
"id": "visual/audio-visualizer",
|
|
5093
|
+
"path": "../visual/audio-visualizer/DomAudioVisualizer.vue",
|
|
5094
|
+
"section": "visual",
|
|
5095
|
+
"slug": "audio-visualizer",
|
|
5096
|
+
"exportName": "DomAudioVisualizer",
|
|
5097
|
+
"route": "/visual/audio-visualizer",
|
|
5098
|
+
"doc": {
|
|
5099
|
+
"nav": {
|
|
5100
|
+
"section": "ai"
|
|
5101
|
+
},
|
|
5102
|
+
"name": "Audio visualizer",
|
|
5103
|
+
"tag": "<DomAudioVisualizer>",
|
|
5104
|
+
"description": "A live waveform of input levels from a MediaStream. Shows real audio activity without recording, playing, or transmitting the stream.",
|
|
5105
|
+
"icon": "M4 10v4M8 6v12M12 3v18M16 7v10M20 10v4",
|
|
5106
|
+
"events": [
|
|
5107
|
+
{
|
|
5108
|
+
"name": "level",
|
|
5109
|
+
"payload": "(level: number)",
|
|
5110
|
+
"description": "Measured RMS amplitude from 0 to 1, emitted at most ten times per second. This is input activity, not speech detection."
|
|
5111
|
+
},
|
|
5112
|
+
{
|
|
5113
|
+
"name": "error",
|
|
5114
|
+
"payload": "({ name, message })",
|
|
5115
|
+
"description": "Web Audio could not analyse the stream. Capture remains owned by the caller."
|
|
5116
|
+
}
|
|
5117
|
+
]
|
|
5118
|
+
},
|
|
5119
|
+
"studio": {}
|
|
5120
|
+
},
|
|
4103
5121
|
{
|
|
4104
5122
|
"id": "visual/avatar",
|
|
4105
5123
|
"path": "../visual/avatar/DomAvatar.vue",
|
|
@@ -4510,5 +5528,128 @@ export const componentCatalog = [
|
|
|
4510
5528
|
]
|
|
4511
5529
|
},
|
|
4512
5530
|
"studio": {}
|
|
5531
|
+
},
|
|
5532
|
+
{
|
|
5533
|
+
"id": "designer/backdrop-editor",
|
|
5534
|
+
"path": "../designer/backdrop-editor/DomBackdropEditor.vue",
|
|
5535
|
+
"section": "designer",
|
|
5536
|
+
"slug": "backdrop-editor",
|
|
5537
|
+
"exportName": "DomBackdropEditor",
|
|
5538
|
+
"route": "/designer/backdrop-editor",
|
|
5539
|
+
"doc": {
|
|
5540
|
+
"name": "Backdrop editor",
|
|
5541
|
+
"description": "Beta controlled CSS backdrop editor shared with the theme designer."
|
|
5542
|
+
},
|
|
5543
|
+
"studio": {}
|
|
5544
|
+
},
|
|
5545
|
+
{
|
|
5546
|
+
"id": "designer/background-editor",
|
|
5547
|
+
"path": "../designer/background-editor/DomBackgroundEditor.vue",
|
|
5548
|
+
"section": "designer",
|
|
5549
|
+
"slug": "background-editor",
|
|
5550
|
+
"exportName": "DomBackgroundEditor",
|
|
5551
|
+
"route": "/designer/background-editor",
|
|
5552
|
+
"doc": {
|
|
5553
|
+
"name": "Background editor",
|
|
5554
|
+
"description": "Beta controlled CSS background editor shared with the theme designer."
|
|
5555
|
+
},
|
|
5556
|
+
"studio": {}
|
|
5557
|
+
},
|
|
5558
|
+
{
|
|
5559
|
+
"id": "designer/border-editor",
|
|
5560
|
+
"path": "../designer/border-editor/DomBorderEditor.vue",
|
|
5561
|
+
"section": "designer",
|
|
5562
|
+
"slug": "border-editor",
|
|
5563
|
+
"exportName": "DomBorderEditor",
|
|
5564
|
+
"route": "/designer/border-editor",
|
|
5565
|
+
"doc": {
|
|
5566
|
+
"name": "Border editor",
|
|
5567
|
+
"description": "Beta controlled CSS border width, style and colour, shared with the CSS button creator."
|
|
5568
|
+
},
|
|
5569
|
+
"studio": {}
|
|
5570
|
+
},
|
|
5571
|
+
{
|
|
5572
|
+
"id": "designer/color-swatch",
|
|
5573
|
+
"path": "../designer/color-swatch/DomColorSwatch.vue",
|
|
5574
|
+
"section": "designer",
|
|
5575
|
+
"slug": "color-swatch",
|
|
5576
|
+
"exportName": "DomColorSwatch",
|
|
5577
|
+
"route": "/designer/color-swatch",
|
|
5578
|
+
"doc": {
|
|
5579
|
+
"name": "Color swatch",
|
|
5580
|
+
"description": "Beta CSS colour swatch with an editable expression and native picker."
|
|
5581
|
+
},
|
|
5582
|
+
"studio": {}
|
|
5583
|
+
},
|
|
5584
|
+
{
|
|
5585
|
+
"id": "designer/frame",
|
|
5586
|
+
"path": "../designer/frame/DomDesignerFrame.vue",
|
|
5587
|
+
"section": "designer",
|
|
5588
|
+
"slug": "frame",
|
|
5589
|
+
"exportName": "DomDesignerFrame",
|
|
5590
|
+
"route": "/designer/frame",
|
|
5591
|
+
"doc": {
|
|
5592
|
+
"name": "Designer frame",
|
|
5593
|
+
"description": "An ordinary container with independent flow, flex, grid or absolute child layout.",
|
|
5594
|
+
"slots": [
|
|
5595
|
+
{
|
|
5596
|
+
"name": "default",
|
|
5597
|
+
"description": "Frame content. Applications own child placement."
|
|
5598
|
+
}
|
|
5599
|
+
]
|
|
5600
|
+
},
|
|
5601
|
+
"studio": {}
|
|
5602
|
+
},
|
|
5603
|
+
{
|
|
5604
|
+
"id": "designer/frame",
|
|
5605
|
+
"path": "../designer/frame/DomFrameLayoutEditor.vue",
|
|
5606
|
+
"section": "designer",
|
|
5607
|
+
"slug": "frame",
|
|
5608
|
+
"exportName": "DomFrameLayoutEditor",
|
|
5609
|
+
"route": "/designer/frame",
|
|
5610
|
+
"doc": {
|
|
5611
|
+
"name": "Frame layout editor",
|
|
5612
|
+
"description": "Controlled layout settings for flow, flex, grid and absolute frames."
|
|
5613
|
+
},
|
|
5614
|
+
"studio": {}
|
|
5615
|
+
},
|
|
5616
|
+
{
|
|
5617
|
+
"id": "designer/layers",
|
|
5618
|
+
"path": "../designer/layers/DomDesignerLayers.vue",
|
|
5619
|
+
"section": "designer",
|
|
5620
|
+
"slug": "layers",
|
|
5621
|
+
"exportName": "DomDesignerLayers",
|
|
5622
|
+
"route": "/designer/layers",
|
|
5623
|
+
"doc": {
|
|
5624
|
+
"name": "Designer layers",
|
|
5625
|
+
"description": "Beta layer tree shared with Studio. Accepts the full DomTreeView props, slots and events."
|
|
5626
|
+
},
|
|
5627
|
+
"studio": {}
|
|
5628
|
+
},
|
|
5629
|
+
{
|
|
5630
|
+
"id": "designer/shadow-editor",
|
|
5631
|
+
"path": "../designer/shadow-editor/DomShadowEditor.vue",
|
|
5632
|
+
"section": "designer",
|
|
5633
|
+
"slug": "shadow-editor",
|
|
5634
|
+
"exportName": "DomShadowEditor",
|
|
5635
|
+
"route": "/designer/shadow-editor",
|
|
5636
|
+
"doc": {
|
|
5637
|
+
"name": "Shadow editor",
|
|
5638
|
+
"description": "Beta controlled CSS box-shadow layers: drop, inner and ring."
|
|
5639
|
+
},
|
|
5640
|
+
"studio": {}
|
|
5641
|
+
},
|
|
5642
|
+
{
|
|
5643
|
+
"id": "designer/stage",
|
|
5644
|
+
"path": "../designer/stage/DomDesignerStage.vue",
|
|
5645
|
+
"section": "designer",
|
|
5646
|
+
"slug": "stage",
|
|
5647
|
+
"exportName": "DomDesignerStage",
|
|
5648
|
+
"route": "/designer/stage",
|
|
5649
|
+
"doc": {
|
|
5650
|
+
"name": "Designer stage",
|
|
5651
|
+
"description": "Beta HTML stage with controlled selection and opt-in absolute movement and resizing."
|
|
5652
|
+
},
|
|
5653
|
+
"studio": {}
|
|
4513
5654
|
}
|
|
4514
5655
|
];
|