@windwalker-io/unicorn-next 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/chunks/_arrayPush.js +325 -108
  2. package/dist/chunks/_arrayPush.js.map +1 -1
  3. package/dist/chunks/_baseRest.js +155 -60
  4. package/dist/chunks/_baseRest.js.map +1 -1
  5. package/dist/chunks/_baseUnary.js +463 -0
  6. package/dist/chunks/_baseUnary.js.map +1 -0
  7. package/dist/chunks/_getPrototype.js +292 -100
  8. package/dist/chunks/_getPrototype.js.map +1 -1
  9. package/dist/chunks/alert-adapter.js +29 -0
  10. package/dist/chunks/alert-adapter.js.map +1 -0
  11. package/dist/chunks/alert.js +21 -0
  12. package/dist/chunks/alert.js.map +1 -0
  13. package/dist/chunks/arr.js +24 -0
  14. package/dist/chunks/arr.js.map +1 -0
  15. package/dist/chunks/button-radio.js +127 -145
  16. package/dist/chunks/button-radio.js.map +1 -1
  17. package/dist/chunks/checkboxes-multi-select.js +44 -43
  18. package/dist/chunks/checkboxes-multi-select.js.map +1 -1
  19. package/dist/chunks/chunk.js +24 -0
  20. package/dist/chunks/cloneDeep.js +679 -212
  21. package/dist/chunks/cloneDeep.js.map +1 -1
  22. package/dist/chunks/cropper.min.js +6 -5
  23. package/dist/chunks/cropper.min.js.map +1 -1
  24. package/dist/chunks/crypto.js +26 -0
  25. package/dist/chunks/crypto.js.map +1 -0
  26. package/dist/chunks/data.js +49 -0
  27. package/dist/chunks/data.js.map +1 -0
  28. package/dist/chunks/dom.js +128 -0
  29. package/dist/chunks/dom.js.map +1 -0
  30. package/dist/chunks/events.js +270 -0
  31. package/dist/chunks/events.js.map +1 -0
  32. package/dist/chunks/field-cascade-select.js +207 -250
  33. package/dist/chunks/field-cascade-select.js.map +1 -1
  34. package/dist/chunks/field-file-drag.js +175 -209
  35. package/dist/chunks/field-file-drag.js.map +1 -1
  36. package/dist/chunks/field-flatpickr.js +94 -898
  37. package/dist/chunks/field-flatpickr.js.map +1 -1
  38. package/dist/chunks/field-modal-select.js +728 -467
  39. package/dist/chunks/field-modal-select.js.map +1 -1
  40. package/dist/chunks/field-modal-tree.js +771 -766
  41. package/dist/chunks/field-modal-tree.js.map +1 -1
  42. package/dist/chunks/field-multi-uploader.js +249 -256
  43. package/dist/chunks/field-multi-uploader.js.map +1 -1
  44. package/dist/chunks/field-repeatable.js +111 -127
  45. package/dist/chunks/field-repeatable.js.map +1 -1
  46. package/dist/chunks/field-single-image-drag.js +286 -338
  47. package/dist/chunks/field-single-image-drag.js.map +1 -1
  48. package/dist/chunks/form.js +146 -159
  49. package/dist/chunks/form.js.map +1 -1
  50. package/dist/chunks/grid.js +349 -418
  51. package/dist/chunks/grid.js.map +1 -1
  52. package/dist/chunks/helper.js +39 -0
  53. package/dist/chunks/helper.js.map +1 -0
  54. package/dist/chunks/http-client.js +221 -211
  55. package/dist/chunks/http-client.js.map +1 -1
  56. package/dist/chunks/iframe-modal.js +95 -115
  57. package/dist/chunks/iframe-modal.js.map +1 -1
  58. package/dist/chunks/keep-tab.js +92 -101
  59. package/dist/chunks/keep-tab.js.map +1 -1
  60. package/dist/chunks/lang.js +250 -0
  61. package/dist/chunks/lang.js.map +1 -0
  62. package/dist/chunks/legacy.js +197 -201
  63. package/dist/chunks/legacy.js.map +1 -1
  64. package/dist/chunks/list-dependent.js +195 -228
  65. package/dist/chunks/list-dependent.js.map +1 -1
  66. package/dist/chunks/loader.js +106 -0
  67. package/dist/chunks/loader.js.map +1 -0
  68. package/dist/chunks/monthSelect.js +251 -0
  69. package/dist/chunks/monthSelect.js.map +1 -0
  70. package/dist/chunks/router.js +111 -0
  71. package/dist/chunks/router.js.map +1 -0
  72. package/dist/chunks/s3-multipart-uploader.js +183 -210
  73. package/dist/chunks/s3-multipart-uploader.js.map +1 -1
  74. package/dist/chunks/s3-uploader.js +106 -128
  75. package/dist/chunks/s3-uploader.js.map +1 -1
  76. package/dist/chunks/show-on.js +358 -205
  77. package/dist/chunks/show-on.js.map +1 -1
  78. package/dist/chunks/timing.js +10 -0
  79. package/dist/chunks/timing.js.map +1 -0
  80. package/dist/chunks/tinymce.js +153 -203
  81. package/dist/chunks/tinymce.js.map +1 -1
  82. package/dist/chunks/ui-bootstrap5.js +58 -72
  83. package/dist/chunks/ui-bootstrap5.js.map +1 -1
  84. package/dist/chunks/ui.js +320 -0
  85. package/dist/chunks/ui.js.map +1 -0
  86. package/dist/chunks/unicorn.js.map +1 -1
  87. package/dist/chunks/useQueue.js +111 -0
  88. package/dist/chunks/useQueue.js.map +1 -0
  89. package/dist/chunks/useStack.js +76 -0
  90. package/dist/chunks/useStack.js.map +1 -0
  91. package/dist/chunks/validation.js +761 -853
  92. package/dist/chunks/validation.js.map +1 -1
  93. package/dist/editor.css +1 -1
  94. package/dist/index.d.ts +10 -8
  95. package/dist/multi-level-menu.css +1 -1
  96. package/dist/switcher.css +1 -1
  97. package/dist/unicorn.js +805 -130
  98. package/dist/unicorn.js.map +1 -1
  99. package/package.json +3 -3
  100. package/src/composable/useBsModalAlert.ts +29 -0
  101. package/src/composable/useHttp.ts +13 -1
  102. package/src/module/s3-uploader.ts +1 -1
  103. package/vite.config.ts +5 -1
  104. package/dist/chunks/_commonjsHelpers.js +0 -7
  105. package/dist/chunks/index.js +0 -314
  106. package/dist/chunks/isArguments.js +0 -146
  107. package/dist/chunks/unicorn.js +0 -2621
@@ -1 +1 @@
1
- {"version":3,"file":"unicorn.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"unicorn.js","names":[],"sources":["../src/service/crypto.ts","../src/service/dom-watcher.ts","../src/composable/useUIBootstrap5.ts","../src/composable/useBsModalAlert.ts","../src/composable/useCheckboxesMultiSelect.ts","../src/composable/useFieldCascadeSelect.ts","../src/composable/useFieldFileDrag.ts","../src/composable/useFieldFlatpickr.ts","../src/composable/useFieldModalSelect.ts","../src/composable/useFieldModalTree.ts","../src/composable/useFieldRepeatable.ts","../src/composable/useFieldSingleImageDrag.ts","../src/composable/useForm.ts","../src/composable/useGrid.ts","../src/composable/useHttp.ts","../src/composable/useIframeModal.ts","../src/composable/useListDependent.ts","../src/composable/useS3Uploader.ts","../src/composable/useShowOn.ts","../src/composable/useTomSelect.ts","../src/composable/useTinymce.ts","../src/composable/useUniDirective.ts","../src/composable/useValidation.ts","../src/service/uri.ts","../src/utilities/base.ts","../src/app.ts","../src/polyfill/form-request-submit.ts","../src/polyfill/index.ts","../src/composable/useFieldMultiUploader.ts","../src/plugin/php-adapter.ts","../src/unicorn.ts"],"sourcesContent":["import { uid, tid, randomBytes, randomBytesString } from '@lyrasoft/ts-toolkit/generic';\n\nexport function base64UrlEncode(string: string): string {\n return btoa(String(string))\n .replace(/\\+/, '-')\n .replace(new RegExp('\\\\/'), '_')\n .replace(/=+$/, '');\n}\n\n/**\n * Base64 URL decode\n */\nexport function base64UrlDecode(string: string): string {\n return atob(\n String(string)\n .replace(/-/, '+')\n .replace(/_/, '/')\n );\n}\n\nexport { uid, tid, randomBytes, randomBytesString };\n\nlet globalSerial = 1;\n\nexport function serial(): number {\n return globalSerial++;\n}\n","export function watchAttributes<T extends HTMLElement>(el: T, callback?: AttributeMutationCallback<T>) {\n return new AttributeMutationObserver<T>(el, callback);\n}\n\nexport type AttributeMutationCallback<T extends HTMLElement = HTMLElement> = (el: T, name: string, value: any, oldValue: any) => void;\nexport type AttributeWatcher<T extends HTMLElement = HTMLElement> = (el: T, value: any, oldValue: any) => void;\n\nexport class AttributeMutationObserver<T extends HTMLElement> {\n observer: MutationObserver;\n watches: Record<string, (AttributeWatcher<T>)[]> = {};\n\n constructor(protected element: T, public callback?: (el: T, name: string, value: any, oldValue: any) => void) {\n this.element = element;\n\n this.observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'attributes') {\n const attrName = mutation.attributeName!;\n const target = mutation.target as T;\n const value = target.getAttribute(attrName);\n\n this.callback?.(\n target,\n attrName,\n value,\n mutation.oldValue\n );\n\n if (this.watches[attrName]) {\n for (const watch of this.watches[attrName]) {\n watch(target, value, mutation.oldValue);\n }\n }\n }\n }\n });\n\n this.observe();\n }\n\n watch(name: string, callback: AttributeWatcher<T>): () => void {\n this.watches[name] ??= [];\n this.watches[name].push(callback);\n\n return () => {\n this.watches[name] = this.watches[name].filter(fn => fn !== callback);\n };\n }\n\n observe() {\n this.observer.observe(this.element, {\n attributes: true,\n attributeOldValue: true,\n });\n }\n\n disconnect() {\n this.observer.disconnect();\n }\n}\n\n\n","import type { Tooltip } from 'bootstrap';\nimport { ButtonRadioOptions } from '../bootstrap/button-radio';\nimport type { KeepTabOptions } from '../bootstrap/keep-tab';\nimport type { UIBootstrap5 } from '../module/ui-bootstrap5';\nimport { useUITheme } from '../service';\n\nexport async function useUIBootstrap5(install = false, pushToGlobal = false): Promise<UIBootstrap5> {\n const { UIBootstrap5 } = await import('../module/ui-bootstrap5');\n\n const theme = UIBootstrap5.get();\n\n if (install) {\n useUITheme(theme);\n\n if (pushToGlobal) {\n theme.pushBootstrapToGlobal();\n }\n }\n\n return theme;\n}\n\nexport async function useBs5Tooltip(\n selector: NodeListOf<Element> | Element | string = '[data-bs-toggle=\"tooltip\"]',\n config: Partial<Tooltip.Options> = {}\n): Promise<Tooltip[]> {\n const bs5 = await useUIBootstrap5();\n\n return bs5.tooltip(selector, config);\n}\n\nexport const useBs5KeepTab: typeof UIBootstrap5.prototype.keepTab = async (\n selector?: string | HTMLElement,\n options: KeepTabOptions = {}\n): Promise<any> => {\n const bs5 = await useUIBootstrap5();\n\n return bs5.keepTab(selector, options);\n};\n\nexport const useBs5ButtonRadio: typeof UIBootstrap5.prototype.buttonRadio = async (\n selector?: string | HTMLElement,\n options: ButtonRadioOptions = {}\n): Promise<any> => {\n const bs5 = await useUIBootstrap5();\n\n return bs5.buttonRadio(selector, options);\n};\n\n\n","import { Modal } from 'bootstrap';\nimport { html } from '../service';\nimport { useUIBootstrap5 } from './useUIBootstrap5';\nimport { promiseWithResolvers } from '@lyrasoft/ts-toolkit/generic';\n\nexport interface BsModalAlertOptions {\n header?: string | HTMLElement | (() => HTMLElement | Promise<HTMLElement>);\n title?: string;\n text?: string;\n icon?: string | HTMLElement | (() => HTMLElement | Promise<HTMLElement>);\n content?: string | HTMLElement | (() => HTMLElement | Promise<HTMLElement>);\n size?: 'sm' | 'lg' | 'xl' | 'xxl';\n relatedTarget?: HTMLElement;\n buttons?: BsModalButton[];\n configure?: (el: HTMLElement) => HTMLElement | undefined;\n}\n\nexport type BsModalButton = {\n text?: string | ((button: HTMLElement) => void);\n class?: string;\n attrs?: Record<string, string>;\n styles?: Record<string, string>;\n dismiss?: boolean;\n value?: any;\n href?: string;\n target?: string;\n onClick?: (value?: any, e?: MouseEvent) => any;\n} | string | HTMLElement | (() => HTMLElement | Promise<HTMLElement>);\n\nlet currentOpenedModals: Record<string, BsModalAlertInstance> = {};\n\nexport interface BsModalAlertInstance {\n show(options: BsModalAlertOptions): Promise<any>;\n\n show(title: string, text?: string, icon?: string, options?: BsModalAlertOptions): Promise<any>;\n\n show(title: BsModalAlertOptions | string, text?: string, icon?: string, options?: BsModalAlertOptions): Promise<any>;\n\n hide: () => void;\n toggle: (relatedTarget?: HTMLElement) => void;\n dispose: () => void;\n destroy: () => void;\n instance: Modal;\n el: HTMLElement;\n on: (event: string, handler: (e: Event) => void) => () => void;\n off: (event: string, handler: (e: Event) => void) => void;\n}\n\nconst defaultOptions = {\n buttons: [\n 'OK'\n ],\n};\n\nexport async function useBsModalAlert(\n options: Partial<Modal.Options>\n): Promise<BsModalAlertInstance>\nexport async function useBsModalAlert(\n id?: string | HTMLElement,\n options?: Partial<Modal.Options>\n): Promise<BsModalAlertInstance>;\nexport async function useBsModalAlert(\n id?: string | HTMLElement | Partial<Modal.Options>,\n options?: Partial<Modal.Options>\n): Promise<BsModalAlertInstance> {\n await useUIBootstrap5();\n\n let modalElement: HTMLElement | null | undefined = undefined;\n\n if (typeof id !== 'string' && !(id instanceof HTMLElement)) {\n options = id;\n id = 'uni-modal-alert';\n modalElement = document.getElementById(id);\n } else {\n modalElement = typeof id === 'string' ? document.getElementById(id) : id;\n }\n\n if (!modalElement) {\n modalElement = html<HTMLDivElement>(`<div id=\"${id}\" class=\"uni-modal-alert modal fade\" tabindex=\"-1\" role=\"dialog\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-body text-center p-4\"></div>\n <div class=\"modal-footer\"></div>\n </div>\n </div>\n</div>`);\n\n document.body.appendChild(modalElement);\n }\n\n const bsModal = Modal.getOrCreateInstance(modalElement, options);\n\n modalElement.addEventListener('show.bs.modal', () => {\n currentOpenedModals[modalElement.id] = instance;\n });\n\n modalElement.addEventListener('hidden.bs.modal', () => {\n delete currentOpenedModals[modalElement.id];\n });\n\n const instance = {\n show: async (\n title: BsModalAlertOptions | string,\n text?: string,\n icon?: string,\n options?: BsModalAlertOptions\n ): Promise<any> => {\n if (typeof title === 'string') {\n options = options || {};\n options.title = title;\n options.text = text;\n options.icon = icon;\n } else {\n options = title;\n }\n\n await closeCurrentOpened(modalElement);\n\n return new Promise((resolve) => {\n prepareModalElement(modalElement, resolve, options);\n\n bsModal.show(options?.relatedTarget);\n });\n },\n hide: () => {\n bsModal.hide();\n },\n dispose: () => {\n bsModal.dispose();\n },\n toggle: (relatedTarget?: HTMLElement) => {\n bsModal.toggle(relatedTarget);\n },\n destroy: () => {\n bsModal.dispose();\n modalElement.remove();\n },\n instance: bsModal,\n el: modalElement,\n on: (event: string, handler: (e: Event) => void) => {\n modalElement.addEventListener(event, handler);\n\n return () => {\n modalElement.removeEventListener(event, handler);\n };\n },\n off: (event: string, handler: (e: Event) => void) => {\n modalElement.removeEventListener(event, handler);\n }\n };\n\n return instance;\n}\n\nasync function closeCurrentOpened(modalElement: HTMLElement) {\n return new Promise<void>((resolve) => {\n let currentOpenedModal = currentOpenedModals[modalElement.id];\n\n if (!currentOpenedModal) {\n resolve();\n return;\n }\n\n currentOpenedModal.el.addEventListener('hidden.bs.modal', () => {\n resolve();\n }, { once: true });\n\n currentOpenedModal.hide();\n });\n}\n\nasync function prepareModalElement(\n modalElement: HTMLElement,\n handler: (value?: any) => any,\n options?: BsModalAlertOptions\n) {\n options = Object.assign({}, defaultOptions, options || {});\n\n let header = options.header;\n const content = options.content;\n\n modalElement.querySelector('.modal-header')?.remove();\n modalElement.querySelector('.modal-body')!.innerHTML = '';\n modalElement.querySelector('.modal-footer')!.innerHTML = '';\n\n const dialog = modalElement.querySelector('.modal-dialog');\n\n dialog?.classList.remove('modal-sm', 'modal-lg', 'modal-xl', 'modal-xxl');\n\n if (header) {\n if (typeof header === 'string') {\n header = `<div class=\"modal-header\">\n <h5 class=\"modal-title\">${header}</h5>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>`;\n }\n\n header = await anyToElement(header);\n\n // Remove existing header if exists\n modalElement.querySelector('.modal-header')?.remove();\n\n modalElement.querySelector('.modal-content')!.insertAdjacentElement('afterbegin', header);\n }\n\n if (content) {\n let contentElement = await anyToElement(content);\n\n modalElement.querySelector('.modal-body')!.appendChild(contentElement);\n } else {\n const title = options.title;\n const text = options.text;\n let icon = options.icon;\n\n if (icon) {\n if (typeof icon === 'string') {\n icon = `<div class=\"uni-modal-alert__icon text-center mb-3\"><span class=\"${icon}\" style=\"font-size: 64px;\"></span></div>`;\n }\n\n icon = await anyToElement(icon);\n\n modalElement.querySelector('.modal-body')!.appendChild(icon);\n }\n\n if (title) {\n const titleEl = html(`<h4 class=\"uni-modal-alert__title\">${title}</h4>`);\n\n modalElement.querySelector('.modal-body')!.appendChild(titleEl);\n }\n\n if (text) {\n const textEl = html(`<div class=\"uni-modal-alert__text\">${text}</div>`);\n\n modalElement.querySelector('.modal-body')!.appendChild(textEl);\n }\n }\n\n const buttons = options.buttons!;\n const { resolve: resolveClosed, promise: valueSelected } = promiseWithResolvers();\n\n for (const i in buttons) {\n const button = buttons[i];\n const isConfirm = buttons.length === 1 || (buttons.length === 2 && Number(i) === 1);\n\n const buttonElement = createButton(\n button,\n handler,\n isConfirm\n );\n\n modalElement.querySelector('.modal-footer')!.appendChild(await buttonElement);\n }\n\n if (options.size) {\n modalElement.querySelector('.modal-dialog')!.classList.add(`modal-${options.size}`);\n }\n\n if (options.configure) {\n modalElement = options.configure(modalElement) ?? modalElement;\n }\n\n let isUserDismiss = false;\n let clickListener: (e: PointerEvent) => void;\n let keydownListener: (e: KeyboardEvent) => void;\n\n modalElement.addEventListener('click', clickListener = (e) => {\n const target = e.target as HTMLElement;\n\n if (target.matches('.modal') && target.dataset.bsBackdrop !== 'static') {\n isUserDismiss = true;\n }\n }, { capture: true });\n\n modalElement.addEventListener('keydown', keydownListener = (e) => {\n if (e.key === 'Escape') {\n isUserDismiss = true;\n }\n }, { capture: true });\n\n modalElement.addEventListener('hide.bs.modal', (e) => {\n if (isUserDismiss) {\n handler(undefined);\n }\n\n modalElement.removeEventListener('click', clickListener);\n modalElement.removeEventListener('keydown', keydownListener);\n }, { once: true });\n\n return modalElement;\n}\n\nasync function anyToElement(content: string | HTMLElement | (() => (HTMLElement | Promise<HTMLElement>))) {\n if (typeof content === 'function') {\n return content();\n }\n\n return typeof content === 'string' ? html(content) : content;\n}\n\nasync function createButton(\n buttonOption: BsModalButton,\n handler: (value?: any) => any,\n isConfirm?: boolean): Promise<HTMLElement> {\n if (typeof buttonOption === 'function') {\n return await buttonOption();\n }\n\n if (typeof buttonOption === 'string') {\n buttonOption = {\n text: buttonOption,\n value: isConfirm ?? false,\n class: isConfirm ? 'btn btn-primary is-confirm' : 'btn btn-outline-secondary',\n styles: isConfirm ? { width: '150px' } : {},\n dismiss: true,\n };\n }\n\n // if not HTMLElement\n let button: HTMLElement;\n\n if (buttonOption instanceof HTMLElement) {\n button = buttonOption;\n } else {\n const {\n text,\n class: className = 'btn btn-secondary',\n attrs = {},\n styles = {},\n dismiss = true,\n value,\n href,\n target,\n onClick\n } = buttonOption;\n\n const tag = href ? 'a' : 'button';\n\n const el = document.createElement(tag);\n\n if (el instanceof HTMLAnchorElement) {\n el.href = href!;\n el.target = target || '_self';\n }\n\n if (el instanceof HTMLButtonElement) {\n el.type = 'button';\n }\n\n el.setAttribute('class', className);\n\n for (let attr in attrs) {\n el.setAttribute(attr, attrs[attr]);\n }\n\n for (let style in styles) {\n (el.style as any)[style] = styles[style];\n }\n\n if (dismiss) {\n el.setAttribute('data-bs-dismiss', 'modal');\n }\n\n if (typeof text === 'string') {\n el.textContent = text;\n } else if (typeof text === 'function') {\n text(el);\n }\n\n el.addEventListener('click', (e) => {\n onClick?.(value, e as MouseEvent);\n handler(value);\n });\n\n button = el;\n }\n\n return button;\n}\n\n","import type { CheckboxesMultiSelect } from '../module/checkboxes-multi-select';\nimport type { Nullable } from '../types';\n\nexport async function useCheckboxesMultiSelect(): Promise<any>;\n\nexport async function useCheckboxesMultiSelect(\n selector?: Nullable<string | HTMLElement>,\n options?: Record<string, any>\n): Promise<CheckboxesMultiSelect>;\n\nexport async function useCheckboxesMultiSelect(\n selector?: Nullable<string | HTMLElement>,\n options: Record<string, any> = {}\n): Promise<any> {\n const m = await import('../module/checkboxes-multi-select');\n\n if (selector) {\n m.CheckboxesMultiSelect.handle(selector, options);\n }\n\n return m;\n}\n","import { CascadeSelectModule } from '../module/field-cascade-select';\n\nexport async function useFieldCascadeSelect(): Promise<CascadeSelectModule> {\n const module = await import('../module/field-cascade-select');\n\n await module.ready;\n\n return module;\n}\n","import { FileDragModule } from '../module/field-file-drag';\n\nexport async function useFieldFileDrag(): Promise<FileDragModule> {\n const module = await import('../module/field-file-drag');\n\n await module.ready;\n\n return module;\n}\n","export function useFieldFlatpickr(): Promise<any> {\n return import('../module/field-flatpickr');\n}\n","import type { ModalSelectModule } from '../module/field-modal-select';\n\nexport function useFieldModalSelect(): Promise<ModalSelectModule> {\n // Modal select has no exports now\n return import('../module/field-modal-select');\n}\n","export function useFieldModalTree(): Promise<any> {\n return import('../module/field-modal-tree');\n}\n","import { RepeatableModule } from '../module/field-repeatable';\n\nexport async function useFieldRepeatable(): Promise<RepeatableModule> {\n const module = await import('../module/field-repeatable');\n\n await module.ready;\n\n return module;\n}\n","import { SingleImageDragModule } from '../module/field-single-image-drag';\n\nexport async function useFieldSingleImageDrag(): Promise<SingleImageDragModule> {\n const module = await import('../module/field-single-image-drag');\n\n await module.ready;\n\n return module;\n}\n","import type { UnicornFormElement } from '../module/form';\nimport { module, selectOne } from '../service';\n\nlet formElement: typeof UnicornFormElement;\n\ntype FormProxy = {\n submit: (...args: Parameters<UnicornFormElement['submit']>) => Promise<ReturnType<UnicornFormElement['submit']> | undefined>;\n get: (...args: Parameters<UnicornFormElement['get']>) => Promise<ReturnType<UnicornFormElement['get']> | undefined>;\n post: (...args: Parameters<UnicornFormElement['post']>) => Promise<ReturnType<UnicornFormElement['post']> | undefined>;\n put: (...args: Parameters<UnicornFormElement['put']>) => Promise<ReturnType<UnicornFormElement['put']> | undefined>;\n patch: (...args: Parameters<UnicornFormElement['patch']>) => Promise<ReturnType<UnicornFormElement['patch']> | undefined>;\n delete: (...args: Parameters<UnicornFormElement['delete']>) => Promise<ReturnType<UnicornFormElement['delete']> | undefined>;\n};\n\nexport function useFormAsync(): FormProxy & Promise<UnicornFormElement>;\nexport function useFormAsync(\n ele?: string | Element,\n options?: Record<string, any>): FormProxy & Promise<UnicornFormElement | null>;\nexport function useFormAsync(\n ele?: string | Element,\n options: Record<string, any> = {}\n): FormProxy & Promise<UnicornFormElement | null> {\n const promise = import('../module/form').then(({ UnicornFormElement }) => {\n formElement ??= UnicornFormElement;\n\n return useForm(ele, options);\n });\n\n const proxy = new Proxy({} as FormProxy, {\n get(target, prop) {\n return (...args: any[]) => {\n if (prop === 'then' || prop === 'catch') {\n return (promise as any)[prop].apply(promise, args);\n }\n\n return promise.then((form) => {\n const p = (form as any)[prop];\n\n if (typeof p === 'function') {\n return p.apply(form, args);\n }\n\n return p;\n });\n };\n },\n });\n\n return proxy as FormProxy & Promise<UnicornFormElement | null>;\n}\n\nexport function useForm(): UnicornFormElement;\nexport function useForm(ele?: string | Element, options?: Record<string, any>): UnicornFormElement | null;\nexport function useForm(ele?: string | Element, options: Record<string, any> = {}): UnicornFormElement | null {\n if (!formElement) {\n throw new Error('Form module is not loaded. Please use useFormAsync() to load the module before using useForm().');\n }\n\n if (ele == null) {\n return new formElement(undefined, undefined, options);\n }\n\n let selector: string | undefined = undefined;\n let el: HTMLFormElement | undefined = undefined;\n\n if (typeof ele === 'string') {\n selector = ele;\n el = selectOne<HTMLFormElement>(ele) ?? undefined;\n } else {\n el = ele as HTMLFormElement;\n }\n\n if (!el) {\n return new formElement(selector, el, options);\n }\n\n return module(\n el,\n 'unicorn.form',\n () => new formElement(selector, el, options)\n );\n}\n\nexport async function useFormComponent(ele?: string | Element, options: Record<string, any> = {}) {\n const form = await useFormAsync(ele, options);\n\n await form?.initComponent();\n\n return form;\n}\n\nexport interface FormSubmitOptions {\n form?: string | Element;\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n url?: string;\n data?: Record<string, any>;\n}\n\nexport async function useFormSubmit(options: FormSubmitOptions = {}) {\n const form = (await useFormAsync(options.form)) as UnicornFormElement;\n\n // fun type should be method of form\n const func = (options.method?.toLowerCase() || 'post') as 'get' | 'post' | 'put' | 'delete' | 'patch';\n\n return form[func](options.url, options.data);\n}\n","import type { UnicornGridElement } from '../module/grid';\nimport { useForm, useFormAsync } from './useForm';\nimport { selectOne, module } from '../service';\n\nlet gridElement: typeof UnicornGridElement;\n\nexport async function useGridAsync(\n ele?: string | HTMLElement,\n options: Record<string, any> | undefined = {}\n): Promise<UnicornGridElement | null> {\n await useFormAsync();\n\n const { UnicornGridElement } = await import('../module/grid');\n\n gridElement ??= UnicornGridElement;\n\n if (!ele) {\n return null;\n }\n\n return useGrid(ele, options);\n}\n\nexport function useGrid(\n ele: string | HTMLElement,\n options: Record<string, any> | undefined = {}\n): UnicornGridElement | null {\n const selector = typeof ele === 'string' ? ele : '';\n const element = selectOne(ele);\n\n if (!element) {\n throw new Error('Element is empty');\n }\n\n const form = useForm(selector || element);\n\n if (!form) {\n throw new Error('UnicornGrid is depends on UnicornForm');\n }\n\n return module(\n element,\n 'grid.plugin',\n () => new gridElement(selector, element, form, options)\n );\n}\n\nexport async function useGridComponent(\n ele: string | HTMLElement,\n options: Record<string, any> | undefined = {}\n): Promise<UnicornGridElement | null> {\n const grid = await useGridAsync(ele, options);\n\n await grid?.initComponent();\n\n return grid;\n}\n","import type { UnicornHttpClient } from '../module/http-client';\nimport { AxiosError, AxiosInstance, CanceledError, CreateAxiosDefaults, isAxiosError, isCancel } from 'axios';\nexport type { ApiReturn, UnicornHttpClient } from '../module/http-client';\n\ntype UnicornHttpClientProxy = {\n request: UnicornHttpClient['request'];\n get: UnicornHttpClient['get'];\n post: UnicornHttpClient['post'];\n put: UnicornHttpClient['put'];\n patch: UnicornHttpClient['patch'];\n delete: UnicornHttpClient['delete'];\n head: UnicornHttpClient['head'];\n options: UnicornHttpClient['options'];\n http: Promise<UnicornHttpClient>;\n isAxiosError: typeof isAxiosError;\n isCancel: typeof isCancel;\n};\n\nexport function useHttpClient(config?: CreateAxiosDefaults | AxiosInstance): UnicornHttpClientProxy & Promise<UnicornHttpClient> {\n const promise = import('../module/http-client').then(({ createHttpClient }) => {\n return createHttpClient(config as CreateAxiosDefaults | undefined);\n });\n\n const data: UnicornHttpClientProxy = {\n request: (options) => {\n return promise.then((client) => client.request(options));\n },\n get: (url, options) => {\n return promise.then((client) => client.get(url, options));\n },\n post: (url, data, options) => {\n return promise.then((client) => client.post(url, data, options));\n },\n put: (url, data, options) => {\n return promise.then((client) => client.put(url, data, options));\n },\n patch: (url, data, options) => {\n return promise.then((client) => client.patch(url, data, options));\n },\n delete: (url, data, options) => {\n return promise.then((client) => client.delete(url, data, options));\n },\n head: (url, options) => {\n return promise.then((client) => client.head(url, options));\n },\n options: (url, options) => {\n return promise.then((client) => client.options(url, options));\n },\n isAxiosError<T = any, D = any>(payload: any): payload is AxiosError<T, D> {\n if (payload == null) {\n return false;\n }\n\n return typeof payload === 'object' && payload.isAxiosError === true;\n },\n isCancel<T = any>(value: any): value is CanceledError<T> {\n return !!(value && value.__CANCEL__);\n },\n http: promise,\n };\n\n Object.assign(data, {\n then: promise.then.bind(promise),\n catch: promise.catch.bind(promise),\n });\n\n return data as UnicornHttpClientProxy & Promise<UnicornHttpClient>;\n}\n","import { IFrameModalModule } from '../module/iframe-modal';\nexport type { IFrameModalElement } from '../module/iframe-modal';\n\nexport async function useIframeModal(): Promise<IFrameModalModule> {\n const module = await import('../module/iframe-modal');\n\n await module.ready;\n\n return module;\n}\n","import type { ListDependent, ListDependentModule, ListDependentOptions } from '../module/list-dependent';\nimport { Nullable } from '../types';\n\nexport async function useListDependent(): Promise<ListDependentModule>;\nexport async function useListDependent(\n element: string | HTMLSelectElement,\n dependent?: Nullable<string | HTMLSelectElement>,\n options?: Partial<ListDependentOptions>\n): Promise<ListDependent>;\nexport async function useListDependent(\n element?: Nullable<string | HTMLSelectElement>,\n dependent?: Nullable<string | HTMLSelectElement>,\n options: Partial<ListDependentOptions> = {}\n): Promise<any> {\n const module = await import('../module/list-dependent');\n\n await module.ready;\n\n if (element) {\n const { ListDependent } = module;\n\n return ListDependent.handle(element, dependent ?? undefined, options);\n }\n\n return module;\n}\n","import {\n S3MultipartUploader,\n S3MultipartUploaderModule,\n S3MultipartUploaderOptions\n} from '../module/s3-multipart-uploader';\nimport type { S3Uploader, S3UploaderGlobalOptions, S3UploaderModule } from '../module/s3-uploader';\n\nexport async function useS3Uploader(): Promise<S3UploaderModule>;\nexport async function useS3Uploader(name: string, options?: Partial<S3UploaderGlobalOptions>): Promise<S3Uploader>;\nexport async function useS3Uploader(name?: string, options: Partial<S3UploaderGlobalOptions> = {}): Promise<any> {\n const module = await import('../module/s3-uploader');\n\n if (!name) {\n return module;\n }\n\n const { get } = module;\n\n return get(name, options);\n}\n\nexport async function useS3MultipartUploader(): Promise<S3MultipartUploaderModule>;\nexport async function useS3MultipartUploader(options: Partial<S3MultipartUploaderOptions>): Promise<S3MultipartUploader>;\nexport async function useS3MultipartUploader(options?: Partial<S3MultipartUploaderOptions>): Promise<any> {\n const module = await import('../module/s3-multipart-uploader');\n\n if (options != null) {\n return new module.S3MultipartUploader(options);\n }\n\n return module;\n}\n","import { ShowOnModule } from '../module/show-on';\n\nexport async function useShowOn(): Promise<ShowOnModule> {\n const module = await import('../module/show-on');\n\n await module.ready;\n\n return module;\n}\n","import { module, useCssImport, useCssIncludes, useImport, wait } from '../service';\nimport type { Nullable } from '../types';\nimport { mergeDeep } from '../utilities';\n\n/**\n * @see https://tom-select.js.org/\n */\nexport async function useTomSelect(\n selector?: Nullable<string | HTMLElement | NodeListOf<HTMLElement>>,\n options: Record<string, any> = {},\n theme: string = 'bootstrap5'\n) {\n const [m] = await wait(\n useImport('@vendor/tom-select/dist/js/tom-select.complete.min.js'),\n useCssImport(`@vendor/tom-select/dist/css/tom-select.${theme}.min.css`)\n );\n\n if (selector) {\n module<any, HTMLSelectElement>(\n selector,\n 'tom.select',\n (ele) => {\n options = mergeDeep({\n allowEmptyOption: true,\n maxOptions: null,\n plugins: {\n caret_position: {},\n clear_button: {},\n }\n }, options);\n\n if ((ele as HTMLSelectElement).multiple) {\n options.plugins.remove_button = {};\n } else {\n options.plugins.dropdown_input = {};\n }\n\n // Auto select first if options changed.\n // @see https://github.com/orchidjs/tom-select/issues/362\n class UnicornTomSelect extends TomSelect {\n syncOptionsWithoutKeepSelected() {\n const oldValue = ele.value;\n\n this.clear();\n this.clearOptions();\n this.sync();\n\n if (ele.value !== oldValue) {\n this.setValue(\n ele.querySelector<HTMLOptionElement>(`option[value=\"${oldValue}\"]`)?.value\n ?? ele.querySelector<HTMLOptionElement>('option')?.value\n ?? '',\n true\n );\n }\n }\n }\n\n // @ts-ignore\n const t = new UnicornTomSelect(ele as TomInput, options);\n\n ele.addEventListener('list:updated', () => {\n t.syncOptionsWithoutKeepSelected();\n });\n\n return t;\n }\n );\n }\n\n return m;\n}\n","import type { TinymceController, TinymceModule } from '../module/tinymce';\nimport type { MaybePromise } from '../types';\nimport type { TinyMCE } from 'tinymce';\n\nexport async function useTinymce(): Promise<TinymceModule>\nexport async function useTinymce(\n selector?: string,\n options?: Record<string, any>\n): Promise<TinymceController>;\nexport async function useTinymce(\n selector?: string,\n options: Record<string, any> = {}\n): Promise<any> {\n const module = await import('../module/tinymce');\n\n if (selector) {\n return module.get(selector, options);\n }\n\n return module;\n}\n\nexport async function useTinymceHook(\n handler: ((tinymce: TinyMCE) => MaybePromise<any>)\n): Promise<void> {\n const { addHook } = await import('../module/tinymce');\n\n return addHook(handler);\n}\n","import type { default as WebDirective, WebDirectiveHandler, WebDirectiveOptions } from 'web-directive';\nimport { Dictionary } from '../types';\n\nlet instances: Dictionary<WebDirective> = {};\n\nexport async function useWebDirective(\n name: string,\n options: false\n): Promise<void>;\nexport async function useWebDirective(\n name: string,\n options?: Partial<WebDirectiveOptions>\n): Promise<WebDirective>;\nexport async function useWebDirective(\n name: string = 'unicorn',\n options: Partial<WebDirectiveOptions> | false = {}\n): Promise<WebDirective | void> {\n if (options === false) {\n delete instances[name];\n return;\n }\n\n return instances[name] ??= await createWebDirective(Object.assign({}, options, { prefix: 'uni-' }));\n}\n\nexport async function useUniDirective<T extends Element = HTMLElement, M extends Record<string, boolean> = Record<string, boolean>>(\n name: string,\n handler: WebDirectiveHandler<T, M>,\n wdInstance: WebDirective | string = 'unicorn'\n): Promise<void> {\n const wd = typeof wdInstance === 'string' ? await useWebDirective(wdInstance) : wdInstance;\n\n wd.register<T, M>(name, handler);\n}\n\nasync function createWebDirective(options: Partial<WebDirectiveOptions> = {}): Promise<WebDirective> {\n const WebDirective = (await import('web-directive')).default;\n\n const wd = new WebDirective(options);\n wd.listen();\n\n return wd;\n}\n","import type {\n UnicornFieldValidation,\n UnicornFormValidation,\n ValidationHandler,\n ValidationModule,\n ValidatorOptions,\n} from '../module/validation';\nimport { getBoundedInstance } from '../service';\n\nexport type {\n ValidationHandler,\n ValidationModule,\n Validator,\n ValidatorOptions,\n ValidatorNoticeFunction,\n FieldValidationOptions,\n FormValidationOptions\n} from '../module/validation';\n\nexport async function useFormValidation(): Promise<ValidationModule>;\nexport async function useFormValidation(selector: string | Element): Promise<UnicornFormValidation | null>;\nexport async function useFormValidation(selector?: string | Element): Promise<any> {\n const module = await import('../module/validation');\n\n await module.ready;\n\n if (!selector) {\n return module;\n }\n\n return useFormValidationInstance(selector);\n}\n\nexport function useFormValidationInstance(selector: string | Element): UnicornFormValidation | null {\n return getBoundedInstance<UnicornFormValidation>(selector, 'form.validation');\n}\n\nexport function useFieldValidationInstance(selector: string | Element): UnicornFieldValidation | null {\n return getBoundedInstance<UnicornFieldValidation>(selector, 'field.validation');\n}\n\nexport async function addGlobalValidator<T extends any, E extends HTMLElement, P = Record<string, any>>(\n name: string,\n validator: ValidationHandler<T, E, P>,\n options: ValidatorOptions<E, P> = {}\n): Promise<void> {\n const { UnicornFormValidation } = await useFormValidation();\n\n UnicornFormValidation.addGlobalValidator<T, E, P>(name, validator, options);\n}\n","import { data } from '../data';\n\ntype UriTypes = 'full' | 'path' | 'root' | 'current' | 'route' | 'script';\ntype AssetTypes = 'root' | 'path';\n\nexport function useSystemUri(): UnicornSystemUri;\nexport function useSystemUri(type: UriTypes): string;\nexport function useSystemUri(type?: UriTypes, path?: string): UnicornSystemUri | string {\n const uri = UnicornSystemUri.get();\n\n if (type) {\n return uri[type](path);\n }\n\n return uri;\n}\n\nexport function useAssetUri(): UnicornAssetUri;\nexport function useAssetUri(type?: AssetTypes, path?: string): string;\nexport function useAssetUri(type?: AssetTypes, path?: string): UnicornAssetUri | string {\n const asset = UnicornAssetUri.get();\n\n if (type) {\n return asset[type](path);\n }\n\n return asset;\n}\n\nfunction uri(type: string) {\n return data('unicorn.uri')[type];\n}\n\nfunction asset(type: string) {\n return uri('asset')[type];\n}\n\nexport function addUriBase(uri: string, type = 'path') {\n if (uri.substring(0, 2) === '/\\/' || uri.substring(0, 4) === 'http') {\n return uri;\n }\n\n return asset(type) + '/' + uri;\n}\n\nexport class UnicornSystemUri extends URL {\n static instance: UnicornSystemUri;\n\n static get() {\n return this.instance ??= new this(uri('full'));\n }\n\n path(path: string = ''): string {\n return uri('path') + path;\n }\n\n root(path: string = ''): string {\n return uri('root') + path;\n }\n\n current(): string {\n return uri('current') || '';\n }\n\n full(): string {\n return uri('full') || '';\n }\n\n route(): string {\n return uri('route') || '';\n }\n\n script(): string {\n return uri('script') || '';\n }\n\n routeWithQuery() {\n const route = this.route();\n const query = this.searchParams.toString();\n\n return query ? `${route}?${query}` : route;\n }\n\n routeAndQuery() {\n const route = this.route();\n const query = this.searchParams.toString();\n\n return [route, query];\n }\n}\n\nexport class UnicornAssetUri {\n static instance: UnicornAssetUri;\n\n static get() {\n return this.instance ??= new this();\n }\n\n path(path: string = ''): string {\n return asset('path') + path;\n }\n\n root(path: string = ''): string {\n return asset('root') + path;\n }\n}\n","import { selectAll } from '../service';\n\nexport function removeCloak() {\n if (globalThis.document == null) {\n return;\n }\n\n selectAll('[uni-cloak]', (el) => el.removeAttribute('uni-cloak'));\n}\n","\nimport { Mixin } from 'ts-mixer';\nimport { data } from './data';\nimport { EventAwareInterface, EventMixin } from './events';\nimport { domready } from './service';\nimport { Constructor, UnicornPlugin } from './types';\n\nexport type InjectionKey<T = any> = string | symbol | Constructor<T>;\n\nexport interface UnicornApp extends EventAwareInterface {}\n\nexport class UnicornApp extends Mixin(EventMixin) implements EventAwareInterface {\n registry = new Map();\n plugins = new Map();\n // _listeners = {};\n waits: Promise<any>[] = [];\n options: Record<string, any>;\n defaultOptions: Record<string, any> = {};\n domready = domready;\n data = data;\n\n constructor(options = {}) {\n super();\n this.options = Object.assign({}, this.defaultOptions, options);\n\n // Wait dom ready\n if (typeof document !== 'undefined') {\n this.wait((resolve: Function) => {\n document.addEventListener('DOMContentLoaded', () => resolve());\n });\n\n // Ready\n document.addEventListener('DOMContentLoaded', () => {\n this.completed().then(() => this.trigger('loaded'));\n });\n }\n }\n\n use(plugin: UnicornPlugin, options: Record<string, any> = {}) {\n if (Array.isArray(plugin)) {\n plugin.forEach(p => this.use(p));\n return this;\n }\n\n // if (plugin.is === undefined) {\n // throw new Error(`Plugin: ${plugin.name} must instance of : ${Plugin.name}`);\n // }\n\n plugin?.install?.(this, options);\n\n this.trigger('plugin.installed', plugin);\n\n this.plugins.set(plugin, plugin);\n\n return this;\n }\n\n detach(plugin: any) {\n if (plugin.uninstall) {\n plugin.uninstall(this);\n }\n\n this.trigger('plugin.uninstalled', plugin);\n\n return this;\n }\n\n inject<T>(id: InjectionKey<T>): T;\n inject<T>(id: InjectionKey<T>, def: T): T;\n inject<T>(id: InjectionKey<T>, def?: T): T;\n inject<T>(id: InjectionKey<T>, def?: T): T | undefined {\n if (!this.registry.has(id)) {\n if (def !== undefined) {\n return def;\n }\n\n throw new Error(`Injectable: \"${(id as any).name ?? id}\" not found.`);\n }\n\n return this.registry.get(id);\n }\n\n provide<T>(id: InjectionKey<T>, value: any) {\n this.registry.set(id, value);\n\n return this;\n }\n\n // trigger(event, ...args) {\n // return this.tap(super.trigger(event, ...args), () => {\n // if (this.data('windwalker.debug')) {\n // console.debug(`[Unicorn Event] ${event}`, args, this.listeners(event));\n // }\n // });\n // }\n\n wait(callback: Function): Promise<any> {\n const p = new Promise((resolve, reject) => {\n const promise = callback(resolve, reject);\n\n if (promise && 'then' in promise) {\n promise.then(resolve).catch(reject);\n }\n });\n\n this.waits.push(p);\n\n return p;\n }\n\n completed(): Promise<any[]> {\n const promise = Promise.all(this.waits);\n\n this.waits = [];\n\n return promise;\n }\n\n macro(name: string, prop: any) {\n if ((this as any)[name]) {\n throw new Error(`Macro: ${name} already exists.`);\n }\n\n (this as any)[name] = prop;\n\n return this;\n }\n}\n","// @ts-nocheck\n// @see https://github.com/javan/form-request-submit-polyfill\nexport function formRequestSubmit(prototype) {\n if (typeof prototype.requestSubmit == 'function') {\n return;\n }\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement('input');\n submitter.type = 'submit';\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, 'parameter 1 is not of type \\'HTMLElement\\'');\n submitter.type == 'submit' || raise(TypeError, 'The specified element is not a submit button');\n submitter.form == form || raise(DOMException, 'The specified element is not owned by this form element', 'NotFoundError');\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor('Failed to execute \\'requestSubmit\\' on \\'HTMLFormElement\\': ' + message + '.', name);\n }\n}\n","\nimport { formRequestSubmit } from './form-request-submit';\n\nexport function polyfill() {\n // If in browser\n if (typeof window !== 'undefined') {\n formRequestSubmit(HTMLFormElement.prototype);\n }\n}\n","import { MultiUploaderModule } from '../module/field-multi-uploader';\n\nexport async function useFieldMultiUploader(): Promise<MultiUploaderModule> {\n const module = await import('../module/field-multi-uploader');\n\n await module.ready;\n\n return module;\n}\n","import type { UnicornApp } from '../app';\nimport {\n useBs5ButtonRadio, useBs5KeepTab,\n useBs5Tooltip,\n useFieldCascadeSelect,\n useFieldFileDrag,\n useFieldFlatpickr,\n useFieldModalSelect, useFieldModalTree,\n useFieldRepeatable,\n useFieldSingleImageDrag,\n useIframeModal, useListDependent, useS3Uploader,\n useShowOn, useTomSelect,\n} from '../composable';\nimport { useFieldMultiUploader } from '../composable/useFieldMultiUploader';\nimport { useTinymce } from '../composable/useTinymce';\nimport { useUnicorn } from '../unicorn';\n\ndeclare module '../app' {\n export interface UnicornApp {\n /** @deprecated Only for code generator use. */\n $ui: typeof methods;\n }\n}\n\n// @ts-ignore\ndeclare module '@windwalker-io/unicorn-next' {\n export interface UnicornApp {\n /** @deprecated Only for code generator use. */\n $ui: typeof methods;\n }\n}\n\nexport function useUnicornPhpAdapter(app?: UnicornApp) {\n app ??= useUnicorn();\n\n app.use(UnicornPhpAdapter);\n\n return app.$ui;\n}\n\nconst methods = {\n repeatable: useFieldRepeatable,\n flatpickr: useFieldFlatpickr,\n fileDrag: useFieldFileDrag,\n modalField: useFieldModalSelect,\n cascadeSelect: useFieldCascadeSelect,\n sid: useFieldSingleImageDrag,\n tinymce: {\n init: useTinymce\n },\n s3Uploader: useS3Uploader,\n iframeModal: useIframeModal,\n initShowOn: useShowOn,\n modalTree: useFieldModalTree,\n multiUploader: useFieldMultiUploader,\n tomSelect: useTomSelect,\n listDependent: useListDependent,\n bootstrap: {\n tooltip: useBs5Tooltip,\n buttonRadio: useBs5ButtonRadio,\n keepTab: useBs5KeepTab,\n }\n};\n\nexport class UnicornPhpAdapter {\n static install(app: UnicornApp) {\n if (app.$ui) {\n app.$ui = { ...app.$ui, ...methods };\n } else {\n app.$ui = methods;\n }\n }\n}\n","import { InjectionKey, UnicornApp } from './app';\nimport { polyfill } from './polyfill';\nimport { Dictionary } from './types';\nimport { removeCloak } from './utilities';\n\nexport * from './data';\nexport * from './events';\nexport * from './service';\nexport * from './composable';\nexport * from './plugin';\n\nexport type { UnicornApp };\n\nlet app: UnicornApp;\n\nexport function createUnicorn(): UnicornApp {\n polyfill();\n removeCloak();\n\n return app = new UnicornApp();\n}\n\nexport function createUnicornWithPlugins(): UnicornApp {\n const app = createUnicorn();\n\n // app.use(UnicornUI);\n\n // app.use(UnicornDom);\n\n return app;\n}\n\nexport function useUnicorn(instance?: UnicornApp): UnicornApp {\n if (instance) {\n app = instance;\n }\n\n return app ??= createUnicorn();\n}\n\nexport const useInject: typeof UnicornApp.prototype.inject = <T = any>(id: InjectionKey<T>, def?: T): T => {\n return useUnicorn().inject<T>(id, def);\n}\n\nexport function pushUnicornToGlobal(app?: UnicornApp) {\n // @ts-ignore\n window.u = app ?? useUnicorn();\n}\n\nexport function useMacro<T extends Dictionary>(name: T): T;\nexport function useMacro<N extends string, T extends any>(\n name: N,\n prop: T\n): { [K in N]: T };\nexport function useMacro(name: string | Dictionary, prop?: any): any {\n const app = useUnicorn();\n\n if (typeof name === 'string') {\n app.macro(name, prop!);\n } else {\n for (const k in name) {\n app.macro(k, name[k]!);\n }\n }\n\n return app;\n}\n\nexport async function useLegacy(app?: UnicornApp) {\n app ??= useUnicorn();\n\n pushUnicornToGlobal(app);\n\n const { useLegacyMethods } = await import('./legacy/legacy');\n\n await useLegacyMethods(app);\n\n return app;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windwalker-io/unicorn-next",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "Unicorn framework js library",
5
5
  "type": "module",
6
6
  "typings": "dist/index.d.ts",
@@ -63,7 +63,6 @@
63
63
  ]
64
64
  },
65
65
  "devDependencies": {
66
- "@lyrasoft/ts-toolkit": "^0.2.4",
67
66
  "@rubenbimmel/alpine-class-component": "^0.0.4",
68
67
  "@types/alpinejs": "^3",
69
68
  "@types/bootstrap": "^5",
@@ -83,11 +82,12 @@
83
82
  "tsdoc-markdown": "^1.4.1",
84
83
  "unplugin-dts": "^1.0.0-beta.6",
85
84
  "url-template": "^3.1.1",
86
- "vite": "^7.1.7",
85
+ "vite": "^8.0",
87
86
  "vite-plugin-dts": "^4.5.4",
88
87
  "vue3-slide-up-down": "^2.1.0"
89
88
  },
90
89
  "dependencies": {
90
+ "@lyrasoft/ts-toolkit": "^0.2.4",
91
91
  "alpinejs": "^3.15.0",
92
92
  "axios": "^1.12.2",
93
93
  "bigint-toolkit": "^0.2.0",
@@ -1,6 +1,7 @@
1
1
  import { Modal } from 'bootstrap';
2
2
  import { html } from '../service';
3
3
  import { useUIBootstrap5 } from './useUIBootstrap5';
4
+ import { promiseWithResolvers } from '@lyrasoft/ts-toolkit/generic';
4
5
 
5
6
  export interface BsModalAlertOptions {
6
7
  header?: string | HTMLElement | (() => HTMLElement | Promise<HTMLElement>);
@@ -235,6 +236,7 @@ async function prepareModalElement(
235
236
  }
236
237
 
237
238
  const buttons = options.buttons!;
239
+ const { resolve: resolveClosed, promise: valueSelected } = promiseWithResolvers();
238
240
 
239
241
  for (const i in buttons) {
240
242
  const button = buttons[i];
@@ -257,6 +259,33 @@ async function prepareModalElement(
257
259
  modalElement = options.configure(modalElement) ?? modalElement;
258
260
  }
259
261
 
262
+ let isUserDismiss = false;
263
+ let clickListener: (e: PointerEvent) => void;
264
+ let keydownListener: (e: KeyboardEvent) => void;
265
+
266
+ modalElement.addEventListener('click', clickListener = (e) => {
267
+ const target = e.target as HTMLElement;
268
+
269
+ if (target.matches('.modal') && target.dataset.bsBackdrop !== 'static') {
270
+ isUserDismiss = true;
271
+ }
272
+ }, { capture: true });
273
+
274
+ modalElement.addEventListener('keydown', keydownListener = (e) => {
275
+ if (e.key === 'Escape') {
276
+ isUserDismiss = true;
277
+ }
278
+ }, { capture: true });
279
+
280
+ modalElement.addEventListener('hide.bs.modal', (e) => {
281
+ if (isUserDismiss) {
282
+ handler(undefined);
283
+ }
284
+
285
+ modalElement.removeEventListener('click', clickListener);
286
+ modalElement.removeEventListener('keydown', keydownListener);
287
+ }, { once: true });
288
+
260
289
  return modalElement;
261
290
  }
262
291
 
@@ -1,5 +1,5 @@
1
1
  import type { UnicornHttpClient } from '../module/http-client';
2
- import type { AxiosInstance, CreateAxiosDefaults } from 'axios';
2
+ import { AxiosError, AxiosInstance, CanceledError, CreateAxiosDefaults, isAxiosError, isCancel } from 'axios';
3
3
  export type { ApiReturn, UnicornHttpClient } from '../module/http-client';
4
4
 
5
5
  type UnicornHttpClientProxy = {
@@ -12,6 +12,8 @@ type UnicornHttpClientProxy = {
12
12
  head: UnicornHttpClient['head'];
13
13
  options: UnicornHttpClient['options'];
14
14
  http: Promise<UnicornHttpClient>;
15
+ isAxiosError: typeof isAxiosError;
16
+ isCancel: typeof isCancel;
15
17
  };
16
18
 
17
19
  export function useHttpClient(config?: CreateAxiosDefaults | AxiosInstance): UnicornHttpClientProxy & Promise<UnicornHttpClient> {
@@ -44,6 +46,16 @@ export function useHttpClient(config?: CreateAxiosDefaults | AxiosInstance): Uni
44
46
  options: (url, options) => {
45
47
  return promise.then((client) => client.options(url, options));
46
48
  },
49
+ isAxiosError<T = any, D = any>(payload: any): payload is AxiosError<T, D> {
50
+ if (payload == null) {
51
+ return false;
52
+ }
53
+
54
+ return typeof payload === 'object' && payload.isAxiosError === true;
55
+ },
56
+ isCancel<T = any>(value: any): value is CanceledError<T> {
57
+ return !!(value && value.__CANCEL__);
58
+ },
47
59
  http: promise,
48
60
  };
49
61
 
@@ -73,7 +73,7 @@ export class S3Uploader extends Mixin(EventMixin) implements EventAwareInterface
73
73
  file = new Blob([file], { type: options['Content-Type'] || 'text/plain' });
74
74
  }
75
75
 
76
- if (file instanceof Blob && path.endsWith('.{ext}')) {
76
+ if (file instanceof Blob && !(file instanceof File) && path.endsWith('.{ext}')) {
77
77
  throw new Error('If using Blob or file data string, you must provide a valid file extension in the path.');
78
78
  }
79
79
 
package/vite.config.ts CHANGED
@@ -66,6 +66,10 @@ export default defineConfig(({ mode }) => {
66
66
  'bootstrap',
67
67
  'sortablejs',
68
68
  '@asika32764/vue-animate',
69
+ // Seems still not excludes,
70
+ // Maybe we need to compile @lyrasoft/ts-toolkit to js
71
+ '@lyrasoft/ts-toolkit',
72
+ '@lyrasoft/ts-toolkit/*',
69
73
  'alpinejs',
70
74
  'cropperjs',
71
75
  'cropperjs/*',
@@ -81,7 +85,7 @@ export default defineConfig(({ mode }) => {
81
85
  },
82
86
  outDir: 'dist',
83
87
  emptyOutDir: false,
84
- sourcemap: 'external',
88
+ sourcemap: true,
85
89
  minify: false,
86
90
  },
87
91
  plugins: [
@@ -1,7 +0,0 @@
1
- function getDefaultExportFromCjs(x) {
2
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
3
- }
4
- export {
5
- getDefaultExportFromCjs as g
6
- };
7
- //# sourceMappingURL=_commonjsHelpers.js.map
@@ -1,314 +0,0 @@
1
- import { g as getDefaultExportFromCjs } from "./_commonjsHelpers.js";
2
- function _mergeNamespaces(n, m) {
3
- for (var i = 0; i < m.length; i++) {
4
- const e = m[i];
5
- if (typeof e !== "string" && !Array.isArray(e)) {
6
- for (const k in e) {
7
- if (k !== "default" && !(k in n)) {
8
- const d = Object.getOwnPropertyDescriptor(e, k);
9
- if (d) {
10
- Object.defineProperty(n, k, d.get ? d : {
11
- enumerable: true,
12
- get: () => e[k]
13
- });
14
- }
15
- }
16
- }
17
- }
18
- }
19
- return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { value: "Module" }));
20
- }
21
- var monthSelect$1 = { exports: {} };
22
- var monthSelect = /* @__PURE__ */ (() => monthSelect$1.exports)();
23
- var hasRequiredMonthSelect;
24
- function requireMonthSelect() {
25
- if (hasRequiredMonthSelect) return monthSelect$1.exports;
26
- hasRequiredMonthSelect = 1;
27
- (function(module, exports$1) {
28
- (function(global, factory) {
29
- module.exports = factory();
30
- })(monthSelect, (function() {
31
- var __assign = function() {
32
- __assign = Object.assign || function __assign2(t) {
33
- for (var s, i = 1, n = arguments.length; i < n; i++) {
34
- s = arguments[i];
35
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
36
- }
37
- return t;
38
- };
39
- return __assign.apply(this, arguments);
40
- };
41
- var monthToStr = function(monthNumber, shorthand, locale) {
42
- return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber];
43
- };
44
- function clearNode(node) {
45
- while (node.firstChild)
46
- node.removeChild(node.firstChild);
47
- }
48
- function getEventTarget(event) {
49
- try {
50
- if (typeof event.composedPath === "function") {
51
- var path = event.composedPath();
52
- return path[0];
53
- }
54
- return event.target;
55
- } catch (error) {
56
- return event.target;
57
- }
58
- }
59
- var defaultConfig = {
60
- shorthand: false,
61
- dateFormat: "F Y",
62
- altFormat: "F Y",
63
- theme: "light"
64
- };
65
- function monthSelectPlugin(pluginConfig) {
66
- var config = __assign(__assign({}, defaultConfig), pluginConfig);
67
- return function(fp) {
68
- fp.config.dateFormat = config.dateFormat;
69
- fp.config.altFormat = config.altFormat;
70
- var self = { monthsContainer: null };
71
- function clearUnnecessaryDOMElements() {
72
- if (!fp.rContainer)
73
- return;
74
- clearNode(fp.rContainer);
75
- for (var index2 = 0; index2 < fp.monthElements.length; index2++) {
76
- var element = fp.monthElements[index2];
77
- if (!element.parentNode)
78
- continue;
79
- element.parentNode.removeChild(element);
80
- }
81
- }
82
- function build() {
83
- if (!fp.rContainer)
84
- return;
85
- self.monthsContainer = fp._createElement("div", "flatpickr-monthSelect-months");
86
- self.monthsContainer.tabIndex = -1;
87
- buildMonths();
88
- fp.rContainer.appendChild(self.monthsContainer);
89
- fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-" + config.theme);
90
- }
91
- function buildMonths() {
92
- if (!self.monthsContainer)
93
- return;
94
- clearNode(self.monthsContainer);
95
- var frag = document.createDocumentFragment();
96
- for (var i = 0; i < 12; i++) {
97
- var month = fp.createDay("flatpickr-monthSelect-month", new Date(fp.currentYear, i), 0, i);
98
- if (month.dateObj.getMonth() === (/* @__PURE__ */ new Date()).getMonth() && month.dateObj.getFullYear() === (/* @__PURE__ */ new Date()).getFullYear())
99
- month.classList.add("today");
100
- month.textContent = monthToStr(i, config.shorthand, fp.l10n);
101
- month.addEventListener("click", selectMonth);
102
- frag.appendChild(month);
103
- }
104
- self.monthsContainer.appendChild(frag);
105
- if (fp.config.minDate && fp.currentYear === fp.config.minDate.getFullYear())
106
- fp.prevMonthNav.classList.add("flatpickr-disabled");
107
- else
108
- fp.prevMonthNav.classList.remove("flatpickr-disabled");
109
- if (fp.config.maxDate && fp.currentYear === fp.config.maxDate.getFullYear())
110
- fp.nextMonthNav.classList.add("flatpickr-disabled");
111
- else
112
- fp.nextMonthNav.classList.remove("flatpickr-disabled");
113
- }
114
- function bindEvents() {
115
- fp._bind(fp.prevMonthNav, "click", function(e) {
116
- e.preventDefault();
117
- e.stopPropagation();
118
- fp.changeYear(fp.currentYear - 1);
119
- selectYear();
120
- buildMonths();
121
- });
122
- fp._bind(fp.nextMonthNav, "click", function(e) {
123
- e.preventDefault();
124
- e.stopPropagation();
125
- fp.changeYear(fp.currentYear + 1);
126
- selectYear();
127
- buildMonths();
128
- });
129
- fp._bind(self.monthsContainer, "mouseover", function(e) {
130
- if (fp.config.mode === "range")
131
- fp.onMouseOver(getEventTarget(e), "flatpickr-monthSelect-month");
132
- });
133
- }
134
- function setCurrentlySelected() {
135
- if (!fp.rContainer)
136
- return;
137
- if (!fp.selectedDates.length)
138
- return;
139
- var currentlySelected = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");
140
- for (var index2 = 0; index2 < currentlySelected.length; index2++) {
141
- currentlySelected[index2].classList.remove("selected");
142
- }
143
- var targetMonth = fp.selectedDates[0].getMonth();
144
- var month = fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child(" + (targetMonth + 1) + ")");
145
- if (month) {
146
- month.classList.add("selected");
147
- }
148
- }
149
- function selectYear() {
150
- var selectedDate = fp.selectedDates[0];
151
- if (selectedDate) {
152
- selectedDate = new Date(selectedDate);
153
- selectedDate.setFullYear(fp.currentYear);
154
- if (fp.config.minDate && selectedDate < fp.config.minDate) {
155
- selectedDate = fp.config.minDate;
156
- }
157
- if (fp.config.maxDate && selectedDate > fp.config.maxDate) {
158
- selectedDate = fp.config.maxDate;
159
- }
160
- fp.currentYear = selectedDate.getFullYear();
161
- }
162
- fp.currentYearElement.value = String(fp.currentYear);
163
- if (fp.rContainer) {
164
- var months = fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");
165
- months.forEach(function(month) {
166
- month.dateObj.setFullYear(fp.currentYear);
167
- if (fp.config.minDate && month.dateObj < fp.config.minDate || fp.config.maxDate && month.dateObj > fp.config.maxDate) {
168
- month.classList.add("flatpickr-disabled");
169
- } else {
170
- month.classList.remove("flatpickr-disabled");
171
- }
172
- });
173
- }
174
- setCurrentlySelected();
175
- }
176
- function selectMonth(e) {
177
- e.preventDefault();
178
- e.stopPropagation();
179
- var eventTarget = getEventTarget(e);
180
- if (!(eventTarget instanceof Element))
181
- return;
182
- if (eventTarget.classList.contains("flatpickr-disabled"))
183
- return;
184
- if (eventTarget.classList.contains("notAllowed"))
185
- return;
186
- setMonth(eventTarget.dateObj);
187
- if (fp.config.closeOnSelect) {
188
- var single = fp.config.mode === "single";
189
- var range = fp.config.mode === "range" && fp.selectedDates.length === 2;
190
- if (single || range)
191
- fp.close();
192
- }
193
- }
194
- function setMonth(date) {
195
- var selectedDate = new Date(fp.currentYear, date.getMonth(), date.getDate());
196
- var selectedDates = [];
197
- switch (fp.config.mode) {
198
- case "single":
199
- selectedDates = [selectedDate];
200
- break;
201
- case "multiple":
202
- selectedDates.push(selectedDate);
203
- break;
204
- case "range":
205
- if (fp.selectedDates.length === 2) {
206
- selectedDates = [selectedDate];
207
- } else {
208
- selectedDates = fp.selectedDates.concat([selectedDate]);
209
- selectedDates.sort(function(a, b) {
210
- return a.getTime() - b.getTime();
211
- });
212
- }
213
- break;
214
- }
215
- fp.setDate(selectedDates, true);
216
- setCurrentlySelected();
217
- }
218
- var shifts = {
219
- 37: -1,
220
- 39: 1,
221
- 40: 3,
222
- 38: -3
223
- };
224
- function onKeyDown(_, __, ___, e) {
225
- var shouldMove = shifts[e.keyCode] !== void 0;
226
- if (!shouldMove && e.keyCode !== 13) {
227
- return;
228
- }
229
- if (!fp.rContainer || !self.monthsContainer)
230
- return;
231
- var currentlySelected = fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");
232
- var index2 = Array.prototype.indexOf.call(self.monthsContainer.children, document.activeElement);
233
- if (index2 === -1) {
234
- var target = currentlySelected || self.monthsContainer.firstElementChild;
235
- target.focus();
236
- index2 = target.$i;
237
- }
238
- if (shouldMove) {
239
- self.monthsContainer.children[(12 + index2 + shifts[e.keyCode]) % 12].focus();
240
- } else if (e.keyCode === 13 && self.monthsContainer.contains(document.activeElement)) {
241
- setMonth(document.activeElement.dateObj);
242
- }
243
- }
244
- function closeHook() {
245
- var _a;
246
- if (((_a = fp.config) === null || _a === void 0 ? void 0 : _a.mode) === "range" && fp.selectedDates.length === 1)
247
- fp.clear(false);
248
- if (!fp.selectedDates.length)
249
- buildMonths();
250
- }
251
- function stubCurrentMonth() {
252
- config._stubbedCurrentMonth = fp._initialDate.getMonth();
253
- fp._initialDate.setMonth(config._stubbedCurrentMonth);
254
- fp.currentMonth = config._stubbedCurrentMonth;
255
- }
256
- function unstubCurrentMonth() {
257
- if (!config._stubbedCurrentMonth)
258
- return;
259
- fp._initialDate.setMonth(config._stubbedCurrentMonth);
260
- fp.currentMonth = config._stubbedCurrentMonth;
261
- delete config._stubbedCurrentMonth;
262
- }
263
- function destroyPluginInstance() {
264
- if (self.monthsContainer !== null) {
265
- var months = self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");
266
- for (var index2 = 0; index2 < months.length; index2++) {
267
- months[index2].removeEventListener("click", selectMonth);
268
- }
269
- }
270
- }
271
- return {
272
- onParseConfig: function() {
273
- fp.config.enableTime = false;
274
- },
275
- onValueUpdate: setCurrentlySelected,
276
- onKeyDown,
277
- onReady: [
278
- stubCurrentMonth,
279
- clearUnnecessaryDOMElements,
280
- build,
281
- bindEvents,
282
- setCurrentlySelected,
283
- function() {
284
- fp.config.onClose.push(closeHook);
285
- fp.loadedPlugins.push("monthSelect");
286
- }
287
- ],
288
- onDestroy: [
289
- unstubCurrentMonth,
290
- destroyPluginInstance,
291
- function() {
292
- fp.config.onClose = fp.config.onClose.filter(function(hook) {
293
- return hook !== closeHook;
294
- });
295
- }
296
- ]
297
- };
298
- };
299
- }
300
- return monthSelectPlugin;
301
- }));
302
- })(monthSelect$1);
303
- return monthSelect$1.exports;
304
- }
305
- var monthSelectExports = /* @__PURE__ */ requireMonthSelect();
306
- const index = /* @__PURE__ */ getDefaultExportFromCjs(monthSelectExports);
307
- const index$1 = /* @__PURE__ */ _mergeNamespaces({
308
- __proto__: null,
309
- default: index
310
- }, [monthSelectExports]);
311
- export {
312
- index$1 as i
313
- };
314
- //# sourceMappingURL=index.js.map