native-document 1.0.138 → 1.0.140

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 (259) hide show
  1. package/components.js +1 -1
  2. package/devtools/ComponentRegistry.js +3 -2
  3. package/dist/native-document.components.min.css +1 -0
  4. package/dist/native-document.components.min.js +11506 -8566
  5. package/dist/native-document.dev.js +2645 -2166
  6. package/dist/native-document.dev.js.map +1 -1
  7. package/dist/native-document.min.js +1 -1
  8. package/index.js +1 -0
  9. package/package.json +5 -2
  10. package/rollup.config.js +5 -2
  11. package/src/components/$traits/has-draggable/HasDraggable.js +69 -0
  12. package/src/components/$traits/has-draggable/has-draggable.css +8 -0
  13. package/src/components/$traits/{HasItems.js → has-items/HasItems.js} +2 -11
  14. package/src/components/$traits/has-position/HasFullPosition.js +51 -0
  15. package/src/components/$traits/has-position/HasPosition.js +23 -0
  16. package/src/components/$traits/has-resizable/HasResizable.js +113 -0
  17. package/src/components/$traits/has-resizable/has-resizable.css +121 -0
  18. package/src/components/$traits/has-validation/HasValidation.js +86 -0
  19. package/src/components/BaseComponent.js +109 -4
  20. package/src/components/accordion/Accordion.js +37 -31
  21. package/src/components/accordion/AccordionItem.js +14 -21
  22. package/src/components/alert/Alert.js +48 -40
  23. package/src/components/avatar/Avatar.js +4 -3
  24. package/src/components/avatar/AvatarGroup.js +8 -2
  25. package/src/components/badge/Badge.js +7 -7
  26. package/src/components/base-component.css +0 -0
  27. package/src/components/breadcrumb/BreadCrumb.js +30 -21
  28. package/src/components/button/Button.js +3 -14
  29. package/src/components/context-menu/ContextMenu.js +49 -26
  30. package/src/components/dropdown/Dropdown.js +172 -34
  31. package/src/components/dropdown/DropdownDivider.js +4 -3
  32. package/src/components/dropdown/DropdownGroup.js +19 -19
  33. package/src/components/dropdown/DropdownItem.js +24 -18
  34. package/src/components/dropdown/helpers.js +52 -0
  35. package/src/components/form/FormControl.js +207 -108
  36. package/src/components/form/field/Field.js +106 -174
  37. package/src/components/form/field/FieldCollection.js +110 -203
  38. package/src/components/form/field/types/AutocompleteField.js +26 -5
  39. package/src/components/form/field/types/CheckboxField.js +4 -4
  40. package/src/components/form/field/types/CheckboxGroupField.js +11 -5
  41. package/src/components/form/field/types/ColorField.js +4 -4
  42. package/src/components/form/field/types/DateField.js +110 -18
  43. package/src/components/form/field/types/EmailField.js +2 -2
  44. package/src/components/form/field/types/FileField.js +87 -21
  45. package/src/components/form/field/types/HiddenField.js +4 -4
  46. package/src/components/form/field/types/ImageField.js +4 -4
  47. package/src/components/form/field/types/NumberField.js +5 -5
  48. package/src/components/form/field/types/PasswordField.js +28 -6
  49. package/src/components/form/field/types/RadioField.js +12 -8
  50. package/src/components/form/field/types/RangeField.js +29 -5
  51. package/src/components/form/field/types/SearchField.js +4 -4
  52. package/src/components/form/field/types/SelectField.js +75 -8
  53. package/src/components/form/field/types/StringField.js +4 -4
  54. package/src/components/form/field/types/TelField.js +4 -4
  55. package/src/components/form/field/types/TextAreaField.js +7 -5
  56. package/src/components/form/field/types/TimeField.js +52 -6
  57. package/src/components/form/field/types/UrlField.js +4 -5
  58. package/src/components/form/field/types/file-field-mode/FileAvatarMode.js +104 -0
  59. package/src/components/form/field/types/file-field-mode/FileDropzoneMode.js +59 -0
  60. package/src/components/form/field/types/file-field-mode/FileItemPreview.js +74 -0
  61. package/src/components/form/field/types/file-field-mode/FileNativeMode.js +21 -0
  62. package/src/components/form/field/types/file-field-mode/FileUploadButtonMode.js +59 -0
  63. package/src/components/form/field/types/file-field-mode/FileWallMode.js +53 -0
  64. package/src/components/form/index.js +14 -2
  65. package/src/components/form/validation/Validation.js +9 -0
  66. package/src/components/list/List.js +1 -1
  67. package/src/components/list/ListGroup.js +1 -1
  68. package/src/components/menu/HasMenuItem.js +133 -0
  69. package/src/components/menu/Menu.js +47 -56
  70. package/src/components/menu/MenuGroup.js +36 -8
  71. package/src/components/menu/MenuItem.js +24 -10
  72. package/src/components/menu/MenuLink.js +2 -0
  73. package/src/components/modal/Modal.js +153 -23
  74. package/src/components/pagination/Pagination.js +55 -21
  75. package/src/components/popover/Popover.js +127 -40
  76. package/src/components/progress/Progress.js +14 -24
  77. package/src/components/skeleton/Skeleton.js +36 -13
  78. package/src/components/slider/Slider.js +96 -70
  79. package/src/components/spinner/Spinner.js +4 -2
  80. package/src/components/splitter/Splitter.js +15 -8
  81. package/src/components/splitter/SplitterGutter.js +28 -7
  82. package/src/components/splitter/SplitterPanel.js +9 -15
  83. package/src/components/splitter/index.js +3 -1
  84. package/src/components/stacks/AbsoluteStack.js +33 -0
  85. package/src/components/stacks/FixedStack.js +33 -0
  86. package/src/components/stacks/PositionStack.js +146 -0
  87. package/src/components/stacks/RelativeStack.js +33 -0
  88. package/src/components/{layouts → stacks}/Stack.js +22 -3
  89. package/src/components/{layouts → stacks}/index.js +6 -4
  90. package/src/components/stepper/Stepper.js +159 -67
  91. package/src/components/stepper/StepperStep.js +49 -12
  92. package/src/components/switch/Switch.js +59 -29
  93. package/src/components/switch/index.js +6 -0
  94. package/src/components/table/Column.js +22 -26
  95. package/src/components/table/ColumnGroup.js +4 -13
  96. package/src/components/table/DataTable.js +388 -103
  97. package/src/components/table/SimpleTable.js +28 -143
  98. package/src/components/tabs/Tabs.js +142 -44
  99. package/src/components/toast/Toast.js +40 -35
  100. package/src/components/tooltip/Tooltip.js +152 -35
  101. package/src/core/data/ObservableArray.js +94 -30
  102. package/src/core/data/ObservableChecker.js +20 -75
  103. package/src/core/data/ObservableItem.js +35 -3
  104. package/src/core/data/observable-helpers/computed.js +2 -1
  105. package/src/core/data/observable-helpers/object.js +13 -8
  106. package/src/core/data/observable-helpers/observable.is-to.js +196 -0
  107. package/src/core/elements/anchor/anchor.js +3 -2
  108. package/src/core/elements/control/for-each-array.js +44 -30
  109. package/src/core/elements/control/for-each.js +6 -3
  110. package/src/core/elements/control/show-if.js +11 -6
  111. package/src/core/elements/control/switch.js +2 -1
  112. package/src/core/elements/index.js +1 -1
  113. package/src/core/elements/svg.js +61 -0
  114. package/src/core/utils/HasEventEmitter.js +6 -0
  115. package/src/core/utils/debug-manager.js +2 -5
  116. package/src/core/utils/filters/standard.js +2 -1
  117. package/src/core/utils/property-accumulator.js +35 -6
  118. package/src/core/utils/shortcut-manager.js +242 -0
  119. package/src/core/utils/validator.js +1 -1
  120. package/src/core/wrappers/AttributesWrapper.js +41 -4
  121. package/src/core/wrappers/DocumentObserver.js +0 -1
  122. package/src/core/wrappers/HtmlElementWrapper.js +1 -1
  123. package/src/core/wrappers/NDElement.js +15 -2
  124. package/src/core/wrappers/SvgElementWrapper.js +15 -0
  125. package/src/core/wrappers/prototypes/attributes-extensions.js +4 -1
  126. package/src/core/wrappers/prototypes/nd-element-extensions.js +8 -1
  127. package/src/router/Router.js +0 -1
  128. package/src/ui/components/accordion/AccordionItemRender.js +63 -0
  129. package/src/ui/components/accordion/AccordionRender.js +34 -0
  130. package/src/ui/components/accordion/accordion.css +121 -0
  131. package/src/ui/components/alert/AlertRender.js +80 -0
  132. package/src/ui/components/alert/alert.css +163 -0
  133. package/src/ui/components/avatar/avata-group/AvatarGroupRender.js +49 -0
  134. package/src/ui/components/avatar/avata-group/avatar-group.css +38 -0
  135. package/src/ui/components/avatar/avatar/AvatarRender.js +87 -0
  136. package/src/ui/components/avatar/avatar/avatar.css +189 -0
  137. package/src/ui/components/badge/BadgeRender.js +24 -0
  138. package/src/ui/components/badge/badge.css +168 -0
  139. package/src/ui/components/breadcrumb/BreadcrumbRender.js +43 -0
  140. package/src/ui/components/breadcrumb/breadcrumb.css +55 -0
  141. package/src/ui/components/button/ButtonRender.js +65 -0
  142. package/src/ui/components/button/button.css +288 -354
  143. package/src/ui/components/contextmenu/ContextmenuRender.js +70 -0
  144. package/src/ui/components/contextmenu/contextmenu.css +36 -0
  145. package/src/ui/components/divider/DividerRender.js +70 -0
  146. package/src/ui/components/divider/divider.css +70 -0
  147. package/src/ui/components/dropdown/DropdownRender.js +92 -0
  148. package/src/ui/components/dropdown/divider/DropdownDividerRender.js +9 -0
  149. package/src/ui/components/dropdown/divider/dropdown-divider.css +0 -0
  150. package/src/ui/components/dropdown/dropdown.css +179 -0
  151. package/src/ui/components/dropdown/group/DropdownGroupRender.js +23 -0
  152. package/src/ui/components/dropdown/group/dropdown-group.css +0 -0
  153. package/src/ui/components/dropdown/item/DropdownItemRender.js +29 -0
  154. package/src/ui/components/dropdown/item/dropdown-item.css +0 -0
  155. package/src/ui/components/form/FieldCollectionRender.js +110 -0
  156. package/src/ui/components/form/FormControlRender.js +84 -0
  157. package/src/ui/components/form/field-collection.css +55 -0
  158. package/src/ui/components/form/fields/AutocompleteFieldRender.js +143 -0
  159. package/src/ui/components/form/fields/CheckboxFieldRender.js +59 -0
  160. package/src/ui/components/form/fields/CheckboxGroupFieldRender.js +92 -0
  161. package/src/ui/components/form/fields/ColorFieldRender.js +30 -0
  162. package/src/ui/components/form/fields/DateFieldRender.js +154 -0
  163. package/src/ui/components/form/fields/EmailFieldRender.js +5 -0
  164. package/src/ui/components/form/fields/FieldRender.js +117 -0
  165. package/src/ui/components/form/fields/FileFieldRender.js +41 -0
  166. package/src/ui/components/form/fields/HiddenFieldRender.js +14 -0
  167. package/src/ui/components/form/fields/ImageFieldRender.js +0 -0
  168. package/src/ui/components/form/fields/NumberFieldRender.js +52 -0
  169. package/src/ui/components/form/fields/PasswordFieldRender.js +65 -0
  170. package/src/ui/components/form/fields/RadioFieldRender.js +77 -0
  171. package/src/ui/components/form/fields/RangeFieldRender.js +121 -0
  172. package/src/ui/components/form/fields/SelectFieldRender.js +248 -0
  173. package/src/ui/components/form/fields/SliderFieldRender.js +359 -0
  174. package/src/ui/components/form/fields/StringFieldRender.js +6 -0
  175. package/src/ui/components/form/fields/TelFieldRender.js +6 -0
  176. package/src/ui/components/form/fields/TextAreaFieldRender.js +96 -0
  177. package/src/ui/components/form/fields/TimeFieldRender.js +141 -0
  178. package/src/ui/components/form/fields/UrlFieldRender.js +6 -0
  179. package/src/ui/components/form/fields/date-field.css +32 -0
  180. package/src/ui/components/form/fields/field.css +402 -0
  181. package/src/ui/components/form/fields/file-field.css +79 -0
  182. package/src/ui/components/form/fields/password-field.css +50 -0
  183. package/src/ui/components/form/fields/range-field.css +120 -0
  184. package/src/ui/components/form/fields/slider.css +195 -0
  185. package/src/ui/components/form/file-upload-mode/FileAvatarModeRender.js +143 -0
  186. package/src/ui/components/form/file-upload-mode/FileDropzoneModeRender.js +108 -0
  187. package/src/ui/components/form/file-upload-mode/FileNativeModeRender.js +22 -0
  188. package/src/ui/components/form/file-upload-mode/FileUploadButtonModeRender.js +89 -0
  189. package/src/ui/components/form/file-upload-mode/FileWallModeRender.js +91 -0
  190. package/src/ui/components/form/file-upload-mode/file-avatar-mode.css +139 -0
  191. package/src/ui/components/form/file-upload-mode/file-dropzone-mode.css +88 -0
  192. package/src/ui/components/form/file-upload-mode/file-upload-button-mode.css +44 -0
  193. package/src/ui/components/form/file-upload-mode/file-wall-mode.css +88 -0
  194. package/src/ui/components/form/form-control.css +40 -0
  195. package/src/ui/components/form/helpers.js +112 -0
  196. package/src/ui/components/form/index.js +61 -0
  197. package/src/ui/components/menu/MenuDividerRender.js +12 -0
  198. package/src/ui/components/menu/MenuGroupRender.js +60 -0
  199. package/src/ui/components/menu/MenuItemRender.js +57 -0
  200. package/src/ui/components/menu/MenuLinkRender.js +55 -0
  201. package/src/ui/components/menu/MenuRender.js +21 -0
  202. package/src/ui/components/menu/helpers.js +121 -0
  203. package/src/ui/components/menu/menu.css +308 -0
  204. package/src/ui/components/modal/ModalRender.js +119 -0
  205. package/src/ui/components/modal/modal.css +156 -0
  206. package/src/ui/components/pagination/PaginationRender.js +112 -0
  207. package/src/ui/components/pagination/pagination.css +63 -0
  208. package/src/ui/components/popover/PopoverRender.js +234 -0
  209. package/src/ui/components/popover/popover.css +139 -0
  210. package/src/ui/components/progress/ProgressRender.js +168 -0
  211. package/src/ui/components/progress/progress.css +197 -0
  212. package/src/ui/components/skeleton/SkeletonRender.js +79 -0
  213. package/src/ui/components/skeleton/skeleton.css +154 -0
  214. package/src/ui/components/spinner/SpinnerRender.js +46 -0
  215. package/src/ui/components/spinner/spinner.css +152 -0
  216. package/src/ui/components/splitter/SplitterGutterRender.js +94 -0
  217. package/src/ui/components/splitter/SplitterPanelRender.js +38 -0
  218. package/src/ui/components/splitter/SplitterRender.js +74 -0
  219. package/src/ui/components/splitter/splitter.css +128 -0
  220. package/src/ui/components/stacks/PositionStackRender.js +38 -0
  221. package/src/ui/components/stacks/StackRender.js +42 -0
  222. package/src/ui/components/stacks/absolute-stack/AbsoluteStackRender.js +5 -0
  223. package/src/ui/components/stacks/fixed-stack/FixedStackRender.js +5 -0
  224. package/src/ui/components/stacks/h-stack/HStackRender.js +7 -0
  225. package/src/ui/components/stacks/h-stack/h-stack.css +4 -0
  226. package/src/ui/components/stacks/index.js +15 -0
  227. package/src/ui/components/stacks/position-stack.css +62 -0
  228. package/src/ui/components/stacks/relative-stack/RelativeStackRender.js +7 -0
  229. package/src/ui/components/stacks/relative-stack/relative-stack.css +3 -0
  230. package/src/ui/components/stacks/stack.css +78 -0
  231. package/src/ui/components/stacks/v-stack/VStackRender.js +5 -0
  232. package/src/ui/components/stacks/v-stack/v-stack.css +4 -0
  233. package/src/ui/components/stepper/StepperRender.js +70 -0
  234. package/src/ui/components/stepper/StepperStepRender.js +67 -0
  235. package/src/ui/components/stepper/stepper.css +359 -0
  236. package/src/ui/components/switch/SwitchRender.js +82 -0
  237. package/src/ui/components/switch/switch.css +143 -0
  238. package/src/ui/components/table/data-table/DataTableRender.js +49 -0
  239. package/src/ui/components/table/data-table/bulk-actions.js +35 -0
  240. package/src/ui/components/table/data-table/data-table.css +246 -0
  241. package/src/ui/components/table/data-table/pagination.js +56 -0
  242. package/src/ui/components/table/data-table/tables.js +363 -0
  243. package/src/ui/components/table/data-table/toolbar.js +67 -0
  244. package/src/ui/components/table/simple-table/SimpleTableRender.js +188 -0
  245. package/src/ui/components/table/simple-table/simple-table.css +50 -0
  246. package/src/ui/components/tabs/TabsRender.js +226 -0
  247. package/src/ui/components/tabs/tabs.css +253 -0
  248. package/src/ui/components/toast/ToastRender.js +98 -0
  249. package/src/ui/components/toast/toast.css +201 -0
  250. package/src/ui/components/tooltip/TooltipRender.js +8 -0
  251. package/src/ui/components/tooltip/tooltip.css +113 -0
  252. package/src/ui/index.js +82 -0
  253. package/src/ui/tokens/colors-dark.scss +2 -1
  254. package/src/ui/tokens/reset.scss +3 -0
  255. package/types/control-flow.d.ts +2 -2
  256. package/src/components/layouts/ZStack.js +0 -41
  257. package/src/ui/components/button/button.render.js +0 -63
  258. /package/src/components/{layouts → stacks}/HStack.js +0 -0
  259. /package/src/components/{layouts → stacks}/VStack.js +0 -0
@@ -1,27 +1,32 @@
1
1
  import BaseComponent from "../BaseComponent";
2
2
  import HasEventEmitter from "../../core/utils/HasEventEmitter";
3
+ import DebugManager from "../../core/utils/debug-manager";
3
4
 
4
5
  /**
5
6
  * Component for displaying alert messages with various styles and variants
6
- * @param {ValidChildren} message - The alert message content
7
+ * @param {ValidChildren} content - The alert message content
7
8
  * @param {{ title?: ValidChildren, content?: ValidChildren, outline?: boolean, style?: string, variant?: string, closable?: boolean, autoDismiss?: number, icon?: ValidChildren, showIcon?: boolean }} config - Configuration object
8
9
  * @class
9
10
  */
10
- export default function Alert(message, config = {}) {
11
+ export default function Alert(content, props = {}) {
11
12
  if(!(this instanceof Alert)) {
12
- return new Alert(message, config);
13
+ return new Alert(content, props);
13
14
  }
15
+
16
+ BaseComponent.call(this, props);
17
+
14
18
  this.$description = {
15
19
  title: null,
16
- content: message,
20
+ content,
17
21
  outline: null,
18
- style: null,
22
+ appearance: null,
19
23
  variant: 'info',
20
24
  closable: false,
21
25
  autoDismiss: null,
22
26
  icon: null,
23
27
  showIcon: true,
24
- ...config
28
+ actions: [],
29
+ props,
25
30
  };
26
31
  }
27
32
 
@@ -38,6 +43,20 @@ Alert.use = function(template) {
38
43
  BaseComponent.extends(Alert);
39
44
  BaseComponent.use(Alert, HasEventEmitter);
40
45
 
46
+ Alert.preset = function(name, callback) {
47
+ if (Alert.prototype[name] || Alert[name]) {
48
+ DebugManager.warn(`Warning: the ${name} method already exist in Alert.`);
49
+ return;
50
+ }
51
+ Alert[name] = (content, props) => callback(new Alert(content, props));
52
+ };
53
+
54
+ Alert.presets = function(presets) {
55
+ for (const name in presets) {
56
+ Alert.preset(name, presets[name]);
57
+ }
58
+ };
59
+
41
60
  /**
42
61
  * Sets the variant style for the alert
43
62
  * @param {string} variant - The variant name (info, success, warning, error, danger)
@@ -89,38 +108,38 @@ Alert.prototype.danger = function() {
89
108
  };
90
109
 
91
110
  /**
92
- * Sets the style type for the alert
93
- * @param {string} style - The style name (filled, bordered, outline)
111
+ * Sets the appearance type for the alert
112
+ * @param {string} appearance - The style name (filled, bordered, outline)
94
113
  * @returns {Alert}
95
114
  */
96
- Alert.prototype.style = function(style) {
97
- this.$description.style = style;
115
+ Alert.prototype.appearance = function(appearance) {
116
+ this.$description.appearance = appearance;
98
117
  return this;
99
118
  };
100
119
 
101
120
  /**
102
- * Sets the alert style to 'filled'
121
+ * Sets the alert appearance to 'filled'
103
122
  * @returns {Alert}
104
123
  */
105
124
  Alert.prototype.filled = function() {
106
- return this.style('filled');
125
+ return this.appearance('filled');
107
126
  };
108
127
 
109
128
  /**
110
- * Sets the alert style to 'bordered'
129
+ * Sets the alert appearance to 'bordered'
111
130
  * @returns {Alert}
112
131
  */
113
132
  Alert.prototype.bordered = function() {
114
- return this.style('bordered');
133
+ return this.appearance('bordered');
115
134
  };
116
135
 
117
136
  /**
118
- * Sets the alert style to 'outline'
137
+ * Sets the alert appearance to 'outline'
119
138
  * @param {boolean} [outline=true] - Whether to use outline style
120
139
  * @returns {Alert}
121
140
  */
122
141
  Alert.prototype.outline = function(outline = true) {
123
- return this.style('outline');
142
+ return this.appearance('outline');
124
143
  };
125
144
 
126
145
  /**
@@ -187,10 +206,12 @@ Alert.prototype.clearActions = function(label, handler) {
187
206
  * Adds an action button to the alert
188
207
  * @param {string} label - The button label
189
208
  * @param {Function} handler - The click handler
209
+ * @param {?string} variant - The button variant style
190
210
  * @returns {Alert}
191
211
  */
192
- Alert.prototype.action = function(label, handler) {
193
- this.$description.actions.push({label, handler});
212
+ Alert.prototype.action = function(label, handler, variant = null) {
213
+ handler = handler || ((_, instance) => instance.hide());
214
+ this.$description.actions.push({ label, handler, variant });
194
215
  return this;
195
216
  };
196
217
 
@@ -229,7 +250,10 @@ Alert.prototype.showIcon = function(show = true) {
229
250
  * @returns {Alert}
230
251
  */
231
252
  Alert.prototype.closable = function(closable = true) {
232
- this.$description.closable = closable;
253
+ this.$description.closable = !!closable;
254
+ if(closable) {
255
+ this.showIf(closable);
256
+ }
233
257
  return this;
234
258
  };
235
259
 
@@ -256,22 +280,22 @@ Alert.prototype.autoDismiss = function(delay) {
256
280
  * Closes the alert
257
281
  */
258
282
  Alert.prototype.close = function() {
259
-
283
+ this.$description.showIf?.set(false);
284
+ this.emit('hide');
260
285
  };
261
286
 
262
287
  /**
263
288
  * Shows the alert
264
289
  */
265
290
  Alert.prototype.show = function() {
266
-
291
+ this.$description.showIf?.set(true);
292
+ this.emit('show');
267
293
  };
268
294
 
269
295
  /**
270
296
  * Hides the alert
271
297
  */
272
- Alert.prototype.hide = function() {
273
-
274
- };
298
+ Alert.prototype.hide = Alert.prototype.close;
275
299
 
276
300
  /**
277
301
  * Registers a handler for the close event
@@ -292,19 +316,3 @@ Alert.prototype.onShow = function(handler) {
292
316
  this.on('show', handler);
293
317
  return this;
294
318
  };
295
-
296
- /**
297
- * Sets the render function for the entire alert
298
- * @param {(alert: Alert, sections: {title: ValidChildren, content: ValidChildren, footer: ValidChildren, icon: ValidChildren}) => ValidChildren} renderFn - Function to render the alert
299
- * @returns {Alert}
300
- */
301
- Alert.prototype.render = function(renderFn) {
302
- this.$description.render = renderFn;
303
- return this;
304
- };
305
-
306
- Alert.prototype.$build = function() {
307
-
308
- };
309
-
310
- Alert.prototype.toNdElement = function() {};
@@ -1,6 +1,7 @@
1
1
  import {Validator} from "../../../index";
2
2
  import BaseComponent from "../BaseComponent";
3
3
  import Button from "../button/Button";
4
+ import DebugManager from "../../core/utils/debug-manager";
4
5
 
5
6
  /**
6
7
  * Component for displaying user avatars with images, initials, or icons
@@ -14,7 +15,7 @@ export default function Avatar(source, props = {}) {
14
15
  }
15
16
 
16
17
  this.$description = {
17
- src: BaseComponent.obs(source),
18
+ src: source ? BaseComponent.obs(source) : null,
18
19
  alt: null,
19
20
  name: null,
20
21
  initials: null,
@@ -44,7 +45,7 @@ Avatar.use = function(template) {
44
45
 
45
46
  Avatar.preset = function(name, callback) {
46
47
  if (Avatar.prototype[name] || Avatar[name]) {
47
- console.warn(`Warning: the ${name} method already exists in Avatar.`);
48
+ DebugManager.warn(`Warning: the ${name} method already exists in Avatar.`);
48
49
  return;
49
50
  }
50
51
  Avatar[name] = (label, props) => callback(new Avatar(label, props));
@@ -285,7 +286,7 @@ Avatar.prototype.textColor = function(color) {
285
286
  * @returns {Avatar}
286
287
  */
287
288
  Avatar.prototype.status = function(status) {
288
- this.$description.status = status;
289
+ this.$description.status = BaseComponent.obs(status);
289
290
  return this;
290
291
  };
291
292
 
@@ -10,6 +10,7 @@ export default function AvatarGroup(props = {}) {
10
10
  items: [],
11
11
  overlap: 0,
12
12
  max: 0,
13
+ onMoreClick: null,
13
14
  props,
14
15
  };
15
16
 
@@ -22,8 +23,8 @@ AvatarGroup.use = function(template) {
22
23
  AvatarGroup.defaultTemplate = template;
23
24
  };
24
25
 
25
- AvatarGroup.prototype.items = function() {
26
- this.$description.items = Array.from(arguments);
26
+ AvatarGroup.prototype.items = function(items) {
27
+ this.$description.items = items;
27
28
  return this;
28
29
  };
29
30
 
@@ -40,4 +41,9 @@ AvatarGroup.prototype.overlap = function(value) {
40
41
  AvatarGroup.prototype.max = function(max) {
41
42
  this.$description.max = max;
42
43
  return this;
44
+ };
45
+
46
+ AvatarGroup.prototype.onMoreClick = function(handler) {
47
+ this.$description.onMoreClick = handler;
48
+ return this;
43
49
  };
@@ -4,13 +4,13 @@ import DebugManager from "../../core/utils/debug-manager";
4
4
 
5
5
  export default function Badge(content, props = {}) {
6
6
  if(!(this instanceof Badge)) {
7
- return new Badge(props);
7
+ return new Badge(content, props);
8
8
  }
9
9
 
10
10
  BaseComponent.call(this, props);
11
11
 
12
12
  this.$description = {
13
- style: 'filled',
13
+ appearance: 'filled',
14
14
  borderRadiusType: 'pill',
15
15
  variant: 'primary',
16
16
  size: 'medium',
@@ -97,20 +97,20 @@ Badge.prototype.circle = function() {
97
97
  return this;
98
98
  };
99
99
 
100
- Badge.prototype.style = function(style) {
101
- this.$description.style = style;
100
+ Badge.prototype.appearance = function(appearance) {
101
+ this.$description.appearance = appearance;
102
102
  return this;
103
103
  };
104
104
  Badge.prototype.outline = function() {
105
- this.$description.style = 'outline';
105
+ this.$description.appearance = 'outline';
106
106
  return this;
107
107
  };
108
108
  Badge.prototype.filled = function() {
109
- this.$description.style = 'filled';
109
+ this.$description.appearance = 'filled';
110
110
  return this;
111
111
  };
112
112
  Badge.prototype.bordered = function() {
113
- this.$description.style = 'bordered';
113
+ this.$description.appearance = 'bordered';
114
114
  return this;
115
115
  };
116
116
 
File without changes
@@ -1,17 +1,19 @@
1
1
  import BaseComponent from "../BaseComponent";
2
2
  import HasEventEmitter from "../../core/utils/HasEventEmitter";
3
+ import { $ } from "../../../index";
4
+ import DebugManager from "../../core/utils/debug-manager";
3
5
 
4
- export default function Breadcrumb(config = {}) {
6
+ export default function Breadcrumb(props = {}) {
5
7
  if (!(this instanceof Breadcrumb)) {
6
- return new Breadcrumb(config);
8
+ return new Breadcrumb(props);
7
9
  }
8
10
 
9
11
  this.$description = {
10
12
  separator: null,
11
- items: [],
13
+ items: $.array([]),
12
14
  renderSeparator: null,
13
15
  renderItem: null,
14
- ...config,
16
+ props,
15
17
  };
16
18
  }
17
19
 
@@ -23,21 +25,37 @@ Breadcrumb.use = function(template) {
23
25
  Breadcrumb.defaultTemplate = template;
24
26
  };
25
27
 
26
- Breadcrumb.prototype.item = function(label, href) {
27
- this.$description.items.push({ label, href });
28
+ Breadcrumb.preset = function(name, callback) {
29
+ if (Breadcrumb.prototype[name] || Breadcrumb[name]) {
30
+ DebugManager.warn(`Warning: the ${name} method already exist in Breadcrumb.`);
31
+ return;
32
+ }
33
+ Breadcrumb[name] = (props) => callback(new Breadcrumb(props));
34
+ };
35
+
36
+ Breadcrumb.presets = function(presets) {
37
+ for (const name in presets) {
38
+ Breadcrumb.preset(name, presets[name]);
39
+ }
40
+ };
41
+
42
+ Breadcrumb.prototype.bind = function(source) {
43
+ this.$description.items = source.__$Observable ? source : $.array(source);
44
+ return this;
45
+ };
46
+
47
+ Breadcrumb.prototype.item = function(label, href, value) {
48
+ this.$description.items.push({ label, href, value: value || href });
28
49
  return this;
29
50
  };
30
51
  Breadcrumb.prototype.items = function(items) {
31
52
  this.$description.items = [];
32
53
  for(const item of items) {
33
- this.addItem(item.label, item.href);
54
+ this.item(item.label, item.href, item.value);
34
55
  }
35
56
  return this;
36
57
  };
37
- Breadcrumb.prototype.addItem = function(label, href) {
38
- this.$description.items.push({ label, href });
39
- return this;
40
- };
58
+
41
59
  Breadcrumb.prototype.removeItem = function(index) {
42
60
  this.$description.items.splice(index, 1);
43
61
  };
@@ -61,13 +79,4 @@ Breadcrumb.prototype.renderSeparator = function(renderFn) {
61
79
  Breadcrumb.prototype.renderItem = function(renderFn) {
62
80
  this.$description.renderItem = renderFn;
63
81
  return this;
64
- };
65
- Breadcrumb.prototype.render = function(renderFn) {
66
- this.$description.render = renderFn;
67
- return this;
68
- };
69
-
70
- Breadcrumb.prototype.$build = function() {
71
-
72
- };
73
- Breadcrumb.prototype.toNdElement = function() {};
82
+ };
@@ -1,4 +1,5 @@
1
1
  import BaseComponent from "../BaseComponent";
2
+ import DebugManager from "../../core/utils/debug-manager";
2
3
 
3
4
  export default function Button(label, props = {}) {
4
5
  if(!(this instanceof Button)) {
@@ -36,7 +37,7 @@ BaseComponent.extends(Button);
36
37
 
37
38
  Button.preset = function(name, callback) {
38
39
  if (Button.prototype[name] || Button[name]) {
39
- console.warn(`Warning: the ${name} method already exist in Button.`);
40
+ DebugManager.warn(`Warning: the ${name} method already exist in Button.`);
40
41
  return;
41
42
  }
42
43
  Button[name] = (label, props) => callback(new Button(label, props));
@@ -132,15 +133,11 @@ Button.prototype.loading = function(loading = true) {
132
133
  return this;
133
134
  }
134
135
 
135
- Button.prototype.disable = function(disabled = true) {
136
+ Button.prototype.disabled = function(disabled = true) {
136
137
  this.$description.disabled = BaseComponent.obs(disabled);
137
138
  return this;
138
139
  };
139
140
 
140
- Button.prototype.enable = function() {
141
- return this.disable(false);
142
- };
143
-
144
141
  Button.prototype.render = function(renderFunction) {
145
142
  this.$description.render = renderFunction;
146
143
  return this;
@@ -166,11 +163,3 @@ Button.prototype.block = function() {
166
163
  this.$description.block = true;
167
164
  return this;
168
165
  };
169
-
170
- Button.prototype.node = function() {
171
- return this.$build();
172
- };
173
-
174
- Button.prototype.toNdElement = function() {
175
- return this.$build();
176
- };
@@ -1,60 +1,83 @@
1
1
  import Menu from "../menu/Menu";
2
2
  import BaseComponent from "../BaseComponent";
3
+ import {NDElement} from "../../core/wrappers/NDElement";
4
+ import { $ } from '../../../index';
3
5
 
4
- export default function ContextMenu(config = {}) {
6
+ export default function ContextMenu(props = {}) {
5
7
  if(!(this instanceof ContextMenu)) {
6
- return new ContextMenu(config);
8
+ return new ContextMenu(props);
7
9
  }
8
- Menu.call(this, config);
10
+ BaseComponent.call(this, props);
9
11
 
10
12
  Object.assign(this.$description, {
11
13
  positionX: $(0),
12
14
  positionY: $(0),
13
- target: null,
15
+ isOpen: $(false),
16
+ menu: null,
17
+ contextContainer: null,
18
+ trigger: null,
14
19
  data: null,
15
- visibility: $(false)
16
20
  });
17
-
18
- this.onItemClick( () => this.hide());
19
21
  }
20
22
 
21
- ContextMenu.defaultTemplate = null;
22
- BaseComponent.extends(ContextMenu, Menu);
23
+ BaseComponent.extends(ContextMenu);
23
24
 
24
25
  ContextMenu.defaultTemplate = null;
26
+ ContextMenu.defaultHandler = null;
25
27
 
26
- ContextMenu.use = function(template) {
27
- ContextMenu.defaultTemplate = template.contextMenu;
28
- };
28
+ ContextMenu.use = function(template, handler) {
29
+ ContextMenu.defaultTemplate = template;
30
+ if(!handler) {
31
+ return;
32
+ }
33
+ if(ContextMenu.defaultHandler === handler) {
34
+ return
35
+ };
36
+ ContextMenu.defaultHandler = handler;
29
37
 
30
- ContextMenu.prototype.attachTo = function(target, data) {
31
- this.$description.target = target;
32
- target.addEventListener('contextmenu', (e) => {
33
- e.preventDefault();
34
- this.data(data);
35
- this.position(e.clientX, e.clientY).show();
36
- });
37
- return this;
38
+ if(!NDElement.prototype.contextMenu) {
39
+ NDElement.prototype.contextMenu = function(contextMenu, data = null) {
40
+ ContextMenu.defaultHandler(this, contextMenu, data);
41
+ return this;
42
+ };
43
+ }
44
+ if(!BaseComponent.prototype.contextMenu) {
45
+ BaseComponent.prototype.contextMenu = function(contextMenu, data = null) {
46
+ this.postBuild(() => {
47
+ ContextMenu.defaultHandler(this, contextMenu, data);
48
+ });
49
+ return this;
50
+ };
51
+ }
38
52
  };
39
53
 
40
-
41
54
  ContextMenu.prototype.position = function(x, y) {
42
55
  this.$description.positionX.set(x);
43
56
  this.$description.positionY.set(y);
44
57
  return this;
58
+ };
59
+
60
+ ContextMenu.prototype.trigger = function(trigger) {
61
+ this.$description.trigger = trigger;
62
+ return this;
45
63
  }
46
64
 
47
- ContextMenu.prototype.show = function() {
48
- this.$description.visibility.set(true);
65
+ ContextMenu.prototype.menu = function(callback, props = {}) {
66
+ const menu = new Menu(props);
67
+ menu.dataResolver(() => this.$description.data);
68
+ callback && callback(menu);
69
+ menu.vertical().onHovered();
70
+
71
+ this.$description.menu = menu;
49
72
  return this;
50
73
  };
51
74
 
52
75
  ContextMenu.prototype.hide = function() {
53
- this.$description.visibility.set(false);
76
+ this.$description.isOpen.set(false);
54
77
  return this;
55
78
  };
56
79
 
57
- ContextMenu.prototype.data = function(data) {
58
- this.$description.data = data;
80
+ ContextMenu.prototype.show = function() {
81
+ this.$description.isOpen.set(true);
59
82
  return this;
60
83
  };