@startinblox/core 0.17.17 → 0.17.21-beta.1

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 (262) hide show
  1. package/package.json +2 -2
  2. package/dist/_snowpack/env.js +0 -3
  3. package/dist/_snowpack/pkg/autolinker.js +0 -4281
  4. package/dist/_snowpack/pkg/autolinker.js.map +0 -1
  5. package/dist/_snowpack/pkg/autolinker.js.map.proxy.js +0 -1
  6. package/dist/_snowpack/pkg/common/_baseUnary-217dffb2.js +0 -377
  7. package/dist/_snowpack/pkg/common/_baseUnary-217dffb2.js.map +0 -1
  8. package/dist/_snowpack/pkg/common/_baseUnary-217dffb2.js.map.proxy.js +0 -1
  9. package/dist/_snowpack/pkg/common/_commonjsHelpers-8c19dec8.js +0 -22
  10. package/dist/_snowpack/pkg/common/_commonjsHelpers-8c19dec8.js.map +0 -1
  11. package/dist/_snowpack/pkg/common/_commonjsHelpers-8c19dec8.js.map.proxy.js +0 -1
  12. package/dist/_snowpack/pkg/common/decode-a4c334cf.js +0 -216
  13. package/dist/_snowpack/pkg/common/decode-a4c334cf.js.map +0 -1
  14. package/dist/_snowpack/pkg/common/decode-a4c334cf.js.map.proxy.js +0 -1
  15. package/dist/_snowpack/pkg/common/lit-html-babd44cd.js +0 -1119
  16. package/dist/_snowpack/pkg/common/lit-html-babd44cd.js.map +0 -1
  17. package/dist/_snowpack/pkg/common/lit-html-babd44cd.js.map.proxy.js +0 -1
  18. package/dist/_snowpack/pkg/delta-markdown-for-quill.js +0 -25677
  19. package/dist/_snowpack/pkg/delta-markdown-for-quill.js.map +0 -1
  20. package/dist/_snowpack/pkg/delta-markdown-for-quill.js.map.proxy.js +0 -1
  21. package/dist/_snowpack/pkg/dialog-polyfill.js +0 -859
  22. package/dist/_snowpack/pkg/dialog-polyfill.js.map +0 -1
  23. package/dist/_snowpack/pkg/dialog-polyfill.js.map.proxy.js +0 -1
  24. package/dist/_snowpack/pkg/fusejs.js +0 -1783
  25. package/dist/_snowpack/pkg/fusejs.js.map +0 -1
  26. package/dist/_snowpack/pkg/fusejs.js.map.proxy.js +0 -1
  27. package/dist/_snowpack/pkg/import-map.json +0 -25
  28. package/dist/_snowpack/pkg/jsonld-context-parser.js +0 -804
  29. package/dist/_snowpack/pkg/jsonld-context-parser.js.map +0 -1
  30. package/dist/_snowpack/pkg/jsonld-context-parser.js.map.proxy.js +0 -1
  31. package/dist/_snowpack/pkg/leaflet/dist/leaflet.css +0 -640
  32. package/dist/_snowpack/pkg/leaflet/dist/leaflet.css.proxy.js +0 -10
  33. package/dist/_snowpack/pkg/leaflet.js +0 -14066
  34. package/dist/_snowpack/pkg/leaflet.js.map +0 -1
  35. package/dist/_snowpack/pkg/leaflet.js.map.proxy.js +0 -1
  36. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.Default.css +0 -60
  37. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.Default.css.proxy.js +0 -10
  38. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.css +0 -14
  39. package/dist/_snowpack/pkg/leaflet.markercluster/dist/MarkerCluster.css.proxy.js +0 -10
  40. package/dist/_snowpack/pkg/leaflet.markercluster.js +0 -2697
  41. package/dist/_snowpack/pkg/leaflet.markercluster.js.map +0 -1
  42. package/dist/_snowpack/pkg/leaflet.markercluster.js.map.proxy.js +0 -1
  43. package/dist/_snowpack/pkg/lit-html/directives/if-defined.js +0 -40
  44. package/dist/_snowpack/pkg/lit-html/directives/if-defined.js.map +0 -1
  45. package/dist/_snowpack/pkg/lit-html/directives/if-defined.js.map.proxy.js +0 -1
  46. package/dist/_snowpack/pkg/lit-html/directives/unsafe-html.js +0 -46
  47. package/dist/_snowpack/pkg/lit-html/directives/unsafe-html.js.map +0 -1
  48. package/dist/_snowpack/pkg/lit-html/directives/unsafe-html.js.map.proxy.js +0 -1
  49. package/dist/_snowpack/pkg/lit-html/directives/until.js +0 -88
  50. package/dist/_snowpack/pkg/lit-html/directives/until.js.map +0 -1
  51. package/dist/_snowpack/pkg/lit-html/directives/until.js.map.proxy.js +0 -1
  52. package/dist/_snowpack/pkg/lit-html.js +0 -92
  53. package/dist/_snowpack/pkg/lit-html.js.map +0 -1
  54. package/dist/_snowpack/pkg/lit-html.js.map.proxy.js +0 -1
  55. package/dist/_snowpack/pkg/markdown-it.js +0 -11860
  56. package/dist/_snowpack/pkg/markdown-it.js.map +0 -1
  57. package/dist/_snowpack/pkg/markdown-it.js.map.proxy.js +0 -1
  58. package/dist/_snowpack/pkg/quill/dist/quill.snow.css +0 -945
  59. package/dist/_snowpack/pkg/quill/dist/quill.snow.css.proxy.js +0 -10
  60. package/dist/_snowpack/pkg/quill-delta-to-markdown.js +0 -1029
  61. package/dist/_snowpack/pkg/quill-delta-to-markdown.js.map +0 -1
  62. package/dist/_snowpack/pkg/quill-delta-to-markdown.js.map.proxy.js +0 -1
  63. package/dist/_snowpack/pkg/quill.js +0 -13382
  64. package/dist/_snowpack/pkg/quill.js.map +0 -1
  65. package/dist/_snowpack/pkg/quill.js.map.proxy.js +0 -1
  66. package/dist/_snowpack/pkg/slim-select.js +0 -4
  67. package/dist/_snowpack/pkg/slim-select.js.map +0 -1
  68. package/dist/_snowpack/pkg/slim-select.js.map.proxy.js +0 -1
  69. package/dist/_snowpack/pkg/tui-calendar/dist/tui-calendar.css +0 -1164
  70. package/dist/_snowpack/pkg/tui-calendar/dist/tui-calendar.css.proxy.js +0 -10
  71. package/dist/_snowpack/pkg/tui-calendar.js +0 -42285
  72. package/dist/_snowpack/pkg/tui-calendar.js.map +0 -1
  73. package/dist/_snowpack/pkg/tui-calendar.js.map.proxy.js +0 -1
  74. package/dist/components/solid-ac-checker.js +0 -58
  75. package/dist/components/solid-ac-checker.js.map +0 -1
  76. package/dist/components/solid-calendar.js +0 -87
  77. package/dist/components/solid-calendar.js.map +0 -1
  78. package/dist/components/solid-delete.js +0 -111
  79. package/dist/components/solid-delete.js.map +0 -1
  80. package/dist/components/solid-display.js +0 -194
  81. package/dist/components/solid-display.js.map +0 -1
  82. package/dist/components/solid-form-search.js +0 -226
  83. package/dist/components/solid-form-search.js.map +0 -1
  84. package/dist/components/solid-form.js +0 -354
  85. package/dist/components/solid-form.js.map +0 -1
  86. package/dist/components/solid-lang.js +0 -46
  87. package/dist/components/solid-lang.js.map +0 -1
  88. package/dist/components/solid-map.js +0 -239
  89. package/dist/components/solid-map.js.map +0 -1
  90. package/dist/components/solid-table.js +0 -263
  91. package/dist/components/solid-table.js.map +0 -1
  92. package/dist/components/solid-widget.js +0 -94
  93. package/dist/components/solid-widget.js.map +0 -1
  94. package/dist/import.css +0 -4
  95. package/dist/index.js +0 -42
  96. package/dist/index.js.map +0 -1
  97. package/dist/libs/Component.js +0 -19
  98. package/dist/libs/Component.js.map +0 -1
  99. package/dist/libs/ComponentFactory.js +0 -196
  100. package/dist/libs/ComponentFactory.js.map +0 -1
  101. package/dist/libs/Compositor.js +0 -103
  102. package/dist/libs/Compositor.js.map +0 -1
  103. package/dist/libs/Sib.js +0 -58
  104. package/dist/libs/Sib.js.map +0 -1
  105. package/dist/libs/helpers.js +0 -219
  106. package/dist/libs/helpers.js.map +0 -1
  107. package/dist/libs/interfaces.js +0 -6
  108. package/dist/libs/interfaces.js.map +0 -1
  109. package/dist/libs/lit-helpers.js +0 -169
  110. package/dist/libs/lit-helpers.js.map +0 -1
  111. package/dist/libs/polyfills.js +0 -40
  112. package/dist/libs/polyfills.js.map +0 -1
  113. package/dist/libs/store/store.js +0 -768
  114. package/dist/libs/store/store.js.map +0 -1
  115. package/dist/locales/en.json +0 -10
  116. package/dist/locales/en.json.proxy.js +0 -2
  117. package/dist/locales/fr.json +0 -10
  118. package/dist/locales/fr.json.proxy.js +0 -2
  119. package/dist/mixins/attributeBinderMixin.js +0 -124
  120. package/dist/mixins/attributeBinderMixin.js.map +0 -1
  121. package/dist/mixins/contextMixin.js +0 -28
  122. package/dist/mixins/contextMixin.js.map +0 -1
  123. package/dist/mixins/counterMixin.js +0 -75
  124. package/dist/mixins/counterMixin.js.map +0 -1
  125. package/dist/mixins/federationMixin.js +0 -63
  126. package/dist/mixins/federationMixin.js.map +0 -1
  127. package/dist/mixins/filterMixin.js +0 -195
  128. package/dist/mixins/filterMixin.js.map +0 -1
  129. package/dist/mixins/grouperMixin.js +0 -80
  130. package/dist/mixins/grouperMixin.js.map +0 -1
  131. package/dist/mixins/highlighterMixin.js +0 -42
  132. package/dist/mixins/highlighterMixin.js.map +0 -1
  133. package/dist/mixins/interfaces.js +0 -8
  134. package/dist/mixins/interfaces.js.map +0 -1
  135. package/dist/mixins/listMixin.js +0 -136
  136. package/dist/mixins/listMixin.js.map +0 -1
  137. package/dist/mixins/nextMixin.js +0 -26
  138. package/dist/mixins/nextMixin.js.map +0 -1
  139. package/dist/mixins/paginateMixin.js +0 -110
  140. package/dist/mixins/paginateMixin.js.map +0 -1
  141. package/dist/mixins/requiredMixin.js +0 -34
  142. package/dist/mixins/requiredMixin.js.map +0 -1
  143. package/dist/mixins/sorterMixin.js +0 -149
  144. package/dist/mixins/sorterMixin.js.map +0 -1
  145. package/dist/mixins/storeMixin.js +0 -102
  146. package/dist/mixins/storeMixin.js.map +0 -1
  147. package/dist/mixins/translationMixin.js +0 -68
  148. package/dist/mixins/translationMixin.js.map +0 -1
  149. package/dist/mixins/validationMixin.js +0 -113
  150. package/dist/mixins/validationMixin.js.map +0 -1
  151. package/dist/mixins/widgetMixin.js +0 -447
  152. package/dist/mixins/widgetMixin.js.map +0 -1
  153. package/dist/new-widgets/attributeMixins/actionMixin.js +0 -14
  154. package/dist/new-widgets/attributeMixins/actionMixin.js.map +0 -1
  155. package/dist/new-widgets/attributeMixins/blankMixin.js +0 -10
  156. package/dist/new-widgets/attributeMixins/blankMixin.js.map +0 -1
  157. package/dist/new-widgets/attributeMixins/booleanMixin.js +0 -10
  158. package/dist/new-widgets/attributeMixins/booleanMixin.js.map +0 -1
  159. package/dist/new-widgets/attributeMixins/index.js +0 -20
  160. package/dist/new-widgets/attributeMixins/index.js.map +0 -1
  161. package/dist/new-widgets/attributeMixins/mailtoMixin.js +0 -10
  162. package/dist/new-widgets/attributeMixins/mailtoMixin.js.map +0 -1
  163. package/dist/new-widgets/attributeMixins/multipleMixin.js +0 -28
  164. package/dist/new-widgets/attributeMixins/multipleMixin.js.map +0 -1
  165. package/dist/new-widgets/attributeMixins/numberMixin.js +0 -10
  166. package/dist/new-widgets/attributeMixins/numberMixin.js.map +0 -1
  167. package/dist/new-widgets/attributeMixins/placeholderMixin.js +0 -19
  168. package/dist/new-widgets/attributeMixins/placeholderMixin.js.map +0 -1
  169. package/dist/new-widgets/attributeMixins/telMixin.js +0 -10
  170. package/dist/new-widgets/attributeMixins/telMixin.js.map +0 -1
  171. package/dist/new-widgets/baseWidgetMixin.js +0 -122
  172. package/dist/new-widgets/baseWidgetMixin.js.map +0 -1
  173. package/dist/new-widgets/callbackMixins/autocompletionMixin.js +0 -104
  174. package/dist/new-widgets/callbackMixins/autocompletionMixin.js.map +0 -1
  175. package/dist/new-widgets/callbackMixins/index.js +0 -8
  176. package/dist/new-widgets/callbackMixins/index.js.map +0 -1
  177. package/dist/new-widgets/callbackMixins/richtextMixin.js +0 -42
  178. package/dist/new-widgets/callbackMixins/richtextMixin.js.map +0 -1
  179. package/dist/new-widgets/callbackMixins/slimselect.css +0 -2
  180. package/dist/new-widgets/callbackMixins/slimselect.css.proxy.js +0 -10
  181. package/dist/new-widgets/new-widget-factory.js +0 -96
  182. package/dist/new-widgets/new-widget-factory.js.map +0 -1
  183. package/dist/new-widgets/templateAdditionMixins/addableMixin.js +0 -41
  184. package/dist/new-widgets/templateAdditionMixins/addableMixin.js.map +0 -1
  185. package/dist/new-widgets/templateAdditionMixins/index.js +0 -14
  186. package/dist/new-widgets/templateAdditionMixins/index.js.map +0 -1
  187. package/dist/new-widgets/templateAdditionMixins/labelLastMixin.js +0 -29
  188. package/dist/new-widgets/templateAdditionMixins/labelLastMixin.js.map +0 -1
  189. package/dist/new-widgets/templateAdditionMixins/labelMixin.js +0 -31
  190. package/dist/new-widgets/templateAdditionMixins/labelMixin.js.map +0 -1
  191. package/dist/new-widgets/templates/defaultTemplatesDirectory.js +0 -35
  192. package/dist/new-widgets/templates/defaultTemplatesDirectory.js.map +0 -1
  193. package/dist/new-widgets/templates/displayTemplatesDirectory.js +0 -89
  194. package/dist/new-widgets/templates/displayTemplatesDirectory.js.map +0 -1
  195. package/dist/new-widgets/templates/formTemplatesDirectory.js +0 -397
  196. package/dist/new-widgets/templates/formTemplatesDirectory.js.map +0 -1
  197. package/dist/new-widgets/templates/groupTemplatesDirectory.js +0 -21
  198. package/dist/new-widgets/templates/groupTemplatesDirectory.js.map +0 -1
  199. package/dist/new-widgets/templates/index.js +0 -7
  200. package/dist/new-widgets/templates/index.js.map +0 -1
  201. package/dist/new-widgets/templates/setTemplatesDirectory.js +0 -49
  202. package/dist/new-widgets/templates/setTemplatesDirectory.js.map +0 -1
  203. package/dist/new-widgets/templatesDependencies/altMixin.js +0 -13
  204. package/dist/new-widgets/templatesDependencies/altMixin.js.map +0 -1
  205. package/dist/new-widgets/templatesDependencies/editableMixin.js +0 -77
  206. package/dist/new-widgets/templatesDependencies/editableMixin.js.map +0 -1
  207. package/dist/new-widgets/templatesDependencies/filterRangeFormMixin.js +0 -38
  208. package/dist/new-widgets/templatesDependencies/filterRangeFormMixin.js.map +0 -1
  209. package/dist/new-widgets/templatesDependencies/formCheckboxMixin.js +0 -14
  210. package/dist/new-widgets/templatesDependencies/formCheckboxMixin.js.map +0 -1
  211. package/dist/new-widgets/templatesDependencies/formCheckboxesMixin.js +0 -51
  212. package/dist/new-widgets/templatesDependencies/formCheckboxesMixin.js.map +0 -1
  213. package/dist/new-widgets/templatesDependencies/formDropdownMixin.js +0 -66
  214. package/dist/new-widgets/templatesDependencies/formDropdownMixin.js.map +0 -1
  215. package/dist/new-widgets/templatesDependencies/formFileMixin.js +0 -81
  216. package/dist/new-widgets/templatesDependencies/formFileMixin.js.map +0 -1
  217. package/dist/new-widgets/templatesDependencies/formLengthMixin.js +0 -19
  218. package/dist/new-widgets/templatesDependencies/formLengthMixin.js.map +0 -1
  219. package/dist/new-widgets/templatesDependencies/formMinMaxMixin.js +0 -19
  220. package/dist/new-widgets/templatesDependencies/formMinMaxMixin.js.map +0 -1
  221. package/dist/new-widgets/templatesDependencies/formMixin.js +0 -66
  222. package/dist/new-widgets/templatesDependencies/formMixin.js.map +0 -1
  223. package/dist/new-widgets/templatesDependencies/formNumberMixin.js +0 -14
  224. package/dist/new-widgets/templatesDependencies/formNumberMixin.js.map +0 -1
  225. package/dist/new-widgets/templatesDependencies/formRadioMixin.js +0 -16
  226. package/dist/new-widgets/templatesDependencies/formRadioMixin.js.map +0 -1
  227. package/dist/new-widgets/templatesDependencies/formStepMixin.js +0 -13
  228. package/dist/new-widgets/templatesDependencies/formStepMixin.js.map +0 -1
  229. package/dist/new-widgets/templatesDependencies/multipleFormMixin.js +0 -107
  230. package/dist/new-widgets/templatesDependencies/multipleFormMixin.js.map +0 -1
  231. package/dist/new-widgets/templatesDependencies/multipleselectFormMixin.js +0 -74
  232. package/dist/new-widgets/templatesDependencies/multipleselectFormMixin.js.map +0 -1
  233. package/dist/new-widgets/templatesDependencies/patternMixin.js +0 -19
  234. package/dist/new-widgets/templatesDependencies/patternMixin.js.map +0 -1
  235. package/dist/new-widgets/templatesDependencies/rangeMixin.js +0 -110
  236. package/dist/new-widgets/templatesDependencies/rangeMixin.js.map +0 -1
  237. package/dist/new-widgets/templatesDependencies/setMixin.js +0 -12
  238. package/dist/new-widgets/templatesDependencies/setMixin.js.map +0 -1
  239. package/dist/new-widgets/templatesDependencies/valueRichtextMixin.js +0 -12
  240. package/dist/new-widgets/templatesDependencies/valueRichtextMixin.js.map +0 -1
  241. package/dist/new-widgets/valueTransformationMixins/autolinkMixin.js +0 -18
  242. package/dist/new-widgets/valueTransformationMixins/autolinkMixin.js.map +0 -1
  243. package/dist/new-widgets/valueTransformationMixins/dateMixin.js +0 -35
  244. package/dist/new-widgets/valueTransformationMixins/dateMixin.js.map +0 -1
  245. package/dist/new-widgets/valueTransformationMixins/dateTimeMixin.js +0 -16
  246. package/dist/new-widgets/valueTransformationMixins/dateTimeMixin.js.map +0 -1
  247. package/dist/new-widgets/valueTransformationMixins/index.js +0 -16
  248. package/dist/new-widgets/valueTransformationMixins/index.js.map +0 -1
  249. package/dist/new-widgets/valueTransformationMixins/markdownMixin.js +0 -25
  250. package/dist/new-widgets/valueTransformationMixins/markdownMixin.js.map +0 -1
  251. package/dist/new-widgets/valueTransformationMixins/multilineMixin.js +0 -17
  252. package/dist/new-widgets/valueTransformationMixins/multilineMixin.js.map +0 -1
  253. package/dist/new-widgets/valueTransformationMixins/oembedMixin.js +0 -27
  254. package/dist/new-widgets/valueTransformationMixins/oembedMixin.js.map +0 -1
  255. package/dist/solid-template-element.js +0 -164
  256. package/dist/solid-template-element.js.map +0 -1
  257. package/dist/style/default-theme.css +0 -24
  258. package/dist/style/default-theme.css.proxy.js +0 -10
  259. package/dist/widgets/baseWidget.js +0 -332
  260. package/dist/widgets/baseWidget.js.map +0 -1
  261. package/dist/widgets/widget-factory.js +0 -24
  262. package/dist/widgets/widget-factory.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["validationMixin.ts"],"names":["dialogPolyfill","html","ifDefined","uniqID","TranslationMixin","preHTML","ValidationMixin","name","use","attributes","confirmationMessage","type","String","default","confirmationType","confirmationSubmitText","confirmationCancelText","confirmationSubmitClass","undefined","confirmationCancelClass","confirmationWidget","created","dialogID","showModal","dialog","document","getElementById","registerDialog","performAction","element","hasAttribute","console","warn","confirm","t","validateModal","getModalDialog","quitDialog","close","confirmChoice","resourceId"],"mappings":"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","sourcesContent":["import dialogPolyfill from 'dialog-polyfill'\nimport { html } from 'lit-html';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { uniqID } from '../libs/helpers';\nimport { TranslationMixin } from './translationMixin';\nimport { preHTML } from '../libs/lit-helpers';\n\nconst ValidationMixin = {\n name: 'validation-mixin',\n use: [TranslationMixin],\n attributes: {\n confirmationMessage: {\n type: String,\n default: null\n },\n confirmationType: {\n type: String,\n default: null\n },\n confirmationSubmitText: {\n type: String,\n default: null\n },\n confirmationCancelText: {\n type: String,\n default: null\n },\n confirmationSubmitClass: {\n type: String,\n default: undefined\n },\n confirmationCancelClass: {\n type: String,\n default: undefined\n },\n confirmationWidget: {\n type: String,\n default: undefined\n }\n },\n created() {\n this.dialogID = uniqID();\n },\n showModal() {\n var dialog: any = document.getElementById(this.dialogID);\n dialogPolyfill.registerDialog(dialog);\n return dialog.showModal();\n },\n performAction() {\n // Console warning if conf-type attr not filled AND conf-message filled\n if (this.element.hasAttribute('confirmation-message') && !this.confirmationType) console.warn('confirmation-type attribute is missing.');\n // Data directly submitted OR confirm dialog modal displayed\n if ((!this.confirmationType) || (this.confirmationType == \"confirm\" && confirm(this.confirmationMessage || this.t(\"validation.message\")))) this.validateModal();\n // Customisable dialog modal opened\n if (this.confirmationType == \"dialog\") {\n this.showModal();\n }\n },\n getModalDialog() {\n if (this.confirmationType == 'dialog') {\n const quitDialog = () => {\n var dialog: any = document.getElementById(this.dialogID);\n if (dialog == null) return;\n dialog.close();\n }\n const confirmChoice = () => {\n this.validateModal();\n quitDialog();\n }\n return html`\n <dialog id=\"${this.dialogID}\">\n ${this.confirmationWidget ? preHTML`\n <${this.confirmationWidget} value=${this.resourceId}></${this.confirmationWidget}>\n ` : html`\n <p>${this.confirmationMessage || this.t(\"validation.message\")}</p>\n `}\n <div>\n <button\n @click=${confirmChoice} \n class=${ifDefined(this.confirmationSubmitClass)}\n >\n ${this.confirmationSubmitText || this.t(\"validation.submit-text\")}\n </button>\n <button\n @click=${quitDialog}\n class=${ifDefined(this.confirmationCancelClass)}\n >\n ${this.confirmationCancelText || this.t(\"validation.cancel-text\")}\n </button>\n </div>\n </dialog>\n `\n } else return '';\n },\n}\n\nexport {\n ValidationMixin\n}"]}
@@ -1,447 +0,0 @@
1
- function _templateObject6() {
2
- const data = _taggedTemplateLiteral(["\n <span>", "</span>\n "]);
3
-
4
- _templateObject6 = function () {
5
- return data;
6
- };
7
-
8
- return data;
9
- }
10
-
11
- function _templateObject5() {
12
- const data = _taggedTemplateLiteral(["", ""]);
13
-
14
- _templateObject5 = function () {
15
- return data;
16
- };
17
-
18
- return data;
19
- }
20
-
21
- function _templateObject4() {
22
- const data = _taggedTemplateLiteral(["<", " ...=", "></", ">"]);
23
-
24
- _templateObject4 = function () {
25
- return data;
26
- };
27
-
28
- return data;
29
- }
30
-
31
- function _templateObject3() {
32
- const data = _taggedTemplateLiteral(["<", " ...=", "></", ">"]);
33
-
34
- _templateObject3 = function () {
35
- return data;
36
- };
37
-
38
- return data;
39
- }
40
-
41
- function _templateObject2() {
42
- const data = _taggedTemplateLiteral(["\n <", "\n name=\"", "\"\n class=\"", "\"\n >", "</", ">\n "]);
43
-
44
- _templateObject2 = function () {
45
- return data;
46
- };
47
-
48
- return data;
49
- }
50
-
51
- function _templateObject() {
52
- const data = _taggedTemplateLiteral([""]);
53
-
54
- _templateObject = function () {
55
- return data;
56
- };
57
-
58
- return data;
59
- }
60
-
61
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
62
-
63
- import { spread, preHTML } from '../libs/lit-helpers.js';
64
- import { parseFieldsString, findClosingBracketMatchIndex } from '../libs/helpers.js';
65
- import { newWidgetFactory } from '../new-widgets/new-widget-factory.js';
66
- import { WidgetType } from './interfaces.js';
67
- import { html, render } from '../_snowpack/pkg/lit-html.js';
68
- import { ifDefined } from '../_snowpack/pkg/lit-html/directives/if-defined.js';
69
- const WidgetMixin = {
70
- name: 'widget-mixin',
71
- use: [],
72
- attributes: {
73
- fields: {
74
- type: String,
75
- default: undefined
76
- }
77
- },
78
- initialState: {
79
- nameWidgets: null,
80
- _div: null
81
- },
82
-
83
- created() {
84
- this.nameWidgets = [];
85
- },
86
-
87
- attached() {
88
- if (!this.dataSrc && !this.resource && this.noRender === null) this.populate();
89
- },
90
-
91
- get parentElement() {
92
- return 'div';
93
- },
94
-
95
- get div() {
96
- if (this._div) return this._div;
97
- this._div = document.createElement(this.parentElement);
98
- this.element.appendChild(this._div);
99
- return this._div;
100
- },
101
-
102
- set div(value) {
103
- this._div = value;
104
- },
105
-
106
- get widgets() {
107
- return this.nameWidgets.map(name => this.element.querySelector("[name=\"".concat(name, "\"]")));
108
- },
109
-
110
- /**
111
- * Return field list of the component
112
- */
113
- async getFields() {
114
- // TODO : improve code
115
- const attr = this.fields;
116
- if (attr === '') return [];
117
- if (attr) return parseFieldsString(attr);
118
- let resource = this.resource;
119
-
120
- if (resource && resource.isContainer()) {
121
- // If container, keep the 1rst resource
122
- for (let res of resource['ldp:contains']) {
123
- resource = res;
124
- break;
125
- }
126
- }
127
-
128
- if (!this.dataSrc) console.error(new Error('You must provide a "fields" attribute'));
129
- if (!resource) return [];
130
- let fields = [];
131
-
132
- for (const prop of resource.properties) {
133
- if (!prop.startsWith('@') && !(prop === "permissions") && (await resource[prop])) fields.push(prop);
134
- }
135
-
136
- return fields;
137
- },
138
-
139
- /**
140
- * return attribute if "field" is an action
141
- * @param field - string
142
- */
143
- getAction(field) {
144
- const action = this.element.getAttribute('action-' + field);
145
- return action;
146
- },
147
-
148
- /**
149
- * return true if "field" is editable
150
- * @param field - string
151
- */
152
- editable(field) {
153
- return this.element.hasAttribute('editable-' + field);
154
- },
155
-
156
- /**
157
- * Return regexp to check if "field" is a set
158
- * @param field - string
159
- */
160
- getSetRegexp(field) {
161
- return new RegExp("(^|\\,|\\(|\\s)\\s*".concat(field, "\\s*\\("), 'g');
162
- },
163
-
164
- /**
165
- * Return fields contained in set "field"
166
- * @param field - string
167
- */
168
- getSet(field) {
169
- const setString = this.fields.match(this.getSetRegexp(field));
170
- if (!setString) return [];
171
- const firstSetBracket = this.fields.indexOf(setString[0]) + setString[0].length - 1;
172
- const lastSetBracket = findClosingBracketMatchIndex(this.fields, firstSetBracket);
173
- const set = this.fields.substring(firstSetBracket + 1, lastSetBracket);
174
- return parseFieldsString(set);
175
- },
176
-
177
- /**
178
- * Return true if "field" is a set
179
- * @param field - string
180
- */
181
- isSet(field) {
182
- if (!this.fields) return false;
183
- let foundSets = this.fields.match(this.getSetRegexp(field));
184
- return foundSets ? foundSets.length > 0 : false;
185
- },
186
-
187
- isString(field) {
188
- return field.startsWith('\'') || field.startsWith('\"');
189
- },
190
-
191
- /**
192
- * Return the value of "resource" for predicate "field"
193
- * @param field - string
194
- * @param resource - Resource
195
- */
196
- async fetchValue(field, resource) {
197
- return resource && !resource.isContainer() ? await resource[field] : undefined;
198
- },
199
-
200
- /**
201
- * Return the value of the field
202
- * @param field - field
203
- */
204
- async getValue(field, resource) {
205
- const escapedField = this.getEscapedField(field);
206
-
207
- if (this.getAction(escapedField)) {
208
- return this.getAction(escapedField);
209
- }
210
-
211
- if (this.element.hasAttribute('value-' + field)) {
212
- return this.element.getAttribute('value-' + field);
213
- }
214
-
215
- let resourceValue = await this.fetchValue(field, resource); // Empty value
216
-
217
- if (resourceValue === undefined || resourceValue === '' || resourceValue === null) // If null or empty, return field default value
218
- return this.element.hasAttribute('default-' + field) ? this.element.getAttribute('default-' + field) : '';
219
- return resourceValue;
220
- },
221
-
222
- empty() {},
223
-
224
- /**
225
- * Return a widget from a tagName, and create it if necessary
226
- * @param tagName - string
227
- */
228
- widgetFromTagName(tagName) {
229
- let type = tagName.startsWith('solid') ? WidgetType.CUSTOM : WidgetType.USER;
230
-
231
- if (!customElements.get(tagName)) {
232
- // component does not exist
233
- if (tagName.startsWith('solid')) newWidgetFactory(tagName); // solid- -> create it
234
- else type = WidgetType.NATIVE; // or use a native tag
235
- }
236
-
237
- return {
238
- tagName,
239
- type
240
- }; // return tagName
241
- },
242
-
243
- /**
244
- * Return widget for field "field"
245
- * @param field - string
246
- * @param isSet - boolean
247
- */
248
- getWidget(field, isSet = false) {
249
- const widget = this.element.getAttribute('widget-' + field);
250
- if (widget) return this.widgetFromTagName(widget);
251
- if (this.getAction(field)) return this.widgetFromTagName('solid-action');
252
- return !isSet ? this.widgetFromTagName(this.defaultWidget) : this.widgetFromTagName(this.defaultSetWidget);
253
- },
254
-
255
- /**
256
- * Return multiple widget if "field" is a multiple, false if it's not
257
- * @param field - string
258
- */
259
- multiple(field) {
260
- const attribute = 'multiple-' + field;
261
- if (!this.element.hasAttribute(attribute)) return null;
262
- const widget = this.element.getAttribute(attribute) || this.defaultMultipleWidget;
263
- return this.widgetFromTagName(widget);
264
- },
265
-
266
- /**
267
- * If attribute "lookForAttr" is set on element, add "attrKey" to the "attributes" list
268
- * @param lookForAttr - string
269
- * @param setAttrKey - string
270
- * @param attributes - object
271
- */
272
- addToAttributes(lookForAttr, setAttrKey, attributes) {
273
- const attribute = this.element.getAttribute(lookForAttr);
274
- if (attribute == null) return;
275
- attributes[setAttrKey] = attribute;
276
- },
277
-
278
- /**
279
- * Return all the attributes of widget "field"
280
- * @param field - string
281
- * @param resource - Resource
282
- */
283
- widgetAttributes(field, resource) {
284
- const attrs = {
285
- name: field
286
- };
287
- const escapedField = this.getEscapedField(field); // transfer all multiple-[field]-[attr] attributes as [attr] for multiple widget [field]
288
-
289
- const multipleAttributes = ['fields', 'label', 'widget', 'add-label', 'remove-label', 'next', 'empty-widget'];
290
-
291
- for (let attr of multipleAttributes) this.addToAttributes("multiple-".concat(escapedField, "-").concat(attr), attr, attrs); // transfer all [attr]-[field] attributes as [attr] attribute for widget [field]
292
-
293
-
294
- const defaultAttributes = ['range', 'enum', 'label', 'placeholder', 'class',,
295
- /* 'widget', */
296
- 'required', 'editable', 'autocomplete', 'upload-url', 'option-label', 'option-value', 'order-by', // deprecated. Remove in 0.15
297
- 'each-label', 'order-asc', 'order-desc', 'min', 'max', 'pattern', 'title', 'start-value', 'end-value', 'alt', 'step', 'maxlength', 'minlength', 'search-text', 'search-placeholder'];
298
-
299
- for (let attr of defaultAttributes) this.addToAttributes("".concat(attr, "-").concat(escapedField), attr, attrs);
300
-
301
- const addableAttributes = Array.from(this.element.attributes).filter(a => a.name.startsWith("addable-".concat(escapedField)));
302
-
303
- for (let attr of addableAttributes) this.addToAttributes(attr.name, attr.name.replace("addable-".concat(escapedField), 'addable'), attrs);
304
-
305
- const resourceId = resource ? resource['@id'] : null;
306
- if (this.multiple(escapedField)) attrs['widget'] = this.getWidget(escapedField).tagName;
307
- if (this.getAction(escapedField) && resourceId) attrs['src'] = this.element.getAttribute('src-' + escapedField) || resourceId;
308
- if (this.editable(escapedField) && resourceId) attrs['value-id'] = resourceId;
309
- return attrs;
310
- },
311
-
312
- /**
313
- * Creates and return a widget for field + add it to the widget list
314
- * @param field - string
315
- */
316
- async createWidgetTemplate(field, resource = null, transformAttributes = false) {
317
- if (this.isString(field)) return this.createString(field); // field is a static string
318
-
319
- if (this.isSet(field)) return await this.createSet(field);
320
- const currentResource = resource || this.resource;
321
- let attributes = this.widgetAttributes(field, currentResource);
322
- const escapedField = this.getEscapedField(field);
323
- const widgetMeta = this.multiple(escapedField) || this.getWidget(escapedField);
324
- let tagName = widgetMeta.tagName;
325
- let widgetTemplate = html(_templateObject()); // Set attributes
326
-
327
- let value = await this.getValue(field, currentResource);
328
-
329
- if (widgetMeta.type === WidgetType.NATIVE) {
330
- // native widget (ie: h1)
331
- widgetTemplate = preHTML(_templateObject2(), tagName, ifDefined(attributes.name), ifDefined(attributes.class), value, tagName);
332
- } else {
333
- // custom widget (ie: solid-display-value)
334
- // Check if value is defined, and if the default widget is needed
335
- if ((value === null || value === '') && this.element.hasAttribute('default-widget-' + field)) {
336
- tagName = this.element.getAttribute('default-widget-' + field);
337
- } // Set attributes to the widget
338
- // setAttribute set a string. Make sure null values are empty
339
-
340
-
341
- if (value === null || value === undefined) attributes.value = '';
342
-
343
- if (widgetMeta.type === WidgetType.USER && value['@id']) {
344
- // if value is a resource and solid-widget used, set data-src
345
- attributes['data-src'] = value['@id'];
346
- } else {
347
- // otherwise, set value attribute
348
- attributes['value'] = value;
349
- } // Subscribe widgets if they show a resource
350
-
351
-
352
- if (value && value['@id']) attributes['auto-subscribe'] = value['@id']; // Transform store://XXX attributes
353
-
354
- if (transformAttributes) attributes = await this.transformAttributes(attributes, currentResource);
355
- widgetTemplate = preHTML(_templateObject3(), tagName, spread(attributes), tagName);
356
- }
357
-
358
- this.nameWidgets.push(field);
359
- return widgetTemplate;
360
- },
361
-
362
- defineAttribute(widget, attribute, value) {
363
- if (widget.getAttribute(attribute) !== value) {
364
- // if attribute is different than previous one
365
- widget.setAttribute(attribute, value); // set it
366
- }
367
- },
368
-
369
- /**
370
- * Create a set and add fields to it
371
- * @param field - string
372
- */
373
- async createSet(field) {
374
- const setWidget = this.getWidget(field, true); // Get set attributes
375
-
376
- const attrs = {
377
- name: field
378
- };
379
- const setAttributes = ['class', 'label'];
380
-
381
- for (let attr of setAttributes) this.addToAttributes("".concat(attr, "-").concat(field), attr, attrs); // Create widget if not already existing
382
-
383
-
384
- let widget = this.element.querySelector("".concat(setWidget.tagName, "[name=\"").concat(field, "\"]"));
385
- let initializing = false; // used to render widget only first time
386
-
387
- if (!widget) {
388
- widget = document.createElement(setWidget.tagName);
389
- initializing = true;
390
- }
391
-
392
- for (let name of Object.keys(attrs)) {
393
- this.defineAttribute(widget, name, attrs[name], setWidget.type);
394
- }
395
-
396
- if (widget.component && initializing) widget.component.render();
397
- let setFields = this.getSet(field); // Catch widget for the set if all these fields are empty
398
-
399
- if (this.element.hasAttribute('empty-' + field)) {
400
- let hasOnlyEmpty = true;
401
-
402
- for (let field of setFields) {
403
- let value = await this.getValue(field, this.resource);
404
-
405
- if (value !== '') {
406
- // if one not empty
407
- hasOnlyEmpty = false;
408
- continue; // break loop
409
- }
410
- }
411
-
412
- ;
413
-
414
- if (hasOnlyEmpty) {
415
- // if only empty values, return empty-widget
416
- const attributes = this.widgetAttributes(field, this.resource);
417
- const tagName = this.element.getAttribute("empty-".concat(field));
418
- const valueSet = this.element.getAttribute("empty-".concat(field, "-value"));
419
- if (valueSet) attributes.value = valueSet;
420
- return preHTML(_templateObject4(), tagName, spread(attributes), tagName);
421
- }
422
-
423
- ;
424
- } // Render template
425
-
426
-
427
- const widgetsTemplate = await Promise.all(setFields.map(field => this.createWidgetTemplate(field)));
428
- const template = html(_templateObject5(), widgetsTemplate);
429
- render(template, widget.querySelector('[data-content]') || widget);
430
- return widget;
431
- },
432
-
433
- createString(value) {
434
- return html(_templateObject6(), value.slice(1, -1).replace(/\\(['"])/g, '$1'));
435
- },
436
-
437
- /**
438
- * Returns field name without starting "@"
439
- * @param field
440
- */
441
- getEscapedField(field) {
442
- return field.startsWith('@') ? field.slice(1, field.length) : field;
443
- }
444
-
445
- };
446
- export { WidgetMixin };
447
- //# sourceMappingURL=widgetMixin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["widgetMixin.ts"],"names":["spread","preHTML","parseFieldsString","findClosingBracketMatchIndex","newWidgetFactory","WidgetType","html","render","ifDefined","WidgetMixin","name","use","attributes","fields","type","String","default","undefined","initialState","nameWidgets","_div","created","attached","dataSrc","resource","noRender","populate","parentElement","div","document","createElement","element","appendChild","value","widgets","map","querySelector","getFields","attr","isContainer","res","console","error","Error","prop","properties","startsWith","push","getAction","field","action","getAttribute","editable","hasAttribute","getSetRegexp","RegExp","getSet","setString","match","firstSetBracket","indexOf","length","lastSetBracket","set","substring","isSet","foundSets","isString","fetchValue","getValue","escapedField","getEscapedField","resourceValue","empty","widgetFromTagName","tagName","CUSTOM","USER","customElements","get","NATIVE","getWidget","widget","defaultWidget","defaultSetWidget","multiple","attribute","defaultMultipleWidget","addToAttributes","lookForAttr","setAttrKey","widgetAttributes","attrs","multipleAttributes","defaultAttributes","addableAttributes","Array","from","filter","a","replace","resourceId","createWidgetTemplate","transformAttributes","createString","createSet","currentResource","widgetMeta","widgetTemplate","class","defineAttribute","setAttribute","setWidget","setAttributes","initializing","Object","keys","component","setFields","hasOnlyEmpty","valueSet","widgetsTemplate","Promise","all","template","slice"],"mappings":"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","sourcesContent":["import { spread, preHTML } from '../libs/lit-helpers';\nimport { parseFieldsString, findClosingBracketMatchIndex } from '../libs/helpers';\nimport { newWidgetFactory } from '../new-widgets/new-widget-factory';\nimport { WidgetInterface, WidgetType, Resource } from './interfaces';\nimport { html, render, TemplateResult } from 'lit-html';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\nconst WidgetMixin = {\n name: 'widget-mixin',\n use: [],\n attributes: {\n fields: {\n type: String,\n default: undefined,\n }\n },\n initialState: {\n nameWidgets: null,\n _div: null\n },\n created(): void {\n this.nameWidgets = [];\n },\n attached(): void {\n if (!this.dataSrc && !this.resource && this.noRender === null) this.populate();\n },\n get parentElement(): string {\n return 'div';\n },\n get div(): HTMLElement {\n if (this._div) return this._div;\n this._div = document.createElement(this.parentElement);\n this.element.appendChild(this._div);\n return this._div;\n },\n set div(value) {\n this._div = value\n },\n get widgets() {\n return this.nameWidgets.map((name: string) => this.element.querySelector(`[name=\"${name}\"]`));\n },\n /**\n * Return field list of the component\n */\n async getFields(): Promise<string[]>{ // TODO : improve code\n const attr = this.fields;\n if (attr === '') return [];\n if (attr) return parseFieldsString(attr);\n\n let resource = this.resource as Resource;\n if (resource && resource.isContainer()) { // If container, keep the 1rst resource\n for (let res of resource['ldp:contains']) {\n resource = res;\n break;\n }\n }\n\n if (!this.dataSrc) console.error(new Error('You must provide a \"fields\" attribute'));\n if(!resource) return [];\n\n let fields: string[] = [];\n for (const prop of resource.properties) {\n if ((!prop.startsWith('@') && !(prop === \"permissions\")) && await resource[prop]) fields.push(prop);\n }\n return fields;\n },\n /**\n * return attribute if \"field\" is an action\n * @param field - string\n */\n getAction(field: string): string {\n const action = this.element.getAttribute('action-' + field);\n return action;\n },\n /**\n * return true if \"field\" is editable\n * @param field - string\n */\n editable(field: string): string {\n return this.element.hasAttribute('editable-' + field);\n },\n /**\n * Return regexp to check if \"field\" is a set\n * @param field - string\n */\n getSetRegexp(field: string) {\n return new RegExp(`(^|\\\\,|\\\\(|\\\\s)\\\\s*${field}\\\\s*\\\\(`, 'g')\n },\n /**\n * Return fields contained in set \"field\"\n * @param field - string\n */\n getSet(field: string): string[] {\n const setString = this.fields.match(this.getSetRegexp(field));\n if (!setString) return [];\n const firstSetBracket = this.fields.indexOf(setString[0]) + (setString[0].length) - 1;\n const lastSetBracket = findClosingBracketMatchIndex(this.fields, firstSetBracket);\n const set = this.fields.substring(firstSetBracket + 1, lastSetBracket);\n return parseFieldsString(set);\n },\n /**\n * Return true if \"field\" is a set\n * @param field - string\n */\n isSet(field: string): boolean {\n if (!this.fields) return false;\n let foundSets = this.fields.match(this.getSetRegexp(field));\n return foundSets ? foundSets.length > 0 : false;\n },\n isString(field: string): boolean {\n return field.startsWith('\\'') || field.startsWith('\\\"');\n },\n /**\n * Return the value of \"resource\" for predicate \"field\"\n * @param field - string\n * @param resource - Resource\n */\n async fetchValue(field: string, resource: Resource) {\n return resource && !resource.isContainer() ? await resource[field] : undefined;\n },\n /**\n * Return the value of the field\n * @param field - field\n */\n async getValue(field: string, resource: Resource) {\n const escapedField = this.getEscapedField(field);\n if (this.getAction(escapedField)) {\n return this.getAction(escapedField);\n }\n if (this.element.hasAttribute('value-' + field)) {\n return this.element.getAttribute('value-' + field);\n }\n let resourceValue = await this.fetchValue(field, resource);\n\n // Empty value\n if (resourceValue === undefined || resourceValue === '' || resourceValue === null) // If null or empty, return field default value\n return this.element.hasAttribute('default-' + field) ?\n this.element.getAttribute('default-' + field) : '';\n\n return resourceValue;\n },\n empty(): void {},\n /**\n * Return a widget from a tagName, and create it if necessary\n * @param tagName - string\n */\n widgetFromTagName(tagName: string) {\n let type = tagName.startsWith('solid') ? WidgetType.CUSTOM : WidgetType.USER;\n if (!customElements.get(tagName)) { // component does not exist\n if (tagName.startsWith('solid')) newWidgetFactory(tagName); // solid- -> create it\n else type = WidgetType.NATIVE; // or use a native tag\n }\n return { tagName, type }; // return tagName\n },\n /**\n * Return widget for field \"field\"\n * @param field - string\n * @param isSet - boolean\n */\n getWidget(field: string, isSet: boolean = false): WidgetInterface {\n const widget = this.element.getAttribute('widget-' + field);\n\n if (widget) return this.widgetFromTagName(widget);\n if (this.getAction(field)) return this.widgetFromTagName('solid-action');\n\n return !isSet ? this.widgetFromTagName(this.defaultWidget) : this.widgetFromTagName(this.defaultSetWidget);\n },\n /**\n * Return multiple widget if \"field\" is a multiple, false if it's not\n * @param field - string\n */\n multiple(field: string): WidgetInterface|null {\n const attribute = 'multiple-' + field;\n if (!this.element.hasAttribute(attribute)) return null;\n const widget = this.element.getAttribute(attribute) || this.defaultMultipleWidget;\n return this.widgetFromTagName(widget);\n },\n /**\n * If attribute \"lookForAttr\" is set on element, add \"attrKey\" to the \"attributes\" list\n * @param lookForAttr - string\n * @param setAttrKey - string\n * @param attributes - object\n */\n addToAttributes(lookForAttr: string, setAttrKey: string, attributes: object) {\n const attribute = this.element.getAttribute(lookForAttr);\n if (attribute == null) return;\n attributes[setAttrKey] = attribute;\n },\n /**\n * Return all the attributes of widget \"field\"\n * @param field - string\n * @param resource - Resource\n */\n widgetAttributes(field: string, resource: Resource): object {\n const attrs = { name: field };\n const escapedField = this.getEscapedField(field);\n\n // transfer all multiple-[field]-[attr] attributes as [attr] for multiple widget [field]\n const multipleAttributes = [\n 'fields',\n 'label',\n 'widget',\n 'add-label',\n 'remove-label',\n 'next', \n 'empty-widget'\n ];\n for (let attr of multipleAttributes) this.addToAttributes(`multiple-${escapedField}-${attr}`, attr, attrs)\n\n // transfer all [attr]-[field] attributes as [attr] attribute for widget [field]\n const defaultAttributes = [\n 'range',\n 'enum',\n 'label',\n 'placeholder',\n 'class',\n /* 'widget', */,\n 'required',\n 'editable',\n 'autocomplete',\n 'upload-url',\n 'option-label',\n 'option-value',\n 'order-by', // deprecated. Remove in 0.15\n 'each-label',\n 'order-asc',\n 'order-desc',\n 'min',\n 'max',\n 'pattern',\n 'title',\n 'start-value',\n 'end-value',\n 'alt',\n 'step',\n 'maxlength',\n 'minlength',\n 'search-text',\n 'search-placeholder',\n ];\n for (let attr of defaultAttributes) this.addToAttributes(`${attr}-${escapedField}`, attr, attrs)\n\n const addableAttributes: Attr[] = (Array.from(this.element.attributes) as Attr[]).filter((a: Attr) => a.name.startsWith(`addable-${escapedField}`));\n for (let attr of addableAttributes) this.addToAttributes(attr.name, attr.name.replace(`addable-${escapedField}`, 'addable'), attrs)\n\n const resourceId = resource ? resource!['@id'] : null;\n if (this.multiple(escapedField)) attrs['widget'] = this.getWidget(escapedField).tagName;\n if (this.getAction(escapedField) && resourceId) attrs['src'] = this.element.getAttribute('src-' + escapedField) || resourceId;\n if (this.editable(escapedField) && resourceId) attrs['value-id'] = resourceId;\n\n return attrs;\n },\n /**\n * Creates and return a widget for field + add it to the widget list\n * @param field - string\n */\n async createWidgetTemplate(field: string, resource = null, transformAttributes = false): Promise<TemplateResult> {\n if (this.isString(field)) return this.createString(field); // field is a static string\n if (this.isSet(field)) return await this.createSet(field);\n\n const currentResource = resource || this.resource;\n let attributes = this.widgetAttributes(field, currentResource);\n const escapedField = this.getEscapedField(field);\n const widgetMeta = this.multiple(escapedField) || this.getWidget(escapedField);\n let tagName = widgetMeta.tagName;\n let widgetTemplate = html``;\n\n // Set attributes\n let value = await this.getValue(field, currentResource);\n if (widgetMeta.type === WidgetType.NATIVE) { // native widget (ie: h1)\n widgetTemplate = preHTML`\n <${tagName}\n name=\"${ifDefined(attributes.name)}\"\n class=\"${ifDefined(attributes.class)}\"\n >${value}</${tagName}>\n `;\n } else { // custom widget (ie: solid-display-value)\n // Check if value is defined, and if the default widget is needed\n if ((value === null || value === '') && this.element.hasAttribute('default-widget-' + field)) {\n tagName = this.element.getAttribute('default-widget-' + field);\n }\n // Set attributes to the widget\n // setAttribute set a string. Make sure null values are empty\n if (value === null || value === undefined) attributes.value = '';\n if (widgetMeta.type === WidgetType.USER && value['@id']) { // if value is a resource and solid-widget used, set data-src\n attributes['data-src'] = value['@id'];\n } else { // otherwise, set value attribute\n attributes['value'] = value;\n }\n\n // Subscribe widgets if they show a resource\n if (value && value['@id']) attributes['auto-subscribe'] = value['@id'];\n\n // Transform store://XXX attributes\n if (transformAttributes) attributes = await this.transformAttributes(attributes, currentResource);\n\n widgetTemplate = preHTML`<${tagName} ...=${spread(attributes)}></${tagName}>`;\n }\n\n this.nameWidgets.push(field);\n return widgetTemplate;\n },\n defineAttribute(widget: HTMLElement, attribute: string, value: any) {\n if (widget.getAttribute(attribute) !== value) { // if attribute is different than previous one\n widget.setAttribute(attribute, value); // set it\n }\n },\n /**\n * Create a set and add fields to it\n * @param field - string\n */\n async createSet(field: string): Promise<TemplateResult> {\n const setWidget = this.getWidget(field, true);\n\n // Get set attributes\n const attrs = { name: field };\n const setAttributes = [\n 'class',\n 'label'\n ];\n for (let attr of setAttributes) this.addToAttributes(`${attr}-${field}`, attr, attrs);\n\n // Create widget if not already existing\n let widget = this.element.querySelector(`${setWidget.tagName}[name=\"${field}\"]`);\n let initializing = false; // used to render widget only first time\n if (!widget) {\n widget = document.createElement(setWidget.tagName);\n initializing = true;\n }\n for (let name of Object.keys(attrs)) {\n this.defineAttribute(widget, name, attrs[name], setWidget.type);\n }\n if (widget.component && initializing) widget.component.render();\n let setFields = this.getSet(field);\n // Catch widget for the set if all these fields are empty\n if (this.element.hasAttribute('empty-' + field)) {\n let hasOnlyEmpty = true;\n for(let field of setFields) {\n let value: string = await this.getValue(field, this.resource);\n if (value !== '') { // if one not empty\n hasOnlyEmpty = false;\n continue; // break loop\n }\n };\n if(hasOnlyEmpty) { // if only empty values, return empty-widget\n const attributes = this.widgetAttributes(field, this.resource);\n const tagName = this.element.getAttribute(`empty-${field}`);\n const valueSet = this.element.getAttribute(`empty-${field}-value`);\n if (valueSet) attributes.value = valueSet;\n return preHTML`<${tagName} ...=${spread(attributes)}></${tagName}>`;\n };\n }\n\n // Render template\n const widgetsTemplate = await Promise.all(setFields.map((field: string) => this.createWidgetTemplate(field)));\n const template = html`${widgetsTemplate}`;\n render(template, widget.querySelector('[data-content]') || widget);\n return widget;\n },\n createString(value: string): TemplateResult {\n return html`\n <span>${value.slice(1, -1).replace(/\\\\(['\"])/g, '$1')}</span>\n `;\n },\n /**\n * Returns field name without starting \"@\"\n * @param field\n */\n getEscapedField(field: string): string {\n return field.startsWith('@') ? field.slice(1, field.length) : field;\n }\n}\n\nexport {\n WidgetMixin\n}"]}
@@ -1,14 +0,0 @@
1
- const ActionMixin = {
2
- name: 'action-mixin',
3
- attributes: {
4
- src: {
5
- type: String,
6
- default: '',
7
- callback: function (newValue) {
8
- this.addToAttributes(newValue, 'src');
9
- }
10
- }
11
- }
12
- };
13
- export { ActionMixin };
14
- //# sourceMappingURL=actionMixin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["actionMixin.ts"],"names":["ActionMixin","name","attributes","src","type","String","default","callback","newValue","addToAttributes"],"mappings":"AAAA,MAAMA,WAAW,GAAG;AAClBC,EAAAA,IAAI,EAAE,cADY;AAElBC,EAAAA,UAAU,EAAE;AACVC,IAAAA,GAAG,EAAE;AACHC,MAAAA,IAAI,EAAEC,MADH;AAEHC,MAAAA,OAAO,EAAE,EAFN;AAGHC,MAAAA,QAAQ,EAAE,UAAUC,QAAV,EAA4B;AACpC,aAAKC,eAAL,CAAqBD,QAArB,EAA+B,KAA/B;AACD;AALE;AADK;AAFM,CAApB;AAaA,SACER,WADF","sourcesContent":["const ActionMixin = {\n name: 'action-mixin',\n attributes: {\n src: {\n type: String,\n default: '',\n callback: function (newValue: string) {\n this.addToAttributes(newValue, 'src');\n }\n },\n },\n}\n\nexport {\n ActionMixin\n}"]}
@@ -1,10 +0,0 @@
1
- const BlankMixin = {
2
- name: 'blank-mixin',
3
-
4
- created() {
5
- this.listAttributes['target'] = '_blank';
6
- }
7
-
8
- };
9
- export { BlankMixin };
10
- //# sourceMappingURL=blankMixin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["blankMixin.ts"],"names":["BlankMixin","name","created","listAttributes"],"mappings":"AAAA,MAAMA,UAAU,GAAG;AACjBC,EAAAA,IAAI,EAAE,aADW;;AAEjBC,EAAAA,OAAO,GAAG;AACR,SAAKC,cAAL,CAAoB,QAApB,IAAgC,QAAhC;AACD;;AAJgB,CAAnB;AAOA,SACEH,UADF","sourcesContent":["const BlankMixin = {\n name: 'blank-mixin',\n created() {\n this.listAttributes['target'] = '_blank';\n }\n}\n\nexport {\n BlankMixin\n}"]}
@@ -1,10 +0,0 @@
1
- const BooleanMixin = {
2
- name: 'boolean-mixin',
3
-
4
- get type() {
5
- return 'boolean';
6
- }
7
-
8
- };
9
- export { BooleanMixin };
10
- //# sourceMappingURL=booleanMixin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["booleanMixin.ts"],"names":["BooleanMixin","name","type"],"mappings":"AAAA,MAAMA,YAAY,GAAG;AACnBC,EAAAA,IAAI,EAAE,eADa;;AAEnB,MAAIC,IAAJ,GAAW;AACT,WAAO,SAAP;AACD;;AAJkB,CAArB;AAOA,SAASF,YAAT","sourcesContent":["const BooleanMixin = {\n name: 'boolean-mixin',\n get type() {\n return 'boolean';\n },\n};\n\nexport { BooleanMixin };\n"]}
@@ -1,20 +0,0 @@
1
- import { MultipleMixin } from './multipleMixin.js';
2
- import { ActionMixin } from './actionMixin.js';
3
- import { BlankMixin } from './blankMixin.js';
4
- import { MailtoMixin } from './mailtoMixin.js';
5
- import { TelMixin } from './telMixin.js';
6
- import { PlaceholderMixin } from './placeholderMixin.js';
7
- import { BooleanMixin } from './booleanMixin.js';
8
- import { NumberMixin } from './numberMixin.js';
9
- const attributeDirectory = {
10
- multiple: MultipleMixin,
11
- action: ActionMixin,
12
- blank: BlankMixin,
13
- mailto: MailtoMixin,
14
- tel: TelMixin,
15
- placeholder: PlaceholderMixin,
16
- bool: BooleanMixin,
17
- num: NumberMixin
18
- };
19
- export { attributeDirectory, MultipleMixin, ActionMixin, BlankMixin, MailtoMixin, TelMixin, PlaceholderMixin };
20
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["index.ts"],"names":["MultipleMixin","ActionMixin","BlankMixin","MailtoMixin","TelMixin","PlaceholderMixin","BooleanMixin","NumberMixin","attributeDirectory","multiple","action","blank","mailto","tel","placeholder","bool","num"],"mappings":"AAAA,SAASA,aAAT,QAA8B,iBAA9B;AACA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,UAAT,QAA2B,cAA3B;AACA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASC,WAAT,QAA4B,eAA5B;AAEA,MAAMC,kBAAkB,GAAG;AACzBC,EAAAA,QAAQ,EAAET,aADe;AAEzBU,EAAAA,MAAM,EAAET,WAFiB;AAGzBU,EAAAA,KAAK,EAAET,UAHkB;AAIzBU,EAAAA,MAAM,EAAET,WAJiB;AAKzBU,EAAAA,GAAG,EAAET,QALoB;AAMzBU,EAAAA,WAAW,EAAET,gBANY;AAOzBU,EAAAA,IAAI,EAAET,YAPmB;AAQzBU,EAAAA,GAAG,EAAET;AARoB,CAA3B;AAWA,SACEC,kBADF,EAEER,aAFF,EAGEC,WAHF,EAIEC,UAJF,EAKEC,WALF,EAMEC,QANF,EAOEC,gBAPF","sourcesContent":["import { MultipleMixin } from './multipleMixin';\nimport { ActionMixin } from './actionMixin';\nimport { BlankMixin } from './blankMixin';\nimport { MailtoMixin } from './mailtoMixin';\nimport { TelMixin } from './telMixin';\nimport { PlaceholderMixin } from './placeholderMixin';\nimport { BooleanMixin } from './booleanMixin';\nimport { NumberMixin } from './numberMixin';\n\nconst attributeDirectory = {\n multiple: MultipleMixin,\n action: ActionMixin,\n blank: BlankMixin,\n mailto: MailtoMixin,\n tel: TelMixin,\n placeholder: PlaceholderMixin,\n bool: BooleanMixin,\n num: NumberMixin,\n}\n\nexport {\n attributeDirectory,\n MultipleMixin,\n ActionMixin,\n BlankMixin,\n MailtoMixin,\n TelMixin,\n PlaceholderMixin,\n}\n"]}
@@ -1,10 +0,0 @@
1
- const MailtoMixin = {
2
- name: 'mailto-mixin',
3
-
4
- created() {
5
- this.listAttributes['mailto'] = 'mailto:';
6
- }
7
-
8
- };
9
- export { MailtoMixin };
10
- //# sourceMappingURL=mailtoMixin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["mailtoMixin.ts"],"names":["MailtoMixin","name","created","listAttributes"],"mappings":"AAAA,MAAMA,WAAW,GAAG;AAClBC,EAAAA,IAAI,EAAE,cADY;;AAElBC,EAAAA,OAAO,GAAG;AACR,SAAKC,cAAL,CAAoB,QAApB,IAAgC,SAAhC;AACD;;AAJiB,CAApB;AAOA,SACEH,WADF","sourcesContent":["const MailtoMixin = {\n name: 'mailto-mixin',\n created() {\n this.listAttributes['mailto'] = 'mailto:';\n }\n}\n\nexport {\n MailtoMixin\n}"]}
@@ -1,28 +0,0 @@
1
- const MultipleMixin = {
2
- name: 'multiple-mixin',
3
- attributes: {
4
- fields: {
5
- type: String,
6
- default: '',
7
- callback: function (newValue) {
8
- this.addToAttributes(newValue, 'fields');
9
- }
10
- },
11
- next: {
12
- type: String,
13
- default: '',
14
- callback: function (newValue) {
15
- this.addToAttributes(newValue, 'next');
16
- }
17
- },
18
- emptyWidget: {
19
- type: String,
20
- default: '',
21
- callback: function (newValue) {
22
- this.addToAttributes(newValue, 'emptyWidget');
23
- }
24
- }
25
- }
26
- };
27
- export { MultipleMixin };
28
- //# sourceMappingURL=multipleMixin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["multipleMixin.ts"],"names":["MultipleMixin","name","attributes","fields","type","String","default","callback","newValue","addToAttributes","next","emptyWidget"],"mappings":"AAAA,MAAMA,aAAa,GAAG;AACpBC,EAAAA,IAAI,EAAE,gBADc;AAEpBC,EAAAA,UAAU,EAAE;AACVC,IAAAA,MAAM,EAAE;AACNC,MAAAA,IAAI,EAAEC,MADA;AAENC,MAAAA,OAAO,EAAE,EAFH;AAGNC,MAAAA,QAAQ,EAAE,UAAUC,QAAV,EAA4B;AACpC,aAAKC,eAAL,CAAqBD,QAArB,EAA+B,QAA/B;AACD;AALK,KADE;AAQVE,IAAAA,IAAI,EAAE;AACJN,MAAAA,IAAI,EAAEC,MADF;AAEJC,MAAAA,OAAO,EAAE,EAFL;AAGJC,MAAAA,QAAQ,EAAE,UAAUC,QAAV,EAA4B;AACpC,aAAKC,eAAL,CAAqBD,QAArB,EAA+B,MAA/B;AACD;AALG,KARI;AAeVG,IAAAA,WAAW,EAAE;AACXP,MAAAA,IAAI,EAAEC,MADK;AAEXC,MAAAA,OAAO,EAAE,EAFE;AAGXC,MAAAA,QAAQ,EAAE,UAAUC,QAAV,EAA4B;AACpC,aAAKC,eAAL,CAAqBD,QAArB,EAA+B,aAA/B;AACD;AALU;AAfH;AAFQ,CAAtB;AA2BA,SACER,aADF","sourcesContent":["const MultipleMixin = {\n name: 'multiple-mixin',\n attributes: {\n fields: {\n type: String,\n default: '',\n callback: function (newValue: string) {\n this.addToAttributes(newValue, 'fields');\n }\n },\n next: {\n type: String,\n default: '',\n callback: function (newValue: string) {\n this.addToAttributes(newValue, 'next');\n }\n },\n emptyWidget: {\n type: String,\n default: '',\n callback: function (newValue: string) {\n this.addToAttributes(newValue, 'emptyWidget');\n }\n }\n },\n}\n\nexport {\n MultipleMixin\n}"]}