@getdom/studio 0.1.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.md +109 -0
- package/README.md +44 -0
- package/SKILL.md +83 -0
- package/package.json +73 -0
- package/public/llms.txt +57 -0
- package/public/skills.sh +11 -0
- package/src/pages/_layout/componentCatalog.generated.js +4514 -0
- package/src/pages/_layout/componentInspector.js +60 -0
- package/src/pages/_layout/componentManager.js +192 -0
- package/src/pages/_layout/componentRuntimeRecords.js +49 -0
- package/src/pages/_layout/inspector/componentRegistry.js +639 -0
- package/src/pages/_layout/inspector/serialize.js +134 -0
- package/src/pages/_layout/inspector/useInspector.js +293 -0
- package/src/pages/components/accordion/DomAccordion.vue +39 -0
- package/src/pages/components/breadcrumbs/DomBreadcrumbs.vue +347 -0
- package/src/pages/components/button/DomButton.vue +132 -0
- package/src/pages/components/command-palette/DomCommandPalette.vue +482 -0
- package/src/pages/components/context-menu/DomContextMenu.vue +178 -0
- package/src/pages/components/dialog/DomDialog.vue +271 -0
- package/src/pages/components/dialog/DomDialogSchemaForm.vue +72 -0
- package/src/pages/components/dialog/DomDialogStack.vue +289 -0
- package/src/pages/components/dialog/useDialogs.js +253 -0
- package/src/pages/components/drawer/DomDrawer.vue +159 -0
- package/src/pages/components/dropdown/DomDropdown.vue +261 -0
- package/src/pages/components/icon-button/DomIconButton.vue +155 -0
- package/src/pages/components/lightbox/DomLightbox.vue +1561 -0
- package/src/pages/components/menu/DomMenu.vue +359 -0
- package/src/pages/components/menu/DomMenuItem.vue +233 -0
- package/src/pages/components/menu/DomMenuLabel.vue +19 -0
- package/src/pages/components/menu/DomMenuSeparator.vue +14 -0
- package/src/pages/components/menu/menuContext.js +11 -0
- package/src/pages/components/menu/menuPlacement.js +26 -0
- package/src/pages/components/menu/submenu.js +58 -0
- package/src/pages/components/pagination/DomPagination.vue +265 -0
- package/src/pages/components/playground/DomRenderer.vue +48 -0
- package/src/pages/components/popover/DomPopover.vue +244 -0
- package/src/pages/components/profile-menu/DomProfileMenu.vue +408 -0
- package/src/pages/components/profile-menu/DomProfileMenuItemContent.vue +45 -0
- package/src/pages/components/scroll-menu/DomScrollMenu.vue +430 -0
- package/src/pages/components/scroll-menu/DomScrollMenuItem.vue +212 -0
- package/src/pages/components/scroll-menu/scrollMenuContext.js +22 -0
- package/src/pages/components/splitter-panel/DomSplitterPanel.vue +283 -0
- package/src/pages/components/stepper/DomStepper.vue +386 -0
- package/src/pages/components/tabs/DomTabs.vue +149 -0
- package/src/pages/components/theme-switcher/DomThemeSwitcher.vue +226 -0
- package/src/pages/components/toast/DomToastItem.vue +52 -0
- package/src/pages/components/toast/DomToastStack.vue +768 -0
- package/src/pages/components/toast/useToasts.js +237 -0
- package/src/pages/components/toolbar/DomToolbar.vue +158 -0
- package/src/pages/components/tooltip/DomTooltip.vue +69 -0
- package/src/pages/components/tooltip/vDomTooltip.js +106 -0
- package/src/pages/components/tree-view/DomTreeView.vue +961 -0
- package/src/pages/components/tree-view/treeSchemas.js +129 -0
- package/src/pages/components/tree-view/treeUtils.js +228 -0
- package/src/pages/data/_shared/calculateVirtualWindow.js +101 -0
- package/src/pages/data/_shared/resourceRecord.js +29 -0
- package/src/pages/data/activity-timeline/DomActivityTimeline.vue +417 -0
- package/src/pages/data/agent-chat/DomAgentChatShell.vue +565 -0
- package/src/pages/data/agent-chat/DomAgentConversation.vue +737 -0
- package/src/pages/data/agent-chat/DomAgentConversationList.vue +319 -0
- package/src/pages/data/agent-chat/examples/agentChatMockApi.js +620 -0
- package/src/pages/data/agent-chat/examples/useAgentChatDemoStore.js +730 -0
- package/src/pages/data/data-grid/DataGridVirtualRows.vue +220 -0
- package/src/pages/data/data-grid/DomDataGrid.vue +1643 -0
- package/src/pages/data/document-editor/DomDocumentEditor.vue +3030 -0
- package/src/pages/data/document-editor/documentEditorCodeBlock.js +282 -0
- package/src/pages/data/document-editor/examples/documentEditorMockApi.js +272 -0
- package/src/pages/data/document-editor/examples/useDocumentEditorDemoStore.js +284 -0
- package/src/pages/data/filter-bar/DomFilterBar.vue +533 -0
- package/src/pages/data/kanban/DomKanban.vue +1703 -0
- package/src/pages/data/kanban/kanbanApi.js +80 -0
- package/src/pages/data/media-browser/DomMediaBrowser.vue +2344 -0
- package/src/pages/data/media-browser/examples/mediaBrowserMockApi.js +653 -0
- package/src/pages/data/media-browser/examples/useMediaBrowserDemoStore.js +1157 -0
- package/src/pages/data/month-calendar/DomMonthCalendar.vue +1718 -0
- package/src/pages/data/week-planner/DomWeekPlanner.vue +2308 -0
- package/src/pages/dev/code-block/DomCodeBlock.vue +263 -0
- package/src/pages/dev/json-viewer/DomJsonViewer.vue +962 -0
- package/src/pages/forms/_shared/DomFieldLoadingSpinner.vue +12 -0
- package/src/pages/forms/_shared/options.js +61 -0
- package/src/pages/forms/_shared/useOptionMenu.js +59 -0
- package/src/pages/forms/autocomplete/DomAutocomplete.vue +180 -0
- package/src/pages/forms/calendar/DomCalendar.vue +442 -0
- package/src/pages/forms/checkbox/DomCheckbox.vue +69 -0
- package/src/pages/forms/class-toggle-input/DomClassToggleInput.vue +316 -0
- package/src/pages/forms/code-input/DomCodeInput.vue +202 -0
- package/src/pages/forms/color-input/DomColorInput.vue +118 -0
- package/src/pages/forms/combobox/DomCombobox.vue +237 -0
- package/src/pages/forms/confirmation-code-input/DomConfirmationCodeInput.vue +345 -0
- package/src/pages/forms/date-picker/DomDatePicker.vue +299 -0
- package/src/pages/forms/date-time-picker/DomDateTimePicker.vue +630 -0
- package/src/pages/forms/email-input/DomEmailInput.vue +55 -0
- package/src/pages/forms/field/DomField.vue +267 -0
- package/src/pages/forms/field/fieldLayout.js +1 -0
- package/src/pages/forms/field/fieldProps.js +114 -0
- package/src/pages/forms/field/layouts/DomGridFieldLayout.vue +38 -0
- package/src/pages/forms/field/useField.js +343 -0
- package/src/pages/forms/field/validators.js +364 -0
- package/src/pages/forms/file-upload/DomFileUpload.vue +361 -0
- package/src/pages/forms/form/DomForm.vue +985 -0
- package/src/pages/forms/form/adapters/fieldBuilder.js +45 -0
- package/src/pages/forms/form/adapters/jsonSchema.js +264 -0
- package/src/pages/forms/form/adapters/shared.js +53 -0
- package/src/pages/forms/form/adapters/zod.js +235 -0
- package/src/pages/forms/form/formApi.js +38 -0
- package/src/pages/forms/form/formDefinition.js +392 -0
- package/src/pages/forms/form/schemaAdapter.js +54 -0
- package/src/pages/forms/icon-selector/DomIconSelector.vue +460 -0
- package/src/pages/forms/icon-selector/iconSelectorItems.js +490 -0
- package/src/pages/forms/input-group/DomInputGroup.vue +232 -0
- package/src/pages/forms/json-input/DomJsonInput.vue +227 -0
- package/src/pages/forms/json-list-input/DomJsonListInput.vue +206 -0
- package/src/pages/forms/listbox/DomListbox.vue +105 -0
- package/src/pages/forms/money-input/DomMoneyInput.vue +147 -0
- package/src/pages/forms/native-select/DomNativeSelect.vue +67 -0
- package/src/pages/forms/number-input/DomNumberInput.vue +47 -0
- package/src/pages/forms/password-input/DomPasswordInput.vue +218 -0
- package/src/pages/forms/password-input/pwnedPasswords.js +47 -0
- package/src/pages/forms/password-strength/DomPasswordStrength.vue +128 -0
- package/src/pages/forms/password-strength/passwordStrength.js +92 -0
- package/src/pages/forms/position-input/DomPositionInput.vue +83 -0
- package/src/pages/forms/radio-group/DomRadioGroup.vue +102 -0
- package/src/pages/forms/range-input/DomRangeInput.vue +296 -0
- package/src/pages/forms/select/DomSelect.vue +479 -0
- package/src/pages/forms/select-input/DomSelectInput.vue +155 -0
- package/src/pages/forms/tag-combobox/DomTagCombobox.vue +358 -0
- package/src/pages/forms/text-input/DomTextInput.vue +48 -0
- package/src/pages/forms/textarea-composer/DomTextareaComposer.vue +234 -0
- package/src/pages/forms/textarea-input/DomTextareaInput.vue +86 -0
- package/src/pages/forms/textarea-input/useTextareaAutosize.js +147 -0
- package/src/pages/forms/time-selector/DomTimeSelector.vue +389 -0
- package/src/pages/forms/time-selector/timeUtils.js +194 -0
- package/src/pages/forms/toggle/DomToggle.vue +158 -0
- package/src/pages/forms/toggle-button/DomToggleButton.vue +88 -0
- package/src/pages/forms/toggle-button-group/DomToggleButtonGroup.vue +340 -0
- package/src/pages/forms/url-input/DomUrlInput.vue +55 -0
- package/src/pages/forms/wysiwyg/DomWysiwyg.vue +204 -0
- package/src/pages/lib/css/color.js +245 -0
- package/src/pages/lib/headless/accordion.d.ts +7 -0
- package/src/pages/lib/headless/accordion.js +246 -0
- package/src/pages/lib/headless/autocomplete.d.ts +4 -0
- package/src/pages/lib/headless/autocomplete.js +33 -0
- package/src/pages/lib/headless/base.d.ts +25 -0
- package/src/pages/lib/headless/base.js +127 -0
- package/src/pages/lib/headless/checkbox.d.ts +19 -0
- package/src/pages/lib/headless/checkbox.js +99 -0
- package/src/pages/lib/headless/combobox.d.ts +7 -0
- package/src/pages/lib/headless/combobox.js +488 -0
- package/src/pages/lib/headless/dialog.d.ts +23 -0
- package/src/pages/lib/headless/dialog.js +384 -0
- package/src/pages/lib/headless/drawer.d.ts +21 -0
- package/src/pages/lib/headless/drawer.js +682 -0
- package/src/pages/lib/headless/dropdown.d.ts +19 -0
- package/src/pages/lib/headless/dropdown.js +412 -0
- package/src/pages/lib/headless/floating-effect.js +118 -0
- package/src/pages/lib/headless/floating.d.ts +34 -0
- package/src/pages/lib/headless/floating.js +382 -0
- package/src/pages/lib/headless/index.d.ts +19 -0
- package/src/pages/lib/headless/index.js +19 -0
- package/src/pages/lib/headless/listbox.d.ts +19 -0
- package/src/pages/lib/headless/listbox.js +126 -0
- package/src/pages/lib/headless/menu.d.ts +18 -0
- package/src/pages/lib/headless/menu.js +117 -0
- package/src/pages/lib/headless/popover-panel.d.ts +18 -0
- package/src/pages/lib/headless/popover-panel.js +309 -0
- package/src/pages/lib/headless/popover.d.ts +19 -0
- package/src/pages/lib/headless/popover.js +391 -0
- package/src/pages/lib/headless/radio-group.d.ts +19 -0
- package/src/pages/lib/headless/radio-group.js +100 -0
- package/src/pages/lib/headless/tabs.d.ts +18 -0
- package/src/pages/lib/headless/tabs.js +119 -0
- package/src/pages/lib/headless/toast.d.ts +13 -0
- package/src/pages/lib/headless/toast.js +65 -0
- package/src/pages/lib/headless/toggle.d.ts +19 -0
- package/src/pages/lib/headless/toggle.js +162 -0
- package/src/pages/lib/headless/tooltip-controller.d.ts +22 -0
- package/src/pages/lib/headless/tooltip-controller.js +549 -0
- package/src/pages/lib/headless/tooltip.d.ts +19 -0
- package/src/pages/lib/headless/tooltip.js +153 -0
- package/src/pages/lib/headless/transitions.d.ts +5 -0
- package/src/pages/lib/headless/transitions.js +89 -0
- package/src/pages/lib/vue/_internal/DomLiquidGlassSurface.vue +310 -0
- package/src/pages/lib/vue/_internal/liquidGlass.js +112 -0
- package/src/pages/lib/vue/_internal/liquidGlassConfig.js +10 -0
- package/src/pages/lib/vue/codeHighlighter.js +132 -0
- package/src/pages/lib/vue/floatingTeleportTarget.js +23 -0
- package/src/pages/lib/vue/index.d.ts +6806 -0
- package/src/pages/lib/vue/index.js +218 -0
- package/src/pages/lib/vue/useTheme.js +116 -0
- package/src/pages/mobile/action-sheet/DomActionSheet.vue +186 -0
- package/src/pages/mobile/bottom-nav/DomAppBottomNav.vue +94 -0
- package/src/pages/mobile/list-item/DomAppListItem.vue +90 -0
- package/src/pages/mobile/safe-area/DomSafeArea.vue +39 -0
- package/src/pages/mobile/shell/DomAppShell.vue +51 -0
- package/src/pages/mobile/stack/AppStackScreen.vue +63 -0
- package/src/pages/mobile/stack/DomAppStack.vue +711 -0
- package/src/pages/mobile/top-bar/DomAppTopBar.vue +67 -0
- package/src/pages/visual/alert/DomAlert.vue +363 -0
- package/src/pages/visual/avatar/DomAvatar.vue +110 -0
- package/src/pages/visual/avatar-stack/DomAvatarStack.vue +89 -0
- package/src/pages/visual/badge/DomBadge.vue +105 -0
- package/src/pages/visual/card/DomCard.vue +65 -0
- package/src/pages/visual/card-rail/DomCardRail.vue +99 -0
- package/src/pages/visual/empty-state/DomEmptyState.vue +88 -0
- package/src/pages/visual/progress/DomProgress.vue +212 -0
- package/src/pages/visual/progress/DomRadialProgress.vue +186 -0
- package/src/pages/visual/progress/DomSegmentedProgress.vue +350 -0
- package/src/pages/visual/skeleton/DomSkeleton.vue +174 -0
- package/src/pages/visual/spinner/DomSpinner.vue +122 -0
- package/src/pages/visual/status-pill/DomStatusPill.vue +75 -0
- package/src/pages/visual/text-diff/DomTextDiff.vue +577 -0
- package/src/pages/visual/text-diff/textDiff.js +300 -0
- package/src/style.css +446 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# DOM Studio Commercial License 1.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Steve O'Brien. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This license applies to DOM Studio, including the `@getdom/studio` package,
|
|
6
|
+
components, source files, examples, templates, blocks, documentation assets,
|
|
7
|
+
and modified versions of those materials (the "Software").
|
|
8
|
+
|
|
9
|
+
## Evaluation license
|
|
10
|
+
|
|
11
|
+
You may install, copy, and modify the publicly available `@getdom/studio`
|
|
12
|
+
package solely to evaluate it in local development and non-public test
|
|
13
|
+
environments.
|
|
14
|
+
|
|
15
|
+
The evaluation license does not permit you to use the Software in a production
|
|
16
|
+
environment, publish or deploy a product containing the Software, distribute a
|
|
17
|
+
product containing the Software to another person, or use the Software to
|
|
18
|
+
provide paid services to a client.
|
|
19
|
+
|
|
20
|
+
## Commercial license
|
|
21
|
+
|
|
22
|
+
A valid DOM Studio purchase grants the purchaser an ongoing, non-exclusive,
|
|
23
|
+
non-transferable commercial license, subject to the licence type identified in
|
|
24
|
+
the order confirmation.
|
|
25
|
+
|
|
26
|
+
### Individual
|
|
27
|
+
|
|
28
|
+
An Individual licence permits one named individual to:
|
|
29
|
+
|
|
30
|
+
- use and modify the Software in unlimited personal or commercial products owned by that individual;
|
|
31
|
+
- deploy and distribute those products to end users; and
|
|
32
|
+
- maintain those products for their end users.
|
|
33
|
+
|
|
34
|
+
The Individual licence does not permit sharing the Software or paid source
|
|
35
|
+
access with colleagues, employees, contractors, or clients.
|
|
36
|
+
|
|
37
|
+
### Team
|
|
38
|
+
|
|
39
|
+
A Team licence permits the purchasing legal entity to:
|
|
40
|
+
|
|
41
|
+
- allow its employees and contractors to use and modify the Software on its behalf;
|
|
42
|
+
- use the Software in unlimited products owned by that entity;
|
|
43
|
+
- deploy and distribute those products to end users; and
|
|
44
|
+
- incorporate the Software into bespoke products created for its clients.
|
|
45
|
+
|
|
46
|
+
Contractors may use the Software only while working on behalf of the purchasing
|
|
47
|
+
entity and must not retain or reuse it for unrelated work. A client may receive
|
|
48
|
+
the Software only as part of a bespoke end product and may not extract or reuse
|
|
49
|
+
it as a standalone component library unless the client obtains its own licence.
|
|
50
|
+
|
|
51
|
+
## Permitted modifications and distribution
|
|
52
|
+
|
|
53
|
+
You may modify the Software and distribute it only as an inseparable part of a
|
|
54
|
+
larger end product that provides substantial functionality beyond the Software.
|
|
55
|
+
You may include compiled or source forms when reasonably necessary to build,
|
|
56
|
+
operate, maintain, or deliver that end product, provided recipients are not
|
|
57
|
+
given rights to reuse the Software outside it.
|
|
58
|
+
|
|
59
|
+
## Restrictions
|
|
60
|
+
|
|
61
|
+
You must not:
|
|
62
|
+
|
|
63
|
+
- sell, sublicense, publish, share, or redistribute the Software as a standalone product;
|
|
64
|
+
- make the Software available as a component library, UI kit, template library, starter kit, source catalogue, or substantially similar product;
|
|
65
|
+
- use the Software to create a product whose primary purpose is to let its users build or export competing component libraries, templates, or UI kits;
|
|
66
|
+
- share account access, paid downloads, source archives, or private documentation outside the scope of the purchased licence;
|
|
67
|
+
- remove copyright, licence, or attribution notices from distributed source archives; or
|
|
68
|
+
- represent the Software as your original component library for resale or relicensing.
|
|
69
|
+
|
|
70
|
+
## Updates
|
|
71
|
+
|
|
72
|
+
A purchase described as "lifetime v1 access" includes releases published under
|
|
73
|
+
major version 1 while DOM Studio makes them available. It does not include a
|
|
74
|
+
right to future major versions, hosted services, consulting, or support unless
|
|
75
|
+
the order confirmation says otherwise.
|
|
76
|
+
|
|
77
|
+
## Ownership
|
|
78
|
+
|
|
79
|
+
The Software is licensed, not sold. Steve O'Brien retains all copyright and
|
|
80
|
+
other intellectual-property rights in the Software. You retain ownership of
|
|
81
|
+
your original application code and of original modifications that do not
|
|
82
|
+
incorporate protectable parts of the Software, subject to the rights required
|
|
83
|
+
to use any derivative work under this license.
|
|
84
|
+
|
|
85
|
+
## Termination
|
|
86
|
+
|
|
87
|
+
This license terminates automatically if you materially breach it and do not
|
|
88
|
+
remedy the breach within 14 days after written notice. On termination, you must
|
|
89
|
+
stop using and distributing the Software and delete copies under your control,
|
|
90
|
+
except where applicable law requires retention.
|
|
91
|
+
|
|
92
|
+
## Warranty and liability
|
|
93
|
+
|
|
94
|
+
The Software is provided "as is", without warranties of any kind to the maximum
|
|
95
|
+
extent permitted by law. To the maximum extent permitted by law, total liability
|
|
96
|
+
arising from the Software is limited to the amount paid for the applicable DOM
|
|
97
|
+
Studio licence. Nothing in this license excludes liability that cannot lawfully
|
|
98
|
+
be excluded.
|
|
99
|
+
|
|
100
|
+
## Governing law
|
|
101
|
+
|
|
102
|
+
This license is governed by the laws of England and Wales, and the courts of
|
|
103
|
+
England and Wales have exclusive jurisdiction, unless mandatory consumer law
|
|
104
|
+
requires otherwise.
|
|
105
|
+
|
|
106
|
+
## Questions
|
|
107
|
+
|
|
108
|
+
For licensing questions or permissions beyond this license, contact the address
|
|
109
|
+
shown on the purchaser's order confirmation or visit https://getdom.studio.
|
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# DOM Studio
|
|
2
|
+
|
|
3
|
+
DOM Studio is a Vue 3 and Web Component interface system for application UI.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install @getdom/studio
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Import the maintained Vue components and the Tailwind CSS v4 stylesheet:
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import { DomButton, DomCard, DomForm } from '@getdom/studio';
|
|
15
|
+
import '@getdom/studio/style.css';
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The explicit Vue entry point exports the same component surface:
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
import { DomButton } from '@getdom/studio/vue';
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Register the framework-neutral custom elements when required:
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
import '@getdom/studio/headless';
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Peer dependencies
|
|
31
|
+
|
|
32
|
+
- Vue 3.5 or later.
|
|
33
|
+
- Tailwind CSS 4.2 or later configured in the consuming application.
|
|
34
|
+
- Vue Router 4.6 or later.
|
|
35
|
+
- Pinia 2.3 or 3.
|
|
36
|
+
|
|
37
|
+
## Licence
|
|
38
|
+
|
|
39
|
+
The package is publicly downloadable for local evaluation. A paid DOM Studio
|
|
40
|
+
licence is required for production, deployed, distributed, commercial, or
|
|
41
|
+
client use. See `LICENSE.md` in this package for the complete terms.
|
|
42
|
+
|
|
43
|
+
Documentation, examples, licences, and source access are available from
|
|
44
|
+
[getdom.studio](https://getdom.studio).
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dom-studio
|
|
3
|
+
description: Build, edit, or review application UI with DOM Studio. Use when generating Vue UI with @getdom/studio or @getdom/studio/vue, creating editable Studio specs, composing DOM Studio blocks/components/forms/headless primitives, adding DOM Studio components or docs metadata, or replacing custom UI behavior with DOM Studio primitives.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# DOM Studio
|
|
7
|
+
|
|
8
|
+
DOM Studio is a complete Vue and Web Component UI system for app-like interfaces teams can own, edit, and ship. Prefer its blocks, Vue components, headless primitives, Studio specs, and theme tokens before inventing custom UI behavior.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Classify the screen: dashboard, chat, mail, form, login, application shell, settings, detail, or custom.
|
|
13
|
+
2. Start from the closest block or example under `src/pages/blocks` when the request matches a common app pattern.
|
|
14
|
+
3. Compose with `@getdom/studio` components before writing custom markup; `@getdom/studio/vue` exports the same Vue surface when an explicit subpath is clearer.
|
|
15
|
+
4. Use props for behavior and Tailwind CSS v4 utilities in the template for layout, spacing, typography, color, states, responsive behavior, and transitions.
|
|
16
|
+
5. Use semantic theme utilities, not raw colors, unless defining a theme.
|
|
17
|
+
6. Return a Studio spec when the UI should remain visually editable.
|
|
18
|
+
7. Validate by running the app or build and checking the changed route at desktop and mobile sizes.
|
|
19
|
+
|
|
20
|
+
Component styling is Tailwind-first. Keep scoped CSS only for intrinsic component behavior or CSS that would be materially less readable as utilities, such as coordinated container queries, complex selector relationships, pseudo-elements, and keyframes. Do not create BEM class trees solely as presentational hooks.
|
|
21
|
+
|
|
22
|
+
## Imports
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
import {
|
|
26
|
+
DomButton,
|
|
27
|
+
DomCard,
|
|
28
|
+
DomCombobox,
|
|
29
|
+
DomForm,
|
|
30
|
+
DomTextInput,
|
|
31
|
+
} from '@getdom/studio';
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The package root exports the same Vue surface as `@getdom/studio/vue`. Use headless custom elements by importing `@getdom/studio/headless`; Vite treats tags beginning with `dom-` as custom elements.
|
|
35
|
+
|
|
36
|
+
## Component Choice
|
|
37
|
+
|
|
38
|
+
- Use blocks for complete screens: dashboard, chat, mail, forms, login, and application layout.
|
|
39
|
+
- Use `DomCard` for contained app surfaces and grouped content.
|
|
40
|
+
- Use `DomButton` for actions; set `variant`, `size`, `loading`, and `disabled` with props.
|
|
41
|
+
- Use `DomDialog`, `DomDrawer`, `DomPopover`, `DomDropdown`, `DomMenu`, `DomContextMenu`, and `DomCommandPalette` instead of recreating overlays, focus handling, or keyboard navigation.
|
|
42
|
+
- Use `DomTabs`, `DomAccordion`, `DomTreeView`, and `DomScrollMenu` for structured navigation, disclosure, and scroll-linked page contents. Use `DomBreadcrumbs` for an application-owned route or resource path and `DomStepper` for controlled multi-step progress.
|
|
43
|
+
- Use `DomToastStack`, `DomToastItem`, and `useToasts` for notifications.
|
|
44
|
+
- Use `DomNativeSelect` for small native option lists, `DomListbox` for custom single-choice lists, `DomCombobox` for search plus committed selection, and `DomAutocomplete` for free text with suggestions.
|
|
45
|
+
- Use `DomCalendar` for month-grid date picking and `DomDatePicker` for typed date entry with a popover calendar.
|
|
46
|
+
- Use `DomTextareaInput` for fixed or autosizing multiline fields. Use `DomTextareaComposer` when attachment previews, leading controls, trailing actions, and submit behavior belong inside one autosizing input frame; keep upload state and attachment records in the application.
|
|
47
|
+
- Use `DomKanban` when one application-owned resource list needs status columns, card and column ordering, async creation hooks, custom card components, and drag or keyboard movement. Keep grid/calendar view switching and remote persistence in the application layer.
|
|
48
|
+
- Use `DomFilterBar` when search and logical filter values should form one controlled query shared by resource lists, grids, timelines, routes, or Pinia stores. Translate its `FilterBarQuery` at the application API boundary.
|
|
49
|
+
- Use `DomActivityTimeline` to project ordered application-owned rows into an activity trail through logical field keys. Keep querying, chronology, pagination, permissions, and persistence in the application layer.
|
|
50
|
+
- Use `DomMonthCalendar` for date-led month planning and `DomWeekPlanner` when fixed-width day swim lanes need precise timed placement, configurable drag-to-create ranges, a live current-time marker, or virtualized horizontal ranges such as a full year.
|
|
51
|
+
- Use `DomCodeInput` for prompts, snippets, templates, and structured text; use `DomJsonInput` for parsed JSON values; use `DomJsonListInput` for schema-aware arrays such as options, commands, menu rows, and inspector data.
|
|
52
|
+
- Use `DomCodeBlock` for highlighted read-only code and `DomJsonViewer` for inspecting JSON payloads, diagnostics, and implementation data.
|
|
53
|
+
- Use `DomTextDiff` for reviewable before-and-after copy, AI rewrite suggestions, SEO field replacements, and unified or split code edits.
|
|
54
|
+
- Use `DomAppShell`, `DomAppTopBar`, `DomAppBottomNav`, `DomAppListItem`, `DomSafeArea`, and `DomActionSheet` for Capacitor-style app screens.
|
|
55
|
+
|
|
56
|
+
## Studio Specs
|
|
57
|
+
|
|
58
|
+
Return a Studio spec when generated UI should be editable later. A spec is a UI tree, not a component discovery record.
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"id": "account-settings",
|
|
63
|
+
"label": "Account settings",
|
|
64
|
+
"component": "DomCard",
|
|
65
|
+
"props": {
|
|
66
|
+
"padding": "lg",
|
|
67
|
+
"class": "w-full max-w-2xl"
|
|
68
|
+
},
|
|
69
|
+
"children": [
|
|
70
|
+
{
|
|
71
|
+
"id": "email",
|
|
72
|
+
"label": "Email input",
|
|
73
|
+
"component": "DomTextInput",
|
|
74
|
+
"props": {
|
|
75
|
+
"label": "Email address",
|
|
76
|
+
"placeholder": "you@example.com"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Use component export names such as `DomTextInput` or ordinary HTML tags such as `section`, `h2`, and `p`. Avoid anonymous layers and large unstructured HTML blobs when a spec would preserve intent.
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@getdom/studio",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A Vue 3 and Web Component interface system for application UI.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
7
|
+
"author": "Steve O'Brien",
|
|
8
|
+
"homepage": "https://getdom.studio",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"vue",
|
|
11
|
+
"web-components",
|
|
12
|
+
"custom-elements",
|
|
13
|
+
"component-library",
|
|
14
|
+
"design-system"
|
|
15
|
+
],
|
|
16
|
+
"sideEffects": [
|
|
17
|
+
"**/*.css",
|
|
18
|
+
"src/pages/lib/headless/*.js"
|
|
19
|
+
],
|
|
20
|
+
"types": "./src/pages/lib/vue/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./src/pages/lib/vue/index.d.ts",
|
|
24
|
+
"import": "./src/pages/lib/vue/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./vue": {
|
|
27
|
+
"types": "./src/pages/lib/vue/index.d.ts",
|
|
28
|
+
"import": "./src/pages/lib/vue/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./headless": {
|
|
31
|
+
"types": "./src/pages/lib/headless/index.d.ts",
|
|
32
|
+
"import": "./src/pages/lib/headless/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./headless/*.js": {
|
|
35
|
+
"types": "./src/pages/lib/headless/*.d.ts",
|
|
36
|
+
"import": "./src/pages/lib/headless/*.js"
|
|
37
|
+
},
|
|
38
|
+
"./headless/*": {
|
|
39
|
+
"types": "./src/pages/lib/headless/*.d.ts",
|
|
40
|
+
"import": "./src/pages/lib/headless/*.js"
|
|
41
|
+
},
|
|
42
|
+
"./style.css": "./src/style.css",
|
|
43
|
+
"./llms.txt": "./public/llms.txt",
|
|
44
|
+
"./skill": "./SKILL.md",
|
|
45
|
+
"./skills.sh": "./public/skills.sh",
|
|
46
|
+
"./package.json": "./package.json"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"pinia": "^2.3.0 || ^3.0.0",
|
|
50
|
+
"tailwindcss": "^4.2.0",
|
|
51
|
+
"vue": "^3.5.0",
|
|
52
|
+
"vue-router": "^4.6.0"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@tiptap/extension-code-block": "3.27.3",
|
|
56
|
+
"@tiptap/extension-collaboration": "^3.27.3",
|
|
57
|
+
"@tiptap/extension-collaboration-caret": "^3.27.3",
|
|
58
|
+
"@tiptap/extension-image": "^3.27.3",
|
|
59
|
+
"@tiptap/extension-link": "^3.27.3",
|
|
60
|
+
"@tiptap/extension-placeholder": "^3.27.3",
|
|
61
|
+
"@tiptap/extension-table": "3.27.3",
|
|
62
|
+
"@tiptap/extension-underline": "^3.27.3",
|
|
63
|
+
"@tiptap/pm": "^3.27.3",
|
|
64
|
+
"@tiptap/starter-kit": "^3.27.3",
|
|
65
|
+
"@tiptap/vue-3": "^3.27.3"
|
|
66
|
+
},
|
|
67
|
+
"publishConfig": {
|
|
68
|
+
"access": "public"
|
|
69
|
+
},
|
|
70
|
+
"engines": {
|
|
71
|
+
"node": ">=20"
|
|
72
|
+
}
|
|
73
|
+
}
|
package/public/llms.txt
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# DOM Studio
|
|
2
|
+
|
|
3
|
+
> DOM Studio is a complete, code-first Vue 3 and web component interface system for building application UI that teams can own, edit, and ship.
|
|
4
|
+
|
|
5
|
+
DOM Studio combines public Vue package exports, framework-neutral headless elements, copyable source blocks, documentation metadata, semantic theme tokens, and optional Studio-editable UI specs. It is designed for product interfaces such as dashboards, settings, forms, chat and agent tools, mail clients, operations consoles, billing, onboarding, data workflows, and mobile app shells.
|
|
6
|
+
|
|
7
|
+
When building with DOM Studio, start from the closest block or example, compose with existing components, use props for behaviour, and use Tailwind CSS v4 utilities with semantic theme tokens for presentation. Let DOM Studio own accessibility, focus management, keyboard navigation, overlays, selection behaviour, and form semantics. Use a Studio spec only when the generated UI should remain visually editable or serializable as a named component tree.
|
|
8
|
+
|
|
9
|
+
The package root and `@getdom/studio/vue` export the same Vue surface. Import `@getdom/studio/style.css` for styles and `@getdom/studio/headless` to register the framework-neutral `dom-*` custom elements. Blocks are repository-local source patterns to copy and adapt, not published package exports.
|
|
10
|
+
|
|
11
|
+
## Core Documentation
|
|
12
|
+
|
|
13
|
+
- [Overview](https://getdom.studio/): Product positioning, package usage, and the main DOM Studio surfaces.
|
|
14
|
+
- [AI builders](https://getdom.studio/ai): Rules for reliable LLM-generated interfaces and when to return Studio specs.
|
|
15
|
+
- [Theming](https://getdom.studio/theming): Semantic colour tokens, light and dark themes, material skins, radii, and shadows.
|
|
16
|
+
- [Component and docs contract](https://getdom.studio/component-spec): Auto-discovery, `defineOptions({ __doc })`, prop metadata, generated docs, and Studio registration.
|
|
17
|
+
- [Studio](https://getdom.studio/components/studio): Visual editing and saved UI trees made from components, props, children, stable ids, and human labels.
|
|
18
|
+
|
|
19
|
+
## UI Library
|
|
20
|
+
|
|
21
|
+
- [General components](https://getdom.studio/components/button): Actions, overlays, menus, breadcrumbs, steppers, navigation, disclosure, toolbars, and interaction primitives.
|
|
22
|
+
- [Forms](https://getdom.studio/forms): Form composition, fields, validation, fixed and autosizing textareas, compound composers with attachment/action slots, selectors, dates, files, code, and structured JSON values.
|
|
23
|
+
- [Data components](https://getdom.studio/data): Controlled filter queries, data grids, timelines, Kanban boards, calendars, media workflows, document editing, and agent conversations.
|
|
24
|
+
- [Filter bar](https://getdom.studio/data/filter-bar): Transport-free search and logical filter definitions that emit one controlled resource query.
|
|
25
|
+
- [Activity timeline](https://getdom.studio/data/activity-timeline): Ordered resource activity with logical field mappings, semantic status, controlled loading, and customizable slots.
|
|
26
|
+
- [Developer components](https://getdom.studio/dev): Code, JSON, payload, and implementation-data inspection utilities.
|
|
27
|
+
- [Visual components](https://getdom.studio/visual/card): Cards, badges, status, alerts, empty states, progress, skeletons, avatars, and diffs.
|
|
28
|
+
- [Mobile components](https://getdom.studio/mobile): App shells, top and bottom navigation, screen stacks, safe areas, list rows, and action sheets.
|
|
29
|
+
- [Headless elements](https://getdom.studio/headless): Framework-neutral `dom-*` custom elements for accessible behaviour without prescribed presentation.
|
|
30
|
+
|
|
31
|
+
## Application Blocks
|
|
32
|
+
|
|
33
|
+
- [Block catalog](https://getdom.studio/blocks): Complete, source-copy application workflows organised by nested product category.
|
|
34
|
+
- [Application layout](https://getdom.studio/blocks/app-shells/application-layout): Responsive product shell with navigation and application content.
|
|
35
|
+
- [AI collaboration shell](https://getdom.studio/blocks/app-shells/ai-workspaces/ai-collaboration-shell): Workspace composition for AI-assisted product work.
|
|
36
|
+
- [Dashboard](https://getdom.studio/blocks/app-shells/dashboard): Dense, practical dashboard composition.
|
|
37
|
+
- [Forms workflow](https://getdom.studio/blocks/data-capture/forms): Product-grade data capture built from DOM Studio form primitives.
|
|
38
|
+
- [Chat](https://getdom.studio/blocks/communication/chat): Application chat workflow and message composition.
|
|
39
|
+
- [Mail](https://getdom.studio/blocks/communication/mail): Mail client layout and interaction pattern.
|
|
40
|
+
- [Resource scheduler](https://getdom.studio/blocks/operations/scheduling/resource-scheduler): Operations scheduling with resource-aware planning.
|
|
41
|
+
|
|
42
|
+
## Optional
|
|
43
|
+
|
|
44
|
+
- [Dialog](https://getdom.studio/components/dialog): Modal behaviour, focus handling, stacked dialogs, and schema-driven forms.
|
|
45
|
+
- [Combobox](https://getdom.studio/forms/combobox): Searchable, committed selection; use autocomplete instead for free text with suggestions.
|
|
46
|
+
- [Document editor](https://getdom.studio/data/document-editor): Rich document editing with collaboration and reviewable AI workflow examples.
|
|
47
|
+
- [Agent chat](https://getdom.studio/data/agent-chat): Reusable agent conversation, conversation list, and chat shell surfaces.
|
|
48
|
+
- [Month calendar](https://getdom.studio/data/month-calendar): Data-backed month planning and customisable calendar workflows.
|
|
49
|
+
- [Week planner](https://getdom.studio/data/week-planner): Fixed-width day swim lanes with internal two-axis scrolling, configurable drag-to-create time ranges, a live current-time line, and virtualized horizontal ranges up to a full year or more.
|
|
50
|
+
- [Data grid](https://getdom.studio/data/data-grid): Sortable, filterable, API-shaped tabular data.
|
|
51
|
+
- [Breadcrumbs](https://getdom.studio/components/breadcrumbs): Route or resource-path navigation with current-location semantics and optional middle-path collapsing.
|
|
52
|
+
- [Stepper](https://getdom.studio/components/stepper): Controlled horizontal or vertical progress navigation for multi-step workflows.
|
|
53
|
+
- [Kanban](https://getdom.studio/data/kanban): Controlled status boards with custom Vue cards, card and column ordering, async creation hooks, and resource rows shared with grid or calendar views.
|
|
54
|
+
- [Code block](https://getdom.studio/dev/code-block): Highlighted read-only code for implementation and diagnostic output.
|
|
55
|
+
- [JSON viewer](https://getdom.studio/dev/json-viewer): Structured payload and diagnostic-data inspection.
|
|
56
|
+
- [Text diff](https://getdom.studio/visual/text-diff): Reviewable before-and-after text and code changes.
|
|
57
|
+
- [Scroll menu](https://getdom.studio/components/scroll-menu): Scrollspy page contents built from real fragment links and current-location semantics.
|
package/public/skills.sh
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
cat <<'EOF'
|
|
3
|
+
DOM Studio AI instructions
|
|
4
|
+
|
|
5
|
+
- Prefer DOM Studio blocks and components before custom markup.
|
|
6
|
+
- Import Vue components from @getdom/studio/vue.
|
|
7
|
+
- Import @getdom/studio/headless to register headless custom elements.
|
|
8
|
+
- Use dom-* custom elements for framework-neutral behavior.
|
|
9
|
+
- Let DOM Studio handle overlay, focus, keyboard, selection, toast, and form behavior.
|
|
10
|
+
- Return Studio specs when generated UI should remain editable.
|
|
11
|
+
EOF
|