@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.
Files changed (213) hide show
  1. package/LICENSE.md +109 -0
  2. package/README.md +44 -0
  3. package/SKILL.md +83 -0
  4. package/package.json +73 -0
  5. package/public/llms.txt +57 -0
  6. package/public/skills.sh +11 -0
  7. package/src/pages/_layout/componentCatalog.generated.js +4514 -0
  8. package/src/pages/_layout/componentInspector.js +60 -0
  9. package/src/pages/_layout/componentManager.js +192 -0
  10. package/src/pages/_layout/componentRuntimeRecords.js +49 -0
  11. package/src/pages/_layout/inspector/componentRegistry.js +639 -0
  12. package/src/pages/_layout/inspector/serialize.js +134 -0
  13. package/src/pages/_layout/inspector/useInspector.js +293 -0
  14. package/src/pages/components/accordion/DomAccordion.vue +39 -0
  15. package/src/pages/components/breadcrumbs/DomBreadcrumbs.vue +347 -0
  16. package/src/pages/components/button/DomButton.vue +132 -0
  17. package/src/pages/components/command-palette/DomCommandPalette.vue +482 -0
  18. package/src/pages/components/context-menu/DomContextMenu.vue +178 -0
  19. package/src/pages/components/dialog/DomDialog.vue +271 -0
  20. package/src/pages/components/dialog/DomDialogSchemaForm.vue +72 -0
  21. package/src/pages/components/dialog/DomDialogStack.vue +289 -0
  22. package/src/pages/components/dialog/useDialogs.js +253 -0
  23. package/src/pages/components/drawer/DomDrawer.vue +159 -0
  24. package/src/pages/components/dropdown/DomDropdown.vue +261 -0
  25. package/src/pages/components/icon-button/DomIconButton.vue +155 -0
  26. package/src/pages/components/lightbox/DomLightbox.vue +1561 -0
  27. package/src/pages/components/menu/DomMenu.vue +359 -0
  28. package/src/pages/components/menu/DomMenuItem.vue +233 -0
  29. package/src/pages/components/menu/DomMenuLabel.vue +19 -0
  30. package/src/pages/components/menu/DomMenuSeparator.vue +14 -0
  31. package/src/pages/components/menu/menuContext.js +11 -0
  32. package/src/pages/components/menu/menuPlacement.js +26 -0
  33. package/src/pages/components/menu/submenu.js +58 -0
  34. package/src/pages/components/pagination/DomPagination.vue +265 -0
  35. package/src/pages/components/playground/DomRenderer.vue +48 -0
  36. package/src/pages/components/popover/DomPopover.vue +244 -0
  37. package/src/pages/components/profile-menu/DomProfileMenu.vue +408 -0
  38. package/src/pages/components/profile-menu/DomProfileMenuItemContent.vue +45 -0
  39. package/src/pages/components/scroll-menu/DomScrollMenu.vue +430 -0
  40. package/src/pages/components/scroll-menu/DomScrollMenuItem.vue +212 -0
  41. package/src/pages/components/scroll-menu/scrollMenuContext.js +22 -0
  42. package/src/pages/components/splitter-panel/DomSplitterPanel.vue +283 -0
  43. package/src/pages/components/stepper/DomStepper.vue +386 -0
  44. package/src/pages/components/tabs/DomTabs.vue +149 -0
  45. package/src/pages/components/theme-switcher/DomThemeSwitcher.vue +226 -0
  46. package/src/pages/components/toast/DomToastItem.vue +52 -0
  47. package/src/pages/components/toast/DomToastStack.vue +768 -0
  48. package/src/pages/components/toast/useToasts.js +237 -0
  49. package/src/pages/components/toolbar/DomToolbar.vue +158 -0
  50. package/src/pages/components/tooltip/DomTooltip.vue +69 -0
  51. package/src/pages/components/tooltip/vDomTooltip.js +106 -0
  52. package/src/pages/components/tree-view/DomTreeView.vue +961 -0
  53. package/src/pages/components/tree-view/treeSchemas.js +129 -0
  54. package/src/pages/components/tree-view/treeUtils.js +228 -0
  55. package/src/pages/data/_shared/calculateVirtualWindow.js +101 -0
  56. package/src/pages/data/_shared/resourceRecord.js +29 -0
  57. package/src/pages/data/activity-timeline/DomActivityTimeline.vue +417 -0
  58. package/src/pages/data/agent-chat/DomAgentChatShell.vue +565 -0
  59. package/src/pages/data/agent-chat/DomAgentConversation.vue +737 -0
  60. package/src/pages/data/agent-chat/DomAgentConversationList.vue +319 -0
  61. package/src/pages/data/agent-chat/examples/agentChatMockApi.js +620 -0
  62. package/src/pages/data/agent-chat/examples/useAgentChatDemoStore.js +730 -0
  63. package/src/pages/data/data-grid/DataGridVirtualRows.vue +220 -0
  64. package/src/pages/data/data-grid/DomDataGrid.vue +1643 -0
  65. package/src/pages/data/document-editor/DomDocumentEditor.vue +3030 -0
  66. package/src/pages/data/document-editor/documentEditorCodeBlock.js +282 -0
  67. package/src/pages/data/document-editor/examples/documentEditorMockApi.js +272 -0
  68. package/src/pages/data/document-editor/examples/useDocumentEditorDemoStore.js +284 -0
  69. package/src/pages/data/filter-bar/DomFilterBar.vue +533 -0
  70. package/src/pages/data/kanban/DomKanban.vue +1703 -0
  71. package/src/pages/data/kanban/kanbanApi.js +80 -0
  72. package/src/pages/data/media-browser/DomMediaBrowser.vue +2344 -0
  73. package/src/pages/data/media-browser/examples/mediaBrowserMockApi.js +653 -0
  74. package/src/pages/data/media-browser/examples/useMediaBrowserDemoStore.js +1157 -0
  75. package/src/pages/data/month-calendar/DomMonthCalendar.vue +1718 -0
  76. package/src/pages/data/week-planner/DomWeekPlanner.vue +2308 -0
  77. package/src/pages/dev/code-block/DomCodeBlock.vue +263 -0
  78. package/src/pages/dev/json-viewer/DomJsonViewer.vue +962 -0
  79. package/src/pages/forms/_shared/DomFieldLoadingSpinner.vue +12 -0
  80. package/src/pages/forms/_shared/options.js +61 -0
  81. package/src/pages/forms/_shared/useOptionMenu.js +59 -0
  82. package/src/pages/forms/autocomplete/DomAutocomplete.vue +180 -0
  83. package/src/pages/forms/calendar/DomCalendar.vue +442 -0
  84. package/src/pages/forms/checkbox/DomCheckbox.vue +69 -0
  85. package/src/pages/forms/class-toggle-input/DomClassToggleInput.vue +316 -0
  86. package/src/pages/forms/code-input/DomCodeInput.vue +202 -0
  87. package/src/pages/forms/color-input/DomColorInput.vue +118 -0
  88. package/src/pages/forms/combobox/DomCombobox.vue +237 -0
  89. package/src/pages/forms/confirmation-code-input/DomConfirmationCodeInput.vue +345 -0
  90. package/src/pages/forms/date-picker/DomDatePicker.vue +299 -0
  91. package/src/pages/forms/date-time-picker/DomDateTimePicker.vue +630 -0
  92. package/src/pages/forms/email-input/DomEmailInput.vue +55 -0
  93. package/src/pages/forms/field/DomField.vue +267 -0
  94. package/src/pages/forms/field/fieldLayout.js +1 -0
  95. package/src/pages/forms/field/fieldProps.js +114 -0
  96. package/src/pages/forms/field/layouts/DomGridFieldLayout.vue +38 -0
  97. package/src/pages/forms/field/useField.js +343 -0
  98. package/src/pages/forms/field/validators.js +364 -0
  99. package/src/pages/forms/file-upload/DomFileUpload.vue +361 -0
  100. package/src/pages/forms/form/DomForm.vue +985 -0
  101. package/src/pages/forms/form/adapters/fieldBuilder.js +45 -0
  102. package/src/pages/forms/form/adapters/jsonSchema.js +264 -0
  103. package/src/pages/forms/form/adapters/shared.js +53 -0
  104. package/src/pages/forms/form/adapters/zod.js +235 -0
  105. package/src/pages/forms/form/formApi.js +38 -0
  106. package/src/pages/forms/form/formDefinition.js +392 -0
  107. package/src/pages/forms/form/schemaAdapter.js +54 -0
  108. package/src/pages/forms/icon-selector/DomIconSelector.vue +460 -0
  109. package/src/pages/forms/icon-selector/iconSelectorItems.js +490 -0
  110. package/src/pages/forms/input-group/DomInputGroup.vue +232 -0
  111. package/src/pages/forms/json-input/DomJsonInput.vue +227 -0
  112. package/src/pages/forms/json-list-input/DomJsonListInput.vue +206 -0
  113. package/src/pages/forms/listbox/DomListbox.vue +105 -0
  114. package/src/pages/forms/money-input/DomMoneyInput.vue +147 -0
  115. package/src/pages/forms/native-select/DomNativeSelect.vue +67 -0
  116. package/src/pages/forms/number-input/DomNumberInput.vue +47 -0
  117. package/src/pages/forms/password-input/DomPasswordInput.vue +218 -0
  118. package/src/pages/forms/password-input/pwnedPasswords.js +47 -0
  119. package/src/pages/forms/password-strength/DomPasswordStrength.vue +128 -0
  120. package/src/pages/forms/password-strength/passwordStrength.js +92 -0
  121. package/src/pages/forms/position-input/DomPositionInput.vue +83 -0
  122. package/src/pages/forms/radio-group/DomRadioGroup.vue +102 -0
  123. package/src/pages/forms/range-input/DomRangeInput.vue +296 -0
  124. package/src/pages/forms/select/DomSelect.vue +479 -0
  125. package/src/pages/forms/select-input/DomSelectInput.vue +155 -0
  126. package/src/pages/forms/tag-combobox/DomTagCombobox.vue +358 -0
  127. package/src/pages/forms/text-input/DomTextInput.vue +48 -0
  128. package/src/pages/forms/textarea-composer/DomTextareaComposer.vue +234 -0
  129. package/src/pages/forms/textarea-input/DomTextareaInput.vue +86 -0
  130. package/src/pages/forms/textarea-input/useTextareaAutosize.js +147 -0
  131. package/src/pages/forms/time-selector/DomTimeSelector.vue +389 -0
  132. package/src/pages/forms/time-selector/timeUtils.js +194 -0
  133. package/src/pages/forms/toggle/DomToggle.vue +158 -0
  134. package/src/pages/forms/toggle-button/DomToggleButton.vue +88 -0
  135. package/src/pages/forms/toggle-button-group/DomToggleButtonGroup.vue +340 -0
  136. package/src/pages/forms/url-input/DomUrlInput.vue +55 -0
  137. package/src/pages/forms/wysiwyg/DomWysiwyg.vue +204 -0
  138. package/src/pages/lib/css/color.js +245 -0
  139. package/src/pages/lib/headless/accordion.d.ts +7 -0
  140. package/src/pages/lib/headless/accordion.js +246 -0
  141. package/src/pages/lib/headless/autocomplete.d.ts +4 -0
  142. package/src/pages/lib/headless/autocomplete.js +33 -0
  143. package/src/pages/lib/headless/base.d.ts +25 -0
  144. package/src/pages/lib/headless/base.js +127 -0
  145. package/src/pages/lib/headless/checkbox.d.ts +19 -0
  146. package/src/pages/lib/headless/checkbox.js +99 -0
  147. package/src/pages/lib/headless/combobox.d.ts +7 -0
  148. package/src/pages/lib/headless/combobox.js +488 -0
  149. package/src/pages/lib/headless/dialog.d.ts +23 -0
  150. package/src/pages/lib/headless/dialog.js +384 -0
  151. package/src/pages/lib/headless/drawer.d.ts +21 -0
  152. package/src/pages/lib/headless/drawer.js +682 -0
  153. package/src/pages/lib/headless/dropdown.d.ts +19 -0
  154. package/src/pages/lib/headless/dropdown.js +412 -0
  155. package/src/pages/lib/headless/floating-effect.js +118 -0
  156. package/src/pages/lib/headless/floating.d.ts +34 -0
  157. package/src/pages/lib/headless/floating.js +382 -0
  158. package/src/pages/lib/headless/index.d.ts +19 -0
  159. package/src/pages/lib/headless/index.js +19 -0
  160. package/src/pages/lib/headless/listbox.d.ts +19 -0
  161. package/src/pages/lib/headless/listbox.js +126 -0
  162. package/src/pages/lib/headless/menu.d.ts +18 -0
  163. package/src/pages/lib/headless/menu.js +117 -0
  164. package/src/pages/lib/headless/popover-panel.d.ts +18 -0
  165. package/src/pages/lib/headless/popover-panel.js +309 -0
  166. package/src/pages/lib/headless/popover.d.ts +19 -0
  167. package/src/pages/lib/headless/popover.js +391 -0
  168. package/src/pages/lib/headless/radio-group.d.ts +19 -0
  169. package/src/pages/lib/headless/radio-group.js +100 -0
  170. package/src/pages/lib/headless/tabs.d.ts +18 -0
  171. package/src/pages/lib/headless/tabs.js +119 -0
  172. package/src/pages/lib/headless/toast.d.ts +13 -0
  173. package/src/pages/lib/headless/toast.js +65 -0
  174. package/src/pages/lib/headless/toggle.d.ts +19 -0
  175. package/src/pages/lib/headless/toggle.js +162 -0
  176. package/src/pages/lib/headless/tooltip-controller.d.ts +22 -0
  177. package/src/pages/lib/headless/tooltip-controller.js +549 -0
  178. package/src/pages/lib/headless/tooltip.d.ts +19 -0
  179. package/src/pages/lib/headless/tooltip.js +153 -0
  180. package/src/pages/lib/headless/transitions.d.ts +5 -0
  181. package/src/pages/lib/headless/transitions.js +89 -0
  182. package/src/pages/lib/vue/_internal/DomLiquidGlassSurface.vue +310 -0
  183. package/src/pages/lib/vue/_internal/liquidGlass.js +112 -0
  184. package/src/pages/lib/vue/_internal/liquidGlassConfig.js +10 -0
  185. package/src/pages/lib/vue/codeHighlighter.js +132 -0
  186. package/src/pages/lib/vue/floatingTeleportTarget.js +23 -0
  187. package/src/pages/lib/vue/index.d.ts +6806 -0
  188. package/src/pages/lib/vue/index.js +218 -0
  189. package/src/pages/lib/vue/useTheme.js +116 -0
  190. package/src/pages/mobile/action-sheet/DomActionSheet.vue +186 -0
  191. package/src/pages/mobile/bottom-nav/DomAppBottomNav.vue +94 -0
  192. package/src/pages/mobile/list-item/DomAppListItem.vue +90 -0
  193. package/src/pages/mobile/safe-area/DomSafeArea.vue +39 -0
  194. package/src/pages/mobile/shell/DomAppShell.vue +51 -0
  195. package/src/pages/mobile/stack/AppStackScreen.vue +63 -0
  196. package/src/pages/mobile/stack/DomAppStack.vue +711 -0
  197. package/src/pages/mobile/top-bar/DomAppTopBar.vue +67 -0
  198. package/src/pages/visual/alert/DomAlert.vue +363 -0
  199. package/src/pages/visual/avatar/DomAvatar.vue +110 -0
  200. package/src/pages/visual/avatar-stack/DomAvatarStack.vue +89 -0
  201. package/src/pages/visual/badge/DomBadge.vue +105 -0
  202. package/src/pages/visual/card/DomCard.vue +65 -0
  203. package/src/pages/visual/card-rail/DomCardRail.vue +99 -0
  204. package/src/pages/visual/empty-state/DomEmptyState.vue +88 -0
  205. package/src/pages/visual/progress/DomProgress.vue +212 -0
  206. package/src/pages/visual/progress/DomRadialProgress.vue +186 -0
  207. package/src/pages/visual/progress/DomSegmentedProgress.vue +350 -0
  208. package/src/pages/visual/skeleton/DomSkeleton.vue +174 -0
  209. package/src/pages/visual/spinner/DomSpinner.vue +122 -0
  210. package/src/pages/visual/status-pill/DomStatusPill.vue +75 -0
  211. package/src/pages/visual/text-diff/DomTextDiff.vue +577 -0
  212. package/src/pages/visual/text-diff/textDiff.js +300 -0
  213. 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
+ }
@@ -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.
@@ -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