@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/README.md CHANGED
@@ -13,7 +13,7 @@ import { TBtn, TPill, TIcon } from '@timebraid/vue'
13
13
 
14
14
  <template>
15
15
  <TBtn size="xl" icon="download">Download for macOS</TBtn>
16
- <TPill :running="[{ id: '1', task: 'Logo exploration', project: 'Acme rebrand', color: 'var(--chart-1)', since: '9:12', seconds: 8047 }]" />
16
+ <TPill :running="[{ id: '1', task: 'Logo exploration', project: 'Acme rebrand', projectId: 'acme', color: 'var(--chart-1)', since: '9:12', seconds: 8047 }]" />
17
17
  <TIcon name="play" :size="16" />
18
18
  </template>
19
19
  ```
@@ -34,22 +34,27 @@ Import `@timebraid/tokens/styles.css` once in `main.ts` (or `@timebraid/vue/styl
34
34
  | `TSelect` | Trailing-value select with `chevrons-up-down`, used inside `TRow`; name the control with `label` (rendered visually hidden) or `ariaLabel` |
35
35
  | `TBadge` | Status pill: neutral, running, green, red, soon |
36
36
  | `TBar` | Animated value bar |
37
- | `TAvatar` | Initials avatar |
38
- | `TLargeTitle` | Large collapsing page title |
39
- | `TSheet` | Centred sheet on desktop, bottom sheet on phones |
37
+ | `TAvatar` | Initials avatar; pass `src` for a photo instead |
38
+ | `TAvatarStack` | Overlapping `TAvatar`s with a `+N` overflow count |
39
+ | `TLargeTitle` | Large collapsing page title; `sticky` pins it above its scrolling content |
40
+ | `TSheet` | Centred sheet on desktop, bottom sheet on phones; drag the grabber or header to dismiss on phones |
40
41
  | `TDot` | Status dot with a pulsing ring when running |
41
42
  | `TDur` | Duration readout, mono and tabular |
42
- | `TWaterfall` | Parallel-time waterfall timeline for reports |
43
- | `TPill` | The floating always-visible timer pill; the `popover` slot (scoped with `running`) replaces the popover body, and `open` is consumer-owned through `update:open` |
44
- | `TWorkspaceSwitcher` | Workspace picker popover |
45
- | `TTimerBar` | Phone bottom timer bar |
43
+ | `TWaterfall` | Parallel-time waterfall timeline for reports, one lane per task grouped under its project; `showWs` adds a workspace tag per project |
44
+ | `TPill` | The floating always-visible timer pill: count first, the longest timer leads; the `popover` slot (scoped with `running`) replaces the popover body, grouped by workspace then project, and `open` is consumer-owned through `update:open` |
45
+ | `TWsIcon` | Workspace glyph: a coloured initial square, or the app mark when `all` |
46
+ | `TWsTag` | Small workspace label, the square plus its name; appears only in the All-workspaces scope |
47
+ | `TWorkspaceSwitcher` | Scope selector: All workspaces or one |
48
+ | `TWorkspaceMenu` | The workspace list shared by the switcher's popover and the drawer; `embedded` drops its shadow for inline use |
49
+ | `TWorkspaceDrawer` | Full-height phone workspace list; drag the panel to dismiss |
50
+ | `TTimerBar` | Phone bottom timer bar: takes the full `timers` array, count first with the longest leading |
46
51
  | `TStrokes` | Oversized faded tally strokes behind sign-in and empty states |
47
- | `TIOSNav` | iOS large-title nav bar that collapses on scroll |
52
+ | `TIOSNav` | iOS large-title nav bar that collapses on scroll; `leading` slot for a leading control |
48
53
  | `TIOSTabBar` | iOS tab bar |
49
- | `TAndroidTop` | Android top app bar |
54
+ | `TAndroidTop` | Android top app bar; `sub` for a subtitle, `scrolled` for its elevated state, `title` slot to replace the text |
50
55
  | `TAndroidNavBar` | Android bottom navigation bar |
51
- | `TIcon` | Lucide glyph via CSS mask, follows `currentColor` |
52
- | `TLogo` | The mark, correct artwork per size |
56
+ | `TIcon` | Bundled inline Lucide glyph, follows `currentColor` |
57
+ | `TLogo` | The stopwatch mark, correct artwork per size; `mono` paints it in currentColor |
53
58
  | `TCodeInput` | 6-digit code entry |
54
59
  | `TAuthCard` | Sign-in layout card |
55
60
  | `TCheckbox` | Checkbox control |
@@ -57,14 +62,7 @@ Import `@timebraid/tokens/styles.css` once in `main.ts` (or `@timebraid/vue/styl
57
62
 
58
63
  Also exported: `formatDuration(seconds, 'clock' | 'short' | 'compact')`, `PROJECT_COLORS`, `TIMEBRAID_ICON_BASE`, `DEFAULT_ICON_BASE`, `resolveTheme`, `applyTheme`, `watchTheme`, `THEME_PREFERENCES`.
59
64
 
60
- `TIcon` masks its glyph from `https://unpkg.com/lucide-static@latest/icons/`. Self-host the glyphs and point every icon at them in one line. An iOS WebView under `tauri://localhost` needs this, because it cannot paint a cross-origin mask:
61
-
62
- ```ts
63
- import { TIMEBRAID_ICON_BASE } from '@timebraid/vue'
64
- app.provide(TIMEBRAID_ICON_BASE, '/icons/')
65
- ```
66
-
67
- A `base` prop on a single `TIcon` still wins over the provided value.
65
+ `TIcon` ships its glyphs: `scripts/glyphs.mjs` writes the Lucide paths for every name the products use into `packages/vue/src/icons/glyphs.ts`, and the component renders them inline in `currentColor`. Nothing is fetched at runtime. To add a glyph, add its name to `NAMES` in the script and run `pnpm glyphs`. `ICON_NAMES` and `hasIcon()` are exported so an app can assert every name it uses is bundled. A name missing from the table still masks from `TIMEBRAID_ICON_BASE` (or the `base` prop) with a dev warning, so nothing breaks while the table catches up.
68
66
 
69
67
  ## Rules
70
68