@cocoar/vue-ui 3.1.0 → 3.2.0-beta.11

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 (180) hide show
  1. package/bin/cli.mjs +53 -0
  2. package/dist/components/checkbox/CoarCheckbox.vue.d.ts +1 -1
  3. package/dist/components/checkbox/CoarCheckbox.vue.d.ts.map +1 -1
  4. package/dist/components/code-block/CoarCodeBlock.vue.d.ts +1 -1
  5. package/dist/components/code-block/CoarCodeBlock.vue.d.ts.map +1 -1
  6. package/dist/components/data-list/CoarDataList.vue.d.ts +158 -0
  7. package/dist/components/data-list/CoarDataList.vue.d.ts.map +1 -0
  8. package/dist/components/data-list/CoarDataListToolbar.vue.d.ts +30 -0
  9. package/dist/components/data-list/CoarDataListToolbar.vue.d.ts.map +1 -0
  10. package/dist/components/data-list/data-list-builder.d.ts +288 -0
  11. package/dist/components/data-list/data-list-builder.d.ts.map +1 -0
  12. package/dist/components/data-list/index.d.ts +12 -0
  13. package/dist/components/data-list/index.d.ts.map +1 -0
  14. package/dist/components/data-list/internal/compare.d.ts +14 -0
  15. package/dist/components/data-list/internal/compare.d.ts.map +1 -0
  16. package/dist/components/data-list/internal/reorder-core.d.ts +46 -0
  17. package/dist/components/data-list/internal/reorder-core.d.ts.map +1 -0
  18. package/dist/components/data-list/internal/search.d.ts +16 -0
  19. package/dist/components/data-list/internal/search.d.ts.map +1 -0
  20. package/dist/components/data-list/internal/useDataListLines.d.ts +92 -0
  21. package/dist/components/data-list/internal/useDataListLines.d.ts.map +1 -0
  22. package/dist/components/data-list/internal/useDataListReorder.d.ts +68 -0
  23. package/dist/components/data-list/internal/useDataListReorder.d.ts.map +1 -0
  24. package/dist/components/data-list/internal/useSearchHighlight.d.ts +19 -0
  25. package/dist/components/data-list/internal/useSearchHighlight.d.ts.map +1 -0
  26. package/dist/components/data-list/types.d.ts +185 -0
  27. package/dist/components/data-list/types.d.ts.map +1 -0
  28. package/dist/components/data-list/useDataListModel.d.ts +79 -0
  29. package/dist/components/data-list/useDataListModel.d.ts.map +1 -0
  30. package/dist/components/date-time/_shared/maskito-config.d.ts +7 -2
  31. package/dist/components/date-time/_shared/maskito-config.d.ts.map +1 -1
  32. package/dist/components/date-time/_shared/time-helpers.d.ts +11 -4
  33. package/dist/components/date-time/_shared/time-helpers.d.ts.map +1 -1
  34. package/dist/components/date-time/_shared/use-date-picker-base.d.ts +1 -1
  35. package/dist/components/date-time/plain-date-picker/CoarPlainDatePicker.vue.d.ts +1 -1
  36. package/dist/components/date-time/plain-date-picker/CoarPlainDatePicker.vue.d.ts.map +1 -1
  37. package/dist/components/date-time/plain-date-time-picker/CoarPlainDateTimePicker.vue.d.ts +1 -1
  38. package/dist/components/date-time/plain-date-time-picker/CoarPlainDateTimePicker.vue.d.ts.map +1 -1
  39. package/dist/components/date-time/zoned-date-time-picker/CoarZonedDateTimePicker.vue.d.ts +1 -1
  40. package/dist/components/date-time/zoned-date-time-picker/CoarZonedDateTimePicker.vue.d.ts.map +1 -1
  41. package/dist/components/dual-listbox/CoarDualListbox.vue.d.ts +3 -0
  42. package/dist/components/dual-listbox/CoarDualListbox.vue.d.ts.map +1 -1
  43. package/dist/components/form-field/CoarFormField.vue.d.ts +1 -1
  44. package/dist/components/form-field/CoarFormField.vue.d.ts.map +1 -1
  45. package/dist/components/icon/CoarIcon.vue.d.ts +2 -2
  46. package/dist/components/icon/CoarIcon.vue.d.ts.map +1 -1
  47. package/dist/components/listbox/CoarListbox.vue.d.ts +7 -0
  48. package/dist/components/listbox/CoarListbox.vue.d.ts.map +1 -1
  49. package/dist/components/number-input/CoarNumberInput.vue.d.ts +1 -1
  50. package/dist/components/number-input/CoarNumberInput.vue.d.ts.map +1 -1
  51. package/dist/components/otp-input/CoarOtpInput.vue.d.ts +1 -1
  52. package/dist/components/otp-input/CoarOtpInput.vue.d.ts.map +1 -1
  53. package/dist/components/password-input/CoarPasswordInput.vue.d.ts +1 -1
  54. package/dist/components/password-input/CoarPasswordInput.vue.d.ts.map +1 -1
  55. package/dist/components/switch/CoarSwitch.vue.d.ts +1 -1
  56. package/dist/components/switch/CoarSwitch.vue.d.ts.map +1 -1
  57. package/dist/components/text-input/CoarTextInput.vue.d.ts +1 -1
  58. package/dist/components/text-input/CoarTextInput.vue.d.ts.map +1 -1
  59. package/dist/composables/dragRegistry.d.ts +12 -0
  60. package/dist/composables/dragRegistry.d.ts.map +1 -1
  61. package/dist/composables/index.d.ts +2 -2
  62. package/dist/composables/index.d.ts.map +1 -1
  63. package/dist/composables/useDragDrop.d.ts +62 -6
  64. package/dist/composables/useDragDrop.d.ts.map +1 -1
  65. package/dist/composables/useVirtualList.d.ts +21 -1
  66. package/dist/composables/useVirtualList.d.ts.map +1 -1
  67. package/dist/index.css +1 -1
  68. package/dist/index.d.ts +4 -2
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +4508 -2039
  71. package/package.json +9 -3
  72. package/skills/cocoar-vue-ui/SKILL.md +244 -0
  73. package/skills/cocoar-vue-ui/references/components/avatar.md +178 -0
  74. package/skills/cocoar-vue-ui/references/components/badge.md +290 -0
  75. package/skills/cocoar-vue-ui/references/components/breadcrumb.md +238 -0
  76. package/skills/cocoar-vue-ui/references/components/button.md +252 -0
  77. package/skills/cocoar-vue-ui/references/components/calendar/agenda-view.md +372 -0
  78. package/skills/cocoar-vue-ui/references/components/calendar/coar-calendar.md +1647 -0
  79. package/skills/cocoar-vue-ui/references/components/calendar/day-view.md +361 -0
  80. package/skills/cocoar-vue-ui/references/components/calendar/index.md +312 -0
  81. package/skills/cocoar-vue-ui/references/components/calendar/month-view.md +486 -0
  82. package/skills/cocoar-vue-ui/references/components/calendar/performance.md +186 -0
  83. package/skills/cocoar-vue-ui/references/components/calendar/timeline-view.md +301 -0
  84. package/skills/cocoar-vue-ui/references/components/calendar/week-view.md +382 -0
  85. package/skills/cocoar-vue-ui/references/components/calendar/work-week-view.md +145 -0
  86. package/skills/cocoar-vue-ui/references/components/calendar/year-view.md +63 -0
  87. package/skills/cocoar-vue-ui/references/components/card.md +151 -0
  88. package/skills/cocoar-vue-ui/references/components/checkbox-group.md +103 -0
  89. package/skills/cocoar-vue-ui/references/components/checkbox.md +279 -0
  90. package/skills/cocoar-vue-ui/references/components/code-block.md +241 -0
  91. package/skills/cocoar-vue-ui/references/components/context-menu.md +355 -0
  92. package/skills/cocoar-vue-ui/references/components/data-grid/checkbox.md +213 -0
  93. package/skills/cocoar-vue-ui/references/components/data-grid/date-columns.md +272 -0
  94. package/skills/cocoar-vue-ui/references/components/data-grid/editing.md +236 -0
  95. package/skills/cocoar-vue-ui/references/components/data-grid/multi-select.md +193 -0
  96. package/skills/cocoar-vue-ui/references/components/data-grid/number.md +147 -0
  97. package/skills/cocoar-vue-ui/references/components/data-grid/select.md +202 -0
  98. package/skills/cocoar-vue-ui/references/components/data-grid/text.md +127 -0
  99. package/skills/cocoar-vue-ui/references/components/data-grid.md +1225 -0
  100. package/skills/cocoar-vue-ui/references/components/data-list.md +2121 -0
  101. package/skills/cocoar-vue-ui/references/components/date-or-time-picker.md +200 -0
  102. package/skills/cocoar-vue-ui/references/components/date-picker.md +203 -0
  103. package/skills/cocoar-vue-ui/references/components/date-time-picker.md +154 -0
  104. package/skills/cocoar-vue-ui/references/components/date-views.md +212 -0
  105. package/skills/cocoar-vue-ui/references/components/dialog.md +148 -0
  106. package/skills/cocoar-vue-ui/references/components/divider.md +157 -0
  107. package/skills/cocoar-vue-ui/references/components/document-viewer/annotations.md +400 -0
  108. package/skills/cocoar-vue-ui/references/components/document-viewer/coar-document-viewer.md +327 -0
  109. package/skills/cocoar-vue-ui/references/components/document-viewer/index.md +234 -0
  110. package/skills/cocoar-vue-ui/references/components/document-viewer/toolbar.md +221 -0
  111. package/skills/cocoar-vue-ui/references/components/drag-drop.md +267 -0
  112. package/skills/cocoar-vue-ui/references/components/dual-listbox.md +449 -0
  113. package/skills/cocoar-vue-ui/references/components/file-explorer/asset-store.md +327 -0
  114. package/skills/cocoar-vue-ui/references/components/file-explorer/in-memory-store.md +176 -0
  115. package/skills/cocoar-vue-ui/references/components/file-explorer/index.md +311 -0
  116. package/skills/cocoar-vue-ui/references/components/file-explorer/use-file-explorer.md +300 -0
  117. package/skills/cocoar-vue-ui/references/components/form-field.md +1025 -0
  118. package/skills/cocoar-vue-ui/references/components/fragment-parser.md +298 -0
  119. package/skills/cocoar-vue-ui/references/components/link.md +235 -0
  120. package/skills/cocoar-vue-ui/references/components/listbox.md +575 -0
  121. package/skills/cocoar-vue-ui/references/components/map/editor.md +448 -0
  122. package/skills/cocoar-vue-ui/references/components/map/index.md +351 -0
  123. package/skills/cocoar-vue-ui/references/components/markdown-diagrams.md +210 -0
  124. package/skills/cocoar-vue-ui/references/components/markdown-editor.md +1478 -0
  125. package/skills/cocoar-vue-ui/references/components/markdown-embeds.md +387 -0
  126. package/skills/cocoar-vue-ui/references/components/markdown-form.md +447 -0
  127. package/skills/cocoar-vue-ui/references/components/markdown.md +276 -0
  128. package/skills/cocoar-vue-ui/references/components/menu.md +380 -0
  129. package/skills/cocoar-vue-ui/references/components/mermaid.md +172 -0
  130. package/skills/cocoar-vue-ui/references/components/navbar.md +147 -0
  131. package/skills/cocoar-vue-ui/references/components/note.md +96 -0
  132. package/skills/cocoar-vue-ui/references/components/notice.md +131 -0
  133. package/skills/cocoar-vue-ui/references/components/number-input.md +215 -0
  134. package/skills/cocoar-vue-ui/references/components/otp-input.md +324 -0
  135. package/skills/cocoar-vue-ui/references/components/page-builder/authoring-contract.md +271 -0
  136. package/skills/cocoar-vue-ui/references/components/page-builder/coar-page-builder.md +476 -0
  137. package/skills/cocoar-vue-ui/references/components/page-builder/coar-page-renderer.md +677 -0
  138. package/skills/cocoar-vue-ui/references/components/page-builder/custom-elements.md +441 -0
  139. package/skills/cocoar-vue-ui/references/components/page-builder/idp-integration.md +122 -0
  140. package/skills/cocoar-vue-ui/references/components/page-builder/index.md +573 -0
  141. package/skills/cocoar-vue-ui/references/components/pagination.md +150 -0
  142. package/skills/cocoar-vue-ui/references/components/panel-layout.md +372 -0
  143. package/skills/cocoar-vue-ui/references/components/password-input.md +175 -0
  144. package/skills/cocoar-vue-ui/references/components/popconfirm.md +186 -0
  145. package/skills/cocoar-vue-ui/references/components/popover.md +173 -0
  146. package/skills/cocoar-vue-ui/references/components/progress-bar.md +178 -0
  147. package/skills/cocoar-vue-ui/references/components/radio-group.md +225 -0
  148. package/skills/cocoar-vue-ui/references/components/script-editor.md +1271 -0
  149. package/skills/cocoar-vue-ui/references/components/segmented-control.md +238 -0
  150. package/skills/cocoar-vue-ui/references/components/select.md +463 -0
  151. package/skills/cocoar-vue-ui/references/components/sidebar.md +421 -0
  152. package/skills/cocoar-vue-ui/references/components/spinner.md +132 -0
  153. package/skills/cocoar-vue-ui/references/components/switch.md +195 -0
  154. package/skills/cocoar-vue-ui/references/components/table.md +170 -0
  155. package/skills/cocoar-vue-ui/references/components/tabs.md +382 -0
  156. package/skills/cocoar-vue-ui/references/components/tag.md +178 -0
  157. package/skills/cocoar-vue-ui/references/components/text-input.md +256 -0
  158. package/skills/cocoar-vue-ui/references/components/toast.md +160 -0
  159. package/skills/cocoar-vue-ui/references/components/tooltip.md +121 -0
  160. package/skills/cocoar-vue-ui/references/components/transitions.md +193 -0
  161. package/skills/cocoar-vue-ui/references/components/tree.md +2388 -0
  162. package/skills/cocoar-vue-ui/references/components/virtual-list.md +212 -0
  163. package/skills/cocoar-vue-ui/references/components/wizard.md +251 -0
  164. package/skills/cocoar-vue-ui/references/components/zoned-date-time-picker.md +177 -0
  165. package/skills/cocoar-vue-ui/references/foundations/colors.md +708 -0
  166. package/skills/cocoar-vue-ui/references/foundations/design-principles.md +115 -0
  167. package/skills/cocoar-vue-ui/references/foundations/icons.md +381 -0
  168. package/skills/cocoar-vue-ui/references/foundations/localization/formatting.md +530 -0
  169. package/skills/cocoar-vue-ui/references/foundations/localization/setup.md +86 -0
  170. package/skills/cocoar-vue-ui/references/foundations/localization/timezones.md +182 -0
  171. package/skills/cocoar-vue-ui/references/foundations/localization/translations.md +305 -0
  172. package/skills/cocoar-vue-ui/references/foundations/motion.md +549 -0
  173. package/skills/cocoar-vue-ui/references/foundations/spacing.md +330 -0
  174. package/skills/cocoar-vue-ui/references/foundations/theming.md +140 -0
  175. package/skills/cocoar-vue-ui/references/foundations/typography.md +206 -0
  176. package/skills/cocoar-vue-ui/references/guide/error-handling.md +162 -0
  177. package/skills/cocoar-vue-ui/references/guide/getting-started.md +116 -0
  178. package/skills/cocoar-vue-ui/references/guide/migration-page-builder-3.md +207 -0
  179. package/skills/cocoar-vue-ui/references/guide/migration.md +140 -0
  180. package/skills/cocoar-vue-ui/references/guide/theming.md +98 -0
@@ -0,0 +1,330 @@
1
+ <!-- Generated from apps/docs/foundations/spacing.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # Spacing & Effects
4
+
5
+ Layout rhythm, corner shapes, and depth — the visual building blocks that give the system its feel.
6
+
7
+ ## Border Radius
8
+
9
+ Seven radius tokens shape everything from subtle input rounding to fully circular avatars.
10
+
11
+ **Demo — `spacing/demos/BorderRadius.vue`**
12
+
13
+ ```vue
14
+ <template>
15
+ <div class="radius-showcase">
16
+ <div
17
+ v-for="token in radiusTokens"
18
+ :key="token.name"
19
+ class="radius-card"
20
+ >
21
+ <div
22
+ class="radius-shape"
23
+ :style="{ borderRadius: token.value }"
24
+ />
25
+ <div class="radius-meta">
26
+ <span class="radius-name">{{ token.name }}</span>
27
+ <code class="radius-value">{{ token.value }}</code>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script setup lang="ts">
34
+ const radiusTokens = [
35
+ { name: 'XXS', value: '1px' },
36
+ { name: 'XS', value: '2px' },
37
+ { name: 'S', value: '3px' },
38
+ { name: 'M', value: '4px' },
39
+ { name: 'L', value: '5px' },
40
+ { name: 'XL', value: '6px' },
41
+ { name: 'Full', value: '999px' },
42
+ ];
43
+ </script>
44
+
45
+ <style scoped>
46
+ .radius-showcase {
47
+ display: flex;
48
+ flex-wrap: wrap;
49
+ gap: 20px;
50
+ padding: 8px 0;
51
+ }
52
+
53
+ .radius-card {
54
+ display: flex;
55
+ flex-direction: column;
56
+ align-items: center;
57
+ gap: 12px;
58
+ }
59
+
60
+ .radius-shape {
61
+ width: 72px;
62
+ height: 72px;
63
+ background: var(--vp-c-brand-soft);
64
+ transition: transform 0.2s ease;
65
+ }
66
+
67
+ .radius-shape:hover {
68
+ transform: scale(1.08);
69
+ }
70
+
71
+ .radius-meta {
72
+ display: flex;
73
+ flex-direction: column;
74
+ align-items: center;
75
+ gap: 2px;
76
+ }
77
+
78
+ .radius-name {
79
+ font-size: 13px;
80
+ font-weight: 600;
81
+ color: var(--vp-c-text-1);
82
+ }
83
+
84
+ .radius-value {
85
+ font-size: 11px;
86
+ color: var(--vp-c-text-3);
87
+ font-family: var(--vp-font-family-mono);
88
+ background: none !important;
89
+ }
90
+ </style>
91
+ ```
92
+
93
+ ## Spacing Scale
94
+
95
+ All spacing is built on a **4 px grid**. These tokens control padding, margins, and gaps throughout the system.
96
+
97
+ **Demo — `spacing/demos/SpacingScale.vue`**
98
+
99
+ ```vue
100
+ <template>
101
+ <div class="spacing-scale">
102
+ <div
103
+ v-for="token in spacingTokens"
104
+ :key="token.name"
105
+ class="spacing-row"
106
+ >
107
+ <div class="spacing-label">
108
+ <span class="spacing-name">{{ token.name }}</span>
109
+ <code class="spacing-value">{{ token.value }}</code>
110
+ </div>
111
+ <div class="spacing-track">
112
+ <div
113
+ class="spacing-bar"
114
+ :style="{ width: token.value }"
115
+ />
116
+ </div>
117
+ </div>
118
+ </div>
119
+ </template>
120
+
121
+ <script setup lang="ts">
122
+ const spacingTokens = [
123
+ { name: 'XXS', value: '2px' },
124
+ { name: 'XS', value: '4px' },
125
+ { name: 'S', value: '8px' },
126
+ { name: 'M', value: '16px' },
127
+ { name: 'L', value: '24px' },
128
+ { name: 'XL', value: '32px' },
129
+ { name: 'XXL', value: '48px' },
130
+ { name: 'XXXL', value: '64px' },
131
+ ];
132
+ </script>
133
+
134
+ <style scoped>
135
+ .spacing-scale {
136
+ display: flex;
137
+ flex-direction: column;
138
+ gap: 10px;
139
+ padding: 4px 0;
140
+ }
141
+
142
+ .spacing-row {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 16px;
146
+ }
147
+
148
+ .spacing-label {
149
+ display: flex;
150
+ align-items: baseline;
151
+ gap: 8px;
152
+ min-width: 100px;
153
+ flex-shrink: 0;
154
+ }
155
+
156
+ .spacing-name {
157
+ font-size: 13px;
158
+ font-weight: 600;
159
+ color: var(--vp-c-text-1);
160
+ min-width: 36px;
161
+ }
162
+
163
+ .spacing-value {
164
+ font-size: 11px;
165
+ color: var(--vp-c-text-3);
166
+ font-family: var(--vp-font-family-mono);
167
+ background: none !important;
168
+ }
169
+
170
+ .spacing-track {
171
+ flex: 1;
172
+ height: 24px;
173
+ background: var(--vp-c-bg-soft);
174
+ border-radius: 6px;
175
+ display: flex;
176
+ align-items: center;
177
+ padding: 0 4px;
178
+ overflow: hidden;
179
+ }
180
+
181
+ .spacing-bar {
182
+ height: 14px;
183
+ min-width: 2px;
184
+ background: var(--vp-c-brand-1);
185
+ border-radius: 4px;
186
+ transition: width 0.4s cubic-bezier(0.22, 1, 0.36, 1);
187
+ }
188
+ </style>
189
+ ```
190
+
191
+ ## Stroke Width
192
+
193
+ Border thickness for dividers, outlines, and component borders.
194
+
195
+ | Token | Value | Use case |
196
+ |-------|-------|----------|
197
+ | `--coar-stroke-width-xs` | 0.5 px | Hairline dividers |
198
+ | `--coar-stroke-width-s` | 1 px | Default borders |
199
+ | `--coar-stroke-width-m` | 2 px | Emphasis borders |
200
+ | `--coar-stroke-width-l` | 4 px | Heavy accents |
201
+
202
+ ## Shadows & Elevation
203
+
204
+ Six shadow levels create the illusion of depth. The shadow _is_ the demo — notice how each card lifts further off the surface.
205
+
206
+ **Demo — `spacing/demos/Shadows.vue`**
207
+
208
+ ```vue
209
+ <template>
210
+ <div class="shadow-showcase">
211
+ <div class="shadow-surface">
212
+ <div
213
+ v-for="token in shadowTokens"
214
+ :key="token.name"
215
+ class="shadow-card-wrap"
216
+ >
217
+ <div
218
+ class="shadow-card"
219
+ :style="{ boxShadow: `var(${token.variable})` }"
220
+ />
221
+ <div class="shadow-meta">
222
+ <span class="shadow-name">{{ token.name }}</span>
223
+ <span class="shadow-desc">{{ token.description }}</span>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </div>
228
+ </template>
229
+
230
+ <script setup lang="ts">
231
+ const shadowTokens = [
232
+ { name: 'XS', variable: '--coar-shadow-xs', description: 'Hover states' },
233
+ { name: 'S', variable: '--coar-shadow-s', description: 'Cards' },
234
+ { name: 'M', variable: '--coar-shadow-m', description: 'Dropdowns' },
235
+ { name: 'L', variable: '--coar-shadow-l', description: 'Modals' },
236
+ { name: 'XL', variable: '--coar-shadow-xl', description: 'Overlays' },
237
+ { name: 'Focus', variable: '--coar-shadow-focus', description: 'Focus ring' },
238
+ ];
239
+ </script>
240
+
241
+ <style scoped>
242
+ .shadow-showcase {
243
+ padding: 8px 0;
244
+ }
245
+
246
+ .shadow-surface {
247
+ display: grid;
248
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
249
+ gap: 32px;
250
+ padding: 32px 16px;
251
+ background: var(--vp-c-bg-soft);
252
+ border-radius: 12px;
253
+ }
254
+
255
+ .shadow-card-wrap {
256
+ display: flex;
257
+ flex-direction: column;
258
+ align-items: center;
259
+ gap: 16px;
260
+ }
261
+
262
+ .shadow-card {
263
+ width: 88px;
264
+ height: 88px;
265
+ background: var(--vp-c-bg);
266
+ border-radius: 10px;
267
+ transition: transform 0.25s ease;
268
+ }
269
+
270
+ .shadow-card:hover {
271
+ transform: translateY(-2px);
272
+ }
273
+
274
+ .shadow-meta {
275
+ display: flex;
276
+ flex-direction: column;
277
+ align-items: center;
278
+ gap: 2px;
279
+ }
280
+
281
+ .shadow-name {
282
+ font-size: 13px;
283
+ font-weight: 600;
284
+ color: var(--vp-c-text-1);
285
+ }
286
+
287
+ .shadow-desc {
288
+ font-size: 11px;
289
+ color: var(--vp-c-text-3);
290
+ }
291
+ </style>
292
+ ```
293
+
294
+ ## Token Reference
295
+
296
+ ### Spacing
297
+
298
+ | Token | Value | Usage |
299
+ |-------|-------|-------|
300
+ | `--coar-spacing-xxs` | 2 px | Tight inner gaps |
301
+ | `--coar-spacing-xs` | 4 px | Small padding, icon gaps |
302
+ | `--coar-spacing-s` | 8 px | Compact padding, list gaps |
303
+ | `--coar-spacing-m` | 16 px | Default padding and gaps |
304
+ | `--coar-spacing-l` | 24 px | Section padding |
305
+ | `--coar-spacing-xl` | 32 px | Large section gaps |
306
+ | `--coar-spacing-xxl` | 48 px | Page-level spacing |
307
+ | `--coar-spacing-xxxl` | 64 px | Hero / splash spacing |
308
+
309
+ ### Border Radius
310
+
311
+ | Token | Value |
312
+ |-------|-------|
313
+ | `--coar-radius-xxs` | 1 px |
314
+ | `--coar-radius-xs` | 2 px |
315
+ | `--coar-radius-s` | 3 px |
316
+ | `--coar-radius-m` | 4 px |
317
+ | `--coar-radius-l` | 5 px |
318
+ | `--coar-radius-xl` | 6 px |
319
+ | `--coar-radius-full` | 999 px |
320
+
321
+ ### Shadows
322
+
323
+ | Token | Usage |
324
+ |-------|-------|
325
+ | `--coar-shadow-xs` | Subtle lift for hover states |
326
+ | `--coar-shadow-s` | Cards and raised elements |
327
+ | `--coar-shadow-m` | Dropdowns and popovers |
328
+ | `--coar-shadow-l` | Modals and dialogs |
329
+ | `--coar-shadow-xl` | Elevated overlays |
330
+ | `--coar-shadow-focus` | Keyboard focus ring |
@@ -0,0 +1,140 @@
1
+ <!-- Generated from apps/docs/foundations/theming.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # Theme Editor
4
+
5
+ The **Theme Editor** is a live token editor built into every Cocoar app. It lets you explore the entire token system — from raw palette shades all the way to semantic roles — and export a ready-to-paste CSS snippet.
6
+
7
+ > The editor is visible as a small icon in the bottom-right corner of this page. Click it to try everything described here in real time.
8
+
9
+ ## Setup
10
+
11
+ Add `CoarThemeEditor` to your app's layout. It renders as a floating panel — no wrapper or portal needed.
12
+
13
+ ```ts
14
+ import CoarThemeEditor from '@cocoar/vue-ui/theme-editor';
15
+ ```
16
+
17
+ ```vue
18
+ <!-- In your root layout -->
19
+ <CoarThemeEditor />
20
+ ```
21
+
22
+ ### Props
23
+
24
+ | Prop | Type | Default | Description |
25
+ |------|------|---------|-------------|
26
+ | `hideDarkToggle` | `boolean` | `false` | Hides the light/dark toggle. Set to `true` when your app manages dark mode itself. |
27
+
28
+ ## The Token Tree
29
+
30
+ Cocoar's token system has three layers. Each layer builds on the one above it.
31
+
32
+ ```
33
+ Layer 1 — Primitives
34
+ --coar-color-red-600 oklch-formula of --coar-error
35
+
36
+ Layer 2 — Semantic
37
+ --coar-background-semantic-error-bold → var(--coar-color-red-600)
38
+
39
+ Layer 3 — Component
40
+ --coar-button-danger-bg → var(--coar-background-semantic-error-bold)
41
+ ```
42
+
43
+ Changing a primitive ripples through semantic tokens, which ripple through every component that uses them. The Theme Editor exposes all three layers.
44
+
45
+ ## Tabs
46
+
47
+ ### Presets
48
+
49
+ Four built-in starting points: **Enterprise** (default), **Modern SaaS** (rounded), **Playful** (pill buttons, vivid accent), and **Minimal** (sharp corners, no shadows). Selecting a preset resets all other tabs to the preset's values.
50
+
51
+ ### Brand
52
+
53
+ Sets the five base hue values that anchor the entire palette:
54
+
55
+ | Token | Default | Purpose |
56
+ |-------|---------|---------|
57
+ | `--coar-accent` | `#1183CD` | Primary actions, links, focus rings |
58
+ | `--coar-success` | `#1e8f48` | Positive feedback |
59
+ | `--coar-error` | `#d63b3b` | Errors, destructive actions |
60
+ | `--coar-warning` | `#cc821f` | Caution |
61
+ | `--coar-info` | `#5e6b84` | Neutral informational |
62
+
63
+ Each color opens a **palette editor** (floating panel) where you can fine-tune the L (lightness) and C (chroma) for individual steps 50–900 using oklch relative color syntax.
64
+
65
+ ### Semantic
66
+
67
+ Maps semantic roles to palette entries. Each row shows the resolved color, lets you pick a palette (Accent / Red / Green / Amber / Slate) and a step (50–900), and has a reset button that turns accent-colored when changed.
68
+
69
+ This is the layer that connects intent to color: `--coar-background-semantic-error-bold` points at `Red / 600` by default. Reassigning it to `Amber / 600` would make all error surfaces amber — including form field borders, toast backgrounds, and the danger button — without touching any component code.
70
+
71
+ ### Corners
72
+
73
+ Controls the global radius scale (`xxs` → `xl`) plus per-component-group overrides for buttons, inputs, cards, menus, popovers, dialogs, and toasts. Select from named scale steps or `Full` (pill shape).
74
+
75
+ ### Type
76
+
77
+ Font family for body text and headings, chosen from a curated list of Google Fonts. Fonts load on demand when selected.
78
+
79
+ ### Spacing
80
+
81
+ Component density slider: **Compact** (0.75×), **Default** (1×), or **Comfortable** (1.33×). Scales horizontal padding on all interactive components.
82
+
83
+ ### Depth
84
+
85
+ Box shadow per component group (buttons never have shadows; cards, menus, dialogs, and toasts do).
86
+
87
+ ### Motion
88
+
89
+ A single duration multiplier that scales all `--coar-duration-*` tokens proportionally. Set to 0 for instant transitions, or push it above 2× to slow everything down for testing.
90
+
91
+ ## Exporting
92
+
93
+ Type a class name into the name field at the bottom of the editor (default: `custom`), then click **Download CSS** to get a scoped block containing only the tokens you changed:
94
+
95
+ ```css
96
+ /* coar-theme--myapp.css */
97
+ .coar-theme--myapp {
98
+ --coar-accent: #7C3AED;
99
+ --coar-button-radius: var(--coar-radius-m);
100
+ --coar-input-radius: var(--coar-radius-m);
101
+ }
102
+ ```
103
+
104
+ Drop it into your app after the Cocoar stylesheet and apply the class to your root element:
105
+
106
+ ```html
107
+ <!-- index.html -->
108
+ <html class="coar-theme--myapp">
109
+ <head>
110
+ <link rel="stylesheet" href="@cocoar/vue-ui/styles" />
111
+ <link rel="stylesheet" href="/coar-theme--myapp.css" />
112
+ </head>
113
+ ```
114
+
115
+ Or import in your entry file:
116
+
117
+ ```ts
118
+ import '@cocoar/vue-ui/styles';
119
+ import './coar-theme--myapp.css';
120
+ ```
121
+
122
+ Because themes are classes, you can apply different themes to different subtrees:
123
+
124
+ ```html
125
+ <html class="coar-theme--myapp">
126
+ <!-- most of the app uses the custom theme -->
127
+
128
+ <div class="coar-theme--compact">
129
+ <!-- this section uses a separate theme -->
130
+ </div>
131
+
132
+ <div class="coar-theme-none">
133
+ <!-- this section always uses library defaults -->
134
+ </div>
135
+ </html>
136
+ ```
137
+
138
+ ### `.coar-theme-none`
139
+
140
+ The library ships a built-in reset class. Apply `.coar-theme-none` to any element to restore all themeable tokens to their library defaults inside that subtree, regardless of what theme class is set on an ancestor. Useful for "always default" widgets like admin panels or embedded forms.
@@ -0,0 +1,206 @@
1
+ <!-- Generated from apps/docs/foundations/typography.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # Typography
4
+
5
+ Our type system creates clear visual hierarchy and ensures readability across all interfaces. Eleven styles cover everything from large display headings to fine-print footnotes.
6
+
7
+ ## Type Scale
8
+
9
+ Each row shows the style rendered at its actual size, with font metadata alongside.
10
+
11
+ **Demo — `typography/demos/TypeScale.vue`**
12
+
13
+ ```vue
14
+ <template>
15
+ <div class="type-scale">
16
+ <div v-for="item in typeScale" :key="item.label" class="type-row">
17
+ <div class="type-meta">
18
+ <span class="type-label">{{ item.label }}</span>
19
+ <span class="type-spec">{{ item.spec }}</span>
20
+ </div>
21
+ <div class="type-sample-wrap">
22
+ <p :class="item.class" class="type-sample">{{ item.text }}</p>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ const typeScale = [
30
+ { label: 'Display', class: 'coar-display', text: 'Display', spec: 'Inter / 72px / Bold' },
31
+ { label: 'Title', class: 'coar-title', text: 'Title', spec: 'Inter / 48px / Bold' },
32
+ { label: 'Subtitle', class: 'coar-subtitle', text: 'Subtitle', spec: 'Inter / 32px / Regular' },
33
+ { label: 'Heading', class: 'coar-heading', text: 'Heading', spec: 'Poppins / 24px / SemiBold' },
34
+ { label: 'Subheading', class: 'coar-subheading', text: 'Subheading', spec: 'Poppins / 20px / Regular' },
35
+ { label: 'Body', class: 'coar-body', text: 'The quick brown fox jumps over the lazy dog.', spec: 'Poppins / 16px / Regular' },
36
+ { label: 'Body Bold', class: 'coar-body-bold', text: 'The quick brown fox jumps over the lazy dog.', spec: 'Poppins / 16px / Bold' },
37
+ { label: 'Body Small', class: 'coar-body-small', text: 'The quick brown fox jumps over the lazy dog.', spec: 'Poppins / 14px / Regular' },
38
+ { label: 'Body Small Bold', class: 'coar-body-small-bold', text: 'The quick brown fox jumps over the lazy dog.', spec: 'Poppins / 14px / Bold' },
39
+ { label: 'Caption', class: 'coar-caption', text: 'Caption Text', spec: 'Poppins / 12px / Medium / Uppercase' },
40
+ { label: 'Footnote', class: 'coar-footnote', text: 'Footnote — Small print and legal copy.', spec: 'Poppins / 10px / Regular' },
41
+ ];
42
+ </script>
43
+
44
+ <style scoped>
45
+ .type-scale {
46
+ display: flex;
47
+ flex-direction: column;
48
+ }
49
+
50
+ .type-row {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 32px;
54
+ padding: 20px 0;
55
+ border-bottom: 1px solid var(--vp-c-divider);
56
+ }
57
+
58
+ .type-row:last-child {
59
+ border-bottom: none;
60
+ }
61
+
62
+ .type-meta {
63
+ flex: 0 0 180px;
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: 4px;
67
+ }
68
+
69
+ .type-label {
70
+ font-size: 13px;
71
+ font-weight: 600;
72
+ color: var(--vp-c-text-1);
73
+ }
74
+
75
+ .type-spec {
76
+ font-size: 12px;
77
+ color: var(--vp-c-text-3);
78
+ font-family: var(--vp-font-family-mono);
79
+ }
80
+
81
+ .type-sample-wrap {
82
+ flex: 1;
83
+ min-width: 0;
84
+ }
85
+
86
+ .type-sample {
87
+ margin: 0;
88
+ color: var(--vp-c-text-1);
89
+ line-height: 1.5;
90
+ }
91
+
92
+ @media (max-width: 640px) {
93
+ .type-row {
94
+ flex-direction: column;
95
+ gap: 8px;
96
+ align-items: flex-start;
97
+ }
98
+
99
+ .type-meta {
100
+ flex: none;
101
+ }
102
+ }
103
+ </style>
104
+ ```
105
+
106
+ ## Usage Example
107
+
108
+ Typography hierarchy applied to a realistic article layout — caption, title, subtitle, body, and footnote working together.
109
+
110
+ **Demo — `typography/demos/TypographyExample.vue`**
111
+
112
+ ```vue
113
+ <template>
114
+ <div class="article-example">
115
+ <span class="coar-caption">DESIGN SYSTEMS &middot; 5 MIN READ</span>
116
+ <h1 class="coar-title article-title">Building Consistent Interfaces</h1>
117
+ <p class="coar-subtitle article-subtitle">
118
+ How a shared type system improves readability and reduces design debt
119
+ </p>
120
+ <div class="article-body">
121
+ <p class="coar-body">
122
+ Typography is the backbone of any design system. A well-defined type scale creates
123
+ clear visual hierarchy, helps users scan content quickly, and ensures readability
124
+ across every screen size and device.
125
+ </p>
126
+ <p class="coar-body">
127
+ <span class="coar-body-bold">Consistency matters.</span> When every heading, label, and
128
+ body paragraph follows the same rules, the interface feels cohesive and professional.
129
+ Users develop intuition for what each level of text means — they stop reading
130
+ and start scanning.
131
+ </p>
132
+ </div>
133
+ <div class="article-footer">
134
+ <span class="coar-footnote">Last updated March 2026</span>
135
+ </div>
136
+ </div>
137
+ </template>
138
+
139
+ <style scoped>
140
+ .article-example {
141
+ max-width: 640px;
142
+ padding: 32px;
143
+ border-radius: 12px;
144
+ background: var(--vp-c-bg-soft);
145
+ }
146
+
147
+ .article-title {
148
+ margin: 12px 0 4px;
149
+ }
150
+
151
+ .article-subtitle {
152
+ margin: 0 0 24px;
153
+ color: var(--vp-c-text-2);
154
+ }
155
+
156
+ .article-body {
157
+ display: flex;
158
+ flex-direction: column;
159
+ gap: 16px;
160
+ }
161
+
162
+ .article-body p {
163
+ margin: 0;
164
+ line-height: 1.7;
165
+ color: var(--vp-c-text-1);
166
+ }
167
+
168
+ .article-footer {
169
+ margin-top: 24px;
170
+ padding-top: 16px;
171
+ border-top: 1px solid var(--vp-c-divider);
172
+ color: var(--vp-c-text-3);
173
+ }
174
+ </style>
175
+ ```
176
+
177
+ ## CSS Classes Reference
178
+
179
+ Apply these utility classes directly to any HTML element.
180
+
181
+ | Class | Role | Font | Size | Weight |
182
+ |---|---|---|---|---|
183
+ | `.coar-display` | Display | Inter | 72 px | Bold |
184
+ | `.coar-title` | Title | Inter | 48 px | Bold |
185
+ | `.coar-subtitle` | Subtitle | Inter | 32 px | Regular |
186
+ | `.coar-heading` | Heading | Poppins | 24 px | SemiBold |
187
+ | `.coar-subheading` | Subheading | Poppins | 20 px | Regular |
188
+ | `.coar-body` | Body | Poppins | 16 px | Regular |
189
+ | `.coar-body-bold` | Body Bold | Poppins | 16 px | Bold |
190
+ | `.coar-body-small` | Body Small | Poppins | 14 px | Regular |
191
+ | `.coar-body-small-bold` | Body Small Bold | Poppins | 14 px | Bold |
192
+ | `.coar-caption` | Caption | Poppins | 12 px | Medium, Uppercase |
193
+ | `.coar-footnote` | Footnote | Poppins | 10 px | Regular |
194
+
195
+ ## Usage
196
+
197
+ ```html
198
+ <h1 class="coar-title">Page Title</h1>
199
+ <p class="coar-subtitle">Supporting subtitle text</p>
200
+ <p class="coar-body">Main body content goes here.</p>
201
+ <span class="coar-caption">LABEL TEXT</span>
202
+ ```
203
+
204
+ > **Tip: Font Loading**
205
+ >
206
+ > The type scale uses **Inter** for display-level text and **Poppins** for body and UI text. Import `@cocoar/vue-ui/fonts` to self-host both fonts — no external CDN required.