jky-component-lib 0.0.130 → 0.0.132

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,3 @@
1
1
 
2
- /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
- .amap-icon img,
4
- .amap-marker-content img {
5
- width: 25px;
6
- height: 34px;
7
- }
2
+ /* 轨迹回放组件不需要额外样式 */
3
+ /* 所有样式通过 TailwindCSS 工具类或外部组件控制 */
@@ -1,3 +1,7 @@
1
1
 
2
- /* 轨迹回放组件不需要额外样式 */
3
- /* 所有样式通过 TailwindCSS 工具类或外部组件控制 */
2
+ /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
+ .amap-icon img,
4
+ .amap-marker-content img {
5
+ width: 25px;
6
+ height: 34px;
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,8 +131,11 @@ 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);
138
+ const isHidden = ref(false);
134
139
  const rules = computed(() => {
135
140
  const r = rulesData.value;
136
141
  if (!r)
@@ -146,10 +151,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
146
151
  const configProps = props.config.componentProps;
147
152
  if (!configProps) {
148
153
  componentProps.value = {};
154
+ propsLoadStatus.value = "ready";
149
155
  return;
150
156
  }
151
157
  if (typeof configProps === "function") {
152
158
  loading.value = true;
159
+ propsLoadStatus.value = "loading";
160
+ loadError.value = null;
153
161
  try {
154
162
  const result = yield configProps({
155
163
  model: props.model,
@@ -157,15 +165,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
157
165
  $form: props.model
158
166
  });
159
167
  componentProps.value = result || {};
168
+ propsLoadStatus.value = "ready";
160
169
  } catch (error) {
161
170
  console.error("Failed to load component props:", error);
162
171
  componentProps.value = {};
172
+ loadError.value = error;
173
+ propsLoadStatus.value = "error";
163
174
  } finally {
164
175
  loading.value = false;
165
176
  }
166
177
  return;
167
178
  }
168
179
  componentProps.value = configProps;
180
+ propsLoadStatus.value = "ready";
169
181
  });
170
182
  }
171
183
  function loadRules() {
@@ -195,6 +207,38 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
195
207
  rulesData.value = typeof configRules !== "function" ? configRules : null;
196
208
  });
197
209
  }
210
+ function loadHidden() {
211
+ return __async(this, null, function* () {
212
+ const configHidden = props.config.hidden;
213
+ if (!configHidden) {
214
+ isHidden.value = false;
215
+ return;
216
+ }
217
+ if (typeof configHidden === "function") {
218
+ loading.value = true;
219
+ try {
220
+ const result = yield configHidden({
221
+ model: props.model,
222
+ field: props.field,
223
+ $form: props.model
224
+ });
225
+ isHidden.value = result || false;
226
+ } catch (error) {
227
+ console.error("Failed to load hidden:", error);
228
+ isHidden.value = false;
229
+ } finally {
230
+ loading.value = false;
231
+ }
232
+ return;
233
+ }
234
+ isHidden.value = configHidden != null ? configHidden : false;
235
+ });
236
+ }
237
+ function reloadComponentProps() {
238
+ return __async(this, null, function* () {
239
+ yield loadComponentProps();
240
+ });
241
+ }
198
242
  const watchFields = computed(() => {
199
243
  const config = props.config;
200
244
  return config.watchFields || [];
@@ -207,12 +251,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
207
251
  () => {
208
252
  loadComponentProps();
209
253
  loadRules();
254
+ loadHidden();
210
255
  },
211
256
  { deep: true }
212
257
  );
213
258
  }
214
259
  loadComponentProps();
215
260
  loadRules();
261
+ loadHidden();
216
262
  setupWatchFields();
217
263
  const modelValue = computed({
218
264
  get: () => props.model[props.field],
@@ -220,16 +266,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
220
266
  props.model[props.field] = val;
221
267
  }
222
268
  });
223
- const isHidden = computed(() => {
224
- if (typeof props.config.hidden === "function") {
225
- return props.config.hidden({
226
- model: props.model,
227
- field: props.field,
228
- $form: props.model
229
- });
230
- }
231
- return props.config.hidden || false;
232
- });
233
269
  const formItemProps = computed(() => {
234
270
  const config = props.config;
235
271
  const _a = config, {
@@ -238,6 +274,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
238
274
  title,
239
275
  placeholder,
240
276
  componentProps: _componentProps,
277
+ rules: _rules,
241
278
  hidden,
242
279
  customStyle,
243
280
  children,
@@ -253,13 +290,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
253
290
  formatValue,
254
291
  formatModel,
255
292
  noLabelMargin,
256
- titleRender
293
+ titleRender,
294
+ watchFields: _watchFields,
295
+ help: _help,
296
+ useDefaultBorderClass: _useDefaultBorderClass
257
297
  } = _a, rest = __objRest(_a, [
258
298
  "field",
259
299
  "type",
260
300
  "title",
261
301
  "placeholder",
262
302
  "componentProps",
303
+ "rules",
263
304
  "hidden",
264
305
  "customStyle",
265
306
  "children",
@@ -275,7 +316,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
275
316
  "formatValue",
276
317
  "formatModel",
277
318
  "noLabelMargin",
278
- "titleRender"
319
+ "titleRender",
320
+ "watchFields",
321
+ "help",
322
+ "useDefaultBorderClass"
279
323
  ]);
280
324
  return rest;
281
325
  });
@@ -389,23 +433,35 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
389
433
  ], 64)),
390
434
  __props.config.help && __props.config.help.tooltip ? (openBlock(), createBlock(resolveDynamicComponent(renderHelpTooltip()), { key: 2 })) : createCommentVNode("", true)
391
435
  ]),
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"])),
436
+ createVNode(_sfc_main$w, {
437
+ status: propsLoadStatus.value,
438
+ error: loadError.value,
439
+ onRetry: reloadComponentProps
440
+ }, {
441
+ loading: withCtx(() => [
442
+ renderSlot(_ctx.$slots, "loading", { field: __props.field })
443
+ ]),
444
+ default: withCtx(() => [
445
+ (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
446
+ "model-value": modelValue.value,
447
+ config: __props.config,
448
+ "component-props": componentProps.value,
449
+ "component-slots": componentSlotsObj.value,
450
+ disabled: __props.disabled,
451
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (val) => __props.model[__props.field] = val)
452
+ }, createSlots({ _: 2 }, [
453
+ renderList(Object.keys(_ctx.$slots), (name, index) => {
454
+ return {
455
+ name,
456
+ fn: withCtx((slotData) => [
457
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
458
+ ])
459
+ };
460
+ })
461
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
462
+ ]),
463
+ _: 3
464
+ }, 8, ["status", "error"]),
409
465
  __props.config.help && !__props.config.help.tooltip ? (openBlock(), createBlock(resolveDynamicComponent(renderHelpText()), { key: 0 })) : createCommentVNode("", true)
410
466
  ]),
411
467
  _: 3
@@ -420,42 +476,66 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
420
476
  default: withCtx(() => [
421
477
  __props.config.prepend || __props.config.append ? (openBlock(), createElementBlock("div", _hoisted_4, [
422
478
  __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"])),
479
+ createVNode(_sfc_main$w, {
480
+ status: propsLoadStatus.value,
481
+ error: loadError.value,
482
+ onRetry: reloadComponentProps
483
+ }, {
484
+ loading: withCtx(() => [
485
+ renderSlot(_ctx.$slots, "loading", { field: __props.field })
486
+ ]),
487
+ default: withCtx(() => [
488
+ (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
489
+ "model-value": modelValue.value,
490
+ config: __props.config,
491
+ "component-props": componentProps.value,
492
+ "component-slots": componentSlotsObj.value,
493
+ disabled: __props.disabled,
494
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => __props.model[__props.field] = val)
495
+ }, createSlots({ _: 2 }, [
496
+ renderList(Object.keys(_ctx.$slots), (name, index) => {
497
+ return {
498
+ name,
499
+ fn: withCtx((slotData) => [
500
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
501
+ ])
502
+ };
503
+ })
504
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
505
+ ]),
506
+ _: 3
507
+ }, 8, ["status", "error"]),
440
508
  __props.config.append ? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(__props.config.append), 1)) : createCommentVNode("", true)
441
- ])) : (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
509
+ ])) : (openBlock(), createBlock(_sfc_main$w, {
442
510
  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"])),
511
+ status: propsLoadStatus.value,
512
+ error: loadError.value,
513
+ onRetry: reloadComponentProps
514
+ }, {
515
+ loading: withCtx(() => [
516
+ renderSlot(_ctx.$slots, "loading", { field: __props.field })
517
+ ]),
518
+ default: withCtx(() => [
519
+ (openBlock(), createBlock(resolveDynamicComponent(currentComponent.value), {
520
+ "model-value": modelValue.value,
521
+ config: __props.config,
522
+ "component-props": componentProps.value,
523
+ "component-slots": componentSlotsObj.value,
524
+ disabled: __props.disabled,
525
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => __props.model[__props.field] = val)
526
+ }, createSlots({ _: 2 }, [
527
+ renderList(Object.keys(_ctx.$slots), (name, index) => {
528
+ return {
529
+ name,
530
+ fn: withCtx((slotData) => [
531
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotData || {})))
532
+ ])
533
+ };
534
+ })
535
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
536
+ ]),
537
+ _: 3
538
+ }, 8, ["status", "error"])),
459
539
  __props.config.help && !__props.config.help.tooltip ? (openBlock(), createBlock(resolveDynamicComponent(renderHelpText()), { key: 2 })) : createCommentVNode("", true)
460
540
  ]),
461
541
  _: 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.132";
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,3 @@
1
1
 
2
- /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
- .amap-icon img,
4
- .amap-marker-content img {
5
- width: 25px;
6
- height: 34px;
7
- }
2
+ /* 轨迹回放组件不需要额外样式 */
3
+ /* 所有样式通过 TailwindCSS 工具类或外部组件控制 */
@@ -1,3 +1,7 @@
1
1
 
2
- /* 轨迹回放组件不需要额外样式 */
3
- /* 所有样式通过 TailwindCSS 工具类或外部组件控制 */
2
+ /* JkyAMarker 组件样式 - 参考高德官方示例 */
3
+ .amap-icon img,
4
+ .amap-marker-content img {
5
+ width: 25px;
6
+ height: 34px;
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,8 +133,11 @@ 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);
140
+ const isHidden = vue.ref(false);
136
141
  const rules = vue.computed(() => {
137
142
  const r = rulesData.value;
138
143
  if (!r)
@@ -148,10 +153,13 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
148
153
  const configProps = props.config.componentProps;
149
154
  if (!configProps) {
150
155
  componentProps.value = {};
156
+ propsLoadStatus.value = "ready";
151
157
  return;
152
158
  }
153
159
  if (typeof configProps === "function") {
154
160
  loading.value = true;
161
+ propsLoadStatus.value = "loading";
162
+ loadError.value = null;
155
163
  try {
156
164
  const result = yield configProps({
157
165
  model: props.model,
@@ -159,15 +167,19 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
159
167
  $form: props.model
160
168
  });
161
169
  componentProps.value = result || {};
170
+ propsLoadStatus.value = "ready";
162
171
  } catch (error) {
163
172
  console.error("Failed to load component props:", error);
164
173
  componentProps.value = {};
174
+ loadError.value = error;
175
+ propsLoadStatus.value = "error";
165
176
  } finally {
166
177
  loading.value = false;
167
178
  }
168
179
  return;
169
180
  }
170
181
  componentProps.value = configProps;
182
+ propsLoadStatus.value = "ready";
171
183
  });
172
184
  }
173
185
  function loadRules() {
@@ -197,6 +209,38 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
197
209
  rulesData.value = typeof configRules !== "function" ? configRules : null;
198
210
  });
199
211
  }
212
+ function loadHidden() {
213
+ return __async(this, null, function* () {
214
+ const configHidden = props.config.hidden;
215
+ if (!configHidden) {
216
+ isHidden.value = false;
217
+ return;
218
+ }
219
+ if (typeof configHidden === "function") {
220
+ loading.value = true;
221
+ try {
222
+ const result = yield configHidden({
223
+ model: props.model,
224
+ field: props.field,
225
+ $form: props.model
226
+ });
227
+ isHidden.value = result || false;
228
+ } catch (error) {
229
+ console.error("Failed to load hidden:", error);
230
+ isHidden.value = false;
231
+ } finally {
232
+ loading.value = false;
233
+ }
234
+ return;
235
+ }
236
+ isHidden.value = configHidden != null ? configHidden : false;
237
+ });
238
+ }
239
+ function reloadComponentProps() {
240
+ return __async(this, null, function* () {
241
+ yield loadComponentProps();
242
+ });
243
+ }
200
244
  const watchFields = vue.computed(() => {
201
245
  const config = props.config;
202
246
  return config.watchFields || [];
@@ -209,12 +253,14 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
209
253
  () => {
210
254
  loadComponentProps();
211
255
  loadRules();
256
+ loadHidden();
212
257
  },
213
258
  { deep: true }
214
259
  );
215
260
  }
216
261
  loadComponentProps();
217
262
  loadRules();
263
+ loadHidden();
218
264
  setupWatchFields();
219
265
  const modelValue = vue.computed({
220
266
  get: () => props.model[props.field],
@@ -222,16 +268,6 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
222
268
  props.model[props.field] = val;
223
269
  }
224
270
  });
225
- const isHidden = vue.computed(() => {
226
- if (typeof props.config.hidden === "function") {
227
- return props.config.hidden({
228
- model: props.model,
229
- field: props.field,
230
- $form: props.model
231
- });
232
- }
233
- return props.config.hidden || false;
234
- });
235
271
  const formItemProps = vue.computed(() => {
236
272
  const config = props.config;
237
273
  const _a = config, {
@@ -240,6 +276,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
240
276
  title,
241
277
  placeholder,
242
278
  componentProps: _componentProps,
279
+ rules: _rules,
243
280
  hidden,
244
281
  customStyle,
245
282
  children,
@@ -255,13 +292,17 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
255
292
  formatValue,
256
293
  formatModel,
257
294
  noLabelMargin,
258
- titleRender
295
+ titleRender,
296
+ watchFields: _watchFields,
297
+ help: _help,
298
+ useDefaultBorderClass: _useDefaultBorderClass
259
299
  } = _a, rest = __objRest(_a, [
260
300
  "field",
261
301
  "type",
262
302
  "title",
263
303
  "placeholder",
264
304
  "componentProps",
305
+ "rules",
265
306
  "hidden",
266
307
  "customStyle",
267
308
  "children",
@@ -277,7 +318,10 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
277
318
  "formatValue",
278
319
  "formatModel",
279
320
  "noLabelMargin",
280
- "titleRender"
321
+ "titleRender",
322
+ "watchFields",
323
+ "help",
324
+ "useDefaultBorderClass"
281
325
  ]);
282
326
  return rest;
283
327
  });
@@ -391,23 +435,35 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
391
435
  ], 64)),
392
436
  __props.config.help && __props.config.help.tooltip ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderHelpTooltip()), { key: 2 })) : vue.createCommentVNode("", true)
393
437
  ]),
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"])),
438
+ vue.createVNode(FormItemWrapper_vue_vue_type_script_setup_true_lang.default, {
439
+ status: propsLoadStatus.value,
440
+ error: loadError.value,
441
+ onRetry: reloadComponentProps
442
+ }, {
443
+ loading: vue.withCtx(() => [
444
+ vue.renderSlot(_ctx.$slots, "loading", { field: __props.field })
445
+ ]),
446
+ default: vue.withCtx(() => [
447
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
448
+ "model-value": modelValue.value,
449
+ config: __props.config,
450
+ "component-props": componentProps.value,
451
+ "component-slots": componentSlotsObj.value,
452
+ disabled: __props.disabled,
453
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (val) => __props.model[__props.field] = val)
454
+ }, vue.createSlots({ _: 2 }, [
455
+ vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
456
+ return {
457
+ name,
458
+ fn: vue.withCtx((slotData) => [
459
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
460
+ ])
461
+ };
462
+ })
463
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
464
+ ]),
465
+ _: 3
466
+ }, 8, ["status", "error"]),
411
467
  __props.config.help && !__props.config.help.tooltip ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderHelpText()), { key: 0 })) : vue.createCommentVNode("", true)
412
468
  ]),
413
469
  _: 3
@@ -422,42 +478,66 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValu
422
478
  default: vue.withCtx(() => [
423
479
  __props.config.prepend || __props.config.append ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
424
480
  __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"])),
481
+ vue.createVNode(FormItemWrapper_vue_vue_type_script_setup_true_lang.default, {
482
+ status: propsLoadStatus.value,
483
+ error: loadError.value,
484
+ onRetry: reloadComponentProps
485
+ }, {
486
+ loading: vue.withCtx(() => [
487
+ vue.renderSlot(_ctx.$slots, "loading", { field: __props.field })
488
+ ]),
489
+ default: vue.withCtx(() => [
490
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
491
+ "model-value": modelValue.value,
492
+ config: __props.config,
493
+ "component-props": componentProps.value,
494
+ "component-slots": componentSlotsObj.value,
495
+ disabled: __props.disabled,
496
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => __props.model[__props.field] = val)
497
+ }, vue.createSlots({ _: 2 }, [
498
+ vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
499
+ return {
500
+ name,
501
+ fn: vue.withCtx((slotData) => [
502
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
503
+ ])
504
+ };
505
+ })
506
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
507
+ ]),
508
+ _: 3
509
+ }, 8, ["status", "error"]),
442
510
  __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), {
511
+ ])) : (vue.openBlock(), vue.createBlock(FormItemWrapper_vue_vue_type_script_setup_true_lang.default, {
444
512
  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"])),
513
+ status: propsLoadStatus.value,
514
+ error: loadError.value,
515
+ onRetry: reloadComponentProps
516
+ }, {
517
+ loading: vue.withCtx(() => [
518
+ vue.renderSlot(_ctx.$slots, "loading", { field: __props.field })
519
+ ]),
520
+ default: vue.withCtx(() => [
521
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(currentComponent.value), {
522
+ "model-value": modelValue.value,
523
+ config: __props.config,
524
+ "component-props": componentProps.value,
525
+ "component-slots": componentSlotsObj.value,
526
+ disabled: __props.disabled,
527
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => __props.model[__props.field] = val)
528
+ }, vue.createSlots({ _: 2 }, [
529
+ vue.renderList(Object.keys(_ctx.$slots), (name, index) => {
530
+ return {
531
+ name,
532
+ fn: vue.withCtx((slotData) => [
533
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotData || {})))
534
+ ])
535
+ };
536
+ })
537
+ ]), 1032, ["model-value", "config", "component-props", "component-slots", "disabled"]))
538
+ ]),
539
+ _: 3
540
+ }, 8, ["status", "error"])),
461
541
  __props.config.help && !__props.config.help.tooltip ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderHelpText()), { key: 2 })) : vue.createCommentVNode("", true)
462
542
  ]),
463
543
  _: 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.132";
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.132",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },