@startinblox/core 0.17.21-beta.1 → 0.17.21-beta.10

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 (260) hide show
  1. package/dist/_snowpack/env.js +3 -0
  2. package/dist/_snowpack/pkg/autolinker.js +4281 -0
  3. package/dist/_snowpack/pkg/autolinker.js.map +1 -0
  4. package/dist/_snowpack/pkg/autolinker.js.map.proxy.js +1 -0
  5. package/dist/_snowpack/pkg/common/_baseUnary-217dffb2.js +377 -0
  6. package/dist/_snowpack/pkg/common/_baseUnary-217dffb2.js.map +1 -0
  7. package/dist/_snowpack/pkg/common/_baseUnary-217dffb2.js.map.proxy.js +1 -0
  8. package/dist/_snowpack/pkg/common/_commonjsHelpers-8c19dec8.js +22 -0
  9. package/dist/_snowpack/pkg/common/_commonjsHelpers-8c19dec8.js.map +1 -0
  10. package/dist/_snowpack/pkg/common/_commonjsHelpers-8c19dec8.js.map.proxy.js +1 -0
  11. package/dist/_snowpack/pkg/common/decode-a4c334cf.js +216 -0
  12. package/dist/_snowpack/pkg/common/decode-a4c334cf.js.map +1 -0
  13. package/dist/_snowpack/pkg/common/decode-a4c334cf.js.map.proxy.js +1 -0
  14. package/dist/_snowpack/pkg/common/lit-html-babd44cd.js +1119 -0
  15. package/dist/_snowpack/pkg/common/lit-html-babd44cd.js.map +1 -0
  16. package/dist/_snowpack/pkg/common/lit-html-babd44cd.js.map.proxy.js +1 -0
  17. package/dist/_snowpack/pkg/delta-markdown-for-quill.js +25677 -0
  18. package/dist/_snowpack/pkg/delta-markdown-for-quill.js.map +1 -0
  19. package/dist/_snowpack/pkg/delta-markdown-for-quill.js.map.proxy.js +1 -0
  20. package/dist/_snowpack/pkg/dialog-polyfill.js +859 -0
  21. package/dist/_snowpack/pkg/dialog-polyfill.js.map +1 -0
  22. package/dist/_snowpack/pkg/dialog-polyfill.js.map.proxy.js +1 -0
  23. package/dist/_snowpack/pkg/fusejs.js +1783 -0
  24. package/dist/_snowpack/pkg/fusejs.js.map +1 -0
  25. package/dist/_snowpack/pkg/fusejs.js.map.proxy.js +1 -0
  26. package/dist/_snowpack/pkg/import-map.json +23 -0
  27. package/dist/_snowpack/pkg/jsonld-context-parser.js +804 -0
  28. package/dist/_snowpack/pkg/jsonld-context-parser.js.map +1 -0
  29. package/dist/_snowpack/pkg/jsonld-context-parser.js.map.proxy.js +1 -0
  30. package/dist/_snowpack/pkg/leaflet/dist/leaflet.css +640 -0
  31. package/dist/_snowpack/pkg/leaflet/dist/leaflet.css.proxy.js +10 -0
  32. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.Default.css +60 -0
  33. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.Default.css.proxy.js +10 -0
  34. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.css +14 -0
  35. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.css.proxy.js +10 -0
  36. package/dist/_snowpack/pkg/lit-html/directives/if-defined.js +40 -0
  37. package/dist/_snowpack/pkg/lit-html/directives/if-defined.js.map +1 -0
  38. package/dist/_snowpack/pkg/lit-html/directives/if-defined.js.map.proxy.js +1 -0
  39. package/dist/_snowpack/pkg/lit-html/directives/unsafe-html.js +46 -0
  40. package/dist/_snowpack/pkg/lit-html/directives/unsafe-html.js.map +1 -0
  41. package/dist/_snowpack/pkg/lit-html/directives/unsafe-html.js.map.proxy.js +1 -0
  42. package/dist/_snowpack/pkg/lit-html/directives/until.js +88 -0
  43. package/dist/_snowpack/pkg/lit-html/directives/until.js.map +1 -0
  44. package/dist/_snowpack/pkg/lit-html/directives/until.js.map.proxy.js +1 -0
  45. package/dist/_snowpack/pkg/lit-html.js +92 -0
  46. package/dist/_snowpack/pkg/lit-html.js.map +1 -0
  47. package/dist/_snowpack/pkg/lit-html.js.map.proxy.js +1 -0
  48. package/dist/_snowpack/pkg/markdown-it.js +11860 -0
  49. package/dist/_snowpack/pkg/markdown-it.js.map +1 -0
  50. package/dist/_snowpack/pkg/markdown-it.js.map.proxy.js +1 -0
  51. package/dist/_snowpack/pkg/quill/dist/quill.snow.css +945 -0
  52. package/dist/_snowpack/pkg/quill/dist/quill.snow.css.proxy.js +10 -0
  53. package/dist/_snowpack/pkg/quill-delta-to-markdown.js +1029 -0
  54. package/dist/_snowpack/pkg/quill-delta-to-markdown.js.map +1 -0
  55. package/dist/_snowpack/pkg/quill-delta-to-markdown.js.map.proxy.js +1 -0
  56. package/dist/_snowpack/pkg/quill.js +13382 -0
  57. package/dist/_snowpack/pkg/quill.js.map +1 -0
  58. package/dist/_snowpack/pkg/quill.js.map.proxy.js +1 -0
  59. package/dist/_snowpack/pkg/slim-select.js +4 -0
  60. package/dist/_snowpack/pkg/slim-select.js.map +1 -0
  61. package/dist/_snowpack/pkg/slim-select.js.map.proxy.js +1 -0
  62. package/dist/_snowpack/pkg/tui-calendar/dist/tui-calendar.css +1164 -0
  63. package/dist/_snowpack/pkg/tui-calendar/dist/tui-calendar.css.proxy.js +10 -0
  64. package/dist/_snowpack/pkg/tui-calendar.js +42285 -0
  65. package/dist/_snowpack/pkg/tui-calendar.js.map +1 -0
  66. package/dist/_snowpack/pkg/tui-calendar.js.map.proxy.js +1 -0
  67. package/dist/components/solid-ac-checker.js +51 -0
  68. package/dist/components/solid-ac-checker.js.map +1 -0
  69. package/dist/components/solid-calendar.js +87 -0
  70. package/dist/components/solid-calendar.js.map +1 -0
  71. package/dist/components/solid-delete.js +111 -0
  72. package/dist/components/solid-delete.js.map +1 -0
  73. package/dist/components/solid-display.js +194 -0
  74. package/dist/components/solid-display.js.map +1 -0
  75. package/dist/components/solid-form-search.js +226 -0
  76. package/dist/components/solid-form-search.js.map +1 -0
  77. package/dist/components/solid-form.js +354 -0
  78. package/dist/components/solid-form.js.map +1 -0
  79. package/dist/components/solid-lang.js +46 -0
  80. package/dist/components/solid-lang.js.map +1 -0
  81. package/dist/components/solid-map.js +242 -0
  82. package/dist/components/solid-map.js.map +1 -0
  83. package/dist/components/solid-table.js +263 -0
  84. package/dist/components/solid-table.js.map +1 -0
  85. package/dist/components/solid-widget.js +94 -0
  86. package/dist/components/solid-widget.js.map +1 -0
  87. package/dist/import.css +4 -0
  88. package/dist/index.js +43 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/libs/Component.js +19 -0
  91. package/dist/libs/Component.js.map +1 -0
  92. package/dist/libs/ComponentFactory.js +196 -0
  93. package/dist/libs/ComponentFactory.js.map +1 -0
  94. package/dist/libs/Compositor.js +103 -0
  95. package/dist/libs/Compositor.js.map +1 -0
  96. package/dist/libs/Sib.js +58 -0
  97. package/dist/libs/Sib.js.map +1 -0
  98. package/dist/libs/filter.js +214 -0
  99. package/dist/libs/filter.js.map +1 -0
  100. package/dist/libs/helpers.js +219 -0
  101. package/dist/libs/helpers.js.map +1 -0
  102. package/dist/libs/interfaces.js +6 -0
  103. package/dist/libs/interfaces.js.map +1 -0
  104. package/dist/libs/lit-helpers.js +169 -0
  105. package/dist/libs/lit-helpers.js.map +1 -0
  106. package/dist/libs/polyfills.js +40 -0
  107. package/dist/libs/polyfills.js.map +1 -0
  108. package/dist/libs/store/store.js +863 -0
  109. package/dist/libs/store/store.js.map +1 -0
  110. package/dist/locales/en.json +10 -0
  111. package/dist/locales/en.json.proxy.js +2 -0
  112. package/dist/locales/fr.json +10 -0
  113. package/dist/locales/fr.json.proxy.js +2 -0
  114. package/dist/mixins/attributeBinderMixin.js +124 -0
  115. package/dist/mixins/attributeBinderMixin.js.map +1 -0
  116. package/dist/mixins/contextMixin.js +28 -0
  117. package/dist/mixins/contextMixin.js.map +1 -0
  118. package/dist/mixins/counterMixin.js +75 -0
  119. package/dist/mixins/counterMixin.js.map +1 -0
  120. package/dist/mixins/federationMixin.js +63 -0
  121. package/dist/mixins/federationMixin.js.map +1 -0
  122. package/dist/mixins/filterMixin.js +136 -0
  123. package/dist/mixins/filterMixin.js.map +1 -0
  124. package/dist/mixins/grouperMixin.js +80 -0
  125. package/dist/mixins/grouperMixin.js.map +1 -0
  126. package/dist/mixins/highlighterMixin.js +42 -0
  127. package/dist/mixins/highlighterMixin.js.map +1 -0
  128. package/dist/mixins/interfaces.js +8 -0
  129. package/dist/mixins/interfaces.js.map +1 -0
  130. package/dist/mixins/listMixin.js +136 -0
  131. package/dist/mixins/listMixin.js.map +1 -0
  132. package/dist/mixins/nextMixin.js +26 -0
  133. package/dist/mixins/nextMixin.js.map +1 -0
  134. package/dist/mixins/paginateMixin.js +110 -0
  135. package/dist/mixins/paginateMixin.js.map +1 -0
  136. package/dist/mixins/requiredMixin.js +34 -0
  137. package/dist/mixins/requiredMixin.js.map +1 -0
  138. package/dist/mixins/sorterMixin.js +149 -0
  139. package/dist/mixins/sorterMixin.js.map +1 -0
  140. package/dist/mixins/storeMixin.js +102 -0
  141. package/dist/mixins/storeMixin.js.map +1 -0
  142. package/dist/mixins/translationMixin.js +68 -0
  143. package/dist/mixins/translationMixin.js.map +1 -0
  144. package/dist/mixins/validationMixin.js +113 -0
  145. package/dist/mixins/validationMixin.js.map +1 -0
  146. package/dist/mixins/widgetMixin.js +447 -0
  147. package/dist/mixins/widgetMixin.js.map +1 -0
  148. package/dist/new-widgets/attributeMixins/actionMixin.js +14 -0
  149. package/dist/new-widgets/attributeMixins/actionMixin.js.map +1 -0
  150. package/dist/new-widgets/attributeMixins/blankMixin.js +10 -0
  151. package/dist/new-widgets/attributeMixins/blankMixin.js.map +1 -0
  152. package/dist/new-widgets/attributeMixins/booleanMixin.js +10 -0
  153. package/dist/new-widgets/attributeMixins/booleanMixin.js.map +1 -0
  154. package/dist/new-widgets/attributeMixins/index.js +20 -0
  155. package/dist/new-widgets/attributeMixins/index.js.map +1 -0
  156. package/dist/new-widgets/attributeMixins/mailtoMixin.js +10 -0
  157. package/dist/new-widgets/attributeMixins/mailtoMixin.js.map +1 -0
  158. package/dist/new-widgets/attributeMixins/multipleMixin.js +28 -0
  159. package/dist/new-widgets/attributeMixins/multipleMixin.js.map +1 -0
  160. package/dist/new-widgets/attributeMixins/numberMixin.js +10 -0
  161. package/dist/new-widgets/attributeMixins/numberMixin.js.map +1 -0
  162. package/dist/new-widgets/attributeMixins/placeholderMixin.js +19 -0
  163. package/dist/new-widgets/attributeMixins/placeholderMixin.js.map +1 -0
  164. package/dist/new-widgets/attributeMixins/telMixin.js +10 -0
  165. package/dist/new-widgets/attributeMixins/telMixin.js.map +1 -0
  166. package/dist/new-widgets/baseWidgetMixin.js +122 -0
  167. package/dist/new-widgets/baseWidgetMixin.js.map +1 -0
  168. package/dist/new-widgets/callbackMixins/autocompletionMixin.js +104 -0
  169. package/dist/new-widgets/callbackMixins/autocompletionMixin.js.map +1 -0
  170. package/dist/new-widgets/callbackMixins/index.js +8 -0
  171. package/dist/new-widgets/callbackMixins/index.js.map +1 -0
  172. package/dist/new-widgets/callbackMixins/richtextMixin.js +42 -0
  173. package/dist/new-widgets/callbackMixins/richtextMixin.js.map +1 -0
  174. package/dist/new-widgets/callbackMixins/slimselect.css +2 -0
  175. package/dist/new-widgets/callbackMixins/slimselect.css.proxy.js +10 -0
  176. package/dist/new-widgets/new-widget-factory.js +96 -0
  177. package/dist/new-widgets/new-widget-factory.js.map +1 -0
  178. package/dist/new-widgets/templateAdditionMixins/addableMixin.js +41 -0
  179. package/dist/new-widgets/templateAdditionMixins/addableMixin.js.map +1 -0
  180. package/dist/new-widgets/templateAdditionMixins/index.js +14 -0
  181. package/dist/new-widgets/templateAdditionMixins/index.js.map +1 -0
  182. package/dist/new-widgets/templateAdditionMixins/labelLastMixin.js +29 -0
  183. package/dist/new-widgets/templateAdditionMixins/labelLastMixin.js.map +1 -0
  184. package/dist/new-widgets/templateAdditionMixins/labelMixin.js +31 -0
  185. package/dist/new-widgets/templateAdditionMixins/labelMixin.js.map +1 -0
  186. package/dist/new-widgets/templates/defaultTemplatesDirectory.js +36 -0
  187. package/dist/new-widgets/templates/defaultTemplatesDirectory.js.map +1 -0
  188. package/dist/new-widgets/templates/displayTemplatesDirectory.js +90 -0
  189. package/dist/new-widgets/templates/displayTemplatesDirectory.js.map +1 -0
  190. package/dist/new-widgets/templates/formTemplatesDirectory.js +397 -0
  191. package/dist/new-widgets/templates/formTemplatesDirectory.js.map +1 -0
  192. package/dist/new-widgets/templates/groupTemplatesDirectory.js +21 -0
  193. package/dist/new-widgets/templates/groupTemplatesDirectory.js.map +1 -0
  194. package/dist/new-widgets/templates/index.js +7 -0
  195. package/dist/new-widgets/templates/index.js.map +1 -0
  196. package/dist/new-widgets/templates/setTemplatesDirectory.js +49 -0
  197. package/dist/new-widgets/templates/setTemplatesDirectory.js.map +1 -0
  198. package/dist/new-widgets/templatesDependencies/altMixin.js +13 -0
  199. package/dist/new-widgets/templatesDependencies/altMixin.js.map +1 -0
  200. package/dist/new-widgets/templatesDependencies/editableMixin.js +77 -0
  201. package/dist/new-widgets/templatesDependencies/editableMixin.js.map +1 -0
  202. package/dist/new-widgets/templatesDependencies/filterRangeFormMixin.js +38 -0
  203. package/dist/new-widgets/templatesDependencies/filterRangeFormMixin.js.map +1 -0
  204. package/dist/new-widgets/templatesDependencies/formCheckboxMixin.js +14 -0
  205. package/dist/new-widgets/templatesDependencies/formCheckboxMixin.js.map +1 -0
  206. package/dist/new-widgets/templatesDependencies/formCheckboxesMixin.js +51 -0
  207. package/dist/new-widgets/templatesDependencies/formCheckboxesMixin.js.map +1 -0
  208. package/dist/new-widgets/templatesDependencies/formDropdownMixin.js +66 -0
  209. package/dist/new-widgets/templatesDependencies/formDropdownMixin.js.map +1 -0
  210. package/dist/new-widgets/templatesDependencies/formFileMixin.js +81 -0
  211. package/dist/new-widgets/templatesDependencies/formFileMixin.js.map +1 -0
  212. package/dist/new-widgets/templatesDependencies/formLengthMixin.js +19 -0
  213. package/dist/new-widgets/templatesDependencies/formLengthMixin.js.map +1 -0
  214. package/dist/new-widgets/templatesDependencies/formMinMaxMixin.js +19 -0
  215. package/dist/new-widgets/templatesDependencies/formMinMaxMixin.js.map +1 -0
  216. package/dist/new-widgets/templatesDependencies/formMixin.js +66 -0
  217. package/dist/new-widgets/templatesDependencies/formMixin.js.map +1 -0
  218. package/dist/new-widgets/templatesDependencies/formNumberMixin.js +14 -0
  219. package/dist/new-widgets/templatesDependencies/formNumberMixin.js.map +1 -0
  220. package/dist/new-widgets/templatesDependencies/formRadioMixin.js +16 -0
  221. package/dist/new-widgets/templatesDependencies/formRadioMixin.js.map +1 -0
  222. package/dist/new-widgets/templatesDependencies/formStepMixin.js +13 -0
  223. package/dist/new-widgets/templatesDependencies/formStepMixin.js.map +1 -0
  224. package/dist/new-widgets/templatesDependencies/linkTextMixin.js +14 -0
  225. package/dist/new-widgets/templatesDependencies/linkTextMixin.js.map +1 -0
  226. package/dist/new-widgets/templatesDependencies/multipleFormMixin.js +125 -0
  227. package/dist/new-widgets/templatesDependencies/multipleFormMixin.js.map +1 -0
  228. package/dist/new-widgets/templatesDependencies/multipleselectFormMixin.js +74 -0
  229. package/dist/new-widgets/templatesDependencies/multipleselectFormMixin.js.map +1 -0
  230. package/dist/new-widgets/templatesDependencies/patternMixin.js +19 -0
  231. package/dist/new-widgets/templatesDependencies/patternMixin.js.map +1 -0
  232. package/dist/new-widgets/templatesDependencies/rangeMixin.js +110 -0
  233. package/dist/new-widgets/templatesDependencies/rangeMixin.js.map +1 -0
  234. package/dist/new-widgets/templatesDependencies/setMixin.js +12 -0
  235. package/dist/new-widgets/templatesDependencies/setMixin.js.map +1 -0
  236. package/dist/new-widgets/templatesDependencies/valueRichtextMixin.js +12 -0
  237. package/dist/new-widgets/templatesDependencies/valueRichtextMixin.js.map +1 -0
  238. package/dist/new-widgets/valueTransformationMixins/autolinkMixin.js +18 -0
  239. package/dist/new-widgets/valueTransformationMixins/autolinkMixin.js.map +1 -0
  240. package/dist/new-widgets/valueTransformationMixins/dateMixin.js +35 -0
  241. package/dist/new-widgets/valueTransformationMixins/dateMixin.js.map +1 -0
  242. package/dist/new-widgets/valueTransformationMixins/dateTimeMixin.js +16 -0
  243. package/dist/new-widgets/valueTransformationMixins/dateTimeMixin.js.map +1 -0
  244. package/dist/new-widgets/valueTransformationMixins/index.js +16 -0
  245. package/dist/new-widgets/valueTransformationMixins/index.js.map +1 -0
  246. package/dist/new-widgets/valueTransformationMixins/markdownMixin.js +25 -0
  247. package/dist/new-widgets/valueTransformationMixins/markdownMixin.js.map +1 -0
  248. package/dist/new-widgets/valueTransformationMixins/multilineMixin.js +17 -0
  249. package/dist/new-widgets/valueTransformationMixins/multilineMixin.js.map +1 -0
  250. package/dist/new-widgets/valueTransformationMixins/oembedMixin.js +27 -0
  251. package/dist/new-widgets/valueTransformationMixins/oembedMixin.js.map +1 -0
  252. package/dist/solid-template-element.js +164 -0
  253. package/dist/solid-template-element.js.map +1 -0
  254. package/dist/style/default-theme.css +24 -0
  255. package/dist/style/default-theme.css.proxy.js +10 -0
  256. package/dist/widgets/baseWidget.js +332 -0
  257. package/dist/widgets/baseWidget.js.map +1 -0
  258. package/dist/widgets/widget-factory.js +24 -0
  259. package/dist/widgets/widget-factory.js.map +1 -0
  260. package/package.json +1 -1
@@ -0,0 +1,214 @@
1
+ import { parseFieldsString, findClosingBracketMatchIndex, compare, uniqID } from "./helpers.js";
2
+
3
+ /**
4
+ * Check if the field is a set
5
+ * @param field - field to test
6
+ * @param fields - list of fields
7
+ * @returns true if the field is a set, false otherwise
8
+ */
9
+ const isSet = (field, fields) => {
10
+ if (!fields) return false;
11
+ let foundSets = fields.match(getSetRegexp(field));
12
+ return foundSets ? foundSets.length > 0 : false;
13
+ };
14
+ /**
15
+ * Get the list of fields in the set
16
+ * @param field - set name to get
17
+ * @param fields - list of fields
18
+ * @returns a list of fields in the set
19
+ */
20
+
21
+
22
+ const getSet = (field, fields) => {
23
+ const setString = fields.match(getSetRegexp(field));
24
+ if (!setString) return [];
25
+ const firstSetBracket = fields.indexOf(setString[0]) + setString[0].length - 1;
26
+ const lastSetBracket = findClosingBracketMatchIndex(fields, firstSetBracket);
27
+ const set = fields.substring(firstSetBracket + 1, lastSetBracket);
28
+ return parseFieldsString(set);
29
+ };
30
+
31
+ const getSetRegexp = field => {
32
+ return new RegExp("(^|\\,|\\(|\\s)\\s*".concat(field, "\\s*\\("), 'g');
33
+ };
34
+ /**
35
+ * Check if the field is a special search field
36
+ * @param field - field to test
37
+ * @param searchForm - current search form
38
+ * @returns true if the field is a special search field
39
+ */
40
+
41
+
42
+ const isSearchField = (field, searchForm) => {
43
+ return searchForm.hasAttribute('search-' + field);
44
+ };
45
+ /**
46
+ * Get the fields targetted by a search field
47
+ * @param field - search field to get
48
+ * @param searchForm - current search form
49
+ * @returns a list of fields targetted by the current search field
50
+ */
51
+
52
+
53
+ const getSearchField = (field, searchForm) => {
54
+ return parseFieldsString(searchForm.getAttribute('search-' + field));
55
+ };
56
+ /**
57
+ * Throw or simply return value
58
+ * @param throwOn - should throw on True or False
59
+ * @param ret - value to return
60
+ * @returns
61
+ */
62
+
63
+
64
+ const orThrow = (throwOn, ret) => {
65
+ if (throwOn === true && ret) throw true;
66
+ if (throwOn === false && !ret) throw false;
67
+ return ret;
68
+ };
69
+ /**
70
+ * Compare a value to the query
71
+ * @param val - value to compare
72
+ * @param query - object to know how and what value to compare
73
+ * @param throwOn - should function throw error on True or False
74
+ * @returns true if value matches, throw error otherwise
75
+ */
76
+
77
+
78
+ const matchValue = async (val, query, throwOn) => {
79
+ var _subject$isContainer;
80
+
81
+ const subject = await val;
82
+ if (subject == null && query.value === '') return orThrow(throwOn, true); // filter not set and subject not existing -> ignore filter
83
+
84
+ if (subject == null) return orThrow(throwOn, false); // return false; // property does not exist on resource
85
+
86
+ if (query.list) {
87
+ // Filter on a container
88
+ if (query.value.length === 0) return orThrow(throwOn, true);
89
+
90
+ for (const v of query.value) {
91
+ if (await matchValue(subject, {
92
+ type: query.type,
93
+ value: v,
94
+ list: false
95
+ })) {
96
+ // do not throw here, we need the result
97
+ return orThrow(throwOn, true);
98
+ }
99
+ }
100
+
101
+ return orThrow(throwOn, false);
102
+ }
103
+
104
+ if ((_subject$isContainer = subject.isContainer) !== null && _subject$isContainer !== void 0 && _subject$isContainer.call(subject)) {
105
+ let ret = Promise.resolve(query.value === ''); // if no query, return a match
106
+
107
+ for (const value of subject['ldp:contains']) {
108
+ ret = (await ret) || (await matchValue(value, query)); // do not throw here, we need the result
109
+
110
+ if (ret) return orThrow(throwOn, true);
111
+ }
112
+
113
+ return orThrow(throwOn, await ret);
114
+ }
115
+
116
+ return orThrow(throwOn, compare[query.type](subject, query.value));
117
+ };
118
+ /**
119
+ * Cache properties of a filter to avoid repeated parsing
120
+ * @param cacheKey - uniq key
121
+ * @param filter - filter to check
122
+ * @param fields - fields attribute of the element
123
+ * @param searchForm - current search form
124
+ */
125
+
126
+
127
+ const cacheFieldsProps = (cacheKey, filter, fields, searchForm) => {
128
+ if (!window.cachePropsSearchFilter[cacheKey]) {
129
+ window.cachePropsSearchFilter[cacheKey] = {
130
+ setFields: isSet(filter, fields) ? getSet(filter, fields) : null,
131
+ setSearchFields: isSearchField(filter, searchForm) ? getSearchField(filter, searchForm) : null
132
+ };
133
+ }
134
+ };
135
+ /**
136
+ * Check if one resource match one filter
137
+ * @param resource - resource to test
138
+ * @param filter - name of the property tested
139
+ * @param query - query object to know how to compare values
140
+ * @param fields - fields attribute of the element
141
+ * @param searchForm - searchForm component
142
+ * @param filterId - uniqId used to fill the cache
143
+ * @param throwOn - should function throw error on True or False
144
+ * @returns return true if the resource matches the filter, throw error otherwise
145
+ */
146
+
147
+
148
+ const matchFilter = async (resource, filter, query, fieldsAttr, searchForm, filterId, throwOn) => {
149
+ let fields = null;
150
+ const cacheKey = "".concat(filter, "_").concat(filterId);
151
+ cacheFieldsProps(cacheKey, filter, fieldsAttr, searchForm);
152
+
153
+ if (window.cachePropsSearchFilter[cacheKey].setFields !== null) {
154
+ fields = window.cachePropsSearchFilter[cacheKey].setFields;
155
+ } else if (window.cachePropsSearchFilter[cacheKey].setSearchFields !== null) {
156
+ fields = window.cachePropsSearchFilter[cacheKey].setSearchFields;
157
+ } else {
158
+ // search on 1 field
159
+ return matchValue(resource[filter], query, throwOn);
160
+ } // search on multiple fields
161
+
162
+
163
+ try {
164
+ await Promise.all((fields || []).map(field => matchFilter(resource, field, query, fieldsAttr, searchForm, filterId, true // stop searching when 1 filter is true (= OR)
165
+ )));
166
+ } catch (e) {
167
+ return true;
168
+ }
169
+
170
+ throw false;
171
+ };
172
+ /**
173
+ * Check if one resource match all the filters
174
+ * @param resource - resource to test
175
+ * @param filters - current filters
176
+ * @param filterNames - names of the filters
177
+ * @param fields - fields attribute of the element
178
+ * @param searchForm - searchForm component
179
+ * @param filterId - uniqId used to fill the cache
180
+ * @returns true if resource match, false otherwise
181
+ */
182
+
183
+
184
+ const matchFilters = async (resource, filters, filterNames, fields, searchForm, filterId) => {
185
+ // return true if all filters values are contained in the corresponding field of the resource
186
+ try {
187
+ await Promise.all(filterNames.map(filter => matchFilter(resource, filter, filters[filter], fields, searchForm, filterId, false // stop searching when 1 filter is false (= AND)
188
+ )));
189
+ } catch (e) {
190
+ return false;
191
+ }
192
+
193
+ return true;
194
+ };
195
+ /**
196
+ * Check which resources match the filters
197
+ * @param resources - list of resources to filter
198
+ * @param filters - current filters
199
+ * @param fields - fields attribute of the element
200
+ * @param searchForm - searchForm component
201
+ * @returns resources filtered
202
+ */
203
+
204
+
205
+ const searchInResources = async (resources, filters, fields, searchForm) => {
206
+ // Optim: use cache to do these things only once
207
+ const filterNames = Object.keys(filters);
208
+ const filterId = uniqID();
209
+ window.cachePropsSearchFilter = {};
210
+ return Promise.all(resources.map(resource => matchFilters(resource, filters, filterNames, fields, searchForm, filterId)));
211
+ };
212
+
213
+ export { searchInResources };
214
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["filter.ts"],"names":["parseFieldsString","findClosingBracketMatchIndex","compare","uniqID","isSet","field","fields","foundSets","match","getSetRegexp","length","getSet","setString","firstSetBracket","indexOf","lastSetBracket","set","substring","RegExp","isSearchField","searchForm","hasAttribute","getSearchField","getAttribute","orThrow","throwOn","ret","matchValue","val","query","subject","value","list","v","type","isContainer","Promise","resolve","cacheFieldsProps","cacheKey","filter","window","cachePropsSearchFilter","setFields","setSearchFields","matchFilter","resource","fieldsAttr","filterId","all","map","e","matchFilters","filters","filterNames","searchInResources","resources","Object","keys"],"mappings":"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","sourcesContent":["import { parseFieldsString, findClosingBracketMatchIndex, compare, uniqID } from \"./helpers\";\nimport type { Query, SearchQuery } from \"./interfaces\";\n\n/**\n * Check if the field is a set\n * @param field - field to test\n * @param fields - list of fields\n * @returns true if the field is a set, false otherwise\n */\nconst isSet = (field: string, fields: string): boolean => {\n if (!fields) return false;\n let foundSets = fields.match(getSetRegexp(field));\n return foundSets ? foundSets.length > 0 : false;\n}\n/**\n * Get the list of fields in the set\n * @param field - set name to get\n * @param fields - list of fields\n * @returns a list of fields in the set\n */\nconst getSet = (field: string, fields: string): string[] => {\n const setString = fields.match(getSetRegexp(field));\n if (!setString) return [];\n const firstSetBracket = fields.indexOf(setString[0]) + (setString[0].length) - 1;\n const lastSetBracket = findClosingBracketMatchIndex(fields, firstSetBracket);\n const set = fields.substring(firstSetBracket + 1, lastSetBracket);\n return parseFieldsString(set);\n}\nconst getSetRegexp = (field: string) => {\n return new RegExp(`(^|\\\\,|\\\\(|\\\\s)\\\\s*${field}\\\\s*\\\\(`, 'g')\n}\n/**\n * Check if the field is a special search field\n * @param field - field to test\n * @param searchForm - current search form\n * @returns true if the field is a special search field\n */\nconst isSearchField = (field: string, searchForm: any) => {\n return searchForm.hasAttribute('search-' + field);\n}\n/**\n * Get the fields targetted by a search field\n * @param field - search field to get\n * @param searchForm - current search form\n * @returns a list of fields targetted by the current search field\n */\nconst getSearchField = (field: string, searchForm: any): string[] => {\n return parseFieldsString(searchForm.getAttribute('search-' + field));\n}\n\n/**\n * Throw or simply return value\n * @param throwOn - should throw on True or False\n * @param ret - value to return\n * @returns\n */\nconst orThrow = (throwOn: boolean | undefined, ret: boolean) => {\n if (throwOn === true && ret) throw true;\n if (throwOn === false && !ret) throw false;\n return ret;\n}\n\n/**\n * Compare a value to the query\n * @param val - value to compare\n * @param query - object to know how and what value to compare\n * @param throwOn - should function throw error on True or False\n * @returns true if value matches, throw error otherwise\n */\nconst matchValue = async (val: any, query: Query, throwOn?: boolean): Promise<boolean> => {\n const subject = await val;\n if (subject == null && query.value === '') return orThrow(throwOn, true); // filter not set and subject not existing -> ignore filter\n if (subject == null) return orThrow(throwOn, false); // return false; // property does not exist on resource\n if (query.list) { // Filter on a container\n if(query.value.length === 0) return orThrow(throwOn, true);\n for(const v of query.value) {\n if (await matchValue(subject, { type: query.type, value: v, list: false })) { // do not throw here, we need the result\n return orThrow(throwOn, true);\n }\n }\n return orThrow(throwOn, false);\n }\n if (subject.isContainer?.()) {\n let ret: any = Promise.resolve(query.value === ''); // if no query, return a match\n for (const value of subject['ldp:contains']) {\n ret = await ret || await matchValue(value, query); // do not throw here, we need the result\n if (ret) return orThrow(throwOn, true);\n }\n return orThrow(throwOn, await ret);\n }\n\n return orThrow(throwOn, compare[query.type](subject, query.value));\n}\n\n/**\n * Cache properties of a filter to avoid repeated parsing\n * @param cacheKey - uniq key\n * @param filter - filter to check\n * @param fields - fields attribute of the element\n * @param searchForm - current search form\n */\nconst cacheFieldsProps = (\n cacheKey: string,\n filter: string,\n fields: string,\n searchForm: any\n) => {\n if (!window.cachePropsSearchFilter[cacheKey]) {\n window.cachePropsSearchFilter[cacheKey] = {\n setFields: isSet(filter, fields) ? getSet(filter, fields) : null,\n setSearchFields: isSearchField(filter, searchForm) ? getSearchField(filter, searchForm) : null\n }\n }\n}\n\n/**\n * Check if one resource match one filter\n * @param resource - resource to test\n * @param filter - name of the property tested\n * @param query - query object to know how to compare values\n * @param fields - fields attribute of the element\n * @param searchForm - searchForm component\n * @param filterId - uniqId used to fill the cache\n * @param throwOn - should function throw error on True or False\n * @returns return true if the resource matches the filter, throw error otherwise\n */\nconst matchFilter = async (\n resource: object,\n filter: string,\n query: Query,\n fieldsAttr: string,\n searchForm: any,\n filterId: string,\n throwOn: boolean\n) => {\n let fields: string[] | null = null;\n\n const cacheKey = `${filter}_${filterId}`;\n cacheFieldsProps(cacheKey, filter, fieldsAttr, searchForm);\n\n if (window.cachePropsSearchFilter[cacheKey].setFields !== null) {\n fields = window.cachePropsSearchFilter[cacheKey].setFields;\n } else if (window.cachePropsSearchFilter[cacheKey].setSearchFields !== null) {\n fields = window.cachePropsSearchFilter[cacheKey].setSearchFields;\n } else { // search on 1 field\n return matchValue(resource[filter], query, throwOn);\n }\n\n // search on multiple fields\n try {\n await Promise.all((fields || []).map(field =>\n matchFilter(\n resource,\n field,\n query,\n fieldsAttr,\n searchForm,\n filterId,\n true // stop searching when 1 filter is true (= OR)\n )\n ))\n } catch (e) { return true }\n throw false;\n}\n\n/**\n * Check if one resource match all the filters\n * @param resource - resource to test\n * @param filters - current filters\n * @param filterNames - names of the filters\n * @param fields - fields attribute of the element\n * @param searchForm - searchForm component\n * @param filterId - uniqId used to fill the cache\n * @returns true if resource match, false otherwise\n */\nconst matchFilters = async (\n resource: object,\n filters: SearchQuery,\n filterNames: string[],\n fields: string,\n searchForm: any,\n filterId: string\n): Promise<boolean> => {\n // return true if all filters values are contained in the corresponding field of the resource\n try {\n await Promise.all(filterNames.map(filter =>\n matchFilter(\n resource,\n filter,\n filters[filter],\n fields,\n searchForm,\n filterId,\n false // stop searching when 1 filter is false (= AND)\n )\n ));\n } catch (e) { return false }\n return true;\n}\n\n/**\n * Check which resources match the filters\n * @param resources - list of resources to filter\n * @param filters - current filters\n * @param fields - fields attribute of the element\n * @param searchForm - searchForm component\n * @returns resources filtered\n */\nconst searchInResources = async (\n resources: object[],\n filters: SearchQuery,\n fields: string,\n searchForm: any\n) => {\n // Optim: use cache to do these things only once\n const filterNames = Object.keys(filters);\n const filterId = uniqID();\n window.cachePropsSearchFilter = {};\n\n return Promise.all(resources.map(resource =>\n matchFilters(\n resource,\n filters,\n filterNames,\n fields,\n searchForm,\n filterId\n )\n ));\n}\n\nexport {\n searchInResources\n};\n"]}
@@ -0,0 +1,219 @@
1
+ import Fuse from "../_snowpack/pkg/fusejs.js";
2
+
3
+ function uniqID() {
4
+ return '_' + (Math.random() * Math.pow(36, 20)).toString(36).slice(0, 10);
5
+ }
6
+
7
+ function stringToDom(html) {
8
+ const template = document.createElement('template');
9
+ template.innerHTML = html;
10
+ return template.content;
11
+ }
12
+
13
+ async function evalTemplateString(str, variables = {}) {
14
+ const keys = Object.keys(variables);
15
+ const values = keys.map(key => variables[key]);
16
+
17
+ try {
18
+ const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
19
+ const func = AsyncFunction.call(null, ...keys, 'return `' + str + '`');
20
+ return await func(...values);
21
+ } catch (e) {
22
+ console.log(e);
23
+ throw new SyntaxError('`' + str + '`');
24
+ }
25
+ }
26
+
27
+ function importCSS(...stylesheets) {
28
+ const linksElements = [];
29
+
30
+ for (let url of stylesheets) {
31
+ url = relativeSource(url);
32
+ let link = Array.from(document.head.querySelectorAll('link')).find(link => link.href === url);
33
+ if (link) return link;
34
+ link = document.createElement('link');
35
+ link.rel = 'stylesheet';
36
+ link.href = url;
37
+ document.head.appendChild(link);
38
+ linksElements.push(link);
39
+ }
40
+
41
+ ;
42
+ return linksElements;
43
+ }
44
+
45
+ function importJS(...plugins) {
46
+ return plugins.map(url => {
47
+ url = new URL(url, document.baseURI).href;
48
+ let script = Array.from(document.querySelectorAll('script')).find(script => script.src === url);
49
+ if (script) return script;
50
+ script = document.createElement('script');
51
+ script.src = url;
52
+ document.head.appendChild(script);
53
+ return script;
54
+ });
55
+ }
56
+
57
+ function relativeSource(source) {
58
+ if (!source.match(/^\..?\//)) return new URL(source, document.baseURI).href;
59
+ const e = new Error();
60
+ if (!e.stack) return source;
61
+ const f2 = e.stack.split('\n').filter(l => l.includes(':'))[2];
62
+ let line = f2.match(/[a-z]+:.*$/);
63
+ if (!line) return source;
64
+ const calledFile = line[0].replace(/(\:[0-9]+){2}\)?$/, '');
65
+ source = new URL(source, calledFile).href;
66
+ return source;
67
+ }
68
+
69
+ function loadScript(source) {
70
+ source = relativeSource(source);
71
+ return new Promise(resolve => {
72
+ var script = document.createElement('script');
73
+ var head = document.querySelector('head');
74
+ script.async = true;
75
+
76
+ script.onload = () => setTimeout(resolve, 0);
77
+
78
+ script.src = source;
79
+ if (head) head.appendChild(script);
80
+ });
81
+ }
82
+
83
+ function domIsReady() {
84
+ return new Promise(function (resolve) {
85
+ if (document.readyState === 'complete') {
86
+ resolve();
87
+ } else {
88
+ document.addEventListener('DOMContentLoaded', () => resolve());
89
+ }
90
+ });
91
+ }
92
+
93
+ function setDeepProperty(obj, path, value) {
94
+ const name = path.shift();
95
+
96
+ if (name) {
97
+ if (!(name in obj)) obj[name] = {};
98
+ if (path.length) setDeepProperty(obj[name], path, value);else obj[name] = value;
99
+ }
100
+ }
101
+
102
+ function parseFieldsString(fields) {
103
+ let fieldsArray; // remove all sets from fields
104
+
105
+ while (fields.indexOf('(') > 0) {
106
+ let firstBracket = fields.indexOf('(');
107
+ let noset = fields.substring(firstBracket, findClosingBracketMatchIndex(fields, firstBracket) + 1);
108
+ fields = fields.replace(noset, '');
109
+ }
110
+
111
+ const re = /((^\s*|,)\s*)(("(\\"|[^"])*")|('(\\'|[^'])*')|[^,]*)/gm; // match , not inside quotes
112
+
113
+ fieldsArray = fields.match(re) || []; // separate fields
114
+
115
+ if (!fieldsArray) return [];
116
+ return fieldsArray.map(a => a.replace(/^[\s,]+/, '')); // remove commas and spaces
117
+ }
118
+
119
+ function findClosingBracketMatchIndex(str, pos) {
120
+ if (str[pos] != '(') throw new Error("No '(' at index " + pos);
121
+ let depth = 1;
122
+
123
+ for (let i = pos + 1; i < str.length; i++) {
124
+ switch (str[i]) {
125
+ case '(':
126
+ depth++;
127
+ break;
128
+
129
+ case ')':
130
+ if (--depth == 0) return i;
131
+ break;
132
+ }
133
+ }
134
+
135
+ return -1;
136
+ }
137
+
138
+ function defineComponent(tagName, componentClass) {
139
+ if (!customElements.get(tagName)) {
140
+ customElements.define(tagName, componentClass);
141
+ } else {
142
+ console.warn("Warning: the component \"".concat(tagName, "\" has already been loaded in another version of sib-core."));
143
+ }
144
+ }
145
+
146
+ function fuzzyCompare(subject, search) {
147
+ const fuse = new Fuse([subject], {
148
+ shouldSort: false,
149
+ threshold: 0.37
150
+ }).search(search);
151
+ return fuse.length > 0;
152
+ }
153
+
154
+ const compare = {
155
+ string(subject, query) {
156
+ if (query === '') return true;
157
+ if (subject.toString().toLowerCase().includes(String(query).toLowerCase())) return true;
158
+ return fuzzyCompare(subject, query);
159
+ },
160
+
161
+ boolean(subject, query) {
162
+ if (!query) return true;
163
+ return subject;
164
+ },
165
+
166
+ number(subject, query) {
167
+ return subject === query;
168
+ },
169
+
170
+ list(subject, list) {
171
+ return list.includes(subject);
172
+ },
173
+
174
+ range(subject, range) {
175
+ return (range[0] == null || range[0] === '' || subject >= range[0]) && (range[1] == null || range[1] === '' || subject <= range[1]);
176
+ },
177
+
178
+ resource(subject, query) {
179
+ // dropdown default ' - ' option return an empty string
180
+ if (query === '') return true;
181
+ if (!query['@id']) return false;
182
+ const ret = subject['@id'] === query['@id'];
183
+ return ret;
184
+ }
185
+
186
+ };
187
+
188
+ function transformArrayToContainer(resource) {
189
+ const newValue = { ...resource
190
+ };
191
+
192
+ for (let predicate of Object.keys(newValue)) {
193
+ // iterate over all properties
194
+ const predicateValue = newValue[predicate];
195
+ if (!predicateValue || typeof predicateValue !== 'object') continue; // undefined or literal, do nothing
196
+ // check all keys of nested resource
197
+
198
+ if (!Array.isArray(predicateValue) && predicateValue['@id']) {
199
+ newValue[predicate] = transformArrayToContainer(resource[predicate]);
200
+ } // for arrays
201
+
202
+
203
+ if (Array.isArray(predicateValue)) {
204
+ newValue[predicate] = {
205
+ 'ldp:contains': [...predicateValue]
206
+ }; // transform to container
207
+
208
+ newValue[predicate]['ldp:contains'].forEach((childPredicate, index) => {
209
+ // and check all nested resources
210
+ newValue[predicate]['ldp:contains'][index] = transformArrayToContainer(childPredicate);
211
+ });
212
+ }
213
+ }
214
+
215
+ return newValue;
216
+ }
217
+
218
+ export { uniqID, stringToDom, evalTemplateString, importCSS, importJS, loadScript, domIsReady, setDeepProperty, parseFieldsString, findClosingBracketMatchIndex, defineComponent, fuzzyCompare, compare, transformArrayToContainer };
219
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["helpers.ts"],"names":["Fuse","uniqID","Math","random","pow","toString","slice","stringToDom","html","template","document","createElement","innerHTML","content","evalTemplateString","str","variables","keys","Object","values","map","key","AsyncFunction","getPrototypeOf","constructor","func","call","e","console","log","SyntaxError","importCSS","stylesheets","linksElements","url","relativeSource","link","Array","from","head","querySelectorAll","find","href","rel","appendChild","push","importJS","plugins","URL","baseURI","script","src","source","match","Error","stack","f2","split","filter","l","includes","line","calledFile","replace","loadScript","Promise","resolve","querySelector","async","onload","setTimeout","domIsReady","readyState","addEventListener","setDeepProperty","obj","path","value","name","shift","length","parseFieldsString","fields","fieldsArray","indexOf","firstBracket","noset","substring","findClosingBracketMatchIndex","re","a","pos","depth","i","defineComponent","tagName","componentClass","customElements","get","define","warn","fuzzyCompare","subject","search","fuse","shouldSort","threshold","compare","string","query","toLowerCase","String","boolean","number","list","range","resource","ret","transformArrayToContainer","newValue","predicate","predicateValue","isArray","forEach","childPredicate","index"],"mappings":"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","sourcesContent":["import Fuse from \"fuse.js\";\n\nfunction uniqID(): string {\n return '_' + (Math.random() * Math.pow(36, 20)).toString(36).slice(0, 10);\n}\n\nfunction stringToDom(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content;\n}\n\nasync function evalTemplateString(str: string, variables: {[key:string]:any} = {}) {\n const keys = Object.keys(variables);\n const values = keys.map(key => variables[key]);\n try {\n const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor\n const func = AsyncFunction.call(null, ...keys, 'return `' + str + '`');\n return await func(...values);\n } catch (e) {\n console.log(e);\n throw new SyntaxError('`' + str + '`');\n }\n}\n\nfunction importCSS(...stylesheets: string[]) {\n const linksElements: HTMLLinkElement[] = []; \n for(let url of stylesheets) {\n url = relativeSource(url);\n let link = Array.from(document.head.querySelectorAll('link')).find(\n link => link.href === url,\n );\n if (link) return link;\n link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n linksElements.push(link);\n };\n return linksElements;\n}\n\nfunction importJS(...plugins: string[]): HTMLScriptElement[] {\n return plugins.map(url => {\n url = new URL(url, document.baseURI).href;\n let script = Array.from(document.querySelectorAll('script')).find(\n script => script.src === url,\n );\n if (script) return script;\n script = document.createElement('script');\n script.src = url;\n document.head.appendChild(script);\n return script;\n });\n}\n\nfunction relativeSource(source: string) {\n if (!source.match(/^\\..?\\//)) return new URL(source, document.baseURI).href;\n const e = new Error();\n if(!e.stack) return source;\n const f2 = e.stack.split('\\n').filter(l => l.includes(':'))[2];\n let line = f2.match(/[a-z]+:.*$/);\n if (!line) return source;\n const calledFile = line[0].replace(/(\\:[0-9]+){2}\\)?$/,'');\n source = new URL(source, calledFile).href;\n return source;\n}\n\nfunction loadScript(source: string) {\n source = relativeSource(source);\n return new Promise(resolve => {\n var script = document.createElement('script');\n var head = document.querySelector('head');\n script.async = true;\n script.onload = () => setTimeout(resolve, 0);\n script.src = source;\n if(head) head.appendChild(script);\n });\n}\n\nfunction domIsReady(): Promise<void> {\n return new Promise(function(resolve) {\n if (document.readyState === 'complete') {\n resolve();\n } else {\n document.addEventListener('DOMContentLoaded', () => resolve());\n }\n });\n}\n\nfunction setDeepProperty(obj: {[index:string]:any}, path: string[], value: any) {\n const name = path.shift();\n if (name) {\n if (!(name in obj)) obj[name] = {};\n if (path.length) setDeepProperty(obj[name], path, value);\n else obj[name] = value;\n }\n}\n\nfunction parseFieldsString(fields: string): string[] {\n let fieldsArray: string[];\n\n // remove all sets from fields\n while(fields.indexOf('(') > 0){\n let firstBracket = fields.indexOf('(');\n let noset = fields.substring(firstBracket, findClosingBracketMatchIndex(fields, firstBracket)+1)\n fields = fields.replace(noset, '')\n }\n\n const re = /((^\\s*|,)\\s*)((\"(\\\\\"|[^\"])*\")|('(\\\\'|[^'])*')|[^,]*)/gm; // match , not inside quotes\n fieldsArray = fields.match(re) || []; // separate fields\n if (!fieldsArray) return [];\n return fieldsArray.map(a => a.replace(/^[\\s,]+/, '')) // remove commas and spaces\n}\n\nfunction findClosingBracketMatchIndex(str: string, pos: number) {\n if (str[pos] != '(') throw new Error(\"No '(' at index \" + pos);\n let depth = 1;\n for (let i = pos + 1; i < str.length; i++) {\n switch (str[i]) {\n case '(':\n depth++;\n break;\n case ')':\n if (--depth == 0) return i;\n break;\n }\n }\n return -1;\n}\n\nfunction defineComponent(tagName: string, componentClass: typeof HTMLElement) {\n if (!customElements.get(tagName)) {\n customElements.define(tagName, componentClass);\n } else {\n console.warn(`Warning: the component \"${tagName}\" has already been loaded in another version of sib-core.`)\n }\n}\n\nfunction fuzzyCompare(subject: string, search: string) {\n const fuse = new Fuse([subject], {\n shouldSort: false,\n threshold: 0.37,\n }).search(search);\n return fuse.length > 0;\n}\n\nconst compare: { [k: string]: (subject: any, query: any) => boolean } = {\n string(subject: string, query: string) {\n if(query === '') return true;\n if(subject.toString().toLowerCase().includes(String(query).toLowerCase())) return true;\n return fuzzyCompare(subject, query);\n },\n boolean(subject: boolean, query: boolean) {\n if (!query) return true;\n return subject;\n },\n number(subject: number, query: number) {\n return subject === query;\n },\n list(subject: string, list: string[]) {\n return list.includes(subject);\n },\n range(subject: number | Date, range: [any, any]) {\n return (\n (range[0] == null || range[0] === '' || subject >= range[0]) &&\n (range[1] == null || range[1] === '' || subject <= range[1])\n );\n },\n resource(subject, query) {\n // dropdown default ' - ' option return an empty string\n if(query === '') return true;\n if (!query['@id']) return false;\n const ret = subject['@id'] === query['@id'];\n return ret;\n }\n};\n\nfunction transformArrayToContainer(resource: object) {\n const newValue = { ...resource };\n for (let predicate of Object.keys(newValue)) { // iterate over all properties\n const predicateValue = newValue[predicate];\n if (!predicateValue || typeof predicateValue !== 'object') continue; // undefined or literal, do nothing\n\n // check all keys of nested resource\n if (!Array.isArray(predicateValue) && predicateValue['@id']) {\n newValue[predicate] = transformArrayToContainer(resource[predicate]);\n }\n\n // for arrays\n if (Array.isArray(predicateValue)) {\n newValue[predicate] = { 'ldp:contains': [...predicateValue] }; // transform to container\n newValue[predicate]['ldp:contains'].forEach((childPredicate: any, index: number) => { // and check all nested resources\n newValue[predicate]['ldp:contains'][index] = transformArrayToContainer(childPredicate);\n });\n }\n }\n return newValue;\n}\n\nexport {\n uniqID,\n stringToDom,\n evalTemplateString,\n importCSS,\n importJS,\n loadScript,\n domIsReady,\n setDeepProperty,\n parseFieldsString,\n findClosingBracketMatchIndex,\n defineComponent,\n fuzzyCompare,\n compare,\n transformArrayToContainer\n};\n"]}
@@ -0,0 +1,6 @@
1
+ ;
2
+ ;
3
+ ;
4
+ ;
5
+ ;
6
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["interfaces.ts"],"names":[],"mappings":"AAKC;AAUA;AA8BA;AAsBA;AAIA","sourcesContent":["export interface AccessorStaticInterface {\n [key: string]: {\n get: Function;\n set: Function;\n }\n};\n\nexport interface ArrayOfHooksInterface {\n created: HookInterface[];\n attached: HookInterface[];\n detached: HookInterface[];\n}\n\nexport interface AttributeChangedCallbackInterface {\n (newValue: any, oldValue: any): void;\n};\n\nexport interface AttributeDefinitionInterface {\n type?: any;\n default?: any;\n required?: boolean;\n callback?: AttributeChangedCallbackInterface;\n}\n\nexport interface AttributesDefinitionInterface {\n [key: string]: AttributeDefinitionInterface;\n}\n\nexport type ComponentConstructorInterface = new (element: HTMLElement) => ComponentInterface;\n\nexport interface ComponentInterface {\n element: HTMLElement;\n created():void;\n attached():void;\n detached():void;\n\n attributesCallback(key: string, value: any, oldValue: any):void;\n}\n\nexport interface ComponentStaticInterface extends HasAttributesDefinitionInterface, HasInitialStateInterface {\n name: String;\n\n hooks: ArrayOfHooksInterface;\n methods: Map<string, Function>;\n accessors: AccessorStaticInterface;\n};\n\nexport interface HasAttributesDefinitionInterface {\n attributes?: AttributesDefinitionInterface | undefined;\n}\n\nexport interface HasHooksInterface {\n created?: HookInterface;\n attached?: HookInterface;\n detached?: HookInterface;\n}\n\nexport interface HasInitialStateInterface {\n initialState?: object | undefined;\n}\n\nexport interface HasMixinsInterface {\n use?: MixinStaticInterface[] | undefined;\n}\n\nexport interface HookInterface {\n (): void;\n};\n\nexport interface MixinStaticInterface extends HasAttributesDefinitionInterface, HasMixinsInterface, HasInitialStateInterface, HasHooksInterface {\n name: String;\n};\n\nexport interface LocationResourceInterface {\n lat?: HookInterface;\n lng?: HookInterface;\n}\nexport interface Query {\n value: any\n type: \"boolean\" | \"number\" | \"range\" | \"resource\" | \"string\";\n list: boolean\n}\n\nexport interface SearchQuery {\n [key: string]: Query\n}"]}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Spread function from open-wc/lit-helpers
3
+ * More informations here: https://open-wc.org/developing/lit-helpers.html
4
+ */
5
+ import { html, directive, noChange } from '../_snowpack/pkg/lit-html.js';
6
+ const prevCache = new WeakMap();
7
+ export const spread = directive(spreadData => part => {
8
+ const prevData = prevCache.get(part);
9
+
10
+ if (prevData === spreadData) {
11
+ return;
12
+ }
13
+
14
+ prevCache.set(part, spreadData);
15
+
16
+ if (spreadData) {
17
+ for (const key in spreadData) {
18
+ const value = spreadData[key];
19
+ if (value === noChange) continue;
20
+ const prefix = key[0];
21
+ const {
22
+ element
23
+ } = part.committer;
24
+
25
+ if (prefix === '@') {
26
+ const prevHandler = prevData && prevData[key];
27
+
28
+ if (!prevHandler || prevHandler !== value) {
29
+ const name = key.slice(1);
30
+ if (prevHandler) element.removeEventListener(name, prevHandler);
31
+ element.addEventListener(name, value);
32
+ }
33
+
34
+ continue;
35
+ }
36
+
37
+ if (prefix === '.') {
38
+ if (!prevData || prevData[key] !== value) {
39
+ element[key.slice(1)] = value;
40
+ }
41
+
42
+ continue;
43
+ }
44
+
45
+ if (prefix === '?') {
46
+ if (!prevData || prevData[key] !== value) {
47
+ const name = key.slice(1);
48
+
49
+ if (value) {
50
+ element.setAttribute(name, '');
51
+ } else {
52
+ element.removeAttribute(name);
53
+ }
54
+ }
55
+
56
+ continue;
57
+ }
58
+
59
+ if (!prevData || prevData[key] !== value) {
60
+ if (value != null) {
61
+ element.setAttribute(key, String(value));
62
+ } else {
63
+ element.removeAttribute(key);
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ if (prevData) {
70
+ for (const key in prevData) {
71
+ if (!spreadData || !(key in spreadData)) {
72
+ const prefix = key[0];
73
+ const {
74
+ element
75
+ } = part.committer;
76
+
77
+ if (prefix === '@') {
78
+ element.removeEventListener(key.slice(1), prevData[key]);
79
+ continue;
80
+ }
81
+
82
+ if (prefix === '.') {
83
+ element[key.slice(1)] = undefined;
84
+ continue;
85
+ }
86
+
87
+ if (prefix === '?') {
88
+ element.removeAttribute(key.slice(1));
89
+ continue;
90
+ }
91
+
92
+ element.removeAttribute(key);
93
+ }
94
+ }
95
+ }
96
+ });
97
+
98
+ function dropIndices(arr, needlessValues) {
99
+ const newArr = [];
100
+ let j = 0;
101
+
102
+ for (let i = 0, n = arr.length; i < n; ++i) {
103
+ if (needlessValues[j].index === i) {
104
+ ++j;
105
+ } else {
106
+ newArr.push(arr[i]);
107
+ }
108
+ }
109
+
110
+ return newArr;
111
+ }
112
+
113
+ const templateStringsCache = new WeakMap(); // Convert dynamic tags to template strings
114
+ // example: <${'div'}>${'this is example'}</${'div'}> => <div>${'this is example'}</div>
115
+
116
+ export function preHTML(strings, ...values) {
117
+ // check cache !important return equal link at first argument
118
+ let cachedStrings = templateStringsCache.get(strings);
119
+
120
+ if (cachedStrings) {
121
+ for (let i = 0, n = cachedStrings.length; i < n; ++i) {
122
+ const needlessValues = cachedStrings[i].needlessValues;
123
+ let isSame = true;
124
+
125
+ for (let ii = 0, nn = needlessValues.length; ii < nn; ++ii) {
126
+ if (values[needlessValues[ii].index] !== needlessValues[ii].value) {
127
+ isSame = false;
128
+ break;
129
+ }
130
+ }
131
+
132
+ if (isSame) {
133
+ return html(cachedStrings[i].strings, ...dropIndices(values, needlessValues));
134
+ }
135
+ }
136
+ }
137
+
138
+ const needlessValues = [];
139
+ const newStrings = [];
140
+ let str;
141
+
142
+ for (let i = 0, n = strings.length; i < n; ++i) {
143
+ str = strings[i];
144
+
145
+ while (str[str.length - 1] === '<' // open tag
146
+ || str[str.length - 2] === '<' && str[str.length - 1] === '/' // close tag
147
+ ) {
148
+ needlessValues.push({
149
+ value: values[i],
150
+ index: i
151
+ });
152
+ str += values[i] + strings[++i];
153
+ }
154
+
155
+ newStrings.push(str);
156
+ }
157
+
158
+ if (!cachedStrings) {
159
+ cachedStrings = [];
160
+ templateStringsCache.set(strings, cachedStrings);
161
+ }
162
+
163
+ cachedStrings.push({
164
+ strings: newStrings,
165
+ needlessValues
166
+ });
167
+ return html(newStrings, ...dropIndices(values, needlessValues));
168
+ }
169
+ //# sourceMappingURL=lit-helpers.js.map