native-document 1.0.166 → 1.0.169

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 (139) hide show
  1. package/.vitepress/config.js +166 -0
  2. package/CHANGELOG.md +187 -0
  3. package/components.js +4 -1
  4. package/dist/native-document.components.min.js +593 -300
  5. package/dist/native-document.dev.js +99 -75
  6. package/dist/native-document.dev.js.map +1 -1
  7. package/dist/native-document.min.js +1 -1
  8. package/docs/advanced-components.md +213 -608
  9. package/docs/anchor.md +173 -312
  10. package/docs/cache.md +95 -803
  11. package/docs/cli.md +179 -0
  12. package/docs/components/accordion.md +172 -0
  13. package/docs/components/alert.md +99 -0
  14. package/docs/components/avatar.md +160 -0
  15. package/docs/components/badge.md +102 -0
  16. package/docs/components/breadcrumb.md +89 -0
  17. package/docs/components/button.md +183 -0
  18. package/docs/components/card.md +69 -0
  19. package/docs/components/context-menu.md +118 -0
  20. package/docs/components/data-table.md +345 -0
  21. package/docs/components/dropdown.md +214 -0
  22. package/docs/components/form/autocomplete-field.md +81 -0
  23. package/docs/components/form/checkbox-field.md +41 -0
  24. package/docs/components/form/checkbox-group-field.md +54 -0
  25. package/docs/components/form/color-field.md +64 -0
  26. package/docs/components/form/date-field.md +92 -0
  27. package/docs/components/form/field-collection.md +63 -0
  28. package/docs/components/form/file-field.md +203 -0
  29. package/docs/components/form/form-control.md +87 -0
  30. package/docs/components/form/image-field.md +90 -0
  31. package/docs/components/form/index.md +115 -0
  32. package/docs/components/form/number-field.md +65 -0
  33. package/docs/components/form/radio-field.md +51 -0
  34. package/docs/components/form/select-field.md +123 -0
  35. package/docs/components/form/slider.md +136 -0
  36. package/docs/components/form/string-field.md +134 -0
  37. package/docs/components/form/textarea-field.md +65 -0
  38. package/docs/components/form-fields.md +372 -0
  39. package/docs/components/getting-started.md +264 -0
  40. package/docs/components/icons.md +321 -0
  41. package/docs/components/index.md +337 -0
  42. package/docs/components/layout.md +279 -0
  43. package/docs/components/list.md +73 -0
  44. package/docs/components/menu.md +215 -0
  45. package/docs/components/modal.md +156 -0
  46. package/docs/components/pagination.md +95 -0
  47. package/docs/components/popover.md +131 -0
  48. package/docs/components/progress.md +111 -0
  49. package/docs/components/shortcut-manager.md +221 -0
  50. package/docs/components/simple-table.md +107 -0
  51. package/docs/components/skeleton.md +155 -0
  52. package/docs/components/spinner.md +100 -0
  53. package/docs/components/splitter.md +133 -0
  54. package/docs/components/stepper.md +163 -0
  55. package/docs/components/switch.md +113 -0
  56. package/docs/components/tabs.md +153 -0
  57. package/docs/components/toast.md +119 -0
  58. package/docs/components/tooltip.md +151 -0
  59. package/docs/components/traits.md +261 -0
  60. package/docs/conditional-rendering.md +170 -588
  61. package/docs/contributing.md +300 -25
  62. package/docs/core-concepts.md +205 -374
  63. package/docs/elements.md +251 -367
  64. package/docs/extending-native-document-element.md +192 -207
  65. package/docs/filters.md +153 -1122
  66. package/docs/getting-started.md +193 -267
  67. package/docs/i18n.md +241 -0
  68. package/docs/index.md +76 -0
  69. package/docs/lifecycle-events.md +143 -75
  70. package/docs/list-rendering.md +227 -852
  71. package/docs/memory-management.md +134 -47
  72. package/docs/native-document-element.md +337 -186
  73. package/docs/native-fetch.md +99 -630
  74. package/docs/observable-resource.md +364 -0
  75. package/docs/observables.md +592 -526
  76. package/docs/routing.md +244 -653
  77. package/docs/state-management.md +134 -241
  78. package/docs/svg-elements.md +231 -0
  79. package/docs/theming.md +409 -0
  80. package/docs/tutorials/.gitkeep +0 -0
  81. package/docs/validation.md +95 -97
  82. package/docs/vitepress-conventions.md +219 -0
  83. package/package.json +34 -13
  84. package/readme.md +269 -89
  85. package/src/components/card/Card.js +93 -39
  86. package/src/components/card/index.js +1 -1
  87. package/src/components/form/field/types/FileField.js +3 -3
  88. package/src/components/icon/Icon.js +107 -0
  89. package/src/components/icon/icon-getters.js +142 -0
  90. package/src/components/icon/icons.js +171 -0
  91. package/src/components/icon/index.js +17 -0
  92. package/src/components/icon/types/Icon.d.ts +191 -0
  93. package/src/components/index.d.ts +6 -1
  94. package/src/components/list/HasListItem.js +171 -0
  95. package/src/components/list/List.js +41 -107
  96. package/src/components/list/ListDivider.js +39 -0
  97. package/src/components/list/ListGroup.js +76 -59
  98. package/src/components/list/ListItem.js +117 -69
  99. package/src/components/list/index.js +3 -1
  100. package/src/components/list/types/List.d.ts +45 -32
  101. package/src/components/list/types/ListDivider.ts +16 -0
  102. package/src/components/list/types/ListGroup.d.ts +51 -29
  103. package/src/components/list/types/ListItem.d.ts +40 -30
  104. package/src/components/spacer/Spacer.js +1 -1
  105. package/src/core/data/ObservableResource.js +5 -0
  106. package/src/core/data/observable-helpers/observable.prototypes.js +2 -0
  107. package/src/core/elements/content-formatter.js +16 -2
  108. package/src/core/elements/form.js +1 -1
  109. package/src/core/elements/img.js +1 -1
  110. package/src/core/elements/medias.js +2 -2
  111. package/src/core/elements/meta-data.js +1 -1
  112. package/src/core/wrappers/AttributesWrapper.js +37 -22
  113. package/src/core/wrappers/ElementCreator.js +9 -16
  114. package/src/core/wrappers/HtmlElementWrapper.js +26 -7
  115. package/src/core/wrappers/NDElement.js +12 -1
  116. package/src/core/wrappers/prototypes/attributes-extensions.js +24 -24
  117. package/src/core/wrappers/prototypes/nd-element-extensions.js +1 -8
  118. package/src/ui/components/card/CardRender.js +133 -0
  119. package/src/ui/components/card/card.css +169 -0
  120. package/src/ui/components/contextmenu/ContextmenuRender.js +1 -1
  121. package/src/ui/components/icon/material/MaterialIconRender.js +71 -0
  122. package/src/ui/components/icon/material/material.css +15 -0
  123. package/src/ui/components/icon/material/material.map.js +170 -0
  124. package/src/ui/components/icon/phosphor/PhosphorIconRender.js +71 -0
  125. package/src/ui/components/icon/phosphor/phosphor.css +17 -0
  126. package/src/ui/components/icon/phosphor/phosphor.map.js +165 -0
  127. package/src/ui/components/icon/tabler/TablerIconRender.js +59 -0
  128. package/src/ui/components/icon/tabler/tabler.css +14 -0
  129. package/src/ui/components/icon/tabler/tabler.map.js +165 -0
  130. package/src/ui/components/list/ListRender.js +18 -0
  131. package/src/ui/components/list/divider/ListDividerRender.js +10 -0
  132. package/src/ui/components/list/divider/list-divider.css +12 -0
  133. package/src/ui/components/list/group/ListGroupRender.js +61 -0
  134. package/src/ui/components/list/group/list-group.css +62 -0
  135. package/src/ui/components/list/item/ListItemRender.js +238 -0
  136. package/src/ui/components/list/item/list-item.css +191 -0
  137. package/src/ui/components/list/list.css +24 -0
  138. package/src/ui/components/spacer/SpacerRender.js +10 -0
  139. package/src/ui/index.js +13 -0
@@ -0,0 +1,166 @@
1
+ import { defineConfig } from 'vitepress'
2
+
3
+ export default defineConfig({
4
+ title: 'NativeDocument',
5
+ description: 'A reactive JavaScript framework that preserves native DOM simplicity without sacrificing modern features',
6
+
7
+ themeConfig: {
8
+ logo: '/logo.svg',
9
+
10
+ nav: [
11
+ { text: 'Guide', link: '/getting-started' },
12
+ { text: 'Components', link: '/components/' },
13
+ { text: 'Utilities', link: '/utils/cache' },
14
+ {
15
+ text: 'v1.0.161',
16
+ items: [
17
+ { text: 'Changelog', link: 'https://github.com/afrocodeur/native-document/releases' },
18
+ { text: 'GitHub', link: 'https://github.com/afrocodeur/native-document' }
19
+ ]
20
+ }
21
+ ],
22
+
23
+ sidebar: {
24
+ '/components/': [
25
+ {
26
+ text: 'Components',
27
+ items: [
28
+ { text: 'Overview', link: '/components/' },
29
+ { text: 'Getting Started', link: '/components/getting-started' },
30
+ { text: 'Traits', link: '/components/traits' },
31
+ ]
32
+ },
33
+ {
34
+ text: 'Layout',
35
+ items: [
36
+ { text: 'Layout', link: '/components/layout' },
37
+ { text: 'Splitter', link: '/components/splitter' },
38
+ ]
39
+ },
40
+ {
41
+ text: 'Display',
42
+ items: [
43
+ { text: 'Alert & Feedback', link: '/components/alert' },
44
+ { text: 'Avatar', link: '/components/avatar' },
45
+ { text: 'Badge', link: '/components/alert' },
46
+ { text: 'Breadcrumb', link: '/components/breadcrumb' },
47
+ { text: 'Tooltip', link: '/components/tooltip' },
48
+ { text: 'Toast', link: '/components/toast' },
49
+ ]
50
+ },
51
+ {
52
+ text: 'Navigation',
53
+ items: [
54
+ { text: 'Menu', link: '/components/menu' },
55
+ { text: 'Tabs', link: '/components/tabs' },
56
+ { text: 'Dropdown', link: '/components/dropdown' },
57
+ { text: 'Context Menu', link: '/components/context-menu' },
58
+ { text: 'Breadcrumb', link: '/components/breadcrumb' },
59
+ ]
60
+ },
61
+ {
62
+ text: 'Overlay',
63
+ items: [
64
+ { text: 'Modal & Popover', link: '/components/modal' },
65
+ ]
66
+ },
67
+ {
68
+ text: 'Data',
69
+ items: [
70
+ { text: 'Data Table', link: '/components/data-table' },
71
+ { text: 'Accordion', link: '/components/accordion' },
72
+ ]
73
+ },
74
+ {
75
+ text: 'Forms',
76
+ items: [
77
+ { text: 'Button', link: '/components/button' },
78
+ { text: 'Form Fields', link: '/components/form-fields' },
79
+ { text: 'Checkbox & Radio', link: '/components/checkbox-radio' },
80
+ { text: 'Select', link: '/components/select' },
81
+ { text: 'File Upload', link: '/components/file' },
82
+ { text: 'Slider & Stepper', link: '/components/slider-stepper' },
83
+ { text: 'Switch', link: '/components/switch' },
84
+ ]
85
+ }
86
+ ],
87
+
88
+ '/utils/': [
89
+ {
90
+ text: 'Utilities',
91
+ items: [
92
+ { text: 'Cache', link: '/utils/cache' },
93
+ { text: 'NativeFetch', link: '/utils/native-fetch' },
94
+ { text: 'Filters', link: '/utils/filters' },
95
+ ]
96
+ }
97
+ ],
98
+
99
+ '/': [
100
+ {
101
+ text: 'Introduction',
102
+ items: [
103
+ { text: 'Getting Started', link: '/getting-started' },
104
+ { text: 'CLI', link: '/cli' },
105
+ { text: 'Core Concepts', link: '/core-concepts' },
106
+ ]
107
+ },
108
+ {
109
+ text: 'Essentials',
110
+ items: [
111
+ { text: 'Observables', link: '/observables' },
112
+ { text: 'Observable Resource', link: '/observable-resource' },
113
+ { text: 'Elements', link: '/elements' },
114
+ { text: 'Conditional Rendering', link: '/conditional-rendering' },
115
+ { text: 'List Rendering', link: '/list-rendering' },
116
+ { text: 'Anchor', link: '/anchor' },
117
+ ]
118
+ },
119
+ {
120
+ text: 'Application',
121
+ items: [
122
+ { text: 'Routing', link: '/routing' },
123
+ { text: 'State Management', link: '/state-management' },
124
+ { text: 'i18n & Formatting', link: '/i18n' },
125
+ { text: 'SVG Elements', link: '/svg-elements' },
126
+ ]
127
+ },
128
+ {
129
+ text: 'NDElement',
130
+ items: [
131
+ { text: 'NDElement', link: '/native-document-element' },
132
+ { text: 'Extending NDElement', link: '/extending-native-document-element' },
133
+ { text: 'Lifecycle Events', link: '/lifecycle-events' },
134
+ { text: 'Advanced Components', link: '/advanced-components' },
135
+ ]
136
+ },
137
+ {
138
+ text: 'Advanced',
139
+ items: [
140
+ { text: 'Args Validation', link: '/validation' },
141
+ { text: 'Memory Management', link: '/memory-management' },
142
+ ]
143
+ },
144
+ {
145
+ text: 'Contributing',
146
+ items: [
147
+ { text: 'Contributing', link: '/contributing' },
148
+ ]
149
+ }
150
+ ]
151
+ },
152
+
153
+ socialLinks: [
154
+ { icon: 'github', link: 'https://github.com/afrocodeur/native-document' }
155
+ ],
156
+
157
+ footer: {
158
+ message: 'Released under the MIT License.',
159
+ copyright: 'Copyright © 2024 AfroCodeur'
160
+ },
161
+
162
+ search: {
163
+ provider: 'local'
164
+ }
165
+ }
166
+ })
package/CHANGELOG.md ADDED
@@ -0,0 +1,187 @@
1
+ # Changelog
2
+
3
+ All notable changes to NativeDocument will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [Unreleased]
11
+
12
+ ---
13
+
14
+ ## [1.0.169] - 2026-06-06
15
+
16
+ ### Added
17
+
18
+ - `Icon` - adapter-based icon system with chainable API (`Icon.search.fill().large()`),
19
+ `Icon.use(renderer, defaultConfigs)`, and 120+ semantic icon names accessible
20
+ via `Icon.{name}` getters
21
+ - `TablerIconRender` - Tabler Icons adapter (outline + fill)
22
+ - `PhosphorIconRender` - Phosphor Icons adapter (thin/light/regular/bold/fill/duotone)
23
+ - `MaterialIconRender` - Google Material Icons adapter (fill/outline/round/sharp/twoTone)
24
+
25
+ ---
26
+
27
+ ## [1.0.167] - 2026-06-06
28
+
29
+ ### Added
30
+
31
+ #### Components
32
+ - `Card` - content container with image, header, footer, actions, variants (elevated, outlined, flat), clickable, hoverable, loading state, horizontal layout, custom renderers (`renderImage`, `renderHeader`, `renderContent`, `renderFooter`, `renderActions`), and fully custom `layout(slots, instance)` function
33
+ - `List` - flexible list with `HasListItem` trait, `from(source, builder)` reactive data binding, `withDivider`, `inset`, `selectable`, `multiSelect`, `selectByClick`, `selectByCheckbox`, `selectInto`
34
+ - `ListItem` - list item with icon, label, subtitle, trailing, disabled, selected, visibility, `isSelectedIcon`, `swipeLeading`, `swipeTrailing` for mobile swipe actions with auto-close on outside click and `stopPropagation` on swipe action clicks
35
+ - `ListGroup` - collapsible group of items with icon, `collapsable(mode, openedIcon, closedIcon)`, `collapsed()`, visibility, and full `HasListItem` API (`.item()`, `.group()`, `.divider()`, `.add()`, `.from()`)
36
+ - `ListDivider` - visual separator between list items
37
+ - `HasListItem` - trait adding `.item()`, `.group()`, `.divider()`, `.add()`, `.from()` to `List` and `ListGroup`
38
+ - `SpacerRender` - render for `Spacer` component (`flex: 1` layout utility)
39
+
40
+ #### UI (renders)
41
+ - `CardRender` + `card.css` - Card renderer with 5 build slots and `layout(slots)` support
42
+ - `ListRender` + `list.css` - `ForEachArray($desc.items)` — items self-render
43
+ - `ListItemRender` + `list-item.css` - reactive checkbox, select indicator, swipe gesture with pointer events, auto-close and stopPropagation
44
+ - `ListGroupRender` + `list-group.css` - collapsible group with reactive chevron via `Switch`
45
+ - `ListDividerRender` + `list-divider.css`
46
+ - `SpacerRender`
47
+
48
+ ### Fixed
49
+ - `Card.use()` was a no-op (empty body) - now correctly assigns `Card.defaultTemplate`
50
+
51
+ ## [1.0.166] - 2026-06-03
52
+
53
+ ### Added
54
+
55
+ #### Core
56
+ - `Observable.resource()` - async data fetching with built-in state machine (`unresolved`, `pending`, `ready`, `refreshing`, `errored`), `AbortController` support, reactive dependencies, debounce, and optimistic `mutate()`
57
+ - `Observable.batch()` - batch multiple state changes into a single computed update, with async support
58
+ - `Observable.useValueProperty(name?)` - define a custom property alias for `$value`
59
+ - `Observable.autoCleanup(enable, options?)` - automatic periodic cleanup of orphaned observables via `WeakRef` and `FinalizationRegistry`
60
+ - `Observable.getById(id)` - retrieve a registered observable by its internal memory ID
61
+ - `observable.intercept(callback)` - transform or abort values before they are set
62
+ - `observable.interceptMutations(callback)` - intercept array and object mutations separately
63
+ - `observable.onCleanup(callback)` - register a callback that runs when the observable is cleaned up
64
+ - `observable.once(predicate, callback)` - single-fire listener triggered by value or condition
65
+ - `observable.deepSubscribe(callback)` - react to changes at any nesting depth
66
+ - `observable.persist(key, options?)` - two-way synchronization with `localStorage`
67
+ - `observable.clone()` - deep clone of the observable's current value
68
+ - `observable.resolve()` - recursively extract plain values from observables and proxies
69
+ - `observable.trigger()` - force notification without changing the value
70
+ - `observable.reset()` - reset to the initial value (requires `{ reset: true }` option)
71
+ - `Observable.computed()` - derived observable that recalculates when dependencies change
72
+ - `Observable.object()` / `Observable.json()` / `Observable.init()` - per-property reactive proxy
73
+ - `Observable.array()` - reactive array with mutating methods (`push`, `pop`, `splice`, `swap`, `merge`, `at`, `count`, `removeItem`, `insertAfter`)
74
+ - `ObservableArray.where()` / `whereSome()` / `whereEvery()` - live reactive filtering
75
+ - `observable.format(type, options?)` - locale-aware value formatting (`currency`, `number`, `percent`, `date`, `time`, `datetime`, `relative`, `plural`, custom)
76
+ - `Observable.setLocale(locale)` - set the reactive locale for all `.format()` calls
77
+ - `Formatters` - extensible formatter registry for custom format types
78
+ - Convenience checkers: `isTruthy()`, `isFalsy()`, `isEmpty()`, `isNotEmpty()`, `isEqualTo()`, `isGreaterThan()`, `isBetween()`, `isStartingWith()`, `isIncludedIn()`, `isHaving()`, and more
79
+ - Convenience transformers: `toUpperCase()`, `toLower()`, `toTrimmed()`, `toLength()`, `toClamped()`, `toPercent()`, `toLiteral()`, `toProperty()`
80
+
81
+ #### NDElement
82
+ - `.nd` proxy on every HTML element - fluent API for events, lifecycle, DOM utilities
83
+ - Auto-generated event methods for all standard DOM events in 4 variants: `onClick`, `onPreventClick`, `onStopClick`, `onPreventStopClick`
84
+ - `.on(name, callback, options)` - generic event with `AbortController` auto-cleanup on unmount
85
+ - `.off(name, callback)` - remove a specific listener
86
+ - `.once(name, callback)` - one-time listener
87
+ - `.emit(name, detail?)` - dispatch a custom event
88
+ - `.attr(name, value)` / `.attrs(attrs)` - reactive attribute binding
89
+ - `.class(map)` / `.style(map)` - reactive class and style binding
90
+ - `.ref(target, name)` - store the native `HTMLElement` reference
91
+ - `.refSelf(target, name)` - store the `NDElement` instance reference
92
+ - `.with(methods)` - add methods to a single element instance (component encapsulation pattern)
93
+ - `NDElement.extend(methods)` - add methods to all NDElement instances globally
94
+ - `.ghostDom(element)` - inject a companion element alongside the returned element
95
+ - `.attach(methodName, hydrator)` - template binding for `useCache` / `useSingleton`
96
+ - `.mounted(callback)` / `.unmounted(callback)` / `.lifecycle({ mounted, unmounted })` - DOM lifecycle hooks
97
+ - `.beforeUnmount(id, asyncCallback)` - async callback before element removal (exit animations)
98
+ - `.destroyOnUnmount()` - automatically call `destroy()` on unmount
99
+ - `.destroy()` - abort internal `AbortController`, clear lifecycle observers
100
+ - `.transition(name)` / `.transitionIn(name)` / `.transitionOut(name)` / `.animate(name)` - CSS transition helpers
101
+ - `.openShadow(css?)` / `.closedShadow(css?)` - Shadow DOM encapsulation
102
+ - `.unmountChildren()` - unmount all child elements
103
+
104
+ #### Elements
105
+ - Wrapper functions for all standard HTML elements (`Div`, `Button`, `Input`, `Form`, `Table`, etc.)
106
+ - `Fragment` - one-time static content grouping via `DocumentFragment`
107
+ - `Anchor` / `NativeDocumentFragment` - dynamic DOM zone delimited by comment markers
108
+ - `ShowIf` / `HideIf` / `HideIfNot` - conditional rendering with optional caching
109
+ - `ShowWhen` - show when an observable matches a specific value
110
+ - `Switch` - binary content toggle
111
+ - `Match` - multi-state rendering with `.nd.add()` / `.nd.remove()` for dynamic states
112
+ - `When` - fluent builder for conditional rendering
113
+ - `ForEach` - keyed list rendering for arrays and objects, with index observable
114
+ - `ForEachArray` - high-performance array rendering with `TemplateCloner`
115
+ - `useCache($binder)` - template cloning with data binding (value, class, style, attr, attach)
116
+ - `useSingleton(view)` - singleton view with named updatable sections
117
+ - Full SVG element set (`SvgSvg`, `SvgCircle`, `SvgRect`, `SvgPath`, etc.) with reactive attributes
118
+ - `classPropertyAccumulator` / `cssPropertyAccumulator` - programmatic class and style builders
119
+
120
+ #### Router
121
+ - `Router.create({ name, mode }, callback)` - multi-mode router (history, hash, memory)
122
+ - Route parameters with validation via `RouteParamPatterns` (built-in: `id`, `uuid`, `slug`, `locale`, `token`, and more)
123
+ - Named routes, route groups with shared middleware and layout, catch-all `{*}`
124
+ - `Router.push()` / `Router.replace()` / `Router.redirectTo()` / `Router.back()` / `Router.forward()`
125
+ - `Link` component with named route resolution and active state
126
+ - Middleware system with `context` and `next()`
127
+ - Multiple named routers with `Router.get(name)` / `Router.routers`
128
+
129
+ #### Store
130
+ - `Store.create()` / `createResettable()` / `createPersistent()` / `createPersistentResettable()` / `createComposed()`
131
+ - `Store.group(name, fn)` - isolated namespace with full Store API
132
+ - `Store.use(name)` - two-way reactive follower
133
+ - `Store.follow(name)` - read-only reactive follower (throws on mutation)
134
+ - `Store.get(name)` - raw observable access
135
+ - `Store.has(name)` / `Store.delete(name)` / `Store.reset(name)`
136
+
137
+ #### Utilities
138
+ - `NativeFetch` - HTTP client with request/response interceptors, automatic JSON, query string, FormData support
139
+ - `Cache.once(fn)` / `Cache.singleton(fn)` / `Cache.memoize(fn)` - lazy init, eager singleton, key-based memoization
140
+ - Filter helpers: `equals`, `greaterThan`, `between`, `includes`, `startsWith`, `match`, `inArray`, `and`, `or`, `not`, `custom`, `dateEquals`, `dateBetween`, `timeBetween`, `dateTimeBetween`, and more
141
+ - `ArgTypes` + `.args()` + `withValidation()` - runtime argument validation (development only)
142
+ - `PluginsManager` - internal event bus for DevTools integration
143
+ - `MemoryManager` - `WeakRef`-based observable registry with `FinalizationRegistry` auto-cleanup
144
+ - `ShortcutManager` - global and context-scoped keyboard shortcuts with OS-aware display
145
+ - `I18nService` - locale management backed by `i18next`, with `tr()` translation helper and `npm run i18n:scan`
146
+
147
+ #### Components (50+)
148
+ - **Layout**: `HStack`, `VStack`, `Row`, `Col`, `AbsoluteStack`, `FixedStack`, `RelativeStack`, `Divider`, `Spacer`, `Splitter` + `SplitterPanel`
149
+ - **Navigation**: `BreadCrumb`, `Menu` + `MenuItem` + `MenuGroup` + `MenuLink` + `MenuDivider`, `Tabs`, `Pagination`, `Stepper` + `StepperStep`
150
+ - **Overlay**: `Modal`, `Popover`, `Dropdown` + `DropdownItem` + `DropdownGroup` + `DropdownTrigger`, `Tooltip`, `ContextMenu`
151
+ - **Feedback**: `Alert`, `Badge`, `Progress`, `Skeleton`, `Spinner`, `Toast`
152
+ - **Data**: `DataTable` + `Column` + `ColumnGroup`, `SimpleTable`, `Accordion` + `AccordionItem`, `List`
153
+ - **Interaction**: `Button`, `Switch`, `Slider`
154
+ - **Media**: `Avatar`, `AvatarGroup`, `Card`
155
+ - **Forms**: `FormControl`, `FieldCollection`, `StringField`, `EmailField`, `PasswordField`, `TelField`, `UrlField`, `HiddenField`, `NumberField`, `RangeField`, `TextAreaField`, `CheckboxField`, `CheckboxGroupField`, `RadioField`, `SelectField`, `AutocompleteField`, `DateField`, `TimeField`, `ColorField`, `SliderField`, `ImageField`, `FileField` (with `FileNativeMode`, `FileDropzoneMode`, `FileUploadButtonMode`, `FileWallMode`, `FileAvatarMode`)
156
+ - **Traits**: `HasEventEmitter`, `HasDraggable`, `HasResizable`, `HasItems`, `HasPosition`, `HasFullPosition`, `HasValidation`
157
+
158
+ #### CLI (`@native-document/cli`)
159
+ - `nd create <name>` - scaffold a complete project with Vite, routing, i18n, and store pre-configured
160
+ - `nd create <name> --feature` - feature-based architecture
161
+ - `nd create:page` / `create:component` / `create:service` / `create:feature` - generators
162
+ - `npm run i18n:scan` - scan source for missing translation keys
163
+
164
+ #### Build
165
+ - Rollup 4 multi-output: CDN IIFE (dev + minified), ESM for bundlers, DevTools bundle
166
+ - `process.env.NODE_ENV` replacement for tree-shaking all debug code in production
167
+ - TypeScript `.d.ts` definitions for all public APIs
168
+
169
+ ---
170
+
171
+ ## How to Read This File
172
+
173
+ Entries use the following categories:
174
+
175
+ - **Added** - new features
176
+ - **Changed** - changes to existing functionality
177
+ - **Deprecated** - features that will be removed in a future release
178
+ - **Removed** - features removed in this release
179
+ - **Fixed** - bug fixes
180
+ - **Security** - vulnerability fixes
181
+
182
+ ---
183
+
184
+ [Unreleased]: https://github.com/afrocodeur/native-document/compare/v1.0.169...HEAD
185
+ [1.0.169]: https://github.com/afrocodeur/native-document/compare/v1.0.167...v1.0.169
186
+ [1.0.167]: https://github.com/afrocodeur/native-document/compare/v1.0.166...v1.0.167
187
+ [1.0.166]: https://github.com/afrocodeur/native-document/releases/tag/v1.0.166
package/components.js CHANGED
@@ -26,4 +26,7 @@ export * from './src/components/table/index';
26
26
  export * from './src/components/tabs/index';
27
27
  export * from './src/components/toast/index';
28
28
  export * from './src/components/tooltip/index';
29
- export * from './src/components/stacks/index';
29
+ export * from './src/components/stacks/index';
30
+ export * from './src/components/spacer/index';
31
+
32
+ export * from './src/components/icon/index';