@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,145 @@
1
+ <!-- Generated from apps/docs/components/calendar/work-week-view.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # `<CoarWorkWeekView>` — Work Week View (Preview)
4
+
5
+ The week view with weekend columns filtered out. Configurable working-day set via `builder.workDays(...)` — defaults to Mon–Fri but adapts to 6-day operations (Mon–Sat), 4-day weeks (Mon–Thu), Sun–Thu Middle-East work weeks, or any other DayOfWeek subset.
6
+
7
+ Mechanically the work-week view is a preset of the one time-grid model shared with [`<CoarDayView>`](./day-view.md#one-model-for-every-time-grid) and [`<CoarWeekView>`](./week-view.md): anchor `weekStart`, span 7, filter `workDays`, step 7. Same time-grid, same DnD pipeline, same slot rendering, same all-day band, same touch paging. The visible-range `ViewWindow` stays the full Mon–Sun span — only the columns rendered differ. Loaders see weekend events the same way they do for the full week.
8
+
9
+ ```html
10
+ <CoarWorkWeekView :builder="builder" />
11
+ ```
12
+
13
+ ## Standalone usage
14
+
15
+ ```ts
16
+ import { ref } from 'vue';
17
+ import { Temporal } from '@js-temporal/polyfill';
18
+ import {
19
+ CoarWorkWeekView,
20
+ useWorkWeekView,
21
+ type CalendarEvent,
22
+ } from '@cocoar/vue-calendar';
23
+
24
+ const events = ref<CalendarEvent[]>([
25
+ {
26
+ id: 'standup',
27
+ start: Temporal.ZonedDateTime.from('2026-04-15T09:00:00[Europe/Vienna]'),
28
+ end: Temporal.ZonedDateTime.from('2026-04-15T09:30:00[Europe/Vienna]'),
29
+ },
30
+ ]);
31
+ const date = ref('2026-04-15');
32
+
33
+ const { builder } = useWorkWeekView();
34
+ builder
35
+ .events(events)
36
+ .date(date)
37
+ .timezone('Europe/Vienna')
38
+ .firstDayOfWeek(1) // Monday — overrides locale default
39
+ .workDays([1, 2, 3, 4, 5]); // Mon–Fri (default — shown for clarity)
40
+ ```
41
+
42
+ ```html
43
+ <CoarWorkWeekView :builder="builder" />
44
+ ```
45
+
46
+ ## Working-day conventions
47
+
48
+ `workDays(d)` accepts any subset of `0..6` (`0` = Sunday, `6` = Saturday). The order in the array doesn't matter — internally it's used as a Set. The rendered columns appear in calendar order, anchored to `firstDayOfWeek`.
49
+
50
+ ```ts
51
+ builder.workDays([1, 2, 3, 4, 5]); // Mon–Fri (default)
52
+ builder.workDays([1, 2, 3, 4, 5, 6]); // Mon–Sat (retail / hospitality)
53
+ builder.workDays([1, 2, 3, 4]); // Mon–Thu (4-day week experiments)
54
+ builder.workDays([0, 1, 2, 3, 4]); // Sun–Thu (Middle East, parts of South Asia)
55
+ ```
56
+
57
+ > **Tip: Reactive `workDays`**
58
+ >
59
+ > `workDays(d)` accepts `MaybeRefOrGetter`, so a `ref<DayOfWeek[]>` flips the rendered columns live. Useful for "show Saturday too" toggles in operations dashboards without a full reload.
60
+
61
+ ## Window vs render set
62
+
63
+ `builder.api.getVisibleRange()` for the work-week view returns the **full Mon–Sun span**, not the filtered weekday subset. Two reasons:
64
+
65
+ - **`eventsLoader(window)` and `seriesLoader(window)`** should fetch weekend events too. Consumers may want to keep them in the database, filter them in the data layer, or rely purely on the view to suppress weekend columns; the loader doesn't need to know the column set.
66
+ - **`api.getVisibleEvents()`** returns events that touch any day in the full span, including weekends. A Saturday client demo still shows up in the event list (e.g. for "what did we work on this week?" summaries), just not as a rendered pill in the grid.
67
+
68
+ If your use case needs the rendered-columns date set, call `workWeekDates(cursor, firstDayOfWeek, workDays)` from `@cocoar/vue-calendar` directly.
69
+
70
+ ## Navigation
71
+
72
+ `prev()` / `next()` step by 7 days, same as the [Week view](./week-view.md) — *not* by the count of working days. Stepping by 5 days would leave the cursor on a weekend on alternate clicks, breaking the "this week / next week" mental model. The workday filter is a render concern, not a navigation one.
73
+
74
+ ## Inside `<CoarCalendar>`
75
+
76
+ When `<CoarCalendar>` is active and the user clicks the "Work week" view-switcher button, the shell mounts `<CoarWorkWeekView>` and the same builder feeds it — view-specific settings (`timeRange`, `slotDuration`, `pixelsPerHour`) apply identically to Week and WorkWeek.
77
+
78
+ ```ts
79
+ const { builder } = useCalendar();
80
+ builder
81
+ .timeRange({ startMinutes: 8 * 60, endMinutes: 18 * 60 })
82
+ .workDays([1, 2, 3, 4, 5]);
83
+ ```
84
+
85
+ The shell's default `availableViews` includes `'workWeek'`, so the view-switcher gets a "Work week" button automatically. Hide it by setting your own list:
86
+
87
+ ```ts
88
+ builder.availableViews(['month', 'week', 'day', 'agenda']);
89
+ ```
90
+
91
+ ## `useWorkWeekView<TMeta>()`
92
+
93
+ ```ts
94
+ function useWorkWeekView<TMeta>(): {
95
+ builder: CalendarBuilder<TMeta>;
96
+ api: CalendarApi<TMeta>;
97
+ };
98
+ ```
99
+
100
+ Returns a fresh standalone builder + its imperative api. Pre-sets `view: 'workWeek'` and `availableViews: ['workWeek']` so the standalone view doesn't render an inactive view-switcher.
101
+
102
+ ## Builder setters
103
+
104
+ Full reference: see [the composer's API reference](./coar-calendar.md#api-reference). Highlights specific to the work-week view:
105
+
106
+ | Setter | Argument | Default | Notes |
107
+ |---|---|---|---|
108
+ | `workDays(d)` | `MaybeRefOrGetter<readonly DayOfWeek[]>` | `[1, 2, 3, 4, 5]` | `0` = Sunday … `6` = Saturday. Empty array renders zero columns. |
109
+ | `firstDayOfWeek(d)` | `0..6 \| undefined` | locale-aware | Affects the underlying week's anchor; the workDays filter is applied on top. |
110
+ | `timeRange(r)` | `MaybeRefOrGetter<{ startMinutes, endMinutes }>` | `{0, 1440}` | Visible hour range, in minutes from midnight. |
111
+ | `slotDuration(d)` | `MaybeRefOrGetter<number>` | `30` | Slot subdivision (minutes). Also the snap step when dragging. |
112
+ | `pixelsPerHour(p)` | `MaybeRefOrGetter<number>` | `60` | Vertical density. |
113
+ | `dayHeaderRenderer(r)` | `DayHeaderRenderer` | — | Per-day column header — same slot as Week. |
114
+ | `eventRenderer(r)` | `EventRenderer<TMeta>` | — | Universal renderer. Same `ctx.layout?.kind` discriminator as Week (`'positioned'` for time-grid events, `'allDayBar'` for the all-day band). |
115
+
116
+ ## `workWeekDates(date, firstDayOfWeek, workDays)`
117
+
118
+ Pure helper exported from `@cocoar/vue-calendar`. Returns the subset of `weekDates(date, firstDayOfWeek)` whose day-of-week is in `workDays`, in calendar order.
119
+
120
+ ```ts
121
+ import { workWeekDates, Temporal } from '@cocoar/vue-calendar';
122
+
123
+ const dates = workWeekDates(
124
+ Temporal.PlainDate.from('2026-06-10'),
125
+ 1, // Monday-first
126
+ [1, 2, 3, 4, 5], // Mon–Fri
127
+ );
128
+ // → [2026-06-08, 2026-06-09, 2026-06-10, 2026-06-11, 2026-06-12]
129
+ ```
130
+
131
+ ## Imperative API
132
+
133
+ Same surface as the Week view — see [`<CoarWeekView>` Imperative API](./week-view.md#imperative-api). `next()` / `prev()` step by 7 days; `getVisibleRange()` returns the full Mon–Sun window.
134
+
135
+ ## `<CoarWorkWeekView>` props + slots
136
+
137
+ | Prop | Type | Description |
138
+ |---|---|---|
139
+ | `builder` | `CalendarBuilder` | **Required.** From `useWorkWeekView()` (or share the one from `useCalendar()`). |
140
+
141
+ | Slot | Scope | Purpose |
142
+ |---|---|---|
143
+ | `event` | `{ event, layout }` | Per-event renderer. `layout` is the `PositionedEvent` (lane / startMinutes / endMinutes / clipping flags). |
144
+ | `allDayEvent` | `{ event, layout }` | All-day band renderer. `layout` is the `AllDayBar`. |
145
+ | `dayHeader` | `{ date, isToday, isWeekend }` | Per-day column header. `isWeekend` is true for Sat/Sun columns *even if hidden by `workDays`* — useful for custom renderers that compute their own styling. |
@@ -0,0 +1,63 @@
1
+ <!-- Generated from apps/docs/components/calendar/year-view.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # `<CoarYearView>` — Year View (Preview)
4
+
5
+ Responsive twelve-month overview. The grid automatically chooses how many month cards fit across the available width, uses the configured locale / first weekday, and marks today. Selecting a month title or a day updates the builder cursor and drills into Month.
6
+
7
+ The Year view intentionally shows date structure rather than event density. It does not render event pills or occurrence markers. Loader and range-change consumers still receive the ordinary year `ViewWindow`, so applications can decide whether to return data for that surface.
8
+
9
+ ## In `<CoarCalendar>`
10
+
11
+ Year is part of the default primary hierarchy. Include both `year` and `month` when filtering views so drill-in has a visible destination:
12
+
13
+ ```ts
14
+ import { Temporal } from '@js-temporal/polyfill';
15
+ import { useCalendar } from '@cocoar/vue-calendar';
16
+
17
+ const { builder, api } = useCalendar();
18
+ builder
19
+ .view('year')
20
+ .date(Temporal.PlainDate.from('2026-08-06'))
21
+ .timezone('Europe/Vienna')
22
+ .locale('de-AT')
23
+ .availableViews(['year', 'month']);
24
+
25
+ api.next(); // 2027
26
+ api.prev(); // 2026
27
+ ```
28
+
29
+ ```html
30
+ <CoarCalendar :builder="builder" />
31
+ ```
32
+
33
+ ## Standalone
34
+
35
+ `<CoarYearView>` consumes the same flat `CalendarBuilder`. There is no separate year builder because the view needs the ordinary cursor and `api.setView('month')` drill-in contract.
36
+
37
+ ```ts
38
+ import { CoarYearView, useCalendar } from '@cocoar/vue-calendar';
39
+
40
+ const { builder } = useCalendar();
41
+ builder.view('year').availableViews(['year', 'month']);
42
+ ```
43
+
44
+ ```html
45
+ <CoarYearView :builder="builder" />
46
+ ```
47
+
48
+ ## Configuration
49
+
50
+ | Setter | Default | Purpose |
51
+ |---|---|---|
52
+ | `date(d)` | today in the display zone | Selects the visible year. |
53
+ | `timezone(tz)` | browser zone | Determines which date receives the today marker. |
54
+ | `locale(loc)` | `'en-US'` | Month and weekday labels. |
55
+ | `firstDayOfWeek(d)` | locale-derived | Overrides weekday order (`0` = Sunday … `6` = Saturday). |
56
+
57
+ `next()` and `prev()` move by one calendar year while Year is active. Clicking a day keeps that exact date as the Month cursor; clicking a month title selects the first day of that month.
58
+
59
+ ## Prop
60
+
61
+ | Prop | Type | Description |
62
+ |---|---|---|
63
+ | `builder` | `CalendarBuilder` | **Required.** Usually from `useCalendar()`. |
@@ -0,0 +1,151 @@
1
+ <!-- Generated from apps/docs/components/card.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # Card
4
+
5
+ Cards group related content into a visually distinct container, making it easy for users to scan and interact with discrete chunks of information. Use them for dashboards, content feeds, settings panels, or anywhere you need clear visual boundaries.
6
+
7
+ ```ts
8
+ import { CoarCard } from '@cocoar/vue-ui';
9
+ ```
10
+
11
+ ## Basic Usage
12
+
13
+ A straightforward card with a title and body text. Cards provide structure without imposing rigid layout rules -- just slot in whatever content you need.
14
+
15
+ **Demo — `card/demos/CardBasic.vue`**
16
+
17
+ ```vue
18
+ <template>
19
+ <CoarCard elevated>
20
+ <h4 style="margin: 0 0 4px;">Card Title</h4>
21
+ <p style="margin: 0; font-size: 14px;">This is a basic card with default settings. Cards help organize content into distinct sections.</p>
22
+ </CoarCard>
23
+ </template>
24
+
25
+ <script setup lang="ts">
26
+ import { CoarCard } from '@cocoar/vue-ui';
27
+ </script>
28
+ ```
29
+
30
+ ## Elevated vs Outlined
31
+
32
+ Choose `elevated` for cards that need to stand out from the page (primary content), or `outlined` for a subtler border-based style that sits flatter in the layout.
33
+
34
+ **Demo — `card/demos/CardElevatedOutlined.vue`**
35
+
36
+ ```vue
37
+ <template>
38
+ <div style="display: flex; flex-direction: column; gap: 12px;">
39
+ <CoarCard elevated>
40
+ <span style="font-size: 14px;">Elevated — box shadow for depth</span>
41
+ </CoarCard>
42
+ <CoarCard variant="outlined">
43
+ <span style="font-size: 14px;">Outlined — border without shadow</span>
44
+ </CoarCard>
45
+ </div>
46
+ </template>
47
+
48
+ <script setup lang="ts">
49
+ import { CoarCard } from '@cocoar/vue-ui';
50
+ </script>
51
+ ```
52
+
53
+ ## Color Variants
54
+
55
+ Semantic color variants add a tinted background to convey meaning at a glance -- info for tips, success for confirmations, warning and error for alerts.
56
+
57
+ **Demo — `card/demos/CardVariants.vue`**
58
+
59
+ ```vue
60
+ <template>
61
+ <div style="display: flex; flex-direction: column; gap: 8px;">
62
+ <CoarCard variant="info" elevated><span style="font-size: 14px;">Info — tips, guidance, neutral context</span></CoarCard>
63
+ <CoarCard variant="success" elevated><span style="font-size: 14px;">Success — positive results</span></CoarCard>
64
+ <CoarCard variant="warning" elevated><span style="font-size: 14px;">Warning — caution, attention needed</span></CoarCard>
65
+ <CoarCard variant="error" elevated><span style="font-size: 14px;">Error — problems, validation failures</span></CoarCard>
66
+ <CoarCard variant="neutral" elevated><span style="font-size: 14px;">Neutral — default, no semantic meaning</span></CoarCard>
67
+ </div>
68
+ </template>
69
+
70
+ <script setup lang="ts">
71
+ import { CoarCard } from '@cocoar/vue-ui';
72
+ </script>
73
+ ```
74
+
75
+ ## Padding Sizes
76
+
77
+ Adjust internal spacing to suit your content density. Use `s` for compact data cards, `m` for general use, and `l` when the card is the primary focus of the page.
78
+
79
+ **Demo — `card/demos/CardPadding.vue`**
80
+
81
+ ```vue
82
+ <template>
83
+ <div style="display: flex; flex-direction: column; gap: 12px;">
84
+ <CoarCard elevated padding="s">
85
+ <span style="font-size: 14px;">Small padding (s)</span>
86
+ </CoarCard>
87
+ <CoarCard elevated padding="m">
88
+ <span style="font-size: 14px;">Medium padding (m) — default</span>
89
+ </CoarCard>
90
+ <CoarCard elevated padding="l">
91
+ <span style="font-size: 14px;">Large padding (l)</span>
92
+ </CoarCard>
93
+ </div>
94
+ </template>
95
+
96
+ <script setup lang="ts">
97
+ import { CoarCard } from '@cocoar/vue-ui';
98
+ </script>
99
+ ```
100
+
101
+ ## Rich Content Example
102
+
103
+ Cards shine when combining multiple elements. Here a header, tags, body text, and action buttons work together inside a single card.
104
+
105
+ **Demo — `card/demos/CardRichContent.vue`**
106
+
107
+ ```vue
108
+ <template>
109
+ <CoarCard elevated style="max-width: 400px;">
110
+ <div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 4px;">
111
+ <h4 style="margin: 0;">New Feature Release</h4>
112
+ <span style="font-size: 14px; color: #64748b;">2 hours ago</span>
113
+ </div>
114
+ <p style="margin: 8px 0; font-size: 14px;">
115
+ We've just released a major update to the date picker component. It now supports timezone-aware datetime selection using the Temporal API.
116
+ </p>
117
+ <div style="display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px;">
118
+ <CoarTag variant="info">New</CoarTag>
119
+ <CoarTag variant="success">Stable</CoarTag>
120
+ </div>
121
+ <div style="display: flex; flex-wrap: wrap; gap: 8px;">
122
+ <CoarButton variant="primary" size="s">Read More</CoarButton>
123
+ <CoarButton variant="ghost" size="s">Dismiss</CoarButton>
124
+ </div>
125
+ </CoarCard>
126
+ </template>
127
+
128
+ <script setup lang="ts">
129
+ import { CoarCard, CoarTag, CoarButton } from '@cocoar/vue-ui';
130
+ </script>
131
+ ```
132
+
133
+ ## API
134
+
135
+ ### Props
136
+
137
+ | Prop | Type | Default | Description |
138
+ |------|------|---------|-------------|
139
+ | `variant` | `'neutral' \| 'outlined' \| 'info' \| 'success' \| 'warning' \| 'error' \| 'accent'` | `'neutral'` | Card color/style variant |
140
+ | `padding` | `'none' \| 's' \| 'm' \| 'l'` | `'m'` | Internal padding size |
141
+ | `elevated` | `boolean` | `false` | Add box shadow for elevation |
142
+ | `borderless` | `boolean` | `false` | Hide the border |
143
+
144
+ ### Slots
145
+
146
+ | Slot | Description |
147
+ |------|-------------|
148
+ | `default` | Card content |
149
+ | `#header` | Fixed header area |
150
+ | `#footer` | Fixed footer area |
151
+ | `#inset` | Full-width inset area (negative margins) |
@@ -0,0 +1,103 @@
1
+ <!-- Generated from apps/docs/components/checkbox-group.md by apps/docs/scripts/sync-skill.mjs. Do not edit; edit the docs page. -->
2
+
3
+ # Checkbox Group
4
+
5
+ `CoarCheckboxGroup` turns multiple keyed checkboxes into one field value. Each child keeps its own visible label and DOM id; the group owns selection state, layout, shared form name, disabled/error state, and accessibility semantics.
6
+
7
+ ```ts
8
+ import { CoarCheckbox, CoarCheckboxGroup } from '@cocoar/vue-ui';
9
+ ```
10
+
11
+ ## Array and Object Models
12
+
13
+ Use `value` as the stable domain key of each checkbox. An array model contains the selected keys. Object mode contains every registered key with an explicit Boolean value. External model changes immediately update the visible checkboxes in both modes.
14
+
15
+ **Demo — `checkbox-group/demos/CheckboxGroupModels.vue`**
16
+
17
+ ```vue
18
+ <template>
19
+ <div class="group-models">
20
+ <CoarFormField label="Array model" hint="The model contains only selected values.">
21
+ <CoarCheckboxGroup v-model="arrayValue" name="array-permissions">
22
+ <CoarCheckbox value="read" label="Read" />
23
+ <CoarCheckbox value="write" label="Write" />
24
+ <CoarCheckbox value="admin" label="Admin" />
25
+ </CoarCheckboxGroup>
26
+ </CoarFormField>
27
+ <pre>{{ arrayValue }}</pre>
28
+
29
+ <CoarFormField
30
+ label="Object model"
31
+ hint="Every registered value is represented by an explicit Boolean."
32
+ >
33
+ <CoarCheckboxGroup v-model="objectValue" model-type="object" name="object-permissions">
34
+ <CoarCheckbox value="read" label="Read" />
35
+ <CoarCheckbox value="write" label="Write" />
36
+ <CoarCheckbox value="admin" label="Admin" />
37
+ </CoarCheckboxGroup>
38
+ </CoarFormField>
39
+ <pre>{{ objectValue }}</pre>
40
+ </div>
41
+ </template>
42
+
43
+ <script setup lang="ts">
44
+ import { ref } from 'vue';
45
+ import { CoarCheckbox, CoarCheckboxGroup, CoarFormField } from '@cocoar/vue-ui';
46
+
47
+ const arrayValue = ref<string[]>(['read']);
48
+ const objectValue = ref<Record<string, boolean>>({
49
+ read: true,
50
+ write: false,
51
+ admin: false,
52
+ });
53
+ </script>
54
+
55
+ <style scoped>
56
+ .group-models {
57
+ display: grid;
58
+ gap: var(--coar-spacing-m);
59
+ }
60
+
61
+ .group-models pre {
62
+ margin: 0;
63
+ padding: var(--coar-spacing-s) var(--coar-spacing-m);
64
+ border-radius: var(--coar-radius-xs);
65
+ background: var(--coar-background-neutral-secondary);
66
+ font-size: 12px;
67
+ }
68
+ </style>
69
+ ```
70
+
71
+ ## With Form Field
72
+
73
+ Wrap the complete group in one `CoarFormField`. The FormField label describes the group; the child labels describe the individual options.
74
+
75
+ ```vue
76
+ <CoarFormField
77
+ label="Permissions"
78
+ hint="Select every permission this role should receive."
79
+ >
80
+ <CoarCheckboxGroup v-model="permissions">
81
+ <CoarCheckbox value="read" label="Read" />
82
+ <CoarCheckbox value="write" label="Write" />
83
+ </CoarCheckboxGroup>
84
+ </CoarFormField>
85
+ ```
86
+
87
+ ## API
88
+
89
+ ### CoarCheckboxGroup props
90
+
91
+ | Prop | Type | Default | Description |
92
+ |---|---|---|---|
93
+ | `v-model` | `readonly string[] \| Readonly<Record<string, boolean>>` | `undefined` | Complete group value |
94
+ | `modelType` | `'array' \| 'object'` | inferred, then `'array'` | Output shape, especially useful before a model has a value |
95
+ | `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Child layout |
96
+ | `size` | `'xs' \| 's' \| 'm' \| 'l'` | `'m'` | Size inherited by every child checkbox |
97
+ | `name` | `string` | `undefined` | Native form name shared by all child inputs |
98
+ | `disabled` | `boolean` | `false` | Disables all children |
99
+ | `error` | `boolean` | `false` | Marks the group and all children invalid |
100
+
101
+ > **Info: Group keys**
102
+ >
103
+ > Inside a group, every `CoarCheckbox` must have a non-empty, unique `value`. `id` remains a DOM/accessibility identifier and is never used as application data.