@symbo.ls/utils 3.1.2 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +25 -12
  2. package/README.md +106 -0
  3. package/array.js +162 -0
  4. package/cache.js +7 -0
  5. package/cdn.js +83 -0
  6. package/component.js +25 -0
  7. package/cookie.js +71 -0
  8. package/detectHeight.js +42 -0
  9. package/dist/cjs/array.js +168 -0
  10. package/dist/cjs/browser.js +0 -2
  11. package/dist/cjs/cache.js +26 -0
  12. package/dist/cjs/cdn.js +85 -0
  13. package/dist/cjs/component.js +45 -0
  14. package/dist/cjs/cookie.js +75 -0
  15. package/dist/cjs/date.js +1 -3
  16. package/dist/cjs/detectHeight.js +22 -13
  17. package/dist/cjs/element.js +136 -0
  18. package/dist/cjs/env.js +43 -0
  19. package/dist/cjs/events.js +39 -0
  20. package/dist/cjs/extends.js +434 -0
  21. package/dist/cjs/fibonacci.js +1 -3
  22. package/dist/cjs/files.js +1 -3
  23. package/dist/cjs/function.js +114 -0
  24. package/dist/cjs/globals.js +30 -0
  25. package/dist/cjs/if.js +48 -0
  26. package/dist/cjs/index.js +38 -371
  27. package/dist/cjs/key.js +38 -0
  28. package/dist/cjs/keys.js +201 -0
  29. package/dist/cjs/load.js +67 -12
  30. package/dist/cjs/log.js +34 -0
  31. package/dist/cjs/metadata.js +310 -0
  32. package/dist/cjs/methods.js +599 -0
  33. package/dist/cjs/node.js +35 -0
  34. package/dist/cjs/object.js +634 -0
  35. package/dist/cjs/projectKeys.js +35 -0
  36. package/dist/cjs/props.js +282 -0
  37. package/dist/cjs/scaling.js +5 -169
  38. package/dist/cjs/scope.js +44 -0
  39. package/dist/cjs/sharedLibraries.js +146 -0
  40. package/dist/cjs/state.js +173 -0
  41. package/dist/cjs/string-extra.js +72 -0
  42. package/dist/cjs/string.js +183 -0
  43. package/dist/cjs/style.js +1 -3
  44. package/dist/cjs/tags.js +220 -0
  45. package/dist/cjs/triggerEvent.js +112 -0
  46. package/dist/cjs/types.js +74 -0
  47. package/dist/cjs/update.js +42 -0
  48. package/dist/esm/array.js +148 -0
  49. package/dist/esm/browser.js +14 -0
  50. package/dist/esm/cache.js +6 -0
  51. package/dist/esm/cdn.js +65 -0
  52. package/dist/esm/component.js +25 -0
  53. package/dist/esm/cookie.js +55 -0
  54. package/dist/esm/date.js +11 -0
  55. package/dist/esm/detectHeight.js +42 -0
  56. package/dist/esm/element.js +116 -0
  57. package/dist/esm/env.js +23 -0
  58. package/dist/esm/events.js +19 -0
  59. package/dist/esm/extends.js +414 -0
  60. package/dist/esm/fibonacci.js +10 -0
  61. package/dist/esm/files.js +4 -0
  62. package/dist/esm/function.js +94 -0
  63. package/dist/esm/globals.js +10 -0
  64. package/dist/esm/if.js +28 -0
  65. package/dist/esm/index.js +37 -0
  66. package/dist/esm/key.js +18 -0
  67. package/dist/esm/keys.js +181 -0
  68. package/dist/esm/load.js +151 -0
  69. package/dist/esm/log.js +14 -0
  70. package/dist/esm/metadata.js +290 -0
  71. package/dist/esm/methods.js +569 -0
  72. package/dist/esm/node.js +15 -0
  73. package/dist/esm/object.js +621 -0
  74. package/dist/esm/projectKeys.js +16 -0
  75. package/dist/esm/props.js +262 -0
  76. package/dist/esm/scaling.js +15 -0
  77. package/dist/esm/scope.js +24 -0
  78. package/dist/esm/sharedLibraries.js +126 -0
  79. package/dist/esm/state.js +163 -0
  80. package/dist/esm/string-extra.js +52 -0
  81. package/dist/esm/string.js +163 -0
  82. package/dist/esm/style.js +20 -0
  83. package/dist/esm/tags.js +200 -0
  84. package/dist/esm/triggerEvent.js +92 -0
  85. package/dist/esm/types.js +54 -0
  86. package/dist/esm/update.js +22 -0
  87. package/dist/iife/index.js +5818 -0
  88. package/element.js +148 -0
  89. package/env.js +15 -0
  90. package/events.js +19 -0
  91. package/extends.js +519 -0
  92. package/function.js +145 -0
  93. package/globals.js +8 -0
  94. package/if.js +30 -0
  95. package/index.js +41 -0
  96. package/key.js +20 -0
  97. package/keys.js +176 -0
  98. package/load.js +236 -0
  99. package/log.js +12 -0
  100. package/metadata.js +392 -0
  101. package/methods.js +636 -0
  102. package/node.js +37 -0
  103. package/object.js +803 -0
  104. package/package.json +38 -22
  105. package/projectKeys.js +30 -0
  106. package/props.js +327 -0
  107. package/{src/scaling.js → scaling.js} +1 -1
  108. package/scope.js +32 -0
  109. package/sharedLibraries.js +184 -0
  110. package/state.js +203 -0
  111. package/{src/index.js → string-extra.js} +22 -25
  112. package/string.js +206 -0
  113. package/tags.js +176 -0
  114. package/triggerEvent.js +102 -0
  115. package/types.js +55 -0
  116. package/update.js +27 -0
  117. package/dist/cjs/package.json +0 -4
  118. package/src/detectHeight.js +0 -31
  119. package/src/load.js +0 -105
  120. /package/{src/browser.js → browser.js} +0 -0
  121. /package/{src/date.js → date.js} +0 -0
  122. /package/{src/fibonacci.js → fibonacci.js} +0 -0
  123. /package/{src/files.js → files.js} +0 -0
  124. /package/{src/style.js → style.js} +0 -0
@@ -0,0 +1,116 @@
1
+ import { createExtends } from "./extends.js";
2
+ import { createKey } from "./key.js";
3
+ import { isNode } from "./node.js";
4
+ import { createProps } from "./props.js";
5
+ import { HTML_TAGS } from "./tags.js";
6
+ import { is, isFunction } from "./types.js";
7
+ const ENV = process.env.NODE_ENV;
8
+ const returnValueAsText = (element, parent, key) => {
9
+ const childExtendsTag = parent.childExtends && parent.childExtends.tag;
10
+ const childPropsTag = parent.childProps && parent.childProps.tag;
11
+ const isKeyValidHTMLTag = HTML_TAGS.body.has(key) && key;
12
+ return {
13
+ text: element,
14
+ tag: childExtendsTag || childPropsTag || isKeyValidHTMLTag || "string"
15
+ };
16
+ };
17
+ const createBasedOnType = (element, parent, key) => {
18
+ if (element === void 0) {
19
+ if (ENV === "test" || ENV === "development") {
20
+ console.warn(
21
+ key,
22
+ "element is undefined in",
23
+ parent?.__ref?.path
24
+ );
25
+ }
26
+ return {};
27
+ }
28
+ if (element === null) return;
29
+ if (element === true) return {};
30
+ if (is(element)("string", "number")) {
31
+ return returnValueAsText(element, parent, key);
32
+ }
33
+ if (isFunction(element)) {
34
+ return { props: element };
35
+ }
36
+ return element;
37
+ };
38
+ const addRef = (element, parent) => {
39
+ const ref = {};
40
+ ref.origin = element;
41
+ ref.parent = parent;
42
+ return ref;
43
+ };
44
+ const createParent = (element, parent, key, options, root) => {
45
+ if (!parent) return root;
46
+ if (isNode(parent)) {
47
+ const parentNodeWrapper = { key: ":root", node: parent };
48
+ root[`${key}_parent`] = parentNodeWrapper;
49
+ return parentNodeWrapper;
50
+ }
51
+ return parent;
52
+ };
53
+ const createRoot = (element, parent) => {
54
+ const { __ref: ref } = element;
55
+ const { __ref: parentRef } = parent;
56
+ const hasRoot = parent && parent.key === ":root";
57
+ if (!ref?.root) {
58
+ ref.root = hasRoot ? element : parentRef?.root;
59
+ }
60
+ };
61
+ const createPath = (element, parent, key) => {
62
+ let { __ref: parentRef } = parent;
63
+ if (!parentRef) parentRef = parent.ref = {};
64
+ if (!parentRef.path) parentRef.path = [];
65
+ return parentRef.path.concat(key);
66
+ };
67
+ const addContext = (element, parent, key, options, root) => {
68
+ const forcedOptionsContext = options.context && !root.context && !element.context;
69
+ if (forcedOptionsContext) root.context = options.context;
70
+ return options.context || parent.context || root.context || element.context;
71
+ };
72
+ const addCaching = (element, parent, key) => {
73
+ const ref = addRef(element, parent);
74
+ element.__ref = ref;
75
+ if (!ref.__defineCache) ref.__defineCache = {};
76
+ if (!ref.__exec) ref.__exec = {};
77
+ if (!ref.__execProps) ref.__execProps = {};
78
+ if (!ref.__class) ref.__class = {};
79
+ if (!ref.__classNames) ref.__classNames = {};
80
+ if (!ref.__attr) ref.__attr = {};
81
+ if (!ref.__changes) ref.__changes = [];
82
+ if (!ref.__children) ref.__children = [];
83
+ ref.__extends = createExtends(element, parent, key);
84
+ ref.path = createPath(element, parent, key);
85
+ return ref;
86
+ };
87
+ const createElement = (passedProps, parentEl, passedKey, opts, root) => {
88
+ const hashed = passedProps?.__hash;
89
+ const element = hashed ? { extends: [passedProps] } : createBasedOnType(passedProps, parentEl, passedKey);
90
+ if (!element) return;
91
+ const parent = createParent(element, parentEl, passedKey, opts, root);
92
+ const key = createKey(element, parent, passedKey);
93
+ addCaching(element, parent, key);
94
+ const props = createProps(element, parent, key);
95
+ const context = addContext(element, parent, key, opts, root);
96
+ const on = element.on || {};
97
+ return {
98
+ ...element,
99
+ key,
100
+ props,
101
+ parent,
102
+ context,
103
+ on
104
+ };
105
+ };
106
+ export {
107
+ addCaching,
108
+ addContext,
109
+ addRef,
110
+ createBasedOnType,
111
+ createElement,
112
+ createParent,
113
+ createPath,
114
+ createRoot,
115
+ returnValueAsText
116
+ };
@@ -0,0 +1,23 @@
1
+ // @preserve-env
2
+ const NODE_ENV = process.env.NODE_ENV;
3
+ const ENV = NODE_ENV;
4
+ const isProduction = (env = NODE_ENV) => env === "production";
5
+ const isTest = (env = NODE_ENV) => env === "testing" || env === "test";
6
+ const isTesting = isTest;
7
+ const isStaging = (env = NODE_ENV) => env === "staging";
8
+ const isLocal = (env = NODE_ENV) => env === "local";
9
+ const isDevelopment = (env = NODE_ENV) => env === "development" || env === "dev" || env === "local";
10
+ const getNev = (key, env = NODE_ENV) => env[key];
11
+ const isNotProduction = (env = NODE_ENV) => !isProduction(env);
12
+ export {
13
+ ENV,
14
+ NODE_ENV,
15
+ getNev,
16
+ isDevelopment,
17
+ isLocal,
18
+ isNotProduction,
19
+ isProduction,
20
+ isStaging,
21
+ isTest,
22
+ isTesting
23
+ };
@@ -0,0 +1,19 @@
1
+ import { lowercaseFirstLetter } from "./string.js";
2
+ import { isFunction } from "./types.js";
3
+ function addEventFromProps(key, obj) {
4
+ const { props, on } = obj;
5
+ const eventName = lowercaseFirstLetter(key.split("on")[1]);
6
+ const origEvent = on[eventName];
7
+ const funcFromProps = props[key];
8
+ if (isFunction(origEvent)) {
9
+ on[eventName] = (...args) => {
10
+ const originalEventRetunrs = origEvent(...args);
11
+ if (originalEventRetunrs !== false) {
12
+ if (isFunction(funcFromProps)) return funcFromProps(...args);
13
+ }
14
+ };
15
+ } else on[eventName] = funcFromProps;
16
+ }
17
+ export {
18
+ addEventFromProps
19
+ };
@@ -0,0 +1,414 @@
1
+ import { joinArrays, removeDuplicatesInArray } from "./array.js";
2
+ import { matchesComponentNaming } from "./component.js";
3
+ import { deepClone, exec } from "./object.js";
4
+ import { isArray, isObject, isString } from "./types.js";
5
+ const ENV = process.env.NODE_ENV;
6
+ const isSourcemapEnabled = (options) => options.sourcemap !== false && ENV !== "production";
7
+ const createExtendsFromKeys = (key) => {
8
+ if (key.includes("+")) {
9
+ return key.split("+").filter(matchesComponentNaming);
10
+ }
11
+ if (key.includes("_")) {
12
+ const [first] = key.split("_");
13
+ return [first];
14
+ }
15
+ if (key.includes(".") && !matchesComponentNaming(key.split(".")[1])) {
16
+ const [first] = key.split(".");
17
+ return [first];
18
+ }
19
+ return [key];
20
+ };
21
+ const createExtends = (element, parent, key) => {
22
+ let __extends = [];
23
+ const keyExtends = createExtendsFromKeys(key);
24
+ if (keyExtends) __extends = [...keyExtends];
25
+ const elementExtends = element.extends;
26
+ if (elementExtends) {
27
+ __extends = isArray(elementExtends) ? [...__extends, ...elementExtends] : [...__extends, elementExtends];
28
+ }
29
+ return __extends;
30
+ };
31
+ const addExtends = (newExtends, element) => {
32
+ const { __ref: ref } = element;
33
+ let { __extends } = ref;
34
+ if (!newExtends) return __extends;
35
+ const variant = element.variant;
36
+ const context = element.context;
37
+ if (variant && context?.components && !Array.isArray(newExtends) && typeof newExtends === "string") {
38
+ const variantKey = `${newExtends}.${variant}`;
39
+ if (context.components[variantKey]) {
40
+ newExtends = variantKey;
41
+ }
42
+ }
43
+ if (!__extends.includes(newExtends)) {
44
+ __extends = Array.isArray(newExtends) ? [...__extends, ...newExtends] : [...__extends, newExtends];
45
+ ref.__extends = __extends;
46
+ }
47
+ return __extends;
48
+ };
49
+ const concatAddExtends = (newExtend, element) => {
50
+ if (!newExtend) return element;
51
+ const { extends: elementExtend } = element;
52
+ const originalArray = isArray(elementExtend) ? elementExtend : [elementExtend];
53
+ const receivedArray = isArray(newExtend) ? newExtend : [newExtend];
54
+ return {
55
+ ...element,
56
+ extends: joinArrays(receivedArray, originalArray)
57
+ };
58
+ };
59
+ const generateHash = () => Math.random().toString(36).substring(2);
60
+ const extendStackRegistry = {};
61
+ const extendCachedRegistry = {};
62
+ const getHashedExtend = (extend) => {
63
+ return extendStackRegistry[extend.__hash];
64
+ };
65
+ const setHashedExtend = (extend, stack) => {
66
+ const hash = generateHash();
67
+ if (!isString(extend)) {
68
+ extend.__hash = hash;
69
+ }
70
+ if (hash !== "__proto__" && hash !== "constructor" && hash !== "prototype") {
71
+ extendStackRegistry[hash] = stack;
72
+ }
73
+ return stack;
74
+ };
75
+ const getExtendsStackRegistry = (extend, stack) => {
76
+ if (extend.__hash) {
77
+ return stack.concat(getHashedExtend(extend));
78
+ }
79
+ return setHashedExtend(extend, stack);
80
+ };
81
+ const extractArrayExtend = (extend, stack, context, processed = /* @__PURE__ */ new Set(), nameStack, componentNameMap) => {
82
+ for (const each of extend) {
83
+ if (isArray(each)) {
84
+ extractArrayExtend(each, stack, context, processed, nameStack, componentNameMap);
85
+ } else {
86
+ flattenExtend(each, stack, context, processed, nameStack, void 0, componentNameMap);
87
+ }
88
+ }
89
+ return stack;
90
+ };
91
+ const deepExtend = (extend, stack, context, processed = /* @__PURE__ */ new Set(), nameStack, currentName, componentNameMap) => {
92
+ const extendOflattenExtend = extend.extends;
93
+ const cleanExtend = { ...extend };
94
+ delete cleanExtend.extends;
95
+ let hasKeys = false;
96
+ for (const _k in cleanExtend) {
97
+ hasKeys = true;
98
+ break;
99
+ }
100
+ if (hasKeys) {
101
+ stack.push(cleanExtend);
102
+ if (nameStack) nameStack.push(currentName);
103
+ }
104
+ if (extendOflattenExtend) {
105
+ flattenExtend(extendOflattenExtend, stack, context, processed, nameStack, currentName, componentNameMap);
106
+ }
107
+ return stack;
108
+ };
109
+ const flattenExtend = (extend, stack, context, processed = /* @__PURE__ */ new Set(), nameStack, parentName, componentNameMap) => {
110
+ if (!extend) return stack;
111
+ if (processed.has(extend)) return stack;
112
+ if (isArray(extend)) {
113
+ return extractArrayExtend(extend, stack, context, processed, nameStack, componentNameMap);
114
+ }
115
+ let currentName = parentName;
116
+ if (isString(extend)) {
117
+ currentName = extend;
118
+ extend = mapStringsWithContextComponents(extend, context);
119
+ } else if (componentNameMap && isObject(extend) && componentNameMap.has(extend)) {
120
+ currentName = componentNameMap.get(extend);
121
+ }
122
+ processed.add(extend);
123
+ if (extend?.extends) {
124
+ deepExtend(extend, stack, context, processed, nameStack, currentName, componentNameMap);
125
+ } else if (extend) {
126
+ stack.push(extend);
127
+ if (nameStack) nameStack.push(currentName);
128
+ }
129
+ return stack;
130
+ };
131
+ const MERGE_EXTENDS_SKIP = /* @__PURE__ */ new Set([
132
+ "parent",
133
+ "node",
134
+ "__ref",
135
+ "__proto__",
136
+ "extends",
137
+ "childExtends",
138
+ "childExtendsRecursive"
139
+ ]);
140
+ const deepMergeExtends = (element, extend, sourcemap, sourceName, preBuiltSourcemap) => {
141
+ extend = deepClone(extend);
142
+ for (const e in extend) {
143
+ if (MERGE_EXTENDS_SKIP.has(e)) continue;
144
+ const elementProp = element[e];
145
+ const extendProp = extend[e];
146
+ if (extendProp === void 0) continue;
147
+ if (Object.prototype.hasOwnProperty.call(extend, e) && e !== "__proto__" && e !== "constructor" && e !== "prototype") {
148
+ if (elementProp === void 0) {
149
+ element[e] = extendProp;
150
+ if (sourcemap && sourceName) {
151
+ if (isObject(extendProp) && !isArray(extendProp)) {
152
+ sourcemap[e] = sourcemap[e] || {};
153
+ trackSourcemapDeep(sourcemap[e], extendProp, sourceName);
154
+ } else {
155
+ sourcemap[e] = sourceName;
156
+ }
157
+ } else if (sourcemap && preBuiltSourcemap?.[e]) {
158
+ sourcemap[e] = preBuiltSourcemap[e];
159
+ }
160
+ } else if (isObject(elementProp) && isObject(extendProp)) {
161
+ const nestedSourcemap = sourcemap ? sourcemap[e] = sourcemap[e] || {} : void 0;
162
+ const nestedPreBuilt = preBuiltSourcemap?.[e];
163
+ if (matchesComponentNaming(e)) {
164
+ element[e] = deepMergeExtends(elementProp, extendProp, nestedSourcemap, sourceName, nestedPreBuilt);
165
+ } else {
166
+ deepMergeExtends(elementProp, extendProp, nestedSourcemap, sourceName, nestedPreBuilt);
167
+ }
168
+ }
169
+ if (e === "extends" || e === "childExtends" || e === "childExtendsRecursive") {
170
+ if (isArray(elementProp) && isArray(extendProp)) {
171
+ element[e] = elementProp.concat(extendProp);
172
+ } else if (isArray(elementProp) && isObject(extendProp)) {
173
+ const obj = deepMergeExtends({}, elementProp);
174
+ element[e] = deepMergeExtends(obj, extendProp);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ return element;
180
+ };
181
+ const trackSourcemapDeep = (sourcemap, obj, sourceName, seen) => {
182
+ if (!seen) seen = /* @__PURE__ */ new WeakSet();
183
+ if (seen.has(obj)) return;
184
+ seen.add(obj);
185
+ for (const key in obj) {
186
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
187
+ if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
188
+ const val = obj[key];
189
+ if (isObject(val) && !isArray(val)) {
190
+ sourcemap[key] = sourcemap[key] || {};
191
+ trackSourcemapDeep(sourcemap[key], val, sourceName, seen);
192
+ } else {
193
+ sourcemap[key] = sourceName;
194
+ }
195
+ }
196
+ };
197
+ const cloneAndMergeArrayExtend = (stack, sourcemap, extendNames) => {
198
+ return stack.reduce((acc, current, i) => {
199
+ const cloned = deepClone(current);
200
+ const sourceName = extendNames ? extendNames[i] : void 0;
201
+ return deepMergeExtends(acc, cloned, sourcemap, sourceName);
202
+ }, {});
203
+ };
204
+ const mapStringsWithContextComponents = (extend, context, options = {}, variant) => {
205
+ const COMPONENTS = context?.components || options.components;
206
+ const PAGES = context?.pages || options.pages;
207
+ if (isString(extend)) {
208
+ const componentExists = COMPONENTS && (COMPONENTS[extend + "." + variant] || COMPONENTS[extend] || COMPONENTS["smbls." + extend]);
209
+ const pageExists = PAGES && extend.charCodeAt(0) === 47 && PAGES[extend];
210
+ if (componentExists) return componentExists;
211
+ else if (pageExists) return pageExists;
212
+ else {
213
+ if (options.verbose && (ENV === "test" || ENV === "development")) {
214
+ console.warn("Extend is string but component was not found:", extend);
215
+ }
216
+ return;
217
+ }
218
+ }
219
+ return extend;
220
+ };
221
+ const jointStacks = (extendStack, childExtendsStack) => {
222
+ return [].concat(extendStack.slice(0, 1)).concat(childExtendsStack.slice(0, 1)).concat(extendStack.slice(1)).concat(childExtendsStack.slice(1));
223
+ };
224
+ const getExtendsStack = (extend, context, nameStack, componentNameMap) => {
225
+ if (!extend) return [];
226
+ if (extend.__hash) return getHashedExtend(extend) || [];
227
+ const processed = /* @__PURE__ */ new Set();
228
+ const stack = flattenExtend(extend, [], context, processed, nameStack, void 0, componentNameMap);
229
+ if (nameStack) return stack;
230
+ return getExtendsStackRegistry(extend, stack);
231
+ };
232
+ const addExtend = (newExtends, elementExtends) => {
233
+ if (!newExtends) return elementExtends;
234
+ const receivedArray = isArray(newExtends) ? newExtends : [newExtends];
235
+ return joinArrays(receivedArray, elementExtends);
236
+ };
237
+ const getExtendsInElement = (obj) => {
238
+ let result = [];
239
+ function traverse(o) {
240
+ for (const key in o) {
241
+ if (Object.prototype.hasOwnProperty.call(o, key)) {
242
+ if (matchesComponentNaming(key)) {
243
+ result.push(key);
244
+ }
245
+ if (key === "extends") {
246
+ if (typeof o[key] === "string") {
247
+ result.push(o[key]);
248
+ } else if (Array.isArray(o[key])) {
249
+ result = result.concat(o[key]);
250
+ }
251
+ }
252
+ if (typeof o[key] === "object" && o[key] !== null) {
253
+ traverse(o[key]);
254
+ }
255
+ }
256
+ }
257
+ }
258
+ traverse(obj);
259
+ return result;
260
+ };
261
+ const createElementExtends = (element, parent, options = {}) => {
262
+ const { __ref: ref } = element;
263
+ const context = element.context || parent.context;
264
+ const variant = element.variant;
265
+ if (element.extends) {
266
+ if (Array.isArray(element.extends) && element.extends.length > 0) {
267
+ const [firstExtend, ...restExtends] = element.extends;
268
+ if (typeof firstExtend === "string" && variant && context?.components) {
269
+ const variantKey = `${firstExtend}.${variant}`;
270
+ if (context.components[variantKey]) {
271
+ addExtends([variantKey, ...restExtends], element);
272
+ } else {
273
+ addExtends(element.extends, element);
274
+ }
275
+ } else {
276
+ addExtends(element.extends, element);
277
+ }
278
+ } else if (typeof element.extends === "string" && variant && context?.components) {
279
+ const variantKey = `${element.extends}.${variant}`;
280
+ if (context.components[variantKey]) {
281
+ addExtends(variantKey, element);
282
+ } else {
283
+ addExtends(element.extends, element);
284
+ }
285
+ } else {
286
+ addExtends(element.extends, element);
287
+ }
288
+ }
289
+ inheritChildPropsExtends(element, parent, options);
290
+ inheritChildExtends(element, parent, options);
291
+ inheritRecursiveChildExtends(element, parent, options);
292
+ if (element.component) {
293
+ addExtends(exec(element.component, element), element);
294
+ }
295
+ if (context.defaultExtends) {
296
+ addExtends(context.defaultExtends, element);
297
+ }
298
+ return removeDuplicatesInArray(ref.__extends);
299
+ };
300
+ const inheritChildPropsExtends = (element, parent, options = {}) => {
301
+ const { __ref: ref } = element;
302
+ const ignoreChildExtends = options.ignoreChildExtends || element.ignoreChildExtends;
303
+ if (!ignoreChildExtends) {
304
+ if (parent.childProps?.extends) {
305
+ addExtends(parent.childProps.extends, element);
306
+ }
307
+ }
308
+ return ref.__extends;
309
+ };
310
+ const inheritChildExtends = (element, parent, options = {}) => {
311
+ const { __ref: ref } = element;
312
+ const ignoreChildExtends = options.ignoreChildExtends || element.ignoreChildExtends;
313
+ const childExtends = parent.childExtends;
314
+ if (!ignoreChildExtends && childExtends) {
315
+ addExtends(childExtends, element);
316
+ }
317
+ return ref.__extends;
318
+ };
319
+ const inheritRecursiveChildExtends = (element, parent, options = {}) => {
320
+ const { __ref: ref } = element;
321
+ const childExtendsRecursive = parent.childExtendsRecursive;
322
+ const ignoreChildExtendsRecursive = options.ignoreChildExtendsRecursive || element.ignoreChildExtendsRecursive;
323
+ const isText = element.key === "__text";
324
+ if (childExtendsRecursive && !isText && !ignoreChildExtendsRecursive) {
325
+ addExtends(childExtendsRecursive, element);
326
+ }
327
+ return ref.__extends;
328
+ };
329
+ const createExtendsStack = (element, parent, options = {}) => {
330
+ const { __ref: ref } = element;
331
+ const context = element.context || parent.context;
332
+ const variant = element.variant;
333
+ const sourcemap = isSourcemapEnabled(options);
334
+ const originalExtendNames = sourcemap ? [...ref.__extends] : null;
335
+ const __extends = removeDuplicatesInArray(
336
+ ref.__extends.map((val, i) => {
337
+ return mapStringsWithContextComponents(
338
+ val,
339
+ context,
340
+ options,
341
+ i === 0 && variant
342
+ );
343
+ })
344
+ );
345
+ if (sourcemap) {
346
+ const componentNameMap = /* @__PURE__ */ new WeakMap();
347
+ for (let i = 0; i < __extends.length; i++) {
348
+ const resolved = __extends[i];
349
+ const originalName = originalExtendNames[i];
350
+ if (resolved && isObject(resolved) && isString(originalName)) {
351
+ componentNameMap.set(resolved, originalName);
352
+ }
353
+ }
354
+ const nameStack = [];
355
+ const stack = getExtendsStack(__extends, context, nameStack, componentNameMap);
356
+ ref.__extendsStack = stack;
357
+ ref.__extendsNames = nameStack;
358
+ } else {
359
+ const stack = getExtendsStack(__extends, context);
360
+ ref.__extendsStack = stack;
361
+ }
362
+ return ref.__extendsStack;
363
+ };
364
+ const finalizeExtends = (element, parent, options = {}) => {
365
+ const { __ref: ref } = element;
366
+ const { __extendsStack } = ref;
367
+ if (isSourcemapEnabled(options)) {
368
+ const sourcemapAcc = {};
369
+ const extendNames = ref.__extendsNames || [];
370
+ const flattenExtends = cloneAndMergeArrayExtend(__extendsStack, sourcemapAcc, extendNames);
371
+ const appliedSourcemap = {};
372
+ deepMergeExtends(element, flattenExtends, appliedSourcemap, void 0, sourcemapAcc);
373
+ ref.__sourcemap = appliedSourcemap;
374
+ } else {
375
+ const flattenExtends = cloneAndMergeArrayExtend(__extendsStack);
376
+ deepMergeExtends(element, flattenExtends);
377
+ }
378
+ return element;
379
+ };
380
+ const applyExtends = (element, parent, options = {}) => {
381
+ createElementExtends(element, parent, options);
382
+ createExtendsStack(element, parent, options);
383
+ finalizeExtends(element, parent, options);
384
+ return element;
385
+ };
386
+ export {
387
+ addExtend,
388
+ addExtends,
389
+ applyExtends,
390
+ cloneAndMergeArrayExtend,
391
+ concatAddExtends,
392
+ createElementExtends,
393
+ createExtends,
394
+ createExtendsFromKeys,
395
+ createExtendsStack,
396
+ deepExtend,
397
+ deepMergeExtends,
398
+ extendCachedRegistry,
399
+ extendStackRegistry,
400
+ extractArrayExtend,
401
+ finalizeExtends,
402
+ flattenExtend,
403
+ generateHash,
404
+ getExtendsInElement,
405
+ getExtendsStack,
406
+ getExtendsStackRegistry,
407
+ getHashedExtend,
408
+ inheritChildExtends,
409
+ inheritChildPropsExtends,
410
+ inheritRecursiveChildExtends,
411
+ jointStacks,
412
+ mapStringsWithContextComponents,
413
+ setHashedExtend
414
+ };
@@ -0,0 +1,10 @@
1
+ const fibonacciNumberByIndex = function fibonacciNumberByIndex2(n) {
2
+ const fib = [0, 1];
3
+ for (let i = 2; i <= n; i++) {
4
+ fib[i] = fib[i - 1] + fib[i - 2];
5
+ }
6
+ return fib[n];
7
+ };
8
+ export {
9
+ fibonacciNumberByIndex
10
+ };
@@ -0,0 +1,4 @@
1
+ const isPhoto = (format) => ["jpeg", "gif", "jpg", "png", "tiff", "woff"].includes(format);
2
+ export {
3
+ isPhoto
4
+ };
@@ -0,0 +1,94 @@
1
+ function debounce(func, wait, immediate) {
2
+ let timeout;
3
+ return function() {
4
+ const context = this;
5
+ const args = arguments;
6
+ const later = function() {
7
+ timeout = null;
8
+ if (!immediate) func.apply(context, args);
9
+ };
10
+ const callNow = immediate && !timeout;
11
+ clearTimeout(timeout);
12
+ timeout = setTimeout(later, wait);
13
+ if (callNow) func.apply(context, args);
14
+ };
15
+ }
16
+ const debounceOnContext = (element, func, timeout = 300) => {
17
+ let timer;
18
+ return (...args) => {
19
+ clearTimeout(timer);
20
+ timer = setTimeout(() => {
21
+ func.apply(element, args);
22
+ }, timeout);
23
+ };
24
+ };
25
+ const memoize = (fn) => {
26
+ const cache = {};
27
+ return (...args) => {
28
+ const n = args[0];
29
+ if (n in cache) {
30
+ return cache[n];
31
+ } else {
32
+ const result = fn(n);
33
+ cache[n] = result;
34
+ return result;
35
+ }
36
+ };
37
+ };
38
+ const RE_STRING_FUNCTION = /^((function\s*\([^)]*\)\s*\{[^}]*\})|(\([^)]*\)\s*=>))/;
39
+ const isStringFunction = (inputString) => {
40
+ return RE_STRING_FUNCTION.test(inputString);
41
+ };
42
+ const hasHandlerPlugin = (ctx) => {
43
+ const plugins = ctx?.plugins;
44
+ if (!plugins || !plugins.length) return false;
45
+ for (const plugin of plugins) {
46
+ if (plugin.resolveHandler) return true;
47
+ }
48
+ return false;
49
+ };
50
+ const resolveHandler = (handler, element) => {
51
+ if (typeof handler === "function") return handler;
52
+ const plugins = element?.context?.plugins;
53
+ if (!plugins) return handler;
54
+ for (const plugin of plugins) {
55
+ if (plugin.resolveHandler) {
56
+ const resolved = plugin.resolveHandler(handler, element);
57
+ if (typeof resolved === "function") return resolved;
58
+ }
59
+ }
60
+ return handler;
61
+ };
62
+ const runPluginHook = (hookName, element, ...args) => {
63
+ const plugins = element?.context?.plugins;
64
+ if (!plugins) return false;
65
+ let handled = false;
66
+ for (const plugin of plugins) {
67
+ if (typeof plugin[hookName] === "function") {
68
+ plugin[hookName](element, ...args);
69
+ handled = true;
70
+ }
71
+ }
72
+ return handled;
73
+ };
74
+ function cloneFunction(fn, win = window) {
75
+ const temp = function() {
76
+ return fn.apply(win, arguments);
77
+ };
78
+ for (const key in fn) {
79
+ if (Object.prototype.hasOwnProperty.call(fn, key)) {
80
+ temp[key] = fn[key];
81
+ }
82
+ }
83
+ return temp;
84
+ }
85
+ export {
86
+ cloneFunction,
87
+ debounce,
88
+ debounceOnContext,
89
+ hasHandlerPlugin,
90
+ isStringFunction,
91
+ memoize,
92
+ resolveHandler,
93
+ runPluginHook
94
+ };
@@ -0,0 +1,10 @@
1
+ const global = globalThis;
2
+ const self = globalThis;
3
+ const window = globalThis;
4
+ const document = window.document;
5
+ export {
6
+ document,
7
+ global,
8
+ self,
9
+ window
10
+ };