jky-component-lib 0.0.80 → 0.0.88

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 (39) hide show
  1. package/dist/es/components.d.ts +1 -0
  2. package/dist/es/components.js +4 -1
  3. package/dist/es/index.js +2 -0
  4. package/dist/es/modal/Footer.vue.d.ts +10 -0
  5. package/dist/es/modal/Footer.vue.js +59 -0
  6. package/dist/es/modal/Footer.vue2.js +4 -0
  7. package/dist/es/modal/Header.vue.d.ts +37 -0
  8. package/dist/es/modal/Header.vue.js +79 -0
  9. package/dist/es/modal/Header.vue2.js +4 -0
  10. package/dist/es/modal/Modal.vue.d.ts +75 -0
  11. package/dist/es/modal/Modal.vue.js +224 -0
  12. package/dist/es/modal/Modal.vue3.js +5 -0
  13. package/dist/es/modal/index.d.ts +5 -0
  14. package/dist/es/modal/index.js +8 -0
  15. package/dist/es/modal/style.css +8 -0
  16. package/dist/es/package.json.js +1 -1
  17. package/dist/es/page-layout/PageLayout.vue.d.ts +1 -0
  18. package/dist/es/page-layout/PageLayout.vue.js +10 -10
  19. package/dist/es/style.css +116 -0
  20. package/dist/lib/components.d.ts +1 -0
  21. package/dist/lib/components.js +21 -18
  22. package/dist/lib/index.js +14 -12
  23. package/dist/lib/modal/Footer.vue.d.ts +10 -0
  24. package/dist/lib/modal/Footer.vue.js +59 -0
  25. package/dist/lib/modal/Footer.vue2.js +4 -0
  26. package/dist/lib/modal/Header.vue.d.ts +37 -0
  27. package/dist/lib/modal/Header.vue.js +79 -0
  28. package/dist/lib/modal/Header.vue2.js +4 -0
  29. package/dist/lib/modal/Modal.vue.d.ts +75 -0
  30. package/dist/lib/modal/Modal.vue.js +224 -0
  31. package/dist/lib/modal/Modal.vue3.js +5 -0
  32. package/dist/lib/modal/index.d.ts +5 -0
  33. package/dist/lib/modal/index.js +8 -0
  34. package/dist/lib/modal/style.css +8 -0
  35. package/dist/lib/package.json.js +1 -1
  36. package/dist/lib/page-layout/PageLayout.vue.d.ts +1 -0
  37. package/dist/lib/page-layout/PageLayout.vue.js +9 -9
  38. package/dist/lib/style.css +116 -0
  39. package/package.json +5 -4
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
22
+ const vue = require("vue");
23
+ const ElementPlus = require("element-plus");
24
+ const Footer_vue_vue_type_script_setup_true_lang = require("./Footer.vue.js");
25
+ const Header_vue_vue_type_script_setup_true_lang = require("./Header.vue.js");
26
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValues({}, {
27
+ name: "JkyModal",
28
+ inheritAttrs: false
29
+ }), {
30
+ __name: "Modal",
31
+ props: /* @__PURE__ */ vue.mergeModels({
32
+ title: { default: "" },
33
+ dialogProps: {},
34
+ drawerProps: {},
35
+ confirmText: { default: "确认" },
36
+ cancelText: { default: "取消" }
37
+ }, {
38
+ "modelValue": __spreadValues({ type: Boolean }, {
39
+ default: false
40
+ }),
41
+ "modelModifiers": {},
42
+ "mode": {
43
+ default: "drawer"
44
+ },
45
+ "modeModifiers": {},
46
+ "fullscreen": __spreadValues({ type: Boolean }, {
47
+ default: false
48
+ }),
49
+ "fullscreenModifiers": {},
50
+ "direction": {
51
+ default: "rtl"
52
+ },
53
+ "directionModifiers": {}
54
+ }),
55
+ emits: /* @__PURE__ */ vue.mergeModels(["update:modelValue", "open", "opened", "close", "closed", "typeChange", "confirm", "cancel"], ["update:modelValue", "update:mode", "update:fullscreen", "update:direction"]),
56
+ setup(__props, { emit: __emit }) {
57
+ const props = __props;
58
+ const emit = __emit;
59
+ const attrs = vue.useAttrs();
60
+ const modelValue = vue.useModel(__props, "modelValue");
61
+ const mode = vue.useModel(__props, "mode");
62
+ const fullscreen = vue.useModel(__props, "fullscreen");
63
+ const direction = vue.useModel(__props, "direction");
64
+ function handleTypeChange() {
65
+ if (fullscreen.value) {
66
+ fullscreen.value = false;
67
+ setTimeout(() => {
68
+ mode.value = mode.value === "drawer" ? "dialog" : "drawer";
69
+ }, 150);
70
+ } else {
71
+ mode.value = mode.value === "drawer" ? "dialog" : "drawer";
72
+ }
73
+ }
74
+ function toggleFullscreen() {
75
+ fullscreen.value = !fullscreen.value;
76
+ }
77
+ function toggleDirection() {
78
+ const directions = ["rtl", "ltr", "ttb", "btt"];
79
+ const currentIndex = directions.indexOf(direction.value);
80
+ const nextIndex = (currentIndex + 1) % directions.length;
81
+ direction.value = directions[nextIndex];
82
+ }
83
+ function handleClose() {
84
+ modelValue.value = false;
85
+ }
86
+ function handleConfirm() {
87
+ handleClose();
88
+ emit("confirm");
89
+ }
90
+ function handleCancel() {
91
+ handleClose();
92
+ emit("cancel");
93
+ }
94
+ const footerClass = vue.computed(
95
+ () => {
96
+ return [
97
+ "p-0 pt-0! sticky bottom-0 bg-white border-t border-solid border-t-black/15",
98
+ attrs.footerClass || attrs["footer-class"]
99
+ ].filter(Boolean).join(" ");
100
+ }
101
+ );
102
+ const bodyClass = vue.computed(() => {
103
+ return [
104
+ "px-4!",
105
+ attrs.bodyClass || attrs["body-class"]
106
+ ].filter(Boolean).join(" ");
107
+ });
108
+ const headerClass = vue.computed(() => {
109
+ return [
110
+ "p-0 mb-0!",
111
+ attrs.headerClass || attrs["header-class"]
112
+ ].filter(Boolean).join(" ");
113
+ });
114
+ return (_ctx, _cache) => {
115
+ var _a, _b, _c;
116
+ return mode.value === "dialog" ? (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElDialog), vue.mergeProps({
117
+ key: 0,
118
+ modelValue: modelValue.value,
119
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
120
+ title: __props.title,
121
+ width: typeof ((_a = props.dialogProps) == null ? void 0 : _a.width) === "number" ? `${props.dialogProps.width}px` : (_b = props.dialogProps) == null ? void 0 : _b.width,
122
+ class: "p-0! jky-modal",
123
+ "body-class": bodyClass.value,
124
+ "footer-class": footerClass.value,
125
+ "header-class": headerClass.value
126
+ }, props.dialogProps, {
127
+ "show-close": false,
128
+ fullscreen: fullscreen.value,
129
+ style: { "--el-dialog-padding-primary": 0 },
130
+ onOpened: _cache[1] || (_cache[1] = ($event) => emit("opened")),
131
+ onClosed: _cache[2] || (_cache[2] = ($event) => emit("closed"))
132
+ }), {
133
+ header: vue.withCtx(() => [
134
+ _ctx.$slots.header ? vue.renderSlot(_ctx.$slots, "header", {
135
+ key: 0,
136
+ fullscreen: fullscreen.value,
137
+ close: handleClose,
138
+ toggleFullscreen,
139
+ toggleType: handleTypeChange
140
+ }) : (vue.openBlock(), vue.createBlock(Header_vue_vue_type_script_setup_true_lang.default, {
141
+ key: 1,
142
+ fullscreen: fullscreen.value,
143
+ mode: mode.value,
144
+ title: __props.title,
145
+ onFullscreen: toggleFullscreen,
146
+ onClose: handleClose,
147
+ onToggle: handleTypeChange
148
+ }, null, 8, ["fullscreen", "mode", "title"]))
149
+ ]),
150
+ footer: vue.withCtx(() => [
151
+ _ctx.$slots.footer ? vue.renderSlot(_ctx.$slots, "footer", { key: 0 }) : (vue.openBlock(), vue.createBlock(Footer_vue_vue_type_script_setup_true_lang.default, {
152
+ key: 1,
153
+ "confirm-text": __props.confirmText,
154
+ "cancel-text": __props.cancelText,
155
+ onConfirm: handleConfirm,
156
+ onCancel: handleCancel
157
+ }, null, 8, ["confirm-text", "cancel-text"]))
158
+ ]),
159
+ default: vue.withCtx(() => [
160
+ vue.createVNode(vue.unref(ElementPlus.ElScrollbar), {
161
+ "max-height": fullscreen.value ? "100%" : "60vh"
162
+ }, {
163
+ default: vue.withCtx(() => [
164
+ vue.renderSlot(_ctx.$slots, "default")
165
+ ]),
166
+ _: 3
167
+ }, 8, ["max-height"])
168
+ ]),
169
+ _: 3
170
+ }, 16, ["modelValue", "title", "width", "body-class", "footer-class", "header-class", "fullscreen"])) : (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElDrawer), vue.mergeProps({
171
+ key: 1,
172
+ modelValue: modelValue.value,
173
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => modelValue.value = $event),
174
+ title: __props.title,
175
+ direction: direction.value,
176
+ class: "p-0! jky-modal jky-modal--drawer",
177
+ "body-class": bodyClass.value,
178
+ "footer-class": footerClass.value,
179
+ "header-class": headerClass.value
180
+ }, props.drawerProps, {
181
+ "show-close": false,
182
+ size: fullscreen.value ? "100%" : (_c = props.drawerProps) == null ? void 0 : _c.size,
183
+ style: { "--el-drawer-padding-primary": 0 },
184
+ onOpened: _cache[4] || (_cache[4] = ($event) => emit("opened")),
185
+ onClosed: _cache[5] || (_cache[5] = ($event) => emit("closed"))
186
+ }), {
187
+ header: vue.withCtx(() => [
188
+ _ctx.$slots.header ? vue.renderSlot(_ctx.$slots, "header", {
189
+ key: 0,
190
+ fullscreen: fullscreen.value,
191
+ close: handleClose,
192
+ toggleFullscreen,
193
+ toggleType: handleTypeChange,
194
+ toggleDirection
195
+ }) : (vue.openBlock(), vue.createBlock(Header_vue_vue_type_script_setup_true_lang.default, {
196
+ key: 1,
197
+ fullscreen: fullscreen.value,
198
+ mode: mode.value,
199
+ "drawer-direction": direction.value,
200
+ title: __props.title,
201
+ onFullscreen: toggleFullscreen,
202
+ onClose: handleClose,
203
+ onToggle: handleTypeChange,
204
+ onToggleDirection: toggleDirection
205
+ }, null, 8, ["fullscreen", "mode", "drawer-direction", "title"]))
206
+ ]),
207
+ footer: vue.withCtx(() => [
208
+ _ctx.$slots.footer ? vue.renderSlot(_ctx.$slots, "footer", { key: 0 }) : (vue.openBlock(), vue.createBlock(Footer_vue_vue_type_script_setup_true_lang.default, {
209
+ key: 1,
210
+ "confirm-text": __props.confirmText,
211
+ "cancel-text": __props.cancelText,
212
+ onConfirm: handleConfirm,
213
+ onCancel: handleCancel
214
+ }, null, 8, ["confirm-text", "cancel-text"]))
215
+ ]),
216
+ default: vue.withCtx(() => [
217
+ vue.renderSlot(_ctx.$slots, "default")
218
+ ]),
219
+ _: 3
220
+ }, 16, ["modelValue", "title", "direction", "body-class", "footer-class", "header-class", "size"]));
221
+ };
222
+ }
223
+ }));
224
+ exports.default = _sfc_main;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const Modal_vue_vue_type_script_setup_true_lang = require("./Modal.vue.js");
4
+ ;/* empty css */
5
+ exports.default = Modal_vue_vue_type_script_setup_true_lang.default;
@@ -0,0 +1,5 @@
1
+ import { InstallWithSFC } from '../utils/types';
2
+ import { default as Modal } from './Modal.vue';
3
+ export type { ModalEmits, ModalProps, ModalSlots, ModalType, } from './types';
4
+ export declare const JkyModal: InstallWithSFC<typeof Modal>;
5
+ export default JkyModal;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const withInstall = require("../utils/with-install.js");
4
+ const Modal_vue_vue_type_script_setup_true_lang = require("./Modal.vue.js");
5
+ ;/* empty css */
6
+ const JkyModal = withInstall.installWithSFC(Modal_vue_vue_type_script_setup_true_lang.default);
7
+ exports.JkyModal = JkyModal;
8
+ exports.default = JkyModal;
@@ -0,0 +1,8 @@
1
+ /* Modal 模态框组件样式 */
2
+ .jky-modal {
3
+ /* 对话框内容区域 padding 为 0 */
4
+ }
5
+ /* Dialog 模式特定样式 */
6
+ .el-dialog.jky-modal {
7
+ /* 对话框标题样式 */
8
+ }
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const version = "0.0.80";
3
+ const version = "0.0.88";
4
4
  exports.version = version;
@@ -13,5 +13,6 @@ declare const _default: import('vue').DefineComponent<PageLayoutProps, {}, {}, {
13
13
  cardPadding: string;
14
14
  topMenuTrigger: "hover" | "click";
15
15
  topMenuSingleLevel: boolean;
16
+ sideMenuWithParent: boolean;
16
17
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
17
18
  export default _default;
@@ -66,12 +66,14 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
66
66
  topLevels: {},
67
67
  sideLevels: {},
68
68
  topMenuTrigger: { default: "click" },
69
- topMenuSingleLevel: { type: Boolean, default: true }
69
+ topMenuSingleLevel: { type: Boolean, default: true },
70
+ sideMenuWithParent: { type: Boolean, default: true }
70
71
  },
71
72
  setup(__props) {
72
73
  const props = __props;
73
74
  const router = vueRouter.useRouter();
74
75
  const route = vueRouter.useRoute();
76
+ const attrs = vue.useAttrs();
75
77
  const { useTabsStore: useTabsStore$1 } = useTabsStore.createTabsStore({
76
78
  enableCache: props.cachable
77
79
  });
@@ -132,7 +134,6 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
132
134
  });
133
135
  const displayedSideMenu = vue.computed(() => {
134
136
  if (menuData.value.length === 0) {
135
- console.warn("displayedSideMenu: menuData is empty");
136
137
  return [];
137
138
  }
138
139
  const topMenuItem = route.matched[0];
@@ -146,6 +147,9 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
146
147
  return [];
147
148
  }
148
149
  if ((found == null ? void 0 : found.children) && found.children.length > 0) {
150
+ if (props.sideMenuWithParent || attrs["side-menu-with-parent"]) {
151
+ return [found];
152
+ }
149
153
  return found.children;
150
154
  }
151
155
  return [];
@@ -165,7 +169,6 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
165
169
  return (_a = r.meta) == null ? void 0 : _a.title;
166
170
  });
167
171
  if (matchedMenus.length === 0) {
168
- console.warn("No matching menu item found for route:", routePath);
169
172
  return;
170
173
  }
171
174
  activeSideMenu.value = routePath;
@@ -174,15 +177,10 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
174
177
  } else {
175
178
  activeTopMenu.value = matchedMenus[0].path;
176
179
  }
177
- console.warn("Updated menu:", {
178
- activeTopMenu: activeTopMenu.value,
179
- activeSideMenu: activeSideMenu.value
180
- });
181
180
  },
182
181
  { immediate: true }
183
182
  );
184
- function handleMenuOpen(index) {
185
- console.warn("handleMenuOpen called with index:", index);
183
+ function handleMenuOpen(_index) {
186
184
  }
187
185
  function handleMenuSelect(index) {
188
186
  router.push(index);
@@ -232,6 +230,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
232
230
  mode: "vertical",
233
231
  "default-active": activeSideMenu.value,
234
232
  "menu-data": displayedSideMenu.value,
233
+ class: "jky-page-layout__side-menu",
235
234
  onSelect: handleMenuSelect
236
235
  }, null, 8, ["default-active", "menu-data"])
237
236
  ]),
@@ -241,6 +240,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
241
240
  mode: "vertical",
242
241
  "default-active": activeSideMenu.value,
243
242
  "menu-data": displayedSideMenu.value,
243
+ class: "jky-page-layout__side-menu",
244
244
  onSelect: handleMenuSelect
245
245
  }, null, 8, ["default-active", "menu-data"])
246
246
  ]),
@@ -11,6 +11,7 @@
11
11
  --tw-skew-x: initial;
12
12
  --tw-skew-y: initial;
13
13
  --tw-space-y-reverse: 0;
14
+ --tw-space-x-reverse: 0;
14
15
  --tw-divide-y-reverse: 0;
15
16
  --tw-border-style: solid;
16
17
  --tw-gradient-position: initial;
@@ -132,6 +133,7 @@
132
133
  --color-gray-700: oklch(37.3% .034 259.733);
133
134
  --color-gray-800: oklch(27.8% .033 256.848);
134
135
  --color-gray-900: oklch(21% .034 264.665);
136
+ --color-black: #000;
135
137
  --color-white: #fff;
136
138
  --spacing: .25rem;
137
139
  --container-2xl: 42rem;
@@ -604,6 +606,10 @@
604
606
  margin-right: calc(var(--spacing) * 4);
605
607
  }
606
608
 
609
+ .mb-0\! {
610
+ margin-bottom: calc(var(--spacing) * 0) !important;
611
+ }
612
+
607
613
  .mb-1 {
608
614
  margin-bottom: calc(var(--spacing) * 1);
609
615
  }
@@ -1404,6 +1410,38 @@
1404
1410
  mask-repeat: no-repeat;
1405
1411
  }
1406
1412
 
1413
+ .icon-\[mi--switch\] {
1414
+ width: 1em;
1415
+ height: 1em;
1416
+ -webkit-mask-image: var(--svg);
1417
+ -webkit-mask-image: var(--svg);
1418
+ -webkit-mask-image: var(--svg);
1419
+ mask-image: var(--svg);
1420
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M14.293 2.293a1 1 0 0 1 1.414 0l4 4a1 1 0 0 1 0 1.414l-4 4a1 1 0 0 1-1.414-1.414L16.586 8H5a1 1 0 0 1 0-2h11.586l-2.293-2.293a1 1 0 0 1 0-1.414m-4.586 10a1 1 0 0 1 0 1.414L7.414 16H19a1 1 0 1 1 0 2H7.414l2.293 2.293a1 1 0 0 1-1.414 1.414l-4-4a1 1 0 0 1 0-1.414l4-4a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E");
1421
+ background-color: currentColor;
1422
+ display: inline-block;
1423
+ -webkit-mask-size: 100% 100%;
1424
+ mask-size: 100% 100%;
1425
+ -webkit-mask-repeat: no-repeat;
1426
+ mask-repeat: no-repeat;
1427
+ }
1428
+
1429
+ .icon-\[radix-icons--exit-full-screen\] {
1430
+ width: 1em;
1431
+ height: 1em;
1432
+ -webkit-mask-image: var(--svg);
1433
+ -webkit-mask-image: var(--svg);
1434
+ -webkit-mask-image: var(--svg);
1435
+ mask-image: var(--svg);
1436
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' width='15' height='15'%3E%3Cpath fill='black' d='M5.5 9a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-1 0V10H2.5a.5.5 0 0 1 0-1zm7 0a.5.5 0 0 1 0 1H10v2.5a.5.5 0 0 1-1 0v-3a.5.5 0 0 1 .5-.5zm-7-7a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1 0-1H5V2.5a.5.5 0 0 1 .5-.5m4 0a.5.5 0 0 1 .5.5V5h2.5a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5'/%3E%3C/svg%3E");
1437
+ background-color: currentColor;
1438
+ display: inline-block;
1439
+ -webkit-mask-size: 100% 100%;
1440
+ mask-size: 100% 100%;
1441
+ -webkit-mask-repeat: no-repeat;
1442
+ mask-repeat: no-repeat;
1443
+ }
1444
+
1407
1445
  .icon-\[ri--logout-circle-line\] {
1408
1446
  width: 1em;
1409
1447
  height: 1em;
@@ -1420,6 +1458,22 @@
1420
1458
  mask-repeat: no-repeat;
1421
1459
  }
1422
1460
 
1461
+ .icon-\[streamline-ultimate--direction-button-2\] {
1462
+ width: 1em;
1463
+ height: 1em;
1464
+ -webkit-mask-image: var(--svg);
1465
+ -webkit-mask-image: var(--svg);
1466
+ -webkit-mask-image: var(--svg);
1467
+ mask-image: var(--svg);
1468
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M9 11.998a3 3 0 1 0 6 0a3 3 0 0 0-6 0m-7.974-.629a.853.853 0 0 0 0 1.257l3.118 2.858A.66.66 0 0 0 5.25 15V9a.66.66 0 0 0-1.106-.486zm21.947 1.257a.85.85 0 0 0 0-1.257l-3.117-2.858A.66.66 0 0 0 18.75 9v6a.659.659 0 0 0 1.105.486zM11.372 22.971a.85.85 0 0 0 1.256 0l2.858-3.118A.659.659 0 0 0 15 18.748H9a.66.66 0 0 0-.487 1.105zm1.256-21.947a.85.85 0 0 0-1.256 0L8.514 4.142A.66.66 0 0 0 9 5.248h6a.66.66 0 0 0 .486-1.106z'/%3E%3C/svg%3E");
1469
+ background-color: currentColor;
1470
+ display: inline-block;
1471
+ -webkit-mask-size: 100% 100%;
1472
+ mask-size: 100% 100%;
1473
+ -webkit-mask-repeat: no-repeat;
1474
+ mask-repeat: no-repeat;
1475
+ }
1476
+
1423
1477
  .block {
1424
1478
  display: block;
1425
1479
  }
@@ -1592,6 +1646,10 @@
1592
1646
  flex: 1;
1593
1647
  }
1594
1648
 
1649
+ .flex-none {
1650
+ flex: none;
1651
+ }
1652
+
1595
1653
  .shrink-0 {
1596
1654
  flex-shrink: 0;
1597
1655
  }
@@ -1705,6 +1763,16 @@
1705
1763
  margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
1706
1764
  }
1707
1765
 
1766
+ .gap-x-2 {
1767
+ column-gap: calc(var(--spacing) * 2);
1768
+ }
1769
+
1770
+ :where(.space-x-4 > :not(:last-child)) {
1771
+ --tw-space-x-reverse: 0;
1772
+ margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));
1773
+ margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
1774
+ }
1775
+
1708
1776
  :where(.divide-y > :not(:last-child)) {
1709
1777
  --tw-divide-y-reverse: 0;
1710
1778
  border-bottom-style: var(--tw-border-style);
@@ -1721,6 +1789,12 @@
1721
1789
  align-self: center;
1722
1790
  }
1723
1791
 
1792
+ .truncate {
1793
+ text-overflow: ellipsis;
1794
+ white-space: nowrap;
1795
+ overflow: hidden;
1796
+ }
1797
+
1724
1798
  .overflow-hidden {
1725
1799
  overflow: hidden;
1726
1800
  }
@@ -1806,6 +1880,26 @@
1806
1880
  border-color: var(--color-yellow-200);
1807
1881
  }
1808
1882
 
1883
+ .border-t-black\/15 {
1884
+ border-top-color: #00000026;
1885
+ }
1886
+
1887
+ @supports (color: color-mix(in lab, red, red)) {
1888
+ .border-t-black\/15 {
1889
+ border-top-color: color-mix(in oklab, var(--color-black) 15%, transparent);
1890
+ }
1891
+ }
1892
+
1893
+ .border-b-black\/15 {
1894
+ border-bottom-color: #00000026;
1895
+ }
1896
+
1897
+ @supports (color: color-mix(in lab, red, red)) {
1898
+ .border-b-black\/15 {
1899
+ border-bottom-color: color-mix(in oklab, var(--color-black) 15%, transparent);
1900
+ }
1901
+ }
1902
+
1809
1903
  .border-l-\(--el-color-primary\) {
1810
1904
  border-left-color: var(--el-color-primary);
1811
1905
  }
@@ -2129,6 +2223,10 @@
2129
2223
  padding: calc(var(--spacing) * 0);
2130
2224
  }
2131
2225
 
2226
+ .p-0\! {
2227
+ padding: calc(var(--spacing) * 0) !important;
2228
+ }
2229
+
2132
2230
  .p-2 {
2133
2231
  padding: calc(var(--spacing) * 2);
2134
2232
  }
@@ -2165,6 +2263,10 @@
2165
2263
  padding-inline: calc(var(--spacing) * 4);
2166
2264
  }
2167
2265
 
2266
+ .px-4\! {
2267
+ padding-inline: calc(var(--spacing) * 4) !important;
2268
+ }
2269
+
2168
2270
  .px-6 {
2169
2271
  padding-inline: calc(var(--spacing) * 6);
2170
2272
  }
@@ -2201,6 +2303,10 @@
2201
2303
  padding-block: calc(var(--spacing) * 16);
2202
2304
  }
2203
2305
 
2306
+ .pt-0\! {
2307
+ padding-top: calc(var(--spacing) * 0) !important;
2308
+ }
2309
+
2204
2310
  .pt-4 {
2205
2311
  padding-top: calc(var(--spacing) * 4);
2206
2312
  }
@@ -2619,6 +2725,10 @@
2619
2725
  background-color: var(--color-yellow-200);
2620
2726
  }
2621
2727
 
2728
+ .hover\:text-\(--el-color-primary\):hover {
2729
+ color: var(--el-color-primary);
2730
+ }
2731
+
2622
2732
  .hover\:text-blue-900:hover {
2623
2733
  color: var(--color-blue-900);
2624
2734
  }
@@ -2762,6 +2872,12 @@
2762
2872
  initial-value: 0;
2763
2873
  }
2764
2874
 
2875
+ @property --tw-space-x-reverse {
2876
+ syntax: "*";
2877
+ inherits: false;
2878
+ initial-value: 0;
2879
+ }
2880
+
2765
2881
  @property --tw-divide-y-reverse {
2766
2882
  syntax: "*";
2767
2883
  inherits: false;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "jky-component-lib",
3
3
  "type": "module",
4
- "version": "0.0.80",
4
+ "version": "0.0.88",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "packageManager": "bun@1.3.5",
9
9
  "workspaces": [
10
- "apps/*"
10
+ "playground/*"
11
11
  ],
12
12
  "description": "Vue 3 component library starter template, provides VitePress documentation, supports building ESM, CJS and UMD formats. ",
13
13
  "author": "Kieran Wang <kieranwme@gmail.com> (https://github.com/kieranwv/)",
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "scripts": {
59
59
  "preinstall": "npx only-allow bun",
60
- "prepare": "simple-git-hooks",
60
+ "prepare": "npx simple-git-hooks",
61
61
  "dev": "vite build --watch",
62
62
  "dev:all": "bash scripts/dev-all.sh",
63
63
  "dev:docs": "bash scripts/docs-dev.sh",
@@ -91,7 +91,8 @@
91
91
  "mitt": "^3.0.1",
92
92
  "pinia": "^3.0.4",
93
93
  "pinia-plugin-persistedstate": "^4.7.1",
94
- "vue": "^3.5.32"
94
+ "vue": "^3.5.32",
95
+ "vue-router": "^5.0.4"
95
96
  },
96
97
  "devDependencies": {
97
98
  "@antfu/eslint-config": "^4.13.0",