@roy-ui/ui 0.0.5 → 0.0.7

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.
@@ -0,0 +1,411 @@
1
+ .royui-tp {
2
+ --royui-tp-bg: #ffffff;
3
+ --royui-tp-fg: rgb(20, 20, 20);
4
+ --royui-tp-muted: rgba(20, 20, 20, 0.55);
5
+ --royui-tp-subtle: rgba(20, 20, 20, 0.35);
6
+ --royui-tp-border: rgba(20, 20, 20, 0.1);
7
+ --royui-tp-border-strong: rgba(20, 20, 20, 0.18);
8
+ --royui-tp-hover-bg: rgba(20, 20, 20, 0.04);
9
+ --royui-tp-accent: rgb(20, 20, 20);
10
+ --royui-tp-accent-fg: #ffffff;
11
+ --royui-tp-face-bg: #fafafa;
12
+ --royui-tp-face-stroke: rgba(20, 20, 20, 0.12);
13
+ --royui-tp-tick: rgba(20, 20, 20, 0.18);
14
+ --royui-tp-tick-major: rgba(20, 20, 20, 0.5);
15
+ --royui-tp-hand-quiet: rgba(20, 20, 20, 0.4);
16
+ --royui-tp-hand-active: rgb(20, 20, 20);
17
+ --royui-tp-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
18
+ --royui-tp-dur: 160ms;
19
+
20
+ position: relative;
21
+ display: inline-block;
22
+ font-family:
23
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial,
24
+ sans-serif;
25
+ }
26
+
27
+ /* ── Trigger ────────────────────────────────────────────── */
28
+
29
+ .royui-tp__trigger {
30
+ display: inline-flex;
31
+ align-items: center;
32
+ gap: 9px;
33
+ height: 34px;
34
+ padding: 0 12px;
35
+ background: var(--royui-tp-bg);
36
+ border: 1px solid var(--royui-tp-border);
37
+ border-radius: 8px;
38
+ color: var(--royui-tp-fg);
39
+ font: inherit;
40
+ font-size: 13.5px;
41
+ letter-spacing: -0.005em;
42
+ cursor: pointer;
43
+ transition:
44
+ border-color var(--royui-tp-dur) var(--royui-tp-ease),
45
+ background var(--royui-tp-dur) var(--royui-tp-ease);
46
+ font-variant-numeric: tabular-nums;
47
+ }
48
+ .royui-tp__trigger:hover {
49
+ background: var(--royui-tp-hover-bg);
50
+ border-color: var(--royui-tp-border-strong);
51
+ }
52
+ .royui-tp__trigger:disabled {
53
+ opacity: 0.5;
54
+ cursor: not-allowed;
55
+ }
56
+ .royui-tp__trigger-dot {
57
+ width: 5px;
58
+ height: 5px;
59
+ border-radius: 999px;
60
+ background: var(--royui-tp-subtle);
61
+ }
62
+
63
+ /* ── Panel ──────────────────────────────────────────────── */
64
+
65
+ .royui-tp__panel {
66
+ position: absolute;
67
+ top: calc(100% + 8px);
68
+ z-index: 40;
69
+ width: 280px;
70
+ background: var(--royui-tp-bg);
71
+ border: 1px solid var(--royui-tp-border);
72
+ border-radius: 14px;
73
+ padding: 14px;
74
+ box-shadow:
75
+ 0 0 0 0.5px rgba(20, 20, 20, 0.04),
76
+ 0 6px 14px rgba(0, 0, 0, 0.06),
77
+ 0 22px 44px rgba(0, 0, 0, 0.12);
78
+ animation: royui-tp-in var(--royui-tp-dur) var(--royui-tp-ease);
79
+ }
80
+ .royui-tp__panel--left { left: 0; }
81
+ .royui-tp__panel--right { right: 0; }
82
+
83
+ .royui-tp__head {
84
+ display: flex;
85
+ justify-content: space-between;
86
+ align-items: center;
87
+ gap: 12px;
88
+ margin-bottom: 12px;
89
+ }
90
+
91
+ .royui-tp__readout {
92
+ font-size: 22px;
93
+ font-weight: 500;
94
+ letter-spacing: -0.01em;
95
+ color: var(--royui-tp-fg);
96
+ font-variant-numeric: tabular-nums;
97
+ }
98
+
99
+ .royui-tp__variants {
100
+ display: inline-flex;
101
+ background: var(--royui-tp-hover-bg);
102
+ border-radius: 7px;
103
+ padding: 2px;
104
+ }
105
+ .royui-tp__variant {
106
+ background: transparent;
107
+ border: 0;
108
+ padding: 4px 10px;
109
+ font: inherit;
110
+ font-size: 11.5px;
111
+ color: var(--royui-tp-muted);
112
+ cursor: pointer;
113
+ border-radius: 5px;
114
+ transition:
115
+ background var(--royui-tp-dur) var(--royui-tp-ease),
116
+ color var(--royui-tp-dur) var(--royui-tp-ease);
117
+ }
118
+ .royui-tp__variant:hover {
119
+ color: var(--royui-tp-fg);
120
+ }
121
+ .royui-tp__variant--on {
122
+ background: var(--royui-tp-bg);
123
+ color: var(--royui-tp-fg);
124
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
125
+ }
126
+
127
+ .royui-tp__body {
128
+ display: flex;
129
+ justify-content: center;
130
+ padding: 4px 0 8px;
131
+ }
132
+
133
+ /* ── Analog ─────────────────────────────────────────────── */
134
+
135
+ .royui-tp-analog {
136
+ display: flex;
137
+ flex-direction: column;
138
+ align-items: center;
139
+ gap: 12px;
140
+ }
141
+
142
+ .royui-tp-analog__face {
143
+ touch-action: none;
144
+ user-select: none;
145
+ }
146
+
147
+ .royui-tp-analog__bezel {
148
+ fill: var(--royui-tp-face-bg);
149
+ stroke: var(--royui-tp-face-stroke);
150
+ stroke-width: 1;
151
+ }
152
+
153
+ .royui-tp-analog__tick {
154
+ stroke: var(--royui-tp-tick);
155
+ stroke-width: 1;
156
+ }
157
+ .royui-tp-analog__tick--major {
158
+ stroke: var(--royui-tp-tick-major);
159
+ stroke-width: 1.2;
160
+ }
161
+
162
+ .royui-tp-analog__numeral {
163
+ font-family: inherit;
164
+ font-size: 11px;
165
+ font-weight: 500;
166
+ fill: var(--royui-tp-muted);
167
+ user-select: none;
168
+ }
169
+
170
+ .royui-tp-analog__hand {
171
+ stroke-linecap: round;
172
+ transition: stroke var(--royui-tp-dur) var(--royui-tp-ease);
173
+ cursor: grab;
174
+ }
175
+ .royui-tp-analog__hand:active {
176
+ cursor: grabbing;
177
+ }
178
+ .royui-tp-analog__hand--hour {
179
+ stroke: var(--royui-tp-hand-quiet);
180
+ stroke-width: 3;
181
+ }
182
+ .royui-tp-analog__hand--minute {
183
+ stroke: var(--royui-tp-hand-quiet);
184
+ stroke-width: 2;
185
+ }
186
+ .royui-tp-analog__hand--active {
187
+ stroke: var(--royui-tp-hand-active);
188
+ }
189
+
190
+ .royui-tp-analog__pin {
191
+ fill: var(--royui-tp-hand-active);
192
+ }
193
+
194
+ .royui-tp-analog__modes {
195
+ display: inline-flex;
196
+ align-items: center;
197
+ gap: 8px;
198
+ flex-wrap: wrap;
199
+ justify-content: center;
200
+ }
201
+ .royui-tp-analog__mode {
202
+ background: transparent;
203
+ border: 1px solid var(--royui-tp-border);
204
+ border-radius: 7px;
205
+ padding: 4px 10px;
206
+ font: inherit;
207
+ font-size: 11.5px;
208
+ color: var(--royui-tp-muted);
209
+ cursor: pointer;
210
+ transition:
211
+ background var(--royui-tp-dur) var(--royui-tp-ease),
212
+ color var(--royui-tp-dur) var(--royui-tp-ease),
213
+ border-color var(--royui-tp-dur) var(--royui-tp-ease);
214
+ }
215
+ .royui-tp-analog__mode:hover {
216
+ background: var(--royui-tp-hover-bg);
217
+ }
218
+ .royui-tp-analog__mode--on {
219
+ background: var(--royui-tp-accent);
220
+ color: var(--royui-tp-accent-fg);
221
+ border-color: var(--royui-tp-accent);
222
+ }
223
+
224
+ /* AM / PM pair — segmented control flanking the mode tabs. */
225
+ .royui-tp-analog__period {
226
+ display: inline-flex;
227
+ background: var(--royui-tp-hover-bg);
228
+ border-radius: 7px;
229
+ padding: 2px;
230
+ }
231
+ .royui-tp-analog__period-btn {
232
+ background: transparent;
233
+ border: 0;
234
+ padding: 3px 10px;
235
+ font: inherit;
236
+ font-size: 11px;
237
+ font-weight: 600;
238
+ color: var(--royui-tp-muted);
239
+ cursor: pointer;
240
+ border-radius: 5px;
241
+ letter-spacing: 0.02em;
242
+ transition:
243
+ background var(--royui-tp-dur) var(--royui-tp-ease),
244
+ color var(--royui-tp-dur) var(--royui-tp-ease);
245
+ }
246
+ .royui-tp-analog__period-btn:hover {
247
+ color: var(--royui-tp-fg);
248
+ }
249
+ .royui-tp-analog__period-btn--on {
250
+ background: var(--royui-tp-bg);
251
+ color: var(--royui-tp-fg);
252
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
253
+ }
254
+
255
+ /* ── Digital ────────────────────────────────────────────── */
256
+
257
+ .royui-tp-digital {
258
+ display: flex;
259
+ flex-direction: column;
260
+ align-items: center;
261
+ gap: 6px;
262
+ padding: 14px 8px 4px;
263
+ }
264
+
265
+ .royui-tp-digital__row {
266
+ display: flex;
267
+ align-items: center;
268
+ gap: 8px;
269
+ }
270
+
271
+ .royui-tp-digital__seg {
272
+ font: inherit;
273
+ font-size: 44px;
274
+ font-weight: 500;
275
+ letter-spacing: -0.02em;
276
+ color: var(--royui-tp-fg);
277
+ font-variant-numeric: tabular-nums;
278
+ background: var(--royui-tp-face-bg);
279
+ border: 1px solid var(--royui-tp-border);
280
+ border-radius: 10px;
281
+ padding: 8px 14px;
282
+ min-width: 78px;
283
+ text-align: center;
284
+ cursor: ns-resize;
285
+ outline: none;
286
+ transition:
287
+ border-color var(--royui-tp-dur) var(--royui-tp-ease),
288
+ background var(--royui-tp-dur) var(--royui-tp-ease);
289
+ }
290
+ .royui-tp-digital__seg:hover,
291
+ .royui-tp-digital__seg:focus {
292
+ border-color: var(--royui-tp-border-strong);
293
+ background: var(--royui-tp-bg);
294
+ }
295
+
296
+ .royui-tp-digital__sep {
297
+ font-size: 36px;
298
+ color: var(--royui-tp-subtle);
299
+ font-weight: 300;
300
+ padding-bottom: 6px;
301
+ }
302
+
303
+ .royui-tp-digital__period {
304
+ display: inline-flex;
305
+ background: var(--royui-tp-hover-bg);
306
+ border-radius: 8px;
307
+ padding: 2px;
308
+ margin-top: 12px;
309
+ }
310
+ .royui-tp-digital__period-btn {
311
+ background: transparent;
312
+ border: 0;
313
+ padding: 5px 14px;
314
+ font: inherit;
315
+ font-size: 12px;
316
+ font-weight: 600;
317
+ letter-spacing: 0.02em;
318
+ color: var(--royui-tp-muted);
319
+ cursor: pointer;
320
+ border-radius: 6px;
321
+ transition:
322
+ background var(--royui-tp-dur) var(--royui-tp-ease),
323
+ color var(--royui-tp-dur) var(--royui-tp-ease);
324
+ }
325
+ .royui-tp-digital__period-btn:hover {
326
+ color: var(--royui-tp-fg);
327
+ }
328
+ .royui-tp-digital__period-btn--on {
329
+ background: var(--royui-tp-bg);
330
+ color: var(--royui-tp-fg);
331
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
332
+ }
333
+
334
+ .royui-tp-digital__hint {
335
+ font-size: 11px;
336
+ color: var(--royui-tp-subtle);
337
+ letter-spacing: 0.01em;
338
+ }
339
+
340
+ /* ── Foot ───────────────────────────────────────────────── */
341
+
342
+ .royui-tp__foot {
343
+ display: flex;
344
+ justify-content: flex-end;
345
+ gap: 6px;
346
+ margin-top: 12px;
347
+ padding-top: 12px;
348
+ border-top: 1px solid var(--royui-tp-border);
349
+ }
350
+ .royui-tp__ghost,
351
+ .royui-tp__primary {
352
+ font: inherit;
353
+ font-size: 12.5px;
354
+ padding: 6px 12px;
355
+ border-radius: 7px;
356
+ cursor: pointer;
357
+ transition:
358
+ background var(--royui-tp-dur) var(--royui-tp-ease),
359
+ color var(--royui-tp-dur) var(--royui-tp-ease);
360
+ }
361
+ .royui-tp__ghost {
362
+ background: transparent;
363
+ border: 1px solid var(--royui-tp-border);
364
+ color: var(--royui-tp-muted);
365
+ }
366
+ .royui-tp__ghost:hover {
367
+ color: var(--royui-tp-fg);
368
+ background: var(--royui-tp-hover-bg);
369
+ }
370
+ .royui-tp__primary {
371
+ background: var(--royui-tp-accent);
372
+ color: var(--royui-tp-accent-fg);
373
+ border: 1px solid var(--royui-tp-accent);
374
+ }
375
+
376
+ @keyframes royui-tp-in {
377
+ from { opacity: 0; transform: translateY(-4px) scale(0.98); }
378
+ to { opacity: 1; transform: none; }
379
+ }
380
+
381
+ /* ── Dark ───────────────────────────────────────────────── */
382
+
383
+ @media (prefers-color-scheme: dark) {
384
+ .royui-tp {
385
+ --royui-tp-bg: #131315;
386
+ --royui-tp-fg: rgba(255, 255, 255, 0.94);
387
+ --royui-tp-muted: rgba(255, 255, 255, 0.55);
388
+ --royui-tp-subtle: rgba(255, 255, 255, 0.32);
389
+ --royui-tp-border: rgba(255, 255, 255, 0.1);
390
+ --royui-tp-border-strong: rgba(255, 255, 255, 0.22);
391
+ --royui-tp-hover-bg: rgba(255, 255, 255, 0.06);
392
+ --royui-tp-accent: rgba(255, 255, 255, 0.95);
393
+ --royui-tp-accent-fg: #0a0a0a;
394
+ --royui-tp-face-bg: rgba(255, 255, 255, 0.03);
395
+ --royui-tp-face-stroke: rgba(255, 255, 255, 0.1);
396
+ --royui-tp-tick: rgba(255, 255, 255, 0.2);
397
+ --royui-tp-tick-major: rgba(255, 255, 255, 0.55);
398
+ --royui-tp-hand-quiet: rgba(255, 255, 255, 0.42);
399
+ --royui-tp-hand-active: rgba(255, 255, 255, 0.95);
400
+ }
401
+ .royui-tp__panel {
402
+ box-shadow:
403
+ 0 0 0 0.5px rgba(255, 255, 255, 0.06),
404
+ 0 6px 14px rgba(0, 0, 0, 0.4),
405
+ 0 22px 44px rgba(0, 0, 0, 0.55);
406
+ }
407
+ }
408
+
409
+ @media (prefers-reduced-motion: reduce) {
410
+ .royui-tp__panel { animation: none; }
411
+ }