native-document 1.0.168 → 1.0.172

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +99 -4
  2. package/components.js +3 -1
  3. package/dist/native-document.components.min.js +197 -171
  4. package/dist/native-document.dev.js +92 -75
  5. package/dist/native-document.dev.js.map +1 -1
  6. package/dist/native-document.min.js +1 -1
  7. package/docs/components/icons.md +321 -0
  8. package/docs/vitepress-conventions.md +2 -2
  9. package/package.json +11 -4
  10. package/src/components/BaseComponent.js +43 -1
  11. package/src/components/accordion/Accordion.js +1 -0
  12. package/src/components/accordion/AccordionItem.js +1 -0
  13. package/src/components/alert/Alert.js +4 -0
  14. package/src/components/avatar/Avatar.js +1 -0
  15. package/src/components/avatar/AvatarGroup.js +1 -0
  16. package/src/components/badge/Badge.js +1 -0
  17. package/src/components/breadcrumb/BreadCrumb.js +4 -0
  18. package/src/components/button/Button.js +1 -0
  19. package/src/components/card/Card.js +1 -0
  20. package/src/components/context-menu/ContextMenu.js +2 -0
  21. package/src/components/context-menu/ContextMenuGroup.js +2 -0
  22. package/src/components/context-menu/ContextMenuItem.js +2 -0
  23. package/src/components/divider/Divider.js +2 -0
  24. package/src/components/dropdown/Dropdown.js +1 -0
  25. package/src/components/dropdown/DropdownDivider.js +1 -0
  26. package/src/components/dropdown/DropdownGroup.js +1 -0
  27. package/src/components/dropdown/DropdownItem.js +1 -0
  28. package/src/components/dropdown/DropdownTrigger.js +1 -0
  29. package/src/components/form/FormControl.js +1 -0
  30. package/src/components/form/field/Field.js +1 -0
  31. package/src/components/form/field/types/FileField.js +3 -3
  32. package/src/components/form/field/types/StringField.js +1 -1
  33. package/src/components/icon/Icon.js +108 -0
  34. package/src/components/icon/icon-getters.js +142 -0
  35. package/src/components/icon/icons.js +171 -0
  36. package/src/components/icon/index.js +17 -0
  37. package/src/components/icon/types/Icon.d.ts +191 -0
  38. package/src/components/index.d.ts +6 -1
  39. package/src/components/list/ListItem.js +1 -0
  40. package/src/components/list/types/List.d.ts +45 -32
  41. package/src/components/list/types/ListDivider.ts +16 -0
  42. package/src/components/list/types/ListGroup.d.ts +51 -29
  43. package/src/components/list/types/ListItem.d.ts +20 -21
  44. package/src/components/menu/Menu.js +3 -0
  45. package/src/components/menu/MenuDivider.js +1 -0
  46. package/src/components/menu/MenuGroup.js +1 -0
  47. package/src/components/menu/MenuItem.js +1 -0
  48. package/src/components/menu/MenuLink.js +1 -0
  49. package/src/components/modal/Modal.js +4 -0
  50. package/src/components/pagination/Pagination.js +1 -0
  51. package/src/components/popover/Popover.js +1 -0
  52. package/src/components/popover/PopoverFooter.js +1 -0
  53. package/src/components/popover/PopoverHeader.js +1 -0
  54. package/src/components/progress/Progress.js +5 -0
  55. package/src/components/skeleton/Skeleton.js +4 -0
  56. package/src/components/slider/Slider.js +1 -0
  57. package/src/components/spacer/Spacer.js +1 -0
  58. package/src/components/spinner/Spinner.js +1 -0
  59. package/src/components/splitter/Splitter.js +1 -0
  60. package/src/components/splitter/SplitterGutter.js +6 -0
  61. package/src/components/splitter/SplitterPanel.js +1 -0
  62. package/src/components/stacks/AbsoluteStack.js +1 -0
  63. package/src/components/stacks/FixedStack.js +1 -0
  64. package/src/components/stacks/HStack.js +1 -0
  65. package/src/components/stacks/PositionStack.js +1 -0
  66. package/src/components/stacks/RelativeStack.js +1 -0
  67. package/src/components/stacks/Stack.js +1 -0
  68. package/src/components/stacks/VStack.js +1 -0
  69. package/src/components/stepper/Stepper.js +1 -0
  70. package/src/components/stepper/StepperStep.js +1 -0
  71. package/src/components/switch/Switch.js +1 -0
  72. package/src/components/table/DataTable.js +1 -0
  73. package/src/components/table/SimpleTable.js +1 -0
  74. package/src/components/tabs/Tabs.js +1 -0
  75. package/src/components/toast/Toast.js +1 -0
  76. package/src/components/tooltip/Tooltip.js +1 -0
  77. package/src/core/data/MemoryManager.js +6 -1
  78. package/src/core/data/ObservableItem.js +28 -10
  79. package/src/core/elements/anchor/anchor.js +4 -3
  80. package/src/core/elements/anchor/one-child-anchor-overwriting.js +4 -4
  81. package/src/core/elements/content-formatter.js +35 -2
  82. package/src/core/elements/control/for-each-array-cache.js +59 -0
  83. package/src/core/elements/control/for-each-array.js +15 -23
  84. package/src/core/elements/form.js +1 -1
  85. package/src/core/elements/img.js +1 -1
  86. package/src/core/elements/medias.js +2 -2
  87. package/src/core/elements/meta-data.js +1 -1
  88. package/src/core/wrappers/AttributesWrapper.js +44 -29
  89. package/src/core/wrappers/ElementCreator.js +38 -22
  90. package/src/core/wrappers/HtmlElementWrapper.js +33 -9
  91. package/src/core/wrappers/NDElement.js +35 -9
  92. package/src/core/wrappers/NdPrototype.js +31 -39
  93. package/src/core/wrappers/constants.js +12 -12
  94. package/src/core/wrappers/prototypes/attributes-extensions.js +24 -24
  95. package/src/core/wrappers/prototypes/nd-element-extensions.js +128 -65
  96. package/src/ui/components/accordion/AccordionItemRender.js +29 -7
  97. package/src/ui/components/alert/AlertRender.js +6 -0
  98. package/src/ui/components/breadcrumb/BreadcrumbRender.js +9 -1
  99. package/src/ui/components/button/ButtonRender.js +3 -0
  100. package/src/ui/components/contextmenu/ContextmenuRender.js +2 -0
  101. package/src/ui/components/dropdown/DropdownRender.js +3 -0
  102. package/src/ui/components/dropdown/item/DropdownItemRender.js +6 -1
  103. package/src/ui/components/form/FieldCollectionRender.js +4 -0
  104. package/src/ui/components/form/fields/CheckboxFieldRender.js +4 -0
  105. package/src/ui/components/form/fields/CheckboxGroupFieldRender.js +4 -0
  106. package/src/ui/components/form/fields/RadioFieldRender.js +4 -0
  107. package/src/ui/components/form/fields/RangeFieldRender.js +4 -0
  108. package/src/ui/components/form/fields/SelectFieldRender.js +5 -0
  109. package/src/ui/components/form/fields/SliderFieldRender.js +3 -0
  110. package/src/ui/components/icon/material/MaterialIconRender.js +71 -0
  111. package/src/ui/components/icon/material/material.css +15 -0
  112. package/src/ui/components/icon/material/material.map.js +170 -0
  113. package/src/ui/components/icon/phosphor/PhosphorIconRender.js +71 -0
  114. package/src/ui/components/icon/phosphor/phosphor.css +17 -0
  115. package/src/ui/components/icon/phosphor/phosphor.map.js +165 -0
  116. package/src/ui/components/icon/tabler/TablerIconRender.js +58 -0
  117. package/src/ui/components/icon/tabler/tabler.css +14 -0
  118. package/src/ui/components/icon/tabler/tabler.map.js +165 -0
  119. package/src/ui/components/list/item/ListItemRender.js +4 -0
  120. package/src/ui/components/menu/MenuItemRender.js +8 -0
  121. package/src/ui/components/menu/MenuLinkRender.js +11 -0
  122. package/src/ui/components/menu/MenuRender.js +5 -0
  123. package/src/ui/components/menu/helpers.js +2 -1
  124. package/src/ui/components/modal/ModalRender.js +8 -2
  125. package/src/ui/components/progress/ProgressRender.js +9 -0
  126. package/src/ui/components/skeleton/SkeletonRender.js +2 -0
  127. package/src/ui/components/spinner/SpinnerRender.js +3 -0
  128. package/src/ui/components/splitter/SplitterGutterRender.js +4 -0
  129. package/src/ui/components/splitter/SplitterPanelRender.js +4 -0
  130. package/src/ui/components/splitter/SplitterRender.js +2 -0
  131. package/src/ui/components/stepper/StepperRender.js +2 -1
  132. package/src/ui/components/stepper/StepperStepRender.js +8 -1
  133. package/src/ui/components/switch/SwitchRender.js +3 -0
  134. package/src/ui/components/table/data-table/DataTableRender.js +4 -0
  135. package/src/ui/components/table/simple-table/SimpleTableRender.js +2 -0
  136. package/src/ui/components/toast/ToastRender.js +4 -0
  137. package/src/ui/index.js +5 -0
  138. package/src/ui/utils/aria.js +19 -0
  139. package/tests/integration/ui/attributes-wrapper.test.js +177 -0
  140. package/tests/integration/ui/for-each-array.test.js +167 -0
  141. package/tests/integration/ui/lifecycle.test.js +146 -0
  142. package/tests/integration/ui/show-if.test.js +168 -0
  143. package/tests/unit/core/observable-array.test.js +404 -0
  144. package/tests/unit/core/observable-item.test.js +428 -0
  145. package/tests/unit/core/observable-object.test.js +239 -0
  146. package/tests/unit/core/observable-resource.test.js +323 -0
  147. package/tests/unit/core/store.test.js +347 -0
  148. package/tests/unit/router/route-matching.test.js +169 -0
  149. package/tests/unit/router/router-guards.test.js +189 -0
  150. package/tests/unit/utils/cache.test.js +120 -0
  151. package/tests/unit/utils/filters.test.js +394 -0
  152. package/types/elements.d.ts +5 -0
  153. package/vitest.config.js +15 -0
package/CHANGELOG.md CHANGED
@@ -9,13 +9,104 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ---
13
+
14
+ ## [1.0.172] - 2026-06-15
15
+
12
16
  ### Added
13
17
 
14
- - `Card` - versatile content container with image, header, footer, actions, clickable and loading states (renderer implementation in progress)
15
- - `List` - flexible list with single/multi selection, checkbox or click-to-select modes, dividers and keyboard navigation (renderer implementation in progress)
18
+ - `Text(string)` shorthand for `string.toNdChildren()`, parses Observable placeholders in template strings
19
+ - `String.prototype.toNdChildren()` splits a string containing `{{obs:N}}` placeholders into a mixed array of strings and resolved Observables
20
+ - `ObservableItem.prototype.toString()` — auto-registers the Observable in MemoryManager and returns `{{obs:id}}`, enabling reactive interpolation via standard template literals
21
+ - `NDElement.prototype.className(classes)` — adds static classes, bypasses AttributesWrapper
22
+ - `NDElement.prototype.class(className, value)` — adds a reactive class binding, bypasses AttributesWrapper
23
+ - `__$isNativeNode` flag on DOM prototypes (`Element`, `Text`, `Comment`, `Document`, `DocumentFragment`) — faster alternative to `instanceof Node`
24
+ - `__$isValidNdChild` flag on all valid NdChild prototypes — single property check replaces multiple type guards
25
+ - `defineToNdElement`, `defineValidNdChild`, `defineNativeNode` — non-enumerable prototype helpers in `nd-element-extensions`
26
+ - camelCase variants added to `BOOLEAN_ATTRIBUTES` — removes `toLowerCase()` call on each attribute in the hot path
27
+
28
+ ### Changed
29
+
30
+ - `ElementCreator.processChildren` and `getChild` — refactored for better performance
31
+ - `nd-element-extensions` — all prototype extensions converted to non-enumerable `defineProperty`
32
+ - `AttributesWrapper` — `options` defaults to `null` instead of `{}`, fixes truthy check issue
33
+ - NDElement events — inline handler (`on*`) used when no existing handler and no options; falls back to `addEventListener` for subsequent handlers or when options are provided
34
+ - `_prevent`, `_stop`, `_preventStop` — updated with same inline handler strategy
16
35
 
17
36
  ---
18
37
 
38
+ ## [1.0.170] - 2026-06-10
39
+
40
+ ### Added
41
+
42
+ - Vitest test suite — `vitest.config.js`, happy-dom environment, scripts `test`, `test:watch`, `test:ui`, `test:coverage`
43
+ - 372 tests passing across 13 files — 0 failures, 0 todo
44
+
45
+ #### Unit tests — core
46
+ - `observable-item` — 48 cases: set, val, subscribe, on/off, once, toggle, reset, transform, equals, clone, cleanup, intercept, assocTrigger
47
+ - `observable-array` — 48 cases: push, remove, clear, merge, swap, insertAfter, isIncludes, where, sync, clone, reset, deepSubscribe
48
+ - `observable-object` — 30 cases: constructor, val, get, set, subscribe, keys, observables, reset, clone
49
+ - `observable-resource` — 29 cases: states, fetch, refetch, mutate, abort, race condition, deps, onSuccess, onError, into, apply, destroy
50
+ - `store` — 43 cases: create, createResettable, createComposed, use, follow, reset, delete, group, protected, createPersistent
51
+
52
+ #### Unit tests — router
53
+ - `route-matching` — 26 cases: exact path, params, typed params, custom validators, url(), metadata
54
+ - `router-guards` — 14 cases: middleware execution, group middlewares, subscribe, resolve, currentState
55
+
56
+ #### Unit tests — utils
57
+ - `cache` — 12 cases: singleton, once, memoize
58
+ - `filters` — 60 cases: equals, comparison, inArray, isEmpty, match, and/or/not, custom, string filters, date/time filters
59
+
60
+ #### Integration tests — UI
61
+ - `attributes-wrapper` — 22 cases: string, class map, style, Observable, boolean, aria attributes
62
+ - `show-if` — 16 cases: static boolean, observable, factory child, HideIf, HideIfNot
63
+ - `for-each-array` — 13 cases: static array, push, removeItem, clear, set, swap, index observable, order preservation
64
+ - `lifecycle` — 11 cases: mounted, unmounted, destroy, destroyOnUnmount
65
+
66
+ ### Fixed
67
+
68
+ - `NDElement.prototype.destroy()` — guard against double call when `$element` is already null
69
+ - `NDElement.prototype.destroy()` — disconnect lifecycle observer to prevent callbacks from firing after destroy
70
+
71
+ ---
72
+
73
+ ## [1.0.169] - 2026-06-06
74
+
75
+ ### Added
76
+
77
+ - `Icon` - adapter-based icon system with chainable API (`Icon.search.fill().large()`),
78
+ `Icon.use(renderer, defaultConfigs)`, and 120+ semantic icon names accessible
79
+ via `Icon.{name}` getters
80
+ - `TablerIconRender` - Tabler Icons adapter (outline + fill)
81
+ - `PhosphorIconRender` - Phosphor Icons adapter (thin/light/regular/bold/fill/duotone)
82
+ - `MaterialIconRender` - Google Material Icons adapter (fill/outline/round/sharp/twoTone)
83
+
84
+ ---
85
+
86
+ ## [1.0.167] - 2026-06-06
87
+
88
+ ### Added
89
+
90
+ #### Components
91
+ - `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
92
+ - `List` - flexible list with `HasListItem` trait, `from(source, builder)` reactive data binding, `withDivider`, `inset`, `selectable`, `multiSelect`, `selectByClick`, `selectByCheckbox`, `selectInto`
93
+ - `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
94
+ - `ListGroup` - collapsible group of items with icon, `collapsable(mode, openedIcon, closedIcon)`, `collapsed()`, visibility, and full `HasListItem` API (`.item()`, `.group()`, `.divider()`, `.add()`, `.from()`)
95
+ - `ListDivider` - visual separator between list items
96
+ - `HasListItem` - trait adding `.item()`, `.group()`, `.divider()`, `.add()`, `.from()` to `List` and `ListGroup`
97
+ - `SpacerRender` - render for `Spacer` component (`flex: 1` layout utility)
98
+
99
+ #### UI (renders)
100
+ - `CardRender` + `card.css` - Card renderer with 5 build slots and `layout(slots)` support
101
+ - `ListRender` + `list.css` - `ForEachArray($desc.items)` — items self-render
102
+ - `ListItemRender` + `list-item.css` - reactive checkbox, select indicator, swipe gesture with pointer events, auto-close and stopPropagation
103
+ - `ListGroupRender` + `list-group.css` - collapsible group with reactive chevron via `Switch`
104
+ - `ListDividerRender` + `list-divider.css`
105
+ - `SpacerRender`
106
+
107
+ ### Fixed
108
+ - `Card.use()` was a no-op (empty body) - now correctly assigns `Card.defaultTemplate`
109
+
19
110
  ## [1.0.166] - 2026-06-03
20
111
 
21
112
  ### Added
@@ -149,5 +240,9 @@ Entries use the following categories:
149
240
 
150
241
  ---
151
242
 
152
- [Unreleased]: https://github.com/afrocodeur/native-document/compare/v1.0.166...HEAD
153
- [1.0.166]: https://github.com/afrocodeur/native-document/releases/tag/v1.0.166
243
+ [Unreleased]: https://github.com/afrocodeur/native-document/compare/v1.0.172...HEAD
244
+ [1.0.172]: https://github.com/afrocodeur/native-document/compare/v1.0.170...v1.0.172
245
+ [1.0.170]: https://github.com/afrocodeur/native-document/compare/v1.0.169...v1.0.170
246
+ [1.0.169]: https://github.com/afrocodeur/native-document/compare/v1.0.167...v1.0.169
247
+ [1.0.167]: https://github.com/afrocodeur/native-document/compare/v1.0.166...v1.0.167
248
+ [1.0.166]: https://github.com/afrocodeur/native-document/releases/tag/v1.0.166
package/components.js CHANGED
@@ -27,4 +27,6 @@ export * from './src/components/tabs/index';
27
27
  export * from './src/components/toast/index';
28
28
  export * from './src/components/tooltip/index';
29
29
  export * from './src/components/stacks/index';
30
- export * from './src/components/spacer/index';
30
+ export * from './src/components/spacer/index';
31
+
32
+ export * from './src/components/icon/index';