@thebase/ui 1.2.1 → 1.3.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 (119) hide show
  1. package/CHANGELOG.md +32 -269
  2. package/LICENSE +1 -1
  3. package/README.md +96 -105
  4. package/bin/{create-baseui-app.mjs → create-nodexui-app.mjs} +65 -65
  5. package/dist/{baseui.apidoc.esm.js → nodexui.apidoc.esm.js} +136 -136
  6. package/dist/{baseui.apidoc.min.js → nodexui.apidoc.min.js} +137 -137
  7. package/dist/nodexui.esm.js +58 -0
  8. package/dist/nodexui.icons.esm.js +1 -0
  9. package/dist/{baseui.min.css → nodexui.min.css} +1 -1
  10. package/dist/nodexui.min.js +77 -0
  11. package/dist/{baseui.pwa.esm.js → nodexui.pwa.esm.js} +5 -5
  12. package/dist/{baseui.registry.json → nodexui.registry.json} +162 -162
  13. package/dist/{baseui.templates.xml → nodexui.templates.xml} +573 -573
  14. package/dist/{baseui.vite.esm.js → nodexui.vite.esm.js} +6 -6
  15. package/dist/runtime/mermaid/mermaid.esm.min.mjs +2 -2
  16. package/dist/runtime/milkdown/milkdown-editor.js +1 -1
  17. package/dist/runtime/milkdown/milkdown-text-editor.js +1 -1
  18. package/dist/themes/{baseui-dark.css → nodexui-dark.css} +2 -2
  19. package/dist/themes/{baseui-light.css → nodexui-light.css} +2 -2
  20. package/dist/types/analytics.d.ts +12 -12
  21. package/dist/types/apidoc.d.ts +1 -1
  22. package/dist/types/i18n.d.ts +7 -7
  23. package/dist/types/index.d.ts +15 -15
  24. package/dist/types/vite.d.ts +2 -2
  25. package/docs/analytics.md +12 -12
  26. package/docs/base-ui-skill.md +4 -4
  27. package/docs/blocks.md +6 -6
  28. package/docs/components/accordion.md +4 -4
  29. package/docs/components/alert-dialog.md +2 -2
  30. package/docs/components/alert.md +5 -5
  31. package/docs/components/apidoc.md +14 -14
  32. package/docs/components/aspect-ratio.md +2 -2
  33. package/docs/components/attachment.md +5 -5
  34. package/docs/components/avatar.md +7 -7
  35. package/docs/components/badge.md +2 -2
  36. package/docs/components/block-viewer.md +8 -8
  37. package/docs/components/breadcrumb.md +3 -3
  38. package/docs/components/bubble.md +2 -2
  39. package/docs/components/button-group.md +2 -2
  40. package/docs/components/button.md +2 -2
  41. package/docs/components/calendar.md +7 -7
  42. package/docs/components/card.md +2 -2
  43. package/docs/components/carousel.md +9 -9
  44. package/docs/components/chart.md +7 -7
  45. package/docs/components/checkbox.md +2 -2
  46. package/docs/components/clipboard-button.md +7 -7
  47. package/docs/components/code-editor.md +1 -1
  48. package/docs/components/collapsible.md +4 -4
  49. package/docs/components/combobox.md +7 -7
  50. package/docs/components/command.md +7 -7
  51. package/docs/components/context-menu.md +7 -7
  52. package/docs/components/data-table.md +9 -9
  53. package/docs/components/date-picker.md +7 -7
  54. package/docs/components/dialog.md +5 -5
  55. package/docs/components/direction.md +2 -2
  56. package/docs/components/drawer.md +4 -4
  57. package/docs/components/dropdown-menu.md +3 -3
  58. package/docs/components/empty.md +3 -3
  59. package/docs/components/field.md +1 -1
  60. package/docs/components/form.md +3 -3
  61. package/docs/components/hover-card.md +2 -2
  62. package/docs/components/icon.md +3 -3
  63. package/docs/components/input-otp.md +7 -7
  64. package/docs/components/input.md +6 -6
  65. package/docs/components/item.md +3 -3
  66. package/docs/components/kbd.md +2 -2
  67. package/docs/components/label.md +2 -2
  68. package/docs/components/markdown.md +13 -13
  69. package/docs/components/marker.md +2 -2
  70. package/docs/components/menubar.md +2 -2
  71. package/docs/components/message-scroller.md +7 -7
  72. package/docs/components/message.md +7 -7
  73. package/docs/components/native-select.md +3 -3
  74. package/docs/components/navigation-menu.md +3 -3
  75. package/docs/components/pagination.md +3 -3
  76. package/docs/components/popover.md +10 -10
  77. package/docs/components/progress.md +2 -2
  78. package/docs/components/pwa.md +4 -4
  79. package/docs/components/questionnaire.md +7 -7
  80. package/docs/components/radio-group.md +2 -2
  81. package/docs/components/resizable.md +7 -7
  82. package/docs/components/scroll-area.md +7 -7
  83. package/docs/components/select.md +2 -2
  84. package/docs/components/separator.md +2 -2
  85. package/docs/components/sheet.md +3 -3
  86. package/docs/components/shell.md +7 -7
  87. package/docs/components/sidebar.md +3 -3
  88. package/docs/components/skeleton.md +2 -2
  89. package/docs/components/slider.md +2 -2
  90. package/docs/components/spinner.md +4 -4
  91. package/docs/components/switch.md +2 -2
  92. package/docs/components/table.md +2 -2
  93. package/docs/components/tabs.md +6 -6
  94. package/docs/components/text-editor.md +6 -6
  95. package/docs/components/textarea.md +3 -3
  96. package/docs/components/theme-button.md +6 -6
  97. package/docs/components/toast.md +6 -6
  98. package/docs/components/toggle-group.md +7 -7
  99. package/docs/components/toggle.md +7 -7
  100. package/docs/components/tooltip.md +9 -9
  101. package/docs/components/typography.md +9 -9
  102. package/docs/i18n.md +10 -10
  103. package/docs/icons.md +9 -9
  104. package/docs/installation.md +31 -33
  105. package/docs/owl-components.md +36 -38
  106. package/docs/registry.md +14 -14
  107. package/docs/runtime-api.md +12 -12
  108. package/docs/theming.md +15 -15
  109. package/docs/usage-guide.md +54 -56
  110. package/package.json +48 -39
  111. package/dist/baseui.esm.js +0 -58
  112. package/dist/baseui.icons.esm.js +0 -1
  113. package/dist/baseui.min.js +0 -77
  114. /package/dist/{baseui.analytics.esm.js → nodexui.analytics.esm.js} +0 -0
  115. /package/dist/{baseui.analytics.min.js → nodexui.analytics.min.js} +0 -0
  116. /package/dist/{baseui.i18n.esm.js → nodexui.i18n.esm.js} +0 -0
  117. /package/dist/{baseui.i18n.min.js → nodexui.i18n.min.js} +0 -0
  118. /package/dist/themes/{baseui-dark.min.css → nodexui-dark.min.css} +0 -0
  119. /package/dist/themes/{baseui-light.min.css → nodexui-light.min.css} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,271 +1,34 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to this project are documented in this file.
4
-
5
- ## [v1.2.1] - 2026-10-30
6
-
7
- ### Added
8
- - Optional standalone i18n service (`@thebase/ui/i18n`, `dist/baseui.i18n.esm.js` / `.min.js`, `window.thebase.i18n`), extracted from `emvhub/i18n.js` and configurable through `init({ languages, defaultLanguage, storageKey, queryParam, catalogDir })`. See `docs/i18n.md`. `emvhub/i18n.js` is now a thin adapter that calls `init()` and re-exports it.
9
- - `docs/i18n.md` (install, quick start, `.po` catalogs, language detection order, API) and the runnable example in `examples/i18n/`; `test/i18n.test.js` covers the service. The `./i18n` export and `dist/baseui.i18n.*` files are listed in `package.json` `files`/`exports`.
10
-
11
- ### Changed
12
- - Version pins in README, docs, emvhub, qr-page, momo_demo and the skill references moved to `@1.2.1`. No breaking changes; existing `emvhub/i18n.js` imports keep working.
13
-
14
- ## [v1.2.0] - 2026-10-29
15
-
16
- ### Breaking
17
- - Component CSS classes renamed from the `bu-` prefix to `b-` (e.g. `bu-button` -> `b-button`, `bu-dialog-title` -> `b-dialog-title`), and the matching custom properties from `--bu-*` to `--b-*` (e.g. `--bu-badge-bg` -> `--b-badge-bg`, `--bu-code-*` -> `--b-code-*`). Update any app CSS, markup (`class="bu-..."`) or selectors that target the old names. Helper attributes (`b-ui`, `b-att-*`, `b-tab`, ...) are unchanged; `.b-x` class selectors never match `[b-x]` attributes. Applied with `scripts/rename-bu-prefix.mjs`.
18
-
19
- ### Changed (themes)
20
- - New status colour tokens `--b-success`, `--b-warning`, `--b-info` (each with `-rgb` and `-foreground`) in both theme files, alongside the existing `--b-danger`; bridged to Bootstrap's `--bs-success|warning|info` (+ `-bg-subtle`, `-border-subtle`, `-text-emphasis`) so badges, alerts and Bootstrap helpers follow them, with `.btn-success|warning|info` restyled to match. The Theme tab can customise all four status colours.
21
- - `src/styles/baseui.css` is removed. All Base UI styles and shared tokens (spacing/type/radius scales, shadows, `--bs-*` bridge, button variants, font) now live in `src/styles/base-extensions.css`; `base.min.css` stays stock Bootstrap 5. Colour tokens, `--base-radius` and `--b-overlay` are defined only in `src/themes/baseui-light.css` and `baseui-dark.css`, which users can download and edit. `dist/themes/baseui-*.css` are now readable copies; minified versions are `baseui-*.min.css` (also listed in the registry).
22
- - `docs/theming.md` documents the new layout and how to build a custom theme.
23
-
24
- ### Fixed (contrast)
25
- - `Switch`: the thumb was Bootstrap's fixed-colour SVG (25% black unchecked, white checked), nearly invisible in dark mode, and the pure Base `<Switch>` (no `b-ui` attribute) was not reached by any of the component's CSS. Styles now target `.b-switch`, and the thumb is drawn from theme tokens (`--b-muted-foreground` unchecked, `--b-primary-foreground` checked) with a visible track edge, focus ring uses `--b-ring`.
26
- - Light `--b-muted-foreground` is `neutral-600` (was `neutral-500`, 4.35:1 on muted fills); light `--b-danger` is `red-700` (the old red was under 4.5:1 as text on its own tint). Status text (`alert-success|warning`, `badge` success/warning/info/danger, clipboard "copied") uses `-text-emphasis` tones that clear 4.5:1. Disabled pagination items (the "..." ellipsis) no longer drop to 55% opacity.
27
- - Themes now set `--bs-body-bg-rgb`, `--bs-secondary-bg-rgb`, `--bs-tertiary-bg-rgb` and `--bs-emphasis-color-rgb`, so Bootstrap's `bg-body`, `bg-body-secondary`, `bg-body-tertiary` and `text-body-emphasis` follow the Base UI theme (and custom themes from the Theme tab) in light and dark.
28
- - `Button` corner radius uses `--b-radius-md` (was a fixed 8px spacing value), so it follows `--base-radius` and the Theme tab radius setting; identical at the default radius. `Switch` is laid out as a two-column grid so the track, label and helper text align in the pure Base and static versions.
29
- - Theme tab: colour selection buttons are 1.5rem.
30
-
31
- ### Added
32
- - Theme tab in the examples app (`examples/index.html#/theme`): choose base colour, accent and radius, preview Base UI live in light/dark, then download `baseui-light.css` and `baseui-dark.css`.
33
- - `@thebase/ui/vite`: `baseuiPwa()` Vite plugin. Scaffolded projects (`create`, `init`) now build as PWAs by default: each `vite build` emits `manifest.webmanifest`, `sw.js`, `sw-register.js`, `version.json` (bundle hash) and default icons, and open pages reload when a deploy changes the code.
34
- - `@thebase/ui/pwa`: generated service workers poll `version.json` (activate, navigation, `check-version` message) and post `version-changed` after wiping caches; new `buildVersionJson` and `buildServiceWorkerRegister`; `cdnVersion` is now optional. `create-baseui-app pwa` also writes `sw-register.js` and `version.json`.
35
-
36
- ### Changed
37
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
38
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `b-*` classes, in both pure Base templates and static adapters; `b-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
39
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `b-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
40
- - `base-extensions.css`: Bootstrap's own `.accordion`, `.dropdown-menu`, `.nav`/`.nav-tabs`/`.nav-pills`, `.navbar`, `.progress`, `.list-group`, `.toast`, `.input-group-text`, `.form-label`/`.form-text`/`.form-range`/feedback, `.placeholder`, `.btn-close`, carousel and `.img-thumbnail` are now restyled to the shadcn look via their `--bs-*` variables, so plain Bootstrap markup matches Base UI.
41
- - `Badge` and `Alert` CSS now set their look through Bootstrap's own `--bs-badge-*` / `--bs-alert-*` variables (size, weight, padding, radius, colour, border) instead of redeclaring `padding`, `font-size`, `color` and `border-color` directly. Badge variants set `--bs-badge-color` plus the new `--b-badge-bg`/`--b-badge-border`. Class names, markup and rendered look are unchanged; `b-badge-*` and `b-alert-*` stay the public API.
42
-
43
- ## [v1.1.7] - 2026-10-18
44
-
45
- ### Added
46
- - `CodeEditor` (pure Base): code box with line numbers, syntax colouring, Tab/Enter indent handling and a copy button, for the language named by the `codeLang` prop (go, c, cpp, java, javascript, typescript, python, rust, sql, json, yaml, css, html, lua, and more). Code can be loaded from a URL (`src`) or a local file (`upload`), with the language picked from the file extension. An **Edit/View** button toggles reading and editing mode (`readonly` sets the starting mode, `toggle="false"` hides the button). A **Format** button (and `Shift+Alt+F`) re-indents code per language (JSON is pretty-printed; bracket languages, Lua, HTML and XML re-indented). Syntax colouring follows `codeLang` (keywords, builtins, function calls, types, strings, numbers, comments, HTML/XML tags, attributes and entities, JSON/YAML keys, CSS properties and colours, annotations, `$variables`) with themeable `--bu-code-*` colours for light and dark. Built from `Badge`, `ClipboardButton`, `Kbd`, `Button`, `Alert` and `Spinner`; docs at `docs/components/code-editor.md` and a Blocks gallery demo (`examples/blocks/code-editor-demo.html`).
47
- - `Input` accepts `start` and `end` slots, and `Textarea` accepts `start`, `end` and `footer` slots, for text, icons, `Kbd` and `Button` inside the field.
48
-
49
- ### Changed
50
- - `Shell` and `Sidebar` switch to the off-canvas mobile drawer below 992px (was 768px), so tablets get the drawer.
51
- - `NavigationMenu` scrolls horizontally under 768px with an edge fade and no scrollbar.
52
- - `Markdown` gives task-list checkboxes an accessible name and larger touch targets on coarse pointers.
53
- - `useTip` tooltip icon now sits right after the label text (circle-question-mark) instead of floating at the field edge.
54
- - Docs and examples: production pin examples now use `@1.1.7`; `qr-page` service-worker cache bumped to `2qr-cache-v14`.
55
-
56
- ### Fixed
57
- - `Chart` bars no longer collapse to 2px lines: the plot has a definite height and each bar is positioned from the bottom of its column.
58
-
59
- ### Removed
60
- - **Breaking:** `InputGroup`, `InputGroupAddon`, `InputGroupButton`, `InputGroupText`, `InputGroupInput` and `InputGroupTextarea`, the static `b-ui="input-group"` adapter, and the `input-group` docs page and demo. Migrate to `Input`/`Textarea` slots: `<Input label="'Search'"><t t-set-slot="end"><Button size="'xs'">Go</Button></t></Input>`; a textarea with a send bar becomes `<Textarea><t t-set-slot="footer">…</t></Textarea>`.
61
-
62
- ## [v1.1.6] - 2026-10-17
63
-
64
- ### Added
65
- - `useTip` prop (`Number`, default `0`) on `Input`, `Textarea`, `NativeSelect`, `Combobox`, `DatePicker`, `Select`, `InputGroup` and `Field`: set to `1` to hide the helper text under the field and show it in a tooltip on an info icon instead. Error text always stays visible. See the matching pages under `docs/components/`.
66
-
67
- ### Changed
68
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
69
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
70
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
71
- - Focus ring is unified across form controls: `Checkbox`, `Switch`, `RadioGroup`, `InputOTP`, `Select` and the outlined fields now use `--b-primary` as border plus a 1px `--b-primary` ring, matching `Input`.
72
- - `Tabs`: trigger content is packed to the start (and to the end in right-to-left text).
73
- - Docs and examples: production pin examples now use `@1.1.6`; `qr-page` service-worker cache bumped to `2qr-cache-v13`.
74
-
75
- ## [v1.1.5] - 2026-10-17
76
-
77
- ### Added
78
- - Material outlined style is now shared by every input-like control: `Input`, `Textarea`, `NativeSelect`, `Combobox`, `DatePicker`, `Select` and `InputGroup` accept `label`, `supportingText`, `errorText`, `invalid` (and `leadingIcon`/`trailingIcon`/`maxLength` where they apply). The label rests inside and floats onto the border when focused or filled. Static `b-ui` adapters are unchanged. See the matching pages under `docs/components/`.
79
- - `labelBackground` prop (any CSS colour) on every outlined control and on `Field`, to match the floating label's cut-out to the surrounding surface.
80
- - `Field` accepts `label`, `description`, `error` and `invalid` and hands them to the control inside it.
81
-
82
- ### Changed
83
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
84
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
85
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
86
- - `Field` no longer renders its own label and error text; the control inside draws them. Use `FieldLabel` / `FieldError` for checkbox-style fields.
87
- - Docs and examples: blocks (`field`, `textarea`, `date-picker`, `input-group`, `select`, `combobox`, `native-select`, `hover-card`, `login-03/04`, `signup-03/04`) use the `label` props; production pin examples now use `@1.1.5`; `qr-page` builds its VietQR/QR payload from CDN modules instead of vendored copies.
88
- - `package.json` description no longer mentions Owl.
89
-
90
- ## [v1.1.4] - 2026-10-14
91
-
92
- Backfilled entry (1.1.4 shipped without release notes).
93
-
94
- ### Changed
95
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
96
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
97
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
98
- - Tabs, Toast and style-prop rollout; internal `baseui` class prefix renamed to `bu`; docs and memory synced.
99
-
100
- ## [v1.1.3] - 2026-10-13
101
-
102
- ### Added
103
- - `ApiDoc` component (`b-ui="apidoc"` / pure Base `ApiDoc`): renders an OpenAPI 3 JSON document as browsable API documentation — grouped sidebar, per-operation parameters, request body, responses, callbacks, a Try It panel with request samples in 17 languages, and an Authorize dialog (API key, HTTP basic, bearer, OpenID Connect, OAuth2 flows). Props include `src`, `spec`, `serverUrl`, `theme`, `themeToggle`, `hash`, `operation`, `tryIt`, `authorize`, `languages`, `language`, `assetBase`, `oauthRedirectUri`, `height`; events `baseui:load`, `baseui:error`, `baseui:navigate`. Built from the Base UI's own `Button`, `Badge`, `Dialog`, `Tabs`, `Breadcrumb`, `Input`, `Textarea`, `NativeSelect` and `Checkbox`. See `docs/components/apidoc.md`.
104
- - `apidoc-01` block (full-page API reference) and the `examples/apidoc/` demo with a Petstore spec.
105
- - `Input`: Material-style outlined mode with `label`, `supportingText`, `errorText`, `leadingIcon`/`trailingIcon` and a `maxLength` counter (documented in `docs/components/input.md`).
106
- - PWA toolkit: default logo and favicon set (`dist/pwa-icons/`: `favicon.ico`, 16/32 px favicons, `apple-touch-icon.png`, `icon-192.png`, `icon-512.png`). `create-baseui-app pwa` copies it into `<path>/icons/` without overwriting existing files, and the default manifest icons and precache list point at it. New optional `iconsBase` (manifest + service worker) and `manifestUrl` (service worker) config keys.
107
- - Examples: the examples/landing site is now an installable, offline-capable PWA (`examples/pwa/`, generated from `baseui.pwa.config.js`). The service worker is served from `/examples-sw.js`; `deploy_landing.sh` stages it at the site root. New `momo_demo/` static `b-ui` business-admin demo.
108
- - Build: ApiDoc's language logos are copied to `dist/apidoc/img/` and published (`dist/apidoc` added to `package.json` `files`).
109
-
110
- ### Changed
111
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
112
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
113
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
114
- - PWA toolkit: the default precache list no longer includes `/favicon.svg`; it precaches the default icon files instead.
115
- - `npm run dev` server: serves `.ico` as `image/x-icon` and `.mjs` as JavaScript.
116
- - Docs and examples: production pin examples now use `@1.1.3`; component counts in `docs/owl-components.md` and `docs/registry.md` now say 74.
117
-
118
- ## [v1.1.2] - 2026-10-06
119
-
120
- Backfilled entry (1.1.2 shipped without release notes).
121
-
122
- ### Added
123
- - PWA toolkit: `@thebase/ui/pwa` (`dist/baseui.pwa.esm.js`, types in `dist/types/pwa.d.ts`) exports `buildManifest` and `buildServiceWorker`.
124
- - `create-baseui-app` CLI: `create`, `init`, `convert` and `pwa` commands to scaffold a Base UI project and generate `manifest.webmanifest` + `sw.js`. See `docs/usage-guide.md` §5b and `docs/components/pwa.md`.
125
- - Examples: the landing page shows PWA install and visitor tracking (`examples/tracking.js`).
126
-
127
- ## [v1.1.1] - 2026-10-04
128
-
129
- ### Added
130
- - Analytics: `visitorContext()` export from `@thebase/ui/analytics` (and `window.thebase.analytics.visitorContext`). It returns the visitor's timezone (`tz`), browser language (`lang`) and a coarse screen bucket (`screen`: Mobile/Tablet/Laptop/Desktop). Pass it as `customProperties` to attach them to every event. Types are included as `BaseUIVisitorContext`. It's an additive export released as a patch by maintainer decision; nothing existing changed.
131
- - Docs: `docs/analytics.md` covers receiving events on your own backend (payload reference, Go Fiber v3 and FastAPI receivers), a "Sample dashboard" section, and "Visitor context". README has an Analytics section.
132
- - Examples: `examples/analytics/` contains a Base UI analytics dashboard plus runnable Go Fiber and FastAPI sample backends (in-memory store, `GET /api/stats`, `DEMO_SEED=1` demo data). The landing page has an Analytics section, and the docs nav lists the Analytics guide.
133
-
134
- ### Changed
135
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
136
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
137
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
138
- - Docs and examples: production pin examples now use `@1.1.1`.
139
- - `npm run dev` server: folder URLs serve their `index.html`, and `.go`/`.py`/`.mod` sources are served as text.
140
-
141
- ## [v1.1.0] - 2026-10-04
142
-
143
- ### Added
144
- - Optional, standalone analytics service: `@thebase/ui/analytics`. Use `dist/baseui.analytics.esm.js`, or the `<script>` build `dist/baseui.analytics.min.js`, which sets `window.thebase.analytics`. It is not part of the main bundles and needs no other Base UI file. Start it with `init({ backendUrl })`: events go to `<backendUrl>/api/event` (change the path with `apiPath`), and `domain` defaults to `location.hostname`. Pass a full `endpoint` instead when routing through a proxy. A URL without a scheme throws instead of silently posting to your own site. It is a cookieless tracker ported from `@plausible-analytics/tracker` 0.4.6 and keeps that package's options and compact payload. It covers automatic and SPA pageviews, engagement (time on page and scroll depth), outbound links, file downloads, form submissions, `thebase-event-*` / `thebase-revenue-*` class tagging, the `localStorage.thebase_ignore` opt-out, `customProperties` and `transformRequest`. After `init()` the tracker is bound to `window.thebase.track`. Types are in `dist/types/analytics.d.ts`; see `docs/analytics.md`. The upstream MIT notice is in `LICENSE`.
145
- - The browser global is now `window.thebase`, holding the same object as before (`version`, `register`, `component`, `mount`, `mountAll`, `destroy`, `theme`, `icons`). If a page script creates `window.thebase` before a Base UI bundle loads, the runtime adds its methods to that object instead of replacing it.
146
-
147
- ### Changed
148
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
149
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
150
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
151
- - Docs: production pin examples now use `@1.1.0`. `docs/installation.md` and `docs/registry.md` list the analytics bundles and the `@thebase/ui/analytics` export.
152
-
153
- ### Deprecated
154
- - `window.BaseUI`: use `window.thebase` instead (e.g. `thebase.mountAll(...)`, `thebase.theme.set(...)`). It still points to the same object throughout 1.x and will be removed in 2.0.0. The ESM export `import { BaseUI } from "@thebase/ui"`, `window.BaseUITheme` and the `element.BaseUI*` handles are not affected.
155
-
156
- ## [v1.0.0] - 2026-10-03
157
-
158
- First stable release. From here on the package follows [Semantic Versioning](https://semver.org/) — see the [Versioning policy](README.md#versioning-policy) for what counts as the public API and what each version bump means. No API changes versus v0.0.12 beyond the fixes below; upgrading from 0.0.12 needs no code changes.
159
-
160
- ### Changed
161
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
162
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
163
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
164
- - Docs: production pin examples now use `@1.0.0`, or the `@1` major range to receive non-breaking updates. `docs/owl-components.md` documents the global component fallback below, and `docs/components/button.md` now lists `Button`'s `unstyled`, `attrs`, and `getRef` props.
165
- - Internal: shared prop and overlay helpers replace per-component copies (`optional()`/`slotProps` prop declarations, controlled-open and Bootstrap Collapse hooks, one binder for the static dialog/sheet/drawer overlays, one checkbox/radio enhancer). Every Base component keeps exactly the same props, and every static adapter keeps the same attributes, events, and `element.BaseUI*` handles.
166
-
167
- ### Fixed
168
- - Pure Base: nested consumer components no longer crash with `Cannot find the definition of component "Icon"` (or `Button`, etc.) when their template uses a Base UI component missing from their own `static components`. `Component` from `@base/owl` now falls back to the globally registered the Base UI components for every component, not just the root passed to `mount()`. A component's own `static components` entries still take precedence.
169
- - `Sidebar`: `SidebarMenu` now fills the remaining panel height and scrolls on its own when its items overflow, so a long nav list no longer pushes `SidebarFooter` off-screen.
170
-
171
- ## [v0.0.12] - 2026-09-13
172
-
173
- ### Changed
174
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
175
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
176
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
177
- - **Breaking**: `Tabs` restyled to match [shadcn/base's Tabs](https://ui.shadcn.com/docs/components/base/tabs) — `TabsList` is now a segmented pill control on a muted background by default (new `variant="'line'"`/`b-att-variant="line"` opts into a transparent underline list instead), and `TabContent`/`b-panel` render as bare panels with no default `Card` border/background (that chrome is now opt-in via `className` on `TabsContainer` or the consumer's own wrapper). New `orientation` prop (`"horizontal"`/`"vertical"`) on the pure Base `Tabs` puts `TabsList` beside `TabsContainer` instead of above it.
178
- - Internal: every pure Base component's raw `<button>` (dialog, sheet, pwa, attachment, carousel, collapsible, calendar, dropdown-menu, popover, data-table, accordion, tabs, alert, input-group, sidebar, clipboard-button, theme-button, shell, questionnaire, alert-dialog, drawer, select, toggle, toggle-group) now renders through the shared `Button` component instead of hand-written markup. `Button` gained `unstyled` (opt out of forced `btn`/variant classes for components with their own bespoke styling), `attrs` (pass-through object for one-off attributes with no first-class prop), and `getRef` (reports the mounted root element for callers that need direct DOM access) to support this. No public prop-level API changes for any consuming component.
179
-
180
- ### Added
181
- - `Toast`: new optional `action` slot (`<t t-set-slot="action">...</t>`, e.g. an "Undo" `<Button/>`) renders grouped tight against the close button on the trailing edge, matching the shadcn/ui toast layout. The toast root and static `[b-ui="toast"]` markup are now a flex row: wrap message content in `.bu-toast-content` (grows to fill available width) and the action/close controls in `.bu-toast-actions` (grouped on the trailing edge) — see `docs/components/toast.md` for the updated static markup. `Shell`'s `toast.actionLabel` now renders through the new `action` slot instead of inline in the default slot.
182
-
183
- ## [v0.0.11] - 2026-09-03
184
-
185
- ### Added
186
- - `Toast`/`b-ui="toast"`: new `position` option (`top-left`/`top-right`/`bottom-left`/`bottom-right`) fixes a toast to a screen corner; omit it for the previous inline-placement behavior.
187
- - Public `cn(...classNames)` and `mergeStyle(...)` helpers, exported from `@thebase/ui` (and `BaseUIBundle.cn`/`BaseUIBundle.mergeStyle`) for consumers building their own class lists or inline styles. Documented in `docs/runtime-api.md`.
188
-
189
- ### Changed
190
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
191
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
192
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
193
- - **Breaking**: every CSS custom property has been renamed from the `--baseui-*` prefix to `--b-*` (e.g. `--baseui-primary` → `--b-primary`). Aligns the token prefix with the existing `--b1`/`--b2_5` spacing scale and `[b-ui]`/`b-att-*` attribute convention. `BaseUI.theme.set()` now writes/reads `--b-*` tokens; any consumer CSS that directly referenced `--baseui-*` must update to `--b-*`.
194
- - **Breaking**: every component CSS class has been renamed from the `baseui-*` prefix to `bu-*` (e.g. `.baseui-alert` → `.bu-alert`), to shorten it and avoid colliding with third-party `b-*`-prefixed conventions (e.g. Buefy) while staying distinct from the `b-ui`/`b-att-*` attribute and `--b-*` token conventions. Any consumer markup, CSS, or pure Base `className` override referencing `.baseui-*` must update to `.bu-*`. The bare `.baseui` root/theme-scope class, file names, the `BaseUI` global, the `@thebase/ui` package name, and `storageKey="'baseui-theme'"` are untouched.
195
- - Every component's class-name string-building now goes through the shared `cn()` helper instead of ad hoc `classes.push()/join(" ")` logic; the pure Base `Toast`'s close control now composes the real `Button` component instead of a raw `<button>`.
196
-
197
- ## [v0.0.10] - 2026-09-02
198
-
199
- ### Fixed
200
- - `TextEditor`/`b-ui="text-editor"`: found the actual root cause of the `MilkdownError: Context "editorState" not found, do you forget to inject it?` crash in collaborative mode (`collaborative="true"`), which the v0.0.9 fix below reduced the odds of but did not eliminate. `@milkdown/plugin-collab`'s own teardown only removes its Milkdown ctx slice — it never calls `CollabService.disconnect()` — so the y-prosemirror sync/cursor/undo plugins `.connect()` installs into the ProseMirror view were never uninstalled when a collaborative `TextEditor` was destroyed. Left connected, they kept reacting to further Yjs doc updates (from any peer sharing the doc/room) and kept dispatching transactions into the already-destroyed view, throwing `Context "..." not found` for whichever internal ctx slice the stale plugin happened to touch (`editorState`, `placeholderConfigCtx`, etc). Fixed by capturing the bound `CollabService` and explicitly calling `.disconnect()` on it before `crepe.destroy()` runs. Added a real (unmocked) regression test — `test/milkdown-collab-teardown.test.js` — exercising the actual Milkdown/Yjs teardown sequence with two synced docs standing in for two peers; it reproduces the exact reported crash when run against the pre-fix code.
201
-
202
- ## [v0.0.9] - 2026-09-02
203
-
204
- ### Fixed
205
- - `TextEditor`/`b-ui="text-editor"`: collaborative mode (`collaborative="true"`) could crash with `MilkdownError: Context "editorState" not found, do you forget to inject it?` — the `y-webrtc`/`y-websocket` provider began syncing over the network the moment it was constructed, before the editor was created and the Yjs doc bound to Milkdown's collab plugin (`bindDoc().connect()`). A remote peer's sync update landing in that window could dispatch a ProseMirror transaction against an editor whose Milkdown context wasn't (yet, or any longer) fully wired. Both provider types are now created paused (`WebsocketProvider`'s `connect: false` option; an explicit `provider.disconnect()` right after construction for `WebrtcProvider`, which has no such option) and only resumed via `provider.connect()` after `bindDoc().setAwareness().applyTemplate().connect()` has fully wired the collab plugin against a live ctx.
206
-
207
- ## [v0.0.8] - 2026-09-02
208
-
209
- ### Fixed
210
- - `TextEditor`/`b-ui="text-editor"`: a prop-driven restart (`provider`/`room`/`url`/`password`/`signaling` change) landing while the previous editor mount was still in flight could discard the stale editor but never remount a fresh one, leaving the editor permanently unmounted with no error. Affected both collaborative and non-collaborative modes.
211
-
212
- ## [v0.0.7] - 2026-09-02
213
-
214
- ### Added
215
- - Optional Yjs collaboration on `TextEditor`/`b-ui="text-editor"` can now connect to an external `y-websocket`-compatible backend as an alternative to the existing peer-to-peer `y-webrtc` transport. New `provider`/`b-att-provider` (`"webrtc"` default or `"websocket"`) and `url`/`b-att-url` (the websocket server URL, joining `room`/`b-att-room` as the document name).
216
- - Collaboration now auto-enables when `provider` and `url` are both supplied, even without also setting `collaborative="true"` — `collaborative` explicitly `false`/unset with an incomplete provider/url pair still leaves the editor single-user.
217
-
218
- ### Changed
219
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
220
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
221
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
222
- - `y-websocket` added as a runtime dependency, lazy-loaded only when `provider="websocket"` is actually selected, so `y-webrtc`-only consumers see no bundle-size change.
223
-
224
- ## [v0.0.6] - 2026-09-02
225
-
226
- ### Fixed
227
- - Removed the unused `y-prosemirror` runtime dependency, which `scripts/check-release-guards.mjs`'s allowlist rejected and broke `npm run build`.
228
- - `TextEditor`'s shell now fills its viewport (added `width`/`max-width` alongside the existing height rules in `text-editor.css`).
229
-
230
- ## [v0.0.5] - 2026-09-02
231
-
232
- ### Fixed
233
- - `package.json` `files` was missing `dist/runtime`, so the vendored runtime chunks (marked, mermaid, milkdown-editor, prosemirror-text-editor, and their split chunk files) never shipped to npm/CDN. Dynamic imports of `dist/runtime/prosemirror-text-editor.js` (and the other lazy runtime assets) 404'd for CDN consumers. Added `dist/runtime` to `files`.
234
-
235
- ## [v0.0.4] - 2026-09-01
236
-
237
- Initial documented release. The Base UI is a self-contained component library (Owl v2 + Bootstrap 5 + GrapesJS page-builder tooling) with a shadcn-aligned component set, a live docs/examples app, and vendored runtime assets.
238
-
239
- ### Added
240
- - Full the Base UI component set aligned with shadcn/ui coverage (Accordion, Alert, AlertDialog, Avatar, Badge, Breadcrumb, Button, Calendar, Card, Carousel, Chart, Checkbox, Collapsible, Combobox, Command, ContextMenu, DataTable, DatePicker, Dialog, Drawer, DropdownMenu, Empty, Field, Form, HoverCard, Input, InputGroup, InputOTP, Item, Kbd, Label, Marker, Menubar, NativeSelect, NavigationMenu, Pagination, Popover, Progress, RadioGroup, Resizable, ScrollArea, Select, Separator, Sheet, Shell, Sidebar, Skeleton, Slider, Spinner, Switch, Tabs, and more), plus Lucide icons and `b-*` component attributes.
241
- - Markdown component with live BaseUI/Mermaid previews, a copyable code pane with copy-to-clipboard toast, and a Template/Base Component code toggle for every block demo.
242
- - Collaborative Milkdown Markdown editor and a TextEditor component.
243
- - Hash-routed examples/docs app unifying all component demos under one navigation shell, with a chart gallery and component previews embedded in docs.
244
- - Mobile support: sidecar CSS/XML for Sidebar, Shell, DataTable, and Markdown, plus per-component demo blocks.
245
- - QR page generator demo.
246
- - `style` prop support across all Base components.
247
- - PWA support and ClipboardButton component.
248
- - Published `docs/*.md` and `docs/components/` inside the npm package (`package.json` `files`), plus `CHANGELOG.md`, so integration docs and per-component reference pages are reachable straight from unpkg/jsDelivr without cloning the repo. `docs/v2/` (vendored general Owl framework reference) and `docs/component-authoring.md` stay repo-only and are excluded.
249
-
250
- ### Changed
251
- - Renamed `src/styles/bootstrap.min.css` (+ `.map`) to `base.min.css` and `bootstrap-extensions.css` to `base-extensions.css`; `scripts/build.mjs` now loads every `src/styles/base*.css` (vendored Bootstrap, extensions, then the rest alphabetically, e.g. `baseui.css`). `dist/baseui.min.css` is byte-identical.
252
- - `Accordion`, `DropdownMenu` items, `Tabs` and `NavigationMenu` now also carry Bootstrap classes (`accordion*`, `dropdown-item`/`-header`/`-divider`, `nav`/`nav-link`) alongside their `bu-*` classes, in both pure Base templates and static adapters; `bu-*` class names and selectors are unchanged. `Toast` and `Carousel` already used Bootstrap classes.
253
- - `Progress` now renders Bootstrap `.progress` / `.progress-bar` (plus `bu-progress*`); its CSS only sets the value-driven fill width and `--bs-progress-height`.
254
- - Consolidated the Base UI into a single self-contained bundle: vendored Bootstrap 5 and Owl under `src/runtime`, externalized Owl into `dist/owl.js` for lean CDN bundles, and deduped disclosure/modal logic.
255
- - Rewrote the Markdown live-preview to mount real Base components instead of static templates.
256
- - Renamed Tabs sub-components and reworked the example shell (unified sidebar/shell collapse trigger, `baseui-text-xs` utility).
257
- - Merged shell collapse trigger into the sidebar trigger.
258
- - Renamed the published npm package from `@the-base/baseui` to `@thebase/ui`.
259
- - Vendored Lucide icon sources into `src/icons/` (flat, git-tracked) instead of generating them only into the gitignored `dist/icons/lucide/` build output; the lucide loader module moved to `src/runtime/`.
260
- - `dist/` and `package-lock.json` are now gitignored, since `dist/` is purely a build artifact.
261
- - Consolidated duplicated class-name string-building logic (`DropdownMenu`, `Sidebar`, `Form`, `Field`) into a single shared `classNames()` helper in `prop-aliases.js`.
262
- - Switched the QR page consumer demo to load the Base UI directly from `/dist/` instead of a vendored copy; bumped its service worker cache to `v4`.
263
- - Rewrote `README.md`'s release notes to point at `CHANGELOG.md` instead of embedded version narrative; corrected the published component count; documented the CDN doc-access URLs and which docs are excluded from the package.
264
-
265
- ### Fixed
266
- - Block-viewer mount race across all block demos.
267
- - Dialog close-button and input auto-mount bugs.
268
- - Mobile sidebar/shell layout bugs.
269
- - Docs-preview code-fence rendering; added MarkdownTree and frontmatter support.
270
- - Tabs panel border/alignment and sidebar/toast styling.
271
- - Removed an orphaned, unused `bootstrap.bundle.min.js.map` source map and its dangling `sourceMappingURL` reference.
3
+ All notable changes to Nodex UI are documented in this file. Nodex UI follows [Semantic Versioning](https://semver.org/).
4
+
5
+ ## [v1.3.0] - 2026-10-31
6
+
7
+ First release of **Nodex UI**, published on npm as [`nodexui`](https://www.npmjs.com/package/nodexui).
8
+
9
+ ### Components and API
10
+ - 74 components, each available two ways: component classes (`import { Button } from "nodexui"`, Nodex-powered, for your own application) and static `b-ui` markup (`b-att-*` attributes, `nodexui:*` events) for plain HTML, server-rendered and CMS pages.
11
+ - Self-contained builds: `dist/nodexui.min.js` and `dist/nodexui.esm.js` embed the bundled JS, the Nodex runtime, every component class and the theme helper. No build step; load from a CDN script tag or import map, or install from npm.
12
+ - Runtime exports: `NodexUI`, `Component`, `mount`, `xml`, `cn`, `mergeStyle`, plus the theme helpers `createThemeController` and `NodexUITheme`.
13
+ - Built-in Lucide icon library (`b-icon`, `dist/icons/`), 2000+ icon components in `nodexui/icons`.
14
+ - Blocks: copyable shadcn-style page blocks with a Preview/Code/responsive viewer.
15
+
16
+ ### Theming
17
+ - Light and dark themes (`dist/themes/nodexui-light.css`, `nodexui-dark.css`) hold all colour tokens, `--base-radius` and `--b-overlay`, including the `--b-success`, `--b-warning` and `--b-info` status tokens.
18
+ - Theme tab in the examples app (`examples/index.html#/theme`) builds a custom pair and downloads the CSS.
19
+ - Component classes use the `b-` prefix and design tokens use `--b-*`.
20
+
21
+ ### Optional standalone services
22
+ - `nodexui/analytics`: cookieless web analytics (pageviews including SPA, engagement, outbound links, downloads, forms). Nothing is collected until `init()` is called.
23
+ - `nodexui/i18n`: gettext-style `.po` catalogs with language detection and a language switcher, no runtime dependencies.
24
+ - `nodexui/apidoc`: renders an OpenAPI 3 JSON file as browsable API docs with a Try It panel, code samples in 17 languages and an Authorize dialog.
25
+ - `nodexui/pwa` and `nodexui/vite`: `buildManifest`, `buildServiceWorker` and the `nodexuiPwa()` Vite plugin. Generated service workers poll `version.json` and reload when it changes.
26
+
27
+ ### Tooling
28
+ - `create-nodexui-app` CLI: `create`, `init`, `convert` and `pwa` commands for static-importmap or Vite PWA projects.
29
+ - Package exports: `nodexui`, `nodexui/nodexui.css`, `nodexui/registry`, `nodexui/icons`, `nodexui/analytics`, `nodexui/i18n`, `nodexui/apidoc`, `nodexui/pwa`, `nodexui/vite`. Docs under `docs/` ship in the package.
30
+
31
+ ### Website, SEO and analytics
32
+ - The public site <https://ui.thebase.vn> keeps its hostname and URLs under the Nodex UI brand.
33
+ - Per-route title, description, canonical and Open Graph tags (`examples/seo.js`), an updated `sitemap.xml`, and first-party event tracking (`examples/tracking.js`) with no Google Analytics, following `.agents/knowledge/base-ui-seo-analytics-ai-agent-brief.md`.
34
+ - The examples app, emvhub, qr-page and momo_demo are translated and pinned to `nodexui@1.3.0`.
package/LICENSE CHANGED
@@ -23,7 +23,7 @@ SOFTWARE.
23
23
  ---
24
24
 
25
25
  Third-party notice: src/runtime/base/analytics.js (the optional analytics service,
26
- built as dist/baseui.analytics.esm.js and dist/baseui.analytics.min.js) is a port of
26
+ built as dist/nodexui.analytics.esm.js and dist/nodexui.analytics.min.js) is a port of
27
27
  @plausible-analytics/tracker, distributed under the following license:
28
28
 
29
29
  MIT License