jky-component-lib 0.0.130 → 0.0.131

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.
@@ -1,7 +1,14 @@
1
+ /* AMap 高德地图组件样式 */
2
+ .jky-amap-container {
3
+ /* 地图容器样式 */
4
+ position: relative;
5
+ overflow: hidden;
1
6
 
2
- /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
- .amap-icon img,
4
- .amap-marker-content img {
5
- width: 25px;
6
- height: 34px;
7
+ /* 隐藏高德地图的 logo 和版权信息(注意:商业使用请遵守高德地图条款) */
8
+ .amap-logo {
9
+ display: none !important;
10
+ }
11
+ .amap-copyright {
12
+ display: none !important;
13
+ }
7
14
  }
@@ -1,14 +1,7 @@
1
- /* AMap 高德地图组件样式 */
2
- .jky-amap-container {
3
- /* 地图容器样式 */
4
- position: relative;
5
- overflow: hidden;
6
1
 
7
- /* 隐藏高德地图的 logo 和版权信息(注意:商业使用请遵守高德地图条款) */
8
- .amap-logo {
9
- display: none !important;
10
- }
11
- .amap-copyright {
12
- display: none !important;
13
- }
2
+ /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
+ .amap-icon img,
4
+ .amap-marker-content img {
5
+ width: 25px;
6
+ height: 34px;
14
7
  }
@@ -1,7 +1,17 @@
1
1
  import { FormItemProps } from './types';
2
2
  declare function __VLS_template(): {
3
3
  attrs: Partial<{}>;
4
- slots: Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>>;
4
+ slots: Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>> & {
5
+ loading?(_: {
6
+ field: string;
7
+ }): any;
8
+ loading?(_: {
9
+ field: string;
10
+ }): any;
11
+ loading?(_: {
12
+ field: string;
13
+ }): any;
14
+ };
5
15
  refs: {};
6
16
  rootEl: any;
7
17
  };
@@ -49,9 +49,11 @@ var __async = (__this, __arguments, generator) => {
49
49
  step((generator = generator.apply(__this, __arguments)).next());
50
50
  });
51
51
  };
52
- import { defineComponent, ref, computed, openBlock, createElementBlock, createBlock, unref, mergeProps, withCtx, createElementVNode, resolveDynamicComponent, Fragment, createTextVNode, toDisplayString, createCommentVNode, createSlots, renderList, renderSlot, normalizeProps, guardReactiveProps, watch, h } from "vue";
52
+ import { defineComponent, ref, computed, openBlock, createElementBlock, createBlock, unref, mergeProps, withCtx, createElementVNode, resolveDynamicComponent, Fragment, createTextVNode, toDisplayString, createCommentVNode, createVNode, createSlots, renderList, renderSlot, normalizeProps, guardReactiveProps, watch, h } from "vue";
53
53
  import { CircleCloseFilled, CircleCheckFilled, WarningFilled, QuestionFilled } from "@element-plus/icons-vue";
54
54
  import { ElFormItem, ElTooltip, ElIcon } from "element-plus";
55
+ import _sfc_main$w from "./FormItemWrapper.vue.js";
56
+ /* empty css */
55
57
  import _sfc_main$5 from "./items/AddInputItem.vue.js";
56
58
  import _sfc_main$3 from "./items/AMapPickerItem.vue.js";
57
59
  import _sfc_main$s from "./items/AutocompleteItem.vue.js";
@@ -129,6 +131,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
129
131
  setup(__props) {
130
132
  const props = __props;
131
133
  const loading = ref(false);
134
+ const propsLoadStatus = ref("idle");
135
+ const loadError = ref(null);
132
136
  const componentProps = ref({});
133
137
  const rulesData = ref(null);
134
138
  const rules = computed(() => {
@@ -146,10 +150,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
146
150
  const configProps = props.config.componentProps;
147
151
  if (!configProps) {
148
152
  componentProps.value = {};
153
+ propsLoadStatus.value = "ready";
149
154
  return;
150
155
  }
151
156
  if (typeof configProps === "function") {
152
157
  loading.value = true;
158
+ propsLoadStatus.value = "loading";
159
+ loadError.value = null;
153
160
  try {
154
161
  const result = yield configProps({
155
162
  model: props.model,
@@ -157,15 +164,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
157
164
  $form: props.model
158
165
  });
159
166
  componentProps.value = result || {};
167
+ propsLoadStatus.value = "ready";
160
168
  } catch (error) {
161
169
  console.error("Failed to load component props:", error);
162
170
  componentProps.value = {};
171
+ loadError.value = error;
172
+ propsLoadStatus.value = "error";
163
173
  } finally {
164
174
  loading.value = false;
165
175
  }
166
176
  return;
167
177
  }
168
178
  componentProps.value = configProps;
179
+ propsLoadStatus.value = "ready";
169
180
  });
170
181
  }
171
182
  function loadRules() {
@@ -195,6 +206,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
195
206
  rulesData.value = typeof configRules !== "function" ? configRules : null;
196
207
  });
197
208
  }
209
+ function reloadComponentProps() {
210
+ return __async(this, null, function* () {
211
+ yield loadComponentProps();
212
+ });
213
+ }
198
214
  const watchFields = computed(() => {
199
215
  const config = props.config;
200
216
  return config.watchFields || [];
@@ -238,6 +254,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
238
254
  title,
239
255
  placeholder,
240
256
  componentProps: _componentProps,
257
+ rules: _rules,
241
258
  hidden,
242
259
  customStyle,
243
260
  children,
@@ -253,13 +270,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
253
270
  formatValue,
254
271
  formatModel,
255
272
  noLabelMargin,
256
- titleRender
273
+ titleRender,
274
+ watchFields: _watchFields,
275
+ help: _help,
276
+ useDefaultBorderClass: _useDefaultBorderClass
257
277
  } = _a, rest = __objRest(_a, [
258
278
  "field",
259
279
  "type",
260
280
  "title",
261
281
  "placeholder",
262
282
  "componentProps",
283
+ "rules",
263
284
  "hidden",
264
285
  "customStyle",
265
286
  "children",
@@ -275,7 +296,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
275
296
  "formatValue",
276
297
  "formatModel",
277
298
  "noLabelMargin",
278
- "titleRender"
299
+ "titleRender",
300
+ "watchFields",
301
+ "help",
302
+ "useDefaultBorderClass"
279
303
  ]);
280
304
  return rest;
281
305
  });
@@ -389,23 +413,35 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
389
413
  ], 64)),
390
414
  __props.config.help && __props.config.help.tooltip ? (openBlock(), createBlock(resolveDynamicComponent(renderHelpTooltip()), { key: 2 })) : createCommentVNode("", true)
391
415
  ]),
392
- (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
393
- "model-value": modelValue.value,
394
- config: __props.config,
395
- "component-props": componentProps.value,
396
- "component-slots": componentSlotsObj.value,
397
- disabled: __props.disabled,
398
- "onUpdate:modelValue": _cache[0] || (_cache[0] = (val) => __props.model[__props.field] = val)
399
- }, createSlots({ _: 2 }, [
400
- renderList(Object.keys(_ctx.$slots), (name, index) => {
401
- return {
402
- name,
403
- fn: withCtx((slotData) => [
404
- renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
405
- ])
406
- };
407
- })
408
- ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"])),
416
+ createVNode(_sfc_main$w, {
417
+ status: propsLoadStatus.value,
418
+ error: loadError.value,
419
+ onRetry: reloadComponentProps
420
+ }, {
421
+ loading: withCtx(() => [
422
+ renderSlot(_ctx.$slots, "loading", { field: __props.field })
423
+ ]),
424
+ default: withCtx(() => [
425
+ (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
426
+ "model-value": modelValue.value,
427
+ config: __props.config,
428
+ "component-props": componentProps.value,
429
+ "component-slots": componentSlotsObj.value,
430
+ disabled: __props.disabled,
431
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (val) => __props.model[__props.field] = val)
432
+ }, createSlots({ _: 2 }, [
433
+ renderList(Object.keys(_ctx.$slots), (name, index) => {
434
+ return {
435
+ name,
436
+ fn: withCtx((slotData) => [
437
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
438
+ ])
439
+ };
440
+ })
441
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
442
+ ]),
443
+ _: 3
444
+ }, 8, ["status", "error"]),
409
445
  __props.config.help && !__props.config.help.tooltip ? (openBlock(), createBlock(resolveDynamicComponent(renderHelpText()), { key: 0 })) : createCommentVNode("", true)
410
446
  ]),
411
447
  _: 3
@@ -420,42 +456,66 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
420
456
  default: withCtx(() => [
421
457
  __props.config.prepend || __props.config.append ? (openBlock(), createElementBlock("div", _hoisted_4, [
422
458
  __props.config.prepend ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString(__props.config.prepend), 1)) : createCommentVNode("", true),
423
- (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
424
- "model-value": modelValue.value,
425
- config: __props.config,
426
- "component-props": componentProps.value,
427
- "component-slots": componentSlotsObj.value,
428
- disabled: __props.disabled,
429
- "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => __props.model[__props.field] = val)
430
- }, createSlots({ _: 2 }, [
431
- renderList(Object.keys(_ctx.$slots), (name, index) => {
432
- return {
433
- name,
434
- fn: withCtx((slotData) => [
435
- renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
436
- ])
437
- };
438
- })
439
- ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"])),
459
+ createVNode(_sfc_main$w, {
460
+ status: propsLoadStatus.value,
461
+ error: loadError.value,
462
+ onRetry: reloadComponentProps
463
+ }, {
464
+ loading: withCtx(() => [
465
+ renderSlot(_ctx.$slots, "loading", { field: __props.field })
466
+ ]),
467
+ default: withCtx(() => [
468
+ (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
469
+ "model-value": modelValue.value,
470
+ config: __props.config,
471
+ "component-props": componentProps.value,
472
+ "component-slots": componentSlotsObj.value,
473
+ disabled: __props.disabled,
474
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => __props.model[__props.field] = val)
475
+ }, createSlots({ _: 2 }, [
476
+ renderList(Object.keys(_ctx.$slots), (name, index) => {
477
+ return {
478
+ name,
479
+ fn: withCtx((slotData) => [
480
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
481
+ ])
482
+ };
483
+ })
484
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
485
+ ]),
486
+ _: 3
487
+ }, 8, ["status", "error"]),
440
488
  __props.config.append ? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(__props.config.append), 1)) : createCommentVNode("", true)
441
- ])) : (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
489
+ ])) : (openBlock(), createBlock(_sfc_main$w, {
442
490
  key: 1,
443
- "model-value": modelValue.value,
444
- config: __props.config,
445
- "component-props": componentProps.value,
446
- "component-slots": componentSlotsObj.value,
447
- disabled: __props.disabled,
448
- "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => __props.model[__props.field] = val)
449
- }, createSlots({ _: 2 }, [
450
- renderList(Object.keys(_ctx.$slots), (name, index) => {
451
- return {
452
- name,
453
- fn: withCtx((slotData) => [
454
- renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
455
- ])
456
- };
457
- })
458
- ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"])),
491
+ status: propsLoadStatus.value,
492
+ error: loadError.value,
493
+ onRetry: reloadComponentProps
494
+ }, {
495
+ loading: withCtx(() => [
496
+ renderSlot(_ctx.$slots, "loading", { field: __props.field })
497
+ ]),
498
+ default: withCtx(() => [
499
+ (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
500
+ "model-value": modelValue.value,
501
+ config: __props.config,
502
+ "component-props": componentProps.value,
503
+ "component-slots": componentSlotsObj.value,
504
+ disabled: __props.disabled,
505
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => __props.model[__props.field] = val)
506
+ }, createSlots({ _: 2 }, [
507
+ renderList(Object.keys(_ctx.$slots), (name, index) => {
508
+ return {
509
+ name,
510
+ fn: withCtx((slotData) => [
511
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
512
+ ])
513
+ };
514
+ })
515
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
516
+ ]),
517
+ _: 3
518
+ }, 8, ["status", "error"])),
459
519
  __props.config.help && !__props.config.help.tooltip ? (openBlock(), createBlock(resolveDynamicComponent(renderHelpText()), { key: 2 })) : createCommentVNode("", true)
460
520
  ]),
461
521
  _: 2
@@ -0,0 +1,33 @@
1
+ interface Props {
2
+ status: 'idle' | 'loading' | 'ready' | 'error';
3
+ error?: Error | null;
4
+ }
5
+ declare function handleRetry(): void;
6
+ declare function __VLS_template(): {
7
+ attrs: Partial<{}>;
8
+ slots: {
9
+ loading?(_: {}): any;
10
+ error?(_: {
11
+ error: Error;
12
+ retry: typeof handleRetry;
13
+ }): any;
14
+ default?(_: {}): any;
15
+ };
16
+ refs: {};
17
+ rootEl: any;
18
+ };
19
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
20
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
21
+ retry: () => any;
22
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
23
+ onRetry?: (() => any) | undefined;
24
+ }>, {
25
+ error: Error | null;
26
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
27
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
28
+ export default _default;
29
+ type __VLS_WithTemplateSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -0,0 +1,88 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { defineComponent, computed, openBlock, createBlock, unref, withCtx, renderSlot, createElementVNode, createElementBlock, createVNode, createTextVNode } from "vue";
21
+ import { Loading, WarningFilled } from "@element-plus/icons-vue";
22
+ import { ElIcon, ElButton } from "element-plus";
23
+ const _hoisted_1 = {
24
+ key: 1,
25
+ class: "jky-form-item-wrapper__error"
26
+ };
27
+ const _hoisted_2 = { class: "flex items-center gap-2 text-red-500 py-1" };
28
+ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, {
29
+ name: "JkyFormItemWrapper"
30
+ }), {
31
+ __name: "FormItemWrapper",
32
+ props: {
33
+ status: {},
34
+ error: { default: null }
35
+ },
36
+ emits: ["retry"],
37
+ setup(__props, { emit: __emit }) {
38
+ const props = __props;
39
+ const emit = __emit;
40
+ const showLoading = computed(() => props.status === "loading");
41
+ const showError = computed(() => props.status === "error");
42
+ function handleRetry() {
43
+ emit("retry");
44
+ }
45
+ return (_ctx, _cache) => {
46
+ return showLoading.value ? (openBlock(), createBlock(unref(Loading), {
47
+ key: 0,
48
+ class: "jky-form-item-wrapper__loading"
49
+ }, {
50
+ default: withCtx(() => [
51
+ renderSlot(_ctx.$slots, "loading", {}, () => [
52
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "skeleton-box w-full h-9 rounded bg-gray-200 animate-pulse" }, null, -1))
53
+ ])
54
+ ]),
55
+ _: 3
56
+ })) : showError.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
57
+ renderSlot(_ctx.$slots, "error", {
58
+ error: __props.error,
59
+ retry: handleRetry
60
+ }, () => [
61
+ createElementVNode("div", _hoisted_2, [
62
+ createVNode(unref(ElIcon), { size: 14 }, {
63
+ default: withCtx(() => [
64
+ createVNode(unref(WarningFilled))
65
+ ]),
66
+ _: 1
67
+ }),
68
+ _cache[2] || (_cache[2] = createElementVNode("span", { class: "text-sm" }, "加载失败", -1)),
69
+ createVNode(unref(ElButton), {
70
+ link: "",
71
+ type: "primary",
72
+ size: "small",
73
+ onClick: handleRetry
74
+ }, {
75
+ default: withCtx(() => [..._cache[1] || (_cache[1] = [
76
+ createTextVNode(" 重试 ", -1)
77
+ ])]),
78
+ _: 1
79
+ })
80
+ ])
81
+ ])
82
+ ])) : renderSlot(_ctx.$slots, "default", { key: 2 });
83
+ };
84
+ }
85
+ }));
86
+ export {
87
+ _sfc_main as default
88
+ };
@@ -0,0 +1,5 @@
1
+ import _sfc_main from "./FormItemWrapper.vue.js";
2
+ /* empty css */
3
+ export {
4
+ _sfc_main as default
5
+ };
@@ -11,3 +11,27 @@
11
11
  .jky-form {
12
12
  /* 表单容器样式 */
13
13
  }
14
+
15
+
16
+ /* FormItemWrapper 组件样式 */
17
+ .jky-form-item-wrapper__loading {
18
+ display: flex;
19
+ align-items: center;
20
+ }
21
+ .jky-form-item-wrapper__error {
22
+ display: flex;
23
+ align-items: center;
24
+ }
25
+ .skeleton-box {
26
+ background-color: #e5e7eb;
27
+ border-radius: 0.25rem;
28
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
29
+ }
30
+ @keyframes pulse {
31
+ 0%, 100% {
32
+ opacity: 1;
33
+ }
34
+ 50% {
35
+ opacity: 0.5;
36
+ }
37
+ }
@@ -1,4 +1,4 @@
1
- const version = "0.0.130";
1
+ const version = "0.0.131";
2
2
  export {
3
3
  version
4
4
  };
package/dist/es/style.css CHANGED
@@ -166,6 +166,7 @@
166
166
  --radius-md: .375rem;
167
167
  --radius-lg: .5rem;
168
168
  --radius-2xl: 1rem;
169
+ --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;
169
170
  --blur-sm: 8px;
170
171
  --default-transition-duration: .15s;
171
172
  --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);
@@ -1738,6 +1739,10 @@
1738
1739
  height: calc(var(--spacing) * 7);
1739
1740
  }
1740
1741
 
1742
+ .h-9 {
1743
+ height: calc(var(--spacing) * 9);
1744
+ }
1745
+
1741
1746
  .h-12 {
1742
1747
  height: calc(var(--spacing) * 12);
1743
1748
  }
@@ -1883,6 +1888,10 @@
1883
1888
  transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );
1884
1889
  }
1885
1890
 
1891
+ .animate-pulse {
1892
+ animation: var(--animate-pulse);
1893
+ }
1894
+
1886
1895
  .cursor-pointer {
1887
1896
  cursor: pointer;
1888
1897
  }
@@ -3442,3 +3451,9 @@
3442
3451
  syntax: "*";
3443
3452
  inherits: false
3444
3453
  }
3454
+
3455
+ @keyframes pulse {
3456
+ 50% {
3457
+ opacity: .5;
3458
+ }
3459
+ }
@@ -1 +1 @@
1
- .jky-add-input,:root{--jky-add-input-gap:12px;--jky-add-input-row-gap:8px;--jky-add-input-min-width:100px;--jky-add-input-action-width:80px}.jky-add-input{display:flex;flex-direction:column;gap:var(--jky-add-input-row-gap);min-width:var(--jky-add-input-min-width)}.jky-add-input__row{align-items:center;display:flex;gap:var(--jky-add-input-gap)}.jky-add-input__key,.jky-add-input__value{flex:1;min-width:0}.jky-add-input__actions{display:flex;flex-shrink:0;gap:var(--jky-add-input-gap);width:var(--jky-add-input-action-width)}.jky-amap-container{overflow:hidden;position:relative;.amap-copyright,.amap-logo{display:none!important}}:root{--jky-button-primary-bg:#007bff;--jky-button-primary-text:#fff;--jky-button-primary-hover-bg:#0056b3;--jky-button-success-bg:#28a745;--jky-button-success-text:#fff;--jky-button-success-hover-bg:#1e7e34;--jky-button-warning-bg:#ffc107;--jky-button-warning-text:#fff;--jky-button-warning-hover-bg:#e0a800;--jky-button-danger-bg:#dc3545;--jky-button-danger-text:#fff;--jky-button-danger-hover-bg:#c82333;--jky-button-info-bg:#6c757d;--jky-button-info-text:#fff;--jky-button-info-hover-bg:#5a6268;--jky-button-default-bg:#fff;--jky-button-default-text:#606266;--jky-button-default-border:#dcdfe6;--jky-button-default-hover-bg:#f5f7fa;--jky-button-font-size:14px;--jky-button-font-size-small:12px;--jky-button-font-size-large:16px;--jky-button-padding:0 16px;--jky-button-padding-small:0 12px;--jky-button-padding-large:0 20px;--jky-button-height:40px;--jky-button-height-small:32px;--jky-button-height-large:48px;--jky-button-border-radius:0.375rem;--jky-button-disabled-opacity:0.5;--jky-button-disabled-bg:#f5f7fa;--jky-button-disabled-text:#c0c4cc;--jky-button-loading-opacity:0.7;--jky-button-icon-size:1.25rem;--jky-button-icon-margin:0.5rem}.jky-button{align-items:center;background-color:var(--jky-button-default-bg);border:1px solid var(--jky-button-default-border);border-radius:var(--jky-button-border-radius);color:var(--jky-button-default-text);cursor:pointer;display:inline-flex;font-size:var(--jky-button-font-size);font-weight:500;height:var(--jky-button-height);justify-content:center;padding:var(--jky-button-padding);transition:color .2s,background-color .2s}.jky-button--primary{background-color:var(--jky-button-primary-bg);border:none;color:var(--jky-button-primary-text)}.jky-button--primary:hover{background-color:var(--jky-button-primary-hover-bg)}.jky-button--success{background-color:var(--jky-button-success-bg);border:none;color:var(--jky-button-success-text)}.jky-button--success:hover{background-color:var(--jky-button-success-hover-bg)}.jky-button--warning{background-color:var(--jky-button-warning-bg);border:none;color:var(--jky-button-warning-text)}.jky-button--warning:hover{background-color:var(--jky-button-warning-hover-bg)}.jky-button--danger{background-color:var(--jky-button-danger-bg);border:none;color:var(--jky-button-danger-text)}.jky-button--danger:hover{background-color:var(--jky-button-danger-hover-bg)}.jky-button--info{background-color:var(--jky-button-info-bg);border:none;color:var(--jky-button-info-text)}.jky-button--info:hover{background-color:var(--jky-button-info-hover-bg)}.jky-button--small{font-size:var(--jky-button-font-size-small);height:var(--jky-button-height-small);padding:var(--jky-button-padding-small)}.jky-button--large{font-size:var(--jky-button-font-size-large);height:var(--jky-button-height-large);padding:var(--jky-button-padding-large)}.jky-button.is-disabled{background-color:var(--jky-button-disabled-bg);color:var(--jky-button-disabled-text);cursor:not-allowed;opacity:var(--jky-button-disabled-opacity);pointer-events:none}.jky-button.is-loading{opacity:var(--jky-button-loading-opacity);pointer-events:none;position:relative}.jky-button__loading{display:flex;inset:0;position:absolute}.jky-button__icon,.jky-button__loading{align-items:center;justify-content:center}.jky-button__icon{display:inline-flex;font-size:1em;margin-right:var(--jky-button-icon-margin)}.jky-button__icon:only-child{margin-right:0}.jky-button--suffix .jky-button__icon{margin-left:var(--jky-button-icon-margin);margin-right:0}.jky-button:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px #000;outline:2px solid transparent;outline-offset:2px}.loading-spinner{animation:spin 1s linear infinite;height:var(--jky-button-icon-size);width:var(--jky-button-icon-size)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:root{--jky-button-nav-active-bg:var(--el-color-primary);--jky-button-nav-active-text:#fff;--jky-button-nav-inactive-bg:var(--el-fill-color-light);--jky-button-nav-inactive-text:var(--el-text-color-regular);--el-dropdown-menu-margin-left:12px}.jky-button-nav{align-items:center;display:flex;flex-wrap:wrap;.el-dropdown{margin-left:var(--el-dropdown-menu-margin-left)}}.jky-button-nav-item{background-color:var(--jky-button-nav-inactive-bg);color:var(--jky-button-nav-inactive-text);&.is-active,&[aria-pressed=true]{background-color:var(--jky-button-nav-active-bg);color:var(--jky-button-nav-active-text)}}:root{--j-code-mirror-border-color:#dcdfe6;--j-code-mirror-border-radius:4px;--j-code-mirror-height:400px}.j-code-mirror-editor{border-radius:var(--j-code-mirror-border-radius);height:var(--j-code-mirror-height);overflow:hidden;width:100%}.code-mirror-container{height:100%;overflow:auto;width:100%}.code-mirror-container .cm-editor{height:100%}.code-mirror-container .cm-scroller{font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.5;overflow:auto}.code-mirror-container .cm-gutters{background-color:#2c2d2d;border-color:#4c4d4f;color:#909399}.jky-form,:root{--jky-form-item-border-width:4px;--jky-form-item-border-color:var(--el-color-primary);--jky-form-item-bg-color:rgba(var(--el-color-primary-rgb),0.5)}:root{--jky-menu-bg-color:#fff;--jky-menu-text-color:#303133;--jky-menu-active-color:#409eff;--jky-menu-hover-bg-color:#f5f7fa;--jky-menu-hover-text-color:#606266;--jky-menu-item-height:56px;--jky-menu-item-padding:0 20px;--jky-menu-item-font-size:14px;--jky-menu-icon-size:18px;--jky-menu-icon-margin:8px;--jky-menu-border-color:#e4e7ed;--jky-menu-disabled-opacity:0.5;--jky-menu-disabled-text-color:#c0c4cc}.jky-menu{li+li{margin-top:0}}.jky-page-header,:root{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--jky-page-header-bg-color:#1890ff}.jky-page-header--dark{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--el-text-color-regular:#fff}.jky-page-header--light{--jky-page-header-title-color:#000;--jky-page-header-text-color:rgba(0,0,0,.85);--jky-page-header-icon-color:#000;--el-text-color-regular:#000}.jky-page-header,:root{--jky-page-header-bg-size:cover;--jky-page-header-bg-position:center;--jky-page-header-box-shadow:0 2px 8px rgba(0,0,0,.15);--jky-page-header-padding-x:24px;--jky-page-header-padding-x-mobile:16px;--jky-page-header-gap:16px;--jky-page-header-gap-mobile:12px;--jky-page-header-gap-left:12px;--jky-page-header-gap-status:12px;--jky-page-header-gap-center:24px;--jky-page-header-gap-center-mobile:12px;--jky-page-header-title-size:20px;--jky-page-header-title-size-mobile:16px;--jky-page-header-title-weight:600;--jky-page-header-text-size:16px;--jky-page-header-icon-size:20px;--jky-page-header-icon-hover-opacity:0.8;--jky-page-header-logo-height:40px;--jky-page-header-avatar-size:32px}.jky-page-header{background-color:var(--jky-page-header-bg-color);background-position:var(--jky-page-header-bg-position);background-size:var(--jky-page-header-bg-size);box-shadow:var(--jky-page-header-box-shadow);width:100%}.jky-page-header__container{align-items:center;display:flex;height:100%;justify-content:space-between;margin:0 auto;max-width:100%;padding:0 var(--jky-page-header-padding-x)}.jky-page-header__left{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap-left)}.jky-page-header__logo{height:var(--jky-page-header-logo-height);object-fit:contain;width:auto}.jky-page-header__title{color:var(--jky-page-header-title-color);font-size:var(--jky-page-header-title-size);font-weight:var(--jky-page-header-title-weight);white-space:nowrap}.jky-page-header__center{align-items:center;display:flex;flex:1;justify-content:center;margin:0 var(--jky-page-header-gap-center);min-width:0}.jky-page-header__right{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap)}.jky-page-header__status-icons{align-items:center;display:flex;gap:var(--jky-page-header-gap-status)}.jky-page-header__status-icon{color:var(--jky-page-header-icon-color);cursor:pointer;transition:opacity .2s;&:hover{opacity:var(--jky-page-header-icon-hover-opacity)}}.jky-page-header__time{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size);white-space:nowrap}.jky-page-header__user{align-items:center;color:var(--jky-page-header-text-color);cursor:pointer;display:flex;gap:8px}.jky-page-header__avatar{color:var(--jky-page-header-icon-color);img{height:100%;object-fit:cover;width:100%}}.jky-page-header__username{white-space:nowrap}.jky-page-header__logout,.jky-page-header__username{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size)}@media (max-width:768px){.jky-page-header__container{padding:0 var(--jky-page-header-padding-x-mobile)}.jky-page-header__title{font-size:var(--jky-page-header-title-size-mobile)}.jky-page-header__center{margin:0 var(--jky-page-header-gap-center-mobile)}.jky-page-header__right{gap:var(--jky-page-header-gap-mobile)}}:root{--jky-page-layout-gap:5}.jky-page-layout{column-gap:calc(var(--spacing)*var(--jky-page-layout-gap));.el-menu{border-right:none}.el-auto-resizer{.el-scrollbar__view{height:100%}}}.jky-page-table{--jky-page-table_pagination-position:flex-end;.jky-page-table__pagination{.el-scrollbar__view{display:flex;justify-content:var(--jky-page-table_pagination-position)}}}.jky-action-column{.el-button+.el-button{margin-left:0}}:root{--jky-rich-editor-border:#d9d9d9;--jky-rich-editor-border-hover:#409eff;--jky-rich-editor-border-radius:4px;--jky-rich-editor-box-shadow:0 0 0 1px #409eff}.jky-rich-editor{width:100%}.jky-rich-editor .tox-tinymce{border:1px solid var(--jky-rich-editor-border);border-radius:var(--jky-rich-editor-border-radius);transition:border-color .2s}.jky-rich-editor .tox-tinymce:hover{border-color:var(--jky-rich-editor-border-hover)}.jky-rich-editor .tox-tinymce:focus-within{border-color:var(--jky-rich-editor-border-hover);box-shadow:var(--jky-rich-editor-box-shadow)}.jky-rich-editor.is-disabled .tox-tinymce{background-color:#f5f7fa;cursor:not-allowed}.jky-rich-editor.is-readonly .tox-tinymce{background-color:#fafafa}:root{--jky-say-hello-bg:#42b883;--jky-say-hello-text:#fff;--jky-say-hello-hover-bg:#3aa876;--jky-say-hello-font-size:16px;--jky-say-hello-padding:8px 20px;--jky-say-hello-margin:4px 2px;--jky-say-hello-border-radius:6px}.jky-say-hello{background-color:var(--jky-say-hello-bg);border-radius:var(--jky-say-hello-border-radius);color:var(--jky-say-hello-text);cursor:pointer;display:inline-block;font-size:var(--jky-say-hello-font-size);margin:var(--jky-say-hello-margin);padding:var(--jky-say-hello-padding);text-align:center;text-decoration:none;transition:background-color .2s ease}.jky-say-hello:hover{background-color:var(--jky-say-hello-hover-bg)}@import "tailwindcss";@plugin "@iconify/tailwind4";@source "../node_modules/jky-component-lib/dist/es/";@source "../docs/**/*.md";@source "./**/*.md";@source "./**/*.vue";@source "./**/*.css";@custom-variant dark (&:is(.dark *));.jky-tabs{.el-tabs__content{display:none}.el-tabs__header{margin-bottom:0}}.jky-tabs-round{--el-tabs-header-height:32px;--el-tabs-item-background:#fff;--el-tabs-active-item-background:var(--el-color-primary);.el-tabs__header{--el-border-color-light:transparent}.el-tabs__item{background-color:var(--el-tabs-item-background);border-bottom:none!important;border-radius:999px;margin-left:1rem;&.is-active{background-color:var(--el-tabs-active-item-background);.el-icon,.jky-tabs-__item-label{color:var(--el-color-white)}}&.first-child{margin-left:0}}}.jky-tabs-context-menu{display:inline-block}
1
+ .jky-add-input,:root{--jky-add-input-gap:12px;--jky-add-input-row-gap:8px;--jky-add-input-min-width:100px;--jky-add-input-action-width:80px}.jky-add-input{display:flex;flex-direction:column;gap:var(--jky-add-input-row-gap);min-width:var(--jky-add-input-min-width)}.jky-add-input__row{align-items:center;display:flex;gap:var(--jky-add-input-gap)}.jky-add-input__key,.jky-add-input__value{flex:1;min-width:0}.jky-add-input__actions{display:flex;flex-shrink:0;gap:var(--jky-add-input-gap);width:var(--jky-add-input-action-width)}.jky-amap-container{overflow:hidden;position:relative;.amap-copyright,.amap-logo{display:none!important}}:root{--jky-button-primary-bg:#007bff;--jky-button-primary-text:#fff;--jky-button-primary-hover-bg:#0056b3;--jky-button-success-bg:#28a745;--jky-button-success-text:#fff;--jky-button-success-hover-bg:#1e7e34;--jky-button-warning-bg:#ffc107;--jky-button-warning-text:#fff;--jky-button-warning-hover-bg:#e0a800;--jky-button-danger-bg:#dc3545;--jky-button-danger-text:#fff;--jky-button-danger-hover-bg:#c82333;--jky-button-info-bg:#6c757d;--jky-button-info-text:#fff;--jky-button-info-hover-bg:#5a6268;--jky-button-default-bg:#fff;--jky-button-default-text:#606266;--jky-button-default-border:#dcdfe6;--jky-button-default-hover-bg:#f5f7fa;--jky-button-font-size:14px;--jky-button-font-size-small:12px;--jky-button-font-size-large:16px;--jky-button-padding:0 16px;--jky-button-padding-small:0 12px;--jky-button-padding-large:0 20px;--jky-button-height:40px;--jky-button-height-small:32px;--jky-button-height-large:48px;--jky-button-border-radius:0.375rem;--jky-button-disabled-opacity:0.5;--jky-button-disabled-bg:#f5f7fa;--jky-button-disabled-text:#c0c4cc;--jky-button-loading-opacity:0.7;--jky-button-icon-size:1.25rem;--jky-button-icon-margin:0.5rem}.jky-button{align-items:center;background-color:var(--jky-button-default-bg);border:1px solid var(--jky-button-default-border);border-radius:var(--jky-button-border-radius);color:var(--jky-button-default-text);cursor:pointer;display:inline-flex;font-size:var(--jky-button-font-size);font-weight:500;height:var(--jky-button-height);justify-content:center;padding:var(--jky-button-padding);transition:color .2s,background-color .2s}.jky-button--primary{background-color:var(--jky-button-primary-bg);border:none;color:var(--jky-button-primary-text)}.jky-button--primary:hover{background-color:var(--jky-button-primary-hover-bg)}.jky-button--success{background-color:var(--jky-button-success-bg);border:none;color:var(--jky-button-success-text)}.jky-button--success:hover{background-color:var(--jky-button-success-hover-bg)}.jky-button--warning{background-color:var(--jky-button-warning-bg);border:none;color:var(--jky-button-warning-text)}.jky-button--warning:hover{background-color:var(--jky-button-warning-hover-bg)}.jky-button--danger{background-color:var(--jky-button-danger-bg);border:none;color:var(--jky-button-danger-text)}.jky-button--danger:hover{background-color:var(--jky-button-danger-hover-bg)}.jky-button--info{background-color:var(--jky-button-info-bg);border:none;color:var(--jky-button-info-text)}.jky-button--info:hover{background-color:var(--jky-button-info-hover-bg)}.jky-button--small{font-size:var(--jky-button-font-size-small);height:var(--jky-button-height-small);padding:var(--jky-button-padding-small)}.jky-button--large{font-size:var(--jky-button-font-size-large);height:var(--jky-button-height-large);padding:var(--jky-button-padding-large)}.jky-button.is-disabled{background-color:var(--jky-button-disabled-bg);color:var(--jky-button-disabled-text);cursor:not-allowed;opacity:var(--jky-button-disabled-opacity);pointer-events:none}.jky-button.is-loading{opacity:var(--jky-button-loading-opacity);pointer-events:none;position:relative}.jky-button__loading{display:flex;inset:0;position:absolute}.jky-button__icon,.jky-button__loading{align-items:center;justify-content:center}.jky-button__icon{display:inline-flex;font-size:1em;margin-right:var(--jky-button-icon-margin)}.jky-button__icon:only-child{margin-right:0}.jky-button--suffix .jky-button__icon{margin-left:var(--jky-button-icon-margin);margin-right:0}.jky-button:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px #000;outline:2px solid transparent;outline-offset:2px}.loading-spinner{animation:spin 1s linear infinite;height:var(--jky-button-icon-size);width:var(--jky-button-icon-size)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:root{--jky-button-nav-active-bg:var(--el-color-primary);--jky-button-nav-active-text:#fff;--jky-button-nav-inactive-bg:var(--el-fill-color-light);--jky-button-nav-inactive-text:var(--el-text-color-regular);--el-dropdown-menu-margin-left:12px}.jky-button-nav{align-items:center;display:flex;flex-wrap:wrap;.el-dropdown{margin-left:var(--el-dropdown-menu-margin-left)}}.jky-button-nav-item{background-color:var(--jky-button-nav-inactive-bg);color:var(--jky-button-nav-inactive-text);&.is-active,&[aria-pressed=true]{background-color:var(--jky-button-nav-active-bg);color:var(--jky-button-nav-active-text)}}:root{--j-code-mirror-border-color:#dcdfe6;--j-code-mirror-border-radius:4px;--j-code-mirror-height:400px}.j-code-mirror-editor{border-radius:var(--j-code-mirror-border-radius);height:var(--j-code-mirror-height);overflow:hidden;width:100%}.code-mirror-container{height:100%;overflow:auto;width:100%}.code-mirror-container .cm-editor{height:100%}.code-mirror-container .cm-scroller{font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.5;overflow:auto}.code-mirror-container .cm-gutters{background-color:#2c2d2d;border-color:#4c4d4f;color:#909399}.jky-form,:root{--jky-form-item-border-width:4px;--jky-form-item-border-color:var(--el-color-primary);--jky-form-item-bg-color:rgba(var(--el-color-primary-rgb),0.5)}.jky-form-item-wrapper__error,.jky-form-item-wrapper__loading{align-items:center;display:flex}.skeleton-box{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;background-color:#e5e7eb;border-radius:.25rem}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}:root{--jky-menu-bg-color:#fff;--jky-menu-text-color:#303133;--jky-menu-active-color:#409eff;--jky-menu-hover-bg-color:#f5f7fa;--jky-menu-hover-text-color:#606266;--jky-menu-item-height:56px;--jky-menu-item-padding:0 20px;--jky-menu-item-font-size:14px;--jky-menu-icon-size:18px;--jky-menu-icon-margin:8px;--jky-menu-border-color:#e4e7ed;--jky-menu-disabled-opacity:0.5;--jky-menu-disabled-text-color:#c0c4cc}.jky-menu{li+li{margin-top:0}}.jky-page-header,:root{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--jky-page-header-bg-color:#1890ff}.jky-page-header--dark{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--el-text-color-regular:#fff}.jky-page-header--light{--jky-page-header-title-color:#000;--jky-page-header-text-color:rgba(0,0,0,.85);--jky-page-header-icon-color:#000;--el-text-color-regular:#000}.jky-page-header,:root{--jky-page-header-bg-size:cover;--jky-page-header-bg-position:center;--jky-page-header-box-shadow:0 2px 8px rgba(0,0,0,.15);--jky-page-header-padding-x:24px;--jky-page-header-padding-x-mobile:16px;--jky-page-header-gap:16px;--jky-page-header-gap-mobile:12px;--jky-page-header-gap-left:12px;--jky-page-header-gap-status:12px;--jky-page-header-gap-center:24px;--jky-page-header-gap-center-mobile:12px;--jky-page-header-title-size:20px;--jky-page-header-title-size-mobile:16px;--jky-page-header-title-weight:600;--jky-page-header-text-size:16px;--jky-page-header-icon-size:20px;--jky-page-header-icon-hover-opacity:0.8;--jky-page-header-logo-height:40px;--jky-page-header-avatar-size:32px}.jky-page-header{background-color:var(--jky-page-header-bg-color);background-position:var(--jky-page-header-bg-position);background-size:var(--jky-page-header-bg-size);box-shadow:var(--jky-page-header-box-shadow);width:100%}.jky-page-header__container{align-items:center;display:flex;height:100%;justify-content:space-between;margin:0 auto;max-width:100%;padding:0 var(--jky-page-header-padding-x)}.jky-page-header__left{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap-left)}.jky-page-header__logo{height:var(--jky-page-header-logo-height);object-fit:contain;width:auto}.jky-page-header__title{color:var(--jky-page-header-title-color);font-size:var(--jky-page-header-title-size);font-weight:var(--jky-page-header-title-weight);white-space:nowrap}.jky-page-header__center{align-items:center;display:flex;flex:1;justify-content:center;margin:0 var(--jky-page-header-gap-center);min-width:0}.jky-page-header__right{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap)}.jky-page-header__status-icons{align-items:center;display:flex;gap:var(--jky-page-header-gap-status)}.jky-page-header__status-icon{color:var(--jky-page-header-icon-color);cursor:pointer;transition:opacity .2s;&:hover{opacity:var(--jky-page-header-icon-hover-opacity)}}.jky-page-header__time{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size);white-space:nowrap}.jky-page-header__user{align-items:center;color:var(--jky-page-header-text-color);cursor:pointer;display:flex;gap:8px}.jky-page-header__avatar{color:var(--jky-page-header-icon-color);img{height:100%;object-fit:cover;width:100%}}.jky-page-header__username{white-space:nowrap}.jky-page-header__logout,.jky-page-header__username{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size)}@media (max-width:768px){.jky-page-header__container{padding:0 var(--jky-page-header-padding-x-mobile)}.jky-page-header__title{font-size:var(--jky-page-header-title-size-mobile)}.jky-page-header__center{margin:0 var(--jky-page-header-gap-center-mobile)}.jky-page-header__right{gap:var(--jky-page-header-gap-mobile)}}:root{--jky-page-layout-gap:5}.jky-page-layout{column-gap:calc(var(--spacing)*var(--jky-page-layout-gap));.el-menu{border-right:none}.el-auto-resizer{.el-scrollbar__view{height:100%}}}.jky-page-table{--jky-page-table_pagination-position:flex-end;.jky-page-table__pagination{.el-scrollbar__view{display:flex;justify-content:var(--jky-page-table_pagination-position)}}}.jky-action-column{.el-button+.el-button{margin-left:0}}:root{--jky-rich-editor-border:#d9d9d9;--jky-rich-editor-border-hover:#409eff;--jky-rich-editor-border-radius:4px;--jky-rich-editor-box-shadow:0 0 0 1px #409eff}.jky-rich-editor{width:100%}.jky-rich-editor .tox-tinymce{border:1px solid var(--jky-rich-editor-border);border-radius:var(--jky-rich-editor-border-radius);transition:border-color .2s}.jky-rich-editor .tox-tinymce:hover{border-color:var(--jky-rich-editor-border-hover)}.jky-rich-editor .tox-tinymce:focus-within{border-color:var(--jky-rich-editor-border-hover);box-shadow:var(--jky-rich-editor-box-shadow)}.jky-rich-editor.is-disabled .tox-tinymce{background-color:#f5f7fa;cursor:not-allowed}.jky-rich-editor.is-readonly .tox-tinymce{background-color:#fafafa}:root{--jky-say-hello-bg:#42b883;--jky-say-hello-text:#fff;--jky-say-hello-hover-bg:#3aa876;--jky-say-hello-font-size:16px;--jky-say-hello-padding:8px 20px;--jky-say-hello-margin:4px 2px;--jky-say-hello-border-radius:6px}.jky-say-hello{background-color:var(--jky-say-hello-bg);border-radius:var(--jky-say-hello-border-radius);color:var(--jky-say-hello-text);cursor:pointer;display:inline-block;font-size:var(--jky-say-hello-font-size);margin:var(--jky-say-hello-margin);padding:var(--jky-say-hello-padding);text-align:center;text-decoration:none;transition:background-color .2s ease}.jky-say-hello:hover{background-color:var(--jky-say-hello-hover-bg)}@import "tailwindcss";@plugin "@iconify/tailwind4";@source "../node_modules/jky-component-lib/dist/es/";@source "../docs/**/*.md";@source "./**/*.md";@source "./**/*.vue";@source "./**/*.css";@custom-variant dark (&:is(.dark *));.jky-tabs{.el-tabs__content{display:none}.el-tabs__header{margin-bottom:0}}.jky-tabs-round{--el-tabs-header-height:32px;--el-tabs-item-background:#fff;--el-tabs-active-item-background:var(--el-color-primary);.el-tabs__header{--el-border-color-light:transparent}.el-tabs__item{background-color:var(--el-tabs-item-background);border-bottom:none!important;border-radius:999px;margin-left:1rem;&.is-active{background-color:var(--el-tabs-active-item-background);.el-icon,.jky-tabs-__item-label{color:var(--el-color-white)}}&.first-child{margin-left:0}}}.jky-tabs-context-menu{display:inline-block}
@@ -1,7 +1,14 @@
1
+ /* AMap 高德地图组件样式 */
2
+ .jky-amap-container {
3
+ /* 地图容器样式 */
4
+ position: relative;
5
+ overflow: hidden;
1
6
 
2
- /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
- .amap-icon img,
4
- .amap-marker-content img {
5
- width: 25px;
6
- height: 34px;
7
+ /* 隐藏高德地图的 logo 和版权信息(注意:商业使用请遵守高德地图条款) */
8
+ .amap-logo {
9
+ display: none !important;
10
+ }
11
+ .amap-copyright {
12
+ display: none !important;
13
+ }
7
14
  }
@@ -1,14 +1,7 @@
1
- /* AMap 高德地图组件样式 */
2
- .jky-amap-container {
3
- /* 地图容器样式 */
4
- position: relative;
5
- overflow: hidden;
6
1
 
7
- /* 隐藏高德地图的 logo 和版权信息(注意:商业使用请遵守高德地图条款) */
8
- .amap-logo {
9
- display: none !important;
10
- }
11
- .amap-copyright {
12
- display: none !important;
13
- }
2
+ /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
+ .amap-icon img,
4
+ .amap-marker-content img {
5
+ width: 25px;
6
+ height: 34px;
14
7
  }
@@ -1,7 +1,17 @@
1
1
  import { FormItemProps } from './types';
2
2
  declare function __VLS_template(): {
3
3
  attrs: Partial<{}>;
4
- slots: Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>>;
4
+ slots: Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>> & Partial<Record<string, (_: any) => any>> & {
5
+ loading?(_: {
6
+ field: string;
7
+ }): any;
8
+ loading?(_: {
9
+ field: string;
10
+ }): any;
11
+ loading?(_: {
12
+ field: string;
13
+ }): any;
14
+ };
5
15
  refs: {};
6
16
  rootEl: any;
7
17
  };
@@ -54,6 +54,8 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
54
54
  const vue = require("vue");
55
55
  const iconsVue = require("@element-plus/icons-vue");
56
56
  const ElementPlus = require("element-plus");
57
+ const FormItemWrapper_vue_vue_type_script_setup_true_lang = require("./FormItemWrapper.vue.js");
58
+ ;/* empty css */
57
59
  const AddInputItem_vue_vue_type_script_setup_true_lang = require("./items/AddInputItem.vue.js");
58
60
  const AMapPickerItem_vue_vue_type_script_setup_true_lang = require("./items/AMapPickerItem.vue.js");
59
61
  const AutocompleteItem_vue_vue_type_script_setup_true_lang = require("./items/AutocompleteItem.vue.js");
@@ -131,6 +133,8 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
131
133
  setup(__props) {
132
134
  const props = __props;
133
135
  const loading = vue.ref(false);
136
+ const propsLoadStatus = vue.ref("idle");
137
+ const loadError = vue.ref(null);
134
138
  const componentProps = vue.ref({});
135
139
  const rulesData = vue.ref(null);
136
140
  const rules = vue.computed(() => {
@@ -148,10 +152,13 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
148
152
  const configProps = props.config.componentProps;
149
153
  if (!configProps) {
150
154
  componentProps.value = {};
155
+ propsLoadStatus.value = "ready";
151
156
  return;
152
157
  }
153
158
  if (typeof configProps === "function") {
154
159
  loading.value = true;
160
+ propsLoadStatus.value = "loading";
161
+ loadError.value = null;
155
162
  try {
156
163
  const result = yield configProps({
157
164
  model: props.model,
@@ -159,15 +166,19 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
159
166
  $form: props.model
160
167
  });
161
168
  componentProps.value = result || {};
169
+ propsLoadStatus.value = "ready";
162
170
  } catch (error) {
163
171
  console.error("Failed to load component props:", error);
164
172
  componentProps.value = {};
173
+ loadError.value = error;
174
+ propsLoadStatus.value = "error";
165
175
  } finally {
166
176
  loading.value = false;
167
177
  }
168
178
  return;
169
179
  }
170
180
  componentProps.value = configProps;
181
+ propsLoadStatus.value = "ready";
171
182
  });
172
183
  }
173
184
  function loadRules() {
@@ -197,6 +208,11 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
197
208
  rulesData.value = typeof configRules !== "function" ? configRules : null;
198
209
  });
199
210
  }
211
+ function reloadComponentProps() {
212
+ return __async(this, null, function* () {
213
+ yield loadComponentProps();
214
+ });
215
+ }
200
216
  const watchFields = vue.computed(() => {
201
217
  const config = props.config;
202
218
  return config.watchFields || [];
@@ -240,6 +256,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
240
256
  title,
241
257
  placeholder,
242
258
  componentProps: _componentProps,
259
+ rules: _rules,
243
260
  hidden,
244
261
  customStyle,
245
262
  children,
@@ -255,13 +272,17 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
255
272
  formatValue,
256
273
  formatModel,
257
274
  noLabelMargin,
258
- titleRender
275
+ titleRender,
276
+ watchFields: _watchFields,
277
+ help: _help,
278
+ useDefaultBorderClass: _useDefaultBorderClass
259
279
  } = _a, rest = __objRest(_a, [
260
280
  "field",
261
281
  "type",
262
282
  "title",
263
283
  "placeholder",
264
284
  "componentProps",
285
+ "rules",
265
286
  "hidden",
266
287
  "customStyle",
267
288
  "children",
@@ -277,7 +298,10 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
277
298
  "formatValue",
278
299
  "formatModel",
279
300
  "noLabelMargin",
280
- "titleRender"
301
+ "titleRender",
302
+ "watchFields",
303
+ "help",
304
+ "useDefaultBorderClass"
281
305
  ]);
282
306
  return rest;
283
307
  });
@@ -391,23 +415,35 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
391
415
  ], 64)),
392
416
  __props.config.help && __props.config.help.tooltip ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderHelpTooltip()), { key: 2 })) : vue.createCommentVNode("", true)
393
417
  ]),
394
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
395
- "model-value": modelValue.value,
396
- config: __props.config,
397
- "component-props": componentProps.value,
398
- "component-slots": componentSlotsObj.value,
399
- disabled: __props.disabled,
400
- "onUpdate:modelValue": _cache[0] || (_cache[0] = (val) => __props.model[__props.field] = val)
401
- }, vue.createSlots({ _: 2 }, [
402
- vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
403
- return {
404
- name,
405
- fn: vue.withCtx((slotData) => [
406
- vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
407
- ])
408
- };
409
- })
410
- ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"])),
418
+ vue.createVNode(FormItemWrapper_vue_vue_type_script_setup_true_lang.default, {
419
+ status: propsLoadStatus.value,
420
+ error: loadError.value,
421
+ onRetry: reloadComponentProps
422
+ }, {
423
+ loading: vue.withCtx(() => [
424
+ vue.renderSlot(_ctx.$slots, "loading", { field: __props.field })
425
+ ]),
426
+ default: vue.withCtx(() => [
427
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
428
+ "model-value": modelValue.value,
429
+ config: __props.config,
430
+ "component-props": componentProps.value,
431
+ "component-slots": componentSlotsObj.value,
432
+ disabled: __props.disabled,
433
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (val) => __props.model[__props.field] = val)
434
+ }, vue.createSlots({ _: 2 }, [
435
+ vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
436
+ return {
437
+ name,
438
+ fn: vue.withCtx((slotData) => [
439
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
440
+ ])
441
+ };
442
+ })
443
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
444
+ ]),
445
+ _: 3
446
+ }, 8, ["status", "error"]),
411
447
  __props.config.help && !__props.config.help.tooltip ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderHelpText()), { key: 0 })) : vue.createCommentVNode("", true)
412
448
  ]),
413
449
  _: 3
@@ -422,42 +458,66 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
422
458
  default: vue.withCtx(() => [
423
459
  __props.config.prepend || __props.config.append ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
424
460
  __props.config.prepend ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5, vue.toDisplayString(__props.config.prepend), 1)) : vue.createCommentVNode("", true),
425
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
426
- "model-value": modelValue.value,
427
- config: __props.config,
428
- "component-props": componentProps.value,
429
- "component-slots": componentSlotsObj.value,
430
- disabled: __props.disabled,
431
- "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => __props.model[__props.field] = val)
432
- }, vue.createSlots({ _: 2 }, [
433
- vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
434
- return {
435
- name,
436
- fn: vue.withCtx((slotData) => [
437
- vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
438
- ])
439
- };
440
- })
441
- ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"])),
461
+ vue.createVNode(FormItemWrapper_vue_vue_type_script_setup_true_lang.default, {
462
+ status: propsLoadStatus.value,
463
+ error: loadError.value,
464
+ onRetry: reloadComponentProps
465
+ }, {
466
+ loading: vue.withCtx(() => [
467
+ vue.renderSlot(_ctx.$slots, "loading", { field: __props.field })
468
+ ]),
469
+ default: vue.withCtx(() => [
470
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
471
+ "model-value": modelValue.value,
472
+ config: __props.config,
473
+ "component-props": componentProps.value,
474
+ "component-slots": componentSlotsObj.value,
475
+ disabled: __props.disabled,
476
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => __props.model[__props.field] = val)
477
+ }, vue.createSlots({ _: 2 }, [
478
+ vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
479
+ return {
480
+ name,
481
+ fn: vue.withCtx((slotData) => [
482
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
483
+ ])
484
+ };
485
+ })
486
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
487
+ ]),
488
+ _: 3
489
+ }, 8, ["status", "error"]),
442
490
  __props.config.append ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6, vue.toDisplayString(__props.config.append), 1)) : vue.createCommentVNode("", true)
443
- ])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
491
+ ])) : (vue.openBlock(), vue.createBlock(FormItemWrapper_vue_vue_type_script_setup_true_lang.default, {
444
492
  key: 1,
445
- "model-value": modelValue.value,
446
- config: __props.config,
447
- "component-props": componentProps.value,
448
- "component-slots": componentSlotsObj.value,
449
- disabled: __props.disabled,
450
- "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => __props.model[__props.field] = val)
451
- }, vue.createSlots({ _: 2 }, [
452
- vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
453
- return {
454
- name,
455
- fn: vue.withCtx((slotData) => [
456
- vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
457
- ])
458
- };
459
- })
460
- ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"])),
493
+ status: propsLoadStatus.value,
494
+ error: loadError.value,
495
+ onRetry: reloadComponentProps
496
+ }, {
497
+ loading: vue.withCtx(() => [
498
+ vue.renderSlot(_ctx.$slots, "loading", { field: __props.field })
499
+ ]),
500
+ default: vue.withCtx(() => [
501
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
502
+ "model-value": modelValue.value,
503
+ config: __props.config,
504
+ "component-props": componentProps.value,
505
+ "component-slots": componentSlotsObj.value,
506
+ disabled: __props.disabled,
507
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => __props.model[__props.field] = val)
508
+ }, vue.createSlots({ _: 2 }, [
509
+ vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
510
+ return {
511
+ name,
512
+ fn: vue.withCtx((slotData) => [
513
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
514
+ ])
515
+ };
516
+ })
517
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
518
+ ]),
519
+ _: 3
520
+ }, 8, ["status", "error"])),
461
521
  __props.config.help && !__props.config.help.tooltip ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderHelpText()), { key: 2 })) : vue.createCommentVNode("", true)
462
522
  ]),
463
523
  _: 2
@@ -0,0 +1,33 @@
1
+ interface Props {
2
+ status: 'idle' | 'loading' | 'ready' | 'error';
3
+ error?: Error | null;
4
+ }
5
+ declare function handleRetry(): void;
6
+ declare function __VLS_template(): {
7
+ attrs: Partial<{}>;
8
+ slots: {
9
+ loading?(_: {}): any;
10
+ error?(_: {
11
+ error: Error;
12
+ retry: typeof handleRetry;
13
+ }): any;
14
+ default?(_: {}): any;
15
+ };
16
+ refs: {};
17
+ rootEl: any;
18
+ };
19
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
20
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
21
+ retry: () => any;
22
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
23
+ onRetry?: (() => any) | undefined;
24
+ }>, {
25
+ error: Error | null;
26
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
27
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
28
+ export default _default;
29
+ type __VLS_WithTemplateSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -0,0 +1,88 @@
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 iconsVue = require("@element-plus/icons-vue");
24
+ const ElementPlus = require("element-plus");
25
+ const _hoisted_1 = {
26
+ key: 1,
27
+ class: "jky-form-item-wrapper__error"
28
+ };
29
+ const _hoisted_2 = { class: "flex items-center gap-2 text-red-500 py-1" };
30
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValues({}, {
31
+ name: "JkyFormItemWrapper"
32
+ }), {
33
+ __name: "FormItemWrapper",
34
+ props: {
35
+ status: {},
36
+ error: { default: null }
37
+ },
38
+ emits: ["retry"],
39
+ setup(__props, { emit: __emit }) {
40
+ const props = __props;
41
+ const emit = __emit;
42
+ const showLoading = vue.computed(() => props.status === "loading");
43
+ const showError = vue.computed(() => props.status === "error");
44
+ function handleRetry() {
45
+ emit("retry");
46
+ }
47
+ return (_ctx, _cache) => {
48
+ return showLoading.value ? (vue.openBlock(), vue.createBlock(vue.unref(iconsVue.Loading), {
49
+ key: 0,
50
+ class: "jky-form-item-wrapper__loading"
51
+ }, {
52
+ default: vue.withCtx(() => [
53
+ vue.renderSlot(_ctx.$slots, "loading", {}, () => [
54
+ _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "skeleton-box w-full h-9 rounded bg-gray-200 animate-pulse" }, null, -1))
55
+ ])
56
+ ]),
57
+ _: 3
58
+ })) : showError.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
59
+ vue.renderSlot(_ctx.$slots, "error", {
60
+ error: __props.error,
61
+ retry: handleRetry
62
+ }, () => [
63
+ vue.createElementVNode("div", _hoisted_2, [
64
+ vue.createVNode(vue.unref(ElementPlus.ElIcon), { size: 14 }, {
65
+ default: vue.withCtx(() => [
66
+ vue.createVNode(vue.unref(iconsVue.WarningFilled))
67
+ ]),
68
+ _: 1
69
+ }),
70
+ _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "text-sm" }, "加载失败", -1)),
71
+ vue.createVNode(vue.unref(ElementPlus.ElButton), {
72
+ link: "",
73
+ type: "primary",
74
+ size: "small",
75
+ onClick: handleRetry
76
+ }, {
77
+ default: vue.withCtx(() => [..._cache[1] || (_cache[1] = [
78
+ vue.createTextVNode(" 重试 ", -1)
79
+ ])]),
80
+ _: 1
81
+ })
82
+ ])
83
+ ])
84
+ ])) : vue.renderSlot(_ctx.$slots, "default", { key: 2 });
85
+ };
86
+ }
87
+ }));
88
+ exports.default = _sfc_main;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const FormItemWrapper_vue_vue_type_script_setup_true_lang = require("./FormItemWrapper.vue.js");
4
+ ;/* empty css */
5
+ exports.default = FormItemWrapper_vue_vue_type_script_setup_true_lang.default;
@@ -11,3 +11,27 @@
11
11
  .jky-form {
12
12
  /* 表单容器样式 */
13
13
  }
14
+
15
+
16
+ /* FormItemWrapper 组件样式 */
17
+ .jky-form-item-wrapper__loading {
18
+ display: flex;
19
+ align-items: center;
20
+ }
21
+ .jky-form-item-wrapper__error {
22
+ display: flex;
23
+ align-items: center;
24
+ }
25
+ .skeleton-box {
26
+ background-color: #e5e7eb;
27
+ border-radius: 0.25rem;
28
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
29
+ }
30
+ @keyframes pulse {
31
+ 0%, 100% {
32
+ opacity: 1;
33
+ }
34
+ 50% {
35
+ opacity: 0.5;
36
+ }
37
+ }
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const version = "0.0.130";
3
+ const version = "0.0.131";
4
4
  exports.version = version;
@@ -166,6 +166,7 @@
166
166
  --radius-md: .375rem;
167
167
  --radius-lg: .5rem;
168
168
  --radius-2xl: 1rem;
169
+ --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;
169
170
  --blur-sm: 8px;
170
171
  --default-transition-duration: .15s;
171
172
  --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);
@@ -1738,6 +1739,10 @@
1738
1739
  height: calc(var(--spacing) * 7);
1739
1740
  }
1740
1741
 
1742
+ .h-9 {
1743
+ height: calc(var(--spacing) * 9);
1744
+ }
1745
+
1741
1746
  .h-12 {
1742
1747
  height: calc(var(--spacing) * 12);
1743
1748
  }
@@ -1883,6 +1888,10 @@
1883
1888
  transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );
1884
1889
  }
1885
1890
 
1891
+ .animate-pulse {
1892
+ animation: var(--animate-pulse);
1893
+ }
1894
+
1886
1895
  .cursor-pointer {
1887
1896
  cursor: pointer;
1888
1897
  }
@@ -3442,3 +3451,9 @@
3442
3451
  syntax: "*";
3443
3452
  inherits: false
3444
3453
  }
3454
+
3455
+ @keyframes pulse {
3456
+ 50% {
3457
+ opacity: .5;
3458
+ }
3459
+ }
@@ -1 +1 @@
1
- .jky-add-input,:root{--jky-add-input-gap:12px;--jky-add-input-row-gap:8px;--jky-add-input-min-width:100px;--jky-add-input-action-width:80px}.jky-add-input{display:flex;flex-direction:column;gap:var(--jky-add-input-row-gap);min-width:var(--jky-add-input-min-width)}.jky-add-input__row{align-items:center;display:flex;gap:var(--jky-add-input-gap)}.jky-add-input__key,.jky-add-input__value{flex:1;min-width:0}.jky-add-input__actions{display:flex;flex-shrink:0;gap:var(--jky-add-input-gap);width:var(--jky-add-input-action-width)}.jky-amap-container{overflow:hidden;position:relative;.amap-copyright,.amap-logo{display:none!important}}:root{--jky-button-primary-bg:#007bff;--jky-button-primary-text:#fff;--jky-button-primary-hover-bg:#0056b3;--jky-button-success-bg:#28a745;--jky-button-success-text:#fff;--jky-button-success-hover-bg:#1e7e34;--jky-button-warning-bg:#ffc107;--jky-button-warning-text:#fff;--jky-button-warning-hover-bg:#e0a800;--jky-button-danger-bg:#dc3545;--jky-button-danger-text:#fff;--jky-button-danger-hover-bg:#c82333;--jky-button-info-bg:#6c757d;--jky-button-info-text:#fff;--jky-button-info-hover-bg:#5a6268;--jky-button-default-bg:#fff;--jky-button-default-text:#606266;--jky-button-default-border:#dcdfe6;--jky-button-default-hover-bg:#f5f7fa;--jky-button-font-size:14px;--jky-button-font-size-small:12px;--jky-button-font-size-large:16px;--jky-button-padding:0 16px;--jky-button-padding-small:0 12px;--jky-button-padding-large:0 20px;--jky-button-height:40px;--jky-button-height-small:32px;--jky-button-height-large:48px;--jky-button-border-radius:0.375rem;--jky-button-disabled-opacity:0.5;--jky-button-disabled-bg:#f5f7fa;--jky-button-disabled-text:#c0c4cc;--jky-button-loading-opacity:0.7;--jky-button-icon-size:1.25rem;--jky-button-icon-margin:0.5rem}.jky-button{align-items:center;background-color:var(--jky-button-default-bg);border:1px solid var(--jky-button-default-border);border-radius:var(--jky-button-border-radius);color:var(--jky-button-default-text);cursor:pointer;display:inline-flex;font-size:var(--jky-button-font-size);font-weight:500;height:var(--jky-button-height);justify-content:center;padding:var(--jky-button-padding);transition:color .2s,background-color .2s}.jky-button--primary{background-color:var(--jky-button-primary-bg);border:none;color:var(--jky-button-primary-text)}.jky-button--primary:hover{background-color:var(--jky-button-primary-hover-bg)}.jky-button--success{background-color:var(--jky-button-success-bg);border:none;color:var(--jky-button-success-text)}.jky-button--success:hover{background-color:var(--jky-button-success-hover-bg)}.jky-button--warning{background-color:var(--jky-button-warning-bg);border:none;color:var(--jky-button-warning-text)}.jky-button--warning:hover{background-color:var(--jky-button-warning-hover-bg)}.jky-button--danger{background-color:var(--jky-button-danger-bg);border:none;color:var(--jky-button-danger-text)}.jky-button--danger:hover{background-color:var(--jky-button-danger-hover-bg)}.jky-button--info{background-color:var(--jky-button-info-bg);border:none;color:var(--jky-button-info-text)}.jky-button--info:hover{background-color:var(--jky-button-info-hover-bg)}.jky-button--small{font-size:var(--jky-button-font-size-small);height:var(--jky-button-height-small);padding:var(--jky-button-padding-small)}.jky-button--large{font-size:var(--jky-button-font-size-large);height:var(--jky-button-height-large);padding:var(--jky-button-padding-large)}.jky-button.is-disabled{background-color:var(--jky-button-disabled-bg);color:var(--jky-button-disabled-text);cursor:not-allowed;opacity:var(--jky-button-disabled-opacity);pointer-events:none}.jky-button.is-loading{opacity:var(--jky-button-loading-opacity);pointer-events:none;position:relative}.jky-button__loading{display:flex;inset:0;position:absolute}.jky-button__icon,.jky-button__loading{align-items:center;justify-content:center}.jky-button__icon{display:inline-flex;font-size:1em;margin-right:var(--jky-button-icon-margin)}.jky-button__icon:only-child{margin-right:0}.jky-button--suffix .jky-button__icon{margin-left:var(--jky-button-icon-margin);margin-right:0}.jky-button:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px #000;outline:2px solid transparent;outline-offset:2px}.loading-spinner{animation:spin 1s linear infinite;height:var(--jky-button-icon-size);width:var(--jky-button-icon-size)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:root{--jky-button-nav-active-bg:var(--el-color-primary);--jky-button-nav-active-text:#fff;--jky-button-nav-inactive-bg:var(--el-fill-color-light);--jky-button-nav-inactive-text:var(--el-text-color-regular);--el-dropdown-menu-margin-left:12px}.jky-button-nav{align-items:center;display:flex;flex-wrap:wrap;.el-dropdown{margin-left:var(--el-dropdown-menu-margin-left)}}.jky-button-nav-item{background-color:var(--jky-button-nav-inactive-bg);color:var(--jky-button-nav-inactive-text);&.is-active,&[aria-pressed=true]{background-color:var(--jky-button-nav-active-bg);color:var(--jky-button-nav-active-text)}}:root{--j-code-mirror-border-color:#dcdfe6;--j-code-mirror-border-radius:4px;--j-code-mirror-height:400px}.j-code-mirror-editor{border-radius:var(--j-code-mirror-border-radius);height:var(--j-code-mirror-height);overflow:hidden;width:100%}.code-mirror-container{height:100%;overflow:auto;width:100%}.code-mirror-container .cm-editor{height:100%}.code-mirror-container .cm-scroller{font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.5;overflow:auto}.code-mirror-container .cm-gutters{background-color:#2c2d2d;border-color:#4c4d4f;color:#909399}.jky-form,:root{--jky-form-item-border-width:4px;--jky-form-item-border-color:var(--el-color-primary);--jky-form-item-bg-color:rgba(var(--el-color-primary-rgb),0.5)}:root{--jky-menu-bg-color:#fff;--jky-menu-text-color:#303133;--jky-menu-active-color:#409eff;--jky-menu-hover-bg-color:#f5f7fa;--jky-menu-hover-text-color:#606266;--jky-menu-item-height:56px;--jky-menu-item-padding:0 20px;--jky-menu-item-font-size:14px;--jky-menu-icon-size:18px;--jky-menu-icon-margin:8px;--jky-menu-border-color:#e4e7ed;--jky-menu-disabled-opacity:0.5;--jky-menu-disabled-text-color:#c0c4cc}.jky-menu{li+li{margin-top:0}}.jky-page-header,:root{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--jky-page-header-bg-color:#1890ff}.jky-page-header--dark{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--el-text-color-regular:#fff}.jky-page-header--light{--jky-page-header-title-color:#000;--jky-page-header-text-color:rgba(0,0,0,.85);--jky-page-header-icon-color:#000;--el-text-color-regular:#000}.jky-page-header,:root{--jky-page-header-bg-size:cover;--jky-page-header-bg-position:center;--jky-page-header-box-shadow:0 2px 8px rgba(0,0,0,.15);--jky-page-header-padding-x:24px;--jky-page-header-padding-x-mobile:16px;--jky-page-header-gap:16px;--jky-page-header-gap-mobile:12px;--jky-page-header-gap-left:12px;--jky-page-header-gap-status:12px;--jky-page-header-gap-center:24px;--jky-page-header-gap-center-mobile:12px;--jky-page-header-title-size:20px;--jky-page-header-title-size-mobile:16px;--jky-page-header-title-weight:600;--jky-page-header-text-size:16px;--jky-page-header-icon-size:20px;--jky-page-header-icon-hover-opacity:0.8;--jky-page-header-logo-height:40px;--jky-page-header-avatar-size:32px}.jky-page-header{background-color:var(--jky-page-header-bg-color);background-position:var(--jky-page-header-bg-position);background-size:var(--jky-page-header-bg-size);box-shadow:var(--jky-page-header-box-shadow);width:100%}.jky-page-header__container{align-items:center;display:flex;height:100%;justify-content:space-between;margin:0 auto;max-width:100%;padding:0 var(--jky-page-header-padding-x)}.jky-page-header__left{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap-left)}.jky-page-header__logo{height:var(--jky-page-header-logo-height);object-fit:contain;width:auto}.jky-page-header__title{color:var(--jky-page-header-title-color);font-size:var(--jky-page-header-title-size);font-weight:var(--jky-page-header-title-weight);white-space:nowrap}.jky-page-header__center{align-items:center;display:flex;flex:1;justify-content:center;margin:0 var(--jky-page-header-gap-center);min-width:0}.jky-page-header__right{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap)}.jky-page-header__status-icons{align-items:center;display:flex;gap:var(--jky-page-header-gap-status)}.jky-page-header__status-icon{color:var(--jky-page-header-icon-color);cursor:pointer;transition:opacity .2s;&:hover{opacity:var(--jky-page-header-icon-hover-opacity)}}.jky-page-header__time{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size);white-space:nowrap}.jky-page-header__user{align-items:center;color:var(--jky-page-header-text-color);cursor:pointer;display:flex;gap:8px}.jky-page-header__avatar{color:var(--jky-page-header-icon-color);img{height:100%;object-fit:cover;width:100%}}.jky-page-header__username{white-space:nowrap}.jky-page-header__logout,.jky-page-header__username{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size)}@media (max-width:768px){.jky-page-header__container{padding:0 var(--jky-page-header-padding-x-mobile)}.jky-page-header__title{font-size:var(--jky-page-header-title-size-mobile)}.jky-page-header__center{margin:0 var(--jky-page-header-gap-center-mobile)}.jky-page-header__right{gap:var(--jky-page-header-gap-mobile)}}:root{--jky-page-layout-gap:5}.jky-page-layout{column-gap:calc(var(--spacing)*var(--jky-page-layout-gap));.el-menu{border-right:none}.el-auto-resizer{.el-scrollbar__view{height:100%}}}.jky-page-table{--jky-page-table_pagination-position:flex-end;.jky-page-table__pagination{.el-scrollbar__view{display:flex;justify-content:var(--jky-page-table_pagination-position)}}}.jky-action-column{.el-button+.el-button{margin-left:0}}:root{--jky-rich-editor-border:#d9d9d9;--jky-rich-editor-border-hover:#409eff;--jky-rich-editor-border-radius:4px;--jky-rich-editor-box-shadow:0 0 0 1px #409eff}.jky-rich-editor{width:100%}.jky-rich-editor .tox-tinymce{border:1px solid var(--jky-rich-editor-border);border-radius:var(--jky-rich-editor-border-radius);transition:border-color .2s}.jky-rich-editor .tox-tinymce:hover{border-color:var(--jky-rich-editor-border-hover)}.jky-rich-editor .tox-tinymce:focus-within{border-color:var(--jky-rich-editor-border-hover);box-shadow:var(--jky-rich-editor-box-shadow)}.jky-rich-editor.is-disabled .tox-tinymce{background-color:#f5f7fa;cursor:not-allowed}.jky-rich-editor.is-readonly .tox-tinymce{background-color:#fafafa}:root{--jky-say-hello-bg:#42b883;--jky-say-hello-text:#fff;--jky-say-hello-hover-bg:#3aa876;--jky-say-hello-font-size:16px;--jky-say-hello-padding:8px 20px;--jky-say-hello-margin:4px 2px;--jky-say-hello-border-radius:6px}.jky-say-hello{background-color:var(--jky-say-hello-bg);border-radius:var(--jky-say-hello-border-radius);color:var(--jky-say-hello-text);cursor:pointer;display:inline-block;font-size:var(--jky-say-hello-font-size);margin:var(--jky-say-hello-margin);padding:var(--jky-say-hello-padding);text-align:center;text-decoration:none;transition:background-color .2s ease}.jky-say-hello:hover{background-color:var(--jky-say-hello-hover-bg)}@import "tailwindcss";@plugin "@iconify/tailwind4";@source "../node_modules/jky-component-lib/dist/es/";@source "../docs/**/*.md";@source "./**/*.md";@source "./**/*.vue";@source "./**/*.css";@custom-variant dark (&:is(.dark *));.jky-tabs{.el-tabs__content{display:none}.el-tabs__header{margin-bottom:0}}.jky-tabs-round{--el-tabs-header-height:32px;--el-tabs-item-background:#fff;--el-tabs-active-item-background:var(--el-color-primary);.el-tabs__header{--el-border-color-light:transparent}.el-tabs__item{background-color:var(--el-tabs-item-background);border-bottom:none!important;border-radius:999px;margin-left:1rem;&.is-active{background-color:var(--el-tabs-active-item-background);.el-icon,.jky-tabs-__item-label{color:var(--el-color-white)}}&.first-child{margin-left:0}}}.jky-tabs-context-menu{display:inline-block}
1
+ .jky-add-input,:root{--jky-add-input-gap:12px;--jky-add-input-row-gap:8px;--jky-add-input-min-width:100px;--jky-add-input-action-width:80px}.jky-add-input{display:flex;flex-direction:column;gap:var(--jky-add-input-row-gap);min-width:var(--jky-add-input-min-width)}.jky-add-input__row{align-items:center;display:flex;gap:var(--jky-add-input-gap)}.jky-add-input__key,.jky-add-input__value{flex:1;min-width:0}.jky-add-input__actions{display:flex;flex-shrink:0;gap:var(--jky-add-input-gap);width:var(--jky-add-input-action-width)}.jky-amap-container{overflow:hidden;position:relative;.amap-copyright,.amap-logo{display:none!important}}:root{--jky-button-primary-bg:#007bff;--jky-button-primary-text:#fff;--jky-button-primary-hover-bg:#0056b3;--jky-button-success-bg:#28a745;--jky-button-success-text:#fff;--jky-button-success-hover-bg:#1e7e34;--jky-button-warning-bg:#ffc107;--jky-button-warning-text:#fff;--jky-button-warning-hover-bg:#e0a800;--jky-button-danger-bg:#dc3545;--jky-button-danger-text:#fff;--jky-button-danger-hover-bg:#c82333;--jky-button-info-bg:#6c757d;--jky-button-info-text:#fff;--jky-button-info-hover-bg:#5a6268;--jky-button-default-bg:#fff;--jky-button-default-text:#606266;--jky-button-default-border:#dcdfe6;--jky-button-default-hover-bg:#f5f7fa;--jky-button-font-size:14px;--jky-button-font-size-small:12px;--jky-button-font-size-large:16px;--jky-button-padding:0 16px;--jky-button-padding-small:0 12px;--jky-button-padding-large:0 20px;--jky-button-height:40px;--jky-button-height-small:32px;--jky-button-height-large:48px;--jky-button-border-radius:0.375rem;--jky-button-disabled-opacity:0.5;--jky-button-disabled-bg:#f5f7fa;--jky-button-disabled-text:#c0c4cc;--jky-button-loading-opacity:0.7;--jky-button-icon-size:1.25rem;--jky-button-icon-margin:0.5rem}.jky-button{align-items:center;background-color:var(--jky-button-default-bg);border:1px solid var(--jky-button-default-border);border-radius:var(--jky-button-border-radius);color:var(--jky-button-default-text);cursor:pointer;display:inline-flex;font-size:var(--jky-button-font-size);font-weight:500;height:var(--jky-button-height);justify-content:center;padding:var(--jky-button-padding);transition:color .2s,background-color .2s}.jky-button--primary{background-color:var(--jky-button-primary-bg);border:none;color:var(--jky-button-primary-text)}.jky-button--primary:hover{background-color:var(--jky-button-primary-hover-bg)}.jky-button--success{background-color:var(--jky-button-success-bg);border:none;color:var(--jky-button-success-text)}.jky-button--success:hover{background-color:var(--jky-button-success-hover-bg)}.jky-button--warning{background-color:var(--jky-button-warning-bg);border:none;color:var(--jky-button-warning-text)}.jky-button--warning:hover{background-color:var(--jky-button-warning-hover-bg)}.jky-button--danger{background-color:var(--jky-button-danger-bg);border:none;color:var(--jky-button-danger-text)}.jky-button--danger:hover{background-color:var(--jky-button-danger-hover-bg)}.jky-button--info{background-color:var(--jky-button-info-bg);border:none;color:var(--jky-button-info-text)}.jky-button--info:hover{background-color:var(--jky-button-info-hover-bg)}.jky-button--small{font-size:var(--jky-button-font-size-small);height:var(--jky-button-height-small);padding:var(--jky-button-padding-small)}.jky-button--large{font-size:var(--jky-button-font-size-large);height:var(--jky-button-height-large);padding:var(--jky-button-padding-large)}.jky-button.is-disabled{background-color:var(--jky-button-disabled-bg);color:var(--jky-button-disabled-text);cursor:not-allowed;opacity:var(--jky-button-disabled-opacity);pointer-events:none}.jky-button.is-loading{opacity:var(--jky-button-loading-opacity);pointer-events:none;position:relative}.jky-button__loading{display:flex;inset:0;position:absolute}.jky-button__icon,.jky-button__loading{align-items:center;justify-content:center}.jky-button__icon{display:inline-flex;font-size:1em;margin-right:var(--jky-button-icon-margin)}.jky-button__icon:only-child{margin-right:0}.jky-button--suffix .jky-button__icon{margin-left:var(--jky-button-icon-margin);margin-right:0}.jky-button:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px #000;outline:2px solid transparent;outline-offset:2px}.loading-spinner{animation:spin 1s linear infinite;height:var(--jky-button-icon-size);width:var(--jky-button-icon-size)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:root{--jky-button-nav-active-bg:var(--el-color-primary);--jky-button-nav-active-text:#fff;--jky-button-nav-inactive-bg:var(--el-fill-color-light);--jky-button-nav-inactive-text:var(--el-text-color-regular);--el-dropdown-menu-margin-left:12px}.jky-button-nav{align-items:center;display:flex;flex-wrap:wrap;.el-dropdown{margin-left:var(--el-dropdown-menu-margin-left)}}.jky-button-nav-item{background-color:var(--jky-button-nav-inactive-bg);color:var(--jky-button-nav-inactive-text);&.is-active,&[aria-pressed=true]{background-color:var(--jky-button-nav-active-bg);color:var(--jky-button-nav-active-text)}}:root{--j-code-mirror-border-color:#dcdfe6;--j-code-mirror-border-radius:4px;--j-code-mirror-height:400px}.j-code-mirror-editor{border-radius:var(--j-code-mirror-border-radius);height:var(--j-code-mirror-height);overflow:hidden;width:100%}.code-mirror-container{height:100%;overflow:auto;width:100%}.code-mirror-container .cm-editor{height:100%}.code-mirror-container .cm-scroller{font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.5;overflow:auto}.code-mirror-container .cm-gutters{background-color:#2c2d2d;border-color:#4c4d4f;color:#909399}.jky-form,:root{--jky-form-item-border-width:4px;--jky-form-item-border-color:var(--el-color-primary);--jky-form-item-bg-color:rgba(var(--el-color-primary-rgb),0.5)}.jky-form-item-wrapper__error,.jky-form-item-wrapper__loading{align-items:center;display:flex}.skeleton-box{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;background-color:#e5e7eb;border-radius:.25rem}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}:root{--jky-menu-bg-color:#fff;--jky-menu-text-color:#303133;--jky-menu-active-color:#409eff;--jky-menu-hover-bg-color:#f5f7fa;--jky-menu-hover-text-color:#606266;--jky-menu-item-height:56px;--jky-menu-item-padding:0 20px;--jky-menu-item-font-size:14px;--jky-menu-icon-size:18px;--jky-menu-icon-margin:8px;--jky-menu-border-color:#e4e7ed;--jky-menu-disabled-opacity:0.5;--jky-menu-disabled-text-color:#c0c4cc}.jky-menu{li+li{margin-top:0}}.jky-page-header,:root{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--jky-page-header-bg-color:#1890ff}.jky-page-header--dark{--jky-page-header-title-color:#fff;--jky-page-header-text-color:hsla(0,0%,100%,.85);--jky-page-header-icon-color:#fff;--el-text-color-regular:#fff}.jky-page-header--light{--jky-page-header-title-color:#000;--jky-page-header-text-color:rgba(0,0,0,.85);--jky-page-header-icon-color:#000;--el-text-color-regular:#000}.jky-page-header,:root{--jky-page-header-bg-size:cover;--jky-page-header-bg-position:center;--jky-page-header-box-shadow:0 2px 8px rgba(0,0,0,.15);--jky-page-header-padding-x:24px;--jky-page-header-padding-x-mobile:16px;--jky-page-header-gap:16px;--jky-page-header-gap-mobile:12px;--jky-page-header-gap-left:12px;--jky-page-header-gap-status:12px;--jky-page-header-gap-center:24px;--jky-page-header-gap-center-mobile:12px;--jky-page-header-title-size:20px;--jky-page-header-title-size-mobile:16px;--jky-page-header-title-weight:600;--jky-page-header-text-size:16px;--jky-page-header-icon-size:20px;--jky-page-header-icon-hover-opacity:0.8;--jky-page-header-logo-height:40px;--jky-page-header-avatar-size:32px}.jky-page-header{background-color:var(--jky-page-header-bg-color);background-position:var(--jky-page-header-bg-position);background-size:var(--jky-page-header-bg-size);box-shadow:var(--jky-page-header-box-shadow);width:100%}.jky-page-header__container{align-items:center;display:flex;height:100%;justify-content:space-between;margin:0 auto;max-width:100%;padding:0 var(--jky-page-header-padding-x)}.jky-page-header__left{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap-left)}.jky-page-header__logo{height:var(--jky-page-header-logo-height);object-fit:contain;width:auto}.jky-page-header__title{color:var(--jky-page-header-title-color);font-size:var(--jky-page-header-title-size);font-weight:var(--jky-page-header-title-weight);white-space:nowrap}.jky-page-header__center{align-items:center;display:flex;flex:1;justify-content:center;margin:0 var(--jky-page-header-gap-center);min-width:0}.jky-page-header__right{align-items:center;display:flex;flex-shrink:0;gap:var(--jky-page-header-gap)}.jky-page-header__status-icons{align-items:center;display:flex;gap:var(--jky-page-header-gap-status)}.jky-page-header__status-icon{color:var(--jky-page-header-icon-color);cursor:pointer;transition:opacity .2s;&:hover{opacity:var(--jky-page-header-icon-hover-opacity)}}.jky-page-header__time{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size);white-space:nowrap}.jky-page-header__user{align-items:center;color:var(--jky-page-header-text-color);cursor:pointer;display:flex;gap:8px}.jky-page-header__avatar{color:var(--jky-page-header-icon-color);img{height:100%;object-fit:cover;width:100%}}.jky-page-header__username{white-space:nowrap}.jky-page-header__logout,.jky-page-header__username{color:var(--jky-page-header-text-color);font-size:var(--jky-page-header-text-size)}@media (max-width:768px){.jky-page-header__container{padding:0 var(--jky-page-header-padding-x-mobile)}.jky-page-header__title{font-size:var(--jky-page-header-title-size-mobile)}.jky-page-header__center{margin:0 var(--jky-page-header-gap-center-mobile)}.jky-page-header__right{gap:var(--jky-page-header-gap-mobile)}}:root{--jky-page-layout-gap:5}.jky-page-layout{column-gap:calc(var(--spacing)*var(--jky-page-layout-gap));.el-menu{border-right:none}.el-auto-resizer{.el-scrollbar__view{height:100%}}}.jky-page-table{--jky-page-table_pagination-position:flex-end;.jky-page-table__pagination{.el-scrollbar__view{display:flex;justify-content:var(--jky-page-table_pagination-position)}}}.jky-action-column{.el-button+.el-button{margin-left:0}}:root{--jky-rich-editor-border:#d9d9d9;--jky-rich-editor-border-hover:#409eff;--jky-rich-editor-border-radius:4px;--jky-rich-editor-box-shadow:0 0 0 1px #409eff}.jky-rich-editor{width:100%}.jky-rich-editor .tox-tinymce{border:1px solid var(--jky-rich-editor-border);border-radius:var(--jky-rich-editor-border-radius);transition:border-color .2s}.jky-rich-editor .tox-tinymce:hover{border-color:var(--jky-rich-editor-border-hover)}.jky-rich-editor .tox-tinymce:focus-within{border-color:var(--jky-rich-editor-border-hover);box-shadow:var(--jky-rich-editor-box-shadow)}.jky-rich-editor.is-disabled .tox-tinymce{background-color:#f5f7fa;cursor:not-allowed}.jky-rich-editor.is-readonly .tox-tinymce{background-color:#fafafa}:root{--jky-say-hello-bg:#42b883;--jky-say-hello-text:#fff;--jky-say-hello-hover-bg:#3aa876;--jky-say-hello-font-size:16px;--jky-say-hello-padding:8px 20px;--jky-say-hello-margin:4px 2px;--jky-say-hello-border-radius:6px}.jky-say-hello{background-color:var(--jky-say-hello-bg);border-radius:var(--jky-say-hello-border-radius);color:var(--jky-say-hello-text);cursor:pointer;display:inline-block;font-size:var(--jky-say-hello-font-size);margin:var(--jky-say-hello-margin);padding:var(--jky-say-hello-padding);text-align:center;text-decoration:none;transition:background-color .2s ease}.jky-say-hello:hover{background-color:var(--jky-say-hello-hover-bg)}@import "tailwindcss";@plugin "@iconify/tailwind4";@source "../node_modules/jky-component-lib/dist/es/";@source "../docs/**/*.md";@source "./**/*.md";@source "./**/*.vue";@source "./**/*.css";@custom-variant dark (&:is(.dark *));.jky-tabs{.el-tabs__content{display:none}.el-tabs__header{margin-bottom:0}}.jky-tabs-round{--el-tabs-header-height:32px;--el-tabs-item-background:#fff;--el-tabs-active-item-background:var(--el-color-primary);.el-tabs__header{--el-border-color-light:transparent}.el-tabs__item{background-color:var(--el-tabs-item-background);border-bottom:none!important;border-radius:999px;margin-left:1rem;&.is-active{background-color:var(--el-tabs-active-item-background);.el-icon,.jky-tabs-__item-label{color:var(--el-color-white)}}&.first-child{margin-left:0}}}.jky-tabs-context-menu{display:inline-block}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "jky-component-lib",
3
3
  "type": "module",
4
- "version": "0.0.130",
4
+ "version": "0.0.131",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },