@windwalker-io/unicorn-next 0.1.7 → 0.1.9
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.
- package/.editorconfig +18 -18
- package/.gulp.json +7 -7
- package/bin/release.mjs +47 -47
- package/dist/chunks/button-radio.js.map +1 -1
- package/dist/chunks/checkboxes-multi-select.js.map +1 -1
- package/dist/chunks/field-cascade-select.js +2 -2
- package/dist/chunks/field-cascade-select.js.map +1 -1
- package/dist/chunks/field-file-drag.js.map +1 -1
- package/dist/chunks/field-flatpickr.js.map +1 -1
- package/dist/chunks/field-modal-select.js.map +1 -1
- package/dist/chunks/field-modal-tree.js +2 -2
- package/dist/chunks/field-modal-tree.js.map +1 -1
- package/dist/chunks/field-multi-uploader.js.map +1 -1
- package/dist/chunks/field-repeatable.js.map +1 -1
- package/dist/chunks/field-single-image-drag.js.map +1 -1
- package/dist/chunks/form.js.map +1 -1
- package/dist/chunks/grid.js.map +1 -1
- package/dist/chunks/http-client.js.map +1 -1
- package/dist/chunks/iframe-modal.js.map +1 -1
- package/dist/chunks/index.js +1 -15
- package/dist/chunks/index.js.map +1 -1
- package/dist/chunks/keep-tab.js +2 -2
- package/dist/chunks/keep-tab.js.map +1 -1
- package/dist/chunks/legacy.js +3 -3
- package/dist/chunks/legacy.js.map +1 -1
- package/dist/chunks/list-dependent.js.map +1 -1
- package/dist/chunks/s3-multipart-uploader.js +23 -2
- package/dist/chunks/s3-multipart-uploader.js.map +1 -1
- package/dist/chunks/s3-uploader.js.map +1 -1
- package/dist/chunks/show-on.js +2 -2
- package/dist/chunks/show-on.js.map +1 -1
- package/dist/chunks/tinymce.js.map +1 -1
- package/dist/chunks/ui-bootstrap5.js.map +1 -1
- package/dist/chunks/unicorn.js +108 -89
- package/dist/chunks/unicorn.js.map +1 -1
- package/dist/chunks/validation.js.map +1 -1
- package/dist/index.d.ts +28 -6
- package/dist/unicorn.js +43 -41
- package/fusionfile.mjs +155 -155
- package/package.json +104 -104
- package/scss/bootstrap/multi-level-menu.scss +121 -121
- package/scss/editor.scss +116 -116
- package/scss/field/file-drag.scss +102 -102
- package/scss/field/single-image-drag.scss +88 -88
- package/scss/field/vue-drag-uploader.scss +160 -160
- package/scss/switcher.scss +156 -156
- package/src/app.ts +128 -128
- package/src/bootstrap/button-radio.ts +208 -208
- package/src/bootstrap/keep-tab.ts +155 -155
- package/src/composable/index.ts +22 -22
- package/src/composable/useCheckboxesMultiSelect.ts +22 -22
- package/src/composable/useFieldCascadeSelect.ts +9 -9
- package/src/composable/useFieldFileDrag.ts +9 -9
- package/src/composable/useFieldFlatpickr.ts +3 -3
- package/src/composable/useFieldModalSelect.ts +6 -6
- package/src/composable/useFieldModalTree.ts +3 -3
- package/src/composable/useFieldMultiUploader.ts +9 -9
- package/src/composable/useFieldRepeatable.ts +9 -9
- package/src/composable/useFieldSingleImageDrag.ts +9 -9
- package/src/composable/useForm.ts +43 -43
- package/src/composable/useGrid.ts +57 -57
- package/src/composable/useHttp.ts +9 -9
- package/src/composable/useIframeModal.ts +10 -10
- package/src/composable/useListDependent.ts +26 -26
- package/src/composable/useQueue.ts +13 -13
- package/src/composable/useS3Uploader.ts +32 -32
- package/src/composable/useShowOn.ts +9 -9
- package/src/composable/useStack.ts +13 -13
- package/src/composable/useTinymce.ts +29 -29
- package/src/composable/useTomSelect.ts +72 -72
- package/src/composable/useUIBootstrap5.ts +48 -48
- package/src/composable/useUniDirective.ts +43 -43
- package/src/composable/useValidation.ts +50 -50
- package/src/data.ts +34 -34
- package/src/events.ts +82 -82
- package/src/legacy/legacy.ts +190 -190
- package/src/legacy/loader.ts +125 -125
- package/src/module/checkboxes-multi-select.ts +54 -54
- package/src/module/field-cascade-select.ts +292 -292
- package/src/module/field-file-drag.ts +295 -295
- package/src/module/field-flatpickr.ts +130 -130
- package/src/module/field-modal-select.ts +179 -179
- package/src/module/field-modal-tree.ts +31 -31
- package/src/module/field-multi-uploader.ts +368 -368
- package/src/module/field-repeatable.ts +202 -202
- package/src/module/field-single-image-drag.ts +477 -477
- package/src/module/form.ts +223 -223
- package/src/module/grid.ts +479 -479
- package/src/module/http-client.ts +248 -248
- package/src/module/iframe-modal.ts +170 -170
- package/src/module/list-dependent.ts +321 -321
- package/src/module/s3-multipart-uploader.ts +330 -300
- package/src/module/s3-uploader.ts +234 -234
- package/src/module/show-on.ts +175 -175
- package/src/module/tinymce.ts +276 -276
- package/src/module/ui-bootstrap5.ts +116 -116
- package/src/module/validation.ts +1046 -1046
- package/src/plugin/index.ts +1 -1
- package/src/plugin/php-adapter.ts +72 -72
- package/src/polyfill/form-request-submit.ts +31 -31
- package/src/polyfill/index.ts +9 -9
- package/src/service/animate.ts +58 -58
- package/src/service/crypto.ts +27 -27
- package/src/service/dom-watcher.ts +62 -62
- package/src/service/dom.ts +291 -265
- package/src/service/helper.ts +52 -48
- package/src/service/index.ts +10 -10
- package/src/service/lang.ts +122 -122
- package/src/service/loader.ts +152 -152
- package/src/service/router.ts +118 -118
- package/src/service/ui.ts +525 -525
- package/src/service/uri.ts +106 -106
- package/src/types/base.ts +9 -9
- package/src/types/index.ts +4 -4
- package/src/types/modal-tree.ts +12 -12
- package/src/types/plugin.ts +6 -6
- package/src/types/shims.d.ts +18 -18
- package/src/types/ui.ts +6 -6
- package/src/unicorn.ts +79 -79
- package/src/utilities/arr.ts +25 -25
- package/src/utilities/base.ts +9 -9
- package/src/utilities/data.ts +48 -48
- package/src/utilities/index.ts +5 -5
- package/src/utilities/tree.ts +20 -20
- package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -175
- package/src/vue/components/ModalTree/TreeItem.vue +262 -262
- package/src/vue/components/ModalTree/TreeModal.vue +225 -225
- package/tests/test.js +4 -4
- package/tsconfig.js.json +25 -25
- package/tsconfig.json +17 -17
- package/vite.assets.config.ts +61 -61
- package/vite.config.test.ts +36 -36
- package/vite.config.ts +112 -112
package/dist/chunks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/flatpickr/dist/plugins/monthSelect/index.js"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.monthSelectPlugin = factory());\n}(this, (function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n }\n\n var defaultConfig = {\n shorthand: false,\n dateFormat: \"F Y\",\n altFormat: \"F Y\",\n theme: \"light\",\n };\n function monthSelectPlugin(pluginConfig) {\n var config = __assign(__assign({}, defaultConfig), pluginConfig);\n return function (fp) {\n fp.config.dateFormat = config.dateFormat;\n fp.config.altFormat = config.altFormat;\n var self = { monthsContainer: null };\n function clearUnnecessaryDOMElements() {\n if (!fp.rContainer)\n return;\n clearNode(fp.rContainer);\n for (var index = 0; index < fp.monthElements.length; index++) {\n var element = fp.monthElements[index];\n if (!element.parentNode)\n continue;\n element.parentNode.removeChild(element);\n }\n }\n function build() {\n if (!fp.rContainer)\n return;\n self.monthsContainer = fp._createElement(\"div\", \"flatpickr-monthSelect-months\");\n self.monthsContainer.tabIndex = -1;\n buildMonths();\n fp.rContainer.appendChild(self.monthsContainer);\n fp.calendarContainer.classList.add(\"flatpickr-monthSelect-theme-\" + config.theme);\n }\n function buildMonths() {\n if (!self.monthsContainer)\n return;\n clearNode(self.monthsContainer);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < 12; i++) {\n var month = fp.createDay(\"flatpickr-monthSelect-month\", new Date(fp.currentYear, i), 0, i);\n if (month.dateObj.getMonth() === new Date().getMonth() &&\n month.dateObj.getFullYear() === new Date().getFullYear())\n month.classList.add(\"today\");\n month.textContent = monthToStr(i, config.shorthand, fp.l10n);\n month.addEventListener(\"click\", selectMonth);\n frag.appendChild(month);\n }\n self.monthsContainer.appendChild(frag);\n if (fp.config.minDate &&\n fp.currentYear === fp.config.minDate.getFullYear())\n fp.prevMonthNav.classList.add(\"flatpickr-disabled\");\n else\n fp.prevMonthNav.classList.remove(\"flatpickr-disabled\");\n if (fp.config.maxDate &&\n fp.currentYear === fp.config.maxDate.getFullYear())\n fp.nextMonthNav.classList.add(\"flatpickr-disabled\");\n else\n fp.nextMonthNav.classList.remove(\"flatpickr-disabled\");\n }\n function bindEvents() {\n fp._bind(fp.prevMonthNav, \"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n fp.changeYear(fp.currentYear - 1);\n selectYear();\n buildMonths();\n });\n fp._bind(fp.nextMonthNav, \"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n fp.changeYear(fp.currentYear + 1);\n selectYear();\n buildMonths();\n });\n fp._bind(self.monthsContainer, \"mouseover\", function (e) {\n if (fp.config.mode === \"range\")\n fp.onMouseOver(getEventTarget(e), \"flatpickr-monthSelect-month\");\n });\n }\n function setCurrentlySelected() {\n if (!fp.rContainer)\n return;\n if (!fp.selectedDates.length)\n return;\n var currentlySelected = fp.rContainer.querySelectorAll(\".flatpickr-monthSelect-month.selected\");\n for (var index = 0; index < currentlySelected.length; index++) {\n currentlySelected[index].classList.remove(\"selected\");\n }\n var targetMonth = fp.selectedDates[0].getMonth();\n var month = fp.rContainer.querySelector(\".flatpickr-monthSelect-month:nth-child(\" + (targetMonth + 1) + \")\");\n if (month) {\n month.classList.add(\"selected\");\n }\n }\n function selectYear() {\n var selectedDate = fp.selectedDates[0];\n if (selectedDate) {\n selectedDate = new Date(selectedDate);\n selectedDate.setFullYear(fp.currentYear);\n if (fp.config.minDate && selectedDate < fp.config.minDate) {\n selectedDate = fp.config.minDate;\n }\n if (fp.config.maxDate && selectedDate > fp.config.maxDate) {\n selectedDate = fp.config.maxDate;\n }\n fp.currentYear = selectedDate.getFullYear();\n }\n fp.currentYearElement.value = String(fp.currentYear);\n if (fp.rContainer) {\n var months = fp.rContainer.querySelectorAll(\".flatpickr-monthSelect-month\");\n months.forEach(function (month) {\n month.dateObj.setFullYear(fp.currentYear);\n if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||\n (fp.config.maxDate && month.dateObj > fp.config.maxDate)) {\n month.classList.add(\"flatpickr-disabled\");\n }\n else {\n month.classList.remove(\"flatpickr-disabled\");\n }\n });\n }\n setCurrentlySelected();\n }\n function selectMonth(e) {\n e.preventDefault();\n e.stopPropagation();\n var eventTarget = getEventTarget(e);\n if (!(eventTarget instanceof Element))\n return;\n if (eventTarget.classList.contains(\"flatpickr-disabled\"))\n return;\n if (eventTarget.classList.contains(\"notAllowed\"))\n return; // necessary??\n setMonth(eventTarget.dateObj);\n if (fp.config.closeOnSelect) {\n var single = fp.config.mode === \"single\";\n var range = fp.config.mode === \"range\" && fp.selectedDates.length === 2;\n if (single || range)\n fp.close();\n }\n }\n function setMonth(date) {\n var selectedDate = new Date(fp.currentYear, date.getMonth(), date.getDate());\n var selectedDates = [];\n switch (fp.config.mode) {\n case \"single\":\n selectedDates = [selectedDate];\n break;\n case \"multiple\":\n selectedDates.push(selectedDate);\n break;\n case \"range\":\n if (fp.selectedDates.length === 2) {\n selectedDates = [selectedDate];\n }\n else {\n selectedDates = fp.selectedDates.concat([selectedDate]);\n selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n break;\n }\n fp.setDate(selectedDates, true);\n setCurrentlySelected();\n }\n var shifts = {\n 37: -1,\n 39: 1,\n 40: 3,\n 38: -3,\n };\n function onKeyDown(_, __, ___, e) {\n var shouldMove = shifts[e.keyCode] !== undefined;\n if (!shouldMove && e.keyCode !== 13) {\n return;\n }\n if (!fp.rContainer || !self.monthsContainer)\n return;\n var currentlySelected = fp.rContainer.querySelector(\".flatpickr-monthSelect-month.selected\");\n var index = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement);\n if (index === -1) {\n var target = currentlySelected || self.monthsContainer.firstElementChild;\n target.focus();\n index = target.$i;\n }\n if (shouldMove) {\n self.monthsContainer.children[(12 + index + shifts[e.keyCode]) % 12].focus();\n }\n else if (e.keyCode === 13 &&\n self.monthsContainer.contains(document.activeElement)) {\n setMonth(document.activeElement.dateObj);\n }\n }\n function closeHook() {\n var _a;\n if (((_a = fp.config) === null || _a === void 0 ? void 0 : _a.mode) === \"range\" && fp.selectedDates.length === 1)\n fp.clear(false);\n if (!fp.selectedDates.length)\n buildMonths();\n }\n // Help the prev/next year nav honor config.minDate (see 3fa5a69)\n function stubCurrentMonth() {\n config._stubbedCurrentMonth = fp._initialDate.getMonth();\n fp._initialDate.setMonth(config._stubbedCurrentMonth);\n fp.currentMonth = config._stubbedCurrentMonth;\n }\n function unstubCurrentMonth() {\n if (!config._stubbedCurrentMonth)\n return;\n fp._initialDate.setMonth(config._stubbedCurrentMonth);\n fp.currentMonth = config._stubbedCurrentMonth;\n delete config._stubbedCurrentMonth;\n }\n function destroyPluginInstance() {\n if (self.monthsContainer !== null) {\n var months = self.monthsContainer.querySelectorAll(\".flatpickr-monthSelect-month\");\n for (var index = 0; index < months.length; index++) {\n months[index].removeEventListener(\"click\", selectMonth);\n }\n }\n }\n return {\n onParseConfig: function () {\n fp.config.enableTime = false;\n },\n onValueUpdate: setCurrentlySelected,\n onKeyDown: onKeyDown,\n onReady: [\n stubCurrentMonth,\n clearUnnecessaryDOMElements,\n build,\n bindEvents,\n setCurrentlySelected,\n function () {\n fp.config.onClose.push(closeHook);\n fp.loadedPlugins.push(\"monthSelect\");\n },\n ],\n onDestroy: [\n unstubCurrentMonth,\n destroyPluginInstance,\n function () {\n fp.config.onClose = fp.config.onClose.filter(function (hook) { return hook !== closeHook; });\n },\n ],\n };\n };\n }\n\n return monthSelectPlugin;\n\n})));\n"],"names":["this","__assign","index"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/flatpickr/dist/plugins/monthSelect/index.js"],"sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.monthSelectPlugin = factory());\n}(this, (function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n }\n\n var defaultConfig = {\n shorthand: false,\n dateFormat: \"F Y\",\n altFormat: \"F Y\",\n theme: \"light\",\n };\n function monthSelectPlugin(pluginConfig) {\n var config = __assign(__assign({}, defaultConfig), pluginConfig);\n return function (fp) {\n fp.config.dateFormat = config.dateFormat;\n fp.config.altFormat = config.altFormat;\n var self = { monthsContainer: null };\n function clearUnnecessaryDOMElements() {\n if (!fp.rContainer)\n return;\n clearNode(fp.rContainer);\n for (var index = 0; index < fp.monthElements.length; index++) {\n var element = fp.monthElements[index];\n if (!element.parentNode)\n continue;\n element.parentNode.removeChild(element);\n }\n }\n function build() {\n if (!fp.rContainer)\n return;\n self.monthsContainer = fp._createElement(\"div\", \"flatpickr-monthSelect-months\");\n self.monthsContainer.tabIndex = -1;\n buildMonths();\n fp.rContainer.appendChild(self.monthsContainer);\n fp.calendarContainer.classList.add(\"flatpickr-monthSelect-theme-\" + config.theme);\n }\n function buildMonths() {\n if (!self.monthsContainer)\n return;\n clearNode(self.monthsContainer);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < 12; i++) {\n var month = fp.createDay(\"flatpickr-monthSelect-month\", new Date(fp.currentYear, i), 0, i);\n if (month.dateObj.getMonth() === new Date().getMonth() &&\n month.dateObj.getFullYear() === new Date().getFullYear())\n month.classList.add(\"today\");\n month.textContent = monthToStr(i, config.shorthand, fp.l10n);\n month.addEventListener(\"click\", selectMonth);\n frag.appendChild(month);\n }\n self.monthsContainer.appendChild(frag);\n if (fp.config.minDate &&\n fp.currentYear === fp.config.minDate.getFullYear())\n fp.prevMonthNav.classList.add(\"flatpickr-disabled\");\n else\n fp.prevMonthNav.classList.remove(\"flatpickr-disabled\");\n if (fp.config.maxDate &&\n fp.currentYear === fp.config.maxDate.getFullYear())\n fp.nextMonthNav.classList.add(\"flatpickr-disabled\");\n else\n fp.nextMonthNav.classList.remove(\"flatpickr-disabled\");\n }\n function bindEvents() {\n fp._bind(fp.prevMonthNav, \"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n fp.changeYear(fp.currentYear - 1);\n selectYear();\n buildMonths();\n });\n fp._bind(fp.nextMonthNav, \"click\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n fp.changeYear(fp.currentYear + 1);\n selectYear();\n buildMonths();\n });\n fp._bind(self.monthsContainer, \"mouseover\", function (e) {\n if (fp.config.mode === \"range\")\n fp.onMouseOver(getEventTarget(e), \"flatpickr-monthSelect-month\");\n });\n }\n function setCurrentlySelected() {\n if (!fp.rContainer)\n return;\n if (!fp.selectedDates.length)\n return;\n var currentlySelected = fp.rContainer.querySelectorAll(\".flatpickr-monthSelect-month.selected\");\n for (var index = 0; index < currentlySelected.length; index++) {\n currentlySelected[index].classList.remove(\"selected\");\n }\n var targetMonth = fp.selectedDates[0].getMonth();\n var month = fp.rContainer.querySelector(\".flatpickr-monthSelect-month:nth-child(\" + (targetMonth + 1) + \")\");\n if (month) {\n month.classList.add(\"selected\");\n }\n }\n function selectYear() {\n var selectedDate = fp.selectedDates[0];\n if (selectedDate) {\n selectedDate = new Date(selectedDate);\n selectedDate.setFullYear(fp.currentYear);\n if (fp.config.minDate && selectedDate < fp.config.minDate) {\n selectedDate = fp.config.minDate;\n }\n if (fp.config.maxDate && selectedDate > fp.config.maxDate) {\n selectedDate = fp.config.maxDate;\n }\n fp.currentYear = selectedDate.getFullYear();\n }\n fp.currentYearElement.value = String(fp.currentYear);\n if (fp.rContainer) {\n var months = fp.rContainer.querySelectorAll(\".flatpickr-monthSelect-month\");\n months.forEach(function (month) {\n month.dateObj.setFullYear(fp.currentYear);\n if ((fp.config.minDate && month.dateObj < fp.config.minDate) ||\n (fp.config.maxDate && month.dateObj > fp.config.maxDate)) {\n month.classList.add(\"flatpickr-disabled\");\n }\n else {\n month.classList.remove(\"flatpickr-disabled\");\n }\n });\n }\n setCurrentlySelected();\n }\n function selectMonth(e) {\n e.preventDefault();\n e.stopPropagation();\n var eventTarget = getEventTarget(e);\n if (!(eventTarget instanceof Element))\n return;\n if (eventTarget.classList.contains(\"flatpickr-disabled\"))\n return;\n if (eventTarget.classList.contains(\"notAllowed\"))\n return; // necessary??\n setMonth(eventTarget.dateObj);\n if (fp.config.closeOnSelect) {\n var single = fp.config.mode === \"single\";\n var range = fp.config.mode === \"range\" && fp.selectedDates.length === 2;\n if (single || range)\n fp.close();\n }\n }\n function setMonth(date) {\n var selectedDate = new Date(fp.currentYear, date.getMonth(), date.getDate());\n var selectedDates = [];\n switch (fp.config.mode) {\n case \"single\":\n selectedDates = [selectedDate];\n break;\n case \"multiple\":\n selectedDates.push(selectedDate);\n break;\n case \"range\":\n if (fp.selectedDates.length === 2) {\n selectedDates = [selectedDate];\n }\n else {\n selectedDates = fp.selectedDates.concat([selectedDate]);\n selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n break;\n }\n fp.setDate(selectedDates, true);\n setCurrentlySelected();\n }\n var shifts = {\n 37: -1,\n 39: 1,\n 40: 3,\n 38: -3,\n };\n function onKeyDown(_, __, ___, e) {\n var shouldMove = shifts[e.keyCode] !== undefined;\n if (!shouldMove && e.keyCode !== 13) {\n return;\n }\n if (!fp.rContainer || !self.monthsContainer)\n return;\n var currentlySelected = fp.rContainer.querySelector(\".flatpickr-monthSelect-month.selected\");\n var index = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement);\n if (index === -1) {\n var target = currentlySelected || self.monthsContainer.firstElementChild;\n target.focus();\n index = target.$i;\n }\n if (shouldMove) {\n self.monthsContainer.children[(12 + index + shifts[e.keyCode]) % 12].focus();\n }\n else if (e.keyCode === 13 &&\n self.monthsContainer.contains(document.activeElement)) {\n setMonth(document.activeElement.dateObj);\n }\n }\n function closeHook() {\n var _a;\n if (((_a = fp.config) === null || _a === void 0 ? void 0 : _a.mode) === \"range\" && fp.selectedDates.length === 1)\n fp.clear(false);\n if (!fp.selectedDates.length)\n buildMonths();\n }\n // Help the prev/next year nav honor config.minDate (see 3fa5a69)\n function stubCurrentMonth() {\n config._stubbedCurrentMonth = fp._initialDate.getMonth();\n fp._initialDate.setMonth(config._stubbedCurrentMonth);\n fp.currentMonth = config._stubbedCurrentMonth;\n }\n function unstubCurrentMonth() {\n if (!config._stubbedCurrentMonth)\n return;\n fp._initialDate.setMonth(config._stubbedCurrentMonth);\n fp.currentMonth = config._stubbedCurrentMonth;\n delete config._stubbedCurrentMonth;\n }\n function destroyPluginInstance() {\n if (self.monthsContainer !== null) {\n var months = self.monthsContainer.querySelectorAll(\".flatpickr-monthSelect-month\");\n for (var index = 0; index < months.length; index++) {\n months[index].removeEventListener(\"click\", selectMonth);\n }\n }\n }\n return {\n onParseConfig: function () {\n fp.config.enableTime = false;\n },\n onValueUpdate: setCurrentlySelected,\n onKeyDown: onKeyDown,\n onReady: [\n stubCurrentMonth,\n clearUnnecessaryDOMElements,\n build,\n bindEvents,\n setCurrentlySelected,\n function () {\n fp.config.onClose.push(closeHook);\n fp.loadedPlugins.push(\"monthSelect\");\n },\n ],\n onDestroy: [\n unstubCurrentMonth,\n destroyPluginInstance,\n function () {\n fp.config.onClose = fp.config.onClose.filter(function (hook) { return hook !== closeHook; });\n },\n ],\n };\n };\n }\n\n return monthSelectPlugin;\n\n})));\n"],"names":["this","__assign","index"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/chunks/keep-tab.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Tab } from "bootstrap";
|
|
2
|
-
import { a as useUniDirective, z as module, a7 as mergeDeep, v as selectOne, al as sleep, w as selectAll } from "./unicorn.js";
|
|
2
|
+
import { a as useUniDirective, z as module$1, a7 as mergeDeep, v as selectOne, al as sleep, w as selectAll } from "./unicorn.js";
|
|
3
3
|
const defaultOptions = {
|
|
4
4
|
tabItemSelector: "[data-toggle=tab],[data-bs-toggle=tab],[data-toggle=pill],[data-bs-toggle=pill]",
|
|
5
5
|
delay: 0
|
|
@@ -91,7 +91,7 @@ class KeepTab {
|
|
|
91
91
|
const ready = /* @__PURE__ */ useUniDirective("keeptab", {
|
|
92
92
|
mounted(el, { value }) {
|
|
93
93
|
const options = JSON.parse(value || "{}");
|
|
94
|
-
module(el, "uni.keeptab", () => new KeepTab(el, options));
|
|
94
|
+
module$1(el, "uni.keeptab", () => new KeepTab(el, options));
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
97
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keep-tab.js","sources":["../../src/bootstrap/keep-tab.ts"],"sourcesContent":["import { useUniDirective } from '../composable';\
|
|
1
|
+
{"version":3,"file":"keep-tab.js","sources":["../../src/bootstrap/keep-tab.ts"],"sourcesContent":["import { useUniDirective } from '../composable';\nimport { module, selectAll, selectOne, sleep } from '../service';\nimport { Tab } from 'bootstrap';\nimport { mergeDeep } from '../utilities';\n\nexport interface KeepTabOptions {\n uid?: string;\n delay?: number;\n tabItemSelector?: string;\n}\n\nconst defaultOptions = {\n tabItemSelector: '[data-toggle=tab],[data-bs-toggle=tab],[data-toggle=pill],[data-bs-toggle=pill]',\n delay: 0,\n};\n\nexport class KeepTab {\n $element: HTMLElement;\n tabButtons!: NodeListOf<HTMLElement>;\n storageKey: string = '';\n options: any;\n\n constructor(selector: HTMLElement | string, options: KeepTabOptions = {}) {\n options = mergeDeep({}, defaultOptions, options);\n let uid: string;\n\n if (typeof selector === 'object') {\n uid = options.uid || selector.id;\n } else {\n uid = selector;\n }\n\n const $element = this.$element = selectOne<HTMLElement>(selector)!;\n\n if (!$element) {\n console.warn(`[KeepTab] Element ${selector} not found.`);\n return;\n }\n\n this.options = options;\n\n this.$element = $element;\n this.tabButtons = $element.querySelectorAll(this.options.tabItemSelector);\n\n this.init(uid);\n }\n\n protected async init(uid: string) {\n this.storageKey = 'tab-href-' + await this.hashCode(location.href + ':' + uid);\n\n this.bindEvents();\n\n await sleep(this.options.delay || 0);\n\n this.switchTab();\n }\n\n bindEvents() {\n [].forEach.call(this.tabButtons, (button: HTMLAnchorElement) => {\n button.addEventListener('click', () => {\n // Store the selected tab href in localstorage\n window.localStorage.setItem(this.storageKey, this.getButtonHref(button));\n });\n });\n }\n\n getButtonHref(button: HTMLAnchorElement) {\n return button.dataset.bsTarget || button.dataset.target || button.href;\n }\n\n findTabButtonByHref(href: string) {\n return selectAll<HTMLAnchorElement>(this.options.tabItemSelector)\n .filter((button: HTMLAnchorElement) => {\n if (button.href === href) {\n return true;\n }\n\n if (button.dataset.bsTarget === href) {\n return true;\n }\n\n return button.dataset.target === href;\n })\n .shift();\n }\n\n activateTab(href: string) {\n const tabTrigger = this.findTabButtonByHref(href);\n\n if (tabTrigger) {\n Tab.getOrCreateInstance(tabTrigger).show();\n }\n }\n\n hasTab(href: string) {\n return this.findTabButtonByHref(href) != null;\n }\n\n /**\n * Switch tab.\n *\n * @returns {boolean}\n */\n switchTab() {\n if (localStorage.getItem(this.storageKey)) {\n // When moving from tab area to a different view\n if (!this.hasTab(localStorage.getItem(this.storageKey) || '')) {\n localStorage.removeItem(this.storageKey);\n return true;\n }\n\n // Clean default tabs\n // selectOne(this.$element, '[data-toggle=\"tab\"], [data-bs-toggle=tab]')\n // this.$element.querySelector('a[data-toggle=\"tab\"]').parent().removeClass('active');\n\n const tabhref = localStorage.getItem(this.storageKey) || '';\n\n // Add active attribute for selected tab indicated by url\n this.activateTab(tabhref);\n\n // Check whether internal tab is selected (in format <tabname>-<id>)\n // const seperatorIndex = tabhref.indexOf('-');\n //\n // if (seperatorIndex !== -1) {\n // const singular = tabhref.substring(0, seperatorIndex);\n // const plural = singular + 's';\n //\n // this.activateTab(plural);\n // }\n }\n }\n\n /**\n * Hash code.\n */\n async hashCode(text: string): Promise<string> {\n const msgBuffer = new TextEncoder().encode(text);\n const hashBuffer = await globalThis.crypto.subtle.digest(\"SHA-256\", msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n }\n}\n\nexport const ready = useUniDirective('keeptab', {\n mounted(el, { value }) {\n const options: KeepTabOptions = JSON.parse(value || '{}');\n\n module(el, 'uni.keeptab', () => new KeepTab(el, options));\n }\n});\n\nexport interface KeepTabModule {\n KeepTab: typeof KeepTab;\n ready: typeof ready;\n}\n"],"names":["module"],"mappings":"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"}
|
package/dist/chunks/legacy.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as isDebug, u as useHttpClient, _ as __, r as route, a as useUniDirective, b as animateTo, c as renderMessage, d as clearMessages, s as simpleNotify, e as clearNotifies, l as loadAlpine, f as initAlpineComponent, p as prepareAlpine, g as useFormValidation, h as addGlobalValidator, j as useFieldValidationInstance, k as useFormValidationInstance, m as useStack, n as useQueue, o as useSystemUri, q as useAssetUri, t as domready, v as selectOne, w as selectAll, x as getBoundedInstance, y as getBoundedInstanceList, z as module, A as h, B as html, C as delegate, D as debounce, E as throttle, F as simpleConfirm, G as simpleAlert, H as sprintfExports, I as base64UrlEncode, J as base64UrlDecode, K as uid, L as tid, M as serial, N as mark, O as useTomSelect, P as slideUp, Q as slideDown, R as slideToggle, S as fadeOut, T as fadeIn, U as highlight, V as useColorPicker, W as useDisableOnSubmit, X as useDisableIfStackNotEmpty, Y as useCheckboxesMultiSelect, Z as useKeepAlive, $ as useBs5KeepTab, a0 as useBs5ButtonRadio, a1 as useBs5Tooltip, a2 as useFormAsync, a3 as useGridAsync, a4 as useForm, a5 as useGrid } from "./unicorn.js";
|
|
1
|
+
import { i as isDebug, u as useHttpClient, _ as __, r as route, a as useUniDirective, b as animateTo, c as renderMessage, d as clearMessages, s as simpleNotify, e as clearNotifies, l as loadAlpine, f as initAlpineComponent, p as prepareAlpine, g as useFormValidation, h as addGlobalValidator, j as useFieldValidationInstance, k as useFormValidationInstance, m as useStack, n as useQueue, o as useSystemUri, q as useAssetUri, t as domready, v as selectOne, w as selectAll, x as getBoundedInstance, y as getBoundedInstanceList, z as module$1, A as h, B as html, C as delegate, D as debounce, E as throttle, F as simpleConfirm, G as simpleAlert, H as sprintfExports, I as base64UrlEncode, J as base64UrlDecode, K as uid, L as tid, M as serial, N as mark, O as useTomSelect, P as slideUp, Q as slideDown, R as slideToggle, S as fadeOut, T as fadeIn, U as highlight, V as useColorPicker, W as useDisableOnSubmit, X as useDisableIfStackNotEmpty, Y as useCheckboxesMultiSelect, Z as useKeepAlive, $ as useBs5KeepTab, a0 as useBs5ButtonRadio, a1 as useBs5Tooltip, a2 as useFormAsync, a3 as useGridAsync, a4 as useForm, a5 as useGrid } from "./unicorn.js";
|
|
2
2
|
function numberFormat(number, decimals = 0, decPoint = ".", thousandsSep = ",") {
|
|
3
3
|
number = Number(number);
|
|
4
4
|
const str = number.toFixed(decimals ? decimals : 0).toString().split(".");
|
|
@@ -69,7 +69,7 @@ class LegacyLoader {
|
|
|
69
69
|
if (!Array.isArray(modules)) {
|
|
70
70
|
modules = [modules];
|
|
71
71
|
}
|
|
72
|
-
const styles = modules.map((
|
|
72
|
+
const styles = modules.map((module) => module.default);
|
|
73
73
|
document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...styles];
|
|
74
74
|
}
|
|
75
75
|
minFileName(fileName) {
|
|
@@ -158,7 +158,7 @@ function handlerHelper(app) {
|
|
|
158
158
|
app.each = selectAll;
|
|
159
159
|
app.getBoundedInstance = getBoundedInstance;
|
|
160
160
|
app.getBoundedInstanceList = getBoundedInstanceList;
|
|
161
|
-
app.module = module;
|
|
161
|
+
app.module = module$1;
|
|
162
162
|
app.h = h;
|
|
163
163
|
app.html = html;
|
|
164
164
|
app.delegate = delegate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy.js","sources":["../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/number.ts","../../src/legacy/loader.ts","../../src/legacy/legacy.ts"],"sourcesContent":["export function numberFormat(number: string | number, decimals = 0, decPoint = '.', thousandsSep = ',') {\n number = Number(number);\n\n const str = number.toFixed(decimals ? decimals : 0).toString().split('.');\n const parts = [];\n\n for (var i = str[0].length; i > 0; i -= 3) {\n parts.unshift(str[0].substring(Math.max(0, i - 3), i));\n }\n\n str[0] = parts.join(thousandsSep ? thousandsSep : ',');\n\n return str.join(decPoint ? decPoint : '.');\n}\n","import { isDebug } from '../service';\r\n\r\nconst imports: Record<string, { promise: Promise<any>; resolve?: Function; }> = {};\r\n\r\nexport class LegacyLoader {\r\n static install(app: any) {\r\n const loader = app.$loader = new this(app);\r\n\r\n app.import = loader.import.bind(loader);\r\n app.importSync = loader.importSync.bind(loader);\r\n app.importCSS = loader.importCSS.bind(loader);\r\n app.minFileName = loader.minFileName.bind(loader);\r\n app.afterImported = loader.afterImported.bind(loader);\r\n }\r\n\r\n constructor(protected app: any) {\r\n //\r\n }\r\n\r\n doImport(src: string): Promise<any> {\r\n return S.import(src);\r\n }\r\n\r\n /**\r\n * Import modules or scripts.\r\n */\r\n import(...src: any[]): Promise<any|any[]> {\r\n if (src.length === 1) {\r\n return this.doImport(src[0]);\r\n }\r\n\r\n const promises: Promise<any>[] = [];\r\n\r\n src.forEach((link) => {\r\n promises.push(\r\n link instanceof Promise ? link : this.doImport(link)\r\n );\r\n });\r\n\r\n return Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Import sync.\r\n */\r\n importSync(...src: any): Promise<any|any[]> {\r\n let promise: Promise<any> = Promise.resolve();\r\n let url: string[];\r\n const modules: any[] = [];\r\n\r\n while (url = src.shift()) {\r\n if (!Array.isArray(url)) {\r\n url = [ url ];\r\n }\r\n\r\n const target = url;\r\n promise = promise.then(\r\n () => this.import(...target).then((m) => {\r\n modules.push(m);\r\n return modules;\r\n })\r\n );\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n /**\r\n * Import CSS files.\r\n */\r\n async importCSS(...src: any): Promise<any|any[]> {\r\n let modules: any = await this.import(...src);\r\n\r\n if (!Array.isArray(modules)) {\r\n modules = [modules];\r\n }\r\n\r\n const styles: CSSStyleSheet[] = (modules as any[]).map(module => module.default);\r\n\r\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...styles];\r\n }\r\n\r\n minFileName(fileName: string): string {\r\n const segments = fileName.split('.');\r\n const ext = segments.pop();\r\n\r\n if (isDebug()) {\r\n return segments.join('.') + '.min.' + ext;\r\n }\r\n\r\n return fileName;\r\n }\r\n\r\n asImported(name: string) {\r\n if (!imports[name]) {\r\n imports[name] = {\r\n promise: Promise.resolve(),\r\n resolve: undefined\r\n };\r\n } else {\r\n imports[name]?.resolve?.();\r\n }\r\n }\r\n\r\n /**\r\n * Add after import hook for some url or id.\r\n */\r\n afterImported(name: string, callback: (resolve: Function, reject?: Function) => void): Promise<any> {\r\n if (!imports[name]) {\r\n let r;\r\n imports[name] = {\r\n promise: new Promise((resolve) => {\r\n r = resolve;\r\n }),\r\n };\r\n\r\n imports[name].resolve = r;\r\n }\r\n\r\n imports[name].promise.then(callback);\r\n\r\n return imports[name].promise;\r\n }\r\n}\r\n\r\n","import { numberFormat } from '@lyrasoft/ts-toolkit/generic';\r\nimport { sprintf, vsprintf } from 'sprintf-js';\r\nimport {\r\n addGlobalValidator,\r\n useBs5ButtonRadio,\r\n useBs5KeepTab,\r\n useBs5Tooltip,\r\n useCheckboxesMultiSelect,\r\n useFieldValidationInstance,\r\n useForm,\r\n useFormAsync,\r\n useFormValidation,\r\n useFormValidationInstance,\r\n useGrid,\r\n useGridAsync,\r\n useHttpClient,\r\n useQueue,\r\n useStack,\r\n useTomSelect,\r\n useUniDirective\r\n} from '../composable';\r\nimport {\r\n __,\r\n animateTo,\r\n base64UrlDecode,\r\n base64UrlEncode,\r\n clearMessages,\r\n clearNotifies,\r\n debounce,\r\n delegate,\r\n domready,\r\n fadeIn,\r\n fadeOut,\r\n getBoundedInstance,\r\n getBoundedInstanceList,\r\n h,\r\n highlight,\r\n html,\r\n initAlpineComponent,\r\n isDebug,\r\n loadAlpine,\r\n mark,\r\n module,\r\n prepareAlpine,\r\n renderMessage,\r\n route,\r\n selectAll,\r\n selectOne,\r\n serial,\r\n simpleAlert,\r\n simpleConfirm,\r\n simpleNotify,\r\n slideDown,\r\n slideToggle,\r\n slideUp,\r\n throttle,\r\n tid,\r\n uid,\r\n useAssetUri,\r\n useColorPicker,\r\n useDisableIfStackNotEmpty,\r\n useDisableOnSubmit,\r\n useKeepAlive,\r\n useSystemUri\r\n} from '../service';\r\nimport { LegacyLoader } from './loader';\r\n\r\nexport async function useLegacyMethods(app: any) {\r\n const http = await useHttpClient();\r\n\r\n app.use(LegacyLoader);\r\n\r\n handleUri(app);\r\n handlerHelper(app);\r\n handleCrypto(app);\r\n\r\n app.__ = __;\r\n app.trans = __;\r\n app.route = route;\r\n app.$http = http;\r\n app.directive = useUniDirective;\r\n\r\n app.animate = animateTo;\r\n app.$animation = { to: animateTo };\r\n\r\n app.addMessage = renderMessage;\r\n app.clearMessages = clearMessages;\r\n app.notify = simpleNotify;\r\n app.clearNotifies = clearNotifies;\r\n\r\n app.loadAlpine = loadAlpine;\r\n app.initAlpine = initAlpineComponent;\r\n app.beforeAlpineInit = prepareAlpine;\r\n app.prepareAlpine = prepareAlpine;\r\n\r\n handleUI(app);\r\n\r\n await handleFormGrid(app);\r\n\r\n app.formValidation = useFormValidation;\r\n app.$validation = {\r\n get: useFormValidationInstance,\r\n getField: useFieldValidationInstance,\r\n addGlobalValidator: addGlobalValidator,\r\n import: () => useFormValidation()\r\n };\r\n\r\n app.stack = useStack;\r\n app.queue = useQueue;\r\n}\r\n\r\nfunction handleCrypto(app: any) {\r\n app.base64Encode = base64UrlEncode;\r\n app.base64Decode = base64UrlDecode;\r\n // app.uuid4 = uuid4;\r\n app.uid = uid;\r\n app.tid = tid;\r\n // app.md5 = md5;\r\n app.serial = serial;\r\n}\r\n\r\nfunction handleUri(app: any) {\r\n app.uri = useSystemUri;\r\n app.asset = useAssetUri;\r\n}\r\n\r\nfunction handlerHelper(app: any) {\r\n app.domready = domready;\r\n app.selectOne = selectOne;\r\n app.selectAll = selectAll;\r\n app.each = selectAll;\r\n app.getBoundedInstance = getBoundedInstance;\r\n app.getBoundedInstanceList = getBoundedInstanceList;\r\n app.module = module;\r\n app.h = h;\r\n app.html = html;\r\n // app.$get = get;\r\n // app.$set = set;\r\n app.delegate = delegate;\r\n app.debounce = debounce;\r\n app.throttle = throttle;\r\n app.isDebug = isDebug;\r\n app.confirm = simpleConfirm;\r\n app.alert = simpleAlert;\r\n app.numberFormat = numberFormat;\r\n app.sprintf = sprintf;\r\n app.vsprintf = vsprintf;\r\n // app.genRandomString = genRandomString;\r\n // app.defaultsDeep = defaultsDeep;\r\n}\r\n\r\nfunction handleUI(app: any) {\r\n app.$ui ??= {};\r\n app.$ui.addMessage = renderMessage;\r\n app.$ui.clearMessages = clearMessages;\r\n app.$ui.notify = simpleNotify;\r\n app.$ui.clearNotifies = clearNotifies;\r\n\r\n app.$ui.loadAlpine = loadAlpine;\r\n app.$ui.initAlpine = initAlpineComponent;\r\n app.$ui.beforeAlpineInit = prepareAlpine;\r\n app.$ui.prepareAlpine = prepareAlpine;\r\n\r\n app.$ui.mark = mark;\r\n app.$ui.tomSelect = useTomSelect;\r\n app.$ui.slideUp = slideUp;\r\n app.$ui.slideDown = slideDown;\r\n app.$ui.slideToggle = slideToggle;\r\n app.$ui.fadeOut = fadeOut;\r\n app.$ui.fadeIn = fadeIn;\r\n app.$ui.highlight = highlight;\r\n app.$ui.colorPicker = useColorPicker;\r\n app.$ui.disableOnSubmit = useDisableOnSubmit;\r\n app.$ui.disableIfStackNotEmpty = useDisableIfStackNotEmpty;\r\n app.$ui.checkboxesMultiSelect = useCheckboxesMultiSelect;\r\n app.$ui.keepAlive = useKeepAlive;\r\n app.$ui.bootstrap = {\r\n tooltip: useBs5Tooltip,\r\n buttonRadio: useBs5ButtonRadio,\r\n keepTab: useBs5KeepTab,\r\n };\r\n}\r\n\r\nasync function handleFormGrid(app: any) {\r\n await useFormAsync();\r\n await useGridAsync();\r\n\r\n app.form = useForm;\r\n app.grid = useGrid;\r\n}\r\n"],"names":["module","sprintf","vsprintf"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"legacy.js","sources":["../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/number.ts","../../src/legacy/loader.ts","../../src/legacy/legacy.ts"],"sourcesContent":["export function numberFormat(number: string | number, decimals = 0, decPoint = '.', thousandsSep = ',') {\n number = Number(number);\n\n const str = number.toFixed(decimals ? decimals : 0).toString().split('.');\n const parts = [];\n\n for (var i = str[0].length; i > 0; i -= 3) {\n parts.unshift(str[0].substring(Math.max(0, i - 3), i));\n }\n\n str[0] = parts.join(thousandsSep ? thousandsSep : ',');\n\n return str.join(decPoint ? decPoint : '.');\n}\n","import { isDebug } from '../service';\n\nconst imports: Record<string, { promise: Promise<any>; resolve?: Function; }> = {};\n\nexport class LegacyLoader {\n static install(app: any) {\n const loader = app.$loader = new this(app);\n\n app.import = loader.import.bind(loader);\n app.importSync = loader.importSync.bind(loader);\n app.importCSS = loader.importCSS.bind(loader);\n app.minFileName = loader.minFileName.bind(loader);\n app.afterImported = loader.afterImported.bind(loader);\n }\n\n constructor(protected app: any) {\n //\n }\n\n doImport(src: string): Promise<any> {\n return S.import(src);\n }\n\n /**\n * Import modules or scripts.\n */\n import(...src: any[]): Promise<any|any[]> {\n if (src.length === 1) {\n return this.doImport(src[0]);\n }\n\n const promises: Promise<any>[] = [];\n\n src.forEach((link) => {\n promises.push(\n link instanceof Promise ? link : this.doImport(link)\n );\n });\n\n return Promise.all(promises);\n }\n\n /**\n * Import sync.\n */\n importSync(...src: any): Promise<any|any[]> {\n let promise: Promise<any> = Promise.resolve();\n let url: string[];\n const modules: any[] = [];\n\n while (url = src.shift()) {\n if (!Array.isArray(url)) {\n url = [ url ];\n }\n\n const target = url;\n promise = promise.then(\n () => this.import(...target).then((m) => {\n modules.push(m);\n return modules;\n })\n );\n }\n\n return promise;\n }\n\n /**\n * Import CSS files.\n */\n async importCSS(...src: any): Promise<any|any[]> {\n let modules: any = await this.import(...src);\n\n if (!Array.isArray(modules)) {\n modules = [modules];\n }\n\n const styles: CSSStyleSheet[] = (modules as any[]).map(module => module.default);\n\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...styles];\n }\n\n minFileName(fileName: string): string {\n const segments = fileName.split('.');\n const ext = segments.pop();\n\n if (isDebug()) {\n return segments.join('.') + '.min.' + ext;\n }\n\n return fileName;\n }\n\n asImported(name: string) {\n if (!imports[name]) {\n imports[name] = {\n promise: Promise.resolve(),\n resolve: undefined\n };\n } else {\n imports[name]?.resolve?.();\n }\n }\n\n /**\n * Add after import hook for some url or id.\n */\n afterImported(name: string, callback: (resolve: Function, reject?: Function) => void): Promise<any> {\n if (!imports[name]) {\n let r;\n imports[name] = {\n promise: new Promise((resolve) => {\n r = resolve;\n }),\n };\n\n imports[name].resolve = r;\n }\n\n imports[name].promise.then(callback);\n\n return imports[name].promise;\n }\n}\n\n","import { numberFormat } from '@lyrasoft/ts-toolkit/generic';\nimport { sprintf, vsprintf } from 'sprintf-js';\nimport {\n addGlobalValidator,\n useBs5ButtonRadio,\n useBs5KeepTab,\n useBs5Tooltip,\n useCheckboxesMultiSelect,\n useFieldValidationInstance,\n useForm,\n useFormAsync,\n useFormValidation,\n useFormValidationInstance,\n useGrid,\n useGridAsync,\n useHttpClient,\n useQueue,\n useStack,\n useTomSelect,\n useUniDirective\n} from '../composable';\nimport {\n __,\n animateTo,\n base64UrlDecode,\n base64UrlEncode,\n clearMessages,\n clearNotifies,\n debounce,\n delegate,\n domready,\n fadeIn,\n fadeOut,\n getBoundedInstance,\n getBoundedInstanceList,\n h,\n highlight,\n html,\n initAlpineComponent,\n isDebug,\n loadAlpine,\n mark,\n module,\n prepareAlpine,\n renderMessage,\n route,\n selectAll,\n selectOne,\n serial,\n simpleAlert,\n simpleConfirm,\n simpleNotify,\n slideDown,\n slideToggle,\n slideUp,\n throttle,\n tid,\n uid,\n useAssetUri,\n useColorPicker,\n useDisableIfStackNotEmpty,\n useDisableOnSubmit,\n useKeepAlive,\n useSystemUri\n} from '../service';\nimport { LegacyLoader } from './loader';\n\nexport async function useLegacyMethods(app: any) {\n const http = await useHttpClient();\n\n app.use(LegacyLoader);\n\n handleUri(app);\n handlerHelper(app);\n handleCrypto(app);\n\n app.__ = __;\n app.trans = __;\n app.route = route;\n app.$http = http;\n app.directive = useUniDirective;\n\n app.animate = animateTo;\n app.$animation = { to: animateTo };\n\n app.addMessage = renderMessage;\n app.clearMessages = clearMessages;\n app.notify = simpleNotify;\n app.clearNotifies = clearNotifies;\n\n app.loadAlpine = loadAlpine;\n app.initAlpine = initAlpineComponent;\n app.beforeAlpineInit = prepareAlpine;\n app.prepareAlpine = prepareAlpine;\n\n handleUI(app);\n\n await handleFormGrid(app);\n\n app.formValidation = useFormValidation;\n app.$validation = {\n get: useFormValidationInstance,\n getField: useFieldValidationInstance,\n addGlobalValidator: addGlobalValidator,\n import: () => useFormValidation()\n };\n\n app.stack = useStack;\n app.queue = useQueue;\n}\n\nfunction handleCrypto(app: any) {\n app.base64Encode = base64UrlEncode;\n app.base64Decode = base64UrlDecode;\n // app.uuid4 = uuid4;\n app.uid = uid;\n app.tid = tid;\n // app.md5 = md5;\n app.serial = serial;\n}\n\nfunction handleUri(app: any) {\n app.uri = useSystemUri;\n app.asset = useAssetUri;\n}\n\nfunction handlerHelper(app: any) {\n app.domready = domready;\n app.selectOne = selectOne;\n app.selectAll = selectAll;\n app.each = selectAll;\n app.getBoundedInstance = getBoundedInstance;\n app.getBoundedInstanceList = getBoundedInstanceList;\n app.module = module;\n app.h = h;\n app.html = html;\n // app.$get = get;\n // app.$set = set;\n app.delegate = delegate;\n app.debounce = debounce;\n app.throttle = throttle;\n app.isDebug = isDebug;\n app.confirm = simpleConfirm;\n app.alert = simpleAlert;\n app.numberFormat = numberFormat;\n app.sprintf = sprintf;\n app.vsprintf = vsprintf;\n // app.genRandomString = genRandomString;\n // app.defaultsDeep = defaultsDeep;\n}\n\nfunction handleUI(app: any) {\n app.$ui ??= {};\n app.$ui.addMessage = renderMessage;\n app.$ui.clearMessages = clearMessages;\n app.$ui.notify = simpleNotify;\n app.$ui.clearNotifies = clearNotifies;\n\n app.$ui.loadAlpine = loadAlpine;\n app.$ui.initAlpine = initAlpineComponent;\n app.$ui.beforeAlpineInit = prepareAlpine;\n app.$ui.prepareAlpine = prepareAlpine;\n\n app.$ui.mark = mark;\n app.$ui.tomSelect = useTomSelect;\n app.$ui.slideUp = slideUp;\n app.$ui.slideDown = slideDown;\n app.$ui.slideToggle = slideToggle;\n app.$ui.fadeOut = fadeOut;\n app.$ui.fadeIn = fadeIn;\n app.$ui.highlight = highlight;\n app.$ui.colorPicker = useColorPicker;\n app.$ui.disableOnSubmit = useDisableOnSubmit;\n app.$ui.disableIfStackNotEmpty = useDisableIfStackNotEmpty;\n app.$ui.checkboxesMultiSelect = useCheckboxesMultiSelect;\n app.$ui.keepAlive = useKeepAlive;\n app.$ui.bootstrap = {\n tooltip: useBs5Tooltip,\n buttonRadio: useBs5ButtonRadio,\n keepTab: useBs5KeepTab,\n };\n}\n\nasync function handleFormGrid(app: any) {\n await useFormAsync();\n await useGridAsync();\n\n app.form = useForm;\n app.grid = useGrid;\n}\n"],"names":["module","sprintf","vsprintf"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-dependent.js","sources":["../../src/module/list-dependent.ts"],"sourcesContent":["\r\nimport type { CancelTokenSource } from 'axios';\r\nimport { useHttpClient, useUniDirective } from '../composable';\r\nimport { getBoundedInstance, html, selectOne } from '../service';\r\nimport { mergeDeep } from '../utilities';\r\n\r\nconst nope = () => {};\r\n\r\nexport interface ListDependentOptions {\r\n ajax: {\r\n url: string | null | ((self: ListDependent) => string);\r\n value_field: string;\r\n data: Record<string, any> | ((data: Record<string, any>, self: ListDependent) => Record<string, any>);\r\n };\r\n source?: Record<string, any>;\r\n text_field: string;\r\n value_field: string;\r\n first_option?: Record<string, any>;\r\n default_value: any;\r\n initial_load: boolean;\r\n empty_mark: string;\r\n hooks: {\r\n before_request: (value: any, element: HTMLSelectElement, dependent: HTMLSelectElement) => any;\r\n after_request: (value: any, element: HTMLSelectElement, dependent: HTMLSelectElement) => any;\r\n };\r\n}\r\n\r\nconst defaultOptions: ListDependentOptions = {\r\n ajax: {\r\n url: null,\r\n value_field: 'value',\r\n data: {},\r\n },\r\n source: undefined,\r\n text_field: 'title',\r\n value_field: 'id',\r\n first_option: undefined,\r\n default_value: null,\r\n initial_load: true,\r\n empty_mark: '__EMPTY__',\r\n hooks: {\r\n before_request: nope,\r\n after_request: nope\r\n }\r\n};\r\n\r\ntype ListItems = Record<string, any>[];\r\ntype MaybeGroupedListItems = Record<string, ListItems> | ListItems;\r\n\r\nexport class ListDependent {\r\n element: HTMLSelectElement;\r\n dependent: HTMLSelectElement;\r\n options: ListDependentOptions;\r\n abortController: AbortController | null = null;\r\n\r\n static handle(el: string | HTMLSelectElement, dependent?: string | HTMLSelectElement, options: Partial<ListDependentOptions> = {}): ListDependent {\r\n return getBoundedInstance(el, 'list-dependent', () => {\r\n return new this(el, dependent, options);\r\n });\r\n }\r\n\r\n constructor(element: string | HTMLSelectElement, dependent?: string | HTMLSelectElement, options: Partial<ListDependentOptions> = {}) {\r\n this.options = this.mergeOptions(options);\r\n\r\n this.element = selectOne<HTMLSelectElement>(element)!;\r\n\r\n if (!dependent) {\r\n dependent = this.element.dataset.dependent || '';\r\n }\r\n\r\n this.dependent = selectOne<HTMLSelectElement>(dependent)!;\r\n\r\n this.bindEvents();\r\n\r\n if (this.options.initial_load) {\r\n this.changeList(this.dependent.value, true);\r\n }\r\n }\r\n\r\n /**\r\n * Bind events.\r\n */\r\n bindEvents() {\r\n this.dependent.addEventListener('change', (event) => {\r\n this.changeList((event.currentTarget as HTMLSelectElement)?.value);\r\n });\r\n }\r\n\r\n /**\r\n * Update the list elements.\r\n *\r\n * @param {*} value\r\n * @param {bool} initial\r\n */\r\n changeList(value: string, initial = false) {\r\n value = value || this.dependent.value;\r\n\r\n // Empty mark\r\n if (value === '') {\r\n value = this.options.empty_mark;\r\n }\r\n\r\n if (this.options.ajax.url) {\r\n this.ajaxUpdate(value);\r\n } else if (this.options.source) {\r\n this.sourceUpdate(value, initial);\r\n }\r\n }\r\n\r\n /**\r\n * Update list by source.\r\n */\r\n sourceUpdate(value: string, initial = false) {\r\n const source = this.options.source;\r\n\r\n if (!source) {\r\n return;\r\n }\r\n\r\n this.beforeHook(value, this.element, this.dependent);\r\n\r\n if (source[value]) {\r\n this.updateListElements(source[value]);\r\n } else {\r\n this.updateListElements([]);\r\n\r\n if (!initial && value !== '' && parseInt(value) !== 0) {\r\n console.log('List for value: ' + value + ' not found.');\r\n }\r\n }\r\n\r\n this.afterHook(value, this.element, this.dependent);\r\n }\r\n\r\n /**\r\n * Do ajax.\r\n *\r\n * @param {string} value\r\n */\r\n async ajaxUpdate(value: string) {\r\n let data: Record<string, any> = {};\r\n\r\n data[this.options.ajax.value_field] = value;\r\n\r\n if (typeof this.options.ajax.data === 'object') {\r\n data = { ...data, ...this.options.ajax.data };\r\n } else if (typeof this.options.ajax.data === 'function') {\r\n data = this.options.ajax.data(data, this) || data;\r\n }\r\n\r\n this.beforeHook(value, this.element, this.dependent);\r\n\r\n this.abort();\r\n\r\n let url = this.options.ajax.url;\r\n\r\n if (typeof url === 'function') {\r\n url = url(this);\r\n }\r\n\r\n if (!url) {\r\n throw new Error('Ajax URL is not set.');\r\n }\r\n\r\n const http = await useHttpClient();\r\n\r\n this.abortController = new AbortController();\r\n\r\n try {\r\n const res = await http.get<{\r\n success: boolean;\r\n data: any;\r\n }>(url, {\r\n params: data,\r\n signal: this.abortController.signal\r\n });\r\n\r\n const { success, data: returnData } = res.data;\r\n\r\n if (success) {\r\n this.updateListElements(returnData);\r\n } else {\r\n console.error(returnData);\r\n }\r\n\r\n } catch (e) {\r\n console.error(e);\r\n } finally {\r\n this.afterHook(value, this.element, this.dependent);\r\n this.abortController = null;\r\n }\r\n }\r\n\r\n abort() {\r\n if (this.abortController) {\r\n this.abortController.abort();\r\n this.abortController = null;\r\n }\r\n }\r\n\r\n updateListElements(items: MaybeGroupedListItems) {\r\n const textField = this.options.text_field;\r\n const valueField = this.options.value_field;\r\n this.element.innerHTML = '';\r\n\r\n if (this.options.first_option && Array.isArray(items)) {\r\n items.unshift({});\r\n items[0][textField] = this.options.first_option[textField];\r\n items[0][valueField] = this.options.first_option[valueField];\r\n }\r\n\r\n for (const i in items) {\r\n const item = items[i as keyof typeof items] as Record<string, any> | ListItems;\r\n\r\n if (Array.isArray(item)) {\r\n const group = html(`<optgroup label=\"${i}\"></optgroup>`);\r\n\r\n for (const k in item) {\r\n const child = item[k];\r\n this.appendOptionTo({\r\n value: child[valueField],\r\n text: child[textField],\r\n attributes: child.attributes,\r\n }, group);\r\n }\r\n\r\n this.element.appendChild(group);\r\n continue;\r\n }\r\n\r\n this.appendOptionTo({\r\n value: item[valueField],\r\n text: item[textField],\r\n attributes: item.attributes,\r\n }, this.element);\r\n }\r\n\r\n this.element.dispatchEvent(new CustomEvent('change'));\r\n this.element.dispatchEvent(new CustomEvent('list:updated'));\r\n }\r\n\r\n appendOptionTo(item: any, parent: any) {\r\n const value = item.value;\r\n const option = html('<option>' + item.text + '</option>');\r\n option.setAttribute('value', value);\r\n\r\n if (item.attributes) {\r\n for (const index in item.attributes) {\r\n const val = item.attributes[index];\r\n option.setAttribute(index, val);\r\n }\r\n }\r\n\r\n if (this.isSelected(value)) {\r\n option.setAttribute('selected', 'selected');\r\n }\r\n\r\n parent.appendChild(option);\r\n }\r\n\r\n isSelected(value: string) {\r\n let defaultValues: any[] = [];\r\n\r\n // Convert all types to array\r\n let defValue = this.element.dataset.selected ?? this.options.default_value;\r\n\r\n if (typeof defValue === 'function') {\r\n defValue = defValue(value, this);\r\n }\r\n\r\n if (Array.isArray(defValue)) {\r\n defaultValues = defValue;\r\n } else if (defValue && typeof defValue === 'object') {\r\n defaultValues = Object.keys(defValue);\r\n } else {\r\n defaultValues = [defValue];\r\n }\r\n\r\n return defaultValues.indexOf(value) !== -1;\r\n }\r\n\r\n /**\r\n * Before hook.\r\n */\r\n beforeHook(value: string, element: HTMLSelectElement, dependent: HTMLSelectElement) {\r\n const before = this.options.hooks.before_request;\r\n\r\n return before.call(this, value, element, dependent);\r\n }\r\n\r\n /**\r\n * After hook.\r\n */\r\n afterHook(value: string, element: HTMLSelectElement, dependent: HTMLSelectElement) {\r\n const after = this.options.hooks.after_request;\r\n\r\n return after.call(this, value, element, dependent);\r\n }\r\n\r\n mergeOptions(options: Partial<ListDependentOptions>): ListDependentOptions {\r\n return mergeDeep<ListDependentOptions>({}, defaultOptions, options);\r\n }\r\n}\r\n\r\nexport const ready = useUniDirective<HTMLSelectElement>('list-dependent', {\r\n mounted(el, binding) {\r\n const options = JSON.parse(binding.value);\r\n\r\n ListDependent.handle(el, options.dependent, options);\r\n },\r\n updated(el, binding) {\r\n const options = JSON.parse(binding.value);\r\n\r\n ListDependent.handle(el).mergeOptions(options);\r\n }\r\n});\r\n\r\nexport type ListDependentModule = {\r\n ListDependent: typeof ListDependent;\r\n ready: typeof ready;\r\n};\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list-dependent.js","sources":["../../src/module/list-dependent.ts"],"sourcesContent":["\nimport type { CancelTokenSource } from 'axios';\nimport { useHttpClient, useUniDirective } from '../composable';\nimport { getBoundedInstance, html, selectOne } from '../service';\nimport { mergeDeep } from '../utilities';\n\nconst nope = () => {};\n\nexport interface ListDependentOptions {\n ajax: {\n url: string | null | ((self: ListDependent) => string);\n value_field: string;\n data: Record<string, any> | ((data: Record<string, any>, self: ListDependent) => Record<string, any>);\n };\n source?: Record<string, any>;\n text_field: string;\n value_field: string;\n first_option?: Record<string, any>;\n default_value: any;\n initial_load: boolean;\n empty_mark: string;\n hooks: {\n before_request: (value: any, element: HTMLSelectElement, dependent: HTMLSelectElement) => any;\n after_request: (value: any, element: HTMLSelectElement, dependent: HTMLSelectElement) => any;\n };\n}\n\nconst defaultOptions: ListDependentOptions = {\n ajax: {\n url: null,\n value_field: 'value',\n data: {},\n },\n source: undefined,\n text_field: 'title',\n value_field: 'id',\n first_option: undefined,\n default_value: null,\n initial_load: true,\n empty_mark: '__EMPTY__',\n hooks: {\n before_request: nope,\n after_request: nope\n }\n};\n\ntype ListItems = Record<string, any>[];\ntype MaybeGroupedListItems = Record<string, ListItems> | ListItems;\n\nexport class ListDependent {\n element: HTMLSelectElement;\n dependent: HTMLSelectElement;\n options: ListDependentOptions;\n abortController: AbortController | null = null;\n\n static handle(el: string | HTMLSelectElement, dependent?: string | HTMLSelectElement, options: Partial<ListDependentOptions> = {}): ListDependent {\n return getBoundedInstance(el, 'list-dependent', () => {\n return new this(el, dependent, options);\n });\n }\n\n constructor(element: string | HTMLSelectElement, dependent?: string | HTMLSelectElement, options: Partial<ListDependentOptions> = {}) {\n this.options = this.mergeOptions(options);\n\n this.element = selectOne<HTMLSelectElement>(element)!;\n\n if (!dependent) {\n dependent = this.element.dataset.dependent || '';\n }\n\n this.dependent = selectOne<HTMLSelectElement>(dependent)!;\n\n this.bindEvents();\n\n if (this.options.initial_load) {\n this.changeList(this.dependent.value, true);\n }\n }\n\n /**\n * Bind events.\n */\n bindEvents() {\n this.dependent.addEventListener('change', (event) => {\n this.changeList((event.currentTarget as HTMLSelectElement)?.value);\n });\n }\n\n /**\n * Update the list elements.\n *\n * @param {*} value\n * @param {bool} initial\n */\n changeList(value: string, initial = false) {\n value = value || this.dependent.value;\n\n // Empty mark\n if (value === '') {\n value = this.options.empty_mark;\n }\n\n if (this.options.ajax.url) {\n this.ajaxUpdate(value);\n } else if (this.options.source) {\n this.sourceUpdate(value, initial);\n }\n }\n\n /**\n * Update list by source.\n */\n sourceUpdate(value: string, initial = false) {\n const source = this.options.source;\n\n if (!source) {\n return;\n }\n\n this.beforeHook(value, this.element, this.dependent);\n\n if (source[value]) {\n this.updateListElements(source[value]);\n } else {\n this.updateListElements([]);\n\n if (!initial && value !== '' && parseInt(value) !== 0) {\n console.log('List for value: ' + value + ' not found.');\n }\n }\n\n this.afterHook(value, this.element, this.dependent);\n }\n\n /**\n * Do ajax.\n *\n * @param {string} value\n */\n async ajaxUpdate(value: string) {\n let data: Record<string, any> = {};\n\n data[this.options.ajax.value_field] = value;\n\n if (typeof this.options.ajax.data === 'object') {\n data = { ...data, ...this.options.ajax.data };\n } else if (typeof this.options.ajax.data === 'function') {\n data = this.options.ajax.data(data, this) || data;\n }\n\n this.beforeHook(value, this.element, this.dependent);\n\n this.abort();\n\n let url = this.options.ajax.url;\n\n if (typeof url === 'function') {\n url = url(this);\n }\n\n if (!url) {\n throw new Error('Ajax URL is not set.');\n }\n\n const http = await useHttpClient();\n\n this.abortController = new AbortController();\n\n try {\n const res = await http.get<{\n success: boolean;\n data: any;\n }>(url, {\n params: data,\n signal: this.abortController.signal\n });\n\n const { success, data: returnData } = res.data;\n\n if (success) {\n this.updateListElements(returnData);\n } else {\n console.error(returnData);\n }\n\n } catch (e) {\n console.error(e);\n } finally {\n this.afterHook(value, this.element, this.dependent);\n this.abortController = null;\n }\n }\n\n abort() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n }\n\n updateListElements(items: MaybeGroupedListItems) {\n const textField = this.options.text_field;\n const valueField = this.options.value_field;\n this.element.innerHTML = '';\n\n if (this.options.first_option && Array.isArray(items)) {\n items.unshift({});\n items[0][textField] = this.options.first_option[textField];\n items[0][valueField] = this.options.first_option[valueField];\n }\n\n for (const i in items) {\n const item = items[i as keyof typeof items] as Record<string, any> | ListItems;\n\n if (Array.isArray(item)) {\n const group = html(`<optgroup label=\"${i}\"></optgroup>`);\n\n for (const k in item) {\n const child = item[k];\n this.appendOptionTo({\n value: child[valueField],\n text: child[textField],\n attributes: child.attributes,\n }, group);\n }\n\n this.element.appendChild(group);\n continue;\n }\n\n this.appendOptionTo({\n value: item[valueField],\n text: item[textField],\n attributes: item.attributes,\n }, this.element);\n }\n\n this.element.dispatchEvent(new CustomEvent('change'));\n this.element.dispatchEvent(new CustomEvent('list:updated'));\n }\n\n appendOptionTo(item: any, parent: any) {\n const value = item.value;\n const option = html('<option>' + item.text + '</option>');\n option.setAttribute('value', value);\n\n if (item.attributes) {\n for (const index in item.attributes) {\n const val = item.attributes[index];\n option.setAttribute(index, val);\n }\n }\n\n if (this.isSelected(value)) {\n option.setAttribute('selected', 'selected');\n }\n\n parent.appendChild(option);\n }\n\n isSelected(value: string) {\n let defaultValues: any[] = [];\n\n // Convert all types to array\n let defValue = this.element.dataset.selected ?? this.options.default_value;\n\n if (typeof defValue === 'function') {\n defValue = defValue(value, this);\n }\n\n if (Array.isArray(defValue)) {\n defaultValues = defValue;\n } else if (defValue && typeof defValue === 'object') {\n defaultValues = Object.keys(defValue);\n } else {\n defaultValues = [defValue];\n }\n\n return defaultValues.indexOf(value) !== -1;\n }\n\n /**\n * Before hook.\n */\n beforeHook(value: string, element: HTMLSelectElement, dependent: HTMLSelectElement) {\n const before = this.options.hooks.before_request;\n\n return before.call(this, value, element, dependent);\n }\n\n /**\n * After hook.\n */\n afterHook(value: string, element: HTMLSelectElement, dependent: HTMLSelectElement) {\n const after = this.options.hooks.after_request;\n\n return after.call(this, value, element, dependent);\n }\n\n mergeOptions(options: Partial<ListDependentOptions>): ListDependentOptions {\n return mergeDeep<ListDependentOptions>({}, defaultOptions, options);\n }\n}\n\nexport const ready = useUniDirective<HTMLSelectElement>('list-dependent', {\n mounted(el, binding) {\n const options = JSON.parse(binding.value);\n\n ListDependent.handle(el, options.dependent, options);\n },\n updated(el, binding) {\n const options = JSON.parse(binding.value);\n\n ListDependent.handle(el).mergeOptions(options);\n }\n});\n\nexport type ListDependentModule = {\n ListDependent: typeof ListDependent;\n ready: typeof ready;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -33,10 +33,18 @@ class S3MultipartUploader extends (/* @__PURE__ */ Mixin(EventMixin)) {
|
|
|
33
33
|
initData["filename"] = options["filename"];
|
|
34
34
|
}
|
|
35
35
|
this.trigger("start", file, initData);
|
|
36
|
+
const beforeUnloadHandler = (e) => {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
e.returnValue = "";
|
|
39
|
+
};
|
|
40
|
+
if (this.options.leaveAlert === true) {
|
|
41
|
+
window.addEventListener("beforeunload", beforeUnloadHandler);
|
|
42
|
+
}
|
|
36
43
|
const { id } = await this.request(
|
|
37
44
|
"init",
|
|
38
45
|
initData
|
|
39
46
|
);
|
|
47
|
+
this.trigger("inited", { id, path });
|
|
40
48
|
try {
|
|
41
49
|
const chunkSize = this.options.chunkSize;
|
|
42
50
|
const chunks = Math.ceil(file.size / chunkSize);
|
|
@@ -80,11 +88,16 @@ class S3MultipartUploader extends (/* @__PURE__ */ Mixin(EventMixin)) {
|
|
|
80
88
|
profile: this.options.profile
|
|
81
89
|
}
|
|
82
90
|
);
|
|
83
|
-
this.trigger("success", url);
|
|
84
|
-
return { url };
|
|
91
|
+
this.trigger("success", { id, path, url });
|
|
92
|
+
return { url, id, path };
|
|
85
93
|
} catch (e) {
|
|
86
94
|
await this.abort(id, path);
|
|
95
|
+
this.trigger("failure", { error: e, id, path });
|
|
87
96
|
throw e;
|
|
97
|
+
} finally {
|
|
98
|
+
if (this.options.leaveAlert === true) {
|
|
99
|
+
window.removeEventListener("beforeunload", beforeUnloadHandler);
|
|
100
|
+
}
|
|
88
101
|
}
|
|
89
102
|
}
|
|
90
103
|
async uploadPart(file, payload) {
|
|
@@ -120,6 +133,14 @@ class S3MultipartUploader extends (/* @__PURE__ */ Mixin(EventMixin)) {
|
|
|
120
133
|
const res = await http.post(await this.resolveRoute(action), body);
|
|
121
134
|
return res.data.data;
|
|
122
135
|
}
|
|
136
|
+
// protected async abortBeacon(id: string, path: string): Promise<void> {
|
|
137
|
+
// const data = new FormData();
|
|
138
|
+
// data.append('id', id);
|
|
139
|
+
// data.append('path', path);
|
|
140
|
+
// data.append('profile', this.options.profile || '');
|
|
141
|
+
//
|
|
142
|
+
// await navigator.sendBeacon(route(await this.resolveRoute('abort')), data);
|
|
143
|
+
// }
|
|
123
144
|
async abort(id, path) {
|
|
124
145
|
await this.request(
|
|
125
146
|
"abort",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-multipart-uploader.js","sources":["../../src/module/s3-multipart-uploader.ts"],"sourcesContent":["import { AxiosProgressEvent, AxiosResponseHeaders } from 'axios';\r\nimport { Mixin } from 'ts-mixer';\r\nimport { createQueue, useHttpClient } from '../composable';\r\nimport { EventHandler, EventMixin } from '../events';\r\nimport type { MaybePromise } from '../types';\r\nimport { mergeDeep } from '../utilities';\r\nimport { ApiReturn } from './http-client';\r\n\r\ndeclare type RoutingOptions = {\r\n init: string;\r\n sign: string;\r\n complete: string;\r\n abort: string;\r\n} | ((action: RouteActions) => MaybePromise<string>);\r\n\r\ndeclare type RouteActions = 'init' | 'sign' | 'complete' | 'abort';\r\ndeclare type RequestHandler = <T = Record<string, any>>(action: RouteActions, data: Record<string, any>) => Promise<T>;\r\n\r\nexport interface S3MultipartUploaderOptions {\r\n profile?: string;\r\n chunkSize: number;\r\n concurrency: number;\r\n routes: RoutingOptions;\r\n requestHandler?: RequestHandler;\r\n onProgress?: ProgressEventHandler;\r\n ACL?: string;\r\n extra?: Record<string, any>;\r\n\r\n // maxRetries?: number;\r\n // endpoint: string;\r\n // subfolder?: string;\r\n}\r\n\r\nconst defaultOptions: Partial<S3MultipartUploaderOptions> = {\r\n chunkSize: 5 * 1024 * 1024, // 5MB\r\n concurrency: 2,\r\n};\r\n\r\nexport interface S3MultipartUploaderRequestOptions {\r\n onProgress?: ProgressEventHandler;\r\n filename?: string;\r\n ContentType?: string;\r\n ContentDisposition?: string;\r\n ACL?: string;\r\n extra?: Record<string, any>;\r\n}\r\n\r\nexport class S3MultipartUploader extends Mixin(EventMixin) {\r\n options: S3MultipartUploaderOptions;\r\n\r\n constructor(options: Partial<S3MultipartUploaderOptions>) {\r\n super();\r\n this.options = mergeDeep({}, defaultOptions, options);\r\n }\r\n\r\n async upload(\r\n file: string | File | Blob,\r\n path: string,\r\n options: S3MultipartUploaderRequestOptions = {}\r\n ): Promise<{ url: string; }> {\r\n const extra: Record<string, any> = { ...(this.options.extra ?? {}), ...(options.extra ?? {}) };\r\n\r\n if (typeof file === 'string') {\r\n file = new Blob([file], { type: options['ContentType'] || 'text/plain' });\r\n }\r\n\r\n if (file instanceof Blob && !(file instanceof File)) {\r\n if (path.endsWith('.{ext}')) {\r\n throw new Error('If using Blob or file data string, you must provide a valid file extension in the path.');\r\n }\r\n\r\n file = new File([file], 'blob', { type: file.type });\r\n }\r\n\r\n if (file instanceof File) {\r\n extra['ContentType'] = options['ContentType'] || file.type;\r\n }\r\n\r\n if (options.ACL || this.options.ACL) {\r\n extra.ACL = options.ACL || this.options.ACL;\r\n }\r\n\r\n path = this.replaceExt(path, file);\r\n\r\n const initData: Record<string, any> = { extra, path, profile: this.options.profile };\r\n\r\n if (options['filename']) {\r\n initData['filename'] = options['filename'];\r\n }\r\n\r\n this.trigger('start', file, initData);\r\n\r\n // @Request sign\r\n const { id } = await this.request<{ id: string; }>(\r\n 'init',\r\n initData\r\n );\r\n\r\n try {\r\n const chunkSize = this.options.chunkSize;\r\n const chunks = Math.ceil(file.size / chunkSize);\r\n\r\n let uploadedBytes = 0;\r\n let parts: { ETag: string, PartNumber: number }[] = [];\r\n let currentPart = 1;\r\n const queue = createQueue(this.options.concurrency);\r\n const promises = [];\r\n const partsUploaded: Record<number, number> = {};\r\n\r\n // Loop from 1 to chunks\r\n while (currentPart <= chunks) {\r\n const partNumber = currentPart;\r\n\r\n // Push to queue\r\n const p = queue.push(async () => {\r\n const { blob, etag } = await this.uploadPart(\r\n file as File,\r\n {\r\n id,\r\n path,\r\n partNumber,\r\n chunkSize,\r\n onUploadProgress: (e) => {\r\n partsUploaded[partNumber] = e.loaded;\r\n\r\n const uploaded = Object.values(partsUploaded).reduce((sum, a) => sum + a, 0);\r\n\r\n this.updateProgress(uploaded, file.size, options);\r\n }\r\n }\r\n );\r\n\r\n uploadedBytes += blob.size;\r\n\r\n this.updateProgress(uploadedBytes, file.size, options);\r\n\r\n parts.push({ ETag: etag, PartNumber: partNumber });\r\n });\r\n\r\n promises.push(p);\r\n\r\n currentPart++;\r\n }\r\n\r\n await Promise.all(promises);\r\n\r\n // @Request sign\r\n const { url } = await this.request<{ url: string }>(\r\n 'complete',\r\n {\r\n id,\r\n path,\r\n parts: parts.sort((a, b) => a.PartNumber - b.PartNumber),\r\n profile: this.options.profile,\r\n },\r\n );\r\n\r\n this.trigger('success', url);\r\n\r\n return { url };\r\n } catch (e) {\r\n await this.abort(id, path);\r\n\r\n throw e;\r\n }\r\n }\r\n\r\n protected async uploadPart(\r\n file: File,\r\n payload: {\r\n id: string;\r\n path: string;\r\n partNumber: number;\r\n chunkSize: number;\r\n onUploadProgress: (e: AxiosProgressEvent) => void;\r\n }\r\n ) {\r\n const http = await useHttpClient();\r\n const { id, path, partNumber, chunkSize, onUploadProgress } = payload;\r\n\r\n const start = (partNumber - 1) * chunkSize;\r\n const end = Math.min(partNumber * chunkSize, file.size);\r\n\r\n const blob = file.slice(start, end);\r\n\r\n // @Request sign\r\n const { url } = await this.request<{ url: string; }>(\r\n 'sign',\r\n {\r\n id,\r\n path,\r\n partNumber,\r\n profile: this.options.profile,\r\n }\r\n );\r\n\r\n // PUT to S3\r\n const res = await http.put(\r\n url,\r\n blob,\r\n {\r\n onUploadProgress,\r\n }\r\n );\r\n\r\n const etag = String((res.headers as AxiosResponseHeaders).get('ETag') || '');\r\n\r\n return { blob, etag };\r\n }\r\n\r\n protected async request<T = Record<string, any>>(action: RouteActions, body: Record<string, any>): Promise<T> {\r\n if (this.options.requestHandler) {\r\n return this.options.requestHandler<T>(action, body);\r\n }\r\n\r\n const http = await useHttpClient();\r\n\r\n const res = await http.post<ApiReturn<T>>(await this.resolveRoute(action), body);\r\n\r\n return res.data.data;\r\n }\r\n\r\n async abort(id: string, path: string) {\r\n await this.request(\r\n 'abort',\r\n {\r\n id,\r\n path,\r\n profile: this.options.profile,\r\n }\r\n );\r\n }\r\n\r\n updateProgress(loaded: number, total: number, options: S3MultipartUploaderRequestOptions) {\r\n const percentage = (loaded / total) * 100;\r\n\r\n const event: ProgressEvent = { percentage, loaded, total };\r\n\r\n this.trigger('progress', event);\r\n\r\n this.options.onProgress?.(event);\r\n\r\n if (options.onProgress) {\r\n options.onProgress(event);\r\n }\r\n }\r\n\r\n async resolveRoute(action: RouteActions): Promise<string> {\r\n if (typeof this.options.routes === 'function') {\r\n return this.options.routes(action);\r\n }\r\n\r\n return this.options.routes[action];\r\n }\r\n\r\n setChunkSize(size: number): this {\r\n this.options.chunkSize = size;\r\n\r\n return this;\r\n }\r\n\r\n setChunkSizeInMiB(size: number): this {\r\n this.options.chunkSize = size * 1024 * 1024;\r\n\r\n return this;\r\n }\r\n\r\n replaceExt(path: string, file: File | Blob): string {\r\n if (file instanceof File) {\r\n const fileExt = file.name.split('.').pop();\r\n\r\n if (path.endsWith('.{ext}')) {\r\n return path.replace(/\\.{ext}$/, fileExt ? '.' + fileExt : '');\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n\r\n on(\r\n event: 'start',\r\n handler: (file: File, data: { path: string; extra: Record<string, any>; [name: string]: any; }) => void\r\n ): this;\r\n on(event: 'success', handler: (url: string) => void): this;\r\n on(event: 'progress', handler: (event: ProgressEvent) => void): this;\r\n on(event: string | string[], handler: EventHandler): this {\r\n return super.on(event, handler);\r\n }\r\n}\r\n\r\ntype ProgressEvent = {\r\n percentage: number;\r\n loaded: number;\r\n total: number;\r\n};\r\ntype ProgressEventHandler = (e: ProgressEvent) => void;\r\n\r\nexport interface S3MultipartUploaderModule {\r\n S3MultipartUploader: typeof S3MultipartUploader;\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"s3-multipart-uploader.js","sources":["../../src/module/s3-multipart-uploader.ts"],"sourcesContent":["import { AxiosProgressEvent, AxiosResponseHeaders } from 'axios';\nimport { Mixin } from 'ts-mixer';\nimport { createQueue, useHttpClient } from '../composable';\nimport { EventHandler, EventMixin } from '../events';\nimport { route } from '../service';\nimport type { MaybePromise } from '../types';\nimport { mergeDeep } from '../utilities';\nimport { ApiReturn } from './http-client';\n\ndeclare type RoutingOptions = {\n init: string;\n sign: string;\n complete: string;\n abort: string;\n} | ((action: RouteActions) => MaybePromise<string>);\n\ndeclare type RouteActions = 'init' | 'sign' | 'complete' | 'abort';\ndeclare type RequestHandler = <T = Record<string, any>>(action: RouteActions, data: Record<string, any>) => Promise<T>;\n\nexport interface S3MultipartUploaderOptions {\n profile?: string;\n chunkSize: number;\n concurrency: number;\n leaveAlert?: boolean;\n routes: RoutingOptions;\n requestHandler?: RequestHandler;\n onProgress?: ProgressEventHandler;\n ACL?: string;\n extra?: Record<string, any>;\n\n // maxRetries?: number;\n // endpoint: string;\n // subfolder?: string;\n}\n\nconst defaultOptions: Partial<S3MultipartUploaderOptions> = {\n chunkSize: 5 * 1024 * 1024, // 5MB\n concurrency: 2,\n};\n\nexport interface S3MultipartUploaderRequestOptions {\n onProgress?: ProgressEventHandler;\n filename?: string;\n ContentType?: string;\n ContentDisposition?: string;\n ACL?: 'public-read' | 'private' | 'authenticated-read' | 'public-read-write' | string;\n extra?: Record<string, any>;\n}\n\nexport class S3MultipartUploader extends Mixin(EventMixin) {\n options: S3MultipartUploaderOptions;\n\n constructor(options: Partial<S3MultipartUploaderOptions>) {\n super();\n this.options = mergeDeep({}, defaultOptions, options);\n }\n\n async upload(\n file: string | File | Blob,\n path: string,\n options: S3MultipartUploaderRequestOptions = {}\n ): Promise<{ url: string; id: string; path: string; }> {\n const extra: Record<string, any> = { ...(this.options.extra ?? {}), ...(options.extra ?? {}) };\n\n if (typeof file === 'string') {\n file = new Blob([file], { type: options['ContentType'] || 'text/plain' });\n }\n\n if (file instanceof Blob && !(file instanceof File)) {\n if (path.endsWith('.{ext}')) {\n throw new Error('If using Blob or file data string, you must provide a valid file extension in the path.');\n }\n\n file = new File([file], 'blob', { type: file.type });\n }\n\n if (file instanceof File) {\n extra['ContentType'] = options['ContentType'] || file.type;\n }\n\n if (options.ACL || this.options.ACL) {\n extra.ACL = options.ACL || this.options.ACL;\n }\n\n path = this.replaceExt(path, file);\n\n const initData: Record<string, any> = { extra, path, profile: this.options.profile };\n\n if (options['filename']) {\n initData['filename'] = options['filename'];\n }\n\n this.trigger('start', file, initData);\n\n // Prepare unload\n const beforeUnloadHandler = (e: BeforeUnloadEvent) => {\n e.preventDefault();\n e.returnValue = '';\n };\n if (this.options.leaveAlert === true) {\n window.addEventListener('beforeunload', beforeUnloadHandler);\n }\n\n // @Request init\n const { id } = await this.request<{ id: string; }>(\n 'init',\n initData\n );\n\n this.trigger('inited', { id, path });\n\n try {\n const chunkSize = this.options.chunkSize;\n const chunks = Math.ceil(file.size / chunkSize);\n\n let uploadedBytes = 0;\n let parts: { ETag: string, PartNumber: number }[] = [];\n let currentPart = 1;\n const queue = createQueue(this.options.concurrency);\n const promises = [];\n const partsUploaded: Record<number, number> = {};\n\n // Loop from 1 to chunks\n while (currentPart <= chunks) {\n const partNumber = currentPart;\n\n // Push to queue\n const p = queue.push(async () => {\n const { blob, etag } = await this.uploadPart(\n file as File,\n {\n id,\n path,\n partNumber,\n chunkSize,\n onUploadProgress: (e) => {\n partsUploaded[partNumber] = e.loaded;\n\n const uploaded = Object.values(partsUploaded).reduce((sum, a) => sum + a, 0);\n\n this.updateProgress(uploaded, file.size, options);\n }\n }\n );\n\n uploadedBytes += blob.size;\n\n this.updateProgress(uploadedBytes, file.size, options);\n\n parts.push({ ETag: etag, PartNumber: partNumber });\n });\n\n promises.push(p);\n\n currentPart++;\n }\n\n await Promise.all(promises);\n\n // @Request sign\n const { url } = await this.request<{ url: string }>(\n 'complete',\n {\n id,\n path,\n parts: parts.sort((a, b) => a.PartNumber - b.PartNumber),\n profile: this.options.profile,\n },\n );\n\n this.trigger('success', { id, path, url });\n\n return { url, id, path };\n } catch (e) {\n await this.abort(id, path);\n\n this.trigger('failure', { error: e as Error, id, path });\n\n throw e;\n } finally {\n if (this.options.leaveAlert === true) {\n window.removeEventListener('beforeunload', beforeUnloadHandler);\n }\n }\n }\n\n protected async uploadPart(\n file: File,\n payload: {\n id: string;\n path: string;\n partNumber: number;\n chunkSize: number;\n onUploadProgress: (e: AxiosProgressEvent) => void;\n }\n ) {\n const http = await useHttpClient();\n const { id, path, partNumber, chunkSize, onUploadProgress } = payload;\n\n const start = (partNumber - 1) * chunkSize;\n const end = Math.min(partNumber * chunkSize, file.size);\n\n const blob = file.slice(start, end);\n\n // @Request sign\n const { url } = await this.request<{ url: string; }>(\n 'sign',\n {\n id,\n path,\n partNumber,\n profile: this.options.profile,\n }\n );\n\n // PUT to S3\n const res = await http.put(\n url,\n blob,\n {\n onUploadProgress,\n }\n );\n\n const etag = String((res.headers as AxiosResponseHeaders).get('ETag') || '');\n\n return { blob, etag };\n }\n\n protected async request<T = Record<string, any>>(action: RouteActions, body: Record<string, any>): Promise<T> {\n if (this.options.requestHandler) {\n return this.options.requestHandler<T>(action, body);\n }\n\n const http = await useHttpClient();\n\n const res = await http.post<ApiReturn<T>>(await this.resolveRoute(action), body);\n\n return res.data.data;\n }\n\n // protected async abortBeacon(id: string, path: string): Promise<void> {\n // const data = new FormData();\n // data.append('id', id);\n // data.append('path', path);\n // data.append('profile', this.options.profile || '');\n //\n // await navigator.sendBeacon(route(await this.resolveRoute('abort')), data);\n // }\n\n async abort(id: string, path: string) {\n await this.request(\n 'abort',\n {\n id,\n path,\n profile: this.options.profile,\n }\n );\n }\n\n updateProgress(loaded: number, total: number, options: S3MultipartUploaderRequestOptions) {\n const percentage = (loaded / total) * 100;\n\n const event: ProgressEvent = { percentage, loaded, total };\n\n this.trigger('progress', event);\n\n this.options.onProgress?.(event);\n\n if (options.onProgress) {\n options.onProgress(event);\n }\n }\n\n async resolveRoute(action: RouteActions): Promise<string> {\n if (typeof this.options.routes === 'function') {\n return this.options.routes(action);\n }\n\n return this.options.routes[action];\n }\n\n setChunkSize(size: number): this {\n this.options.chunkSize = size;\n\n return this;\n }\n\n setChunkSizeInMiB(size: number): this {\n this.options.chunkSize = size * 1024 * 1024;\n\n return this;\n }\n\n replaceExt(path: string, file: File | Blob): string {\n if (file instanceof File) {\n const fileExt = file.name.split('.').pop();\n\n if (path.endsWith('.{ext}')) {\n return path.replace(/\\.{ext}$/, fileExt ? '.' + fileExt : '');\n }\n }\n\n return path;\n }\n\n on(\n event: 'start',\n handler: (file: File, data: { path: string; extra: Record<string, any>; [name: string]: any; }) => void\n ): this;\n on(event: 'inited', handler: (event: { id: string; path: string; }) => void): this;\n on(event: 'success', handler: (event: { url: string; id: string; path: string; }) => void): this;\n on(event: 'progress', handler: (event: ProgressEvent) => void): this;\n on(event: 'failure', handler: (event: { error: Error; id: string; path: string; }) => void): this;\n on(event: string | string[], handler: EventHandler): this {\n return super.on(event, handler);\n }\n}\n\ntype ProgressEvent = {\n percentage: number;\n loaded: number;\n total: number;\n};\ntype ProgressEventHandler = (e: ProgressEvent) => void;\n\nexport interface S3MultipartUploaderModule {\n S3MultipartUploader: typeof S3MultipartUploader;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-uploader.js","sources":["../../src/module/s3-uploader.ts"],"sourcesContent":["import { useHttpClient } from '../composable';\r\nimport { data } from '../data';\r\nimport { EventAwareInterface, EventHandler, EventMixin } from '../events';\r\nimport type { UnicornHttpClient } from './http-client';\r\nimport { mergeDeep } from '../utilities';\r\nimport { AxiosProgressEvent, AxiosResponse } from 'axios';\r\nimport { Mixin } from 'ts-mixer';\r\n\r\nconst instances: Record<string, S3Uploader> = {};\r\nexport function get(name: string, options?: Partial<S3UploaderGlobalOptions>): S3Uploader;\r\nexport function get(\r\n name: string,\r\n options: Partial<S3UploaderGlobalOptions> = {}\r\n): S3Uploader | void {\r\n return instances[name] ??= create(name, options);\r\n}\r\n\r\nexport function create(name: string, options: Partial<S3UploaderGlobalOptions> = {}): S3Uploader {\r\n return new S3Uploader(name, options);\r\n}\r\n\r\nexport function destroy(name: string) {\r\n delete instances[name];\r\n}\r\n\r\nconst defaultOptions: S3UploaderGlobalOptions = {\r\n endpoint: '',\r\n subfolder: '',\r\n viewerHost: '',\r\n starts_with: [],\r\n formInputs: {\r\n acl: '',\r\n bucket: '',\r\n key: '',\r\n Policy: '',\r\n 'X-Amz-Algorithm': '',\r\n 'X-Amz-Credential': '',\r\n 'X-Amz-Date': '',\r\n 'X-Amz-Signature': '',\r\n }\r\n};\r\n\r\nexport class S3Uploader extends Mixin(EventMixin) implements EventAwareInterface {\r\n options: S3UploaderGlobalOptions;\r\n http?: UnicornHttpClient;\r\n\r\n constructor(protected name: string, options: Partial<S3UploaderGlobalOptions> = {}) {\r\n super();\r\n\r\n const awsOptions = data('@s3.uploader.' + name) || {};\r\n\r\n this.options = mergeDeep<S3UploaderGlobalOptions>({}, defaultOptions, awsOptions, options);\r\n }\r\n\r\n async getHttpClient() {\r\n return this.http ??= await useHttpClient();\r\n }\r\n\r\n /**\r\n * Do upload.\r\n */\r\n async upload(\r\n file: string | File | Blob,\r\n path: string,\r\n options: Partial<S3UploaderRequestOptions> = {}\r\n ): Promise<S3UploaderResponse> {\r\n const httpClient = await this.getHttpClient();\r\n\r\n const fileData = new FormData();\r\n const inputs = mergeDeep({}, this.options.formInputs, options.formInputs || {});\r\n\r\n if (typeof file === 'string') {\r\n file = new Blob([file], { type: options['Content-Type'] || 'text/plain' });\r\n }\r\n\r\n if (file instanceof Blob && path.endsWith('.{ext}')) {\r\n throw new Error('If using Blob or file data string, you must provide a valid file extension in the path.');\r\n }\r\n\r\n if ((file instanceof Blob) || (file as any) instanceof File) {\r\n options['Content-Type'] = options['Content-Type'] || file.type;\r\n }\r\n\r\n if (options['filename']) {\r\n const filename = this.replaceExt(options['filename'], file);\r\n options['Content-Disposition'] = 'attachment; filename*=UTF-8\\'\\'' + encodeURIComponent(filename);\r\n }\r\n\r\n path = this.replaceExt(path, file);\r\n\r\n options['key'] = trimSlashes(this.options.subfolder || '') + '/'\r\n + trimSlashes(path);\r\n options['key'] = trimSlashes(options['key']);\r\n options['Content-Type'] = options['Content-Type'] || undefined;\r\n options['Content-Disposition'] = options['Content-Disposition'] || undefined;\r\n\r\n // Prepare pre-signed data\r\n for (let key in inputs) {\r\n fileData.set(key, inputs[key]);\r\n }\r\n\r\n // Prepare custom data\r\n for (let key of Object.keys(this.options.starts_with)) {\r\n if (options[key]) {\r\n fileData.set(key, options[key]);\r\n }\r\n }\r\n\r\n fileData.append('file', file);\r\n\r\n this.trigger('start', fileData);\r\n\r\n try {\r\n let res = await httpClient.post(\r\n this.options.endpoint || '',\r\n fileData,\r\n {\r\n onUploadProgress: (e) => {\r\n if (options.onUploadProgress) {\r\n options.onUploadProgress(e);\r\n }\r\n\r\n this.trigger('upload-progress', e);\r\n\r\n if (e.total != null) {\r\n this.trigger('progress', e.loaded / e.total, e);\r\n }\r\n }\r\n }\r\n ) as S3UploaderResponse;\r\n\r\n const url = this.options.viewerHost + '/'\r\n + trimSlashes(path);\r\n\r\n this.trigger('success', url, res);\r\n\r\n res.url = url;\r\n\r\n return res;\r\n } finally {\r\n this.trigger('end');\r\n }\r\n }\r\n\r\n replaceExt(path: string, file: File | Blob): string {\r\n if (file instanceof File) {\r\n const fileExt = file.name.split('.').pop();\r\n\r\n if (path.endsWith('.{ext}')) {\r\n return path.replace(/\\.{ext}$/, fileExt ? '.' + fileExt : '');\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n\r\n on(event: 'start', handler: StartEventHandler): this;\r\n on(event: 'success', handler: SuccessEventHandler): this;\r\n on(event: 'end', handler: EndEventHandler): this;\r\n on(event: 'upload-progress', handler: UploadProgressEventHandler): this;\r\n on(event: 'progress', handler: ProgressEventHandler): this;\r\n on(event: string | string[], handler: EventHandler): this {\r\n return super.on(event, handler);\r\n }\r\n\r\n onStart(handler: StartEventHandler): this {\r\n return this.on('start', handler);\r\n }\r\n\r\n onSuccess(handler: SuccessEventHandler): this {\r\n return this.on('success', handler);\r\n }\r\n\r\n onEnd(handler: EndEventHandler): this {\r\n return this.on('end', handler);\r\n }\r\n\r\n onProgress(handler: UploadProgressEventHandler): this {\r\n return this.on('upload-progress', handler);\r\n }\r\n\r\n onProgressWithTotal(handler: ProgressEventHandler): this {\r\n return this.on('progress', handler);\r\n }\r\n}\r\n\r\ntype EndEventHandler = () => void;\r\ntype SuccessEventHandler = (url: string, res: S3UploaderResponse) => void;\r\ntype StartEventHandler = (fileData: FormData) => void;\r\ntype UploadProgressEventHandler = (e: AxiosProgressEvent) => void;\r\ntype ProgressEventHandler = (total: number, e: AxiosProgressEvent) => void;\r\n\r\nfunction trimSlashes(str: string) {\r\n return str.replace(/^\\/+|\\/+$/g, '');\r\n}\r\n\r\nexport interface S3UploaderResponse extends AxiosResponse {\r\n url: string;\r\n}\r\n\r\nexport interface S3UploaderGlobalOptions {\r\n endpoint?: string;\r\n subfolder?: string;\r\n viewerHost?: string;\r\n starts_with: any[];\r\n formInputs?: {\r\n acl: string;\r\n bucket: string;\r\n key: string;\r\n Policy: string;\r\n 'X-Amz-Algorithm': string;\r\n 'X-Amz-Credential': string;\r\n 'X-Amz-Date': string;\r\n 'X-Amz-Signature': string;\r\n [name: string]: any\r\n },\r\n}\r\n\r\nexport interface S3UploaderRequestOptions {\r\n formInputs?: { [name: string]: any };\r\n onUploadProgress?: (e: AxiosProgressEvent) => void;\r\n 'Content-Type'?: string;\r\n 'Content-Disposition'?: string;\r\n key?: string;\r\n\r\n [name: string]: any;\r\n}\r\n\r\nexport interface S3UploaderModule {\r\n get(name: string, options?: Partial<S3UploaderGlobalOptions>): S3Uploader;\r\n create(name: string, options?: Partial<S3UploaderGlobalOptions>): S3Uploader;\r\n destroy(name: string): void;\r\n S3Uploader: typeof S3Uploader;\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"s3-uploader.js","sources":["../../src/module/s3-uploader.ts"],"sourcesContent":["import { useHttpClient } from '../composable';\nimport { data } from '../data';\nimport { EventAwareInterface, EventHandler, EventMixin } from '../events';\nimport type { UnicornHttpClient } from './http-client';\nimport { mergeDeep } from '../utilities';\nimport { AxiosProgressEvent, AxiosResponse } from 'axios';\nimport { Mixin } from 'ts-mixer';\n\nconst instances: Record<string, S3Uploader> = {};\nexport function get(name: string, options?: Partial<S3UploaderGlobalOptions>): S3Uploader;\nexport function get(\n name: string,\n options: Partial<S3UploaderGlobalOptions> = {}\n): S3Uploader | void {\n return instances[name] ??= create(name, options);\n}\n\nexport function create(name: string, options: Partial<S3UploaderGlobalOptions> = {}): S3Uploader {\n return new S3Uploader(name, options);\n}\n\nexport function destroy(name: string) {\n delete instances[name];\n}\n\nconst defaultOptions: S3UploaderGlobalOptions = {\n endpoint: '',\n subfolder: '',\n viewerHost: '',\n starts_with: [],\n formInputs: {\n acl: '',\n bucket: '',\n key: '',\n Policy: '',\n 'X-Amz-Algorithm': '',\n 'X-Amz-Credential': '',\n 'X-Amz-Date': '',\n 'X-Amz-Signature': '',\n }\n};\n\nexport class S3Uploader extends Mixin(EventMixin) implements EventAwareInterface {\n options: S3UploaderGlobalOptions;\n http?: UnicornHttpClient;\n\n constructor(protected name: string, options: Partial<S3UploaderGlobalOptions> = {}) {\n super();\n\n const awsOptions = data('@s3.uploader.' + name) || {};\n\n this.options = mergeDeep<S3UploaderGlobalOptions>({}, defaultOptions, awsOptions, options);\n }\n\n async getHttpClient() {\n return this.http ??= await useHttpClient();\n }\n\n /**\n * Do upload.\n */\n async upload(\n file: string | File | Blob,\n path: string,\n options: Partial<S3UploaderRequestOptions> = {}\n ): Promise<S3UploaderResponse> {\n const httpClient = await this.getHttpClient();\n\n const fileData = new FormData();\n const inputs = mergeDeep({}, this.options.formInputs, options.formInputs || {});\n\n if (typeof file === 'string') {\n file = new Blob([file], { type: options['Content-Type'] || 'text/plain' });\n }\n\n if (file instanceof Blob && path.endsWith('.{ext}')) {\n throw new Error('If using Blob or file data string, you must provide a valid file extension in the path.');\n }\n\n if ((file instanceof Blob) || (file as any) instanceof File) {\n options['Content-Type'] = options['Content-Type'] || file.type;\n }\n\n if (options['filename']) {\n const filename = this.replaceExt(options['filename'], file);\n options['Content-Disposition'] = 'attachment; filename*=UTF-8\\'\\'' + encodeURIComponent(filename);\n }\n\n path = this.replaceExt(path, file);\n\n options['key'] = trimSlashes(this.options.subfolder || '') + '/'\n + trimSlashes(path);\n options['key'] = trimSlashes(options['key']);\n options['Content-Type'] = options['Content-Type'] || undefined;\n options['Content-Disposition'] = options['Content-Disposition'] || undefined;\n\n // Prepare pre-signed data\n for (let key in inputs) {\n fileData.set(key, inputs[key]);\n }\n\n // Prepare custom data\n for (let key of Object.keys(this.options.starts_with)) {\n if (options[key]) {\n fileData.set(key, options[key]);\n }\n }\n\n fileData.append('file', file);\n\n this.trigger('start', fileData);\n\n try {\n let res = await httpClient.post(\n this.options.endpoint || '',\n fileData,\n {\n onUploadProgress: (e) => {\n if (options.onUploadProgress) {\n options.onUploadProgress(e);\n }\n\n this.trigger('upload-progress', e);\n\n if (e.total != null) {\n this.trigger('progress', e.loaded / e.total, e);\n }\n }\n }\n ) as S3UploaderResponse;\n\n const url = this.options.viewerHost + '/'\n + trimSlashes(path);\n\n this.trigger('success', url, res);\n\n res.url = url;\n\n return res;\n } finally {\n this.trigger('end');\n }\n }\n\n replaceExt(path: string, file: File | Blob): string {\n if (file instanceof File) {\n const fileExt = file.name.split('.').pop();\n\n if (path.endsWith('.{ext}')) {\n return path.replace(/\\.{ext}$/, fileExt ? '.' + fileExt : '');\n }\n }\n\n return path;\n }\n\n on(event: 'start', handler: StartEventHandler): this;\n on(event: 'success', handler: SuccessEventHandler): this;\n on(event: 'end', handler: EndEventHandler): this;\n on(event: 'upload-progress', handler: UploadProgressEventHandler): this;\n on(event: 'progress', handler: ProgressEventHandler): this;\n on(event: string | string[], handler: EventHandler): this {\n return super.on(event, handler);\n }\n\n onStart(handler: StartEventHandler): this {\n return this.on('start', handler);\n }\n\n onSuccess(handler: SuccessEventHandler): this {\n return this.on('success', handler);\n }\n\n onEnd(handler: EndEventHandler): this {\n return this.on('end', handler);\n }\n\n onProgress(handler: UploadProgressEventHandler): this {\n return this.on('upload-progress', handler);\n }\n\n onProgressWithTotal(handler: ProgressEventHandler): this {\n return this.on('progress', handler);\n }\n}\n\ntype EndEventHandler = () => void;\ntype SuccessEventHandler = (url: string, res: S3UploaderResponse) => void;\ntype StartEventHandler = (fileData: FormData) => void;\ntype UploadProgressEventHandler = (e: AxiosProgressEvent) => void;\ntype ProgressEventHandler = (total: number, e: AxiosProgressEvent) => void;\n\nfunction trimSlashes(str: string) {\n return str.replace(/^\\/+|\\/+$/g, '');\n}\n\nexport interface S3UploaderResponse extends AxiosResponse {\n url: string;\n}\n\nexport interface S3UploaderGlobalOptions {\n endpoint?: string;\n subfolder?: string;\n viewerHost?: string;\n starts_with: any[];\n formInputs?: {\n acl: string;\n bucket: string;\n key: string;\n Policy: string;\n 'X-Amz-Algorithm': string;\n 'X-Amz-Credential': string;\n 'X-Amz-Date': string;\n 'X-Amz-Signature': string;\n [name: string]: any\n },\n}\n\nexport interface S3UploaderRequestOptions {\n formInputs?: { [name: string]: any };\n onUploadProgress?: (e: AxiosProgressEvent) => void;\n 'Content-Type'?: string;\n 'Content-Disposition'?: string;\n key?: string;\n\n [name: string]: any;\n}\n\nexport interface S3UploaderModule {\n get(name: string, options?: Partial<S3UploaderGlobalOptions>): S3Uploader;\n create(name: string, options?: Partial<S3UploaderGlobalOptions>): S3Uploader;\n destroy(name: string): void;\n S3Uploader: typeof S3Uploader;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/chunks/show-on.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as useUniDirective, z as module, v as selectOne, w as selectAll, T as fadeIn, S as fadeOut } from "./unicorn.js";
|
|
1
|
+
import { a as useUniDirective, z as module$1, v as selectOne, w as selectAll, T as fadeIn, S as fadeOut } from "./unicorn.js";
|
|
2
2
|
import { b as arrayPush, a as MapCache } from "./_arrayPush.js";
|
|
3
3
|
import { S as Symbol$1, a as isArray, k as isArguments, i as isObjectLike, d as isArrayLike } from "./isArguments.js";
|
|
4
4
|
import { b as baseRest } from "./_baseRest.js";
|
|
@@ -226,7 +226,7 @@ class ShowOn {
|
|
|
226
226
|
}
|
|
227
227
|
const ready = /* @__PURE__ */ useUniDirective("show-on", {
|
|
228
228
|
mounted(el, { value }) {
|
|
229
|
-
module(el, "show.on", (el2) => {
|
|
229
|
+
module$1(el, "show.on", (el2) => {
|
|
230
230
|
return new ShowOn(el2, JSON.parse(value));
|
|
231
231
|
});
|
|
232
232
|
}
|