@vanelsas/baredom 3.2.0 → 4.0.0-alpha.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 (124) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +82 -170
  3. package/custom-elements.json +3705 -3385
  4. package/dist/barebuild-action.d.ts +45 -0
  5. package/dist/barebuild-action.js +9 -0
  6. package/dist/barebuild-data.d.ts +39 -0
  7. package/dist/barebuild-data.js +5 -0
  8. package/dist/barebuild-invalidate-on.d.ts +42 -0
  9. package/dist/barebuild-invalidate-on.js +5 -0
  10. package/dist/barebuild-route.d.ts +39 -0
  11. package/dist/barebuild-route.js +4 -0
  12. package/dist/barebuild-router.d.ts +41 -0
  13. package/dist/barebuild-router.js +13 -0
  14. package/dist/baredom.d.ts +96 -91
  15. package/dist/base.js +589 -579
  16. package/dist/integrity.json +113 -108
  17. package/dist/x-alert.js +17 -17
  18. package/dist/x-avatar-group.js +9 -9
  19. package/dist/x-avatar.js +14 -14
  20. package/dist/x-badge.js +9 -9
  21. package/dist/x-bento-grid.js +5 -5
  22. package/dist/x-bento-item.js +4 -4
  23. package/dist/x-breadcrumbs.js +13 -13
  24. package/dist/x-button.js +1 -1
  25. package/dist/x-calendar.js +38 -38
  26. package/dist/x-cancel-dialogue.js +13 -13
  27. package/dist/x-card.js +7 -7
  28. package/dist/x-carousel.js +33 -33
  29. package/dist/x-chart.js +47 -47
  30. package/dist/x-checkbox.js +1 -1
  31. package/dist/x-chip.js +1 -1
  32. package/dist/x-code.js +27 -27
  33. package/dist/x-collapse.js +11 -11
  34. package/dist/x-color-picker.js +44 -44
  35. package/dist/x-combobox.js +28 -28
  36. package/dist/x-command-palette.js +27 -27
  37. package/dist/x-confetti.js +24 -24
  38. package/dist/x-container.js +5 -5
  39. package/dist/x-context-menu.js +20 -20
  40. package/dist/x-copy.js +1 -1
  41. package/dist/x-currency-field.js +24 -24
  42. package/dist/x-date-picker.d.ts +5 -4
  43. package/dist/x-date-picker.js +37 -37
  44. package/dist/x-divider.js +10 -10
  45. package/dist/x-drawer.js +11 -11
  46. package/dist/x-dropdown.js +12 -12
  47. package/dist/x-fieldset.js +5 -5
  48. package/dist/x-file-download.js +5 -5
  49. package/dist/x-file-upload.js +22 -22
  50. package/dist/x-form-field.js +14 -14
  51. package/dist/x-form.js +11 -10
  52. package/dist/x-gaussian-blur.js +13 -13
  53. package/dist/x-grid.js +6 -6
  54. package/dist/x-i18n-provider.js +7 -7
  55. package/dist/x-i18n.js +4 -4
  56. package/dist/x-icon.js +7 -7
  57. package/dist/x-image.js +17 -17
  58. package/dist/x-kbd.js +12 -12
  59. package/dist/x-kinetic-canvas.js +25 -25
  60. package/dist/x-kinetic-font.js +27 -27
  61. package/dist/x-kinetic-typography.js +33 -33
  62. package/dist/x-liquid-dock.js +31 -31
  63. package/dist/x-liquid-fill.js +41 -41
  64. package/dist/x-liquid-glass.js +34 -34
  65. package/dist/x-menu-item.js +8 -8
  66. package/dist/x-menu.js +9 -9
  67. package/dist/x-metaball-cursor.js +23 -23
  68. package/dist/x-modal.js +12 -12
  69. package/dist/x-morph-stack.js +37 -37
  70. package/dist/x-multi-combobox.js +35 -35
  71. package/dist/x-navbar.js +15 -15
  72. package/dist/x-neural-glow.js +29 -29
  73. package/dist/x-notification-center.js +9 -9
  74. package/dist/x-organic-divider.js +17 -17
  75. package/dist/x-organic-progress.js +33 -33
  76. package/dist/x-organic-shape.js +12 -12
  77. package/dist/x-otp-input.js +21 -21
  78. package/dist/x-pagination.js +14 -14
  79. package/dist/x-particle-button.js +48 -48
  80. package/dist/x-popover.js +26 -26
  81. package/dist/x-progress-circle.js +7 -7
  82. package/dist/x-progress.js +7 -7
  83. package/dist/x-proximity-list.js +20 -20
  84. package/dist/x-radio.js +11 -11
  85. package/dist/x-range-slider.js +28 -28
  86. package/dist/x-rating.js +23 -23
  87. package/dist/x-ripple-effect.js +9 -9
  88. package/dist/x-scroll-parallax.js +17 -17
  89. package/dist/x-scroll-stack.js +16 -16
  90. package/dist/x-scroll-story.js +33 -33
  91. package/dist/x-scroll-timeline.js +45 -45
  92. package/dist/x-scroll.js +37 -37
  93. package/dist/x-search-field.js +1 -1
  94. package/dist/x-select.d.ts +1 -0
  95. package/dist/x-select.js +1 -1
  96. package/dist/x-sidebar.js +16 -16
  97. package/dist/x-skeleton-group.js +12 -12
  98. package/dist/x-skeleton.js +1 -1
  99. package/dist/x-slider.js +15 -15
  100. package/dist/x-soft-body.js +18 -18
  101. package/dist/x-spacer.js +4 -4
  102. package/dist/x-spinner.js +4 -4
  103. package/dist/x-splash.js +12 -12
  104. package/dist/x-split-pane.js +15 -15
  105. package/dist/x-spotlight-card.js +12 -12
  106. package/dist/x-stat.js +10 -10
  107. package/dist/x-stepper.js +13 -13
  108. package/dist/x-switch.js +10 -10
  109. package/dist/x-tab.js +6 -6
  110. package/dist/x-table-cell.js +19 -19
  111. package/dist/x-table-row.js +8 -8
  112. package/dist/x-table.js +13 -13
  113. package/dist/x-tabs.js +11 -11
  114. package/dist/x-text-area.js +18 -18
  115. package/dist/x-theme.js +25 -25
  116. package/dist/x-timeline-item.js +20 -20
  117. package/dist/x-timeline.js +8 -8
  118. package/dist/x-toast.js +22 -22
  119. package/dist/x-toaster.js +6 -6
  120. package/dist/x-tooltip.js +12 -12
  121. package/dist/x-trace-history.js +124 -124
  122. package/dist/x-typography.js +6 -6
  123. package/dist/x-welcome-tour.js +63 -63
  124. package/package.json +28 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,48 @@
2
2
 
3
3
  All notable changes to BareDOM will be documented in this file.
4
4
 
5
+ ## [4.0.0-alpha.0] - 2026-06-03
6
+
7
+ **Pre-release — published on the npm `alpha` dist-tag (`npm install @vanelsas/baredom@alpha`). The stable `latest` line is unaffected, and `^3.x` ranges never resolve this version.** First preview of the BareBuild **write-side** coordination elements, designed-by-use from the Phase-4 demo port. These are **experimental — attribute shapes may change before 4.0.0** (the no-selectors / values-not-places spine will not). See `barebuild/docs/write-side-design-notes.md`.
8
+
9
+ ### Added — write-side ALPHA
10
+
11
+ - **`<barebuild-action>`** — wraps a submit emitter by containment (a descendant dispatching the configured `submit-event`), JSON-POST/PUT/DELETEs the values, and publishes `.state` + a `barebuild-action-state {name, state}` event per phase transition. Optional `.valuesTransform` property for payload hygiene the action can't itself know (blank-stripping, numeric coercion).
12
+ - **`<barebuild-invalidate-on>`** — placed as a child of a source; on a `when-phase`/`when-name` match it dispatches the document-level `barebuild-invalidate {src}` protocol.
13
+ - **`<barebuild-data>`** now also listens at document for `barebuild-invalidate` and refetches when `detail.src` matches its own `src` by exact `URL.pathname` — the invalidation substrate (additive; the read-side contract is unchanged).
14
+
15
+ ## [3.3.0] - 2026-05-26
16
+
17
+ Three new framework adapters ship alongside the existing React and Angular adapters: **Vue 3**, **Svelte 5**, and **SolidJS** are now officially supported. BareDOM users of every major JS framework can now install a typed wrapper package that adds framework-idiomatic props, events, and ref handling on top of the same underlying web components.
18
+
19
+ The core library itself is functionally unchanged from 3.2.0 — `dist/` is byte-identical. This release ships an updated `README.md` (and an additional `CHANGELOG.md` entry) so the npm-registry view reflects the now-complete five-adapter ecosystem.
20
+
21
+ ### Added — framework adapters
22
+
23
+ - **`@vanelsas/baredom-vue`** — Vue 3.4+ wrapper components. v-model bridging via the shared `form-control-metadata` single-source-of-truth, typed events, ref forwarding through `expose()`. Install: `npm install @vanelsas/baredom-vue`.
24
+ - **`@vanelsas/baredom-svelte`** — Svelte 5+ wrapper components. `$bindable()` for form controls, `$effect()` for event binding, per-component `.svelte` + `.ts` shim files for named exports. Install: `npm install @vanelsas/baredom-svelte`.
25
+ - **`@vanelsas/baredom-solid`** — Solid 1.9+ wrapper components. Function components with `splitProps`, `onMount`, `onCleanup`, `createEffect`. JSX is preserved for the consumer's Solid bundler. Install: `npm install @vanelsas/baredom-solid`.
26
+
27
+ All three adapters auto-generate one typed component per BareDOM custom element (103 components total). Per-component bundles, controlled-input support via Vue v-model / Svelte `$bindable()` / Solid signals, typed `CustomEvent` payloads — all driven by the same Custom Elements Manifest that already powered the React and Angular adapters.
28
+
29
+ ### Changed
30
+
31
+ - **`README.md`** — Restructured for the five-adapter era. New "Framework adapters" comparison table. "Why web components?" and "Design Principles" sections merged into a single "Why BareDOM?". Theming section trimmed (full guide lives in [`docs/x-theme.md`](docs/x-theme.md)). Quick-start replaced with a working HTML example. New top-level "Time-Travel Debugger" section surfacing [`x-trace-history`](docs/x-trace-history.md) — previously buried inside a value-prop bullet.
32
+ - **[`docs/components.md`](docs/components.md)** — Full per-component catalogue (103 components across 11 categories) split out from the README. The previous README listed only 58 of the 103 components; the kinetics, organic, effects, and scroll clusters are now properly catalogued.
33
+ - **`scripts/codegen_shared.bb`** (new) — Shared codegen module housing `resolve-event-name`, `prop-type->ts`, and `event-detail->ts`, previously copy-pasted across all four adapter generators (~270 lines of duplication eliminated). React's `controlled-components` map now derives from `scripts/form-control-metadata.bb`, closing a silent drift trap for new form controls.
34
+ - **`CLAUDE.md`** — Registration checklist for new components now requires updating both `docs/components.md` and the `README.md` Components overview.
35
+ - **CI** — New `.github/workflows/release-solid.yml` matching the per-adapter release pattern. [`docs/RELEASING.md`](docs/RELEASING.md) extended to cover the per-adapter release process and first-publish `NPM_TOKEN` permission considerations.
36
+
37
+ ### Fixed — adapter bugs
38
+
39
+ - **`@vanelsas/baredom-angular`** — `x-select` CVA used the wrong change-event name. Shipped via PR #242.
40
+ - **`@vanelsas/baredom-vue`** — Vue-reserved prop names (`key`, `ref`, `is`) were silently dropped by Vue. Reserved props are now renamed in the generated wrapper (e.g. `keyAttr`) and the underlying attribute is written imperatively. Shipped via PR #243.
41
+
42
+ ### Notes
43
+
44
+ - Adapter packages are versioned independently and live at `@vanelsas/baredom-{react,angular,vue,svelte,solid}`. See [`docs/RELEASING.md`](docs/RELEASING.md) for the per-adapter release process.
45
+ - The five published adapter versions at the time of this release: `react@2.1.0`, `angular@2.7.0`, `vue@0.1.0`, `svelte@0.1.0`, `solid@0.1.0`.
46
+
5
47
  ## [3.2.0] - 2026-05-22
6
48
 
7
49
  Five new components, an element-highlight feature for the `x-trace-history` dev tool, two notable bug fixes, and an internal naming-consistency cleanup.
package/README.md CHANGED
@@ -40,221 +40,123 @@ All components can be explored in the [live demo](https://avanelsas.github.io/ba
40
40
 
41
41
  ## Why BareDOM?
42
42
 
43
- Like most Clojure/ClojureScript developers starting out with UIs, I went through the common phases of using Reagent and Re-frame—which are great utilities in their own right. However, as my UIs became larger and more complex, bundle sizes increased, and I found myself spending too much time rebuilding generic, reusable components from scratch.
44
-
45
- I started looking for a different approach and discovered Web Components. I built a few, but didn't have the spare time to develop a comprehensive set that could be used in any project. Then AI arrived. While experimenting with Claude Code, I realised that 1 + 1 could be 3. That is how BareDOM, my first open-source project, was born.
46
-
47
- I first built the usual suspects for web components, a basis to create a UI. I then thought about trying something more exciting, with animations, shapes, colours, and a whole range of web components that deal with morphing, kinetics and organic styles were born. I hope it brings you joy when using them in your web application!
48
-
49
- # Why web components?
50
-
51
- **Works in any stack.** Because components are native HTML elements, they work wherever HTML works — vanilla JavaScript, React, Vue, Svelte, Angular, server-rendered HTML, or a static page. No adapter layer, no wrapper library.
52
-
53
- **No framework lock-in.** Your components are not tied to the framework you are building with today. Migrate your app, keep your components.
54
-
55
- **Tree-shakeable by design.** Each component is a separate ES module. Import only what you use; bundle tools eliminate the rest automatically.
43
+ **Works in any stack.** Components are native HTML elements — they work wherever HTML works (vanilla JS, React, Vue, Svelte, Angular, server-rendered HTML, static pages). Your components are not tied to the framework you build with today; migrate your app, keep your components.
56
44
 
57
- **Full theming with CSS custom properties.** Every visual detail — colours, spacing, radius, shadows, typography — is exposed as a `--x-<component>-<property>` CSS custom property. Override at any scope: globally, per-page, per-instance. Use [`<x-theme>`](./docs/x-theme.md) for centralised theming with built-in presets.
45
+ **Stateless.** Every render is a pure function of attributes and properties — no hidden state, no signals, no virtual DOM. Inspect attributes in DevTools and you see the truth. (And when you need deeper traces, BareDOM ships a time-travel debugger — see below.)
58
46
 
59
- **Light and dark mode included.** All components adapt automatically to `prefers-color-scheme`. No JavaScript required, no class toggling.
47
+ **Zero runtime, tree-shakeable.** Each component is a self-contained ES module compiled with Google Closure Advanced. The only JavaScript in your bundle is the components you import — no framework, no utility belt, no runtime library.
60
48
 
61
- **Accessibility built in.** ARIA roles, live regions, keyboard navigation, focus management, and `prefers-reduced-motion` support are part of the component, not an afterthought. You do not need to layer accessibility on top.
49
+ **Predictable theming.** Every visual detail is exposed as a `--x-<component>-<property>` CSS custom property — override at any scope, or wrap in [`<x-theme>`](./docs/x-theme.md) for coordinated palettes with built-in presets. Light/dark mode adapts automatically via `prefers-color-scheme`.
62
50
 
63
- **Mobile-ready.** All components are tested on viewports from 320px up. Overlay panels cap their width to avoid overflow. Touch targets meet the 44px minimum on coarse-pointer devices. Pointer events are used throughout for unified mouse and touch input.
51
+ **Accessible & mobile-first.** ARIA roles, keyboard navigation, focus management, and `prefers-reduced-motion` support are part of every component. All components are tested on viewports from 320px up; touch targets meet the 44px minimum on coarse-pointer devices, and pointer events handle mouse + touch uniformly.
64
52
 
65
53
  **Open Shadow DOM.** Shadow roots are `mode: "open"` — inspectable in DevTools, styleable via `::part()`, and testable with standard DOM APIs.
66
54
 
67
- **First-class TypeScript support.** Every component ships with auto-generated `.d.ts` type declarations and a [Custom Elements Manifest](https://github.com/webcomponents/custom-elements-manifest). TypeScript consumers get typed element interfaces, typed custom events with detail payloads, and `HTMLElementTagNameMap` augmentation for `querySelector` type narrowing — all without installing a separate `@types` package.
55
+ **TypeScript + Custom Elements Manifest.** Auto-generated `.d.ts` declarations ship with every component: typed element interfaces, typed custom events with detail payloads, and `HTMLElementTagNameMap` augmentation for `querySelector` narrowing. A standards-based [Custom Elements Manifest](https://github.com/webcomponents/custom-elements-manifest) drives Storybook, VS Code Custom Data, and the BareDOM framework adapters themselves — if you build tooling on top of BareDOM, the manifest is the source of truth.
68
56
 
69
57
  ---
70
58
 
71
- ## BareForge — Visual Page Builder
72
-
73
- [![GitHub](https://img.shields.io/github/stars/avanelsas/bareforge?style=social)](https://github.com/avanelsas/bareforge)
74
-
75
- [BareForge](https://github.com/avanelsas/bareforge) is a companion visual landing-page builder for BareDOM. Drag-and-drop BareDOM components onto a canvas, configure them in the inspector, and export a complete project.
76
-
77
- - **Drag-and-drop canvas** with snap-aware placement
78
- - **Inspector** with type-aware editors for every BareDOM component
79
- - **Theme editor** with all 8 BareDOM presets and per-token overrides
80
- - **Four export modes** — CDN, bundle, ClojureScript, and JavaScript
59
+ ## Installation
81
60
 
82
- Try the [live editor](https://avanelsas.github.io/bareforge/) or see the [repository](https://github.com/avanelsas/bareforge) for details.
61
+ ```bash
62
+ npm install @vanelsas/baredom
63
+ ```
83
64
 
84
- ---
65
+ Also available via [Clojars](./docs/installation.md#clojurescript-via-clojars) and [standalone ES modules](./docs/installation.md#vanilla-htmljs-via-es-modules). See the [full installation guide](./docs/installation.md).
85
66
 
86
- ## Theming
67
+ ### Quick start
87
68
 
88
- Wrap any subtree in `<x-theme>` to apply a consistent palette across all components:
69
+ A minimal page that renders a themed button and alert — no build step required:
89
70
 
90
71
  ```html
91
72
  <x-theme preset="ocean">
92
- <x-button>Themed button</x-button>
93
- <x-alert type="info" text="Themed alert"></x-alert>
73
+ <x-button>Click me</x-button>
74
+ <x-alert type="info" text="It works!"></x-alert>
94
75
  </x-theme>
76
+ <script type="module">
77
+ import { init as initTheme } from '@vanelsas/baredom/x-theme';
78
+ import { init as initButton } from '@vanelsas/baredom/x-button';
79
+ import { init as initAlert } from '@vanelsas/baredom/x-alert';
80
+ initTheme(); initButton(); initAlert();
81
+ </script>
95
82
  ```
96
83
 
97
- Ships with **8 built-in presets**: `default`, `ocean`, `forest`, `sunset`, `neo-brutalist`, `aurora`, `mono-ai`, `warm-mineral`. All presets include both light and dark mode values that work with `prefers-color-scheme`.
98
-
99
- For custom themes, register your own preset via JavaScript:
84
+ For deeper usage by stack, see the [JavaScript Developer Guide](./docs/javascript-guide.md), [TypeScript Guide](./docs/typescript.md), or [ClojureScript Guide](./docs/clojurescript-guide.md).
100
85
 
101
- ```js
102
- import { registerPreset } from '@vanelsas/baredom/x-theme';
103
-
104
- registerPreset('acme', {
105
- light: { '--x-color-primary': '#e11d48', '--x-color-surface': '#fff' },
106
- dark: { '--x-color-primary': '#fb7185', '--x-color-surface': '#1a1a2e' }
107
- });
108
- ```
86
+ ---
109
87
 
110
- ```html
111
- <x-theme preset="acme">...</x-theme>
112
- ```
88
+ ## Framework adapters
113
89
 
114
- Or override individual tokens via CSS:
90
+ BareDOM components are native HTML elements — they work natively in any framework, with no adapter required. The published adapters below add typed props, typed custom events, and framework-idiomatic ergonomics on top of the same underlying components.
115
91
 
116
- ```html
117
- <x-theme preset="default" style="--x-color-primary: #e11d48;">
118
- ...
119
- </x-theme>
120
- ```
92
+ | Framework | Package | Minimum version | Docs |
93
+ |-----------|---------|-----------------|------|
94
+ | React 19+ | `@vanelsas/baredom-react` | 2.6.0 | [README](./adapters/react/README.md) · [npm](https://www.npmjs.com/package/@vanelsas/baredom-react) |
95
+ | Vue 3.4+ | `@vanelsas/baredom-vue` | 2.6.0 | [README](./adapters/vue/README.md) · [npm](https://www.npmjs.com/package/@vanelsas/baredom-vue) |
96
+ | Angular 17+ | `@vanelsas/baredom-angular` | 2.6.0 | [README](./adapters/angular/README.md) · [npm](https://www.npmjs.com/package/@vanelsas/baredom-angular) |
97
+ | Svelte 5+ | `@vanelsas/baredom-svelte` | 2.6.0 | [README](./adapters/svelte/README.md) · [npm](https://www.npmjs.com/package/@vanelsas/baredom-svelte) |
98
+ | Solid 1.9+ | `@vanelsas/baredom-solid` | 2.6.0 | [README](./adapters/solid/README.md) · [npm](https://www.npmjs.com/package/@vanelsas/baredom-solid) |
121
99
 
122
- See [docs/x-theme.md](./docs/x-theme.md) for the full token list, preset details, and API reference.
100
+ All adapters are auto-generated from the same Custom Elements Manifest, so adding a new BareDOM component updates every adapter in lockstep.
123
101
 
124
102
  ---
125
103
 
126
- ## Installation
127
-
128
- ```bash
129
- npm install @vanelsas/baredom
130
- ```
131
-
132
- ```js
133
- import { init } from '@vanelsas/baredom/x-button';
134
- init();
135
- ```
104
+ ## Components
136
105
 
137
- Also available via [Clojars](./docs/installation.md#clojurescript-via-clojars) and [standalone ES modules](./docs/installation.md#vanilla-htmljs-via-es-modules). See the [full installation guide](./docs/installation.md).
106
+ **103 UI web components across 11 categories** — from foundational UI controls to morphing animations, organic effects, and scroll-driven storytelling — plus **5 [BareBuild](./barebuild/docs/read-side.md) orchestration elements** (read-side: router / route / data; write-side alpha: action / invalidate-on).
107
+
108
+ | Category | Count | Examples |
109
+ |----------|------:|----------|
110
+ | **Form** | 23 | Button · Checkbox · Slider · Combobox · OTP Input · Color Picker |
111
+ | **Feedback** | 11 | Alert · Toast · Spinner · Progress · Skeleton · Notification Center |
112
+ | **Navigation** | 8 | Navbar · Sidebar · Breadcrumbs · Tabs · Pagination · Menu |
113
+ | **Layout** | 10 | Card · Grid · Bento Grid · Split Pane · Container · Collapse |
114
+ | **Data** | 11 | Avatar · Table · Chart · Timeline · Calendar · Stat |
115
+ | **Overlay** | 9 | Modal · Drawer · Popover · Tooltip · Welcome Tour · Command Palette |
116
+ | **Display** | 6 | Icon · Image · Typography · Code · Kbd · Spotlight Card |
117
+ | **Animation** | 6 | Kinetic Canvas · Kinetic Typography · Morph Stack · Soft Body · Splash |
118
+ | **Effects** | 12 | Liquid Glass · Confetti · Neural Glow · Metaball Cursor · Organic Shape |
119
+ | **Scroll** | 5 | Scroll · Scroll Parallax · Scroll Stack · Scroll Story · Scroll Timeline |
120
+ | **Utility** | 2 | i18n · i18n Provider |
121
+ | **Orchestration** | 5 | BareBuild Router · Route · Data — read-side; Action · Invalidate-On — write-side (alpha); not adapter-wrapped |
122
+
123
+ See [**docs/components.md**](./docs/components.md) for the full per-component catalogue with one-line descriptions and links to each component's API documentation.
138
124
 
139
125
  ---
140
126
 
141
- ## Usage
127
+ ## Time-Travel Debugger
142
128
 
143
- BareDOM components are native HTML elements. Import, register, and use them in any framework or vanilla HTML.
129
+ [`x-trace-history`](./docs/x-trace-history.md) is BareDOM's dev-only debugger. It records every CustomEvent dispatch, observed attribute change, instance-field write, and lifecycle callback as a navigable timeline with cause→effect navigation — so when a bug appears, you can step back to the exact event that caused it.
144
130
 
145
- - **JavaScript / TypeScript** — see the [JavaScript Developer Guide](./docs/javascript-guide.md)
146
- - **TypeScript types** — see the [TypeScript Guide](./docs/typescript.md)
147
- - **ClojureScript** — see the [ClojureScript Guide](./docs/clojurescript-guide.md)
148
- - **React** — see [`@vanelsas/baredom-react`](https://www.npmjs.com/package/@vanelsas/baredom-react)
149
- - **Angular** — see [`@vanelsas/baredom-angular`](https://www.npmjs.com/package/@vanelsas/baredom-angular)
131
+ - **Zero production cost.** When inactive, the recorder pays a single nil-check per hook site and no per-event overhead.
132
+ - **One-line activation.** `import "@vanelsas/baredom/x-trace-history"` and append `?baredom-trace-history` to the URL — a floating dock attaches to the viewport.
133
+ - **Bug-share via URL.** Record a session, copy the URL, and the recipient sees the same timeline.
134
+ - **Adapter-aware.** Works alongside the React, Vue, Angular, Svelte, and Solid adapters.
150
135
 
151
- ---
136
+ See [`docs/x-trace-history.md`](./docs/x-trace-history.md) for the full guide — search, console API, recording sessions, import/export, and the JSON schema.
152
137
 
153
- ## Components
138
+ ---
154
139
 
155
- ### Form (17)
156
-
157
- | Tag | Description |
158
- |-----|-------------|
159
- | [`<x-button>`](./docs/x-button.md) | Action control. Variants: `primary`, `secondary`, `tertiary`, `ghost`, `danger`. Sizes: `sm`, `md`, `lg`. States: `disabled`, `loading`, `pressed`. Icon slots. |
160
- | [`<x-checkbox>`](./docs/x-checkbox.md) | Boolean input. Reflects `checked` and `indeterminate` states to attributes. |
161
- | [`<x-color-picker>`](./docs/x-color-picker.md) | Colour picker with 2D saturation/brightness area, hue strip, optional alpha, preset swatches, eyedropper, and clipboard copy. Inline or popover mode. |
162
- | [`<x-copy>`](./docs/x-copy.md) | Copy-to-clipboard utility button with success feedback. |
163
- | [`<x-currency-field>`](./docs/x-currency-field.md) | Formatted currency input with locale-aware masking. |
164
- | [`<x-date-picker>`](./docs/x-date-picker.md) | Calendar-based date selection with keyboard navigation. |
165
- | [`<x-fieldset>`](./docs/x-fieldset.md) | Groups related form controls with a styled legend. |
166
- | [`<x-file-download>`](./docs/x-file-download.md) | Download trigger that initiates a file transfer. |
167
- | [`<x-form>`](./docs/x-form.md) | Form wrapper with coordinated validation state. |
168
- | [`<x-form-field>`](./docs/x-form-field.md) | Label + input wrapper with error and hint text slots. |
169
- | [`<x-radio>`](./docs/x-radio.md) | Single-choice input within a radio group. |
170
- | [`<x-search-field>`](./docs/x-search-field.md) | Search input with integrated clear button and search icon. |
171
- | [`<x-select>`](./docs/x-select.md) | Dropdown select control with custom styling. |
172
- | [`<x-slider>`](./docs/x-slider.md) | Range slider with step, min/max, and value display. |
173
- | [`<x-stepper>`](./docs/x-stepper.md) | Multi-step form progress indicator with navigation. |
174
- | [`<x-switch>`](./docs/x-switch.md) | Toggle switch for boolean settings. |
175
- | [`<x-text-area>`](./docs/x-text-area.md) | Multi-line text input with auto-resize option. |
176
-
177
- ### Feedback (10)
178
-
179
- | Tag | Description |
180
- |-----|-------------|
181
- | [`<x-alert>`](./docs/x-alert.md) | Semantic alert banner. Types: `info`, `success`, `warning`, `error`. Auto-dismiss with `timeout-ms`. Fires `x-alert-dismiss`. |
182
- | [`<x-badge>`](./docs/x-badge.md) | Small inline label for counts, states, and categories. |
183
- | [`<x-chip>`](./docs/x-chip.md) | Compact tag component, optionally removable. |
184
- | [`<x-notification-center>`](./docs/x-notification-center.md) | Notification hub for aggregating and managing in-app notifications. |
185
- | [`<x-progress>`](./docs/x-progress.md) | Linear progress bar with determinate and indeterminate modes. |
186
- | [`<x-progress-circle>`](./docs/x-progress-circle.md) | Circular progress indicator for compact spaces. |
187
- | [`<x-skeleton>`](./docs/x-skeleton.md) | Animated loading placeholder that mirrors content shape. |
188
- | [`<x-spinner>`](./docs/x-spinner.md) | Inline loading spinner with size and colour variants. |
189
- | [`<x-toast>`](./docs/x-toast.md) | Single transient notification with enter/exit animations and auto-dismiss. |
190
- | [`<x-toaster>`](./docs/x-toaster.md) | Toast manager. Positions a queue of `<x-toast>` elements, enforces `max-toasts`, and fires `x-toaster-dismiss`. |
191
-
192
- ### Navigation (8)
193
-
194
- | Tag | Description |
195
- |-----|-------------|
196
- | [`<x-breadcrumbs>`](./docs/x-breadcrumbs.md) | Hierarchical path trail with separator customisation. |
197
- | [`<x-menu>`](./docs/x-menu.md) | Vertical menu container coordinating `<x-menu-item>` children. |
198
- | [`<x-menu-item>`](./docs/x-menu-item.md) | Individual menu entry with icon, label, description, and keyboard support. |
199
- | [`<x-navbar>`](./docs/x-navbar.md) | Top navigation bar with responsive slot layout. |
200
- | [`<x-pagination>`](./docs/x-pagination.md) | Page navigation controls with first/previous/next/last and page-size selection. |
201
- | [`<x-sidebar>`](./docs/x-sidebar.md) | Collapsible side navigation panel with collapse/expand animation. |
202
- | [`<x-tab>`](./docs/x-tab.md) | Individual tab within an `<x-tabs>` container. |
203
- | [`<x-tabs>`](./docs/x-tabs.md) | Tab container that coordinates `<x-tab>` children, manages active state, and fires change events. |
204
-
205
- ### Layout (6)
206
-
207
- | Tag | Description |
208
- |-----|-------------|
209
- | [`<x-card>`](./docs/x-card.md) | Surface container. Variants: `elevated`, `outlined`, `filled`, `ghost`. Interactive mode available. |
210
- | [`<x-collapse>`](./docs/x-collapse.md) | Expandable/collapsible section with animated height transition. |
211
- | [`<x-container>`](./docs/x-container.md) | Responsive max-width container with configurable padding. |
212
- | [`<x-divider>`](./docs/x-divider.md) | Horizontal or vertical visual separator. |
213
- | [`<x-grid>`](./docs/x-grid.md) | CSS Grid layout component with responsive column configuration. |
214
- | [`<x-spacer>`](./docs/x-spacer.md) | Flexible spacing element for flexbox and grid layouts. |
215
-
216
- ### Data (10)
217
-
218
- | Tag | Description |
219
- |-----|-------------|
220
- | [`<x-avatar>`](./docs/x-avatar.md) | User photo or initials display. Shape, size, and status dot variants. |
221
- | [`<x-avatar-group>`](./docs/x-avatar-group.md) | Overlapping avatar stack for representing multiple users. |
222
- | [`<x-carousel>`](./docs/x-carousel.md) | Accessible carousel with swipe/drag, arrows, dot indicators, autoplay, slide/fade transitions, and horizontal/vertical orientation. |
223
- | [`<x-chart>`](./docs/x-chart.md) | Data visualisation component for common chart types. |
224
- | [`<x-stat>`](./docs/x-stat.md) | KPI / metric card with value, label, trend, and icon slots. |
225
- | [`<x-table>`](./docs/x-table.md) | Data grid using CSS subgrid. Supports sorting, single/multi-select, striping, and accessible captions. |
226
- | [`<x-table-cell>`](./docs/x-table-cell.md) | Table cell for header and data modes, with sort indicator and alignment control. |
227
- | [`<x-table-row>`](./docs/x-table-row.md) | Table row with interactive selection and `x-table-row-select` event. |
228
- | [`<x-timeline>`](./docs/x-timeline.md) | Vertical timeline container that coordinates `<x-timeline-item>` children. |
229
- | [`<x-timeline-item>`](./docs/x-timeline-item.md) | Individual timeline event with time, icon, heading, and body slots. |
230
-
231
- ### Overlay (7)
232
-
233
- | Tag | Description |
234
- |-----|-------------|
235
- | [`<x-cancel-dialogue>`](./docs/x-cancel-dialogue.md) | Confirmation modal for destructive cancel actions. |
236
- | [`<x-command-palette>`](./docs/x-command-palette.md) | Keyboard-accessible global search and command interface. |
237
- | [`<x-context-menu>`](./docs/x-context-menu.md) | Right-click / long-press contextual action menu. |
238
- | [`<x-drawer>`](./docs/x-drawer.md) | Off-canvas sliding panel, configurable from any edge. |
239
- | [`<x-dropdown>`](./docs/x-dropdown.md) | Positioned dropdown container for menus and selection. |
240
- | [`<x-modal>`](./docs/x-modal.md) | Centred dialog with backdrop, focus trap, and `Escape` to close. |
241
- | [`<x-popover>`](./docs/x-popover.md) | Anchored popover for tooltips, help text, and contextual UI. |
140
+ ## Theming
242
141
 
243
- ---
142
+ Wrap any subtree in `<x-theme>` to apply a coordinated palette across every BareDOM component inside it. Eight presets ship in the box — `default`, `ocean`, `forest`, `sunset`, `neo-brutalist`, `aurora`, `mono-ai`, `warm-mineral` — each with light and dark variants that follow `prefers-color-scheme`.
244
143
 
245
- ## Design Principles
144
+ Register your own preset, override individual tokens via CSS, or nest themes for per-section palettes. See [`docs/x-theme.md`](./docs/x-theme.md) for the full API (presets, `registerPreset`, CSS overrides) and [`docs/THEMING.md`](./docs/THEMING.md) for the token catalogue.
246
145
 
247
- **Stateless.** No `atom`, no signal, no reactive state container lives inside a component. Every render is a pure function of the current attributes and properties. Debugging a component means inspecting attributes in DevTools — no hidden state to hunt for. For deeper investigations, the optional [`x-trace-history`](./docs/x-trace-history.md) dev tool ships as a separate ESM module and records every dispatch, attribute change, and lifecycle callback as a navigable timeline with cause→effect chains. Load it with `<script type="module" src="…/x-trace-history.js">` and activate via `?baredom-trace-history`; zero cost when the flag is absent.
146
+ ---
248
147
 
249
- **Standards-only.** BareDOM relies on Custom Elements v1, Shadow DOM v1, and ES modules — all natively supported in modern browsers. There are no polyfills required and no proprietary APIs to learn.
148
+ ## BareForge — Visual Page Builder
250
149
 
251
- **Zero runtime dependency.** Components are compiled to self-contained ES modules. The only JavaScript in your bundle is the component itself. No framework, no runtime library, no utility belt.
150
+ [![GitHub](https://img.shields.io/github/stars/avanelsas/bareforge?style=social)](https://github.com/avanelsas/bareforge)
252
151
 
253
- **Accessible by default.** ARIA roles, live regions, keyboard interaction patterns, focus indicators, and `prefers-reduced-motion` support are written into every component that needs them — not optional add-ons.
152
+ [BareForge](https://github.com/avanelsas/bareforge) is a companion visual landing-page builder for BareDOM. Drag-and-drop BareDOM components onto a canvas, configure them in the inspector, and export a complete project.
254
153
 
255
- **Predictable theming.** CSS custom properties follow a single naming convention: `--x-<component>-<property>`. Tokens are set on `:host` and cascade normally. You override them the same way you override any CSS property.
154
+ - **Drag-and-drop canvas** with snap-aware placement
155
+ - **Inspector** with type-aware editors for every BareDOM component
156
+ - **Theme editor** with all 8 BareDOM presets and per-token overrides
157
+ - **Four export modes** — CDN, bundle, ClojureScript, and JavaScript
256
158
 
257
- **Mobile-first.** Components use `dvh` viewport units, `calc(100vw - ...)` width caps, and `@media (pointer:coarse)` rules for touch-friendly sizing. No component overflows on a 320px screen.
159
+ Try the [live editor](https://avanelsas.github.io/bareforge/) or see the [repository](https://github.com/avanelsas/bareforge) for details.
258
160
 
259
161
  ---
260
162
 
@@ -295,6 +197,16 @@ See the [development guide](./docs/development.md) for setting up the dev server
295
197
 
296
198
  ---
297
199
 
200
+ ## About
201
+
202
+ Like most Clojure/ClojureScript developers starting out with UIs, I went through the common phases of using Reagent and Re-frame—which are great utilities in their own right. However, as my UIs became larger and more complex, bundle sizes increased, and I found myself spending too much time rebuilding generic, reusable components from scratch.
203
+
204
+ I started looking for a different approach and discovered Web Components. I built a few, but didn't have the spare time to develop a comprehensive set that could be used in any project. Then AI arrived. While experimenting with Claude Code, I realised that 1 + 1 could be 3. That is how BareDOM, my first open-source project, was born.
205
+
206
+ I first built the usual suspects for web components, a basis to create a UI. I then thought about trying something more exciting, with animations, shapes, colours, and a whole range of web components that deal with morphing, kinetics and organic styles were born. I hope it brings you joy when using them in your web application!
207
+
208
+ ---
209
+
298
210
  ## License
299
211
 
300
212
  MIT