@utopia-studio-design/design-system-cli 0.4.0 → 0.5.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 (127) hide show
  1. package/README.md +23 -0
  2. package/bin/utopia-ds-mcp.mjs +9 -2
  3. package/bin/utopia-ds.mjs +115 -7
  4. package/data/blocks/activity-feed/ActivityFeedBlock.tsx +255 -0
  5. package/data/blocks/activity-feed/README.md +16 -0
  6. package/data/blocks/activity-feed/activity-feed-contract.ts +96 -0
  7. package/data/blocks/activity-feed/activity-feed-fixture.ts +22 -0
  8. package/data/blocks/activity-feed/activity-feed.css +154 -0
  9. package/data/blocks/agent-status/AgentStatusBlock.tsx +313 -0
  10. package/data/blocks/agent-status/README.md +15 -0
  11. package/data/blocks/agent-status/agent-status-contract.ts +133 -0
  12. package/data/blocks/agent-status/agent-status-fixture.ts +79 -0
  13. package/data/blocks/agent-status/agent-status.css +216 -0
  14. package/data/blocks/analytics-dashboard/AnalyticsDashboardBlocks.tsx +107 -0
  15. package/data/blocks/analytics-dashboard/AnalyticsMetricBlocks.tsx +87 -0
  16. package/data/blocks/analytics-dashboard/README.md +17 -0
  17. package/data/blocks/analytics-dashboard/analytics-dashboard.css +92 -0
  18. package/data/blocks/calendar-application/CalendarApplicationBlocks.tsx +519 -0
  19. package/data/blocks/calendar-application/README.md +20 -0
  20. package/data/blocks/calendar-application/calendar-application.css +216 -0
  21. package/data/blocks/calendar-application/calendar-localization.ts +90 -0
  22. package/data/blocks/calendar-application/calendar-panel-contract.ts +72 -0
  23. package/data/blocks/dashboard-composer/CeramicPuckAdapter.tsx +380 -0
  24. package/data/blocks/dashboard-composer/DashboardComposerBlocks.tsx +337 -0
  25. package/data/blocks/dashboard-composer/README.md +16 -0
  26. package/data/blocks/dashboard-composer/RegistryDataBlocks.tsx +238 -0
  27. package/data/blocks/dashboard-composer/dashboard-composer.css +328 -0
  28. package/data/blocks/database-workspace/DatabaseWorkspaceBlocks.tsx +240 -0
  29. package/data/blocks/database-workspace/README.md +9 -0
  30. package/data/blocks/database-workspace/database-workspace.css +107 -0
  31. package/data/blocks/interaction-workbench/InteractionWorkbench.tsx +271 -0
  32. package/data/blocks/interaction-workbench/README.md +9 -0
  33. package/data/blocks/interaction-workbench/interaction-workbench.css +226 -0
  34. package/data/docs/calendar.md +164 -0
  35. package/data/docs/charts.md +95 -0
  36. package/data/docs/composition-registry.md +174 -0
  37. package/data/docs/dashboard-composer.md +94 -0
  38. package/data/docs/database.md +68 -0
  39. package/data/docs/examples/dashboard-layout.v1.json +65 -0
  40. package/data/docs/foundations.md +2 -1
  41. package/data/docs/interaction-foundation.md +109 -0
  42. package/data/docs/observability.md +165 -0
  43. package/data/docs/quick-start-ai.md +55 -1
  44. package/data/manifests/blocks.json +392 -0
  45. package/data/manifests/catalog.json +7 -4
  46. package/data/manifests/components.json +191 -3
  47. package/data/manifests/composition-registry.json +427 -0
  48. package/data/manifests/motion-profiles.json +1 -1
  49. package/data/manifests/patterns.json +113 -1
  50. package/data/manifests/templates.json +346 -0
  51. package/data/manifests/theme-renacore.json +142 -0
  52. package/data/manifests/themes.json +314 -28
  53. package/data/templates/analytics-dashboard/AnalyticsDashboardBlocks.tsx +107 -0
  54. package/data/templates/analytics-dashboard/AnalyticsMetricBlocks.tsx +87 -0
  55. package/data/templates/analytics-dashboard/README.md +6 -0
  56. package/data/templates/analytics-dashboard/analytics-dashboard.css +92 -0
  57. package/data/templates/analytics-dashboard/index.html +13 -0
  58. package/data/templates/analytics-dashboard/main.tsx +196 -0
  59. package/data/templates/analytics-dashboard/styles.css +120 -0
  60. package/data/templates/analytics-dashboard/template.manifest.json +17 -0
  61. package/data/templates/calendar-application/CalendarApplicationBlocks.tsx +519 -0
  62. package/data/templates/calendar-application/README.md +10 -0
  63. package/data/templates/calendar-application/calendar-application.css +216 -0
  64. package/data/templates/calendar-application/calendar-localization.ts +90 -0
  65. package/data/templates/calendar-application/index.html +14 -0
  66. package/data/templates/calendar-application/main.tsx +409 -0
  67. package/data/templates/calendar-application/styles.css +248 -0
  68. package/data/templates/calendar-application/template.manifest.json +27 -0
  69. package/data/templates/composition-registry-lab/README.md +9 -0
  70. package/data/templates/composition-registry-lab/index.html +14 -0
  71. package/data/templates/composition-registry-lab/main.tsx +217 -0
  72. package/data/templates/composition-registry-lab/sample-layout.json +63 -0
  73. package/data/templates/composition-registry-lab/styles.css +343 -0
  74. package/data/templates/composition-registry-lab/template.manifest.json +34 -0
  75. package/data/templates/dashboard-composer/ActivityFeedBlock.tsx +255 -0
  76. package/data/templates/dashboard-composer/AgentStatusBlock.tsx +313 -0
  77. package/data/templates/dashboard-composer/AnalyticsDashboardBlocks.tsx +107 -0
  78. package/data/templates/dashboard-composer/AnalyticsMetricBlocks.tsx +87 -0
  79. package/data/templates/dashboard-composer/CalendarApplicationBlocks.tsx +519 -0
  80. package/data/templates/dashboard-composer/CeramicPuckAdapter.tsx +380 -0
  81. package/data/templates/dashboard-composer/DashboardComposerBlocks.tsx +337 -0
  82. package/data/templates/dashboard-composer/DatabaseWorkspaceBlocks.tsx +240 -0
  83. package/data/templates/dashboard-composer/README.md +53 -0
  84. package/data/templates/dashboard-composer/RegistryDataBlocks.tsx +238 -0
  85. package/data/templates/dashboard-composer/activity-feed-contract.ts +96 -0
  86. package/data/templates/dashboard-composer/activity-feed-fixture.ts +22 -0
  87. package/data/templates/dashboard-composer/activity-feed.css +154 -0
  88. package/data/templates/dashboard-composer/agent-status-contract.ts +133 -0
  89. package/data/templates/dashboard-composer/agent-status-fixture.ts +79 -0
  90. package/data/templates/dashboard-composer/agent-status-lab/index.html +19 -0
  91. package/data/templates/dashboard-composer/agent-status-lab/main.tsx +151 -0
  92. package/data/templates/dashboard-composer/agent-status-lab/styles.css +139 -0
  93. package/data/templates/dashboard-composer/agent-status.css +216 -0
  94. package/data/templates/dashboard-composer/analytics-dashboard.css +92 -0
  95. package/data/templates/dashboard-composer/calendar-application.css +216 -0
  96. package/data/templates/dashboard-composer/calendar-localization.ts +90 -0
  97. package/data/templates/dashboard-composer/calendar-panel-contract.ts +72 -0
  98. package/data/templates/dashboard-composer/dashboard-composer.css +328 -0
  99. package/data/templates/dashboard-composer/database-workspace.css +107 -0
  100. package/data/templates/dashboard-composer/index.html +14 -0
  101. package/data/templates/dashboard-composer/main.tsx +550 -0
  102. package/data/templates/dashboard-composer/sample-layout.json +147 -0
  103. package/data/templates/dashboard-composer/styles.css +198 -0
  104. package/data/templates/dashboard-composer/template.manifest.json +34 -0
  105. package/data/templates/dashboard-composer/visual-editor/PuckEditorSurface.tsx +132 -0
  106. package/data/templates/dashboard-composer/visual-editor/VisualEditorApp.tsx +343 -0
  107. package/data/templates/dashboard-composer/visual-editor/index.html +17 -0
  108. package/data/templates/dashboard-composer/visual-editor/main.tsx +95 -0
  109. package/data/templates/dashboard-composer/visual-editor/styles.css +310 -0
  110. package/data/templates/database-workspace/DatabaseWorkspaceBlocks.tsx +240 -0
  111. package/data/templates/database-workspace/README.md +5 -0
  112. package/data/templates/database-workspace/database-workspace.css +107 -0
  113. package/data/templates/database-workspace/index.html +14 -0
  114. package/data/templates/database-workspace/main.tsx +247 -0
  115. package/data/templates/database-workspace/styles.css +121 -0
  116. package/data/templates/database-workspace/template.manifest.json +19 -0
  117. package/data/templates/interaction-lab/InteractionWorkbench.tsx +271 -0
  118. package/data/templates/interaction-lab/README.md +7 -0
  119. package/data/templates/interaction-lab/index.html +14 -0
  120. package/data/templates/interaction-lab/interaction-workbench.css +226 -0
  121. package/data/templates/interaction-lab/main.tsx +104 -0
  122. package/data/templates/interaction-lab/styles.css +224 -0
  123. package/data/templates/interaction-lab/template.manifest.json +36 -0
  124. package/lib/api.mjs +72 -5
  125. package/lib/composition-runtime.mjs +382 -0
  126. package/lib/telemetry.mjs +74 -0
  127. package/package.json +4 -1
@@ -0,0 +1,216 @@
1
+ .ceramic-calendar-sidebar,
2
+ .ceramic-calendar-sidebar fieldset,
3
+ .ceramic-event-editor form {
4
+ display: grid;
5
+ }
6
+
7
+ .ceramic-calendar-sidebar {
8
+ align-content: start;
9
+ gap: var(--space-5);
10
+ padding: var(--space-4);
11
+ border-inline-end: var(--border-width-hairline) solid var(--border);
12
+ background: var(--surface);
13
+ }
14
+
15
+ .ceramic-calendar-sidebar-heading {
16
+ display: grid;
17
+ gap: var(--space-1);
18
+ }
19
+
20
+ .ceramic-calendar-sidebar-heading > span {
21
+ color: var(--muted-foreground);
22
+ font-size: var(--font-size-eyebrow);
23
+ font-weight: var(--font-weight-semibold);
24
+ letter-spacing: var(--tracking-eyebrow);
25
+ text-transform: uppercase;
26
+ }
27
+
28
+ .ceramic-calendar-sidebar-heading > strong {
29
+ font-size: var(--font-size-body);
30
+ }
31
+
32
+ .ceramic-calendar-mini {
33
+ inline-size: 100%;
34
+ padding: 0;
35
+ border: 0;
36
+ background: transparent;
37
+ }
38
+
39
+ .ceramic-calendar-mini .uds-calendar-month {
40
+ inline-size: 100%;
41
+ }
42
+
43
+ .ceramic-calendar-mini .uds-calendar-title {
44
+ font-size: var(--font-size-small);
45
+ }
46
+
47
+ .ceramic-calendar-mini .uds-calendar-grid {
48
+ inline-size: 100%;
49
+ }
50
+
51
+ .ceramic-calendar-mini .uds-calendar-day-button {
52
+ inline-size: 100%;
53
+ min-inline-size: 0;
54
+ block-size: 1.875rem;
55
+ min-block-size: 1.875rem;
56
+ padding: 0;
57
+ font-size: var(--font-size-eyebrow);
58
+ }
59
+
60
+ .ceramic-calendar-sidebar fieldset {
61
+ gap: var(--space-2);
62
+ margin: 0;
63
+ padding: var(--space-4) 0 0;
64
+ border: 0;
65
+ border-block-start: var(--border-width-hairline) solid var(--border);
66
+ }
67
+
68
+ .ceramic-calendar-sidebar legend {
69
+ margin-block-end: var(--space-3);
70
+ font-size: var(--font-size-small);
71
+ font-weight: var(--font-weight-semibold);
72
+ }
73
+
74
+ .ceramic-calendar-sidebar fieldset label,
75
+ .ceramic-event-checkbox {
76
+ display: grid;
77
+ grid-template-columns: auto minmax(0, 1fr);
78
+ align-items: center;
79
+ gap: var(--space-2);
80
+ min-block-size: var(--button-height-sm);
81
+ color: var(--muted-foreground);
82
+ font-size: var(--font-size-small);
83
+ }
84
+
85
+ .ceramic-calendar-sidebar fieldset label > span {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: var(--space-2);
89
+ }
90
+
91
+ .ceramic-calendar-sidebar fieldset i {
92
+ inline-size: 0.5rem;
93
+ block-size: 0.5rem;
94
+ border-radius: var(--radius-round);
95
+ background: var(--interaction-selection-border);
96
+ }
97
+
98
+ .ceramic-calendar-sidebar fieldset i[data-resource='customer'] {
99
+ background: var(--warning);
100
+ }
101
+
102
+ .ceramic-calendar-sidebar fieldset i[data-resource='focus'] {
103
+ background: var(--success);
104
+ }
105
+
106
+ .ceramic-timezone-selector {
107
+ display: grid;
108
+ gap: var(--space-2);
109
+ }
110
+
111
+ .ceramic-agenda-panel {
112
+ min-inline-size: 0;
113
+ padding: var(--space-4);
114
+ overflow: auto;
115
+ border-inline-start: var(--border-width-hairline) solid var(--border);
116
+ background: var(--surface);
117
+ }
118
+
119
+ .ceramic-agenda-panel .uds-scheduler-agenda li {
120
+ grid-template-columns: minmax(0, 1fr);
121
+ }
122
+
123
+ .ceramic-agenda-panel .uds-scheduler-agenda li > span {
124
+ display: none;
125
+ }
126
+
127
+ .ceramic-agenda-panel .uds-scheduler-event {
128
+ inline-size: 100%;
129
+ }
130
+
131
+ .ceramic-event-editor-backdrop {
132
+ position: fixed;
133
+ z-index: var(--z-overlay);
134
+ inset: 0;
135
+ background: var(--overlay);
136
+ }
137
+
138
+ .ceramic-event-editor {
139
+ position: fixed;
140
+ z-index: var(--z-modal);
141
+ inset-block: 0;
142
+ inset-inline-end: 0;
143
+ inline-size: min(100%, 30rem);
144
+ overflow: auto;
145
+ padding: var(--space-6);
146
+ border-inline-start: var(--border-width-strong) solid var(--border);
147
+ background: var(--popover-surface);
148
+ color: var(--foreground);
149
+ }
150
+
151
+ .ceramic-event-editor > header,
152
+ .ceramic-event-editor-actions,
153
+ .ceramic-event-editor-actions > div {
154
+ display: flex;
155
+ flex-wrap: wrap;
156
+ align-items: start;
157
+ gap: var(--space-2);
158
+ }
159
+
160
+ .ceramic-event-editor > header,
161
+ .ceramic-event-editor-actions {
162
+ justify-content: space-between;
163
+ }
164
+
165
+ .ceramic-event-editor > header > div {
166
+ display: grid;
167
+ gap: var(--space-1);
168
+ }
169
+
170
+ .ceramic-event-editor > header span {
171
+ color: var(--muted-foreground);
172
+ font-size: var(--font-size-eyebrow);
173
+ font-weight: var(--font-weight-semibold);
174
+ letter-spacing: var(--tracking-eyebrow);
175
+ text-transform: uppercase;
176
+ }
177
+
178
+ .ceramic-event-editor h2 {
179
+ margin: 0;
180
+ }
181
+
182
+ .ceramic-event-editor form {
183
+ gap: var(--space-4);
184
+ margin-block-start: var(--space-6);
185
+ }
186
+
187
+ .ceramic-event-editor-actions {
188
+ margin-block-start: var(--space-2);
189
+ padding-block-start: var(--space-4);
190
+ border-block-start: var(--border-width-hairline) solid var(--border);
191
+ }
192
+
193
+ .ceramic-event-editor-alert {
194
+ padding: var(--space-3);
195
+ border: var(--border-width-hairline) solid var(--destructive-border);
196
+ border-radius: var(--radius-md);
197
+ background: var(--destructive-surface);
198
+ color: var(--destructive-text);
199
+ font-size: var(--font-size-small);
200
+ }
201
+
202
+ .ceramic-event-editor-alert:focus {
203
+ outline: var(--focus-ring-width) solid var(--focus-ring);
204
+ outline-offset: var(--focus-ring-offset);
205
+ }
206
+
207
+ @media (max-width: 44rem) {
208
+ .ceramic-event-editor {
209
+ inline-size: 100%;
210
+ padding: var(--space-4);
211
+ }
212
+
213
+ .ceramic-event-editor-actions > div {
214
+ flex: 1 1 auto;
215
+ }
216
+ }
@@ -0,0 +1,90 @@
1
+ import type { SchedulerLabelOverrides } from '@utopia-studio-design/design-system/Calendar'
2
+
3
+ export const calendarLocaleOptions = ['en-US', 'ar-SA', 'ar-EG', 'ar-AE'] as const
4
+ export type CalendarLocale = typeof calendarLocaleOptions[number]
5
+
6
+ export function isArabicCalendarLocale(locale: string) {
7
+ return locale.toLowerCase().startsWith('ar')
8
+ }
9
+
10
+ const arabicSchedulerLabels: SchedulerLabelOverrides = {
11
+ navigationLabel: 'التنقل بين تواريخ التقويم',
12
+ changeDateLabel: 'تغيير تاريخ التقويم',
13
+ previous: 'السابق',
14
+ today: 'اليوم',
15
+ next: 'التالي',
16
+ viewsLabel: 'طرق عرض التقويم',
17
+ view: { month: 'الشهر', week: 'الأسبوع', day: 'اليوم', agenda: 'جدول الأعمال' },
18
+ compactView: { month: 'الشهر', week: 'الأسبوع', day: 'اليوم', agenda: 'الأجندة' },
19
+ newEvent: 'حدث جديد',
20
+ allDay: 'طوال اليوم',
21
+ allDayRegion: 'أحداث طوال اليوم',
22
+ dayView: 'عرض تقويم اليوم',
23
+ weekView: 'عرض تقويم الأسبوع',
24
+ monthView: 'عرض تقويم الشهر',
25
+ monthGrid: 'شبكة تقويم الشهر',
26
+ agenda: 'جدول الأحداث',
27
+ accessibleAgenda: 'جدول الأحداث المتاح',
28
+ noEventsInRange: 'لا توجد أحداث في هذه الفترة.',
29
+ calendars: (count) => `${new Intl.NumberFormat('ar').format(count)} تقاويم`,
30
+ more: (count) => `${new Intl.NumberFormat('ar').format(count)} أخرى`,
31
+ compactMore: (count) => `+${new Intl.NumberFormat('ar').format(count)}`,
32
+ selectDate: (dateLabel) => `اختيار ${dateLabel}`,
33
+ selectedEvent: 'الحدث المحدد',
34
+ selectedActions: 'إجراءات الحدث المحدد',
35
+ moveResizeActions: 'نقل الحدث المحدد وتغيير مدته',
36
+ moreActions: 'مزيد من إجراءات الحدث',
37
+ moveEarlier: 'نقل ١٥ دقيقة إلى وقت أبكر',
38
+ moveLater: 'نقل ١٥ دقيقة إلى وقت لاحق',
39
+ extend: 'تمديد ١٥ دقيقة',
40
+ duplicate: 'تكرار',
41
+ delete: 'حذف',
42
+ undo: 'التراجع عن آخر تغيير',
43
+ saving: 'جارٍ حفظ تغيير التقويم…',
44
+ saveError: 'فشل تغيير التقويم وتمت استعادته.',
45
+ conflict: 'يتعارض هذا التغيير مع حدث آخر أو فترة غير متاحة.',
46
+ loading: 'جارٍ تحميل أحداث التقويم…',
47
+ emptyTitle: 'لا توجد أحداث مجدولة',
48
+ emptyDescription: 'أنشئ حدثًا أو غيّر نطاق التاريخ.',
49
+ errorTitle: 'التقويم غير متاح',
50
+ }
51
+
52
+ export function getCalendarSchedulerLabels(locale: string) {
53
+ return isArabicCalendarLocale(locale) ? arabicSchedulerLabels : undefined
54
+ }
55
+
56
+ export function getCalendarSidebarLabels(locale: string) {
57
+ return isArabicCalendarLocale(locale) ? {
58
+ ariaLabel: 'الشريط الجانبي للتقويم',
59
+ jumpToDate: 'الانتقال إلى تاريخ',
60
+ schedule: 'الجدول',
61
+ calendars: 'تقاويمي',
62
+ } : undefined
63
+ }
64
+
65
+ export function getCalendarEditorLabels(locale: string) {
66
+ return isArabicCalendarLocale(locale) ? {
67
+ ariaLabel: 'محرر الحدث',
68
+ eyebrow: 'حدث التقويم',
69
+ newEvent: 'حدث جديد',
70
+ close: 'إغلاق محرر الحدث',
71
+ title: 'العنوان',
72
+ starts: 'يبدأ',
73
+ ends: 'ينتهي',
74
+ allDay: 'حدث طوال اليوم',
75
+ applyTo: 'تطبيق التغيير على',
76
+ occurrence: 'هذا التكرار',
77
+ series: 'السلسلة بأكملها',
78
+ save: 'حفظ الحدث',
79
+ saving: 'جارٍ حفظ الحدث…',
80
+ cancel: 'إلغاء',
81
+ delete: 'حذف الحدث',
82
+ validationSummary: 'تحقق من الحقول المميزة.',
83
+ titleRequired: 'أدخل عنوان الحدث.',
84
+ startRequired: 'أدخل تاريخ ووقت البدء.',
85
+ endRequired: 'أدخل تاريخ ووقت الانتهاء.',
86
+ invalidDateTime: 'أدخل تاريخًا ووقتًا صالحين.',
87
+ endAfterStart: 'يجب أن يكون الانتهاء بعد البدء.',
88
+ saveError: 'تعذر حفظ الحدث. لا تزال تغييراتك موجودة.',
89
+ } : undefined
90
+ }
@@ -0,0 +1,72 @@
1
+ import type {
2
+ SchedulerRootProps,
3
+ SchedulerView,
4
+ SchedulerWeekDay,
5
+ } from '@utopia-studio-design/design-system/Calendar'
6
+ import {
7
+ calendarLocaleOptions,
8
+ getCalendarSchedulerLabels,
9
+ type CalendarLocale,
10
+ } from './calendar-localization'
11
+
12
+ export type CalendarPanelDirection = 'inherit' | 'auto' | 'ltr' | 'rtl'
13
+
14
+ export interface CalendarPanelConfiguration {
15
+ direction?: 'ltr' | 'rtl'
16
+ initialScrollHour: number
17
+ locale: CalendarLocale
18
+ secondaryCalendar?: string
19
+ showAgendaAlternative: boolean
20
+ timezone: string
21
+ view: SchedulerView
22
+ weekStartsOn?: SchedulerWeekDay
23
+ }
24
+
25
+ export interface CalendarPanelContext {
26
+ compact: boolean
27
+ direction: 'ltr' | 'rtl'
28
+ }
29
+
30
+ const schedulerViews: SchedulerView[] = ['month', 'week', 'day', 'agenda']
31
+ const directionModes: CalendarPanelDirection[] = ['inherit', 'auto', 'ltr', 'rtl']
32
+
33
+ export function resolveCalendarPanelConfiguration(
34
+ props: Record<string, unknown>,
35
+ context: CalendarPanelContext,
36
+ ): CalendarPanelConfiguration & Pick<SchedulerRootProps, 'calendarSystem' | 'labels'> {
37
+ const configuredView = schedulerViews.includes(props.view as SchedulerView)
38
+ ? props.view as SchedulerView
39
+ : 'week'
40
+ const locale = calendarLocaleOptions.includes(props.locale as CalendarLocale)
41
+ ? props.locale as CalendarLocale
42
+ : 'en-US'
43
+ const directionMode = directionModes.includes(props.direction as CalendarPanelDirection)
44
+ ? props.direction as CalendarPanelDirection
45
+ : 'inherit'
46
+ const direction = directionMode === 'inherit'
47
+ ? context.direction
48
+ : directionMode === 'auto' ? undefined : directionMode
49
+ const weekStartsOn = Number.isInteger(props.weekStartsOn)
50
+ && Number(props.weekStartsOn) >= 0
51
+ && Number(props.weekStartsOn) <= 6
52
+ ? props.weekStartsOn as SchedulerWeekDay
53
+ : undefined
54
+ const initialScrollHour = Number.isFinite(props.initialScrollHour)
55
+ ? Math.min(23, Math.max(0, Number(props.initialScrollHour)))
56
+ : 8
57
+
58
+ return {
59
+ calendarSystem: 'gregory',
60
+ direction,
61
+ initialScrollHour,
62
+ labels: getCalendarSchedulerLabels(locale),
63
+ locale,
64
+ secondaryCalendar: props.secondaryCalendar === 'islamic-umalqura'
65
+ ? 'islamic-umalqura'
66
+ : undefined,
67
+ showAgendaAlternative: props.showAgendaAlternative === true,
68
+ timezone: typeof props.timeZone === 'string' && props.timeZone ? props.timeZone : 'UTC',
69
+ view: context.compact && configuredView === 'week' ? 'day' : configuredView,
70
+ weekStartsOn,
71
+ }
72
+ }