bani-ui 1.0.2-alpha.10 → 1.0.2-alpha.11

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 (121) hide show
  1. package/dist/es/Button-CsYVYbtY.js +105 -0
  2. package/dist/es/ButtonGroup-CUSVCVC9.js +37 -0
  3. package/dist/es/Dropdown-BVnXCHJZ.js +175 -0
  4. package/dist/es/Icon-C5WM3GNh.js +57 -0
  5. package/dist/es/Loading-DEDOSX2q.js +269 -0
  6. package/dist/es/Message-DxBWtBTF.js +203 -0
  7. package/dist/es/Popconfirm-C_5V4HaP.js +116 -0
  8. package/dist/es/Tooltip-BF6cY52d.js +263 -0
  9. package/dist/es/hooks-D92zul9o.js +78 -0
  10. package/dist/es/index.js +37 -31
  11. package/dist/es/locale/lang/af.js +2 -2
  12. package/dist/es/locale/lang/ar-eg.js +2 -2
  13. package/dist/es/locale/lang/ar.js +2 -2
  14. package/dist/es/locale/lang/az.js +2 -2
  15. package/dist/es/locale/lang/bg.js +2 -2
  16. package/dist/es/locale/lang/bn.js +2 -2
  17. package/dist/es/locale/lang/ca.js +2 -2
  18. package/dist/es/locale/lang/ckb.js +2 -2
  19. package/dist/es/locale/lang/cs.js +2 -2
  20. package/dist/es/locale/lang/da.js +2 -2
  21. package/dist/es/locale/lang/de.js +2 -2
  22. package/dist/es/locale/lang/el.js +2 -2
  23. package/dist/es/locale/lang/en.js +2 -2
  24. package/dist/es/locale/lang/eo.js +2 -2
  25. package/dist/es/locale/lang/es.js +2 -2
  26. package/dist/es/locale/lang/et.js +2 -2
  27. package/dist/es/locale/lang/eu.js +2 -2
  28. package/dist/es/locale/lang/fa.js +2 -2
  29. package/dist/es/locale/lang/fi.js +2 -2
  30. package/dist/es/locale/lang/fr.js +2 -2
  31. package/dist/es/locale/lang/he.js +2 -2
  32. package/dist/es/locale/lang/hi.js +2 -2
  33. package/dist/es/locale/lang/hr.js +2 -2
  34. package/dist/es/locale/lang/hu.js +2 -2
  35. package/dist/es/locale/lang/hy-am.js +2 -2
  36. package/dist/es/locale/lang/id.js +2 -2
  37. package/dist/es/locale/lang/index.js +132 -132
  38. package/dist/es/locale/lang/it.js +2 -2
  39. package/dist/es/locale/lang/ja.js +2 -2
  40. package/dist/es/locale/lang/kk.js +2 -2
  41. package/dist/es/locale/lang/km.js +2 -2
  42. package/dist/es/locale/lang/ko.js +2 -2
  43. package/dist/es/locale/lang/ku.js +2 -2
  44. package/dist/es/locale/lang/ky.js +2 -2
  45. package/dist/es/locale/lang/lo.js +2 -2
  46. package/dist/es/locale/lang/lt.js +2 -2
  47. package/dist/es/locale/lang/lv.js +2 -2
  48. package/dist/es/locale/lang/mg.js +2 -2
  49. package/dist/es/locale/lang/mn.js +2 -2
  50. package/dist/es/locale/lang/ms.js +2 -2
  51. package/dist/es/locale/lang/my.js +2 -2
  52. package/dist/es/locale/lang/nb-no.js +2 -2
  53. package/dist/es/locale/lang/nl.js +2 -2
  54. package/dist/es/locale/lang/no.js +2 -2
  55. package/dist/es/locale/lang/pa.js +2 -2
  56. package/dist/es/locale/lang/pl.js +2 -2
  57. package/dist/es/locale/lang/pt-br.js +2 -2
  58. package/dist/es/locale/lang/pt.js +2 -2
  59. package/dist/es/locale/lang/ro.js +2 -2
  60. package/dist/es/locale/lang/ru.js +2 -2
  61. package/dist/es/locale/lang/sk.js +2 -2
  62. package/dist/es/locale/lang/sl.js +2 -2
  63. package/dist/es/locale/lang/sr.js +2 -2
  64. package/dist/es/locale/lang/sv.js +2 -2
  65. package/dist/es/locale/lang/sw.js +2 -2
  66. package/dist/es/locale/lang/ta.js +2 -2
  67. package/dist/es/locale/lang/te.js +2 -2
  68. package/dist/es/locale/lang/th.js +2 -2
  69. package/dist/es/locale/lang/tk.js +2 -2
  70. package/dist/es/locale/lang/tr.js +2 -2
  71. package/dist/es/locale/lang/ug-cn.js +2 -2
  72. package/dist/es/locale/lang/uk.js +2 -2
  73. package/dist/es/locale/lang/uz-uz.js +2 -2
  74. package/dist/es/locale/lang/vi.js +2 -2
  75. package/dist/es/locale/lang/zh-cn.js +2 -2
  76. package/dist/es/locale/lang/zh-hk.js +2 -2
  77. package/dist/es/locale/lang/zh-mo.js +2 -2
  78. package/dist/es/locale/lang/zh-tw.js +2 -2
  79. package/dist/es/utils-Uf9tqvV5.js +69 -0
  80. package/dist/es/vendor-R0ZbR4ac.js +3515 -0
  81. package/dist/index.css +1 -1
  82. package/dist/theme/Button.css +259 -1
  83. package/dist/theme/ButtonGroup.css +48 -1
  84. package/dist/theme/Dropdown.css +117 -0
  85. package/dist/theme/Icon.css +25 -1
  86. package/dist/theme/Loading.css +55 -1
  87. package/dist/theme/Message.css +97 -1
  88. package/dist/theme/Popconfirm.css +11 -1
  89. package/dist/theme/Tooltip.css +74 -1
  90. package/dist/theme/index.css +197 -1
  91. package/dist/types/components/Button/index.d.ts +3 -3
  92. package/dist/types/components/Button/types.d.ts +2 -2
  93. package/dist/types/components/Dropdown/constants.d.ts +4 -0
  94. package/dist/types/components/Dropdown/index.d.ts +266 -0
  95. package/dist/types/components/Dropdown/types.d.ts +31 -0
  96. package/dist/types/components/index.d.ts +1 -0
  97. package/dist/umd/index.css +1 -1
  98. package/dist/umd/index.css.br +0 -0
  99. package/dist/umd/index.css.gz +0 -0
  100. package/dist/umd/index.umd.cjs +12 -12
  101. package/dist/umd/index.umd.cjs.br +0 -0
  102. package/dist/umd/index.umd.cjs.gz +0 -0
  103. package/package.json +3 -3
  104. package/dist/es/Button-DE5lOjx4.js +0 -86
  105. package/dist/es/ButtonGroup-CgAr7Q6O.js +0 -29
  106. package/dist/es/Icon-B1pHSRJ9.js +0 -50
  107. package/dist/es/Loading-BJXm3yVc.js +0 -196
  108. package/dist/es/Message-CLTFWHIN.js +0 -167
  109. package/dist/es/Popconfirm-DA_hHUdg.js +0 -99
  110. package/dist/es/Tooltip-040OoVcb.js +0 -193
  111. package/dist/es/hooks-Mfyp42JB.js +0 -58
  112. package/dist/es/utils-CnOVokX1.js +0 -51
  113. package/dist/es/vendor-CyogNz9a.js +0 -2465
  114. package/dist/theme/theme/Button.css +0 -1
  115. package/dist/theme/theme/ButtonGroup.css +0 -1
  116. package/dist/theme/theme/Icon.css +0 -1
  117. package/dist/theme/theme/Loading.css +0 -1
  118. package/dist/theme/theme/Message.css +0 -1
  119. package/dist/theme/theme/Popconfirm.css +0 -1
  120. package/dist/theme/theme/Tooltip.css +0 -1
  121. package/dist/theme/theme/index.css +0 -1
@@ -0,0 +1,105 @@
1
+ import { defineComponent, inject, computed, useSlots, ref, openBlock, createBlock, resolveDynamicComponent, unref, normalizeClass, withCtx, renderSlot, createVNode, normalizeStyle, createCommentVNode } from "vue";
2
+ import { _ as _sfc_main$1 } from "./Icon-C5WM3GNh.js";
3
+ import { faSpinner } from "@fortawesome/free-solid-svg-icons";
4
+ import { library } from "@fortawesome/fontawesome-svg-core";
5
+ import { t as throttle } from "./vendor-R0ZbR4ac.js";
6
+ import { w as withInstall } from "./utils-Uf9tqvV5.js";
7
+ const BUTTON_GROUP_CTX_KEY = Symbol(
8
+ "BUTTON_GROUP_CTX_KEY"
9
+ );
10
+ const _sfc_main = /* @__PURE__ */ defineComponent({
11
+ ...{
12
+ name: "BnButton"
13
+ },
14
+ __name: "Button",
15
+ props: {
16
+ tag: { default: "button" },
17
+ type: {},
18
+ size: {},
19
+ plain: { type: Boolean },
20
+ round: { type: Boolean },
21
+ circle: { type: Boolean },
22
+ disabled: { type: Boolean },
23
+ autofocus: { type: Boolean },
24
+ nativeType: { default: "button" },
25
+ icon: {},
26
+ loading: { type: Boolean },
27
+ loadingIcon: {},
28
+ useThrottle: { type: Boolean, default: true },
29
+ throttleDuration: { default: 500 }
30
+ },
31
+ emits: ["click"],
32
+ setup(__props, { expose: __expose, emit: __emit }) {
33
+ library.add(faSpinner);
34
+ const props = __props;
35
+ const ctx = inject(BUTTON_GROUP_CTX_KEY, void 0);
36
+ const size = computed(() => (ctx == null ? void 0 : ctx.size) ?? props.size ?? "");
37
+ const type = computed(() => (ctx == null ? void 0 : ctx.type) ?? props.type ?? "");
38
+ const disabled = computed(() => (ctx == null ? void 0 : ctx.disabled) || props.disabled || false);
39
+ const emits = __emit;
40
+ const slots = useSlots();
41
+ const _ref = ref();
42
+ const iconStyle = computed(() => ({
43
+ marginRight: slots.default ? "6px" : "0px"
44
+ }));
45
+ const handleBthClick = (e) => emits("click", e);
46
+ const handleBthClickThrottle = throttle(
47
+ handleBthClick,
48
+ props.throttleDuration,
49
+ { trailing: false }
50
+ );
51
+ __expose({
52
+ get ref() {
53
+ return _ref.value ?? void 0;
54
+ },
55
+ disabled,
56
+ size,
57
+ type
58
+ });
59
+ return (_ctx, _cache) => {
60
+ return openBlock(), createBlock(resolveDynamicComponent(props.tag), {
61
+ ref_key: "_ref",
62
+ ref: _ref,
63
+ class: normalizeClass(["er-button", {
64
+ [`er-button--${type.value}`]: type.value,
65
+ [`er-button--${size.value}`]: size.value,
66
+ "is-plain": __props.plain,
67
+ "is-round": __props.round,
68
+ "is-circle": __props.circle,
69
+ "is-disabled": disabled.value,
70
+ "is-loading": __props.loading
71
+ }]),
72
+ autofocus: __props.autofocus,
73
+ type: __props.tag === "button" ? __props.nativeType : void 0,
74
+ disabled: disabled.value || __props.loading,
75
+ onClick: _cache[0] || (_cache[0] = (e) => __props.useThrottle ? unref(handleBthClickThrottle)(e) : handleBthClick(e))
76
+ }, {
77
+ default: withCtx(() => [
78
+ __props.loading ? renderSlot(_ctx.$slots, "loading", { key: 0 }, () => [
79
+ createVNode(_sfc_main$1, {
80
+ class: "loading-icon",
81
+ icon: __props.loadingIcon ?? unref(faSpinner),
82
+ style: normalizeStyle(iconStyle.value),
83
+ size: "1x",
84
+ spin: ""
85
+ }, null, 8, ["icon", "style"])
86
+ ]) : createCommentVNode("", true),
87
+ __props.icon && !__props.loading ? (openBlock(), createBlock(_sfc_main$1, {
88
+ key: 1,
89
+ icon: __props.icon,
90
+ size: "1x",
91
+ style: normalizeStyle(iconStyle.value)
92
+ }, null, 8, ["icon", "style"])) : createCommentVNode("", true),
93
+ renderSlot(_ctx.$slots, "default")
94
+ ]),
95
+ _: 3
96
+ }, 8, ["autofocus", "type", "disabled", "class"]);
97
+ };
98
+ }
99
+ });
100
+ const BnButton = withInstall(_sfc_main);
101
+ export {
102
+ BUTTON_GROUP_CTX_KEY as B,
103
+ _sfc_main as _,
104
+ BnButton as a
105
+ };
@@ -0,0 +1,37 @@
1
+ import { defineComponent, provide, reactive, toRef, openBlock, createElementBlock, renderSlot } from "vue";
2
+ import { B as BUTTON_GROUP_CTX_KEY } from "./Button-CsYVYbtY.js";
3
+ import { w as withInstall } from "./utils-Uf9tqvV5.js";
4
+ import "@fortawesome/free-solid-svg-icons";
5
+ const _hoisted_1 = { class: "er-button-group" };
6
+ const _sfc_main = /* @__PURE__ */ defineComponent({
7
+ ...{
8
+ name: "BnButtonGroup"
9
+ },
10
+ __name: "ButtonGroup",
11
+ props: {
12
+ size: {},
13
+ type: {},
14
+ disabled: { type: Boolean }
15
+ },
16
+ setup(__props) {
17
+ const props = __props;
18
+ provide(
19
+ BUTTON_GROUP_CTX_KEY,
20
+ reactive({
21
+ size: toRef(props, "size"),
22
+ type: toRef(props, "type"),
23
+ disabled: toRef(props, "disabled")
24
+ })
25
+ );
26
+ return (_ctx, _cache) => {
27
+ return openBlock(), createElementBlock("div", _hoisted_1, [
28
+ renderSlot(_ctx.$slots, "default")
29
+ ]);
30
+ };
31
+ }
32
+ });
33
+ const BnButtonGroup = withInstall(_sfc_main);
34
+ export {
35
+ BnButtonGroup as B,
36
+ _sfc_main as _
37
+ };
@@ -0,0 +1,175 @@
1
+ import { defineComponent, inject, computed, openBlock, createElementBlock, Fragment, createCommentVNode, createElementVNode, normalizeClass, unref, renderSlot, createTextVNode, toDisplayString, useSlots, ref, provide, createVNode, mergeProps, withCtx, createBlock, renderList } from "vue";
2
+ import { b as useId } from "./hooks-D92zul9o.js";
3
+ import { _ as _sfc_main$2 } from "./ButtonGroup-CUSVCVC9.js";
4
+ import { _ as _sfc_main$3 } from "./Button-CsYVYbtY.js";
5
+ import { B as BnTooltip } from "./Tooltip-BF6cY52d.js";
6
+ import { faAngleDown } from "@fortawesome/free-solid-svg-icons";
7
+ import { library } from "@fortawesome/fontawesome-svg-core";
8
+ import { p as omit, k as isNil } from "./vendor-R0ZbR4ac.js";
9
+ import { w as withInstall } from "./utils-Uf9tqvV5.js";
10
+ const DROPDOWN_CTX_KEY = Symbol("dropdownContext");
11
+ const _hoisted_1$1 = {
12
+ key: 0,
13
+ role: "separator",
14
+ class: "divided-placeholder"
15
+ };
16
+ const _hoisted_2 = ["id"];
17
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
18
+ ...{
19
+ name: "BnDropdownItem",
20
+ inheritAttrs: false
21
+ },
22
+ __name: "DropdownItem",
23
+ props: {
24
+ command: { default: useId().value },
25
+ label: {},
26
+ disabled: { type: Boolean, default: false },
27
+ divided: { type: Boolean }
28
+ },
29
+ setup(__props) {
30
+ const props = __props;
31
+ const ctx = inject(DROPDOWN_CTX_KEY);
32
+ const size = computed(() => ctx == null ? void 0 : ctx.size.value);
33
+ function handleClick() {
34
+ if (props.disabled) return;
35
+ ctx == null ? void 0 : ctx.handleItemClick(props);
36
+ }
37
+ return (_ctx, _cache) => {
38
+ return openBlock(), createElementBlock(Fragment, null, [
39
+ __props.divided ? (openBlock(), createElementBlock("li", _hoisted_1$1)) : createCommentVNode("", true),
40
+ createElementVNode("li", {
41
+ id: `dropdown-item-${__props.command ?? unref(useId)().value}`,
42
+ class: normalizeClass({
43
+ "er-dropdown__item": true,
44
+ ["er-dropdown__item--" + size.value]: size.value,
45
+ "is-disabled": __props.disabled,
46
+ "is-divided": __props.divided
47
+ }),
48
+ onClick: handleClick
49
+ }, [
50
+ renderSlot(_ctx.$slots, "default", {}, () => [
51
+ createTextVNode(toDisplayString(__props.label), 1)
52
+ ])
53
+ ], 10, _hoisted_2)
54
+ ], 64);
55
+ };
56
+ }
57
+ });
58
+ const _hoisted_1 = { class: "er-dropdown__menu" };
59
+ const _sfc_main = /* @__PURE__ */ defineComponent({
60
+ ...{
61
+ name: "BnDropdown",
62
+ inheritAttrs: false
63
+ },
64
+ __name: "Dropdown",
65
+ props: {
66
+ type: {},
67
+ size: {},
68
+ items: { default: () => [] },
69
+ hideOnClick: { type: Boolean, default: true },
70
+ splitButton: { type: Boolean },
71
+ content: {},
72
+ trigger: {},
73
+ placement: {},
74
+ manual: { type: Boolean },
75
+ disabled: { type: Boolean },
76
+ popperOptions: {},
77
+ transition: {},
78
+ showTimeout: {},
79
+ hideTimeout: {}
80
+ },
81
+ emits: ["visible-change", "command", "click"],
82
+ setup(__props, { expose: __expose, emit: __emit }) {
83
+ library.add(faAngleDown);
84
+ const props = __props;
85
+ const emits = __emit;
86
+ useSlots();
87
+ const tooltipRef = ref();
88
+ const triggerRef = ref();
89
+ const virtualRef = computed(() => {
90
+ var _a;
91
+ return ((_a = triggerRef.value) == null ? void 0 : _a.ref) ?? void 0;
92
+ });
93
+ const tooltipProps = computed(
94
+ () => omit(props, ["items", "hideAfterClick", "size", "type", "splitButton"])
95
+ );
96
+ function handleItemClick(e) {
97
+ var _a;
98
+ props.hideOnClick && ((_a = tooltipRef.value) == null ? void 0 : _a.hide());
99
+ !isNil(e.command) && emits("command", e.command);
100
+ }
101
+ provide(DROPDOWN_CTX_KEY, {
102
+ handleItemClick,
103
+ size: computed(() => props.size)
104
+ });
105
+ __expose({
106
+ open: () => {
107
+ var _a;
108
+ return (_a = tooltipRef.value) == null ? void 0 : _a.show();
109
+ },
110
+ close: () => {
111
+ var _a;
112
+ return (_a = tooltipRef.value) == null ? void 0 : _a.hide();
113
+ }
114
+ });
115
+ return (_ctx, _cache) => {
116
+ return openBlock(), createElementBlock("div", {
117
+ class: normalizeClass(["er-dropdown", { "is-disabled": props.disabled }])
118
+ }, [
119
+ createVNode(BnTooltip, mergeProps({
120
+ ref_key: "tooltipRef",
121
+ ref: tooltipRef
122
+ }, tooltipProps.value, {
123
+ "virtual-triggering": __props.splitButton,
124
+ "virtual-ref": virtualRef.value,
125
+ onVisibleChange: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("visible-change", $event))
126
+ }), {
127
+ content: withCtx(() => [
128
+ createElementVNode("div", _hoisted_1, [
129
+ renderSlot(_ctx.$slots, "dropdown", {}, () => [
130
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
131
+ return openBlock(), createBlock(_sfc_main$1, mergeProps({
132
+ key: item.command,
133
+ ref_for: true
134
+ }, item), null, 16);
135
+ }), 128))
136
+ ])
137
+ ])
138
+ ]),
139
+ default: withCtx(() => [
140
+ __props.splitButton ? (openBlock(), createBlock(_sfc_main$2, {
141
+ key: 0,
142
+ type: __props.type,
143
+ size: __props.size,
144
+ disabled: __props.disabled
145
+ }, {
146
+ default: withCtx(() => [
147
+ createVNode(_sfc_main$3, {
148
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
149
+ }, {
150
+ default: withCtx(() => [
151
+ renderSlot(_ctx.$slots, "default")
152
+ ]),
153
+ _: 3
154
+ }),
155
+ createVNode(_sfc_main$3, {
156
+ ref_key: "triggerRef",
157
+ ref: triggerRef,
158
+ icon: "angle-down"
159
+ }, null, 512)
160
+ ]),
161
+ _: 3
162
+ }, 8, ["type", "size", "disabled"])) : renderSlot(_ctx.$slots, "default", { key: 1 })
163
+ ]),
164
+ _: 3
165
+ }, 16, ["virtual-triggering", "virtual-ref"])
166
+ ], 2);
167
+ };
168
+ }
169
+ });
170
+ const BnDropdown = withInstall(_sfc_main);
171
+ const BnDropdownItem = withInstall(_sfc_main$1);
172
+ export {
173
+ BnDropdown as B,
174
+ BnDropdownItem as a
175
+ };
@@ -0,0 +1,57 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, mergeProps, createVNode, unref, normalizeProps, guardReactiveProps } from "vue";
2
+ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
3
+ import { p as omit } from "./vendor-R0ZbR4ac.js";
4
+ import { w as withInstall } from "./utils-Uf9tqvV5.js";
5
+ import "@fortawesome/free-solid-svg-icons";
6
+ const _sfc_main = /* @__PURE__ */ defineComponent({
7
+ ...{
8
+ name: "BnIcon",
9
+ inheritAttrs: false
10
+ },
11
+ __name: "Icon",
12
+ props: {
13
+ border: { type: Boolean },
14
+ fixedWidth: { type: Boolean },
15
+ flip: {},
16
+ icon: {},
17
+ mask: {},
18
+ listItem: { type: Boolean },
19
+ pull: {},
20
+ pulse: { type: Boolean },
21
+ rotation: {},
22
+ swapOpacity: { type: Boolean },
23
+ size: {},
24
+ spin: { type: Boolean },
25
+ transform: {},
26
+ symbol: { type: [Boolean, String] },
27
+ title: {},
28
+ inverse: { type: Boolean },
29
+ bounce: { type: Boolean },
30
+ shake: { type: Boolean },
31
+ beat: { type: Boolean },
32
+ fade: { type: Boolean },
33
+ beatFade: { type: Boolean },
34
+ spinPulse: { type: Boolean },
35
+ spinReverse: { type: Boolean },
36
+ type: {},
37
+ color: {}
38
+ },
39
+ setup(__props) {
40
+ const props = __props;
41
+ const filterProps = computed(() => omit(props, ["type", "color"]));
42
+ const customStyles = computed(() => ({ color: props.color ?? void 0 }));
43
+ return (_ctx, _cache) => {
44
+ return openBlock(), createElementBlock("i", mergeProps({
45
+ class: ["er-icon", [`er-icon--${__props.type}`]],
46
+ style: customStyles.value
47
+ }, _ctx.$attrs), [
48
+ createVNode(unref(FontAwesomeIcon), normalizeProps(guardReactiveProps(filterProps.value)), null, 16)
49
+ ], 16);
50
+ };
51
+ }
52
+ });
53
+ const BnIcon = withInstall(_sfc_main);
54
+ export {
55
+ BnIcon as B,
56
+ _sfc_main as _
57
+ };
@@ -0,0 +1,269 @@
1
+ import { defineComponent, useCssVars, computed, openBlock, createBlock, Transition, withCtx, withDirectives, createElementVNode, normalizeClass, createCommentVNode, createElementBlock, toDisplayString, vShow, nextTick, ref, reactive, createApp } from "vue";
2
+ import { e as useZIndex } from "./hooks-D92zul9o.js";
3
+ import { _ as _sfc_main$1 } from "./Icon-C5WM3GNh.js";
4
+ import { m as isString, k as isNil, a as defer, e as delay } from "./vendor-R0ZbR4ac.js";
5
+ const _hoisted_1 = { class: "er-loading__spinner" };
6
+ const _hoisted_2 = {
7
+ key: 1,
8
+ class: "er-loading-text"
9
+ };
10
+ const _sfc_main = /* @__PURE__ */ defineComponent({
11
+ ...{
12
+ name: "BnLoading",
13
+ inheritAttrs: false
14
+ },
15
+ __name: "Loading",
16
+ props: {
17
+ visible: {},
18
+ background: {},
19
+ spinner: {},
20
+ text: {},
21
+ fullscreen: {},
22
+ lock: {},
23
+ beforeClose: { type: Function },
24
+ closed: { type: Function },
25
+ target: {},
26
+ body: { type: Boolean },
27
+ zIndex: {},
28
+ onAfterLeave: { type: Function }
29
+ },
30
+ setup(__props) {
31
+ useCssVars((_ctx) => ({
32
+ "v098d7d6e": _ctx.background,
33
+ "v1880a613": _ctx.zIndex
34
+ }));
35
+ const props = __props;
36
+ const iconName = computed(() => {
37
+ if (isString(props.spinner)) {
38
+ return props.spinner;
39
+ }
40
+ return "spinner";
41
+ });
42
+ return (_ctx, _cache) => {
43
+ return openBlock(), createBlock(Transition, {
44
+ name: "fade-in-linear",
45
+ onAfterLeave: __props.onAfterLeave
46
+ }, {
47
+ default: withCtx(() => [
48
+ withDirectives(createElementVNode("div", {
49
+ class: normalizeClass(["er-loading er-loading__mask", { "is-fullscreen": __props.fullscreen }])
50
+ }, [
51
+ createElementVNode("div", _hoisted_1, [
52
+ props.spinner !== false ? (openBlock(), createBlock(_sfc_main$1, {
53
+ key: 0,
54
+ icon: iconName.value,
55
+ spin: ""
56
+ }, null, 8, ["icon"])) : createCommentVNode("", true),
57
+ __props.text ? (openBlock(), createElementBlock("p", _hoisted_2, toDisplayString(__props.text), 1)) : createCommentVNode("", true)
58
+ ])
59
+ ], 2), [
60
+ [vShow, props.visible.value]
61
+ ])
62
+ ]),
63
+ _: 1
64
+ }, 8, ["onAfterLeave"]);
65
+ };
66
+ }
67
+ });
68
+ const RELATIVE_CLASS = "er-loading-parent--relative";
69
+ const HIDDEN_CLASS = "er-loading-parent--hiden";
70
+ const LOADING_NUMB_KEY = "er-loading-numb";
71
+ const instanceMap = /* @__PURE__ */ new Map();
72
+ const { nextZIndex } = useZIndex(3e4);
73
+ function createLoadingComponent(options) {
74
+ const visible = ref(options.visible);
75
+ const afterLeaveFlag = ref(false);
76
+ const handleAfterLeave = () => {
77
+ if (!afterLeaveFlag.value) return;
78
+ destory();
79
+ };
80
+ const data = reactive({
81
+ ...options,
82
+ onAfterLeave: handleAfterLeave
83
+ });
84
+ const setText = (text) => data.text = text;
85
+ const destory = () => {
86
+ var _a, _b;
87
+ const target = data.parent;
88
+ subtLoadingNumb(target);
89
+ if (getLoadingNumb(target)) return;
90
+ delay(() => {
91
+ removeRelativeClass(target);
92
+ removeHiddenClass(target);
93
+ }, 1);
94
+ instanceMap.delete(target ?? document.body);
95
+ (_b = (_a = vm.$el) == null ? void 0 : _a.parentNode) == null ? void 0 : _b.removeChild(vm.$el);
96
+ app.unmount();
97
+ };
98
+ let afterLeaveTimer;
99
+ const close = () => {
100
+ var _a;
101
+ if (options.beforeClose && !options.beforeClose()) return;
102
+ afterLeaveFlag.value = true;
103
+ clearTimeout(afterLeaveTimer);
104
+ afterLeaveTimer = defer(handleAfterLeave);
105
+ visible.value = false;
106
+ (_a = options.closed) == null ? void 0 : _a.call(options);
107
+ };
108
+ const app = createApp(_sfc_main, {
109
+ ...data,
110
+ zIndex: data.fullscreen ? nextZIndex() : void 0,
111
+ visible
112
+ });
113
+ const vm = app.mount(document.createElement("div"));
114
+ return {
115
+ get $el() {
116
+ return vm.$el;
117
+ },
118
+ vm,
119
+ close,
120
+ visible,
121
+ setText
122
+ };
123
+ }
124
+ function resolveOptions(options) {
125
+ let target;
126
+ if (isString(options.target)) {
127
+ target = document.querySelector(options.target) ?? document.body;
128
+ } else {
129
+ target = options.target || document.body;
130
+ }
131
+ return {
132
+ parent: target === document.body || options.body ? document.body : target,
133
+ background: options.background ?? "rgba(0, 0, 0, 0.5)",
134
+ spinner: options.spinner,
135
+ text: options.text,
136
+ fullscreen: target === document.body && (options.fullscreen ?? true),
137
+ lock: options.lock ?? false,
138
+ visible: options.visible ?? true,
139
+ target
140
+ };
141
+ }
142
+ function addRelativeClass(target = document.body) {
143
+ target.classList.add(RELATIVE_CLASS);
144
+ }
145
+ function removeRelativeClass(target = document.body) {
146
+ target.classList.remove(RELATIVE_CLASS);
147
+ }
148
+ function addHiddenClass(target = document.body) {
149
+ target.classList.add(HIDDEN_CLASS);
150
+ }
151
+ function removeHiddenClass(target = document.body) {
152
+ target.classList.remove(HIDDEN_CLASS);
153
+ }
154
+ function getLoadingNumb(target = document.body) {
155
+ return target.getAttribute(LOADING_NUMB_KEY);
156
+ }
157
+ function removeLoadingNumb(target = document.body) {
158
+ target.removeAttribute(LOADING_NUMB_KEY);
159
+ }
160
+ function addLoadingNumb(target = document.body) {
161
+ const numb = getLoadingNumb(target) ?? "0";
162
+ target.setAttribute(LOADING_NUMB_KEY, `${Number.parseInt(numb) + 1}`);
163
+ }
164
+ function subtLoadingNumb(target = document.body) {
165
+ const numb = getLoadingNumb(target);
166
+ if (numb) {
167
+ const newNumb = Number.parseInt(numb) - 1;
168
+ if (newNumb === 0) {
169
+ removeLoadingNumb(target);
170
+ } else {
171
+ target.setAttribute(LOADING_NUMB_KEY, `${newNumb}`);
172
+ }
173
+ }
174
+ }
175
+ function addClass(options, parent = document.body) {
176
+ if (options.lock) {
177
+ addHiddenClass(parent);
178
+ } else {
179
+ removeHiddenClass(parent);
180
+ }
181
+ addRelativeClass(parent);
182
+ }
183
+ let fullscreenInstance = null;
184
+ function Loading(options = {}) {
185
+ var _a;
186
+ const resolved = resolveOptions(options);
187
+ const target = resolved.parent ?? document.body;
188
+ if (resolved.fullscreen && !isNil(fullscreenInstance)) {
189
+ return fullscreenInstance;
190
+ }
191
+ addLoadingNumb(resolved == null ? void 0 : resolved.parent);
192
+ if (instanceMap.has(target)) {
193
+ return instanceMap.get(target);
194
+ }
195
+ const instance = createLoadingComponent({
196
+ ...resolved,
197
+ closed: () => {
198
+ var _a2;
199
+ (_a2 = resolved.closed) == null ? void 0 : _a2.call(resolved);
200
+ if (resolved.fullscreen) {
201
+ fullscreenInstance = null;
202
+ }
203
+ }
204
+ });
205
+ addClass(options, resolved == null ? void 0 : resolved.parent);
206
+ (_a = resolved.parent) == null ? void 0 : _a.appendChild(instance.$el);
207
+ nextTick(() => instance.visible.value = !!resolved.visible);
208
+ if (resolved.fullscreen) {
209
+ fullscreenInstance = instance;
210
+ }
211
+ instanceMap.set(target, instance);
212
+ return instance;
213
+ }
214
+ const INSTANCE_KEY = Symbol("loading");
215
+ function createInstance(el, binding) {
216
+ const getProp = (name) => {
217
+ return el.getAttribute(`er-loading-${name}`);
218
+ };
219
+ const getModifier = (name) => {
220
+ return binding.modifiers[name];
221
+ };
222
+ const fullscreen = getModifier("fullscreen");
223
+ const options = {
224
+ text: getProp("text"),
225
+ spinner: getProp("spinner"),
226
+ background: getProp("background"),
227
+ target: fullscreen ? void 0 : el,
228
+ body: getModifier("body"),
229
+ lock: getModifier("lock"),
230
+ fullscreen
231
+ };
232
+ el[INSTANCE_KEY] = {
233
+ options,
234
+ instance: Loading(options)
235
+ };
236
+ }
237
+ const vLoading = {
238
+ mounted(el, binding) {
239
+ if (binding.value) createInstance(el, binding);
240
+ },
241
+ updated(el, binding) {
242
+ var _a, _b;
243
+ if (binding.oldValue === binding.value) return;
244
+ if (binding.value && !binding.oldValue) {
245
+ createInstance(el, binding);
246
+ return;
247
+ }
248
+ (_b = (_a = el[INSTANCE_KEY]) == null ? void 0 : _a.instance) == null ? void 0 : _b.close();
249
+ },
250
+ unmounted(el) {
251
+ var _a;
252
+ (_a = el[INSTANCE_KEY]) == null ? void 0 : _a.instance.close();
253
+ el[INSTANCE_KEY] = void 0;
254
+ }
255
+ };
256
+ const BnLoading = {
257
+ name: "BnLoading",
258
+ install(app) {
259
+ app.directive("loading", vLoading);
260
+ app.config.globalProperties.$loading = Loading;
261
+ },
262
+ directive: vLoading,
263
+ service: Loading
264
+ };
265
+ export {
266
+ BnLoading as B,
267
+ Loading as L,
268
+ vLoading as v
269
+ };