@jacshuo/onyx 2.0.0 → 2.2.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 (175) hide show
  1. package/README.md +358 -361
  2. package/dist/Chart/BarChart.cjs +1 -1
  3. package/dist/Chart/BarChart.js +1 -1
  4. package/dist/Chart/LineChart.cjs +1 -1
  5. package/dist/Chart/LineChart.js +1 -1
  6. package/dist/Chart/PieChart.cjs +1 -1
  7. package/dist/Chart/PieChart.js +1 -1
  8. package/dist/Chart/ScatterChart.cjs +1 -1
  9. package/dist/Chart/ScatterChart.js +1 -1
  10. package/dist/Chart/index.cjs +1 -1
  11. package/dist/Chart/index.js +1 -1
  12. package/dist/DataDisplay/CodeBlock.cjs +2 -2
  13. package/dist/DataDisplay/CodeBlock.js +2 -2
  14. package/dist/DataDisplay/List.cjs +1 -1
  15. package/dist/DataDisplay/List.js +1 -1
  16. package/dist/DataDisplay/MetricCard.cjs +1 -0
  17. package/dist/DataDisplay/MetricCard.d.cts +3 -0
  18. package/dist/DataDisplay/MetricCard.d.ts +3 -0
  19. package/dist/DataDisplay/MetricCard.js +1 -0
  20. package/dist/DataDisplay/Stat.cjs +1 -0
  21. package/dist/DataDisplay/Stat.d.cts +3 -0
  22. package/dist/DataDisplay/Stat.d.ts +3 -0
  23. package/dist/DataDisplay/Stat.js +1 -0
  24. package/dist/DataDisplay/Table.cjs +1 -1
  25. package/dist/DataDisplay/Table.js +1 -1
  26. package/dist/DataDisplay/Tree.cjs +1 -1
  27. package/dist/DataDisplay/Tree.js +1 -1
  28. package/dist/DataDisplay/index.cjs +2 -2
  29. package/dist/DataDisplay/index.d.cts +6 -0
  30. package/dist/DataDisplay/index.d.ts +6 -0
  31. package/dist/DataDisplay/index.js +2 -2
  32. package/dist/Extras/CommandPalette.cjs +1 -0
  33. package/dist/Extras/CommandPalette.css +1 -0
  34. package/dist/Extras/CommandPalette.d.cts +4 -0
  35. package/dist/Extras/CommandPalette.d.ts +4 -0
  36. package/dist/Extras/CommandPalette.js +1 -0
  37. package/dist/Extras/DateTimePicker.cjs +1 -0
  38. package/dist/Extras/DateTimePicker.css +1 -0
  39. package/dist/Extras/DateTimePicker.d.cts +5 -0
  40. package/dist/Extras/DateTimePicker.d.ts +5 -0
  41. package/dist/Extras/DateTimePicker.js +1 -0
  42. package/dist/Extras/FileExplorer.cjs +2 -2
  43. package/dist/Extras/FileExplorer.js +2 -2
  44. package/dist/Extras/Timeline.cjs +1 -0
  45. package/dist/Extras/Timeline.css +1 -0
  46. package/dist/Extras/Timeline.d.cts +6 -0
  47. package/dist/Extras/Timeline.d.ts +6 -0
  48. package/dist/Extras/Timeline.js +1 -0
  49. package/dist/Extras/index.cjs +4 -4
  50. package/dist/Extras/index.css +1 -1
  51. package/dist/Extras/index.d.cts +14 -0
  52. package/dist/Extras/index.d.ts +14 -0
  53. package/dist/Extras/index.js +4 -4
  54. package/dist/Feedback/Alert.cjs +1 -1
  55. package/dist/Feedback/Alert.js +1 -1
  56. package/dist/Feedback/ProgressBar.cjs +1 -1
  57. package/dist/Feedback/ProgressBar.js +1 -1
  58. package/dist/Feedback/Skeleton.cjs +1 -0
  59. package/dist/Feedback/Skeleton.d.cts +2 -0
  60. package/dist/Feedback/Skeleton.d.ts +2 -0
  61. package/dist/Feedback/Skeleton.js +1 -0
  62. package/dist/Feedback/Spin.cjs +2 -2
  63. package/dist/Feedback/Spin.js +2 -2
  64. package/dist/Feedback/Toast.cjs +1 -0
  65. package/dist/Feedback/Toast.d.cts +11 -0
  66. package/dist/Feedback/Toast.d.ts +11 -0
  67. package/dist/Feedback/Toast.js +1 -0
  68. package/dist/Feedback/index.cjs +2 -2
  69. package/dist/Feedback/index.d.cts +11 -0
  70. package/dist/Feedback/index.d.ts +11 -0
  71. package/dist/Feedback/index.js +2 -2
  72. package/dist/Forms/Select.cjs +1 -0
  73. package/dist/Forms/Select.css +1 -0
  74. package/dist/Forms/Select.d.cts +3 -0
  75. package/dist/Forms/Select.d.ts +3 -0
  76. package/dist/Forms/Select.js +1 -0
  77. package/dist/Navigation/Breadcrumb.cjs +1 -0
  78. package/dist/Navigation/Breadcrumb.d.cts +3 -0
  79. package/dist/Navigation/Breadcrumb.d.ts +3 -0
  80. package/dist/Navigation/Breadcrumb.js +1 -0
  81. package/dist/Navigation/Header.cjs +1 -1
  82. package/dist/Navigation/Header.js +1 -1
  83. package/dist/Navigation/Pagination.cjs +1 -0
  84. package/dist/Navigation/Pagination.d.cts +2 -0
  85. package/dist/Navigation/Pagination.d.ts +2 -0
  86. package/dist/Navigation/Pagination.js +1 -0
  87. package/dist/Navigation/RibbonBar.cjs +1 -0
  88. package/dist/Navigation/RibbonBar.d.cts +6 -0
  89. package/dist/Navigation/RibbonBar.d.ts +6 -0
  90. package/dist/Navigation/RibbonBar.js +1 -0
  91. package/dist/Navigation/SideNav.cjs +1 -1
  92. package/dist/Navigation/SideNav.js +1 -1
  93. package/dist/Navigation/index.cjs +2 -2
  94. package/dist/Navigation/index.d.cts +8 -0
  95. package/dist/Navigation/index.d.ts +8 -0
  96. package/dist/Navigation/index.js +2 -2
  97. package/dist/Overlay/ContextMenu.cjs +1 -0
  98. package/dist/Overlay/ContextMenu.d.cts +3 -0
  99. package/dist/Overlay/ContextMenu.d.ts +3 -0
  100. package/dist/Overlay/ContextMenu.js +1 -0
  101. package/dist/Overlay/Drawer.cjs +1 -0
  102. package/dist/Overlay/Drawer.css +1 -0
  103. package/dist/Overlay/Drawer.d.cts +10 -0
  104. package/dist/Overlay/Drawer.d.ts +10 -0
  105. package/dist/Overlay/Drawer.js +1 -0
  106. package/dist/Overlay/index.cjs +1 -1
  107. package/dist/Overlay/index.css +1 -0
  108. package/dist/Overlay/index.d.cts +8 -0
  109. package/dist/Overlay/index.d.ts +8 -0
  110. package/dist/Overlay/index.js +1 -1
  111. package/dist/Primitives/Avatar.cjs +1 -0
  112. package/dist/Primitives/Avatar.d.cts +4 -0
  113. package/dist/Primitives/Avatar.d.ts +4 -0
  114. package/dist/Primitives/Avatar.js +1 -0
  115. package/dist/Primitives/Badge.cjs +1 -1
  116. package/dist/Primitives/Badge.js +1 -1
  117. package/dist/Primitives/Button.cjs +1 -1
  118. package/dist/Primitives/Button.js +1 -1
  119. package/dist/Primitives/Checkbox.cjs +1 -1
  120. package/dist/Primitives/Checkbox.js +1 -1
  121. package/dist/Primitives/Dropdown.cjs +1 -1
  122. package/dist/Primitives/Dropdown.js +1 -1
  123. package/dist/Primitives/DropdownButton.cjs +1 -1
  124. package/dist/Primitives/DropdownButton.js +1 -1
  125. package/dist/Primitives/Indicator.cjs +1 -1
  126. package/dist/Primitives/Indicator.js +1 -1
  127. package/dist/Primitives/Input.cjs +1 -1
  128. package/dist/Primitives/Input.js +1 -1
  129. package/dist/Primitives/Label.cjs +1 -1
  130. package/dist/Primitives/Label.js +1 -1
  131. package/dist/Primitives/Radio.cjs +1 -1
  132. package/dist/Primitives/Radio.js +1 -1
  133. package/dist/Primitives/Slider.cjs +1 -0
  134. package/dist/Primitives/Slider.css +1 -0
  135. package/dist/Primitives/Slider.d.cts +4 -0
  136. package/dist/Primitives/Slider.d.ts +4 -0
  137. package/dist/Primitives/Slider.js +1 -0
  138. package/dist/Primitives/Switch.cjs +1 -1
  139. package/dist/Primitives/Switch.js +1 -1
  140. package/dist/Primitives/Tag.cjs +1 -0
  141. package/dist/Primitives/Tag.d.cts +2 -0
  142. package/dist/Primitives/Tag.d.ts +2 -0
  143. package/dist/Primitives/Tag.js +1 -0
  144. package/dist/Primitives/index.cjs +1 -1
  145. package/dist/Primitives/index.css +1 -0
  146. package/dist/Primitives/index.d.cts +6 -0
  147. package/dist/Primitives/index.d.ts +6 -0
  148. package/dist/Primitives/index.js +1 -1
  149. package/dist/_tsup-dts-rollup.d.cts +1130 -3
  150. package/dist/_tsup-dts-rollup.d.ts +1130 -3
  151. package/dist/index.cjs +5 -5
  152. package/dist/index.css +1 -1
  153. package/dist/index.d.cts +74 -0
  154. package/dist/index.d.ts +74 -0
  155. package/dist/index.js +5 -5
  156. package/dist/styles/DataDisplay/MetricCard.css +1 -0
  157. package/dist/styles/DataDisplay/Stat.css +1 -0
  158. package/dist/styles/Extras/CommandPalette.css +65 -0
  159. package/dist/styles/Extras/DateTimePicker.css +566 -0
  160. package/dist/styles/Extras/Timeline.css +52 -0
  161. package/dist/styles/Feedback/Skeleton.css +37 -0
  162. package/dist/styles/Feedback/Toast.css +77 -0
  163. package/dist/styles/Forms/Select.css +36 -0
  164. package/dist/styles/Navigation/RibbonBar.css +1 -0
  165. package/dist/styles/Overlay/ContextMenu.css +1 -0
  166. package/dist/styles/Overlay/Drawer.css +52 -0
  167. package/dist/styles/Primitives/Slider.css +4 -0
  168. package/dist/styles/Primitives/Tag.css +1 -0
  169. package/dist/styles/base.css +1059 -20
  170. package/dist/styles.css +1726 -18
  171. package/dist/theme.cjs +1 -1
  172. package/dist/theme.d.cts +7 -0
  173. package/dist/theme.d.ts +7 -0
  174. package/dist/theme.js +1 -1
  175. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ /* MetricCard component-local styles */
@@ -0,0 +1 @@
1
+ /* Stat component-local styles */
@@ -0,0 +1,65 @@
1
+ /* ── Backdrop ─────────────────────────────────────────── */
2
+
3
+ .cmd-backdrop {
4
+ background: rgba(0, 0, 0, 0.4);
5
+ backdrop-filter: blur(2px);
6
+ animation: cmd-backdrop-in 120ms ease-out both;
7
+ }
8
+
9
+ @keyframes cmd-backdrop-in {
10
+ from {
11
+ opacity: 0;
12
+ }
13
+ to {
14
+ opacity: 1;
15
+ }
16
+ }
17
+
18
+ /* ── Panel ────────────────────────────────────────────── */
19
+
20
+ .cmd-panel {
21
+ animation: cmd-panel-in 180ms cubic-bezier(0.16, 1, 0.3, 1) both;
22
+ }
23
+
24
+ @keyframes cmd-panel-in {
25
+ from {
26
+ opacity: 0;
27
+ transform: scale(0.96) translateY(-10px);
28
+ }
29
+ to {
30
+ opacity: 1;
31
+ transform: scale(1) translateY(0);
32
+ }
33
+ }
34
+
35
+ /* ── Items ────────────────────────────────────────────── */
36
+
37
+ .cmd-item {
38
+ cursor: default;
39
+ user-select: none;
40
+ transition: background-color 80ms ease, color 80ms ease;
41
+ }
42
+
43
+ /* ── Results scrollbar ────────────────────────────────── */
44
+
45
+ #cmd-results {
46
+ scrollbar-width: thin;
47
+ scrollbar-color: var(--color-primary-300) transparent;
48
+ }
49
+
50
+ #cmd-results::-webkit-scrollbar {
51
+ width: 4px;
52
+ }
53
+
54
+ #cmd-results::-webkit-scrollbar-track {
55
+ background: transparent;
56
+ }
57
+
58
+ #cmd-results::-webkit-scrollbar-thumb {
59
+ background: var(--color-primary-300);
60
+ border-radius: 2px;
61
+ }
62
+
63
+ .dark #cmd-results::-webkit-scrollbar-thumb {
64
+ background: var(--color-primary-700);
65
+ }
@@ -0,0 +1,566 @@
1
+ /* ──────────────────────────────────────────────────────────────────────────
2
+ DateTimePicker (dtp) — component-scoped styles
3
+ All custom properties are prefixed with --dtp- for easy consumer override.
4
+ ────────────────────────────────────────────────────────────────────────── */
5
+
6
+ /* ── Design tokens ───────────────────────────────────────────────────────── */
7
+
8
+ :root {
9
+ --dtp-panel-bg: rgba(255, 255, 255, 0.9);
10
+ --dtp-panel-border: var(--color-primary-200);
11
+ --dtp-blur: 16px;
12
+ --dtp-accent: var(--color-primary-500);
13
+ --dtp-accent-bg: var(--color-primary-100);
14
+ --dtp-text-selected: var(--color-primary-800);
15
+ --dtp-text-muted: var(--color-secondary-400);
16
+ --dtp-text-primary: var(--color-primary-700);
17
+ --dtp-item-h: 40px;
18
+ --dtp-radius: 16px;
19
+ --dtp-shadow: 0 20px 60px rgba(0, 0, 0, 0.12), 0 4px 16px rgba(0, 0, 0, 0.06);
20
+ }
21
+
22
+ :root:where(.dark, .dark *),
23
+ .dark {
24
+ --dtp-panel-bg: rgba(15, 23, 42, 0.9);
25
+ --dtp-panel-border: var(--color-primary-700);
26
+ --dtp-accent-bg: rgba(100, 116, 139, 0.25);
27
+ --dtp-text-selected: var(--color-primary-100);
28
+ --dtp-text-muted: var(--color-secondary-500);
29
+ --dtp-text-primary: var(--color-primary-300);
30
+ --dtp-shadow: 0 20px 60px rgba(0, 0, 0, 0.45), 0 4px 16px rgba(0, 0, 0, 0.2);
31
+ }
32
+
33
+ /* ── Root wrapper ────────────────────────────────────────────────────────── */
34
+
35
+ .dtp-root {
36
+ display: inline-flex;
37
+ align-items: center;
38
+ }
39
+
40
+ /* ── Trigger wrapper (positions <button> trigger + sibling clear button) ─── */
41
+
42
+ .dtp-trigger-wrap {
43
+ position: relative;
44
+ display: inline-flex;
45
+ align-items: center;
46
+ }
47
+
48
+ /* ── Trigger button ──────────────────────────────────────────────────────── */
49
+
50
+ .dtp-trigger {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: 0.5rem;
54
+ padding: 0.5rem 0.75rem;
55
+ border-radius: 0.5rem;
56
+ border: 1px solid var(--color-primary-300);
57
+ background: var(--color-primary-50);
58
+ color: var(--color-primary-700);
59
+ font-size: 0.875rem;
60
+ line-height: 1.5;
61
+ cursor: pointer;
62
+ transition: border-color 150ms ease, box-shadow 150ms ease;
63
+ min-width: 180px;
64
+ text-align: left;
65
+ }
66
+
67
+ /* Extra padding on the right when clear button is visible */
68
+ .dtp-trigger--has-clear {
69
+ padding-right: 2rem;
70
+ }
71
+
72
+ :where(.dark, .dark *) .dtp-trigger {
73
+ border-color: var(--color-primary-600);
74
+ background: var(--color-primary-800);
75
+ color: var(--color-primary-200);
76
+ }
77
+
78
+ .dtp-trigger:hover:not(:disabled) {
79
+ border-color: var(--color-primary-400);
80
+ box-shadow: 0 0 0 3px var(--color-primary-100);
81
+ }
82
+
83
+ :where(.dark, .dark *) .dtp-trigger:hover:not(:disabled) {
84
+ box-shadow: 0 0 0 3px rgba(100, 116, 139, 0.2);
85
+ }
86
+
87
+ .dtp-trigger--disabled {
88
+ opacity: 0.5;
89
+ cursor: not-allowed;
90
+ }
91
+
92
+ .dtp-trigger-icon {
93
+ width: 1rem;
94
+ height: 1rem;
95
+ color: var(--color-primary-400);
96
+ flex-shrink: 0;
97
+ }
98
+
99
+ .dtp-trigger-text {
100
+ flex: 1;
101
+ min-width: 0;
102
+ white-space: nowrap;
103
+ overflow: hidden;
104
+ text-overflow: ellipsis;
105
+ }
106
+
107
+ .dtp-trigger-placeholder {
108
+ color: var(--color-secondary-400);
109
+ }
110
+
111
+ .dtp-trigger-clear {
112
+ position: absolute;
113
+ right: 0.375rem;
114
+ top: 50%;
115
+ transform: translateY(-50%);
116
+ display: inline-flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ padding: 0.125rem;
120
+ border-radius: 9999px;
121
+ border: none;
122
+ background: transparent;
123
+ color: var(--color-secondary-400);
124
+ cursor: pointer;
125
+ transition: background 100ms ease, color 100ms ease;
126
+ }
127
+
128
+ .dtp-trigger-clear:hover {
129
+ background: var(--color-primary-200);
130
+ color: var(--color-primary-600);
131
+ }
132
+
133
+ /* ── Panel (frosted glass popup) ─────────────────────────────────────────── */
134
+
135
+ .dtp-panel {
136
+ position: fixed;
137
+ z-index: 9999;
138
+ width: 340px;
139
+ max-width: calc(100vw - 32px);
140
+ border-radius: var(--dtp-radius);
141
+ border: 1px solid var(--dtp-panel-border);
142
+ background: var(--dtp-panel-bg);
143
+ -webkit-backdrop-filter: blur(var(--dtp-blur));
144
+ backdrop-filter: blur(var(--dtp-blur));
145
+ box-shadow: var(--dtp-shadow);
146
+ overflow: hidden;
147
+ animation: dtp-panel-in 200ms cubic-bezier(0.16, 1, 0.3, 1) both;
148
+ /* Default desktop position — overwritten by usePositioning */
149
+ top: 60px;
150
+ left: 0;
151
+ }
152
+
153
+ @keyframes dtp-panel-in {
154
+ from {
155
+ opacity: 0;
156
+ transform: scale(0.97) translateY(-8px);
157
+ }
158
+ to {
159
+ opacity: 1;
160
+ transform: scale(1) translateY(0);
161
+ }
162
+ }
163
+
164
+ /* Mobile: bottom sheet ─────────────────────────────────────────────────── */
165
+
166
+ @media (max-width: 640px) {
167
+ .dtp-panel {
168
+ position: fixed !important;
169
+ top: auto !important;
170
+ left: 0 !important;
171
+ bottom: 0;
172
+ width: 100vw;
173
+ max-width: 100vw;
174
+ border-radius: var(--dtp-radius) var(--dtp-radius) 0 0;
175
+ animation: dtp-panel-slide-up 280ms cubic-bezier(0.16, 1, 0.3, 1) both;
176
+ }
177
+
178
+ @keyframes dtp-panel-slide-up {
179
+ from {
180
+ opacity: 0;
181
+ transform: translateY(100%);
182
+ }
183
+ to {
184
+ opacity: 1;
185
+ transform: translateY(0);
186
+ }
187
+ }
188
+ }
189
+
190
+ /* ── Panel header ────────────────────────────────────────────────────────── */
191
+
192
+ .dtp-panel-header {
193
+ display: flex;
194
+ align-items: center;
195
+ justify-content: space-between;
196
+ padding: 0.875rem 1rem 0.625rem;
197
+ border-bottom: 1px solid var(--dtp-panel-border);
198
+ }
199
+
200
+ .dtp-panel-preview {
201
+ font-size: 0.9375rem;
202
+ font-weight: 600;
203
+ color: var(--dtp-text-primary);
204
+ letter-spacing: -0.01em;
205
+ flex: 1;
206
+ min-width: 0;
207
+ overflow: hidden;
208
+ text-overflow: ellipsis;
209
+ white-space: nowrap;
210
+ }
211
+
212
+ .dtp-panel-actions {
213
+ display: flex;
214
+ gap: 0.375rem;
215
+ margin-left: 0.5rem;
216
+ }
217
+
218
+ .dtp-view-btn {
219
+ display: inline-flex;
220
+ align-items: center;
221
+ justify-content: center;
222
+ width: 2rem;
223
+ height: 2rem;
224
+ border-radius: 0.5rem;
225
+ border: 1px solid transparent;
226
+ background: transparent;
227
+ color: var(--dtp-text-muted);
228
+ cursor: pointer;
229
+ transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
230
+ }
231
+
232
+ .dtp-view-btn:hover {
233
+ background: var(--dtp-accent-bg);
234
+ color: var(--dtp-text-selected);
235
+ }
236
+
237
+ .dtp-view-btn--active {
238
+ background: var(--dtp-accent-bg);
239
+ color: var(--dtp-accent);
240
+ border-color: var(--dtp-panel-border);
241
+ }
242
+
243
+ /* ── Panel body ──────────────────────────────────────────────────────────── */
244
+
245
+ .dtp-panel-body {
246
+ padding: 0.625rem 0.5rem;
247
+ }
248
+
249
+ /* ── Drum-roll layout ────────────────────────────────────────────────────── */
250
+
251
+ .dtp-drum {
252
+ display: flex;
253
+ align-items: stretch;
254
+ }
255
+
256
+ .dtp-drum-date,
257
+ .dtp-drum-time {
258
+ display: flex;
259
+ flex: 1;
260
+ min-width: 0;
261
+ }
262
+
263
+ .dtp-drum-sep {
264
+ width: 1px;
265
+ background: var(--dtp-panel-border);
266
+ margin: 0.5rem 0.25rem;
267
+ }
268
+
269
+ /* ── Scroll column ───────────────────────────────────────────────────────── */
270
+
271
+ .dtp-column {
272
+ position: relative;
273
+ flex: 1;
274
+ /* 5 visible rows */
275
+ height: calc(var(--dtp-item-h) * 5);
276
+ min-width: 0;
277
+ overflow: hidden;
278
+ }
279
+
280
+ /* Accent highlight band — centred over the selected item */
281
+ .dtp-column-highlight {
282
+ position: absolute;
283
+ left: 4px;
284
+ right: 4px;
285
+ top: 50%;
286
+ transform: translateY(-50%);
287
+ height: var(--dtp-item-h);
288
+ background: var(--dtp-accent-bg);
289
+ border-radius: 8px;
290
+ pointer-events: none;
291
+ z-index: 0;
292
+ }
293
+
294
+ /* Scrollable track */
295
+ .dtp-column-list {
296
+ height: 100%;
297
+ overflow-y: auto;
298
+ scrollbar-width: none;
299
+ -ms-overflow-style: none;
300
+ /* Top + bottom padding allows first/last item to centre in the 5-item window */
301
+ padding-top: calc(var(--dtp-item-h) * 2);
302
+ padding-bottom: calc(var(--dtp-item-h) * 2);
303
+ }
304
+
305
+ .dtp-column-list::-webkit-scrollbar {
306
+ display: none;
307
+ }
308
+
309
+ /* Individual drum-roll item */
310
+ .dtp-item {
311
+ position: relative;
312
+ z-index: 1;
313
+ height: var(--dtp-item-h);
314
+ display: flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ font-size: 0.875rem;
318
+ cursor: pointer;
319
+ color: var(--dtp-text-muted);
320
+ transition: color 100ms ease;
321
+ -webkit-user-select: none;
322
+ user-select: none;
323
+ }
324
+
325
+ .dtp-item:hover {
326
+ color: var(--dtp-text-primary);
327
+ }
328
+
329
+ .dtp-item--selected {
330
+ color: var(--dtp-text-selected);
331
+ font-weight: 600;
332
+ font-size: 1rem;
333
+ }
334
+
335
+ /* Gradient fades — blend items into panel background */
336
+ .dtp-fade-top,
337
+ .dtp-fade-bottom {
338
+ position: absolute;
339
+ left: 0;
340
+ right: 0;
341
+ height: calc(var(--dtp-item-h) * 2);
342
+ pointer-events: none;
343
+ z-index: 2;
344
+ }
345
+
346
+ .dtp-fade-top {
347
+ top: 0;
348
+ background: linear-gradient(to bottom, var(--dtp-panel-bg) 10%, transparent 100%);
349
+ }
350
+
351
+ .dtp-fade-bottom {
352
+ bottom: 0;
353
+ background: linear-gradient(to top, var(--dtp-panel-bg) 10%, transparent 100%);
354
+ }
355
+
356
+ /* ── Calendar grid ───────────────────────────────────────────────────────── */
357
+
358
+ .dtp-calendar {
359
+ padding: 0 0.25rem;
360
+ min-height: 230px;
361
+ }
362
+
363
+ .dtp-cal-nav {
364
+ display: flex;
365
+ align-items: center;
366
+ justify-content: space-between;
367
+ margin-bottom: 0.5rem;
368
+ }
369
+
370
+ .dtp-cal-nav-btn {
371
+ display: inline-flex;
372
+ align-items: center;
373
+ justify-content: center;
374
+ width: 2rem;
375
+ height: 2rem;
376
+ border-radius: 0.5rem;
377
+ border: none;
378
+ background: transparent;
379
+ color: var(--dtp-text-muted);
380
+ cursor: pointer;
381
+ transition: background 100ms ease, color 100ms ease;
382
+ }
383
+
384
+ .dtp-cal-nav-btn:hover {
385
+ background: var(--dtp-accent-bg);
386
+ color: var(--dtp-text-selected);
387
+ }
388
+
389
+ .dtp-cal-title {
390
+ font-size: 0.875rem;
391
+ font-weight: 600;
392
+ color: var(--dtp-text-primary);
393
+ }
394
+
395
+ .dtp-cal-weekdays {
396
+ display: grid;
397
+ grid-template-columns: repeat(7, 1fr);
398
+ margin-bottom: 0.125rem;
399
+ }
400
+
401
+ .dtp-cal-weekday {
402
+ text-align: center;
403
+ font-size: 0.6875rem;
404
+ font-weight: 500;
405
+ color: var(--dtp-text-muted);
406
+ padding: 0.25rem 0;
407
+ }
408
+
409
+ .dtp-cal-days {
410
+ display: grid;
411
+ grid-template-columns: repeat(7, 1fr);
412
+ gap: 2px;
413
+ }
414
+
415
+ .dtp-cal-day {
416
+ display: flex;
417
+ align-items: center;
418
+ justify-content: center;
419
+ height: 2rem;
420
+ border-radius: 0.375rem;
421
+ border: none;
422
+ background: transparent;
423
+ font-size: 0.8125rem;
424
+ color: var(--dtp-text-primary);
425
+ cursor: pointer;
426
+ transition: background 80ms ease, color 80ms ease;
427
+ width: 100%;
428
+ }
429
+
430
+ .dtp-cal-day:hover:not(:disabled):not(.dtp-cal-day--selected) {
431
+ background: var(--dtp-accent-bg);
432
+ }
433
+
434
+ .dtp-cal-day--other {
435
+ color: var(--dtp-text-muted);
436
+ opacity: 0.45;
437
+ }
438
+
439
+ .dtp-cal-day--selected {
440
+ background: var(--dtp-accent) !important;
441
+ color: #fff !important;
442
+ font-weight: 600;
443
+ }
444
+
445
+ .dtp-cal-day--today:not(.dtp-cal-day--selected) {
446
+ font-weight: 600;
447
+ color: var(--dtp-accent);
448
+ box-shadow: inset 0 0 0 1px var(--dtp-accent);
449
+ }
450
+
451
+ .dtp-cal-day--disabled {
452
+ opacity: 0.28;
453
+ cursor: not-allowed;
454
+ pointer-events: none;
455
+ }
456
+
457
+ /* ── Quick offset row ────────────────────────────────────────────────────── */
458
+
459
+ .dtp-panel-offset {
460
+ padding: 0.375rem 0.75rem 0.5rem;
461
+ border-top: 1px solid var(--dtp-panel-border);
462
+ }
463
+
464
+ .dtp-quick-offset {
465
+ display: flex;
466
+ align-items: center;
467
+ gap: 0.3rem;
468
+ flex-wrap: wrap;
469
+ padding: 0.25rem 0;
470
+ }
471
+
472
+ .dtp-offset-input {
473
+ width: 3.25rem;
474
+ padding: 0.25rem 0.4rem;
475
+ border-radius: 0.375rem;
476
+ border: 1px solid var(--dtp-panel-border);
477
+ background: transparent;
478
+ color: var(--dtp-text-primary);
479
+ font-size: 0.8125rem;
480
+ text-align: center;
481
+ outline: none;
482
+ transition: border-color 100ms ease;
483
+ }
484
+
485
+ .dtp-offset-input:focus {
486
+ border-color: var(--dtp-accent);
487
+ }
488
+
489
+ .dtp-offset-select {
490
+ padding: 0.25rem 0.3rem;
491
+ border-radius: 0.375rem;
492
+ border: 1px solid var(--dtp-panel-border);
493
+ background: transparent;
494
+ color: var(--dtp-text-primary);
495
+ font-size: 0.8125rem;
496
+ outline: none;
497
+ cursor: pointer;
498
+ transition: border-color 100ms ease;
499
+ }
500
+
501
+ .dtp-offset-select:focus {
502
+ border-color: var(--dtp-accent);
503
+ }
504
+
505
+ .dtp-offset-apply {
506
+ padding: 0.25rem 0.65rem;
507
+ border-radius: 0.375rem;
508
+ border: none;
509
+ background: var(--dtp-accent);
510
+ color: #fff;
511
+ font-size: 0.8125rem;
512
+ font-weight: 500;
513
+ cursor: pointer;
514
+ transition: opacity 120ms ease;
515
+ }
516
+
517
+ .dtp-offset-apply:hover {
518
+ opacity: 0.85;
519
+ }
520
+
521
+ /* ── Footer ──────────────────────────────────────────────────────────────── */
522
+
523
+ .dtp-panel-footer {
524
+ display: flex;
525
+ justify-content: flex-end;
526
+ gap: 0.5rem;
527
+ padding: 0.625rem 0.75rem;
528
+ border-top: 1px solid var(--dtp-panel-border);
529
+ }
530
+
531
+ .dtp-btn-cancel {
532
+ padding: 0.4375rem 1rem;
533
+ border-radius: 0.5rem;
534
+ border: 1px solid var(--dtp-panel-border);
535
+ background: transparent;
536
+ color: var(--dtp-text-muted);
537
+ font-size: 0.875rem;
538
+ cursor: pointer;
539
+ transition: background 100ms ease, color 100ms ease;
540
+ }
541
+
542
+ .dtp-btn-cancel:hover {
543
+ background: var(--dtp-accent-bg);
544
+ color: var(--dtp-text-primary);
545
+ }
546
+
547
+ .dtp-btn-confirm {
548
+ padding: 0.4375rem 1.25rem;
549
+ border-radius: 0.5rem;
550
+ border: none;
551
+ background: var(--dtp-accent);
552
+ color: #fff;
553
+ font-size: 0.875rem;
554
+ font-weight: 500;
555
+ cursor: pointer;
556
+ transition: opacity 120ms ease, transform 100ms ease;
557
+ }
558
+
559
+ .dtp-btn-confirm:hover {
560
+ opacity: 0.9;
561
+ transform: translateY(-1px);
562
+ }
563
+
564
+ .dtp-btn-confirm:active {
565
+ transform: translateY(0);
566
+ }
@@ -0,0 +1,52 @@
1
+ /* Timeline component-local styles */
2
+
3
+ /*
4
+ ── Timeline design tokens ─────────────────────────────────────────────────
5
+ Override any of these CSS custom properties to retheme the component
6
+ without touching source code. Place overrides in your global CSS or
7
+ inside a `.dark` / branded-theme selector.
8
+ */
9
+ :root {
10
+ /* Active card: holo aurora + spinning border ─────────────────────────── */
11
+ --tl-holo-base: var(--color-primary-600); /* base sweep (slate-600) */
12
+ --tl-holo-mid: var(--color-primary-400); /* fade-out (slate-400) */
13
+ --tl-holo-indigo: var(--color-indigo-400); /* first accent (indigo-400)*/
14
+ --tl-holo-violet: var(--color-violet-300); /* peak accent (violet-300) */
15
+ --tl-holo-cyan: var(--color-cyan-400); /* shimmer (cyan-400) */
16
+
17
+ /* Ambient glow — complete-status cards ───────────────────────────────── */
18
+ --tl-glow-complete-1: var(--color-success-600); /* emerald-600 inner sweep */
19
+ --tl-glow-complete-2: var(--color-success-400); /* emerald-400 mid sweep */
20
+
21
+ /* Ambient glow — error-status cards ─────────────────────────────────── */
22
+ --tl-glow-error-1: var(--color-danger-600); /* rose-600 inner sweep */
23
+ --tl-glow-error-2: var(--color-danger-400); /* rose-400 mid sweep */
24
+ --tl-glow-error-3: var(--color-danger-300); /* rose-300 outer edge */
25
+ }
26
+
27
+ /*
28
+ Animates the `from` angle of conic-gradient() directly.
29
+ This avoids rotating *elements* (which clips at corners on non-square cards);
30
+ the gradient rotates in-place instead, giving a clean sweep on any aspect ratio.
31
+ */
32
+ @property --tl-angle {
33
+ syntax: "<angle>";
34
+ initial-value: 0deg;
35
+ inherits: false;
36
+ }
37
+
38
+ @keyframes tl-holo-spin {
39
+ to { --tl-angle: 360deg; }
40
+ }
41
+
42
+ @keyframes tl-breathe {
43
+ 0%, 100% { opacity: 0.42; }
44
+ 50% { opacity: 0.9; }
45
+ }
46
+
47
+ /* Slow ambient pulse for non-active status cards */
48
+ @keyframes tl-glow-pulse {
49
+ 0%, 100% { opacity: 0.12; }
50
+ 50% { opacity: 0.24; }
51
+ }
52
+