@vuetkit/components 0.0.13 → 0.0.15

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.
package/README.md CHANGED
@@ -23,3 +23,7 @@ Collection of business development Composable Components for Vue3 + ElementPlus
23
23
  ### Data
24
24
 
25
25
  - [useDescriptions](/components/src/data/useDescriptions/)
26
+
27
+ ### Navigation
28
+
29
+ - [useSteps](/components/src/navigation/useSteps/)
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { RequestService } from "@vuetkit/core";
2
- import { ComponentSize, DescriptionItemProps, DescriptionProps, DialogProps, FormRules, MessageProps, MessageType, PaginationProps, TableProps } from "element-plus";
3
- import { CSSProperties, Component, MaybeRef, VNode } from "vue";
2
+ import { ComponentSize, DescriptionItemProps, DescriptionProps, DialogProps, FormRules, MessageProps, MessageType, PaginationProps, StepProps, StepsProps, TabPaneName, TableProps, TabsPaneContext, TabsProps } from "element-plus";
3
+ import { CSSProperties, Component, MaybeRef, Ref, VNode } from "vue";
4
4
  import { TableColumnProps } from "element-plus/es/components/table/src/table-column/defaults.mjs";
5
5
 
6
6
  //#region src/data/useDescriptions/index.d.ts
@@ -105,6 +105,77 @@ declare function setDeepProperty(data: Recordable, propArr: string[], value: unk
105
105
  declare function useForm(options: undefined): [null, Recordable];
106
106
  declare function useForm<T extends object>(options: FormOptions<T>): FormReturnType<T>;
107
107
  //#endregion
108
+ //#region src/navigation/useSteps/index.d.ts
109
+ interface StepsColumn extends Partial<StepProps> {
110
+ title?: string;
111
+ description?: string;
112
+ render?: (val: unknown) => VNode;
113
+ renderTitle?: (val: unknown) => VNode;
114
+ renderIcon?: (val: unknown) => VNode;
115
+ }
116
+ interface StepsOptions<T> extends StepsProps {
117
+ steps: StepsColumn[];
118
+ service?: RequestService<T>;
119
+ params?: unknown;
120
+ formatData?: (data: T) => StepsColumn[];
121
+ defaultActive?: number;
122
+ }
123
+ type StepsReturnType = [Component, Ref<number>];
124
+ declare function useSteps<T>(options: StepsOptions<T>): (Ref<number, number> | import("vue").DefineComponent<import("vue").ExtractPropTypes<{
125
+ modelValue: {
126
+ type: NumberConstructor;
127
+ default: undefined;
128
+ };
129
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
130
+ [key: string]: any;
131
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
132
+ modelValue: {
133
+ type: NumberConstructor;
134
+ default: undefined;
135
+ };
136
+ }>> & Readonly<{}>, {
137
+ modelValue: number;
138
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>)[];
139
+ //#endregion
140
+ //#region src/navigation/useTabs/index.d.ts
141
+ interface TabsColumn {
142
+ label?: string;
143
+ name?: string | number;
144
+ disabled?: boolean;
145
+ closable?: boolean;
146
+ lazy?: boolean;
147
+ render?: (val: unknown) => VNode;
148
+ renderLabel?: (val: unknown) => VNode;
149
+ }
150
+ interface TabsOptions<T> extends Partial<TabsProps> {
151
+ tabs: TabsColumn[];
152
+ service?: RequestService<T>;
153
+ params?: unknown;
154
+ formatData?: (data: T) => TabsColumn[];
155
+ defaultActive?: string | number;
156
+ onTabClick?: (tab: TabsPaneContext, event: Event) => void;
157
+ onTabChange?: (name: TabPaneName) => void;
158
+ onTabRemove?: (name: TabPaneName) => void;
159
+ onTabAdd?: () => void;
160
+ onEdit?: (targetName: TabPaneName | undefined, action: 'remove' | 'add') => void;
161
+ }
162
+ type TabsReturnType = [Component, Ref<string | number>];
163
+ declare function useTabs<T>(options: TabsOptions<T>): (Ref<string | number, string | number> | import("vue").DefineComponent<import("vue").ExtractPropTypes<{
164
+ modelValue: {
165
+ type: (StringConstructor | NumberConstructor)[];
166
+ default: undefined;
167
+ };
168
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
169
+ [key: string]: any;
170
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
171
+ modelValue: {
172
+ type: (StringConstructor | NumberConstructor)[];
173
+ default: undefined;
174
+ };
175
+ }>> & Readonly<{}>, {
176
+ modelValue: string | number;
177
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>)[];
178
+ //#endregion
108
179
  //#region src/table/useTable/index.d.ts
109
180
  type DefaultRow = Record<PropertyKey, any>;
110
181
  interface PaginationData<T> {
@@ -133,4 +204,4 @@ interface TableOptions<T extends DefaultRow> extends TableProps<T> {
133
204
  type TableReturn = [Component];
134
205
  declare function useTable<T extends DefaultRow>(options: TableOptions<T>): TableReturn;
135
206
  //#endregion
136
- export { AsyncConfirmOptions, CustomRender, DefaultComponentKey, DescriptionsColumn, DescriptionsOptions, DescriptionsReturnType, FormItemType, FormOptions, FormReturnType, FormRuleFn, FormSchema, PaginationOptions, Recordable, TableColumnOptions, TableOptions, TableReturn, setDeepProperty, useAsyncConfirm, useDescriptions, useDialog, useForm, useMessage, useTable };
207
+ export { AsyncConfirmOptions, CustomRender, DefaultComponentKey, DescriptionsColumn, DescriptionsOptions, DescriptionsReturnType, FormItemType, FormOptions, FormReturnType, FormRuleFn, FormSchema, PaginationOptions, Recordable, StepsColumn, StepsOptions, StepsReturnType, TableColumnOptions, TableOptions, TableReturn, TabsColumn, TabsOptions, TabsReturnType, setDeepProperty, useAsyncConfirm, useDescriptions, useDialog, useForm, useMessage, useSteps, useTable, useTabs };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { useRequest } from "@vuetkit/core";
2
- import { ElButton, ElCascader, ElCheckbox, ElCol, ElColorPicker, ElDatePicker, ElDescriptions, ElDescriptionsItem, ElDialog, ElForm, ElFormItem, ElInput, ElInputNumber, ElInputOtp, ElMention, ElMessage, ElMessageBox, ElPagination, ElRadio, ElRate, ElRow, ElScrollbar, ElSelect, ElSelectV2, ElSlider, ElSwitch, ElTable, ElTableColumn, ElTimePicker, ElTimeSelect, ElTransfer, ElTreeSelect, ElUpload, vLoading } from "element-plus";
2
+ import { ElButton, ElCascader, ElCheckbox, ElCol, ElColorPicker, ElDatePicker, ElDescriptions, ElDescriptionsItem, ElDialog, ElForm, ElFormItem, ElInput, ElInputNumber, ElInputOtp, ElMention, ElMessage, ElMessageBox, ElPagination, ElRadio, ElRate, ElRow, ElScrollbar, ElSelect, ElSelectV2, ElSlider, ElStep, ElSteps, ElSwitch, ElTabPane, ElTable, ElTableColumn, ElTabs, ElTimePicker, ElTimeSelect, ElTransfer, ElTreeSelect, ElUpload, vLoading } from "element-plus";
3
3
  import { computed, defineComponent, h, nextTick, onMounted, reactive, ref, toValue, useTemplateRef, watch, withDirectives } from "vue";
4
4
  import { isFunc, realObj } from "@vuetkit/shared";
5
5
  //#region src/data/useDescriptions/index.ts
@@ -364,6 +364,131 @@ function useForm(options) {
364
364
  }];
365
365
  }
366
366
  //#endregion
367
+ //#region src/navigation/useSteps/index.ts
368
+ function useSteps(options) {
369
+ const { steps = [], service, params, formatData, defaultActive = 0, ...rest } = options;
370
+ const { data, loading } = service ? useRequest(service, {
371
+ defaultParams: params,
372
+ formatData: formatData || void 0
373
+ }) : {};
374
+ const active = ref(defaultActive);
375
+ const stepsColumns = computed(() => (data === null || data === void 0 ? void 0 : data.value) || steps);
376
+ return [defineComponent({
377
+ props: { modelValue: {
378
+ type: Number,
379
+ default: void 0
380
+ } },
381
+ setup(props, { slots }) {
382
+ const renderSteps = () => {
383
+ var _stepsColumns$value;
384
+ return (_stepsColumns$value = stepsColumns.value) === null || _stepsColumns$value === void 0 ? void 0 : _stepsColumns$value.map((item) => {
385
+ return h(ElStep, { ...item }, {
386
+ description: () => {
387
+ if (item === null || item === void 0 ? void 0 : item.render) return item.render(item === null || item === void 0 ? void 0 : item.description);
388
+ return (item === null || item === void 0 ? void 0 : item.description) || "";
389
+ },
390
+ title: (item === null || item === void 0 ? void 0 : item.renderTitle) ? () => item.renderTitle(item.title) : void 0,
391
+ icon: (item === null || item === void 0 ? void 0 : item.renderIcon) ? () => item.renderIcon(item.icon) : void 0
392
+ });
393
+ });
394
+ };
395
+ return () => {
396
+ var _ref, _props$modelValue, _loading$value;
397
+ const finalActive = (_ref = (_props$modelValue = props.modelValue) !== null && _props$modelValue !== void 0 ? _props$modelValue : rest.active) !== null && _ref !== void 0 ? _ref : active.value;
398
+ return withDirectives(h(ElSteps, {
399
+ ...rest,
400
+ ...props,
401
+ "active": finalActive,
402
+ "onUpdate:active": (val) => {
403
+ active.value = val;
404
+ }
405
+ }, { default: () => {
406
+ if (slots.default) return slots.default();
407
+ if (!stepsColumns.value.length) return "";
408
+ return renderSteps();
409
+ } }), [[vLoading, (_loading$value = loading === null || loading === void 0 ? void 0 : loading.value) !== null && _loading$value !== void 0 ? _loading$value : false]]);
410
+ };
411
+ }
412
+ }), active];
413
+ }
414
+ //#endregion
415
+ //#region src/navigation/useTabs/index.ts
416
+ function useTabs(options) {
417
+ const { tabs = [], service, params, formatData, defaultActive = 0, onTabClick, onTabChange, onTabRemove, onTabAdd, onEdit, ...rest } = options;
418
+ const { data, loading } = service ? useRequest(service, {
419
+ defaultParams: params,
420
+ formatData: formatData || void 0
421
+ }) : {};
422
+ const activeName = ref(defaultActive);
423
+ const tabsColumns = computed(() => (data === null || data === void 0 ? void 0 : data.value) || tabs);
424
+ return [defineComponent({
425
+ props: { modelValue: {
426
+ type: [String, Number],
427
+ default: void 0
428
+ } },
429
+ setup(props, { slots, emit }) {
430
+ const renderTabs = () => {
431
+ var _tabsColumns$value;
432
+ return (_tabsColumns$value = tabsColumns.value) === null || _tabsColumns$value === void 0 ? void 0 : _tabsColumns$value.map((item, index) => {
433
+ var _item$name;
434
+ const tabName = (_item$name = item.name) !== null && _item$name !== void 0 ? _item$name : index;
435
+ return h(ElTabPane, {
436
+ ...item,
437
+ name: tabName
438
+ }, {
439
+ label: (item === null || item === void 0 ? void 0 : item.renderLabel) ? () => item.renderLabel(item.label) : void 0,
440
+ default: () => {
441
+ if (item === null || item === void 0 ? void 0 : item.render) return item.render(item);
442
+ return "";
443
+ }
444
+ });
445
+ });
446
+ };
447
+ const handleTabClick = (tab, event) => {
448
+ onTabClick === null || onTabClick === void 0 || onTabClick(tab, event);
449
+ emit("tab-click", tab, event);
450
+ };
451
+ const handleTabChange = (name) => {
452
+ onTabChange === null || onTabChange === void 0 || onTabChange(name);
453
+ emit("tab-change", name);
454
+ };
455
+ const handleTabRemove = (name) => {
456
+ onTabRemove === null || onTabRemove === void 0 || onTabRemove(name);
457
+ emit("tab-remove", name);
458
+ };
459
+ const handleTabAdd = () => {
460
+ onTabAdd === null || onTabAdd === void 0 || onTabAdd();
461
+ emit("tab-add");
462
+ };
463
+ const handleEdit = (targetName, action) => {
464
+ onEdit === null || onEdit === void 0 || onEdit(targetName, action);
465
+ emit("edit", targetName, action);
466
+ };
467
+ return () => {
468
+ var _ref, _props$modelValue, _loading$value;
469
+ const finalActiveName = (_ref = (_props$modelValue = props.modelValue) !== null && _props$modelValue !== void 0 ? _props$modelValue : rest.modelValue) !== null && _ref !== void 0 ? _ref : activeName.value;
470
+ return withDirectives(h(ElTabs, {
471
+ ...rest,
472
+ ...props,
473
+ "modelValue": finalActiveName,
474
+ "onUpdate:modelValue": (val) => {
475
+ activeName.value = val;
476
+ },
477
+ "onTabClick": handleTabClick,
478
+ "onTabChange": handleTabChange,
479
+ "onTabRemove": handleTabRemove,
480
+ "onTabAdd": handleTabAdd,
481
+ "onEdit": handleEdit
482
+ }, { default: () => {
483
+ if (slots.default) return slots.default();
484
+ if (!tabsColumns.value.length) return "";
485
+ return renderTabs();
486
+ } }), [[vLoading, (_loading$value = loading === null || loading === void 0 ? void 0 : loading.value) !== null && _loading$value !== void 0 ? _loading$value : false]]);
487
+ };
488
+ }
489
+ }), activeName];
490
+ }
491
+ //#endregion
367
492
  //#region src/table/useTable/index.ts
368
493
  function useTable(options) {
369
494
  const { columns = [], service, params, formatData, align, headerAlign, paginationConfig, searchFormConfig, tableWrapStyle = {}, data = [], ...rest } = options;
@@ -512,4 +637,4 @@ function useTable(options) {
512
637
  })];
513
638
  }
514
639
  //#endregion
515
- export { setDeepProperty, useAsyncConfirm, useDescriptions, useDialog, useForm, useMessage, useTable };
640
+ export { setDeepProperty, useAsyncConfirm, useDescriptions, useDialog, useForm, useMessage, useSteps, useTable, useTabs };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vuetkit/components",
3
3
  "type": "module",
4
- "version": "0.0.13",
4
+ "version": "0.0.15",
5
5
  "description": "Collection of business development components for Vue3 projects",
6
6
  "author": "Kalu5",
7
7
  "license": "MIT",
@@ -21,8 +21,8 @@
21
21
  "vue": "^3.5.35"
22
22
  },
23
23
  "dependencies": {
24
- "@vuetkit/core": "0.0.13",
25
- "@vuetkit/shared": "0.0.13"
24
+ "@vuetkit/core": "0.0.15",
25
+ "@vuetkit/shared": "0.0.15"
26
26
  },
27
27
  "scripts": {
28
28
  "build": "tsdown --config-loader tsx"