@ktbsh/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/README.md +165 -0
  2. package/dist/custom-elements.json +1427 -0
  3. package/dist/index.d.ts +13 -0
  4. package/dist/index.js +12 -0
  5. package/dist/react/alert.d.ts +20 -0
  6. package/dist/react/alert.js +30 -0
  7. package/dist/react/badge.d.ts +17 -0
  8. package/dist/react/badge.js +30 -0
  9. package/dist/react/box.d.ts +22 -0
  10. package/dist/react/box.js +30 -0
  11. package/dist/react/breadcrumb.d.ts +17 -0
  12. package/dist/react/breadcrumb.js +30 -0
  13. package/dist/react/button.d.ts +20 -0
  14. package/dist/react/button.js +30 -0
  15. package/dist/react/checkbox.d.ts +22 -0
  16. package/dist/react/checkbox.js +30 -0
  17. package/dist/react/container.d.ts +18 -0
  18. package/dist/react/container.js +30 -0
  19. package/dist/react/field.d.ts +20 -0
  20. package/dist/react/field.js +30 -0
  21. package/dist/react/heading.d.ts +19 -0
  22. package/dist/react/heading.js +30 -0
  23. package/dist/react/input.d.ts +25 -0
  24. package/dist/react/input.js +30 -0
  25. package/dist/react/label.d.ts +18 -0
  26. package/dist/react/label.js +30 -0
  27. package/dist/react/link.d.ts +21 -0
  28. package/dist/react/link.js +30 -0
  29. package/dist/react/modal.d.ts +18 -0
  30. package/dist/react/modal.js +30 -0
  31. package/dist/react/nav.d.ts +17 -0
  32. package/dist/react/nav.js +30 -0
  33. package/dist/react/pagination.d.ts +19 -0
  34. package/dist/react/pagination.js +30 -0
  35. package/dist/react/progress.d.ts +19 -0
  36. package/dist/react/progress.js +30 -0
  37. package/dist/react/radio.d.ts +22 -0
  38. package/dist/react/radio.js +30 -0
  39. package/dist/react/select.d.ts +22 -0
  40. package/dist/react/select.js +30 -0
  41. package/dist/react/skeleton.d.ts +19 -0
  42. package/dist/react/skeleton.js +30 -0
  43. package/dist/react/spinner.d.ts +18 -0
  44. package/dist/react/spinner.js +30 -0
  45. package/dist/react/stack.d.ts +21 -0
  46. package/dist/react/stack.js +30 -0
  47. package/dist/react/switch.d.ts +21 -0
  48. package/dist/react/switch.js +30 -0
  49. package/dist/react/tab-panel.d.ts +18 -0
  50. package/dist/react/tab-panel.js +30 -0
  51. package/dist/react/tab.d.ts +19 -0
  52. package/dist/react/tab.js +30 -0
  53. package/dist/react/tabs.d.ts +17 -0
  54. package/dist/react/tabs.js +30 -0
  55. package/dist/react/text.d.ts +19 -0
  56. package/dist/react/text.js +30 -0
  57. package/dist/react/textarea.d.ts +24 -0
  58. package/dist/react/textarea.js +30 -0
  59. package/dist/react/toast.d.ts +19 -0
  60. package/dist/react/toast.js +30 -0
  61. package/dist/themes/dark.css +52 -0
  62. package/dist/themes/light.css +53 -0
  63. package/dist/tokens/index.d.ts +7 -0
  64. package/dist/tokens/index.js +7 -0
  65. package/dist/tokens/semantic.d.ts +209 -0
  66. package/dist/tokens/semantic.js +102 -0
  67. package/dist/types/index.d.ts +15 -0
  68. package/dist/types/index.js +2 -0
  69. package/dist/vanilla/alert.d.ts +2 -0
  70. package/dist/vanilla/alert.js +134 -0
  71. package/dist/vanilla/alert.src.js +257 -0
  72. package/dist/vanilla/badge.d.ts +2 -0
  73. package/dist/vanilla/badge.js +89 -0
  74. package/dist/vanilla/badge.src.js +212 -0
  75. package/dist/vanilla/box.d.ts +2 -0
  76. package/dist/vanilla/box.js +100 -0
  77. package/dist/vanilla/box.src.js +270 -0
  78. package/dist/vanilla/breadcrumb.d.ts +2 -0
  79. package/dist/vanilla/breadcrumb.js +93 -0
  80. package/dist/vanilla/breadcrumb.src.js +255 -0
  81. package/dist/vanilla/button.d.ts +2 -0
  82. package/dist/vanilla/button.js +135 -0
  83. package/dist/vanilla/button.src.js +260 -0
  84. package/dist/vanilla/checkbox.d.ts +2 -0
  85. package/dist/vanilla/checkbox.js +96 -0
  86. package/dist/vanilla/checkbox.src.js +296 -0
  87. package/dist/vanilla/container.d.ts +2 -0
  88. package/dist/vanilla/container.js +79 -0
  89. package/dist/vanilla/container.src.js +222 -0
  90. package/dist/vanilla/field.d.ts +2 -0
  91. package/dist/vanilla/field.js +113 -0
  92. package/dist/vanilla/field.src.js +278 -0
  93. package/dist/vanilla/heading.d.ts +2 -0
  94. package/dist/vanilla/heading.js +75 -0
  95. package/dist/vanilla/heading.src.js +241 -0
  96. package/dist/vanilla/input.d.ts +2 -0
  97. package/dist/vanilla/input.js +121 -0
  98. package/dist/vanilla/input.src.js +326 -0
  99. package/dist/vanilla/label.d.ts +2 -0
  100. package/dist/vanilla/label.js +75 -0
  101. package/dist/vanilla/label.src.js +232 -0
  102. package/dist/vanilla/link.d.ts +2 -0
  103. package/dist/vanilla/link.js +96 -0
  104. package/dist/vanilla/link.src.js +272 -0
  105. package/dist/vanilla/modal.d.ts +2 -0
  106. package/dist/vanilla/modal.js +125 -0
  107. package/dist/vanilla/modal.src.js +251 -0
  108. package/dist/vanilla/nav.d.ts +2 -0
  109. package/dist/vanilla/nav.js +94 -0
  110. package/dist/vanilla/nav.src.js +214 -0
  111. package/dist/vanilla/pagination.d.ts +2 -0
  112. package/dist/vanilla/pagination.js +114 -0
  113. package/dist/vanilla/pagination.src.js +262 -0
  114. package/dist/vanilla/progress.d.ts +2 -0
  115. package/dist/vanilla/progress.js +108 -0
  116. package/dist/vanilla/progress.src.js +244 -0
  117. package/dist/vanilla/radio.d.ts +2 -0
  118. package/dist/vanilla/radio.js +104 -0
  119. package/dist/vanilla/radio.src.js +326 -0
  120. package/dist/vanilla/select.d.ts +2 -0
  121. package/dist/vanilla/select.js +104 -0
  122. package/dist/vanilla/select.src.js +332 -0
  123. package/dist/vanilla/skeleton.d.ts +2 -0
  124. package/dist/vanilla/skeleton.js +99 -0
  125. package/dist/vanilla/skeleton.src.js +240 -0
  126. package/dist/vanilla/spinner.d.ts +2 -0
  127. package/dist/vanilla/spinner.js +108 -0
  128. package/dist/vanilla/spinner.src.js +222 -0
  129. package/dist/vanilla/stack.d.ts +2 -0
  130. package/dist/vanilla/stack.js +83 -0
  131. package/dist/vanilla/stack.src.js +259 -0
  132. package/dist/vanilla/switch.d.ts +2 -0
  133. package/dist/vanilla/switch.js +166 -0
  134. package/dist/vanilla/switch.src.js +299 -0
  135. package/dist/vanilla/tab-panel.d.ts +2 -0
  136. package/dist/vanilla/tab-panel.js +80 -0
  137. package/dist/vanilla/tab-panel.src.js +227 -0
  138. package/dist/vanilla/tab.d.ts +2 -0
  139. package/dist/vanilla/tab.js +99 -0
  140. package/dist/vanilla/tab.src.js +253 -0
  141. package/dist/vanilla/tabs.d.ts +2 -0
  142. package/dist/vanilla/tabs.js +66 -0
  143. package/dist/vanilla/tabs.src.js +237 -0
  144. package/dist/vanilla/text.d.ts +2 -0
  145. package/dist/vanilla/text.js +74 -0
  146. package/dist/vanilla/text.src.js +232 -0
  147. package/dist/vanilla/textarea.d.ts +2 -0
  148. package/dist/vanilla/textarea.js +97 -0
  149. package/dist/vanilla/textarea.src.js +316 -0
  150. package/dist/vanilla/toast.d.ts +2 -0
  151. package/dist/vanilla/toast.js +120 -0
  152. package/dist/vanilla/toast.src.js +245 -0
  153. package/package.json +111 -0
package/README.md ADDED
@@ -0,0 +1,165 @@
1
+ # @ktbsh/ui
2
+
3
+ Framework-agnostic **design system** built with [`@ktbsh/sdk`](https://www.npmjs.com/package/@ktbsh/sdk).
4
+ Author once → vanilla custom elements + React wrappers + Custom Elements Manifest.
5
+
6
+ | | |
7
+ |--|--|
8
+ | **Package** | `@ktbsh/ui` |
9
+ | **Tags** | `kitbash-*` primitives + layout (box, stack, container, text, heading, …) |
10
+ | **Runtime** | Bun ≥ 1.3.14 |
11
+
12
+ Playground: **Storybook** (`bun run storybook`).
13
+ Agent/process rules: [`AGENTS.md`](./AGENTS.md). Architecture: [`docs/superpowers/specs/`](./docs/superpowers/specs/).
14
+ Accessibility target: **WCAG 2.2 AA** — [`docs/a11y.md`](./docs/a11y.md).
15
+
16
+ ## Requirements
17
+
18
+ - [Bun](https://bun.sh) **1.3.14+**
19
+
20
+ ## Install
21
+
22
+ From npm (when published):
23
+
24
+ ```bash
25
+ bun add @ktbsh/ui
26
+ # or: npm install @ktbsh/ui
27
+ ```
28
+
29
+ From a local clone (path / workspace):
30
+
31
+ ```bash
32
+ bun install
33
+ bun run build
34
+ ```
35
+
36
+ Build output:
37
+
38
+ ```text
39
+ dist/
40
+ ├── custom-elements.json
41
+ ├── vanilla/ # browser custom elements (uhtml bundled)
42
+ └── react/ # React wrappers + .d.ts
43
+ ```
44
+
45
+ ## Public import map
46
+
47
+ | Import | Purpose |
48
+ |--------|---------|
49
+ | `@ktbsh/ui` | Tokens helpers + shared types |
50
+ | `@ktbsh/ui/vanilla/<name>` | Register `kitbash-<name>` custom element |
51
+ | `@ktbsh/ui/react/<name>` | React wrapper (`Kitbash*`) + types |
52
+ | `@ktbsh/ui/themes/light.css` | Light theme (`:root` default) |
53
+ | `@ktbsh/ui/themes/dark.css` | Dark theme (`:root[data-theme="dark"]`) |
54
+ | `@ktbsh/ui/tokens` | Token API only |
55
+ | `@ktbsh/ui/types` | Shared TypeScript unions |
56
+ | `@ktbsh/ui/custom-elements.json` | Custom Elements Manifest |
57
+
58
+ `<name>` matches the component file (e.g. `button`, `stack`, `tab-panel`).
59
+
60
+ ## Scripts
61
+
62
+ | Script | Purpose |
63
+ |--------|---------|
64
+ | `bun run build` | kitbash compile + package entry emit (JS/d.ts/themes) |
65
+ | `bun run package:entries` | Emit public `dist` entries after kitbash (also part of `build`) |
66
+ | `bun run dev` | Watch rebuild |
67
+ | `bun run lint` / `format` / `ci` | Biome |
68
+ | `bun run typecheck` | `tsc --noEmit` |
69
+ | `bun run test` | Bun tests |
70
+ | `bun run storybook` | Storybook dev (port 6006) |
71
+ | `bun run build-storybook` | Static Storybook build |
72
+ | `bun run verify` | tokens, ci, typecheck, test, kitbash build, Storybook build |
73
+ | `bun run pack:dry` | `npm pack --dry-run` (runs `prepack` → build once) |
74
+
75
+ ## Theming (light / dark)
76
+
77
+ Source of truth: `src/tokens/semantic.ts`
78
+ Generated: `src/tokens/themes/light.css`, `dark.css`, `src/tokens/tokens.json`
79
+
80
+ ```bash
81
+ bun run tokens:build # regenerate after editing semantic.ts
82
+ bun run tokens:check # CI drift check
83
+ ```
84
+
85
+ Load theme CSS in the host app (variables inherit into shadow roots):
86
+
87
+ ```ts
88
+ import '@ktbsh/ui/themes/light.css';
89
+ import '@ktbsh/ui/themes/dark.css';
90
+ import { applyTheme } from '@ktbsh/ui';
91
+
92
+ applyTheme('dark'); // document.documentElement dataset.theme
93
+ // light is default via :root even without data-theme
94
+ ```
95
+
96
+ Components use semantic vars such as `var(--kb-color-accent-default)`. Kitbash also injects light defaults onto `:host` from `tokens.json`.
97
+
98
+ ## Consume
99
+
100
+ **Vanilla / Astro / Svelte** — import the custom element (side-effect registration), then use the tag:
101
+
102
+ ```html
103
+ <script type="module">
104
+ import '@ktbsh/ui/vanilla/button';
105
+ </script>
106
+ <kitbash-button variant="primary">Hello</kitbash-button>
107
+ ```
108
+
109
+ ```svelte
110
+ <script>
111
+ import '@ktbsh/ui/vanilla/button';
112
+ </script>
113
+ <kitbash-button variant="primary">Hello</kitbash-button>
114
+ ```
115
+
116
+ **React**
117
+
118
+ ```tsx
119
+ import { KitbashButton } from '@ktbsh/ui/react/button';
120
+
121
+ <KitbashButton variant="primary">Hello</KitbashButton>
122
+ ```
123
+
124
+ React is an **optional peer** (`react` ≥ 18). Vanilla-only apps do not need it.
125
+
126
+ ## Publish / release
127
+
128
+ - **Package:** `@ktbsh/ui` (public). `files` + `exports` define the npm surface; `prepack` runs `bun run build`.
129
+ - **Dry-run:** `bun run pack:dry`.
130
+ - **CI does not publish on every merge.** Releases are **git tags** only.
131
+
132
+ ### Cut a release (maintainers)
133
+
134
+ 1. On `master`, set `"version"` in `package.json` (semver). First release is already `0.1.0`.
135
+ 2. Merge any open work; `master` green.
136
+ 3. Tag and push (must match version):
137
+
138
+ ```bash
139
+ git checkout master && git pull
140
+ # version in package.json is e.g. 0.1.0
141
+ git tag v0.1.0
142
+ git push origin v0.1.0
143
+ ```
144
+
145
+ 4. GitHub Actions workflow **Publish** runs `bun run verify` then `npm publish` using secret `NPM_TOKEN`.
146
+ 5. Check: https://www.npmjs.com/package/@ktbsh/ui
147
+
148
+ Semver guide: **patch** fixes, **minor** new components/exports, **major** breaking changes.
149
+ Consumers should pin early (`0.1.0` or `~0.1.0`), not track every git commit.
150
+
151
+ ## Authoring
152
+
153
+ 1. Add `src/components/<name>.ts` with `export default defineComponent({ tag: 'kitbash-…', … })`.
154
+ 2. Obey SDK rules: no outer closures in `render` / `events`.
155
+ 3. `bun run build`.
156
+
157
+ Full compiler API: [@ktbsh/sdk on npm](https://www.npmjs.com/package/@ktbsh/sdk).
158
+
159
+ ## CI
160
+
161
+ GitHub Actions runs Biome, typecheck, and build on every push/PR to `master`.
162
+
163
+ ## License
164
+
165
+ MIT