@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":"field-modal-tree.js","sources":["../../src/utilities/tree.ts","../../../../../../node_modules/vue3-slide-up-down/dist/vue3-slide-up-down.js","../../src/vue/components/ModalTree/TreeItem.vue","../../src/vue/components/ModalTree/TreeModal.vue","../../src/vue/components/ModalTree/ModalTreeApp.vue","../../src/module/field-modal-tree.ts"],"sourcesContent":["import { TreeNode } from '../types';\n\nexport function flattenChildren(children: TreeNode[]) {\n const flat: TreeNode[] = [];\n\n function loopChildren(children: TreeNode[]) {\n for (const child of children) {\n if (child.children.length === 0) {\n flat.push(child);\n continue;\n }\n\n loopChildren(child.children);\n }\n }\n\n loopChildren(children);\n return flat;\n}\n\n","import { defineComponent as C, ref as E, computed as h, h as p, Transition as W, withDirectives as F, mergeProps as L, vShow as k, unref as b } from \"vue\";\nfunction y(t) {\n return {\n height: t.style.height,\n width: t.style.width,\n position: t.style.position,\n visibility: t.style.visibility,\n overflow: t.style.overflow,\n paddingTop: t.style.paddingTop,\n paddingBottom: t.style.paddingBottom,\n borderTopWidth: t.style.borderTopWidth,\n borderBottomWidth: t.style.borderBottomWidth,\n marginTop: t.style.marginTop,\n marginBottom: t.style.marginBottom\n };\n}\nfunction V(t, o, i) {\n const e = b(t), { width: n } = getComputedStyle(o);\n o.style.width = n, o.style.position = \"absolute\", o.style.visibility = \"hidden\", o.style.height = \"\";\n const { height: s } = getComputedStyle(o);\n return o.style.width = i.width, o.style.position = i.position, o.style.visibility = i.visibility, o.style.height = e, o.style.overflow = \"hidden\", i.height && i.height != e ? i.height : s;\n}\nfunction f(t, o, i, e, n) {\n const s = t.animate(e, n);\n t.style.height = o.height, s.onfinish = () => {\n t.style.overflow = o.overflow, i();\n };\n}\nfunction m(t, o, i, e) {\n const n = b(o);\n return [\n {\n height: n,\n opacity: t.opacityClosed,\n paddingTop: n,\n paddingBottom: n,\n borderTopWidth: n,\n borderBottomWidth: n,\n marginTop: n,\n marginBottom: n\n },\n {\n height: i,\n opacity: t.opacityOpen,\n paddingTop: e.paddingTop || 0,\n paddingBottom: e.paddingBottom || 0,\n borderTopWidth: e.borderTopWidth || 0,\n borderBottomWidth: e.borderBottomWidth || 0,\n marginTop: e.marginTop || 0,\n marginBottom: e.marginBottom || 0\n }\n ];\n}\nconst x = C({\n props: {\n modelValue: {\n type: Boolean,\n default: !1\n },\n /**\n * Time in milliseconds for the slide duration\n */\n duration: {\n type: Number,\n default: 500\n },\n /**\n * Timing function for the animation\n */\n timingFunction: {\n type: String,\n default: \"ease-in-out\"\n },\n /**\n * Independent timing function for the animation when entering\n */\n timingFunctionEnter: {\n type: String,\n default: null\n },\n /**\n * Independent timing function for the animation when leaving\n */\n timingFunctionLeave: {\n type: String,\n default: null\n },\n /**\n * Opacity value from 0 - 1 of the element when open\n */\n opacityOpen: {\n type: Number,\n default: 1\n },\n /**\n * Opacity value from 0 - 1 of the element when closed\n */\n opacityClosed: {\n type: Number,\n default: 0\n },\n /**\n * HTML tag to use for the outer container\n */\n tag: {\n type: String,\n default: \"div\"\n },\n /**\n * Always render the element inside the slide container\n */\n eager: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\"update:modelValue\", \"open-start\", \"open-end\", \"close-start\", \"close-end\"],\n setup(t, { slots: o, attrs: i, emit: e }) {\n const n = E(\"0px\"), s = h(() => t.timingFunctionEnter || t.timingFunction), v = h(() => t.timingFunctionLeave || t.timingFunction);\n function T(g, l) {\n const d = g, a = y(d), r = V(n, d, a), u = m(t, n, r, a), c = { duration: t.duration, easing: s.value };\n f(d, a, () => {\n l(), e(\"open-end\");\n }, u, c);\n }\n function B(g, l) {\n const d = g, a = y(d), { height: r } = getComputedStyle(d);\n d.style.height = r, d.style.overflow = \"hidden\";\n const u = m(t, n, r, a).reverse(), c = { duration: t.duration, easing: v.value };\n f(d, a, () => {\n l(), e(\"close-end\");\n }, u, c);\n }\n return () => p(\n W,\n {\n css: !1,\n persisted: t.eager,\n onBeforeEnter: () => e(\"open-start\"),\n onEnter: T,\n onBeforeLeave: () => e(\"close-start\"),\n onLeave: B\n },\n {\n default: () => t.modelValue || t.eager ? F(\n p(\n t.tag,\n L(i, {\n class: \"slide-up-down__container\"\n }),\n o\n ),\n [t.eager ? [k, t.modelValue === !0] : [null]]\n ) : null\n }\n );\n }\n});\nexport {\n x as Vue3SlideUpDown\n};\n","<script setup lang=\"ts\">\nimport { type ComponentPublicInstance, type ComputedRef, computed, inject, nextTick, onBeforeUpdate, onMounted, ref, watch } from 'vue';\nimport { Vue3SlideUpDown } from 'vue3-slide-up-down';\nimport { TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n node: TreeNode;\n level?: number;\n branchSelectable?: boolean;\n }>(),\n {\n level: 1,\n branchSelectable: false,\n }\n);\n\nconst emit = defineEmits<{\n change: [checked: boolean];\n input: [checked: boolean];\n}>();\n\nconst node = ref<TreeNode>(props.node);\n// const selectNode = inject<(node: TreeNode, select: boolean) => any>('selectNode');\nconst selectedValues = inject<ComputedRef<(string | number)[]>>('selectedValues');\nconst id = inject('id');\nconst multiple = inject('multiple');\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\n\nconst selected = ref(false);\nconst indeterminate = computed(() => !!props.node.indeterminate);\nconst stopWatch = ref(false);\nconst open = ref(false);\nconst childrenComponents = ref<ComponentPublicInstance<typeof TreeItem>[]>([]);\n\nwatch(() => props.node, () => {\n selected.value = !!props.node.selected;\n}, { deep: true });\n\nfunction setChildrenComponent(child: ComponentPublicInstance<typeof TreeItem>) {\n childrenComponents.value.push(child);\n}\n\nonBeforeUpdate(() => {\n childrenComponents.value = [];\n});\n\nconst indentPx = computed(() => {\n return (props.level - 1) * 15;\n});\n\nconst isBranch = computed(() => {\n return props.node.children.length > 0;\n});\n\nconst isLeaf = computed(() => {\n return !isBranch.value;\n});\n\nfunction updateSelected() {\n if (isBranch.value) {\n return;\n }\n\n node.value.selected = selectedValues.value.includes(valueGetter(props.node.value));\n}\n\nfunction select(select: boolean) {\n if (selected.value === select) {\n return;\n }\n\n node.value.selected = select;\n\n checkboxChanged(select);\n}\n\nfunction checkboxChanged(v: boolean) {\n if (isBranch.value) {\n node.value.selected = v;\n\n if (multiple) {\n stopWatchThen(() => {\n const flatChildren = flattenChildren(node.value.children);\n for (const child of flatChildren) {\n child.selected = v;\n child.indeterminate = false;\n }\n });\n // syncChildrenStatus();\n }\n } else {\n nextTick(() => {\n node.value.selected = v;\n });\n }\n emit('change', v);\n emit('input', v);\n}\n\nfunction childChanged(v: boolean) {\n if (isLeaf.value || stopWatch.value) {\n return;\n }\n if (!childrenComponents.value) {\n return;\n }\n if (childrenComponents.value.length === 0) {\n return;\n }\n syncChildrenStatus();\n}\n\nfunction syncChildrenStatus() {\n if (isLeaf.value) {\n return;\n }\n let selectedCount = 0;\n let unselectCount = 0;\n let indeterminateInner = 0;\n const oldIndeterminate = indeterminate.value;\n const oldSelected = selected.value;\n \n for (const child of flattenChildren(props.node.children)) {\n if (child.selected) {\n selectedCount++;\n } else {\n unselectCount++;\n }\n\n if (child.indeterminate) {\n indeterminateInner++;\n }\n }\n\n // for (const childComponent of childrenComponents.value) {\n // if (childComponent.selected) {\n // checked++;\n // } else {\n // unchecked++;\n // }\n // if (childComponent.indeterminate) {\n // indeterminateInner++;\n // }\n // }\n\n if ((selectedCount !== 0 && unselectCount !== 0) || indeterminateInner > 0) {\n node.value.indeterminate = true;\n } else {\n node.value.selected = unselectCount === 0;\n node.value.indeterminate = false;\n }\n\n if (\n selected.value !== oldSelected\n || indeterminate.value !== oldIndeterminate\n ) {\n emit('change', selected.value);\n emit('input', selected.value);\n }\n}\n\nfunction stopWatchThen(callback: () => any) {\n stopWatch.value = true;\n callback();\n stopWatch.value = false;\n}\n\nwatch(() => selectedValues, async () => {\n if (!isBranch.value) {\n updateSelected();\n }\n await nextTick();\n\n syncChildrenStatus();\n}, { deep: true });\n\nwatch(selected, (v) => {\n});\n\nupdateSelected();\n\nonMounted(() => {\n syncChildrenStatus();\n});\n\ndefineExpose({\n select,\n selected,\n indeterminate\n});\n</script>\n\n<template>\n <div class=\"c-tree-item\"\n :class=\"[ isBranch ? 'c-tree-item--branch' : 'c-tree-item--leaf' ]\">\n <div class=\"d-flex c-tree-item__title\"\n :style=\"{ 'padding-left': indentPx + 'px' }\"\n :class=\"[ isBranch ? 'bg-light ' : '' ]\">\n <div class=\"p-2 ms-2\">\n <input\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n v-if=\"isLeaf || (branchSelectable && multiple)\"\n :id=\"id + '__item-' + valueGetter(node.value)\"\n v-model=\"selected\"\n :value=\"true\"\n :unchecked-value=\"false\"\n :indeterminate.sync=\"indeterminate\"\n @change=\"checkboxChanged(($event.target as HTMLInputElement).checked)\"\n />\n <input v-else\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n disabled\n :checked=\"indeterminate\" :indeterminate.sync=\"indeterminate\" />\n </div>\n <a class=\"c-tree-item__text d-flex align-items-center flex-grow-1 py-2 text-decoration-none\"\n style=\"cursor: pointer;\"\n :data-level=\"level\"\n data-bs-toggle=\"collapse\"\n @click.prevent=\"isLeaf ? select(!selected) : open = !open\">\n <span class=\"me-2 fa\" :class=\"[ isLeaf ? 'fa-tag' : 'fa-folder' ]\"></span>\n\n {{ node.value.title }}\n\n <span v-if=\"isBranch\" class=\"ms-auto me-3\">\n <span :class=\"[ open ? 'fa fa-chevron-up' : 'fa fa-chevron-down' ]\"></span>\n </span>\n </a>\n </div>\n\n <Vue3SlideUpDown\n v-if=\"node.children.length > 0\"\n v-model=\"open\"\n :duration=\"300\"\n class=\"c-tree-item__children\"\n >\n <TreeItem v-for=\"(child, i) of node.children\"\n :node=\"child\"\n :key=\"valueGetter(child.value)\"\n :level=\"level + 1\"\n :branch-selectable=\"branchSelectable\"\n :ref=\"setChildrenComponent\"\n @change=\"childChanged\"\n />\n </Vue3SlideUpDown>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.c-tree-item {\n &__title {\n border-bottom: 1px solid #ddd;\n }\n\n cursor: pointer;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Modal } from 'bootstrap';\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';\nimport { useHttpClient } from '../../../composable';\nimport { forceArray } from '../../../service';\nimport { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n id?: string;\n name?: string;\n types?: string[];\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n branchSelectable?: boolean;\n source?: ModalTreeSource;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n }\n);\n\nconst emits = defineEmits<{\n change: [value: any];\n input: [value: any];\n selected: [items: any[]];\n hide: [];\n}>();\n\n// provide('selectNode', selectNode);\n\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\nconst searchMatcher = inject<SearchMatcher>('searchMatcher');\n\nconst loading = ref(false);\nconst multiple = inject<boolean>('multiple', false);\nconst modalElement = useTemplateRef<HTMLDivElement>('modal')\n\nlet $modal: Modal;\n\nonMounted(() => {\n $modal = Modal.getOrCreateInstance(modalElement.value!);\n modalElement.value!.addEventListener('show.bs.modal', onShow);\n modalElement.value!.addEventListener('hide.bs.modal', onHide);\n});\n\nonUnmounted(() => {\n modalElement.value!.removeEventListener('show.bs.modal', onShow);\n modalElement.value!.removeEventListener('hide.bs.modal', onHide);\n});\n\n// Items\nconst nodes = ref<TreeNode[]>([]);\nconst selectedNodes = ref<TreeNode[]>([]);\n\nconst displayNodes = computed(() => {\n if (searchEnabled.value) {\n return searchedItems.value;\n }\n return nodes.value;\n});\n\nconst flatNodes = computed(() => flattenChildren(nodes.value));\n\nconst selectedValues = computed(() => {\n return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));\n});\n\nprovide('selectedValues', selectedValues);\n\nwatch(() => selectedValues, () => {\n emits('change', selectedValues.value);\n emits('input', selectedValues.value);\n emits('selected', selectedNodes.value);\n});\n\n// function selectNode(node: TreeNode, select: boolean) {\n// node.selected = select;\n//\n// // if (select) {\n// // if (!multiple) {\n// // selectedNodes.value = [];\n// // }\n// // if (!selectedValues.value.includes(valueGetter(node.value))) {\n// // selectedNodes.value.push(node);\n// // }\n// // } else {\n// // selectedNodes.value = selectedNodes.value.filter(\n// // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)\n// // );\n// // }\n// emits('change', selectedValues.value);\n// emits('input', selectedValues.value);\n// emits('selected', selectedNodes.value);\n// }\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n// Search\nconst q = ref('');\nconst searchEnabled = computed(() => q.value !== '');\n\nconst searchedItems = computed(() => {\n if (q.value === '') {\n return [];\n }\n\n return flatNodes.value.filter((item: TreeNode) => {\n return searchMatcher(item.value, q.value);\n });\n});\n\nasync function loadItems() {\n loading.value = true;\n const http = await useHttpClient();\n try {\n let src = props.source;\n\n if (typeof src === 'string') {\n const res = await http.get(src);\n nodes.value = res.data.data;\n } else if (typeof src === 'function') {\n nodes.value = await src();\n } else {\n if (!Array.isArray(src)) {\n src = src.children;\n }\n\n nodes.value = src;\n }\n } finally {\n loading.value = false;\n }\n}\n\n// Modal Control\nwatch(() => props.open, (v) => {\n if (v) {\n $modal.show();\n } else {\n $modal.hide();\n }\n});\n\nasync function onShow() {\n await loadItems();\n updateSelectedItemsByValue();\n}\n\nfunction onHide() {\n nodes.value = [];\n q.value = '';\n emits('hide');\n}\n\nfunction updateSelectedItemsByValue() {\n const values = forceArray(props.value);\n\n selectedNodes.value = flatNodes.value\n .filter((item: TreeNode) => {\n return values.includes(valueGetter(item.value));\n });\n}\n\nwatch(\n () => props.value,\n () => updateSelectedItemsByValue(),\n { immediate: true, deep: true }\n);\n\n</script>\n\n<template>\n <div ref=\"modal\" class=\"modal fade\" :id=\"`${id}__modal`\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"-modal-label\"\n aria-hidden=\"true\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" :id=\"`${id}__modal-label`\">\n {{ title }}\n </h4>\n <button type=\"button\" class=\"close btn-close\" data-bs-dismiss=\"modal\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n\n <div class=\"modal-body p-0\">\n <div class=\"std-form box-list m-3\">\n <div class=\"form-group\">\n <input type=\"search\" class=\"form-control\" :placeholder=\"searchText\"\n v-model=\"q\" />\n </div>\n </div>\n\n <div v-if=\"!loading\" class=\"box-list__items\">\n <TreeItem v-for=\"node of displayNodes\"\n :node\n :key=\"valueGetter(node.value)\"\n :level=\"1\"\n :branchSelectable\n />\n </div>\n <div v-else>\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border spinner-border-sm my-3\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n\n</style>\n","<script lang=\"ts\" setup>\nimport { cloneDeep } from 'lodash-es';\nimport { computed, provide, ref, watch } from 'vue';\nimport { forceArray } from '../../../service';\nimport {\n ValueGetter,\n ModalTreeSource,\n TitleGetter,\n TreeNode,\n SearchMatcher,\n MaybeArray,\n MaybePromise\n} from '../../../types';\nimport TreeModal from './TreeModal.vue';\n\nconst props = withDefaults(\n defineProps<{\n id?: string;\n name?: string;\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n source?: ModalTreeSource;\n items?: MaybeArray<TreeNode> | (() => MaybePromise<MaybeArray<TreeNode>>);\n valueGetter?: ValueGetter;\n titleGetter?: TitleGetter;\n searchMatcher?: SearchMatcher;\n modalTitle?: string;\n vertical?: boolean;\n branchSelectable?: boolean;\n selectAllChildren?: boolean;\n placeholder?: string;\n multiple?: boolean;\n buttonText?: string;\n itemClass?: string;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n selectAllChildren: false,\n placeholder: '- No selected -',\n multiple: false,\n buttonText: 'Select',\n itemClass: 'badge bg-primary badge-pill',\n searchText: 'Search',\n valueGetter: (item: any) => item.id,\n titleGetter: (item: any) => item.title,\n }\n);\n\nprovide('id', props.id);\nprovide('name', props.name);\nprovide('multiple', props.multiple);\nprovide('valueGetter', props.valueGetter);\nprovide('titleGetter', props.titleGetter);\nprovide('searchMatcher', props.searchMatcher ?? defaultSearchMatcher);\n\nfunction defaultSearchMatcher(item: any, q: string) {\n return props.titleGetter(item).toLowerCase().includes(q.toLowerCase());\n}\n\nconst selected = ref<TreeNode[]>([]);\nconst value = ref<(string|number)[]>(forceArray(props.value));\n\n// Modal\nconst treeModalOpen = ref(false);\n\nfunction openSelector() {\n treeModalOpen.value = true;\n}\n\nfunction deleteItem(i: number, node: TreeNode) {\n selected.value = selected.value.filter((it: TreeNode) => props.valueGetter(it.value) !== props.valueGetter(node.value));\n}\n\nfunction handleSelected(items: any[]) {\n selected.value = cloneDeep(items);\n}\n\nwatch(() => props.items, async (v) => {\n if (typeof v === 'function') {\n v = await v();\n }\n\n selected.value = forceArray(v).filter((node: TreeNode) => {\n return value.value.includes(props.valueGetter(node.value));\n });\n}, { immediate: true });\n\nconst selectedValues = computed(() => {\n return selected.value.map(node => props.valueGetter(node.value));\n});\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n</script>\n\n<template>\n <div class=\"c-modal-tree\">\n <div class=\"c-modal-tree__container p-2 d-flex flex-column\"\n :class=\"[ vertical ? '' : 'flex-md-row' ]\">\n <div v-if=\"canModify\" class=\"me-2 mb-2\"\n :class=\"{ 'mb-md-0': !vertical }\">\n <div class=\"btn-group\">\n <button class=\"btn btn-secondary btn-sm btn-rounded text-nowrap\" type=\"button\"\n @click=\"openSelector\">\n {{ buttonText }}\n </button>\n <button class=\"btn btn-secondary btn-sm btn-rounded\" type=\"button\"\n @click=\"selected = []\">\n <span class=\"fa fa-times\"></span>\n </button>\n </div>\n </div>\n\n <div v-if=\"selected.length > 0\">\n <TransitionGroup name=\"fade\">\n <span v-for=\"(node, i) of selected\"\n class=\"me-2 mb-2 c-item\"\n :class=\"itemClass\"\n :key=\"valueGetter(node.value)\"\n style=\"animation-duration: .3s\">\n <span>{{ titleGetter(node.value) }}</span>\n <span type=\"button\" v-if=\"canModify\"\n @click.prevent=\"deleteItem(i, node)\" class=\"ms-2\" style=\"cursor: pointer\">\n <span class=\"fa fa-times\"></span>\n </span>\n </span>\n </TransitionGroup>\n </div>\n <div v-else class=\"text-muted\">\n {{ placeholder }}\n </div>\n </div>\n\n <select multiple\n style=\"display: none;\"\n ref=\"input\"\n :id=\"id\"\n :name=\"name\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n v-bind=\"$attrs\"\n >\n <option v-for=\"id of selectedValues\" :value=\"id\" :selected=\"true\">{{ id }}</option>\n </select>\n\n <TreeModal\n :open=\"treeModalOpen\"\n @hide=\"treeModalOpen = false\"\n :id=\"id\"\n :title=\"modalTitle\"\n :source=\"source\"\n :value=\"selectedValues\"\n :branchSelectable\n v-bind=\"$attrs\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :search-text=\"searchText\"\n @selected=\"handleSelected\"\n />\n </div>\n</template>\n\n<style scoped>\n.c-item {\n padding-left: .75rem;\n padding-right: .75rem;\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n</style>\n","import { data } from '../data';\nimport { useCssImport } from '../service';\nimport { createApp } from 'vue';\nimport ModalTreeApp from '../vue/components/ModalTree/ModalTreeApp.vue';\n\nconst app = createApp({\n name: 'modal-tree',\n components: {\n ModalTreeApp\n }\n});\napp.config.globalProperties.$getData = data;\n\nclass ModalTreeElement extends HTMLElement {\n static is = 'modal-tree';\n\n vm: any;\n\n connectedCallback() {\n if (!this.vm) {\n this.vm = app.mount(this);\n }\n }\n}\n\nasync function init() {\n customElements.define(ModalTreeElement.is, ModalTreeElement);\n await useCssImport('@vue-animate');\n}\n\nexport const ready = init();\n"],"names":["children","b","C","E","h","p","W","F","L","k","select","_hoisted_1","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_withDirectives","_openBlock","_hoisted_2","_hoisted_3","_createTextVNode","_toDisplayString","_hoisted_5","_createBlock","_Fragment","_renderList","_hoisted_4","_hoisted_6","_hoisted_7","_createVNode","_TransitionGroup","_withCtx","_withModifiers","_createCommentVNode","_mergeProps"],"mappings":"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","x_google_ignoreList":[1]}
1
+ {"version":3,"file":"field-modal-tree.js","names":["b","C","E","h","p","W","F","L","k"],"sources":["../../src/utilities/tree.ts","../../../../../../node_modules/vue3-slide-up-down/dist/vue3-slide-up-down.js","../../src/vue/components/ModalTree/TreeItem.vue","../../src/vue/components/ModalTree/TreeItem.vue","../../src/vue/components/ModalTree/TreeModal.vue","../../src/vue/components/ModalTree/TreeModal.vue","../../src/vue/components/ModalTree/ModalTreeApp.vue","../../src/vue/components/ModalTree/ModalTreeApp.vue","../../src/module/field-modal-tree.ts"],"sourcesContent":["import { TreeNode } from '../types';\n\nexport function flattenChildren(children: TreeNode[]) {\n const flat: TreeNode[] = [];\n\n function loopChildren(children: TreeNode[]) {\n for (const child of children) {\n if (child.children.length === 0) {\n flat.push(child);\n continue;\n }\n\n loopChildren(child.children);\n }\n }\n\n loopChildren(children);\n return flat;\n}\n\n","import { defineComponent as C, ref as E, computed as h, h as p, Transition as W, withDirectives as F, mergeProps as L, vShow as k, unref as b } from \"vue\";\nfunction y(t) {\n return {\n height: t.style.height,\n width: t.style.width,\n position: t.style.position,\n visibility: t.style.visibility,\n overflow: t.style.overflow,\n paddingTop: t.style.paddingTop,\n paddingBottom: t.style.paddingBottom,\n borderTopWidth: t.style.borderTopWidth,\n borderBottomWidth: t.style.borderBottomWidth,\n marginTop: t.style.marginTop,\n marginBottom: t.style.marginBottom\n };\n}\nfunction V(t, o, i) {\n const e = b(t), { width: n } = getComputedStyle(o);\n o.style.width = n, o.style.position = \"absolute\", o.style.visibility = \"hidden\", o.style.height = \"\";\n const { height: s } = getComputedStyle(o);\n return o.style.width = i.width, o.style.position = i.position, o.style.visibility = i.visibility, o.style.height = e, o.style.overflow = \"hidden\", i.height && i.height != e ? i.height : s;\n}\nfunction f(t, o, i, e, n) {\n const s = t.animate(e, n);\n t.style.height = o.height, s.onfinish = () => {\n t.style.overflow = o.overflow, i();\n };\n}\nfunction m(t, o, i, e) {\n const n = b(o);\n return [\n {\n height: n,\n opacity: t.opacityClosed,\n paddingTop: n,\n paddingBottom: n,\n borderTopWidth: n,\n borderBottomWidth: n,\n marginTop: n,\n marginBottom: n\n },\n {\n height: i,\n opacity: t.opacityOpen,\n paddingTop: e.paddingTop || 0,\n paddingBottom: e.paddingBottom || 0,\n borderTopWidth: e.borderTopWidth || 0,\n borderBottomWidth: e.borderBottomWidth || 0,\n marginTop: e.marginTop || 0,\n marginBottom: e.marginBottom || 0\n }\n ];\n}\nconst x = C({\n props: {\n modelValue: {\n type: Boolean,\n default: !1\n },\n /**\n * Time in milliseconds for the slide duration\n */\n duration: {\n type: Number,\n default: 500\n },\n /**\n * Timing function for the animation\n */\n timingFunction: {\n type: String,\n default: \"ease-in-out\"\n },\n /**\n * Independent timing function for the animation when entering\n */\n timingFunctionEnter: {\n type: String,\n default: null\n },\n /**\n * Independent timing function for the animation when leaving\n */\n timingFunctionLeave: {\n type: String,\n default: null\n },\n /**\n * Opacity value from 0 - 1 of the element when open\n */\n opacityOpen: {\n type: Number,\n default: 1\n },\n /**\n * Opacity value from 0 - 1 of the element when closed\n */\n opacityClosed: {\n type: Number,\n default: 0\n },\n /**\n * HTML tag to use for the outer container\n */\n tag: {\n type: String,\n default: \"div\"\n },\n /**\n * Always render the element inside the slide container\n */\n eager: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\"update:modelValue\", \"open-start\", \"open-end\", \"close-start\", \"close-end\"],\n setup(t, { slots: o, attrs: i, emit: e }) {\n const n = E(\"0px\"), s = h(() => t.timingFunctionEnter || t.timingFunction), v = h(() => t.timingFunctionLeave || t.timingFunction);\n function T(g, l) {\n const d = g, a = y(d), r = V(n, d, a), u = m(t, n, r, a), c = { duration: t.duration, easing: s.value };\n f(d, a, () => {\n l(), e(\"open-end\");\n }, u, c);\n }\n function B(g, l) {\n const d = g, a = y(d), { height: r } = getComputedStyle(d);\n d.style.height = r, d.style.overflow = \"hidden\";\n const u = m(t, n, r, a).reverse(), c = { duration: t.duration, easing: v.value };\n f(d, a, () => {\n l(), e(\"close-end\");\n }, u, c);\n }\n return () => p(\n W,\n {\n css: !1,\n persisted: t.eager,\n onBeforeEnter: () => e(\"open-start\"),\n onEnter: T,\n onBeforeLeave: () => e(\"close-start\"),\n onLeave: B\n },\n {\n default: () => t.modelValue || t.eager ? F(\n p(\n t.tag,\n L(i, {\n class: \"slide-up-down__container\"\n }),\n o\n ),\n [t.eager ? [k, t.modelValue === !0] : [null]]\n ) : null\n }\n );\n }\n});\nexport {\n x as Vue3SlideUpDown\n};\n","<script setup lang=\"ts\">\nimport { type ComponentPublicInstance, type ComputedRef, computed, inject, nextTick, onBeforeUpdate, onMounted, ref, watch } from 'vue';\nimport { Vue3SlideUpDown } from 'vue3-slide-up-down';\nimport { TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n node: TreeNode;\n level?: number;\n branchSelectable?: boolean;\n }>(),\n {\n level: 1,\n branchSelectable: false,\n }\n);\n\nconst emit = defineEmits<{\n change: [checked: boolean];\n input: [checked: boolean];\n}>();\n\nconst node = ref<TreeNode>(props.node);\n// const selectNode = inject<(node: TreeNode, select: boolean) => any>('selectNode');\nconst selectedValues = inject<ComputedRef<(string | number)[]>>('selectedValues');\nconst id = inject('id');\nconst multiple = inject('multiple');\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\n\nconst selected = ref(false);\nconst indeterminate = computed(() => !!props.node.indeterminate);\nconst stopWatch = ref(false);\nconst open = ref(false);\nconst childrenComponents = ref<ComponentPublicInstance<typeof TreeItem>[]>([]);\n\nwatch(() => props.node, () => {\n selected.value = !!props.node.selected;\n}, { deep: true });\n\nfunction setChildrenComponent(child: ComponentPublicInstance<typeof TreeItem>) {\n childrenComponents.value.push(child);\n}\n\nonBeforeUpdate(() => {\n childrenComponents.value = [];\n});\n\nconst indentPx = computed(() => {\n return (props.level - 1) * 15;\n});\n\nconst isBranch = computed(() => {\n return props.node.children.length > 0;\n});\n\nconst isLeaf = computed(() => {\n return !isBranch.value;\n});\n\nfunction updateSelected() {\n if (isBranch.value) {\n return;\n }\n\n node.value.selected = selectedValues.value.includes(valueGetter(props.node.value));\n}\n\nfunction select(select: boolean) {\n if (selected.value === select) {\n return;\n }\n\n node.value.selected = select;\n\n checkboxChanged(select);\n}\n\nfunction checkboxChanged(v: boolean) {\n if (isBranch.value) {\n node.value.selected = v;\n\n if (multiple) {\n stopWatchThen(() => {\n const flatChildren = flattenChildren(node.value.children);\n for (const child of flatChildren) {\n child.selected = v;\n child.indeterminate = false;\n }\n });\n // syncChildrenStatus();\n }\n } else {\n nextTick(() => {\n node.value.selected = v;\n });\n }\n emit('change', v);\n emit('input', v);\n}\n\nfunction childChanged(v: boolean) {\n if (isLeaf.value || stopWatch.value) {\n return;\n }\n if (!childrenComponents.value) {\n return;\n }\n if (childrenComponents.value.length === 0) {\n return;\n }\n syncChildrenStatus();\n}\n\nfunction syncChildrenStatus() {\n if (isLeaf.value) {\n return;\n }\n let selectedCount = 0;\n let unselectCount = 0;\n let indeterminateInner = 0;\n const oldIndeterminate = indeterminate.value;\n const oldSelected = selected.value;\n \n for (const child of flattenChildren(props.node.children)) {\n if (child.selected) {\n selectedCount++;\n } else {\n unselectCount++;\n }\n\n if (child.indeterminate) {\n indeterminateInner++;\n }\n }\n\n // for (const childComponent of childrenComponents.value) {\n // if (childComponent.selected) {\n // checked++;\n // } else {\n // unchecked++;\n // }\n // if (childComponent.indeterminate) {\n // indeterminateInner++;\n // }\n // }\n\n if ((selectedCount !== 0 && unselectCount !== 0) || indeterminateInner > 0) {\n node.value.indeterminate = true;\n } else {\n node.value.selected = unselectCount === 0;\n node.value.indeterminate = false;\n }\n\n if (\n selected.value !== oldSelected\n || indeterminate.value !== oldIndeterminate\n ) {\n emit('change', selected.value);\n emit('input', selected.value);\n }\n}\n\nfunction stopWatchThen(callback: () => any) {\n stopWatch.value = true;\n callback();\n stopWatch.value = false;\n}\n\nwatch(() => selectedValues, async () => {\n if (!isBranch.value) {\n updateSelected();\n }\n await nextTick();\n\n syncChildrenStatus();\n}, { deep: true });\n\nwatch(selected, (v) => {\n});\n\nupdateSelected();\n\nonMounted(() => {\n syncChildrenStatus();\n});\n\ndefineExpose({\n select,\n selected,\n indeterminate\n});\n</script>\n\n<template>\n <div class=\"c-tree-item\"\n :class=\"[ isBranch ? 'c-tree-item--branch' : 'c-tree-item--leaf' ]\">\n <div class=\"d-flex c-tree-item__title\"\n :style=\"{ 'padding-left': indentPx + 'px' }\"\n :class=\"[ isBranch ? 'bg-light ' : '' ]\">\n <div class=\"p-2 ms-2\">\n <input\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n v-if=\"isLeaf || (branchSelectable && multiple)\"\n :id=\"id + '__item-' + valueGetter(node.value)\"\n v-model=\"selected\"\n :value=\"true\"\n :unchecked-value=\"false\"\n :indeterminate.sync=\"indeterminate\"\n @change=\"checkboxChanged(($event.target as HTMLInputElement).checked)\"\n />\n <input v-else\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n disabled\n :checked=\"indeterminate\" :indeterminate.sync=\"indeterminate\" />\n </div>\n <a class=\"c-tree-item__text d-flex align-items-center flex-grow-1 py-2 text-decoration-none\"\n style=\"cursor: pointer;\"\n :data-level=\"level\"\n data-bs-toggle=\"collapse\"\n @click.prevent=\"isLeaf ? select(!selected) : open = !open\">\n <span class=\"me-2 fa\" :class=\"[ isLeaf ? 'fa-tag' : 'fa-folder' ]\"></span>\n\n {{ node.value.title }}\n\n <span v-if=\"isBranch\" class=\"ms-auto me-3\">\n <span :class=\"[ open ? 'fa fa-chevron-up' : 'fa fa-chevron-down' ]\"></span>\n </span>\n </a>\n </div>\n\n <Vue3SlideUpDown\n v-if=\"node.children.length > 0\"\n v-model=\"open\"\n :duration=\"300\"\n class=\"c-tree-item__children\"\n >\n <TreeItem v-for=\"(child, i) of node.children\"\n :node=\"child\"\n :key=\"valueGetter(child.value)\"\n :level=\"level + 1\"\n :branch-selectable=\"branchSelectable\"\n :ref=\"setChildrenComponent\"\n @change=\"childChanged\"\n />\n </Vue3SlideUpDown>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.c-tree-item {\n &__title {\n border-bottom: 1px solid #ddd;\n }\n\n cursor: pointer;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { type ComponentPublicInstance, type ComputedRef, computed, inject, nextTick, onBeforeUpdate, onMounted, ref, watch } from 'vue';\nimport { Vue3SlideUpDown } from 'vue3-slide-up-down';\nimport { TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n node: TreeNode;\n level?: number;\n branchSelectable?: boolean;\n }>(),\n {\n level: 1,\n branchSelectable: false,\n }\n);\n\nconst emit = defineEmits<{\n change: [checked: boolean];\n input: [checked: boolean];\n}>();\n\nconst node = ref<TreeNode>(props.node);\n// const selectNode = inject<(node: TreeNode, select: boolean) => any>('selectNode');\nconst selectedValues = inject<ComputedRef<(string | number)[]>>('selectedValues');\nconst id = inject('id');\nconst multiple = inject('multiple');\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\n\nconst selected = ref(false);\nconst indeterminate = computed(() => !!props.node.indeterminate);\nconst stopWatch = ref(false);\nconst open = ref(false);\nconst childrenComponents = ref<ComponentPublicInstance<typeof TreeItem>[]>([]);\n\nwatch(() => props.node, () => {\n selected.value = !!props.node.selected;\n}, { deep: true });\n\nfunction setChildrenComponent(child: ComponentPublicInstance<typeof TreeItem>) {\n childrenComponents.value.push(child);\n}\n\nonBeforeUpdate(() => {\n childrenComponents.value = [];\n});\n\nconst indentPx = computed(() => {\n return (props.level - 1) * 15;\n});\n\nconst isBranch = computed(() => {\n return props.node.children.length > 0;\n});\n\nconst isLeaf = computed(() => {\n return !isBranch.value;\n});\n\nfunction updateSelected() {\n if (isBranch.value) {\n return;\n }\n\n node.value.selected = selectedValues.value.includes(valueGetter(props.node.value));\n}\n\nfunction select(select: boolean) {\n if (selected.value === select) {\n return;\n }\n\n node.value.selected = select;\n\n checkboxChanged(select);\n}\n\nfunction checkboxChanged(v: boolean) {\n if (isBranch.value) {\n node.value.selected = v;\n\n if (multiple) {\n stopWatchThen(() => {\n const flatChildren = flattenChildren(node.value.children);\n for (const child of flatChildren) {\n child.selected = v;\n child.indeterminate = false;\n }\n });\n // syncChildrenStatus();\n }\n } else {\n nextTick(() => {\n node.value.selected = v;\n });\n }\n emit('change', v);\n emit('input', v);\n}\n\nfunction childChanged(v: boolean) {\n if (isLeaf.value || stopWatch.value) {\n return;\n }\n if (!childrenComponents.value) {\n return;\n }\n if (childrenComponents.value.length === 0) {\n return;\n }\n syncChildrenStatus();\n}\n\nfunction syncChildrenStatus() {\n if (isLeaf.value) {\n return;\n }\n let selectedCount = 0;\n let unselectCount = 0;\n let indeterminateInner = 0;\n const oldIndeterminate = indeterminate.value;\n const oldSelected = selected.value;\n \n for (const child of flattenChildren(props.node.children)) {\n if (child.selected) {\n selectedCount++;\n } else {\n unselectCount++;\n }\n\n if (child.indeterminate) {\n indeterminateInner++;\n }\n }\n\n // for (const childComponent of childrenComponents.value) {\n // if (childComponent.selected) {\n // checked++;\n // } else {\n // unchecked++;\n // }\n // if (childComponent.indeterminate) {\n // indeterminateInner++;\n // }\n // }\n\n if ((selectedCount !== 0 && unselectCount !== 0) || indeterminateInner > 0) {\n node.value.indeterminate = true;\n } else {\n node.value.selected = unselectCount === 0;\n node.value.indeterminate = false;\n }\n\n if (\n selected.value !== oldSelected\n || indeterminate.value !== oldIndeterminate\n ) {\n emit('change', selected.value);\n emit('input', selected.value);\n }\n}\n\nfunction stopWatchThen(callback: () => any) {\n stopWatch.value = true;\n callback();\n stopWatch.value = false;\n}\n\nwatch(() => selectedValues, async () => {\n if (!isBranch.value) {\n updateSelected();\n }\n await nextTick();\n\n syncChildrenStatus();\n}, { deep: true });\n\nwatch(selected, (v) => {\n});\n\nupdateSelected();\n\nonMounted(() => {\n syncChildrenStatus();\n});\n\ndefineExpose({\n select,\n selected,\n indeterminate\n});\n</script>\n\n<template>\n <div class=\"c-tree-item\"\n :class=\"[ isBranch ? 'c-tree-item--branch' : 'c-tree-item--leaf' ]\">\n <div class=\"d-flex c-tree-item__title\"\n :style=\"{ 'padding-left': indentPx + 'px' }\"\n :class=\"[ isBranch ? 'bg-light ' : '' ]\">\n <div class=\"p-2 ms-2\">\n <input\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n v-if=\"isLeaf || (branchSelectable && multiple)\"\n :id=\"id + '__item-' + valueGetter(node.value)\"\n v-model=\"selected\"\n :value=\"true\"\n :unchecked-value=\"false\"\n :indeterminate.sync=\"indeterminate\"\n @change=\"checkboxChanged(($event.target as HTMLInputElement).checked)\"\n />\n <input v-else\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n disabled\n :checked=\"indeterminate\" :indeterminate.sync=\"indeterminate\" />\n </div>\n <a class=\"c-tree-item__text d-flex align-items-center flex-grow-1 py-2 text-decoration-none\"\n style=\"cursor: pointer;\"\n :data-level=\"level\"\n data-bs-toggle=\"collapse\"\n @click.prevent=\"isLeaf ? select(!selected) : open = !open\">\n <span class=\"me-2 fa\" :class=\"[ isLeaf ? 'fa-tag' : 'fa-folder' ]\"></span>\n\n {{ node.value.title }}\n\n <span v-if=\"isBranch\" class=\"ms-auto me-3\">\n <span :class=\"[ open ? 'fa fa-chevron-up' : 'fa fa-chevron-down' ]\"></span>\n </span>\n </a>\n </div>\n\n <Vue3SlideUpDown\n v-if=\"node.children.length > 0\"\n v-model=\"open\"\n :duration=\"300\"\n class=\"c-tree-item__children\"\n >\n <TreeItem v-for=\"(child, i) of node.children\"\n :node=\"child\"\n :key=\"valueGetter(child.value)\"\n :level=\"level + 1\"\n :branch-selectable=\"branchSelectable\"\n :ref=\"setChildrenComponent\"\n @change=\"childChanged\"\n />\n </Vue3SlideUpDown>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.c-tree-item {\n &__title {\n border-bottom: 1px solid #ddd;\n }\n\n cursor: pointer;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Modal } from 'bootstrap';\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';\nimport { useHttpClient } from '../../../composable';\nimport { forceArray } from '../../../service';\nimport { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n id?: string;\n name?: string;\n types?: string[];\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n branchSelectable?: boolean;\n source?: ModalTreeSource;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n }\n);\n\nconst emits = defineEmits<{\n change: [value: any];\n input: [value: any];\n selected: [items: any[]];\n hide: [];\n}>();\n\n// provide('selectNode', selectNode);\n\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\nconst searchMatcher = inject<SearchMatcher>('searchMatcher');\n\nconst loading = ref(false);\nconst multiple = inject<boolean>('multiple', false);\nconst modalElement = useTemplateRef<HTMLDivElement>('modal')\n\nlet $modal: Modal;\n\nonMounted(() => {\n $modal = Modal.getOrCreateInstance(modalElement.value!);\n modalElement.value!.addEventListener('show.bs.modal', onShow);\n modalElement.value!.addEventListener('hide.bs.modal', onHide);\n});\n\nonUnmounted(() => {\n modalElement.value!.removeEventListener('show.bs.modal', onShow);\n modalElement.value!.removeEventListener('hide.bs.modal', onHide);\n});\n\n// Items\nconst nodes = ref<TreeNode[]>([]);\nconst selectedNodes = ref<TreeNode[]>([]);\n\nconst displayNodes = computed(() => {\n if (searchEnabled.value) {\n return searchedItems.value;\n }\n return nodes.value;\n});\n\nconst flatNodes = computed(() => flattenChildren(nodes.value));\n\nconst selectedValues = computed(() => {\n return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));\n});\n\nprovide('selectedValues', selectedValues);\n\nwatch(() => selectedValues, () => {\n emits('change', selectedValues.value);\n emits('input', selectedValues.value);\n emits('selected', selectedNodes.value);\n});\n\n// function selectNode(node: TreeNode, select: boolean) {\n// node.selected = select;\n//\n// // if (select) {\n// // if (!multiple) {\n// // selectedNodes.value = [];\n// // }\n// // if (!selectedValues.value.includes(valueGetter(node.value))) {\n// // selectedNodes.value.push(node);\n// // }\n// // } else {\n// // selectedNodes.value = selectedNodes.value.filter(\n// // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)\n// // );\n// // }\n// emits('change', selectedValues.value);\n// emits('input', selectedValues.value);\n// emits('selected', selectedNodes.value);\n// }\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n// Search\nconst q = ref('');\nconst searchEnabled = computed(() => q.value !== '');\n\nconst searchedItems = computed(() => {\n if (q.value === '') {\n return [];\n }\n\n return flatNodes.value.filter((item: TreeNode) => {\n return searchMatcher(item.value, q.value);\n });\n});\n\nasync function loadItems() {\n loading.value = true;\n const http = await useHttpClient();\n try {\n let src = props.source;\n\n if (typeof src === 'string') {\n const res = await http.get(src);\n nodes.value = res.data.data;\n } else if (typeof src === 'function') {\n nodes.value = await src();\n } else {\n if (!Array.isArray(src)) {\n src = src.children;\n }\n\n nodes.value = src;\n }\n } finally {\n loading.value = false;\n }\n}\n\n// Modal Control\nwatch(() => props.open, (v) => {\n if (v) {\n $modal.show();\n } else {\n $modal.hide();\n }\n});\n\nasync function onShow() {\n await loadItems();\n updateSelectedItemsByValue();\n}\n\nfunction onHide() {\n nodes.value = [];\n q.value = '';\n emits('hide');\n}\n\nfunction updateSelectedItemsByValue() {\n const values = forceArray(props.value);\n\n selectedNodes.value = flatNodes.value\n .filter((item: TreeNode) => {\n return values.includes(valueGetter(item.value));\n });\n}\n\nwatch(\n () => props.value,\n () => updateSelectedItemsByValue(),\n { immediate: true, deep: true }\n);\n\n</script>\n\n<template>\n <div ref=\"modal\" class=\"modal fade\" :id=\"`${id}__modal`\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"-modal-label\"\n aria-hidden=\"true\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" :id=\"`${id}__modal-label`\">\n {{ title }}\n </h4>\n <button type=\"button\" class=\"close btn-close\" data-bs-dismiss=\"modal\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n\n <div class=\"modal-body p-0\">\n <div class=\"std-form box-list m-3\">\n <div class=\"form-group\">\n <input type=\"search\" class=\"form-control\" :placeholder=\"searchText\"\n v-model=\"q\" />\n </div>\n </div>\n\n <div v-if=\"!loading\" class=\"box-list__items\">\n <TreeItem v-for=\"node of displayNodes\"\n :node\n :key=\"valueGetter(node.value)\"\n :level=\"1\"\n :branchSelectable\n />\n </div>\n <div v-else>\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border spinner-border-sm my-3\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n\n</style>\n","<script lang=\"ts\" setup>\nimport { Modal } from 'bootstrap';\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';\nimport { useHttpClient } from '../../../composable';\nimport { forceArray } from '../../../service';\nimport { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n id?: string;\n name?: string;\n types?: string[];\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n branchSelectable?: boolean;\n source?: ModalTreeSource;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n }\n);\n\nconst emits = defineEmits<{\n change: [value: any];\n input: [value: any];\n selected: [items: any[]];\n hide: [];\n}>();\n\n// provide('selectNode', selectNode);\n\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\nconst searchMatcher = inject<SearchMatcher>('searchMatcher');\n\nconst loading = ref(false);\nconst multiple = inject<boolean>('multiple', false);\nconst modalElement = useTemplateRef<HTMLDivElement>('modal')\n\nlet $modal: Modal;\n\nonMounted(() => {\n $modal = Modal.getOrCreateInstance(modalElement.value!);\n modalElement.value!.addEventListener('show.bs.modal', onShow);\n modalElement.value!.addEventListener('hide.bs.modal', onHide);\n});\n\nonUnmounted(() => {\n modalElement.value!.removeEventListener('show.bs.modal', onShow);\n modalElement.value!.removeEventListener('hide.bs.modal', onHide);\n});\n\n// Items\nconst nodes = ref<TreeNode[]>([]);\nconst selectedNodes = ref<TreeNode[]>([]);\n\nconst displayNodes = computed(() => {\n if (searchEnabled.value) {\n return searchedItems.value;\n }\n return nodes.value;\n});\n\nconst flatNodes = computed(() => flattenChildren(nodes.value));\n\nconst selectedValues = computed(() => {\n return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));\n});\n\nprovide('selectedValues', selectedValues);\n\nwatch(() => selectedValues, () => {\n emits('change', selectedValues.value);\n emits('input', selectedValues.value);\n emits('selected', selectedNodes.value);\n});\n\n// function selectNode(node: TreeNode, select: boolean) {\n// node.selected = select;\n//\n// // if (select) {\n// // if (!multiple) {\n// // selectedNodes.value = [];\n// // }\n// // if (!selectedValues.value.includes(valueGetter(node.value))) {\n// // selectedNodes.value.push(node);\n// // }\n// // } else {\n// // selectedNodes.value = selectedNodes.value.filter(\n// // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)\n// // );\n// // }\n// emits('change', selectedValues.value);\n// emits('input', selectedValues.value);\n// emits('selected', selectedNodes.value);\n// }\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n// Search\nconst q = ref('');\nconst searchEnabled = computed(() => q.value !== '');\n\nconst searchedItems = computed(() => {\n if (q.value === '') {\n return [];\n }\n\n return flatNodes.value.filter((item: TreeNode) => {\n return searchMatcher(item.value, q.value);\n });\n});\n\nasync function loadItems() {\n loading.value = true;\n const http = await useHttpClient();\n try {\n let src = props.source;\n\n if (typeof src === 'string') {\n const res = await http.get(src);\n nodes.value = res.data.data;\n } else if (typeof src === 'function') {\n nodes.value = await src();\n } else {\n if (!Array.isArray(src)) {\n src = src.children;\n }\n\n nodes.value = src;\n }\n } finally {\n loading.value = false;\n }\n}\n\n// Modal Control\nwatch(() => props.open, (v) => {\n if (v) {\n $modal.show();\n } else {\n $modal.hide();\n }\n});\n\nasync function onShow() {\n await loadItems();\n updateSelectedItemsByValue();\n}\n\nfunction onHide() {\n nodes.value = [];\n q.value = '';\n emits('hide');\n}\n\nfunction updateSelectedItemsByValue() {\n const values = forceArray(props.value);\n\n selectedNodes.value = flatNodes.value\n .filter((item: TreeNode) => {\n return values.includes(valueGetter(item.value));\n });\n}\n\nwatch(\n () => props.value,\n () => updateSelectedItemsByValue(),\n { immediate: true, deep: true }\n);\n\n</script>\n\n<template>\n <div ref=\"modal\" class=\"modal fade\" :id=\"`${id}__modal`\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"-modal-label\"\n aria-hidden=\"true\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" :id=\"`${id}__modal-label`\">\n {{ title }}\n </h4>\n <button type=\"button\" class=\"close btn-close\" data-bs-dismiss=\"modal\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n\n <div class=\"modal-body p-0\">\n <div class=\"std-form box-list m-3\">\n <div class=\"form-group\">\n <input type=\"search\" class=\"form-control\" :placeholder=\"searchText\"\n v-model=\"q\" />\n </div>\n </div>\n\n <div v-if=\"!loading\" class=\"box-list__items\">\n <TreeItem v-for=\"node of displayNodes\"\n :node\n :key=\"valueGetter(node.value)\"\n :level=\"1\"\n :branchSelectable\n />\n </div>\n <div v-else>\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border spinner-border-sm my-3\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n\n</style>\n","<script lang=\"ts\" setup>\nimport { cloneDeep } from 'lodash-es';\nimport { computed, provide, ref, watch } from 'vue';\nimport { forceArray } from '../../../service';\nimport {\n ValueGetter,\n ModalTreeSource,\n TitleGetter,\n TreeNode,\n SearchMatcher,\n MaybeArray,\n MaybePromise\n} from '../../../types';\nimport TreeModal from './TreeModal.vue';\n\nconst props = withDefaults(\n defineProps<{\n id?: string;\n name?: string;\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n source?: ModalTreeSource;\n items?: MaybeArray<TreeNode> | (() => MaybePromise<MaybeArray<TreeNode>>);\n valueGetter?: ValueGetter;\n titleGetter?: TitleGetter;\n searchMatcher?: SearchMatcher;\n modalTitle?: string;\n vertical?: boolean;\n branchSelectable?: boolean;\n selectAllChildren?: boolean;\n placeholder?: string;\n multiple?: boolean;\n buttonText?: string;\n itemClass?: string;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n selectAllChildren: false,\n placeholder: '- No selected -',\n multiple: false,\n buttonText: 'Select',\n itemClass: 'badge bg-primary badge-pill',\n searchText: 'Search',\n valueGetter: (item: any) => item.id,\n titleGetter: (item: any) => item.title,\n }\n);\n\nprovide('id', props.id);\nprovide('name', props.name);\nprovide('multiple', props.multiple);\nprovide('valueGetter', props.valueGetter);\nprovide('titleGetter', props.titleGetter);\nprovide('searchMatcher', props.searchMatcher ?? defaultSearchMatcher);\n\nfunction defaultSearchMatcher(item: any, q: string) {\n return props.titleGetter(item).toLowerCase().includes(q.toLowerCase());\n}\n\nconst selected = ref<TreeNode[]>([]);\nconst value = ref<(string|number)[]>(forceArray(props.value));\n\n// Modal\nconst treeModalOpen = ref(false);\n\nfunction openSelector() {\n treeModalOpen.value = true;\n}\n\nfunction deleteItem(i: number, node: TreeNode) {\n selected.value = selected.value.filter((it: TreeNode) => props.valueGetter(it.value) !== props.valueGetter(node.value));\n}\n\nfunction handleSelected(items: any[]) {\n selected.value = cloneDeep(items);\n}\n\nwatch(() => props.items, async (v) => {\n if (typeof v === 'function') {\n v = await v();\n }\n\n selected.value = forceArray(v).filter((node: TreeNode) => {\n return value.value.includes(props.valueGetter(node.value));\n });\n}, { immediate: true });\n\nconst selectedValues = computed(() => {\n return selected.value.map(node => props.valueGetter(node.value));\n});\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n</script>\n\n<template>\n <div class=\"c-modal-tree\">\n <div class=\"c-modal-tree__container p-2 d-flex flex-column\"\n :class=\"[ vertical ? '' : 'flex-md-row' ]\">\n <div v-if=\"canModify\" class=\"me-2 mb-2\"\n :class=\"{ 'mb-md-0': !vertical }\">\n <div class=\"btn-group\">\n <button class=\"btn btn-secondary btn-sm btn-rounded text-nowrap\" type=\"button\"\n @click=\"openSelector\">\n {{ buttonText }}\n </button>\n <button class=\"btn btn-secondary btn-sm btn-rounded\" type=\"button\"\n @click=\"selected = []\">\n <span class=\"fa fa-times\"></span>\n </button>\n </div>\n </div>\n\n <div v-if=\"selected.length > 0\">\n <TransitionGroup name=\"fade\">\n <span v-for=\"(node, i) of selected\"\n class=\"me-2 mb-2 c-item\"\n :class=\"itemClass\"\n :key=\"valueGetter(node.value)\"\n style=\"animation-duration: .3s\">\n <span>{{ titleGetter(node.value) }}</span>\n <span type=\"button\" v-if=\"canModify\"\n @click.prevent=\"deleteItem(i, node)\" class=\"ms-2\" style=\"cursor: pointer\">\n <span class=\"fa fa-times\"></span>\n </span>\n </span>\n </TransitionGroup>\n </div>\n <div v-else class=\"text-muted\">\n {{ placeholder }}\n </div>\n </div>\n\n <select multiple\n style=\"display: none;\"\n ref=\"input\"\n :id=\"id\"\n :name=\"name\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n v-bind=\"$attrs\"\n >\n <option v-for=\"id of selectedValues\" :value=\"id\" :selected=\"true\">{{ id }}</option>\n </select>\n\n <TreeModal\n :open=\"treeModalOpen\"\n @hide=\"treeModalOpen = false\"\n :id=\"id\"\n :title=\"modalTitle\"\n :source=\"source\"\n :value=\"selectedValues\"\n :branchSelectable\n v-bind=\"$attrs\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :search-text=\"searchText\"\n @selected=\"handleSelected\"\n />\n </div>\n</template>\n\n<style scoped>\n.c-item {\n padding-left: .75rem;\n padding-right: .75rem;\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { cloneDeep } from 'lodash-es';\nimport { computed, provide, ref, watch } from 'vue';\nimport { forceArray } from '../../../service';\nimport {\n ValueGetter,\n ModalTreeSource,\n TitleGetter,\n TreeNode,\n SearchMatcher,\n MaybeArray,\n MaybePromise\n} from '../../../types';\nimport TreeModal from './TreeModal.vue';\n\nconst props = withDefaults(\n defineProps<{\n id?: string;\n name?: string;\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n source?: ModalTreeSource;\n items?: MaybeArray<TreeNode> | (() => MaybePromise<MaybeArray<TreeNode>>);\n valueGetter?: ValueGetter;\n titleGetter?: TitleGetter;\n searchMatcher?: SearchMatcher;\n modalTitle?: string;\n vertical?: boolean;\n branchSelectable?: boolean;\n selectAllChildren?: boolean;\n placeholder?: string;\n multiple?: boolean;\n buttonText?: string;\n itemClass?: string;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n selectAllChildren: false,\n placeholder: '- No selected -',\n multiple: false,\n buttonText: 'Select',\n itemClass: 'badge bg-primary badge-pill',\n searchText: 'Search',\n valueGetter: (item: any) => item.id,\n titleGetter: (item: any) => item.title,\n }\n);\n\nprovide('id', props.id);\nprovide('name', props.name);\nprovide('multiple', props.multiple);\nprovide('valueGetter', props.valueGetter);\nprovide('titleGetter', props.titleGetter);\nprovide('searchMatcher', props.searchMatcher ?? defaultSearchMatcher);\n\nfunction defaultSearchMatcher(item: any, q: string) {\n return props.titleGetter(item).toLowerCase().includes(q.toLowerCase());\n}\n\nconst selected = ref<TreeNode[]>([]);\nconst value = ref<(string|number)[]>(forceArray(props.value));\n\n// Modal\nconst treeModalOpen = ref(false);\n\nfunction openSelector() {\n treeModalOpen.value = true;\n}\n\nfunction deleteItem(i: number, node: TreeNode) {\n selected.value = selected.value.filter((it: TreeNode) => props.valueGetter(it.value) !== props.valueGetter(node.value));\n}\n\nfunction handleSelected(items: any[]) {\n selected.value = cloneDeep(items);\n}\n\nwatch(() => props.items, async (v) => {\n if (typeof v === 'function') {\n v = await v();\n }\n\n selected.value = forceArray(v).filter((node: TreeNode) => {\n return value.value.includes(props.valueGetter(node.value));\n });\n}, { immediate: true });\n\nconst selectedValues = computed(() => {\n return selected.value.map(node => props.valueGetter(node.value));\n});\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n</script>\n\n<template>\n <div class=\"c-modal-tree\">\n <div class=\"c-modal-tree__container p-2 d-flex flex-column\"\n :class=\"[ vertical ? '' : 'flex-md-row' ]\">\n <div v-if=\"canModify\" class=\"me-2 mb-2\"\n :class=\"{ 'mb-md-0': !vertical }\">\n <div class=\"btn-group\">\n <button class=\"btn btn-secondary btn-sm btn-rounded text-nowrap\" type=\"button\"\n @click=\"openSelector\">\n {{ buttonText }}\n </button>\n <button class=\"btn btn-secondary btn-sm btn-rounded\" type=\"button\"\n @click=\"selected = []\">\n <span class=\"fa fa-times\"></span>\n </button>\n </div>\n </div>\n\n <div v-if=\"selected.length > 0\">\n <TransitionGroup name=\"fade\">\n <span v-for=\"(node, i) of selected\"\n class=\"me-2 mb-2 c-item\"\n :class=\"itemClass\"\n :key=\"valueGetter(node.value)\"\n style=\"animation-duration: .3s\">\n <span>{{ titleGetter(node.value) }}</span>\n <span type=\"button\" v-if=\"canModify\"\n @click.prevent=\"deleteItem(i, node)\" class=\"ms-2\" style=\"cursor: pointer\">\n <span class=\"fa fa-times\"></span>\n </span>\n </span>\n </TransitionGroup>\n </div>\n <div v-else class=\"text-muted\">\n {{ placeholder }}\n </div>\n </div>\n\n <select multiple\n style=\"display: none;\"\n ref=\"input\"\n :id=\"id\"\n :name=\"name\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n v-bind=\"$attrs\"\n >\n <option v-for=\"id of selectedValues\" :value=\"id\" :selected=\"true\">{{ id }}</option>\n </select>\n\n <TreeModal\n :open=\"treeModalOpen\"\n @hide=\"treeModalOpen = false\"\n :id=\"id\"\n :title=\"modalTitle\"\n :source=\"source\"\n :value=\"selectedValues\"\n :branchSelectable\n v-bind=\"$attrs\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :search-text=\"searchText\"\n @selected=\"handleSelected\"\n />\n </div>\n</template>\n\n<style scoped>\n.c-item {\n padding-left: .75rem;\n padding-right: .75rem;\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n</style>\n","import { data } from '../data';\nimport { useCssImport } from '../service';\nimport { createApp } from 'vue';\nimport ModalTreeApp from '../vue/components/ModalTree/ModalTreeApp.vue';\n\nconst app = createApp({\n name: 'modal-tree',\n components: {\n ModalTreeApp\n }\n});\napp.config.globalProperties.$getData = data;\n\nclass ModalTreeElement extends HTMLElement {\n static is = 'modal-tree';\n\n vm: any;\n\n connectedCallback() {\n if (!this.vm) {\n this.vm = app.mount(this);\n }\n }\n}\n\nasync function init() {\n customElements.define(ModalTreeElement.is, ModalTreeElement);\n await useCssImport('@vue-animate');\n}\n\nexport const ready = init();\n"],"x_google_ignoreList":[1],"mappings":"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"}