@tollerud/ui 1.1.5 → 3.0.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/AGENTS.md +34 -11
- package/CHANGELOG.md +376 -0
- package/COMPONENTS.md +951 -0
- package/GETTING_STARTED.md +159 -0
- package/README.md +51 -43
- package/SKILL.md +55 -21
- package/components.json +18 -0
- package/dist/accordion.d.ts +20 -0
- package/dist/accordion.js +5 -0
- package/dist/accordion.js.map +1 -0
- package/dist/action-diff.d.ts +26 -0
- package/dist/action-diff.js +5 -0
- package/dist/action-diff.js.map +1 -0
- package/dist/action-row.d.ts +36 -0
- package/dist/action-row.js +6 -0
- package/dist/action-row.js.map +1 -0
- package/dist/alert-inbox.d.ts +23 -0
- package/dist/alert-inbox.js +6 -0
- package/dist/alert-inbox.js.map +1 -0
- package/dist/alert.d.ts +33 -0
- package/dist/alert.js +5 -0
- package/dist/alert.js.map +1 -0
- package/dist/approval-card.d.ts +27 -0
- package/dist/approval-card.js +5 -0
- package/dist/approval-card.js.map +1 -0
- package/dist/area-chart.d.ts +10 -0
- package/dist/area-chart.js +5 -0
- package/dist/area-chart.js.map +1 -0
- package/dist/avatar.d.ts +27 -0
- package/dist/avatar.js +5 -0
- package/dist/avatar.js.map +1 -0
- package/dist/backup-status-panel.d.ts +25 -0
- package/dist/backup-status-panel.js +6 -0
- package/dist/backup-status-panel.js.map +1 -0
- package/dist/badge.d.ts +17 -0
- package/dist/badge.js +5 -0
- package/dist/badge.js.map +1 -0
- package/dist/bar-chart.d.ts +15 -0
- package/dist/bar-chart.js +5 -0
- package/dist/bar-chart.js.map +1 -0
- package/dist/bento-dashboard.d.ts +30 -0
- package/dist/bento-dashboard.js +5 -0
- package/dist/bento-dashboard.js.map +1 -0
- package/dist/breadcrumb.d.ts +16 -0
- package/dist/breadcrumb.js +5 -0
- package/dist/breadcrumb.js.map +1 -0
- package/dist/button.d.ts +29 -0
- package/dist/button.js +5 -0
- package/dist/button.js.map +1 -0
- package/dist/card.d.ts +10 -0
- package/dist/card.js +5 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.d.ts +9 -0
- package/dist/checkbox.js +5 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunk-2QWKOCWF.js +79 -0
- package/dist/chunk-2QWKOCWF.js.map +1 -0
- package/dist/chunk-3TGMGBKM.js +393 -0
- package/dist/chunk-3TGMGBKM.js.map +1 -0
- package/dist/chunk-3XTZPDNV.js +94 -0
- package/dist/chunk-3XTZPDNV.js.map +1 -0
- package/dist/chunk-435JHF7G.js +65 -0
- package/dist/chunk-435JHF7G.js.map +1 -0
- package/dist/chunk-4PA2ACNF.js +52 -0
- package/dist/chunk-4PA2ACNF.js.map +1 -0
- package/dist/chunk-5GWHUJ5D.js +29 -0
- package/dist/chunk-5GWHUJ5D.js.map +1 -0
- package/dist/chunk-6FUKJD3W.js +123 -0
- package/dist/chunk-6FUKJD3W.js.map +1 -0
- package/dist/chunk-6IS2AYYG.js +106 -0
- package/dist/chunk-6IS2AYYG.js.map +1 -0
- package/dist/chunk-6PZKU6ZL.js +78 -0
- package/dist/chunk-6PZKU6ZL.js.map +1 -0
- package/dist/chunk-6SKTH45H.js +75 -0
- package/dist/chunk-6SKTH45H.js.map +1 -0
- package/dist/chunk-6UXW5YUC.js +77 -0
- package/dist/chunk-6UXW5YUC.js.map +1 -0
- package/dist/chunk-7EP2T3OW.js +52 -0
- package/dist/chunk-7EP2T3OW.js.map +1 -0
- package/dist/chunk-7J5QXUQN.js +38 -0
- package/dist/chunk-7J5QXUQN.js.map +1 -0
- package/dist/chunk-7TOT5ME3.js +53 -0
- package/dist/chunk-7TOT5ME3.js.map +1 -0
- package/dist/chunk-A6L5C3IJ.js +47 -0
- package/dist/chunk-A6L5C3IJ.js.map +1 -0
- package/dist/chunk-ANW6J6PV.js +42 -0
- package/dist/chunk-ANW6J6PV.js.map +1 -0
- package/dist/chunk-APFFKNPS.js +80 -0
- package/dist/chunk-APFFKNPS.js.map +1 -0
- package/dist/chunk-AZADSX4Z.js +85 -0
- package/dist/chunk-AZADSX4Z.js.map +1 -0
- package/dist/chunk-BPCH5LJ3.js +36 -0
- package/dist/chunk-BPCH5LJ3.js.map +1 -0
- package/dist/chunk-CBQ63EBL.js +85 -0
- package/dist/chunk-CBQ63EBL.js.map +1 -0
- package/dist/chunk-CDI7353B.js +40 -0
- package/dist/chunk-CDI7353B.js.map +1 -0
- package/dist/chunk-CKNWXYMA.js +53 -0
- package/dist/chunk-CKNWXYMA.js.map +1 -0
- package/dist/chunk-DFM7UUKB.js +79 -0
- package/dist/chunk-DFM7UUKB.js.map +1 -0
- package/dist/chunk-DGCRHVWW.js +84 -0
- package/dist/chunk-DGCRHVWW.js.map +1 -0
- package/dist/chunk-DNJI65VQ.js +22 -0
- package/dist/chunk-DNJI65VQ.js.map +1 -0
- package/dist/chunk-DOUDJU4P.js +63 -0
- package/dist/chunk-DOUDJU4P.js.map +1 -0
- package/dist/chunk-DRCMGIQ6.js +64 -0
- package/dist/chunk-DRCMGIQ6.js.map +1 -0
- package/dist/chunk-DZOBXK2S.js +28 -0
- package/dist/chunk-DZOBXK2S.js.map +1 -0
- package/dist/chunk-EN4OJCEF.js +54 -0
- package/dist/chunk-EN4OJCEF.js.map +1 -0
- package/dist/chunk-EVHZFYWX.js +33 -0
- package/dist/chunk-EVHZFYWX.js.map +1 -0
- package/dist/chunk-FGXOV2QH.js +23 -0
- package/dist/chunk-FGXOV2QH.js.map +1 -0
- package/dist/chunk-G2VKWNZA.js +53 -0
- package/dist/chunk-G2VKWNZA.js.map +1 -0
- package/dist/chunk-GTM2DE4C.js +156 -0
- package/dist/chunk-GTM2DE4C.js.map +1 -0
- package/dist/chunk-H3ZVGTJM.js +165 -0
- package/dist/chunk-H3ZVGTJM.js.map +1 -0
- package/dist/chunk-HWAWUEHC.js +28 -0
- package/dist/chunk-HWAWUEHC.js.map +1 -0
- package/dist/chunk-HWJVRTWO.js +36 -0
- package/dist/chunk-HWJVRTWO.js.map +1 -0
- package/dist/chunk-HYQGOC2E.js +79 -0
- package/dist/chunk-HYQGOC2E.js.map +1 -0
- package/dist/chunk-ILADNTUB.js +77 -0
- package/dist/chunk-ILADNTUB.js.map +1 -0
- package/dist/chunk-ISHZ6ZPJ.js +31 -0
- package/dist/chunk-ISHZ6ZPJ.js.map +1 -0
- package/dist/chunk-JRFSUVSO.js +66 -0
- package/dist/chunk-JRFSUVSO.js.map +1 -0
- package/dist/chunk-KI6OTVID.js +91 -0
- package/dist/chunk-KI6OTVID.js.map +1 -0
- package/dist/chunk-LUM2YJBH.js +73 -0
- package/dist/chunk-LUM2YJBH.js.map +1 -0
- package/dist/chunk-NHPISZWS.js +71 -0
- package/dist/chunk-NHPISZWS.js.map +1 -0
- package/dist/chunk-NOLWJJHT.js +52 -0
- package/dist/chunk-NOLWJJHT.js.map +1 -0
- package/dist/chunk-NPVINX3Q.js +20 -0
- package/dist/chunk-NPVINX3Q.js.map +1 -0
- package/dist/chunk-NSMU66ZX.js +47 -0
- package/dist/chunk-NSMU66ZX.js.map +1 -0
- package/dist/chunk-O57QMLNI.js +68 -0
- package/dist/chunk-O57QMLNI.js.map +1 -0
- package/dist/chunk-O5SWPHUQ.js +79 -0
- package/dist/chunk-O5SWPHUQ.js.map +1 -0
- package/dist/chunk-OGVSZ7NV.js +53 -0
- package/dist/chunk-OGVSZ7NV.js.map +1 -0
- package/dist/chunk-OONIUDST.js +48 -0
- package/dist/chunk-OONIUDST.js.map +1 -0
- package/dist/chunk-PLF3BBQI.js +139 -0
- package/dist/chunk-PLF3BBQI.js.map +1 -0
- package/dist/chunk-Q74VRQEX.js +26 -0
- package/dist/chunk-Q74VRQEX.js.map +1 -0
- package/dist/chunk-QEHTPQHL.js +35 -0
- package/dist/chunk-QEHTPQHL.js.map +1 -0
- package/dist/chunk-RJTDQOT2.js +73 -0
- package/dist/chunk-RJTDQOT2.js.map +1 -0
- package/dist/chunk-RQ3RXKAZ.js +203 -0
- package/dist/chunk-RQ3RXKAZ.js.map +1 -0
- package/dist/chunk-RWJELAS6.js +46 -0
- package/dist/chunk-RWJELAS6.js.map +1 -0
- package/dist/chunk-RZK2S2OO.js +126 -0
- package/dist/chunk-RZK2S2OO.js.map +1 -0
- package/dist/chunk-SAP7JSSO.js +106 -0
- package/dist/chunk-SAP7JSSO.js.map +1 -0
- package/dist/chunk-T3TQPOVM.js +79 -0
- package/dist/chunk-T3TQPOVM.js.map +1 -0
- package/dist/chunk-T56TTOI6.js +53 -0
- package/dist/chunk-T56TTOI6.js.map +1 -0
- package/dist/chunk-T7EFDE2L.js +36 -0
- package/dist/chunk-T7EFDE2L.js.map +1 -0
- package/dist/chunk-V3P5QLLX.js +154 -0
- package/dist/chunk-V3P5QLLX.js.map +1 -0
- package/dist/chunk-VTRUUT5K.js +31 -0
- package/dist/chunk-VTRUUT5K.js.map +1 -0
- package/dist/chunk-WDANALHD.js +95 -0
- package/dist/chunk-WDANALHD.js.map +1 -0
- package/dist/chunk-WSQNPRGN.js +12 -0
- package/dist/chunk-WSQNPRGN.js.map +1 -0
- package/dist/chunk-XR5QBVEV.js +56 -0
- package/dist/chunk-XR5QBVEV.js.map +1 -0
- package/dist/chunk-YYWODLER.js +111 -0
- package/dist/chunk-YYWODLER.js.map +1 -0
- package/dist/chunk-ZOXO3G3I.js +50 -0
- package/dist/chunk-ZOXO3G3I.js.map +1 -0
- package/dist/code-block.d.ts +14 -0
- package/dist/code-block.js +5 -0
- package/dist/code-block.js.map +1 -0
- package/dist/combobox.d.ts +26 -0
- package/dist/combobox.js +5 -0
- package/dist/combobox.js.map +1 -0
- package/dist/command-menu.d.ts +52 -0
- package/dist/command-menu.js +7 -0
- package/dist/command-menu.js.map +1 -0
- package/dist/container.d.ts +9 -0
- package/dist/container.js +5 -0
- package/dist/container.js.map +1 -0
- package/dist/cta-band.d.ts +12 -0
- package/dist/cta-band.js +5 -0
- package/dist/cta-band.js.map +1 -0
- package/dist/data-table.d.ts +58 -0
- package/dist/data-table.js +12 -0
- package/dist/data-table.js.map +1 -0
- package/dist/date-picker.d.ts +20 -0
- package/dist/date-picker.js +5 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/dialog.d.ts +21 -0
- package/dist/dialog.js +5 -0
- package/dist/dialog.js.map +1 -0
- package/dist/divider.d.ts +12 -0
- package/dist/divider.js +5 -0
- package/dist/divider.js.map +1 -0
- package/dist/docker-stack-card.d.ts +21 -0
- package/dist/docker-stack-card.js +6 -0
- package/dist/docker-stack-card.js.map +1 -0
- package/dist/donut.d.ts +15 -0
- package/dist/donut.js +5 -0
- package/dist/donut.js.map +1 -0
- package/dist/dropdown-menu.d.ts +15 -0
- package/dist/dropdown-menu.js +5 -0
- package/dist/dropdown-menu.js.map +1 -0
- package/dist/empty.d.ts +12 -0
- package/dist/empty.js +5 -0
- package/dist/empty.js.map +1 -0
- package/dist/feature-card.d.ts +11 -0
- package/dist/feature-card.js +6 -0
- package/dist/feature-card.js.map +1 -0
- package/dist/file-upload.d.ts +20 -0
- package/dist/file-upload.js +5 -0
- package/dist/file-upload.js.map +1 -0
- package/dist/footer.d.ts +35 -0
- package/dist/footer.js +5 -0
- package/dist/footer.js.map +1 -0
- package/dist/form-row.d.ts +15 -0
- package/dist/form-row.js +5 -0
- package/dist/form-row.js.map +1 -0
- package/dist/glow-card.d.ts +14 -0
- package/dist/glow-card.js +5 -0
- package/dist/glow-card.js.map +1 -0
- package/dist/hero-block.d.ts +16 -0
- package/dist/hero-block.js +7 -0
- package/dist/hero-block.js.map +1 -0
- package/dist/host-card.d.ts +27 -0
- package/dist/host-card.js +6 -0
- package/dist/host-card.js.map +1 -0
- package/dist/incident-card.d.ts +23 -0
- package/dist/incident-card.js +5 -0
- package/dist/incident-card.js.map +1 -0
- package/dist/index.d.ts +76 -960
- package/dist/index.js +68 -3812
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +10 -0
- package/dist/input.js +5 -0
- package/dist/input.js.map +1 -0
- package/dist/kbd.d.ts +24 -0
- package/dist/kbd.js +5 -0
- package/dist/kbd.js.map +1 -0
- package/dist/log-viewer.d.ts +35 -0
- package/dist/log-viewer.js +5 -0
- package/dist/log-viewer.js.map +1 -0
- package/dist/meter.d.ts +23 -0
- package/dist/meter.js +5 -0
- package/dist/meter.js.map +1 -0
- package/dist/noir-glow-background.d.ts +50 -0
- package/dist/noir-glow-background.js +4 -0
- package/dist/noir-glow-background.js.map +1 -0
- package/dist/pagination.d.ts +16 -0
- package/dist/pagination.js +5 -0
- package/dist/pagination.js.map +1 -0
- package/dist/panel.d.ts +12 -0
- package/dist/panel.js +5 -0
- package/dist/panel.js.map +1 -0
- package/dist/password-input.d.ts +10 -0
- package/dist/password-input.js +5 -0
- package/dist/password-input.js.map +1 -0
- package/dist/pill.d.ts +14 -0
- package/dist/pill.js +5 -0
- package/dist/pill.js.map +1 -0
- package/dist/pricing-card.d.ts +20 -0
- package/dist/pricing-card.js +6 -0
- package/dist/pricing-card.js.map +1 -0
- package/dist/progress.d.ts +6 -0
- package/dist/progress.js +5 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio-group.d.ts +18 -0
- package/dist/radio-group.js +5 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/rollback-plan.d.ts +23 -0
- package/dist/rollback-plan.js +5 -0
- package/dist/rollback-plan.js.map +1 -0
- package/dist/segmented.d.ts +17 -0
- package/dist/segmented.js +5 -0
- package/dist/segmented.js.map +1 -0
- package/dist/select.d.ts +18 -0
- package/dist/select.js +5 -0
- package/dist/select.js.map +1 -0
- package/dist/service-health-card.d.ts +21 -0
- package/dist/service-health-card.js +6 -0
- package/dist/service-health-card.js.map +1 -0
- package/dist/sheet.d.ts +25 -0
- package/dist/sheet.js +5 -0
- package/dist/sheet.js.map +1 -0
- package/dist/skeleton.d.ts +5 -0
- package/dist/skeleton.js +5 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/slider.d.ts +12 -0
- package/dist/slider.js +5 -0
- package/dist/slider.js.map +1 -0
- package/dist/sparkline.d.ts +16 -0
- package/dist/sparkline.js +5 -0
- package/dist/sparkline.js.map +1 -0
- package/dist/stat-card.d.ts +15 -0
- package/dist/stat-card.js +5 -0
- package/dist/stat-card.js.map +1 -0
- package/dist/status-dot.d.ts +13 -0
- package/dist/status-dot.js +5 -0
- package/dist/status-dot.js.map +1 -0
- package/dist/stepper.d.ts +16 -0
- package/dist/stepper.js +5 -0
- package/dist/stepper.js.map +1 -0
- package/dist/switch.d.ts +9 -0
- package/dist/switch.js +5 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +9 -0
- package/dist/tabs.js +5 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tag-input.d.ts +20 -0
- package/dist/tag-input.js +5 -0
- package/dist/tag-input.js.map +1 -0
- package/dist/textarea.d.ts +10 -0
- package/dist/textarea.js +5 -0
- package/dist/textarea.js.map +1 -0
- package/dist/timeline.d.ts +30 -0
- package/dist/timeline.js +5 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toaster.d.ts +10 -0
- package/dist/toaster.js +4 -0
- package/dist/toaster.js.map +1 -0
- package/dist/tooltip.d.ts +12 -0
- package/dist/tooltip.js +5 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -0
- package/globals-layers.css +935 -0
- package/globals-v3.css +17 -0
- package/globals-v4.css +2 -0
- package/globals.css +12 -939
- package/package.json +82 -16
- package/registry.json +920 -0
- package/tailwind.css +9 -0
- package/dist/index.cjs +0 -3938
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -960
package/AGENTS.md
CHANGED
|
@@ -19,7 +19,10 @@ Re-sync it whenever you bump the `@tollerud/ui` version and notice the local cop
|
|
|
19
19
|
## Install
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
npm install @tollerud/ui clsx tailwind-merge tailwindcss
|
|
22
|
+
npm install @tollerud/ui clsx tailwind-merge tailwindcss@4 \
|
|
23
|
+
@radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-progress \
|
|
24
|
+
@radix-ui/react-slot @radix-ui/react-tabs @radix-ui/react-tooltip \
|
|
25
|
+
lucide-react framer-motion sonner
|
|
23
26
|
# Optional — only if using NoirGlowBackground
|
|
24
27
|
npm install @paper-design/shaders-react
|
|
25
28
|
```
|
|
@@ -31,26 +34,44 @@ npm install @tollerud/footer
|
|
|
31
34
|
|
|
32
35
|
## Tailwind Setup
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
**Default: Tailwind v4.** One CSS import — tokens, component layers, and Tailwind itself:
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
/* app/globals.css */
|
|
41
|
+
@import "@tollerud/ui/globals.css";
|
|
42
|
+
@source "../node_modules/@tollerud/ui/dist";
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Adjust `@source` relative to your CSS file. Without it, classes used only inside `@tollerud/ui` dist may be purged.
|
|
46
|
+
|
|
47
|
+
**Optional preset shim** — extra utilities from `tollerud-preset.js`:
|
|
35
48
|
|
|
36
49
|
```ts
|
|
37
50
|
// tailwind.config.ts
|
|
51
|
+
import tollerudPreset from '@tollerud/ui/preset'
|
|
52
|
+
export default { presets: [tollerudPreset] }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Tailwind v3 (legacy)** — preset in config + `@tollerud/ui/globals-v3.css` after preflight/utilities:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
38
58
|
import type { Config } from 'tailwindcss'
|
|
39
59
|
import tollerudPreset from '@tollerud/ui/preset'
|
|
40
60
|
|
|
41
61
|
const config: Config = {
|
|
42
62
|
presets: [tollerudPreset],
|
|
43
|
-
content: ['./src/**/*.{ts,tsx}'],
|
|
63
|
+
content: ['./src/**/*.{ts,tsx}', './node_modules/@tollerud/ui/dist/**/*.{js,mjs}'],
|
|
44
64
|
}
|
|
45
65
|
export default config
|
|
46
66
|
```
|
|
47
67
|
|
|
48
|
-
Import the CSS in your root layout or `globals.css`:
|
|
49
68
|
```css
|
|
50
69
|
@import "tailwindcss/preflight";
|
|
51
70
|
@import "tailwindcss/utilities";
|
|
71
|
+
@import "@tollerud/ui/globals-v3.css";
|
|
52
72
|
```
|
|
53
|
-
|
|
73
|
+
|
|
74
|
+
**Subpath imports:** `import { Button } from '@tollerud/ui/button'` — one entry per component for tree-shaking; the main `@tollerud/ui` barrel still works.
|
|
54
75
|
|
|
55
76
|
---
|
|
56
77
|
|
|
@@ -109,6 +130,7 @@ import { Tabs, TabsList, TabsTrigger, TabsContent } from '@tollerud/ui'
|
|
|
109
130
|
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@tollerud/ui'
|
|
110
131
|
import { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle } from '@tollerud/ui'
|
|
111
132
|
import { Skeleton, Progress, Toaster, GlowCard, NoirGlowBackground, BentoDashboard, Alert } from '@tollerud/ui'
|
|
133
|
+
import { BarChart, AreaChart, Donut, Sparkline, HeroBlock, FeatureCard, CTABand } from '@tollerud/ui'
|
|
112
134
|
// Infra / homelab set
|
|
113
135
|
import { HostCard, ServiceHealthCard, DockerStackCard, IncidentCard } from '@tollerud/ui'
|
|
114
136
|
import { ApprovalCard, ActionDiff, AlertInbox, RollbackPlan, BackupStatusPanel } from '@tollerud/ui'
|
|
@@ -223,7 +245,7 @@ Built-in `⌘K` / `Ctrl+K` listener, arrow navigation, Esc to close, search acro
|
|
|
223
245
|
```tsx
|
|
224
246
|
<DataTable
|
|
225
247
|
columns={[
|
|
226
|
-
{ key: 'hostname', label: 'Host', sortable: true },
|
|
248
|
+
{ key: 'hostname', label: 'Host', sortable: true, filterable: true },
|
|
227
249
|
{ key: 'status', label: 'Status', render: (_v, row) => <Badge variant={row.status === 'online' ? 'success' : 'error'}>{row.status}</Badge> },
|
|
228
250
|
]}
|
|
229
251
|
data={hosts}
|
|
@@ -231,6 +253,8 @@ Built-in `⌘K` / `Ctrl+K` listener, arrow navigation, Esc to close, search acro
|
|
|
231
253
|
onRowClick={(row) => {}}
|
|
232
254
|
emptyMessage="No hosts found"
|
|
233
255
|
/>
|
|
256
|
+
|
|
257
|
+
// Optional rich mode: searchable, filter, selectable, pageSize, bulkActions, rowMenu, toolbarRight, emptyState
|
|
234
258
|
```
|
|
235
259
|
|
|
236
260
|
### Empty (empty states)
|
|
@@ -367,11 +391,10 @@ Use borders as the primary separation method. Only add shadows to lift overlays.
|
|
|
367
391
|
|
|
368
392
|
When asked to add components, fix bugs, or cut a release:
|
|
369
393
|
|
|
370
|
-
### 1. Build and
|
|
394
|
+
### 1. Build and validate before committing
|
|
371
395
|
|
|
372
396
|
```bash
|
|
373
|
-
|
|
374
|
-
npx tsup # verify the bundle builds
|
|
397
|
+
npm run validate # typecheck + lint + test + build
|
|
375
398
|
```
|
|
376
399
|
|
|
377
400
|
### 2. Every new component needs all four of these
|
|
@@ -381,7 +404,7 @@ npx tsup # verify the bundle builds
|
|
|
381
404
|
| Component file | `components/ComponentName.tsx` |
|
|
382
405
|
| Named export + type export | `components/index.ts` |
|
|
383
406
|
| Registry entry | `registry.json` — add a `kebab-case` key with `name`, `description`, `files`, `dependencies`, `registryDependencies`, `type: "components:ui"` |
|
|
384
|
-
| Docs preview | `
|
|
407
|
+
| Docs preview | Add a `<Section>` + `<Demo>` in `docs-app/components/pages/page-*.jsx`. Register routes in `docs-app/components/docs-shell.jsx` (`NAV`, `PAGES`, `PAGE_TITLES`). Support code lives in `kit/`, `blocks/`, `backgrounds/`. Build: `npm run build:docs` → `_site/`. |
|
|
385
408
|
|
|
386
409
|
### 3. Version bump rules
|
|
387
410
|
|
|
@@ -394,7 +417,7 @@ npx tsup # verify the bundle builds
|
|
|
394
417
|
Edit `package.json` version, then update these to match:
|
|
395
418
|
- `COMPLETENESS_ROADMAP.md` — header line `### npm package (components/*.tsx) — vX.X.X`
|
|
396
419
|
- `registry.json` — top-level `"version"` field
|
|
397
|
-
- `
|
|
420
|
+
- `docs/app.jsx` — sidebar brand line `user interface · vX.X.X`
|
|
398
421
|
|
|
399
422
|
### 4. Always update these files in the same commit
|
|
400
423
|
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
<!-- FORMAT RULES — the docs site parses this file at runtime.
|
|
4
|
+
• Entry heading: ## version — YYYY-MM-DD — Title
|
|
5
|
+
• Blank line between EVERY block (paragraph, heading, list, code fence)
|
|
6
|
+
• Section headings: ### Heading OR **Bold line** on its own line after a blank line
|
|
7
|
+
• Never write bold mid-paragraph as a heading substitute — it merges into surrounding text
|
|
8
|
+
-->
|
|
9
|
+
|
|
10
|
+
## 3.0.0 — 2026-06-09 — ESM-only and rich DataTable
|
|
11
|
+
|
|
12
|
+
Ships the full table pattern in npm, drops CommonJS builds, and adds release/props tooling.
|
|
13
|
+
|
|
14
|
+
### Breaking change
|
|
15
|
+
|
|
16
|
+
- Package is **ESM-only** — `require('@tollerud/ui')` and `.cjs` subpath bundles are removed. Use `import` in apps and bundlers that support ES modules.
|
|
17
|
+
|
|
18
|
+
### New features
|
|
19
|
+
|
|
20
|
+
- `DataTable` — search, segmented filter, row selection, bulk actions, per-row menus, pagination, loading skeletons, and custom empty states (optional; simple sort/filter mode unchanged)
|
|
21
|
+
- `npm run docs:props` — generates `PROPS.generated.md` from component `*Props` interfaces
|
|
22
|
+
- `npm run test:props` — drift check in `validate` / `prepublishOnly`
|
|
23
|
+
- Changesets — `npm run changeset` and `npm run version:release` (runs `sync:registry`)
|
|
24
|
+
|
|
25
|
+
### Docs
|
|
26
|
+
|
|
27
|
+
- Retired docs-only `rich-datatable.jsx`; docs `DataTable` is an adapter over npm `DataTable`
|
|
28
|
+
- `PackageDataTable` remains the direct npm import alias on the components page
|
|
29
|
+
|
|
30
|
+
### Migration
|
|
31
|
+
|
|
32
|
+
Replace `require('@tollerud/ui')` with ESM imports. For rich tables, pass the new optional props on `DataTable` instead of copying docs-only table code.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2.0.0 — 2026-06-09 — Peer dependency model
|
|
37
|
+
|
|
38
|
+
Radix, Lucide, Framer Motion, and Sonner move to peer dependencies so consumer apps do not bundle duplicate copies.
|
|
39
|
+
|
|
40
|
+
### Breaking change
|
|
41
|
+
|
|
42
|
+
Install peers explicitly alongside `@tollerud/ui`:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install @tollerud/ui clsx tailwind-merge tailwindcss@4 \
|
|
46
|
+
@radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-progress \
|
|
47
|
+
@radix-ui/react-slot @radix-ui/react-tabs @radix-ui/react-tooltip \
|
|
48
|
+
lucide-react framer-motion sonner
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### New features
|
|
52
|
+
|
|
53
|
+
- `@tollerud/ui/tailwind.css` — convenience import with documented `@source` hint
|
|
54
|
+
- `npm run test:package` — publint + `@arethetypeswrong/cli` on the package
|
|
55
|
+
- `npm run test:size` — size-limit budget on `dist/button.js` and `dist/index.js`
|
|
56
|
+
- `npm run sync:registry` — align `registry.json` version with `package.json` before publish
|
|
57
|
+
|
|
58
|
+
### Docs
|
|
59
|
+
|
|
60
|
+
- Retired docs-only `grain-gl.jsx`; backgrounds and overview use npm `NoirGlowBackground`
|
|
61
|
+
- Publish workflow runs drift, package quality, size budget, docs build, and Playwright E2E
|
|
62
|
+
|
|
63
|
+
### Migration
|
|
64
|
+
|
|
65
|
+
If you already had Radix/Lucide/Motion/Sonner in your app, add them to `package.json` if npm no longer hoists them from `@tollerud/ui`. No component API changes.
|
|
66
|
+
|
|
67
|
+
## 1.4.0 — 2026-06-09 — Charts and marketing blocks
|
|
68
|
+
|
|
69
|
+
Palette-aware charts and landing-page blocks ship in the npm package. Docs site reorganized into `pages/`, `kit/`, `blocks/`, and `backgrounds/`.
|
|
70
|
+
|
|
71
|
+
### New components
|
|
72
|
+
|
|
73
|
+
- `BarChart` — vertical bars with optional yellow accent series
|
|
74
|
+
- `AreaChart` — gradient area/line chart with grid lines
|
|
75
|
+
- `Donut` — donut chart with segment legend
|
|
76
|
+
- `Sparkline` — compact inline trend line
|
|
77
|
+
- `HeroBlock` — landing hero on noir glow (`intense` uses `NoirGlowBackground`)
|
|
78
|
+
- `FeatureCard` — icon chip + title + description
|
|
79
|
+
- `CTABand` — closing CTA with optional accent bar
|
|
80
|
+
|
|
81
|
+
### Docs
|
|
82
|
+
|
|
83
|
+
- Charts and marketing import from `@tollerud/ui` (no duplicate `charts.jsx` / `marketing.jsx`)
|
|
84
|
+
- `docs-app/components/` taxonomy: routable `pages/page-*.jsx`, `kit/`, `blocks/rich-datatable.jsx`, `backgrounds/grain-gl.jsx`
|
|
85
|
+
|
|
86
|
+
### Migration
|
|
87
|
+
|
|
88
|
+
Nothing breaking. Import charts and blocks from `@tollerud/ui` as named exports.
|
|
89
|
+
|
|
90
|
+
## 1.3.0 — 2026-06-09 — Tailwind v4 as default CSS entry
|
|
91
|
+
|
|
92
|
+
`@tollerud/ui/globals.css` is now the Tailwind v4 bundle (tokens + component layers + `@import "tailwindcss"`). v3 projects move to `@tollerud/ui/globals-v3.css`.
|
|
93
|
+
|
|
94
|
+
### Breaking change
|
|
95
|
+
|
|
96
|
+
If you were on Tailwind v3 and importing `@tollerud/ui/globals.css`, switch to `@tollerud/ui/globals-v3.css` and keep your v3 `tailwind.config.ts` preset setup.
|
|
97
|
+
|
|
98
|
+
### Migration (v4 — recommended)
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
@import "@tollerud/ui/globals.css";
|
|
102
|
+
@source "../node_modules/@tollerud/ui/dist";
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`@tollerud/ui/globals-v4.css` remains as an alias for `globals.css`.
|
|
106
|
+
|
|
107
|
+
### Docs
|
|
108
|
+
|
|
109
|
+
Install instructions, README, GETTING_STARTED, AGENTS.md, and SKILL.md now lead with Tailwind v4.
|
|
110
|
+
|
|
111
|
+
## 1.2.0 — 2026-06-09 — Subpath exports, Tailwind v4 CSS, Playwright E2E
|
|
112
|
+
|
|
113
|
+
Per-component subpath imports, a dedicated Tailwind v4 stylesheet, expanded unit tests, and docs-site E2E smoke tests.
|
|
114
|
+
|
|
115
|
+
### New features
|
|
116
|
+
|
|
117
|
+
- Subpath exports — `@tollerud/ui/button`, `@tollerud/ui/dialog`, `@tollerud/ui/utils`, and one entry per component (61 total)
|
|
118
|
+
- `@tollerud/ui/globals-v4.css` — single import for Tailwind v4 + tokens + component layers
|
|
119
|
+
- `@tollerud/ui/globals-layers.css` — shared component CSS layers (also imported by v3 `globals.css`)
|
|
120
|
+
- `npm run changelog:draft` — draft a CHANGELOG entry from commits since the latest version
|
|
121
|
+
|
|
122
|
+
### Tests & CI
|
|
123
|
+
|
|
124
|
+
- Vitest coverage for `Dialog`, `DataTable`, and `CommandMenu`
|
|
125
|
+
- Playwright E2E smoke tests for the docs site (`npm run test:e2e`)
|
|
126
|
+
- CI verifies subpath bundles and `globals-v4.css` in the npm tarball
|
|
127
|
+
|
|
128
|
+
### Migration
|
|
129
|
+
|
|
130
|
+
Nothing breaking. Existing `@tollerud/ui` barrel imports continue to work. For tree-shaking, switch to subpath imports. Tailwind v4 projects should prefer `@import "@tollerud/ui/globals-v4.css"`.
|
|
131
|
+
|
|
132
|
+
## 1.1.5 — 2026-06-09 — Fix Tailwind preset color namespace
|
|
133
|
+
|
|
134
|
+
### Bug fix
|
|
135
|
+
|
|
136
|
+
The Tailwind preset now exposes design-system colors under `tollerud.*`, matching the shipped component classes and documentation (`text-tollerud-yellow`, `bg-tollerud-noir-900`, `border-tollerud-border`, etc.).
|
|
137
|
+
|
|
138
|
+
Previously the preset exposed the same palette under `tia.*`, so consumer projects following the docs could miss generated `tollerud-*` utilities.
|
|
139
|
+
|
|
140
|
+
### Details
|
|
141
|
+
|
|
142
|
+
- Renamed the preset color namespace from `tia` to `tollerud`
|
|
143
|
+
- Renamed the default package shadow token from `shadow-tia` to `shadow-tollerud`
|
|
144
|
+
- Added missing documented/component color aliases: `tollerud.accent`, `tollerud.foreground`, `tollerud.black`, `tollerud.white`, `tollerud.noir-950`, and `tollerud.noir-850`
|
|
145
|
+
|
|
146
|
+
### Migration
|
|
147
|
+
|
|
148
|
+
Replace any `text-tia-*`, `bg-tia-*`, `border-tia-*`, or `shadow-tia` utilities with their `tollerud` equivalents.
|
|
149
|
+
|
|
150
|
+
## 1.1.4 — 2026-06-09 — Fix: Alert tone colors missing in Tailwind v4
|
|
151
|
+
|
|
152
|
+
### Bug fix
|
|
153
|
+
|
|
154
|
+
Alert `tone` prop colors (`danger`, `info`, `success`) were invisible in Tailwind v4 consumer projects when the `@source` path in `globals.css` pointed to the wrong `node_modules` location.
|
|
155
|
+
|
|
156
|
+
**Root cause:** Tailwind v4 resolves `@source` relative to the CSS file. When `globals.css` lives in `app/`, the path `../../node_modules/@tollerud/ui/dist/**` resolves to `app/node_modules/...` (which doesn't exist) instead of the root `node_modules`. The 9 tone utility classes were never scanned and therefore never generated.
|
|
157
|
+
|
|
158
|
+
**Fix:** Added an explicit `@layer utilities` block to `globals.css` that defines all 9 Alert tone classes unconditionally, bypassing scanning entirely. Classes are always emitted regardless of `@source` path configuration.
|
|
159
|
+
|
|
160
|
+
Classes added to safelist: `bg-red-500/5`, `bg-blue-500/5`, `bg-green-500/5`, `border-red-500/30`, `border-blue-500/30`, `border-green-500/30`, `text-red-400`, `text-blue-400`, `text-green-400`
|
|
161
|
+
|
|
162
|
+
No API changes.
|
|
163
|
+
|
|
164
|
+
## 1.1.3 — 2026-06-09 — Fix: registry deps, source 'use client', React 19 devdep, docs drift
|
|
165
|
+
|
|
166
|
+
No component API changes. Six quality fixes from a review audit:
|
|
167
|
+
|
|
168
|
+
**1. registry.json — missing runtime dependencies**
|
|
169
|
+
All icon-using components now list `lucide-react` in their registry entry; `button` lists `@radix-ui/react-slot`; `status-dot` lists `framer-motion`; `dialog` lists `lucide-react`. Affects manual/registry-copy installs only — the npm bundle was already correct.
|
|
170
|
+
|
|
171
|
+
Entries updated: `button`, `status-dot`, `accordion`, `breadcrumb`, `combobox`, `date-picker`, `dialog`, `file-upload`, `pagination`, `password-input`, `pricing-card`, `stepper`, `tag-input`
|
|
172
|
+
|
|
173
|
+
**2. Source components — added `'use client'` directive**
|
|
174
|
+
12 hook-using source files were missing the directive. The bundled package was protected by the tsup post-build injection, but copied source files (registry/manual flow) would fail in Next.js App Router.
|
|
175
|
+
|
|
176
|
+
Added `'use client'` to: `Accordion`, `Avatar`, `Checkbox`, `Combobox`, `DatePicker`, `FileUpload`, `FormRow`, `PasswordInput`, `RadioGroup`, `Slider`, `Switch`, `TagInput`
|
|
177
|
+
|
|
178
|
+
**3. package.json — aligned React 19 devDependencies**
|
|
179
|
+
`react-dom` dev dep bumped from `^18.3.1` → `^19.2.7` to match `react: ^19.2.7`, eliminating the `ELSPROBLEMS` peer conflict in local dev.
|
|
180
|
+
|
|
181
|
+
**4. docs Getting Started page — rewritten to npm-package-first**
|
|
182
|
+
Was: manual file-copy instructions, wrong token value (`--tollerud-yellow` = `#E8D500`), old component list (29 components).
|
|
183
|
+
Now: `npm install @tollerud/ui`, Tailwind v3 + v4 snippets, full 61-component import block, correct yellow token docs, RSC safety note.
|
|
184
|
+
|
|
185
|
+
**5. docs Brand page — corrected monogram color**
|
|
186
|
+
`#FFF200` → `#FFFF00` (two references: description text and inline style). This now matches `BRAND.md`, `SKILL.md`, and the package tokens.
|
|
187
|
+
|
|
188
|
+
**6. .gitignore — added `*.tsbuildinfo`**
|
|
189
|
+
`examples/docs-nextjs/tsconfig.json` has `"incremental": true`, generating a `.tsbuildinfo` file that was untracked. Suppressed globally.
|
|
190
|
+
|
|
191
|
+
## 1.1.2 — 2026-06-09 — Ship AGENTS.md + SKILL.md inside the npm package
|
|
192
|
+
|
|
193
|
+
`AGENTS.md` and `SKILL.md` are now included in the published package (`files` in `package.json`). After `npm install @tollerud/ui`, both files are available at:
|
|
194
|
+
|
|
195
|
+
- `node_modules/@tollerud/ui/AGENTS.md`
|
|
196
|
+
- `node_modules/@tollerud/ui/SKILL.md`
|
|
197
|
+
|
|
198
|
+
This lets Claude Code (and other agents) read them directly without needing a separate `curl` or a GitHub URL.
|
|
199
|
+
|
|
200
|
+
## 1.1.1 — 2026-06-09 — Docs: AGENTS.md package update + migration instructions
|
|
201
|
+
|
|
202
|
+
No component or API changes. Documentation only.
|
|
203
|
+
|
|
204
|
+
- `AGENTS.md` — added "Updating the npm package" checklist (component checklist, version bump rules, required file updates, build/push steps) and "Fixing copy/paste component patterns" guide (detection, migration, prop drift checks, common patterns table) for agents working in consumer projects
|
|
205
|
+
|
|
206
|
+
## 1.1.0 — 2026-06-09 — Fix: Combobox + DatePicker close on window resize
|
|
207
|
+
|
|
208
|
+
`Combobox` and `DatePicker` rendered their popover as `position: absolute` with no awareness of window resize — if the viewport changed while a popover was open it would stay in place, misaligned from its trigger. Both now close on `window resize`, consistent with the existing close-on-scroll behaviour.
|
|
209
|
+
|
|
210
|
+
`DropdownMenu` was unaffected (Radix handles this internally).
|
|
211
|
+
|
|
212
|
+
**Migration:** no API changes — behaviour only.
|
|
213
|
+
|
|
214
|
+
## 1.0.9 — 2026-06-08 — Ship the 19 components that only existed in the docs site
|
|
215
|
+
|
|
216
|
+
Closes the long-standing gap between the marketing/docs site and the installable
|
|
217
|
+
`@tollerud/ui` package — every component previously listed under "still missing"
|
|
218
|
+
in `COMPLETENESS_ROADMAP.md` now ships from `components/index.ts`:
|
|
219
|
+
|
|
220
|
+
- **New primitives:** `Divider`, `Pill`, `Avatar` / `AvatarGroup`, `Breadcrumb`, `Pagination`, `Segmented`, `Stepper`
|
|
221
|
+
- **New layout/display:** `Panel`, `Meter`, `FormRow`, `PricingCard`
|
|
222
|
+
- **New form controls:** `Accordion` (+ `AccordionItem`/`AccordionTrigger`/`AccordionContent`), `Slider`, `PasswordInput`, `Combobox`, `DatePicker`, `FileUpload`, `TagInput`
|
|
223
|
+
|
|
224
|
+
All built from scratch as accessible, theme-aware components following existing
|
|
225
|
+
conventions (`forwardRef`, `cn`, `tollerud-*` design tokens) — no new runtime
|
|
226
|
+
dependencies were added.
|
|
227
|
+
|
|
228
|
+
## 1.0.8 — 2026-06-08 — Fix: mark package as Client Components for RSC/SSR
|
|
229
|
+
|
|
230
|
+
**Fixes a breaking issue introduced in earlier versions:** importing *anything* from `@tollerud/ui` — even a plain helper like `buttonVariants` — into a Next.js Server Component crashed at build/runtime. The package is bundled into a single `dist/index.js`/`.cjs` file, and esbuild silently drops module-level `"use client"` directives during bundling, so the bundle was never marked as client code even though it's full of components using hooks (`useState`, `useEffect`, etc.).
|
|
231
|
+
|
|
232
|
+
- `dist/index.js` and `dist/index.cjs` now start with `'use client'` (injected via a post-build step in `tsup.config.ts`, since esbuild rejects it as a bundling banner) — this correctly tells Next.js's RSC bundler that the whole package is client code
|
|
233
|
+
- Added missing `'use client'` directives to `ActionDiff`, `AlertInbox`, `Select`, and `LogViewer` source files (they used hooks without declaring the boundary — harmless pre-bundling, but good hygiene and required if these are ever built unbundled)
|
|
234
|
+
|
|
235
|
+
**Migration:** just update to `1.0.8` — no code changes required. Server Components can now safely import from `@tollerud/ui` (you'll just be importing client-bundled code, which is fine for things like `buttonVariants` that are plain functions).
|
|
236
|
+
|
|
237
|
+
## 1.0.7 — 2026-06-08 — Button `asChild` + `buttonVariants`
|
|
238
|
+
|
|
239
|
+
- `Button` now supports an `asChild` prop (via `@radix-ui/react-slot`) — renders its single child element instead of a `<button>`, merging Button's classes/props onto it. Lets you style a `<Link>` (or any other element) as a button without invalid `<a>`-in-`<button>` nesting: `<Button asChild variant="primary"><Link href="/foo">Go</Link></Button>`
|
|
240
|
+
- Exported `buttonVariants({ variant, size, className })` — returns the Button class string directly, for cases where wrapping with `asChild` is awkward
|
|
241
|
+
- Exported `ButtonVariantProps` type
|
|
242
|
+
- Added `@radix-ui/react-slot` as a direct dependency
|
|
243
|
+
|
|
244
|
+
## 1.0.6 — 2026-06-08 — Fix brand color docs
|
|
245
|
+
|
|
246
|
+
- Fixed brand color swatches in `ds/page-foundations.jsx` — "Yellow" now correctly shows `#FFFF00` / `--tollerud-yellow`, "Yellow warm" shows `#E8D500` / `--tollerud-yellow-warm`
|
|
247
|
+
- Updated `BRAND.md` — monogram color corrected to `#FFFF00`
|
|
248
|
+
|
|
249
|
+
## 1.0.5 — 2026-06-08 — Yellow token rename + AGENTS.md
|
|
250
|
+
|
|
251
|
+
**Breaking token changes:**
|
|
252
|
+
- `--tollerud-yellow` is now `#FFFF00` (was `#E8D500`) — the brighter, high-voltage yellow is now the primary accent
|
|
253
|
+
- `--tollerud-yellow-bright` removed — replaced by `--tollerud-yellow-warm: #E8D500` for the warmer secondary yellow
|
|
254
|
+
- Tailwind: `tollerud.yellow` → `#FFFF00`, `tollerud.yellow-bright` → renamed to `tollerud.yellow-warm: #E8D500`
|
|
255
|
+
- All glow `rgba` values updated from `rgba(232,213,0,...)` to `rgba(255,255,0,...)`
|
|
256
|
+
- Semantic tokens `--primary`, `--ring`, `--chart-1`, `--border-accent` updated to `#FFFF00`
|
|
257
|
+
|
|
258
|
+
**Migration:** replace `tollerud-yellow-bright` → `tollerud-yellow`, and `tollerud-yellow` → `tollerud-yellow-warm` wherever you relied on the old warm `#E8D500` value.
|
|
259
|
+
|
|
260
|
+
**New files:**
|
|
261
|
+
- Added `AGENTS.md` — cross-tool AI agent guide (Claude Code, Cursor, Copilot, Codex)
|
|
262
|
+
- Added `.github/copilot-instructions.md` — GitHub Copilot native instructions
|
|
263
|
+
|
|
264
|
+
## 2026-05-26 — Form Primitives + Footer
|
|
265
|
+
|
|
266
|
+
- Added **Textarea** — multiline input with label/error support, same pattern as Input
|
|
267
|
+
- Added **Select** — styled native `<select>` with placeholder, label/error, custom chevron
|
|
268
|
+
- Added **Checkbox** — custom-styled checkbox with checkmark SVG, label, focus-visible ring
|
|
269
|
+
- Added **Switch** — toggle switch with role="switch", animated thumb, label
|
|
270
|
+
- Added **RadioGroup / Radio** — fieldset-based radio group with custom dot indicator, label/error
|
|
271
|
+
- Added **Footer** — ported from `@tollerud/footer` (v1.1.2), uses Tollerud Design System design tokens, supports `accent` variant, responsive/row layouts, unstyled mode
|
|
272
|
+
- 6 new components → total **29 components** now
|
|
273
|
+
|
|
274
|
+
## 2026-05-26 — Phase 5: Docs App
|
|
275
|
+
|
|
276
|
+
- Created `examples/docs-nextjs/` — a full Geist-inspired documentation site:
|
|
277
|
+
- Foundations: Color, Typography, Motion, Accessibility
|
|
278
|
+
- Components: Catalog with all 23 components organized by category
|
|
279
|
+
- Patterns: Dashboard and Approval Flow templates
|
|
280
|
+
- Brand: Tia avatar, voice, and Tollerud glow guide
|
|
281
|
+
- Changelog: Version history timeline
|
|
282
|
+
- Docs use the same design system components for consistent preview
|
|
283
|
+
- Dark theme with sidebar navigation, responsive layout
|
|
284
|
+
|
|
285
|
+
## 2026-05-26 — Phase 4: shadcn Registry Compatibility
|
|
286
|
+
|
|
287
|
+
- Added `components.json` — shadcn UI registry format for tooling compatibility
|
|
288
|
+
- Added `registry.json` — component registry with all 23 components, dependencies, and metadata
|
|
289
|
+
- Added `GETTING_STARTED.md` — one-command install guide with Tailwind setup and component import examples
|
|
290
|
+
- Portable import paths documented: `@/components/ui` and `@/lib/utils`
|
|
291
|
+
|
|
292
|
+
## 2026-05-26 — Phase 3: Homelab Operational Components
|
|
293
|
+
|
|
294
|
+
11 new homelab-specific components for infrastructure management:
|
|
295
|
+
|
|
296
|
+
**Health & Monitoring**
|
|
297
|
+
- `ServiceHealthCard` — service status card with uptime, response time, version
|
|
298
|
+
- `HostCard` — server/VM card with CPU, RAM, disk, containers, IP
|
|
299
|
+
- `DockerStackCard` — Docker Compose stack overview with per-service health
|
|
300
|
+
- `IncidentCard` — severity-graded incident/alert card (critical→info)
|
|
301
|
+
|
|
302
|
+
**Actions & Approval**
|
|
303
|
+
- `ApprovalCard` — approve/reject card for pending operations
|
|
304
|
+
- `ActionDiff` — unified diff viewer with line numbers, add/remove/context
|
|
305
|
+
- `RollbackPlan` — ordered rollback steps with execution status
|
|
306
|
+
|
|
307
|
+
**Logs & Alerts**
|
|
308
|
+
- `LogViewer` — terminal-style scrollable log viewer with search, live follow, level coloring
|
|
309
|
+
- `AlertInbox` — alert feed with count badges, severity filter, acknowledge action
|
|
310
|
+
|
|
311
|
+
**Feed & History**
|
|
312
|
+
- `Timeline` — vertical timeline with status dots, connecting lines, metadata badges
|
|
313
|
+
- `BackupStatusPanel` — backup job overview with per-job status and schedule
|
|
314
|
+
|
|
315
|
+
## 2026-05-26 — Phase 2: Command-First Shell
|
|
316
|
+
|
|
317
|
+
- **Kbd** — Raycast-style keyboard shortcut chip (`⌘K`, `⌘⇧S`, etc.), 2 sizes.
|
|
318
|
+
- **ActionRow** — Command/action item row with icon, label, description, shortcut, keyboard navigation (`highlighted` prop).
|
|
319
|
+
- **CommandMenu** — Full command palette: search, groups, arrow key nav, `Enter`/`Esc`, auto-focus, body scroll lock, footer hints, custom filter support.
|
|
320
|
+
- **CSS classes**: `.tollerud-kbd`, `.tollerud-action-row`, `.tollerud-cmd`, `.tollerud-cmd-overlay`, `.tollerud-cmd__*` — in both `globals.css` and `tokens.css`.
|
|
321
|
+
- **KEYBOARD.md** — Keyboard contract document: global shortcuts, component contracts, accessibility requirements, implementation rules.
|
|
322
|
+
|
|
323
|
+
## 2026-05-26 — NoirGlowBackground
|
|
324
|
+
|
|
325
|
+
- Ported the real Tollerud.no background source from `MathiasOki/tollerud-landing`.
|
|
326
|
+
- Added `components/NoirGlowBackground.tsx` using `@paper-design/shaders-react` / `GrainGradient`.
|
|
327
|
+
- Added CSS fallback classes: `.tollerud-noir-glow-root`, `.tollerud-noir-glow-bg`, `.tollerud-noir-glow-vignette`, `.tollerud-noir-noise`.
|
|
328
|
+
- Added acid-yellow token `--tollerud-acid` / `tollerud-acid` for Tollerud voltage.
|
|
329
|
+
- Updated `preview.html` and the Next.js example hero to use the glow background.
|
|
330
|
+
- Added `BACKGROUNDS.md` documentation.
|
|
331
|
+
|
|
332
|
+
## 2026-05-25 — v1.0 Next.js Release
|
|
333
|
+
|
|
334
|
+
- **Tailwind preset** (`tollerud-preset.js`) — drop into any Next.js project
|
|
335
|
+
- **Globals.css** with shadcn-compatible semantic tokens (`--background`, `--primary`, `--ring`, etc.)
|
|
336
|
+
- **React components** — Button, Card, Badge, StatusDot, Input, CodeBlock, StatCard, Container
|
|
337
|
+
- **ACCESSIBILITY.md** — contrast ratios, focus rings, touch targets, reduced motion
|
|
338
|
+
- **COMPONENTS.md** — usage matrix for all component variants
|
|
339
|
+
- **VOICE.md** — copy guidelines, terminal-style CTAs, tone rules
|
|
340
|
+
- **CHANGELOG.md** — this file
|
|
341
|
+
- **Graphify-inspired additions**: grid backgrounds, glass nav, terminal CTAs, gradient accents, pills, tight display typography
|
|
342
|
+
- **Motion tokens**: duration, easing, reduced-motion support
|
|
343
|
+
- **Chart tokens**: accessible color palette for data viz
|
|
344
|
+
|
|
345
|
+
### What shipped
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
design-system/
|
|
349
|
+
├── package.json
|
|
350
|
+
├── README.md
|
|
351
|
+
├── CHANGELOG.md
|
|
352
|
+
├── ACCESSIBILITY.md
|
|
353
|
+
├── COMPONENTS.md
|
|
354
|
+
├── VOICE.md
|
|
355
|
+
├── COMPLETENESS_ROADMAP.md
|
|
356
|
+
├── tollerud-preset.js # ← drop-in Tailwind preset
|
|
357
|
+
├── tailwind.config.js # (backward compat)
|
|
358
|
+
├── tokens.css # (backward compat)
|
|
359
|
+
├── globals.css # ← full semantic tokens + components
|
|
360
|
+
├── preview.html
|
|
361
|
+
├── tollerud-avatar.svg
|
|
362
|
+
├── components/
|
|
363
|
+
│ ├── index.ts
|
|
364
|
+
│ ├── Button.tsx
|
|
365
|
+
│ ├── Card.tsx
|
|
366
|
+
│ ├── Badge.tsx
|
|
367
|
+
│ ├── StatusDot.tsx
|
|
368
|
+
│ ├── Input.tsx
|
|
369
|
+
│ ├── CodeBlock.tsx
|
|
370
|
+
│ ├── StatCard.tsx
|
|
371
|
+
│ └── Container.tsx
|
|
372
|
+
├── examples/
|
|
373
|
+
│ └── nextjs/
|
|
374
|
+
│ └── tailwind.config.ts
|
|
375
|
+
└── components.css
|
|
376
|
+
```
|