@timebraid/vue 1.3.0 → 1.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.
package/dist/index.d.ts CHANGED
@@ -9,11 +9,11 @@ flat: boolean;
9
9
  plainTitle: boolean;
10
10
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLElement>;
11
11
 
12
- declare const __VLS_component_10: DefineComponent<__VLS_Props_27, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_27> & Readonly<{}>, {
12
+ declare const __VLS_component_10: DefineComponent<__VLS_Props_32, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_32> & Readonly<{}>, {
13
13
  width: number;
14
14
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
15
15
 
16
- declare const __VLS_component_11: DefineComponent<__VLS_Props_29, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_29> & Readonly<{}>, {
16
+ declare const __VLS_component_11: DefineComponent<__VLS_Props_34, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_34> & Readonly<{}>, {
17
17
  side: "top" | "bottom" | "left" | "right";
18
18
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
19
19
 
@@ -46,28 +46,31 @@ declare const __VLS_component_4: DefineComponent<__VLS_Props_8, {}, {}, {}, {},
46
46
  tone: keyof typeof TONES_2;
47
47
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
48
48
 
49
- declare const __VLS_component_5: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
49
+ declare const __VLS_component_5: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {
50
+ sticky: boolean;
51
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
50
52
 
51
- declare const __VLS_component_6: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
53
+ declare const __VLS_component_6: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
52
54
  close: () => any;
53
- }, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{
55
+ }, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{
54
56
  onClose?: (() => any) | undefined;
55
57
  }>, {
56
58
  inline: boolean;
57
59
  width: number;
58
60
  mobile: boolean;
59
61
  teleport: boolean;
62
+ cancelLabel: string;
60
63
  }, {}, {}, {}, string, ComponentProvideOptions, false, {
61
64
  dialog: HTMLDivElement;
62
65
  }, any>;
63
66
 
64
- declare const __VLS_component_7: DefineComponent<__VLS_Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
67
+ declare const __VLS_component_7: DefineComponent<__VLS_Props_19, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
65
68
  stop: (id: string) => any;
66
69
  start: () => any;
67
70
  "update:open": (v: boolean) => any;
68
71
  stopAll: () => any;
69
72
  openApp: () => any;
70
- }, string, PublicProps, Readonly<__VLS_Props_16> & Readonly<{
73
+ }, string, PublicProps, Readonly<__VLS_Props_19> & Readonly<{
71
74
  onStop?: ((id: string) => any) | undefined;
72
75
  onStart?: (() => any) | undefined;
73
76
  "onUpdate:open"?: ((v: boolean) => any) | undefined;
@@ -79,9 +82,11 @@ paused: boolean;
79
82
  compact: boolean;
80
83
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
81
84
 
82
- declare const __VLS_component_8: DefineComponent<__VLS_Props_20, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_20> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
85
+ declare const __VLS_component_8: DefineComponent<__VLS_Props_25, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_25> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
83
86
 
84
- declare const __VLS_component_9: DefineComponent<__VLS_Props_22, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_22> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
87
+ declare const __VLS_component_9: DefineComponent<__VLS_Props_27, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_27> & Readonly<{}>, {
88
+ scrolled: boolean;
89
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
85
90
 
86
91
  declare type __VLS_Props = {
87
92
  title?: string;
@@ -94,29 +99,50 @@ declare type __VLS_Props_10 = {
94
99
  name: string;
95
100
  size?: number;
96
101
  color?: string;
102
+ src?: string;
97
103
  };
98
104
 
99
105
  declare type __VLS_Props_11 = {
106
+ people: Person[];
107
+ size?: number;
108
+ max?: number;
109
+ };
110
+
111
+ declare type __VLS_Props_12 = {
112
+ name: string;
113
+ color: string;
114
+ };
115
+
116
+ declare type __VLS_Props_13 = {
117
+ name?: string;
118
+ color?: string;
119
+ all?: boolean;
120
+ size?: number;
121
+ };
122
+
123
+ declare type __VLS_Props_14 = {
100
124
  title: string;
101
125
  sub?: string;
126
+ sticky?: boolean;
102
127
  };
103
128
 
104
- declare type __VLS_Props_12 = {
129
+ declare type __VLS_Props_15 = {
105
130
  open: boolean;
106
131
  title: string;
107
132
  mobile?: boolean;
108
133
  width?: number;
109
134
  inline?: boolean;
110
135
  teleport?: boolean;
136
+ cancelLabel?: string;
111
137
  };
112
138
 
113
- declare type __VLS_Props_13 = {
139
+ declare type __VLS_Props_16 = {
114
140
  color: string;
115
141
  size?: number;
116
142
  running?: boolean;
117
143
  };
118
144
 
119
- declare type __VLS_Props_14 = {
145
+ declare type __VLS_Props_17 = {
120
146
  seconds: number;
121
147
  mode?: DurationFormat;
122
148
  size?: number;
@@ -124,41 +150,23 @@ declare type __VLS_Props_14 = {
124
150
  tone?: keyof typeof TONES_3;
125
151
  };
126
152
 
127
- declare type __VLS_Props_15 = {
128
- rows: WaterfallRow[];
153
+ declare type __VLS_Props_18 = {
154
+ rows: WaterfallProject[];
129
155
  start?: number;
130
156
  end?: number;
131
157
  labelW?: number;
132
158
  rowH?: number;
133
159
  compact?: boolean;
160
+ showWs?: boolean;
134
161
  };
135
162
 
136
- declare type __VLS_Props_16 = {
163
+ declare type __VLS_Props_19 = {
137
164
  running: PillTimer[];
138
165
  compact?: boolean;
139
166
  paused?: boolean;
140
167
  open?: boolean;
141
168
  };
142
169
 
143
- declare type __VLS_Props_17 = {
144
- workspaces: WorkspaceOption[];
145
- modelValue: string;
146
- };
147
-
148
- declare type __VLS_Props_18 = {
149
- task: string;
150
- project: string;
151
- color?: string;
152
- seconds: number;
153
- more?: number;
154
- android?: boolean;
155
- bottom?: number;
156
- };
157
-
158
- declare type __VLS_Props_19 = {
159
- opacity?: number;
160
- };
161
-
162
170
  declare type __VLS_Props_2 = {
163
171
  icon?: string;
164
172
  iconBg?: string;
@@ -173,61 +181,104 @@ declare type __VLS_Props_2 = {
173
181
  };
174
182
 
175
183
  declare type __VLS_Props_20 = {
184
+ workspaces: WorkspaceOption[];
185
+ modelValue: string;
186
+ showAll?: boolean;
187
+ };
188
+
189
+ declare type __VLS_Props_21 = {
190
+ workspaces: WorkspaceOption[];
191
+ modelValue: string;
192
+ showAll?: boolean;
193
+ embedded?: boolean;
194
+ };
195
+
196
+ declare type __VLS_Props_22 = {
197
+ open: boolean;
198
+ workspaces: WorkspaceOption[];
199
+ modelValue: string;
200
+ showAll?: boolean;
201
+ teleport?: boolean;
202
+ };
203
+
204
+ declare type __VLS_Props_23 = {
205
+ timers: PillTimer[];
206
+ android?: boolean;
207
+ bottom?: number;
208
+ };
209
+
210
+ declare type __VLS_Props_24 = {
211
+ opacity?: number;
212
+ };
213
+
214
+ declare type __VLS_Props_25 = {
176
215
  title: string;
177
216
  sub?: string;
178
217
  scrolled: boolean;
179
218
  };
180
219
 
181
- declare type __VLS_Props_21 = {
220
+ declare type __VLS_Props_26 = {
182
221
  items: TabItem[];
183
222
  modelValue: string;
184
223
  indicator?: boolean;
185
224
  };
186
225
 
187
- declare type __VLS_Props_22 = {
226
+ declare type __VLS_Props_27 = {
188
227
  title: string;
228
+ sub?: string;
229
+ scrolled?: boolean;
189
230
  };
190
231
 
191
- declare type __VLS_Props_23 = {
232
+ declare type __VLS_Props_28 = {
192
233
  items: TabItem[];
193
234
  modelValue: string;
194
235
  indicator?: boolean;
195
236
  };
196
237
 
197
238
  /**
198
- * Lucide glyph painted with a CSS mask so it follows currentColor.
239
+ * Lucide glyph rendered inline from the bundled table, so it follows currentColor and fetches nothing.
199
240
  * SUBSTITUTION: Timebraid has no icon set of its own yet; Lucide is the closest match to the mark.
200
241
  */
201
- declare type __VLS_Props_24 = {
202
- /** Lucide kebab-case name: play, pause, square, layers, file-text… */
242
+ declare type __VLS_Props_29 = {
243
+ /** Lucide kebab-case name from the bundled table: play, square, plus, folder-kanban... */
203
244
  name: string;
204
245
  /** 16 in the app, 20 in the site header, 24 in marketing rows. */
205
246
  size?: number;
206
247
  color?: string;
207
- /** Where this one glyph is masked from. Wins over the `TIMEBRAID_ICON_BASE` injection key, which every app can set once with `app.provide(TIMEBRAID_ICON_BASE, '/icons/')` and which itself falls back to `https://unpkg.com/lucide-static@latest/icons/`. Self-host and provide the key in an iOS WebView, which cannot paint a cross-origin mask. */
248
+ /** Only for a name that is not bundled: where that one glyph is masked from. Wins over the `TIMEBRAID_ICON_BASE` injection key. Bundled names never fetch. */
208
249
  base?: string;
209
250
  };
210
251
 
211
- /** The Timebraid mark from shipped artwork. Below 64px it swaps to the three-upright small-size PNGs. */
212
- declare type __VLS_Props_25 = {
252
+ declare type __VLS_Props_3 = {
253
+ modelValue: string;
254
+ options: {
255
+ value: string;
256
+ label: string;
257
+ }[];
258
+ size?: 'sm' | 'md';
259
+ };
260
+
261
+ /** The Timebraid stopwatch from shipped artwork: the detailed PNG plate at 64px and up, the flat small mark below, the 16px PNG under 24px. `mono` paints the one-colour mark in currentColor. */
262
+ declare type __VLS_Props_30 = {
213
263
  size?: number;
214
264
  wordmark?: boolean;
265
+ mono?: boolean;
215
266
  };
216
267
 
217
- declare type __VLS_Props_26 = {
268
+ declare type __VLS_Props_31 = {
218
269
  modelValue?: string;
219
270
  length?: number;
220
271
  error?: string;
221
272
  autofocus?: boolean;
222
273
  };
223
274
 
224
- declare type __VLS_Props_27 = {
275
+ declare type __VLS_Props_32 = {
225
276
  title: string;
226
277
  description?: string;
227
278
  width?: number;
228
279
  };
229
280
 
230
- declare type __VLS_Props_28 = {
281
+ declare type __VLS_Props_33 = {
231
282
  modelValue?: boolean;
232
283
  label: string;
233
284
  description?: string;
@@ -235,22 +286,13 @@ declare type __VLS_Props_28 = {
235
286
  disabled?: boolean;
236
287
  };
237
288
 
238
- declare type __VLS_Props_29 = {
289
+ declare type __VLS_Props_34 = {
239
290
  content: string;
240
291
  /** e.g. ⌘N - mono, muted, at the end. */
241
292
  shortcut?: string;
242
293
  side?: 'top' | 'bottom' | 'left' | 'right';
243
294
  };
244
295
 
245
- declare type __VLS_Props_3 = {
246
- modelValue: string;
247
- options: {
248
- value: string;
249
- label: string;
250
- }[];
251
- size?: 'sm' | 'md';
252
- };
253
-
254
296
  declare type __VLS_Props_4 = {
255
297
  kind?: keyof typeof KINDS;
256
298
  size?: keyof typeof SIZES;
@@ -395,6 +437,7 @@ declare function __VLS_template_7(): {
395
437
  declare function __VLS_template_8(): {
396
438
  attrs: Partial<{}>;
397
439
  slots: {
440
+ leading?(_: {}): any;
398
441
  right?(_: {}): any;
399
442
  };
400
443
  refs: {};
@@ -404,6 +447,7 @@ declare function __VLS_template_8(): {
404
447
  declare function __VLS_template_9(): {
405
448
  attrs: Partial<{}>;
406
449
  slots: {
450
+ title?(_: {}): any;
407
451
  right?(_: {}): any;
408
452
  };
409
453
  refs: {};
@@ -498,16 +542,26 @@ declare type __VLS_WithTemplateSlots_9<T, S> = T & {
498
542
  };
499
543
  };
500
544
 
545
+ export declare const ALL_WORKSPACES = "all";
546
+
501
547
  export declare function applyTheme(root: HTMLElement, theme: ResolvedTheme): void;
502
548
 
503
549
  /** Where TIcon masks from when nothing overrides it. */
504
- export declare const DEFAULT_ICON_BASE = "https://unpkg.com/lucide-static@latest/icons/";
550
+ export declare const DEFAULT_ICON_BASE = "https://unpkg.com/lucide-static@0.545.0/icons/";
505
551
 
506
552
  export declare type DurationFormat = 'clock' | 'short' | 'compact';
507
553
 
554
+ export declare const FILLED_NAMES: ReadonlySet<string>;
555
+
508
556
  /** 8047 → "2:14:07" (clock) · "2:14" (short) · "2h 14m" (compact) */
509
557
  export declare function formatDuration(seconds: number, format?: DurationFormat): string;
510
558
 
559
+ export declare function groupTimers(timers: PillTimer[]): TimerGroup[];
560
+
561
+ export declare const hasIcon: (name: string) => boolean;
562
+
563
+ export declare const ICON_NAMES: readonly string[];
564
+
511
565
  declare const KINDS: {
512
566
  readonly primary: {
513
567
  readonly background: "var(--accent)";
@@ -536,13 +590,27 @@ declare const KINDS: {
536
590
  };
537
591
  };
538
592
 
593
+ export declare function longestTimer(timers: PillTimer[]): PillTimer | null;
594
+
595
+ export declare interface Person {
596
+ name: string;
597
+ src?: string;
598
+ color?: string;
599
+ }
600
+
539
601
  export declare interface PillTimer {
540
602
  id: string;
541
603
  task: string;
542
604
  project: string;
605
+ projectId: string;
543
606
  color: string;
544
607
  since: string;
545
608
  seconds: number;
609
+ workspace?: {
610
+ id: string;
611
+ name: string;
612
+ color: string;
613
+ };
546
614
  }
547
615
 
548
616
  /** Okabe-Ito, the only palette permitted for projects and charts. */
@@ -590,9 +658,9 @@ export declare interface TabItem {
590
658
  icon: string;
591
659
  }
592
660
 
593
- export declare const TAndroidNavBar: DefineComponent<__VLS_Props_23, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
661
+ export declare const TAndroidNavBar: DefineComponent<__VLS_Props_28, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
594
662
  "update:modelValue": (id: string) => any;
595
- }, string, PublicProps, Readonly<__VLS_Props_23> & Readonly<{
663
+ }, string, PublicProps, Readonly<__VLS_Props_28> & Readonly<{
596
664
  "onUpdate:modelValue"?: ((id: string) => any) | undefined;
597
665
  }>, {
598
666
  indicator: boolean;
@@ -604,6 +672,11 @@ export declare const TAuthCard: __VLS_WithTemplateSlots_10<typeof __VLS_componen
604
672
 
605
673
  export declare const TAvatar: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {
606
674
  size: number;
675
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
676
+
677
+ export declare const TAvatarStack: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {
678
+ size: number;
679
+ max: number;
607
680
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
608
681
 
609
682
  export declare const TBadge: __VLS_WithTemplateSlots_4<typeof __VLS_component_4, __VLS_TemplateResult_4["slots"]>;
@@ -615,9 +688,9 @@ h: number;
615
688
 
616
689
  export declare const TBtn: __VLS_WithTemplateSlots_3<typeof __VLS_component_3, __VLS_TemplateResult_3["slots"]>;
617
690
 
618
- export declare const TCheckbox: DefineComponent<__VLS_Props_28, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
691
+ export declare const TCheckbox: DefineComponent<__VLS_Props_33, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
619
692
  "update:modelValue": (v: boolean) => any;
620
- }, string, PublicProps, Readonly<__VLS_Props_28> & Readonly<{
693
+ }, string, PublicProps, Readonly<__VLS_Props_33> & Readonly<{
621
694
  "onUpdate:modelValue"?: ((v: boolean) => any) | undefined;
622
695
  }>, {
623
696
  modelValue: boolean;
@@ -625,9 +698,9 @@ disabled: boolean;
625
698
  indeterminate: boolean;
626
699
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLLabelElement>;
627
700
 
628
- export declare const TCodeInput: DefineComponent<__VLS_Props_26, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
701
+ export declare const TCodeInput: DefineComponent<__VLS_Props_31, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
629
702
  "update:modelValue": (v: string) => any;
630
- }, string, PublicProps, Readonly<__VLS_Props_26> & Readonly<{
703
+ }, string, PublicProps, Readonly<__VLS_Props_31> & Readonly<{
631
704
  "onUpdate:modelValue"?: ((v: string) => any) | undefined;
632
705
  }>, {
633
706
  length: number;
@@ -635,12 +708,12 @@ modelValue: string;
635
708
  autofocus: boolean;
636
709
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
637
710
 
638
- export declare const TDot: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {
711
+ export declare const TDot: DefineComponent<__VLS_Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_16> & Readonly<{}>, {
639
712
  size: number;
640
713
  running: boolean;
641
714
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
642
715
 
643
- export declare const TDur: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {
716
+ export declare const TDur: DefineComponent<__VLS_Props_17, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_17> & Readonly<{}>, {
644
717
  size: number;
645
718
  tone: keyof typeof TONES_3;
646
719
  mode: DurationFormat;
@@ -667,10 +740,10 @@ export declare const THEME_PREFERENCES: ThemePreference[];
667
740
 
668
741
  export declare type ThemePreference = 'system' | 'light' | 'dark';
669
742
 
670
- export declare const TIcon: DefineComponent<__VLS_Props_24, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_24> & Readonly<{}>, {
743
+ export declare const TIcon: DefineComponent<__VLS_Props_29, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_29> & Readonly<{}>, {
671
744
  color: string;
672
745
  size: number;
673
- }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
746
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
674
747
 
675
748
  export declare const TIconBtn: DefineComponent<__VLS_Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
676
749
  click: (e: MouseEvent) => any;
@@ -685,11 +758,29 @@ tone: keyof typeof TONES;
685
758
  /** App-wide base URL every TIcon masks from: `app.provide(TIMEBRAID_ICON_BASE, '/icons/')`. */
686
759
  export declare const TIMEBRAID_ICON_BASE: InjectionKey<string>;
687
760
 
761
+ export declare interface TimerGroup {
762
+ workspace: TimerWorkspace | null;
763
+ projects: TimerProjectGroup[];
764
+ }
765
+
766
+ export declare interface TimerProjectGroup {
767
+ id: string;
768
+ name: string;
769
+ color: string;
770
+ timers: PillTimer[];
771
+ }
772
+
773
+ export declare interface TimerWorkspace {
774
+ id: string;
775
+ name: string;
776
+ color: string;
777
+ }
778
+
688
779
  export declare const TIOSNav: __VLS_WithTemplateSlots_8<typeof __VLS_component_8, __VLS_TemplateResult_8["slots"]>;
689
780
 
690
- export declare const TIOSTabBar: DefineComponent<__VLS_Props_21, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
781
+ export declare const TIOSTabBar: DefineComponent<__VLS_Props_26, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
691
782
  "update:modelValue": (id: string) => any;
692
- }, string, PublicProps, Readonly<__VLS_Props_21> & Readonly<{
783
+ }, string, PublicProps, Readonly<__VLS_Props_26> & Readonly<{
693
784
  "onUpdate:modelValue"?: ((id: string) => any) | undefined;
694
785
  }>, {
695
786
  indicator: boolean;
@@ -697,8 +788,9 @@ indicator: boolean;
697
788
 
698
789
  export declare const TLargeTitle: __VLS_WithTemplateSlots_5<typeof __VLS_component_5, __VLS_TemplateResult_5["slots"]>;
699
790
 
700
- export declare const TLogo: DefineComponent<__VLS_Props_25, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_25> & Readonly<{}>, {
791
+ export declare const TLogo: DefineComponent<__VLS_Props_30, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_30> & Readonly<{}>, {
701
792
  size: number;
793
+ mono: boolean;
702
794
  wordmark: boolean;
703
795
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
704
796
 
@@ -766,22 +858,22 @@ disabled: boolean;
766
858
 
767
859
  export declare const TSheet: __VLS_WithTemplateSlots_6<typeof __VLS_component_6, __VLS_TemplateResult_6["slots"]>;
768
860
 
769
- export declare const TStrokes: DefineComponent<__VLS_Props_19, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_19> & Readonly<{}>, {
861
+ export declare const TStrokes: DefineComponent<__VLS_Props_24, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_24> & Readonly<{}>, {
770
862
  opacity: number;
771
863
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
772
864
 
773
- export declare const TTimerBar: DefineComponent<__VLS_Props_18, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
774
- stop: () => any;
865
+ export declare const TTimerBar: DefineComponent<__VLS_Props_23, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
866
+ stop: (id: string) => any;
775
867
  open: () => any;
776
- }, string, PublicProps, Readonly<__VLS_Props_18> & Readonly<{
777
- onStop?: (() => any) | undefined;
868
+ stopAll: () => any;
869
+ }, string, PublicProps, Readonly<__VLS_Props_23> & Readonly<{
870
+ onStop?: ((id: string) => any) | undefined;
778
871
  onOpen?: (() => any) | undefined;
872
+ onStopAll?: (() => any) | undefined;
779
873
  }>, {
780
- color: string;
781
874
  bottom: number;
782
- more: number;
783
875
  android: boolean;
784
- }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
876
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
785
877
 
786
878
  export declare const TToggle: DefineComponent<__VLS_Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
787
879
  "update:modelValue": (v: boolean) => any;
@@ -793,32 +885,83 @@ disabled: boolean;
793
885
 
794
886
  export declare const TTooltip: __VLS_WithTemplateSlots_11<typeof __VLS_component_11, __VLS_TemplateResult_11["slots"]>;
795
887
 
796
- export declare const TWaterfall: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{}>, {
888
+ export declare const TWaterfall: DefineComponent<__VLS_Props_18, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_18> & Readonly<{}>, {
797
889
  end: number;
798
890
  start: number;
799
891
  compact: boolean;
800
892
  labelW: number;
801
893
  rowH: number;
894
+ showWs: boolean;
802
895
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
803
896
 
804
- export declare const TWorkspaceSwitcher: DefineComponent<__VLS_Props_17, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
897
+ export declare const TWorkspaceDrawer: DefineComponent<__VLS_Props_22, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
898
+ help: () => any;
805
899
  "update:modelValue": (id: string) => any;
900
+ close: () => any;
806
901
  create: () => any;
807
- }, string, PublicProps, Readonly<__VLS_Props_17> & Readonly<{
902
+ preferences: () => any;
903
+ actions: () => any;
904
+ }, string, PublicProps, Readonly<__VLS_Props_22> & Readonly<{
905
+ onHelp?: (() => any) | undefined;
808
906
  "onUpdate:modelValue"?: ((id: string) => any) | undefined;
907
+ onClose?: (() => any) | undefined;
809
908
  onCreate?: (() => any) | undefined;
810
- }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
909
+ onPreferences?: (() => any) | undefined;
910
+ onActions?: (() => any) | undefined;
911
+ }>, {
912
+ teleport: boolean;
913
+ showAll: boolean;
914
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
915
+
916
+ export declare const TWorkspaceMenu: DefineComponent<__VLS_Props_21, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
917
+ "update:modelValue": (id: string) => any;
918
+ create: () => any;
919
+ }, string, PublicProps, Readonly<__VLS_Props_21> & Readonly<{
920
+ "onUpdate:modelValue"?: ((id: string) => any) | undefined;
921
+ onCreate?: (() => any) | undefined;
922
+ }>, {
923
+ showAll: boolean;
924
+ embedded: boolean;
925
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
926
+
927
+ export declare const TWorkspaceSwitcher: DefineComponent<__VLS_Props_20, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
928
+ "update:modelValue": (id: string) => any;
929
+ create: () => any;
930
+ }, string, PublicProps, Readonly<__VLS_Props_20> & Readonly<{
931
+ "onUpdate:modelValue"?: ((id: string) => any) | undefined;
932
+ onCreate?: (() => any) | undefined;
933
+ }>, {
934
+ showAll: boolean;
935
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
811
936
  root: HTMLDivElement;
812
937
  }, HTMLDivElement>;
813
938
 
939
+ export declare const TWsIcon: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {
940
+ color: string;
941
+ name: string;
942
+ size: number;
943
+ all: boolean;
944
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
945
+
946
+ export declare const TWsTag: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
947
+
814
948
  export declare function watchTheme(pref: () => ThemePreference, root: HTMLElement, media?: MediaQueryList | null): {
815
949
  refresh(): void;
816
950
  stop(): void;
817
951
  };
818
952
 
953
+ export declare interface WaterfallProject {
954
+ project: string;
955
+ color: string;
956
+ ws?: {
957
+ name: string;
958
+ color: string;
959
+ };
960
+ tasks: WaterfallRow[];
961
+ }
962
+
819
963
  export declare interface WaterfallRow {
820
964
  label: string;
821
- color: string;
822
965
  segments: WaterfallSegment[];
823
966
  }
824
967
 
@@ -833,6 +976,7 @@ export declare interface WorkspaceOption {
833
976
  name: string;
834
977
  color: string;
835
978
  memberCount: number;
979
+ projectCount?: number;
836
980
  isDefault: boolean;
837
981
  personal: boolean;
838
982
  }
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400..700;1,400..700&family=JetBrains+Mono:wght@400..700&display=swap";:root{--font-display:var(--font-sans);--font-ui:var(--font-sans);--font-numeric:var(--font-mono)}:root{--font-sans:"Instrument Sans",-apple-system,BlinkMacSystemFont,"SF Pro Text",sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;--indigo-400:#6C77DE;--indigo-500:#4A57D2;--indigo-600:#3A44AF;--indigo-700:#2C3391;--chart-1:#0072B2;--chart-2:#E69F00;--chart-3:#009E73;--chart-4:#CC79A7;--chart-5:#56B4E9;--chart-6:#D55E00;--chart-7:#F0E442;--chart-8:#6B7085;--bg:#F2F3F8;--bg-elev:#FFFFFF;--bg-elev-2:#F7F8FC;--bg-sidebar:rgba(244,245,250,.86);--bg-bar:rgba(242,243,248,.82);--fill:rgba(20,22,40,.06);--fill-2:rgba(20,22,40,.1);--fill-3:rgba(20,22,40,.16);--sep:rgba(20,22,40,.1);--sep-strong:rgba(20,22,40,.18);--label:#0E1024;--label-2:#5C6178;--label-3:#8B90A5;--label-4:#B7BBCB;--on-accent:#FFFFFF;--accent:#4A57D2;--accent-hover:#3F4BC0;--accent-soft:rgba(74,87,210,.12);--accent-soft-2:rgba(74,87,210,.2);--running:#4A57D2;--running-soft:rgba(74,87,210,.1);--green:#1E9E6A;--green-soft:rgba(30,158,106,.12);--red:#D6453D;--red-soft:rgba(214,69,61,.1);--orange:#D97B0F;--r-cell:12px;--r-card:14px;--r-btn:10px;--r-pill:999px;--r-sheet:20px;--r-window:12px;--sh-card:0 1px 2px rgba(14,16,36,.04),0 0 0 1px rgba(14,16,36,.04);--sh-float:0 12px 32px -8px rgba(14,16,36,.22),0 2px 6px rgba(14,16,36,.08),0 0 0 1px rgba(14,16,36,.05);--sh-sheet:0 -8px 40px -8px rgba(14,16,36,.24);--sh-thumb:0 2px 6px rgba(0,0,0,.25);--sh-seg:0 1px 3px rgba(0,0,0,.12),0 0 0 .5px rgba(0,0,0,.04);--blur:saturate(180%) blur(22px);--scrim:rgba(10,11,20,.42);--dash:rgba(255,255,255,.7);--ease:cubic-bezier(.2,0,.2,1);--ease-out:cubic-bezier(.16,1,.3,1);--ease-sheet:cubic-bezier(.32,.72,0,1);--t-fast:.14s;--t-base:.22s;--t-sheet:.42s}[data-theme=dark]{--bg:#15161F;--bg-elev:#1F2030;--bg-elev-2:#282A3C;--bg-sidebar:rgba(24,25,36,.86);--bg-bar:rgba(21,22,31,.78);--fill:rgba(255,255,255,.07);--fill-2:rgba(255,255,255,.11);--fill-3:rgba(255,255,255,.17);--sep:rgba(255,255,255,.09);--sep-strong:rgba(255,255,255,.16);--label:#F3F4FA;--label-2:#A7ABC0;--label-3:#7D8199;--label-4:#575B70;--accent:#7A84E6;--accent-hover:#8C95EC;--accent-soft:rgba(122,132,230,.16);--accent-soft-2:rgba(122,132,230,.26);--running:#8A93EC;--running-soft:rgba(122,132,230,.14);--green:#3CC08A;--green-soft:rgba(60,192,138,.14);--red:#F06B62;--red-soft:rgba(240,107,98,.14);--orange:#F0A24B;--chart-8:#9A9FB4;--sh-card:0 1px 2px rgba(0,0,0,.2),0 0 0 1px rgba(255,255,255,.04);--sh-float:0 16px 40px -8px rgba(0,0,0,.6),0 2px 8px rgba(0,0,0,.3),0 0 0 1px rgba(255,255,255,.08);--sh-sheet:0 -8px 40px -8px rgba(0,0,0,.6);--scrim:rgba(0,0,0,.55)}:root{--text-display-1:64px;--leading-display-1:1.02;--tracking-display-1:-.03em;--text-display-2:48px;--leading-display-2:1.06;--tracking-display-2:-.025em;--text-large-title:30px;--text-large-title-phone:34px;--tracking-large-title:-.025em;--leading-large-title:1.1;--text-title:17px;--text-row:15px;--text-subtitle:12.5px;--text-section:12px;--tracking-section:.04em;--text-body:14px;--text-body-lg:18px;--leading-body-lg:1.6;--text-caption:12px;--text-footnote:11.5px;--text-timer-xl:44px;--text-timer-lg:28px;--text-timer-md:22px;--text-timer-sm:15px;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700}:root{--space-0:0px;--space-1:2px;--space-2:4px;--space-3:8px;--space-4:12px;--space-5:16px;--space-6:20px;--space-7:24px;--space-8:32px;--space-9:40px;--space-10:48px;--space-11:64px;--space-12:80px;--space-13:112px;--space-14:160px;--section-y:112px;--section-y-tight:72px;--container-max:1160px;--container-prose:660px;--gutter:24px;--sidebar-w:232px;--content-max:860px;--content-max-narrow:680px;--gutter-phone:16px;--row-h:46px;--row-h-sub:56px;--row-h-dense:40px;--control-h-sm:28px;--control-h-md:34px;--control-h-lg:44px;--control-h-xl:50px;--pill-h:46px;--pill-h-compact:30px;--timer-bar-h:56px;--timer-bar-pad:72px;--tab-bar-h-ios:84px;--tab-bar-pad-ios:100px;--nav-bar-h-android:80px;--nav-bar-pad-android:96px;--toggle-w:46px;--toggle-h:28px;--field-h:38px;--seg-h:32px;--icon-square:28px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);color:var(--label);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:var(--text-body);line-height:1.45}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent}input,select,textarea{font:inherit;color:inherit}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover)}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}::selection{background:var(--accent-soft-2)}@keyframes t-pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes t-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes t-sheet{0%{transform:translateY(100%)}to{transform:none}}@keyframes t-scrim{0%{opacity:0}to{opacity:1}}@keyframes t-pop{0%{opacity:0;transform:scale(.96) translateY(6px)}to{opacity:1;transform:none}}@keyframes t-island{0%{transform:scaleX(.6);opacity:.4}to{transform:none;opacity:1}}.view-in{animation:t-in var(--t-base) var(--ease-out) both}.press{transition:transform var(--t-fast) var(--ease),background var(--t-fast) var(--ease),opacity var(--t-fast) var(--ease)}.press:active{transform:scale(.98)}.row-press:active{background:var(--fill-2)!important}@media (prefers-reduced-motion:reduce){*{animation-duration:0ms!important;transition-duration:0ms!important}}.check:focus-within .box[data-v-8c783040]{outline:2px solid var(--accent);outline-offset:2px}
1
+ @import"https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400..700;1,400..700&family=JetBrains+Mono:wght@400..700&display=swap";:root{--font-display:var(--font-sans);--font-ui:var(--font-sans);--font-numeric:var(--font-mono)}:root{--font-sans:"Instrument Sans",-apple-system,BlinkMacSystemFont,"SF Pro Text",sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;--indigo-400:#6C77DE;--indigo-500:#4A57D2;--indigo-600:#3A44AF;--indigo-700:#2C3391;--chart-1:#0072B2;--chart-2:#E69F00;--chart-3:#009E73;--chart-4:#CC79A7;--chart-5:#56B4E9;--chart-6:#D55E00;--chart-7:#F0E442;--chart-8:#6B7085;--bg:#F2F3F8;--bg-elev:#FFFFFF;--bg-elev-2:#F7F8FC;--bg-sidebar:rgba(244,245,250,.86);--bg-bar:rgba(242,243,248,.82);--fill:rgba(20,22,40,.06);--fill-2:rgba(20,22,40,.1);--fill-3:rgba(20,22,40,.16);--sep:rgba(20,22,40,.1);--sep-strong:rgba(20,22,40,.18);--label:#0E1024;--label-2:#5C6178;--label-3:#8B90A5;--label-4:#B7BBCB;--on-accent:#FFFFFF;--accent:#4A57D2;--accent-hover:#3F4BC0;--accent-soft:rgba(74,87,210,.12);--accent-soft-2:rgba(74,87,210,.2);--running:#4A57D2;--running-soft:rgba(74,87,210,.1);--green:#1E9E6A;--green-soft:rgba(30,158,106,.12);--red:#D6453D;--red-soft:rgba(214,69,61,.1);--orange:#D97B0F;--r-cell:12px;--r-card:14px;--r-btn:10px;--r-pill:999px;--r-sheet:20px;--r-window:12px;--sh-card:0 1px 2px rgba(14,16,36,.04),0 0 0 1px rgba(14,16,36,.04);--sh-float:0 12px 32px -8px rgba(14,16,36,.22),0 2px 6px rgba(14,16,36,.08),0 0 0 1px rgba(14,16,36,.05);--sh-sheet:0 -8px 40px -8px rgba(14,16,36,.24);--sh-thumb:0 2px 6px rgba(0,0,0,.25);--sh-seg:0 1px 2px rgba(0,0,0,.14),0 3px 8px -2px rgba(0,0,0,.12),0 0 0 .5px var(--sep);--blur:saturate(180%) blur(22px);--scrim:rgba(10,11,20,.42);--dash:rgba(255,255,255,.7);--ease:cubic-bezier(.2,0,.2,1);--ease-out:cubic-bezier(.16,1,.3,1);--ease-sheet:cubic-bezier(.32,.72,0,1);--t-fast:.14s;--t-base:.22s;--t-sheet:.42s}[data-theme=dark]{--bg:#15161F;--bg-elev:#1F2030;--bg-elev-2:#282A3C;--bg-sidebar:rgba(24,25,36,.86);--bg-bar:rgba(21,22,31,.78);--fill:rgba(255,255,255,.07);--fill-2:rgba(255,255,255,.11);--fill-3:rgba(255,255,255,.17);--sep:rgba(255,255,255,.09);--sep-strong:rgba(255,255,255,.16);--label:#F3F4FA;--label-2:#A7ABC0;--label-3:#7D8199;--label-4:#575B70;--accent:#7A84E6;--accent-hover:#8C95EC;--accent-soft:rgba(122,132,230,.16);--accent-soft-2:rgba(122,132,230,.26);--running:#8A93EC;--running-soft:rgba(122,132,230,.14);--green:#3CC08A;--green-soft:rgba(60,192,138,.14);--red:#F06B62;--red-soft:rgba(240,107,98,.14);--orange:#F0A24B;--chart-8:#9A9FB4;--sh-card:0 1px 2px rgba(0,0,0,.2),0 0 0 1px rgba(255,255,255,.04);--sh-float:0 16px 40px -8px rgba(0,0,0,.6),0 2px 8px rgba(0,0,0,.3),0 0 0 1px rgba(255,255,255,.08);--sh-sheet:0 -8px 40px -8px rgba(0,0,0,.6);--scrim:rgba(0,0,0,.55)}:root{--text-display-1:64px;--leading-display-1:1.02;--tracking-display-1:-.03em;--text-display-2:48px;--leading-display-2:1.06;--tracking-display-2:-.025em;--text-large-title:30px;--text-large-title-phone:34px;--tracking-large-title:-.025em;--leading-large-title:1.1;--text-title:17px;--text-row:15px;--text-subtitle:12.5px;--text-section:12px;--tracking-section:.04em;--text-body:14px;--text-body-lg:18px;--leading-body-lg:1.6;--text-caption:12px;--text-footnote:11.5px;--text-timer-xl:44px;--text-timer-lg:28px;--text-timer-md:22px;--text-timer-sm:15px;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700}:root{--space-0:0px;--space-1:2px;--space-2:4px;--space-3:8px;--space-4:12px;--space-5:16px;--space-6:20px;--space-7:24px;--space-8:32px;--space-9:40px;--space-10:48px;--space-11:64px;--space-12:80px;--space-13:112px;--space-14:160px;--section-y:112px;--section-y-tight:72px;--container-max:1160px;--container-prose:660px;--gutter:24px;--sidebar-w:232px;--content-max:1040px;--content-max-narrow:760px;--gutter-phone:16px;--row-h:46px;--row-h-sub:56px;--row-h-dense:40px;--control-h-sm:30px;--control-h-md:36px;--control-h-lg:44px;--control-h-xl:50px;--pill-h:46px;--pill-h-compact:30px;--timer-bar-h:56px;--timer-bar-pad:72px;--tab-bar-h-ios:84px;--tab-bar-pad-ios:100px;--nav-bar-h-android:80px;--nav-bar-pad-android:96px;--toggle-w:46px;--toggle-h:28px;--field-h:38px;--seg-h:36px;--seg-h-sm:30px;--icon-square:28px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-sans);color:var(--label);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:var(--text-body);line-height:1.45}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent}input,select,textarea{font:inherit;color:inherit}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover)}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}::selection{background:var(--accent-soft-2)}@keyframes t-pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes t-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes t-sheet{0%{transform:translateY(100%)}to{transform:none}}@keyframes t-drawer{0%{transform:translate(-100%)}to{transform:none}}@keyframes t-scrim{0%{opacity:0}to{opacity:1}}@keyframes t-pop{0%{opacity:0;transform:scale(.96) translateY(6px)}to{opacity:1;transform:none}}@keyframes t-island{0%{transform:scaleX(.6);opacity:.4}to{transform:none;opacity:1}}.view-in{animation:t-in var(--t-base) var(--ease-out) both}.press{transition:transform var(--t-fast) var(--ease),background var(--t-fast) var(--ease),opacity var(--t-fast) var(--ease)}.press:active{transform:scale(.98)}.row-press:active{background:var(--fill-2)!important}@media (prefers-reduced-motion:reduce){*{animation-duration:0ms!important;transition-duration:0ms!important}}.check:focus-within .box[data-v-8c783040]{outline:2px solid var(--accent);outline-offset:2px}