native-document 1.0.76 → 1.0.78

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 (154) hide show
  1. package/components.js +26 -1
  2. package/dist/native-document.components.min.js +6447 -1984
  3. package/dist/native-document.dev.js +309 -196
  4. package/dist/native-document.dev.js.map +1 -1
  5. package/dist/native-document.devtools.min.js +1 -1
  6. package/dist/native-document.min.js +1 -1
  7. package/package.json +1 -1
  8. package/rollup.config.js +0 -14
  9. package/src/components/$traits/HasItems.js +38 -0
  10. package/src/components/BaseComponent.js +70 -0
  11. package/src/components/accordion/Accordion.js +133 -0
  12. package/src/components/accordion/AccordionItem.js +119 -0
  13. package/src/components/accordion/index.js +7 -0
  14. package/src/components/alert/Alert.js +155 -0
  15. package/src/components/alert/index.js +6 -0
  16. package/src/components/avatar/Avatar.js +178 -0
  17. package/src/components/avatar/index.js +5 -0
  18. package/src/components/badge/Badge.js +103 -0
  19. package/src/components/badge/index.js +6 -0
  20. package/src/components/breadcrumb/BreadCrumb.js +70 -0
  21. package/src/components/breadcrumb/index.js +5 -0
  22. package/src/components/button/Button.js +174 -0
  23. package/src/components/button/index.js +5 -0
  24. package/src/components/card/Card.js +110 -0
  25. package/src/components/card/index.js +5 -0
  26. package/src/components/context-menu/ContextMenu.js +60 -0
  27. package/src/components/context-menu/ContextMenuGroup.js +16 -0
  28. package/src/components/context-menu/ContextMenuItem.js +16 -0
  29. package/src/components/context-menu/index.js +10 -0
  30. package/src/components/divider/Divider.js +126 -0
  31. package/src/components/divider/index.js +6 -0
  32. package/src/components/dropdown/Dropdown.js +170 -0
  33. package/src/components/dropdown/DropdownDivider.js +24 -0
  34. package/src/components/dropdown/DropdownGroup.js +44 -0
  35. package/src/components/dropdown/DropdownItem.js +71 -0
  36. package/src/components/dropdown/DropdownTrigger.js +64 -0
  37. package/src/components/dropdown/index.js +13 -0
  38. package/src/components/{fom-control → form}/FormControl.js +28 -20
  39. package/src/components/{fom-control → form}/field/DefaultRender.js +1 -15
  40. package/src/components/{fom-control → form}/field/Field.js +64 -137
  41. package/src/components/{fom-control → form}/field/FieldCollection.js +39 -19
  42. package/src/components/{fom-control → form}/field/types/AutocompleteField.js +11 -0
  43. package/src/components/form/field/types/CheckboxField.js +36 -0
  44. package/src/components/{fom-control → form}/field/types/CheckboxGroupField.js +10 -0
  45. package/src/components/{fom-control → form}/field/types/ColorField.js +10 -0
  46. package/src/components/{fom-control → form}/field/types/DateField.js +10 -0
  47. package/src/components/{fom-control → form}/field/types/EmailField.js +10 -0
  48. package/src/components/{fom-control → form}/field/types/FileField.js +10 -0
  49. package/src/components/form/field/types/HiddenField.js +18 -0
  50. package/src/components/{fom-control → form}/field/types/ImageField.js +10 -0
  51. package/src/components/{fom-control → form}/field/types/NumberField.js +10 -0
  52. package/src/components/{fom-control → form}/field/types/PasswordField.js +10 -0
  53. package/src/components/{fom-control → form}/field/types/RadioField.js +28 -2
  54. package/src/components/{fom-control → form}/field/types/RangeField.js +10 -0
  55. package/src/components/{fom-control → form}/field/types/SearchField.js +10 -0
  56. package/src/components/{fom-control → form}/field/types/SelectField.js +10 -0
  57. package/src/components/{fom-control → form}/field/types/StringField.js +10 -0
  58. package/src/components/{fom-control → form}/field/types/TelField.js +10 -1
  59. package/src/components/{fom-control → form}/field/types/TextAreaField.js +10 -0
  60. package/src/components/{fom-control → form}/field/types/TimeField.js +10 -1
  61. package/src/components/{fom-control → form}/field/types/UrlField.js +9 -1
  62. package/src/components/form/index.js +49 -0
  63. package/src/components/list/List.js +106 -0
  64. package/src/components/list/ListGroup.js +67 -0
  65. package/src/components/list/ListItem.js +103 -0
  66. package/src/components/list/index.js +10 -0
  67. package/src/components/menu/Menu.js +82 -0
  68. package/src/components/menu/MenuDivider.js +22 -0
  69. package/src/components/menu/MenuGroup.js +42 -0
  70. package/src/components/menu/MenuItem.js +71 -0
  71. package/src/components/menu/index.js +13 -0
  72. package/src/components/modal/Modal.js +153 -0
  73. package/src/components/modal/index.js +5 -0
  74. package/src/components/pagination/Pagination.js +229 -0
  75. package/src/components/pagination/index.js +5 -0
  76. package/src/components/popover/Popover.js +185 -0
  77. package/src/components/popover/PopoverFooter.js +37 -0
  78. package/src/components/popover/PopoverHeader.js +43 -0
  79. package/src/components/popover/index.js +10 -0
  80. package/src/components/progress/Progress.js +220 -0
  81. package/src/components/progress/index.js +6 -0
  82. package/src/components/skeleton/Skeleton.js +98 -0
  83. package/src/components/skeleton/SkeletonCard.js +0 -0
  84. package/src/components/skeleton/SkeletonList.js +0 -0
  85. package/src/components/skeleton/SkeletonParagraph.js +0 -0
  86. package/src/components/skeleton/SkeletonTable.js +0 -0
  87. package/src/components/skeleton/index.js +6 -0
  88. package/src/components/slider/Slider.js +183 -0
  89. package/src/components/slider/index.js +5 -0
  90. package/src/components/spinner/Spinner.js +160 -0
  91. package/src/components/spinner/index.js +5 -0
  92. package/src/components/splitter/Splitter.js +94 -0
  93. package/src/components/splitter/SplitterGutter.js +57 -0
  94. package/src/components/splitter/SplitterPanel.js +82 -0
  95. package/src/components/splitter/index.js +8 -0
  96. package/src/components/stepper/Stepper.js +229 -0
  97. package/src/components/stepper/StepperStep.js +103 -0
  98. package/src/components/stepper/index.js +8 -0
  99. package/src/components/switch/Switch.js +99 -0
  100. package/src/components/switch/index.js +0 -0
  101. package/src/components/table/SimpleTable.js +36 -32
  102. package/src/components/tabs/Tabs.js +110 -0
  103. package/src/components/tabs/index.js +6 -0
  104. package/src/components/toast/Toast.js +129 -0
  105. package/src/components/toast/ToastError.js +0 -0
  106. package/src/components/toast/ToastInfo.js +0 -0
  107. package/src/components/toast/ToastSuccess.js +0 -0
  108. package/src/components/toast/ToastWarning.js +0 -0
  109. package/src/components/toast/index.js +5 -0
  110. package/src/components/tooltip/Tooltip.js +98 -0
  111. package/src/components/tooltip/index.js +5 -0
  112. package/src/components/tooltip/prototypes.js +6 -0
  113. package/src/core/data/MemoryManager.js +1 -2
  114. package/src/core/data/Observable.js +1 -1
  115. package/src/core/data/ObservableArray.js +10 -4
  116. package/src/core/data/ObservableItem.js +5 -5
  117. package/src/core/data/observable-helpers/array.js +1 -1
  118. package/src/core/data/observable-helpers/batch.js +1 -1
  119. package/src/core/data/observable-helpers/computed.js +1 -1
  120. package/src/core/elements/control/for-each-array.js +37 -64
  121. package/src/core/elements/control/for-each.js +1 -1
  122. package/src/core/elements/control/show-if.js +1 -1
  123. package/src/core/elements/control/switch.js +1 -1
  124. package/src/core/utils/events.js +68 -0
  125. package/src/core/utils/filters/standard.js +1 -1
  126. package/src/core/utils/filters/utils.js +1 -1
  127. package/src/core/utils/helpers.js +10 -7
  128. package/src/core/utils/validator.js +1 -0
  129. package/src/core/wrappers/AttributesWrapper.js +18 -35
  130. package/src/core/wrappers/DocumentObserver.js +0 -1
  131. package/src/core/wrappers/ElementCreator.js +6 -11
  132. package/src/core/wrappers/NdPrototype.js +24 -31
  133. package/src/core/wrappers/TemplateCloner.js +60 -18
  134. package/src/core/wrappers/constants.js +32 -1
  135. package/src/core/wrappers/prototypes/attributes-extensions.js +16 -3
  136. package/src/core/wrappers/prototypes/bind-class-extensions.js +18 -0
  137. package/src/devtools/app/App.js +1 -1
  138. package/src/devtools/hrm/ComponentRegistry.js +1 -1
  139. package/src/router/Router.js +1 -1
  140. package/src/router/link.js +4 -4
  141. package/src/router/modes/HistoryRouter.js +0 -1
  142. package/types/control-flow.d.ts +0 -1
  143. package/types/filters/standard.d.ts +0 -1
  144. package/src/components/fom-control/default/DefaultLayout.js +0 -8
  145. package/src/components/fom-control/default/collection/DefaultCollectionLayout.js +0 -12
  146. package/src/components/fom-control/default/collection/DefaultCollectionTemplate.js +0 -6
  147. package/src/components/fom-control/field/types/CheckboxField.js +0 -17
  148. package/src/components/fom-control/field/types/HiddenField.js +0 -8
  149. package/src/components/fom-control/index.js +0 -8
  150. /package/src/components/{fom-control → form}/field/FieldFactory.js +0 -0
  151. /package/src/components/{fom-control → form}/merge +0 -0
  152. /package/src/components/{fom-control → form}/utils.js +0 -0
  153. /package/src/components/{fom-control → form}/validation/Validation.js +0 -0
  154. /package/src/{core → router}/errors/RouterError.js +0 -0
@@ -1,6 +1,5 @@
1
1
  import {ElementCreator} from "./ElementCreator";
2
2
  import {createTextNode} from "./HtmlElementWrapper";
3
- import Anchor from "../elements/anchor";
4
3
  import TemplateBinding from "./TemplateBinding";
5
4
 
6
5
  const cloneBindingsDataCache = new WeakMap();
@@ -11,7 +10,7 @@ const bindAttributes = (node, bindDingData, data) => {
11
10
  if(bindDingData.attributes) {
12
11
  attributes = {};
13
12
  for (const attr in bindDingData.attributes) {
14
- attributes[attr] = bindDingData.attributes[attr](...data);
13
+ attributes[attr] = bindDingData.attributes[attr].apply(null, data);
15
14
  }
16
15
  }
17
16
 
@@ -19,7 +18,7 @@ const bindAttributes = (node, bindDingData, data) => {
19
18
  attributes = attributes || {};
20
19
  attributes.class = {};
21
20
  for (const className in bindDingData.classes) {
22
- attributes.class[className] = bindDingData.classes[className](...data);
21
+ attributes.class[className] = bindDingData.classes[className].apply(null, data);
23
22
  }
24
23
  }
25
24
 
@@ -27,7 +26,7 @@ const bindAttributes = (node, bindDingData, data) => {
27
26
  attributes = attributes || {};
28
27
  attributes.style = {};
29
28
  for (const property in bindDingData.styles) {
30
- attributes.style[property] = bindDingData.styles[property](...data);
29
+ attributes.style[property] = bindDingData.styles[property].apply(null, data);
31
30
  }
32
31
  }
33
32
 
@@ -39,6 +38,14 @@ const bindAttributes = (node, bindDingData, data) => {
39
38
  return null;
40
39
  };
41
40
 
41
+ const findByPath = (root, path) => {
42
+ let target = root;
43
+ for (let i = 0, len = path.length; i < len; i++) {
44
+ target = target.childNodes[path[i]];
45
+ }
46
+ return target;
47
+ };
48
+
42
49
  const $hydrateFn = function(hydrateFunction, targetType, element, property) {
43
50
  if(!cloneBindingsDataCache.has(element)) {
44
51
  // { classes, styles, attributes, value, attach }
@@ -59,7 +66,7 @@ const bindAttachMethods = function(node, bindDingData, data) {
59
66
  }
60
67
  for(const methodName in bindDingData.attach) {
61
68
  node.nd[methodName](function(...args) {
62
- bindDingData.attach[methodName].call(this, ...[...args, ...data]);
69
+ bindDingData.attach[methodName].apply(this, [...args, ...data]);
63
70
  });
64
71
  }
65
72
  };
@@ -68,44 +75,78 @@ export function TemplateCloner($fn) {
68
75
  let $node = null;
69
76
  let $hasBindingData = false;
70
77
 
71
- const clone = (node, data) => {
78
+ const $bindingPaths = [];
79
+
80
+ const clone = (node, data, path) => {
72
81
  const bindDingData = cloneBindingsDataCache.get(node);
73
82
  if(node.nodeType === 3) {
74
83
  if(bindDingData && bindDingData.value) {
84
+ $bindingPaths.push({
85
+ path: [...path],
86
+ fn: (data, targetNode, currentRoot) => {
87
+ const newNode = bindDingData.value(data);
88
+ targetNode.replaceWith(newNode);
89
+ if (targetNode === currentRoot) {
90
+ return newNode;
91
+ }
92
+ return null;
93
+ }
94
+ });
75
95
  return bindDingData.value(data);
76
96
  }
77
97
  return node.cloneNode(true);
78
98
  }
79
99
  const nodeCloned = node.cloneNode(node.fullCloneNode);
100
+ if(node.fullCloneNode) {
101
+ return nodeCloned;
102
+ }
80
103
  if(bindDingData) {
81
104
  bindAttributes(nodeCloned, bindDingData, data);
82
105
  bindAttachMethods(nodeCloned, bindDingData, data);
83
- }
84
- if(node.fullCloneNode) {
85
- return nodeCloned;
106
+ $bindingPaths.push({
107
+ path: [...path],
108
+ fn: (data, targetNode) => {
109
+ bindAttributes(targetNode, bindDingData, data);
110
+ bindAttachMethods(targetNode, bindDingData, data);
111
+ }
112
+ })
86
113
  }
87
114
  const childNodes = node.childNodes;
88
115
  for(let i = 0, length = childNodes.length; i < length; i++) {
89
116
  const childNode = childNodes[i];
90
- const childNodeCloned = clone(childNode, data);
117
+ path.push(i);
118
+ const childNodeCloned = clone(childNode, data, path);
119
+ path.pop();
91
120
  nodeCloned.appendChild(childNodeCloned);
92
121
  }
93
122
  return nodeCloned;
94
123
  };
95
124
 
96
- this.clone = (data) => {
97
- if(!$node) {
98
- $node = $fn(this);
99
- if(!$hasBindingData) {
100
- const nodeCloned = $node.cloneNode(true);
101
- nodeCloned.fullCloneNode = true;
102
- return nodeCloned;
125
+ const cloneWithBindingPaths = (data) => {
126
+ let root = $node.cloneNode(true);
127
+
128
+ for (let i = 0, len = $bindingPaths.length; i < len; i++) {
129
+ const binding = $bindingPaths[i];
130
+ const target = findByPath(root, binding.path);
131
+ const newRoot = binding.fn(data, target, root);
132
+ if(newRoot) {
133
+ root = newRoot;
103
134
  }
104
135
  }
136
+
137
+ return root;
138
+ };
139
+
140
+ this.clone = (data) => {
141
+ $node = $fn(this);
105
142
  if(!$hasBindingData) {
143
+ this.clone = () => $node.cloneNode(true);
106
144
  return $node.cloneNode(true);
107
145
  }
108
- return clone($node, data);
146
+
147
+ const firstClone = clone($node, data, []);
148
+ this.clone = cloneWithBindingPaths;
149
+ return firstClone;
109
150
  };
110
151
 
111
152
 
@@ -164,3 +205,4 @@ export function useCache(fn) {
164
205
  return wrapper([_, __, ...args]);
165
206
  };
166
207
  }
208
+ w
@@ -1,2 +1,33 @@
1
1
 
2
- export const BOOLEAN_ATTRIBUTES = ['checked', 'selected', 'disabled', 'readonly', 'required', 'autofocus', 'multiple', 'autocomplete', 'hidden', 'contenteditable', 'spellcheck', 'translate', 'draggable', 'async', 'defer', 'autoplay', 'controls', 'loop', 'muted', 'download', 'reversed', 'open', 'default', 'formnovalidate', 'novalidate', 'scoped', 'itemscope', 'allowfullscreen', 'allowpaymentrequest', 'playsinline'];
2
+ export const BOOLEAN_ATTRIBUTES = new Set([
3
+ 'checked',
4
+ 'selected',
5
+ 'disabled',
6
+ 'readonly',
7
+ 'required',
8
+ 'autofocus',
9
+ 'multiple',
10
+ 'autocomplete',
11
+ 'hidden',
12
+ 'contenteditable',
13
+ 'spellcheck',
14
+ 'translate',
15
+ 'draggable',
16
+ 'async',
17
+ 'defer',
18
+ 'autoplay',
19
+ 'controls',
20
+ 'loop',
21
+ 'muted',
22
+ 'download',
23
+ 'reversed',
24
+ 'open',
25
+ 'default',
26
+ 'formnovalidate',
27
+ 'novalidate',
28
+ 'scoped',
29
+ 'itemscope',
30
+ 'allowfullscreen',
31
+ 'allowpaymentrequest',
32
+ 'playsinline'
33
+ ]);
@@ -1,17 +1,30 @@
1
- import { bindAttributeWithObservable } from "../AttributesWrapper";
1
+ import {bindAttributeWithObservable, bindBooleanAttribute} from "../AttributesWrapper";
2
2
  import ObservableItem from "../../data/ObservableItem";
3
3
  import TemplateBinding from "../TemplateBinding";
4
-
4
+ import {BOOLEAN_ATTRIBUTES} from "../constants";
5
5
 
6
6
 
7
7
  String.prototype.handleNdAttribute = function(element, attributeName) {
8
8
  element.setAttribute(attributeName, this);
9
9
  };
10
10
 
11
+ Number.prototype.handleNdAttribute = function(element, attributeName) {
12
+ element.setAttribute(attributeName, this);
13
+ };
14
+
15
+ Boolean.prototype.handleNdAttribute = function(element, attrName) {
16
+ bindBooleanAttribute(element, attrName, this);
17
+ };
18
+
11
19
  ObservableItem.prototype.handleNdAttribute = function(element, attributeName) {
20
+ if(BOOLEAN_ATTRIBUTES.has(attributeName)) {
21
+ bindBooleanAttribute(element, attributeName, this);
22
+ return;
23
+ }
24
+
12
25
  bindAttributeWithObservable(element, attributeName, this);
13
26
  };
14
27
 
15
28
  TemplateBinding.prototype.handleNdAttribute = function(element, attributeName) {
16
29
  this.$hydrate(element, attributeName);
17
- };
30
+ };
@@ -0,0 +1,18 @@
1
+ import ObservableItem from "../../../core/data/ObservableItem";
2
+ import {toggleElementClass} from "../AttributesWrapper";
3
+ import {ObservableWhen} from "../../data/ObservableWhen";
4
+ import TemplateBinding from "../../../core/wrappers/TemplateBinding";
5
+
6
+ ObservableItem.prototype.bindNdClass = function(element, className) {
7
+ element.classes.toggle(className, this.val());
8
+ this.subscribe(toggleElementClass.bind(null, element, className));
9
+ };
10
+
11
+ ObservableWhen.prototype.bindNdClass = function(element, className) {
12
+ element.classes.toggle(className, this.isMath());
13
+ this.subscribe(toggleElementClass.bind(null, element, className));
14
+ };
15
+
16
+ TemplateBinding.prototype.bindNdClass = function(element, className) {
17
+ this.$hydrate(element, className);
18
+ };
@@ -1,5 +1,5 @@
1
1
  import {Div} from "../../../elements";
2
- import DevToolsWidget from "../widget/DevToolsWidget";
2
+ import DevToolsWidget from "../../devtools/widget/DevToolsWidget";
3
3
 
4
4
  export default function App() {
5
5
 
@@ -1,4 +1,4 @@
1
- import {Anchor} from "../../../elements.js";
1
+ import {Anchor} from "../../../elements";
2
2
  import Validator from "../../core/utils/validator";
3
3
 
4
4
  const ComponentRegistry = (function() {
@@ -1,6 +1,6 @@
1
1
  import {Route} from "./Route.js";
2
2
  import Validator from "../core/utils/validator.js";
3
- import RouterError from "../core/errors/RouterError.js";
3
+ import RouterError from "./errors/RouterError.js";
4
4
  import {RouteGroupHelper} from "./RouteGroupHelper.js";
5
5
  import {trim} from "../core/utils/helpers.js";
6
6
  import HashRouter from "./modes/HashRouter.js";
@@ -1,7 +1,7 @@
1
- import Validator from "../core/utils/validator.js";
2
- import {Link as NativeLink} from "../../elements.js";
3
- import Router, {DEFAULT_ROUTER_NAME} from "./Router.js";
4
- import RouterError from "../core/errors/RouterError.js";
1
+ import Validator from "../core/utils/validator";
2
+ import {Link as NativeLink} from "../../elements";
3
+ import Router, {DEFAULT_ROUTER_NAME} from "./Router";
4
+ import RouterError from "./errors/RouterError";
5
5
 
6
6
 
7
7
  export function Link(options, children){
@@ -1,4 +1,3 @@
1
- import RouterError from '../../core/errors/RouterError';
2
1
  import DebugManager from "../../core/utils/debug-manager.js";
3
2
 
4
3
  export default function HistoryRouter() {
@@ -37,7 +37,6 @@ export interface ForEachFunction {
37
37
  export interface ForEachArrayFunction {
38
38
  <T>(data: ObservableArray<T>,
39
39
  callback: (item: T, index?: ObservableItem<number>) => ValidChild,
40
- key?: string | ((item: T, defaultKey: number) => string),
41
40
  configs?: { pushDelay?: (items: T[]) => number, isParentUniqueChild: boolean, shouldKeepItemsInCache?: boolean }): DocumentFragment;
42
41
  }
43
42
 
@@ -1,5 +1,4 @@
1
1
  import { ObservableOrValue, FilterResult } from './types';
2
- import {ObservableItem} from "../observable";
3
2
 
4
3
 
5
4
  export function equals<T>(
@@ -1,8 +0,0 @@
1
- import {Button, Form} from "../../../../elements";
2
-
3
- export default function DefaultLayout({ fields, form }) {
4
- return Form([
5
- Object.values(fields),
6
- Button({ type: 'submit', disabled: form.submitting }, 'Submit')
7
- ]);
8
- }
@@ -1,12 +0,0 @@
1
- import {Button} from "../../../../../elements";
2
-
3
- export default function DefaultCollectionLayout({collection, data, Template}) {
4
-
5
- return Div({ class: 'field-collection-layout'}, [
6
- Div({ class: 'field-collection-layout-header'}, [
7
- Button({ class: 'field-collection-layout-add-btn', type: 'button' }, ['Add +'])
8
- .nd.onClick(() => collection.add())
9
- ]),
10
- ForEachArray(data, Template)
11
- ]);
12
- }
@@ -1,6 +0,0 @@
1
-
2
-
3
- export default function DefaultCollectionTemplate(item, index, {collection, fields}) {
4
-
5
- return Object.values(fields);
6
- }
@@ -1,17 +0,0 @@
1
- import Field from "../Field";
2
-
3
- export default function CheckboxField(name, defaultConfig) {
4
- Field.call(this, name, 'checkbox', defaultConfig);
5
-
6
- Object.assign(this.$description, {
7
- checked: false,
8
- });
9
- }
10
-
11
- CheckboxField.prototype = Object.create(Field.prototype);
12
- CheckboxField.prototype.constructor = CheckboxField;
13
-
14
- CheckboxField.prototype.checked = function(value) {
15
- this.$description.checked = value;
16
- return this;
17
- };
@@ -1,8 +0,0 @@
1
- import Field from "../Field";
2
-
3
- export default function HiddenField(name, defaultConfig) {
4
- Field.call(this, name, 'hidden', defaultConfig);
5
- }
6
-
7
- HiddenField.prototype = Object.create(Field.prototype);
8
- HiddenField.prototype.constructor = HiddenField;
@@ -1,8 +0,0 @@
1
- import Field from "./field/Field";
2
- import FormControl from "./FormControl";
3
- import './field/FieldFactory';
4
-
5
- export {
6
- Field,
7
- FormControl,
8
- }
File without changes
File without changes
File without changes