niuma-ui 2.0.2 → 2.0.4
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/CHANGELOG.md +61 -0
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/dist/components/_shared/src/reka.d.ts +1 -1
- package/dist/components/_shared/src/reka.js +2 -2
- package/dist/components/anchor/index.d.ts +1 -1
- package/dist/components/anchor/src/RsAnchor.css +63 -32
- package/dist/components/anchor/src/RsAnchor.d.ts +29 -2
- package/dist/components/anchor/src/RsAnchor.impl.js +199 -81
- package/dist/components/anchor/src/RsAnchor.js +1 -1
- package/dist/components/anchor/src/anchor-utils.d.ts +36 -4
- package/dist/components/anchor/src/anchor-utils.js +81 -19
- package/dist/components/auto-complete/index.d.ts +2 -0
- package/dist/components/auto-complete/src/RsAutoComplete.css +122 -0
- package/dist/components/auto-complete/src/RsAutoComplete.d.ts +47 -7
- package/dist/components/auto-complete/src/RsAutoComplete.impl.js +180 -72
- package/dist/components/auto-complete/src/RsAutoComplete.js +4 -1
- package/dist/components/auto-complete/src/auto-complete-utils.d.ts +7 -0
- package/dist/components/auto-complete/src/auto-complete-utils.js +17 -0
- package/dist/components/avatar/index.d.ts +1 -0
- package/dist/components/avatar/src/RsAvatar.css +36 -19
- package/dist/components/avatar/src/RsAvatar.d.ts +9 -3
- package/dist/components/avatar/src/RsAvatar.impl.js +57 -33
- package/dist/components/avatar/src/RsAvatar.js +2 -1
- package/dist/components/avatar/src/avatar-utils.d.ts +16 -7
- package/dist/components/avatar/src/avatar-utils.js +41 -3
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/badge/src/RsBadge.css +61 -8
- package/dist/components/badge/src/RsBadge.d.ts +19 -3
- package/dist/components/badge/src/RsBadge.impl.js +46 -3
- package/dist/components/badge/src/RsBadge.js +1 -1
- package/dist/components/badge/src/badge-utils.d.ts +11 -0
- package/dist/components/badge/src/badge-utils.js +32 -0
- package/dist/components/breadcrumb/index.d.ts +1 -1
- package/dist/components/breadcrumb/src/RsBreadcrumb.css +50 -17
- package/dist/components/breadcrumb/src/RsBreadcrumb.d.ts +45 -6
- package/dist/components/breadcrumb/src/RsBreadcrumb.impl.js +111 -12
- package/dist/components/breadcrumb/src/RsBreadcrumb.js +2 -1
- package/dist/components/breadcrumb/src/breadcrumb-utils.d.ts +37 -5
- package/dist/components/breadcrumb/src/breadcrumb-utils.js +70 -9
- package/dist/components/button/src/RsButton.css +87 -71
- package/dist/components/button/src/RsButton.d.ts +7 -3
- package/dist/components/button/src/RsButton.impl.js +43 -31
- package/dist/components/button/src/RsButton.js +1 -1
- package/dist/components/button/src/button-utils.d.ts +17 -0
- package/dist/components/button/src/button-utils.js +14 -1
- package/dist/components/calendar-grid/index.d.ts +2 -0
- package/dist/components/calendar-grid/src/RsCalendarGrid.css +105 -45
- package/dist/components/calendar-grid/src/RsCalendarGrid.d.ts +62 -2
- package/dist/components/calendar-grid/src/RsCalendarGrid.impl.js +265 -94
- package/dist/components/calendar-grid/src/RsCalendarGrid.js +1 -1
- package/dist/components/calendar-grid/src/calendar-grid-utils.d.ts +72 -0
- package/dist/components/calendar-grid/src/calendar-grid-utils.js +122 -0
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/card/src/RsCard.css +108 -98
- package/dist/components/card/src/RsCard.d.ts +3 -12
- package/dist/components/card/src/RsCard.impl.js +29 -25
- package/dist/components/card/src/RsCard.js +2 -1
- package/dist/components/card/src/card-utils.d.ts +25 -0
- package/dist/components/card/src/card-utils.js +10 -0
- package/dist/components/cascader/index.d.ts +1 -0
- package/dist/components/cascader/src/RsCascader.css +175 -30
- package/dist/components/cascader/src/RsCascader.d.ts +14 -2
- package/dist/components/cascader/src/RsCascader.impl.js +277 -48
- package/dist/components/cascader/src/RsCascader.js +1 -1
- package/dist/components/cascader/src/cascader-utils.d.ts +2 -0
- package/dist/components/cascader/src/cascader-utils.js +8 -1
- package/dist/components/checkbox/index.d.ts +1 -0
- package/dist/components/checkbox/src/RsCheckbox.css +46 -23
- package/dist/components/checkbox/src/RsCheckbox.d.ts +11 -1
- package/dist/components/checkbox/src/RsCheckbox.impl.js +37 -9
- package/dist/components/checkbox/src/RsCheckbox.js +2 -1
- package/dist/components/checkbox/src/checkbox-utils.d.ts +4 -0
- package/dist/components/checkbox/src/checkbox-utils.js +12 -0
- package/dist/components/container/index.d.ts +1 -1
- package/dist/components/container/src/RsContainer.css +11 -11
- package/dist/components/container/src/RsContainer.d.ts +2 -12
- package/dist/components/container/src/RsContainer.impl.js +10 -57
- package/dist/components/container/src/RsContainer.js +1 -1
- package/dist/components/container/src/container-utils.d.ts +23 -0
- package/dist/components/container/src/container-utils.js +51 -0
- package/dist/components/date-picker/index.d.ts +4 -2
- package/dist/components/date-picker/src/RsDatePicker.css +42 -22
- package/dist/components/date-picker/src/RsDatePicker.d.ts +44 -20
- package/dist/components/date-picker/src/RsDatePicker.impl.js +484 -222
- package/dist/components/date-picker/src/RsDatePicker.js +1 -3
- package/dist/components/date-picker/src/RsDateTimePicker.d.ts +33 -6
- package/dist/components/date-picker/src/RsDateTimePicker.impl.js +47 -6
- package/dist/components/date-picker/src/date-picker-utils.d.ts +19 -0
- package/dist/components/date-picker/src/date-picker-utils.js +33 -10
- package/dist/components/divider/index.d.ts +1 -0
- package/dist/components/divider/src/RsDivider.css +37 -22
- package/dist/components/divider/src/RsDivider.d.ts +4 -2
- package/dist/components/divider/src/RsDivider.impl.js +26 -12
- package/dist/components/divider/src/RsDivider.js +1 -1
- package/dist/components/divider/src/divider-utils.d.ts +4 -0
- package/dist/components/dynamic-tags/index.d.ts +1 -1
- package/dist/components/dynamic-tags/src/RsDynamicTags.css +115 -38
- package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +59 -18
- package/dist/components/dynamic-tags/src/RsDynamicTags.impl.js +269 -106
- package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
- package/dist/components/dynamic-tags/src/dynamic-tags-utils.d.ts +19 -0
- package/dist/components/dynamic-tags/src/dynamic-tags-utils.js +60 -0
- package/dist/components/fieldset/src/RsFieldset.css +71 -41
- package/dist/components/fieldset/src/RsFieldset.d.ts +21 -2
- package/dist/components/fieldset/src/RsFieldset.impl.js +93 -26
- package/dist/components/fieldset/src/RsFieldset.js +1 -1
- package/dist/components/fieldset/src/fieldset-utils.d.ts +4 -0
- package/dist/components/fieldset/src/fieldset-utils.js +9 -1
- package/dist/components/form/index.d.ts +1 -0
- package/dist/components/form/src/RsForm.css +15 -12
- package/dist/components/form/src/RsForm.d.ts +20 -22
- package/dist/components/form/src/RsForm.impl.js +33 -20
- package/dist/components/form/src/RsForm.js +1 -1
- package/dist/components/form/src/form-utils.d.ts +7 -0
- package/dist/components/form/src/form-utils.js +28 -1
- package/dist/components/icon/src/RsIcon.css +9 -4
- package/dist/components/icon/src/RsIcon.d.ts +4 -3
- package/dist/components/icon/src/RsIcon.impl.js +9 -32
- package/dist/components/icon/src/RsIcon.js +1 -1
- package/dist/components/icon/src/icon-utils.d.ts +17 -0
- package/dist/components/icon/src/icon-utils.js +39 -0
- package/dist/components/input/index.d.ts +1 -1
- package/dist/components/input/src/RsInput.css +78 -260
- package/dist/components/input/src/RsInput.d.ts +5 -3
- package/dist/components/input/src/RsInput.impl.js +8 -16
- package/dist/components/input/src/RsInput.js +1 -1
- package/dist/components/input/src/input-utils.d.ts +11 -0
- package/dist/components/input/src/input-utils.js +22 -0
- package/dist/components/input-number/index.d.ts +1 -0
- package/dist/components/input-number/src/RsInputNumber.css +31 -31
- package/dist/components/input-number/src/RsInputNumber.d.ts +15 -13
- package/dist/components/input-number/src/RsInputNumber.impl.js +17 -4
- package/dist/components/input-number/src/RsInputNumber.js +1 -1
- package/dist/components/label/src/RsLabel.css +30 -11
- package/dist/components/label/src/RsLabel.d.ts +18 -1
- package/dist/components/label/src/RsLabel.impl.js +63 -10
- package/dist/components/label/src/RsLabel.js +1 -1
- package/dist/components/label/src/label-utils.d.ts +6 -0
- package/dist/components/label/src/label-utils.js +16 -0
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/link/src/RsLink.css +58 -17
- package/dist/components/link/src/RsLink.d.ts +12 -4
- package/dist/components/link/src/RsLink.impl.js +26 -25
- package/dist/components/link/src/RsLink.js +2 -1
- package/dist/components/link/src/link-utils.d.ts +9 -0
- package/dist/components/link/src/link-utils.js +15 -0
- package/dist/components/loading/src/RsLoading.d.ts +2 -2
- package/dist/components/mentions/index.d.ts +2 -1
- package/dist/components/mentions/src/RsMentions.css +119 -3
- package/dist/components/mentions/src/RsMentions.d.ts +56 -4
- package/dist/components/mentions/src/RsMentions.impl.js +298 -79
- package/dist/components/mentions/src/RsMentions.js +1 -3
- package/dist/components/mentions/src/mentions-utils.d.ts +5 -1
- package/dist/components/mentions/src/mentions-utils.js +28 -9
- package/dist/components/popover/src/RsPopover.d.ts +1 -1
- package/dist/components/radio/index.d.ts +1 -1
- package/dist/components/radio/src/RsRadio.css +7 -6
- package/dist/components/radio/src/RsRadio.d.ts +8 -5
- package/dist/components/radio/src/RsRadio.impl.js +34 -24
- package/dist/components/radio/src/RsRadio.js +2 -1
- package/dist/components/radio/src/RsRadioItem.css +61 -44
- package/dist/components/radio/src/RsRadioItem.d.ts +2 -2
- package/dist/components/radio/src/RsRadioItem.impl.js +53 -20
- package/dist/components/radio/src/RsRadioItem.js +2 -1
- package/dist/components/radio/src/radio-utils.d.ts +12 -1
- package/dist/components/radio/src/radio-utils.js +15 -1
- package/dist/components/scrollbar/src/RsScrollbar.css +71 -24
- package/dist/components/scrollbar/src/RsScrollbar.d.ts +9 -5
- package/dist/components/scrollbar/src/RsScrollbar.impl.js +372 -47
- package/dist/components/scrollbar/src/RsScrollbar.js +2 -1
- package/dist/components/scrollbar/src/scrollbar-utils.d.ts +34 -2
- package/dist/components/scrollbar/src/scrollbar-utils.js +64 -1
- package/dist/components/select/index.d.ts +1 -0
- package/dist/components/select/src/RsSelect.css +54 -42
- package/dist/components/select/src/RsSelect.d.ts +19 -2
- package/dist/components/select/src/RsSelect.impl.js +727 -312
- package/dist/components/select/src/RsSelect.js +1 -1
- package/dist/components/select/src/select-utils.d.ts +4 -2
- package/dist/components/select/src/select-utils.js +8 -3
- package/dist/components/select/src/use-rs-select.d.ts +1 -0
- package/dist/components/select/src/use-rs-select.js +23 -17
- package/dist/components/switch/index.d.ts +2 -1
- package/dist/components/switch/src/RsSwitch.css +36 -18
- package/dist/components/switch/src/RsSwitch.d.ts +18 -5
- package/dist/components/switch/src/RsSwitch.impl.js +61 -29
- package/dist/components/switch/src/RsSwitch.js +2 -1
- package/dist/components/switch/src/switch-utils.d.ts +4 -0
- package/dist/components/switch/src/switch-utils.js +9 -0
- package/dist/components/tag/index.d.ts +1 -1
- package/dist/components/tag/src/RsTag.css +42 -38
- package/dist/components/tag/src/RsTag.d.ts +3 -2
- package/dist/components/tag/src/RsTag.impl.js +18 -9
- package/dist/components/tag/src/RsTag.js +1 -1
- package/dist/components/tag/src/tag-utils.d.ts +8 -0
- package/dist/components/terminal/src/RsTerminal.d.ts +1 -1
- package/dist/components/textarea/src/RsTextarea.css +23 -23
- package/dist/components/textarea/src/RsTextarea.d.ts +6 -12
- package/dist/components/textarea/src/RsTextarea.impl.js +37 -46
- package/dist/components/textarea/src/RsTextarea.js +1 -1
- package/dist/components/textarea/src/textarea-utils.d.ts +27 -0
- package/dist/components/textarea/src/textarea-utils.js +61 -0
- package/dist/components/time-picker/index.d.ts +3 -2
- package/dist/components/time-picker/src/RsTimePicker.css +41 -24
- package/dist/components/time-picker/src/RsTimePicker.d.ts +52 -7
- package/dist/components/time-picker/src/RsTimePicker.impl.js +520 -156
- package/dist/components/time-picker/src/RsTimePicker.js +1 -3
- package/dist/components/time-picker/src/RsTimePickerColumns.css +26 -18
- package/dist/components/time-picker/src/RsTimePickerColumns.d.ts +3 -1
- package/dist/components/time-picker/src/RsTimePickerColumns.impl.js +62 -9
- package/dist/components/time-picker/src/RsTimePickerColumns.js +1 -1
- package/dist/components/time-picker/src/time-picker-utils.d.ts +38 -0
- package/dist/components/time-picker/src/time-picker-utils.js +97 -5
- package/dist/components/toaster/src/RsToaster.d.ts +1 -1
- package/dist/components/tooltip/src/RsTooltip.d.ts +1 -1
- package/dist/components/tree/src/RsTree.d.ts +3 -3
- package/dist/components/tree-select/index.d.ts +2 -0
- package/dist/components/tree-select/src/RsTreeSelect.css +100 -25
- package/dist/components/tree-select/src/RsTreeSelect.d.ts +91 -7
- package/dist/components/tree-select/src/RsTreeSelect.impl.js +464 -79
- package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
- package/dist/components/tree-select/src/tree-select-utils.d.ts +20 -0
- package/dist/components/tree-select/src/tree-select-utils.js +60 -0
- package/dist/components/upload/index.d.ts +2 -1
- package/dist/components/upload/src/RsUpload.css +223 -75
- package/dist/components/upload/src/RsUpload.d.ts +77 -1
- package/dist/components/upload/src/RsUpload.impl.js +404 -90
- package/dist/components/upload/src/RsUpload.js +1 -1
- package/dist/components/upload/src/upload-utils.d.ts +21 -2
- package/dist/components/upload/src/upload-utils.js +139 -9
- package/dist/index.d.ts +24 -11
- package/dist/index.js +6 -0
- package/dist/locale/messages.js +46 -2
- package/dist/styles.css +518 -154
- package/dist/theme/brand.example.css +1 -1
- package/package.json +9 -8
- package/dist/components/breadcrumb/src/RsBreadcrumbItems.d.ts +0 -8
- package/dist/components/breadcrumb/src/RsBreadcrumbItems.impl.js +0 -40
- package/dist/components/breadcrumb/src/RsBreadcrumbItems.js +0 -5
- package/dist/components/date-picker/src/RsDatePicker-1.css +0 -157
- package/dist/components/mentions/src/RsMentions-1.css +0 -29
- package/dist/components/time-picker/src/RsTimePicker-1.css +0 -98
|
@@ -1,74 +1,84 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-fieldset[data-v-
|
|
2
|
+
.rs-fieldset[data-v-460cb31f] {
|
|
3
|
+
--rs-fieldset-line: var(--rs-fieldset-border);
|
|
3
4
|
display: flex;
|
|
4
5
|
flex-direction: column;
|
|
5
|
-
gap: var(--rs-fieldset-gap
|
|
6
|
+
gap: var(--rs-fieldset-gap);
|
|
6
7
|
box-sizing: border-box;
|
|
7
|
-
min-width: 0;
|
|
8
8
|
min-inline-size: 0;
|
|
9
9
|
margin: 0;
|
|
10
|
-
padding: var(--rs-space-md) var(--rs-space-lg)
|
|
10
|
+
padding-block: var(--rs-space-md) var(--rs-space-lg);
|
|
11
|
+
padding-inline: var(--rs-space-lg);
|
|
11
12
|
border-width: 1px;
|
|
12
13
|
border-style: solid;
|
|
13
|
-
border-color: var(--rs-fieldset-
|
|
14
|
-
border-radius: var(--rs-fieldset-radius
|
|
14
|
+
border-color: var(--rs-fieldset-line);
|
|
15
|
+
border-radius: var(--rs-fieldset-radius);
|
|
15
16
|
background: transparent;
|
|
16
17
|
}
|
|
17
|
-
.rs-fieldset--sm[data-v-
|
|
18
|
-
gap: var(--rs-
|
|
19
|
-
padding: var(--rs-space-sm) var(--rs-space-md)
|
|
18
|
+
.rs-fieldset--sm[data-v-460cb31f] {
|
|
19
|
+
gap: var(--rs-fieldset-gap-sm);
|
|
20
|
+
padding-block: var(--rs-space-sm) var(--rs-space-md);
|
|
21
|
+
padding-inline: var(--rs-space-md);
|
|
20
22
|
}
|
|
21
|
-
.rs-fieldset--dashed[data-v-
|
|
23
|
+
.rs-fieldset--dashed[data-v-460cb31f] {
|
|
22
24
|
border-style: dashed;
|
|
23
25
|
}
|
|
24
|
-
.rs-fieldset--dotted[data-v-
|
|
26
|
+
.rs-fieldset--dotted[data-v-460cb31f] {
|
|
25
27
|
border-style: dotted;
|
|
26
28
|
}
|
|
27
|
-
.rs-fieldset--tone-subtle[data-v-
|
|
28
|
-
|
|
29
|
+
.rs-fieldset--tone-subtle[data-v-460cb31f] {
|
|
30
|
+
--rs-fieldset-line: var(--rs-fieldset-border-subtle);
|
|
31
|
+
}
|
|
32
|
+
.rs-fieldset--tone-faded[data-v-460cb31f] {
|
|
33
|
+
--rs-fieldset-line: var(--rs-fieldset-border-faded);
|
|
29
34
|
}
|
|
30
|
-
.rs-fieldset
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
var(--rs-fieldset-border, var(--rs-border)) 42%,
|
|
34
|
-
transparent
|
|
35
|
-
);
|
|
35
|
+
.rs-fieldset[data-v-460cb31f]:disabled,
|
|
36
|
+
.rs-fieldset--disabled[data-v-460cb31f] {
|
|
37
|
+
--rs-fieldset-line: var(--rs-fieldset-border-subtle);
|
|
36
38
|
}
|
|
37
|
-
.rs-
|
|
39
|
+
.rs-fieldset--invalid[data-v-460cb31f],
|
|
40
|
+
.rs-fieldset--invalid.rs-fieldset--disabled[data-v-460cb31f] {
|
|
41
|
+
--rs-fieldset-line: var(--rs-fieldset-border-invalid);
|
|
42
|
+
}
|
|
43
|
+
.rs-fieldset__legend[data-v-460cb31f] {
|
|
38
44
|
display: inline-flex;
|
|
39
45
|
align-items: center;
|
|
40
46
|
gap: var(--rs-space-sm);
|
|
41
47
|
float: none;
|
|
42
|
-
padding:
|
|
48
|
+
padding-inline: var(--rs-space-xs);
|
|
43
49
|
margin: 0;
|
|
44
50
|
font-size: var(--rs-fieldset-title-size, var(--rs-font-size-sm));
|
|
45
51
|
font-weight: var(--rs-fieldset-title-weight, var(--rs-font-weight-semibold));
|
|
46
52
|
line-height: var(--rs-line-height-tight);
|
|
47
|
-
color: var(--rs-
|
|
48
|
-
background: var(--rs-fieldset-legend-bg
|
|
53
|
+
color: var(--rs-fieldset-title);
|
|
54
|
+
background: var(--rs-fieldset-legend-bg);
|
|
49
55
|
}
|
|
50
|
-
.rs-fieldset__heading[data-v-
|
|
56
|
+
.rs-fieldset__heading[data-v-460cb31f] {
|
|
51
57
|
display: inline-flex;
|
|
52
58
|
align-items: center;
|
|
53
59
|
gap: var(--rs-space-xs);
|
|
54
|
-
min-
|
|
60
|
+
min-inline-size: 0;
|
|
55
61
|
}
|
|
56
|
-
.rs-fieldset__title[data-v-
|
|
57
|
-
min-
|
|
62
|
+
.rs-fieldset__title[data-v-460cb31f] {
|
|
63
|
+
min-inline-size: 0;
|
|
58
64
|
font-size: inherit;
|
|
59
65
|
font-weight: inherit;
|
|
60
66
|
color: inherit;
|
|
61
67
|
}
|
|
62
|
-
.rs-
|
|
63
|
-
|
|
68
|
+
.rs-fieldset__required[data-v-460cb31f] {
|
|
69
|
+
margin-inline-start: var(--rs-label-mark-gap);
|
|
70
|
+
color: var(--rs-danger);
|
|
64
71
|
}
|
|
65
|
-
.rs-fieldset--title-
|
|
66
|
-
color: var(--rs-
|
|
72
|
+
.rs-fieldset--title-strong .rs-fieldset__legend[data-v-460cb31f] {
|
|
73
|
+
color: var(--rs-fieldset-title-strong);
|
|
67
74
|
}
|
|
68
|
-
.rs-fieldset--title-
|
|
69
|
-
color: var(--rs-
|
|
75
|
+
.rs-fieldset--title-default .rs-fieldset__legend[data-v-460cb31f] {
|
|
76
|
+
color: var(--rs-fieldset-title);
|
|
70
77
|
}
|
|
71
|
-
.rs-
|
|
78
|
+
.rs-fieldset--title-muted .rs-fieldset__legend[data-v-460cb31f] {
|
|
79
|
+
color: var(--rs-fieldset-title-muted);
|
|
80
|
+
}
|
|
81
|
+
.rs-fieldset__extra[data-v-460cb31f] {
|
|
72
82
|
display: inline-flex;
|
|
73
83
|
align-items: center;
|
|
74
84
|
gap: var(--rs-space-xs);
|
|
@@ -76,17 +86,37 @@
|
|
|
76
86
|
font-weight: var(--rs-font-weight-regular);
|
|
77
87
|
color: var(--rs-muted);
|
|
78
88
|
}
|
|
79
|
-
.rs-fieldset__body[data-v-
|
|
89
|
+
.rs-fieldset__body[data-v-460cb31f] {
|
|
80
90
|
display: flex;
|
|
81
91
|
flex-direction: column;
|
|
82
|
-
min-
|
|
92
|
+
min-inline-size: 0;
|
|
83
93
|
gap: inherit;
|
|
84
94
|
}
|
|
85
|
-
.rs-
|
|
86
|
-
|
|
87
|
-
|
|
95
|
+
.rs-fieldset__hint[data-v-460cb31f] {
|
|
96
|
+
margin: 0;
|
|
97
|
+
font-size: var(--rs-font-size-xs);
|
|
98
|
+
font-weight: var(--rs-font-weight-regular);
|
|
99
|
+
line-height: var(--rs-line-height-normal);
|
|
100
|
+
color: var(--rs-fieldset-hint);
|
|
88
101
|
}
|
|
89
|
-
.rs-
|
|
90
|
-
|
|
102
|
+
.rs-fieldset__error[data-v-460cb31f] {
|
|
103
|
+
margin: 0;
|
|
104
|
+
font-size: var(--rs-font-size-xs);
|
|
105
|
+
line-height: var(--rs-line-height-normal);
|
|
106
|
+
color: var(--rs-fieldset-error);
|
|
107
|
+
}
|
|
108
|
+
.rs-fieldset:disabled .rs-fieldset__legend[data-v-460cb31f],
|
|
109
|
+
.rs-fieldset--disabled .rs-fieldset__legend[data-v-460cb31f] {
|
|
91
110
|
color: var(--rs-muted);
|
|
92
111
|
}
|
|
112
|
+
.rs-fieldset__sr[data-v-460cb31f] {
|
|
113
|
+
position: absolute;
|
|
114
|
+
inline-size: 1px;
|
|
115
|
+
block-size: 1px;
|
|
116
|
+
padding: 0;
|
|
117
|
+
margin: -1px;
|
|
118
|
+
overflow: hidden;
|
|
119
|
+
clip: rect(0, 0, 0, 0);
|
|
120
|
+
white-space: nowrap;
|
|
121
|
+
border: 0;
|
|
122
|
+
}
|
|
@@ -21,6 +21,19 @@ type __VLS_Props = {
|
|
|
21
21
|
size?: RsFieldsetSize;
|
|
22
22
|
/** 原生 fieldset name */
|
|
23
23
|
name?: string;
|
|
24
|
+
/** 关联外部 form id(分组不嵌在 form 内时) */
|
|
25
|
+
form?: string;
|
|
26
|
+
/** 根 fieldset id */
|
|
27
|
+
id?: string;
|
|
28
|
+
/**
|
|
29
|
+
* 组必填标记。只画星号;真正 required 仍在字段上。
|
|
30
|
+
* 没有 HTML fieldset.required。
|
|
31
|
+
*/
|
|
32
|
+
required?: boolean;
|
|
33
|
+
/** 组级校验失败(描边走 danger) */
|
|
34
|
+
invalid?: boolean;
|
|
35
|
+
/** 组级错误文案;有文案或 #error 时也视为 invalid */
|
|
36
|
+
error?: string;
|
|
24
37
|
/** 边框线型 */
|
|
25
38
|
borderStyle?: RsFieldsetBorderStyle;
|
|
26
39
|
/** 边框浓度;faded 为虚化 */
|
|
@@ -32,7 +45,7 @@ type __VLS_Props = {
|
|
|
32
45
|
/** 标题字号 */
|
|
33
46
|
titleSize?: RsFieldsetTitleSize;
|
|
34
47
|
};
|
|
35
|
-
declare var __VLS_1: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {};
|
|
48
|
+
declare var __VLS_1: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {}, __VLS_16: {}, __VLS_18: {};
|
|
36
49
|
type __VLS_Slots = {} & {
|
|
37
50
|
legend?: (props: typeof __VLS_1) => any;
|
|
38
51
|
} & {
|
|
@@ -40,10 +53,16 @@ type __VLS_Slots = {} & {
|
|
|
40
53
|
} & {
|
|
41
54
|
extra?: (props: typeof __VLS_12) => any;
|
|
42
55
|
} & {
|
|
43
|
-
|
|
56
|
+
tooltip?: (props: typeof __VLS_14) => any;
|
|
57
|
+
} & {
|
|
58
|
+
default?: (props: typeof __VLS_16) => any;
|
|
59
|
+
} & {
|
|
60
|
+
error?: (props: typeof __VLS_18) => any;
|
|
44
61
|
};
|
|
45
62
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
63
|
+
required: boolean;
|
|
46
64
|
size: RsFieldsetSize;
|
|
65
|
+
invalid: boolean;
|
|
47
66
|
disabled: boolean;
|
|
48
67
|
borderStyle: RsFieldsetBorderStyle;
|
|
49
68
|
borderTone: RsFieldsetBorderTone;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { useRsI18n } from "../../../composables/useRsI18n.js";
|
|
2
2
|
import { useRsFormContext } from "../../form/src/form-utils.js";
|
|
3
3
|
import RsTooltip_default from "../../tooltip/src/RsTooltip.js";
|
|
4
|
-
import { resolveFieldsetTitleSize, resolveFieldsetTitleWeight } from "./fieldset-utils.js";
|
|
5
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, toDisplayString, useSlots, withCtx } from "vue";
|
|
4
|
+
import { resolveFieldsetInvalid, resolveFieldsetTitleSize, resolveFieldsetTitleWeight, resolveFieldsetTooltip } from "./fieldset-utils.js";
|
|
5
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, toDisplayString, unref, useId, useSlots, withCtx } from "vue";
|
|
6
6
|
//#region src/components/fieldset/src/RsFieldset.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
-
var _hoisted_1 = [
|
|
7
|
+
var _hoisted_1 = [
|
|
8
|
+
"id",
|
|
9
|
+
"name",
|
|
10
|
+
"form",
|
|
11
|
+
"disabled",
|
|
12
|
+
"aria-invalid",
|
|
13
|
+
"aria-describedby"
|
|
14
|
+
];
|
|
8
15
|
var _hoisted_2 = {
|
|
9
16
|
key: 0,
|
|
10
17
|
class: "rs-fieldset__legend"
|
|
@@ -12,10 +19,21 @@ var _hoisted_2 = {
|
|
|
12
19
|
var _hoisted_3 = { class: "rs-fieldset__heading" };
|
|
13
20
|
var _hoisted_4 = { class: "rs-fieldset__title" };
|
|
14
21
|
var _hoisted_5 = {
|
|
22
|
+
key: 0,
|
|
23
|
+
class: "rs-fieldset__required",
|
|
24
|
+
"aria-hidden": "true"
|
|
25
|
+
};
|
|
26
|
+
var _hoisted_6 = {
|
|
27
|
+
key: 1,
|
|
28
|
+
class: "rs-fieldset__sr"
|
|
29
|
+
};
|
|
30
|
+
var _hoisted_7 = {
|
|
15
31
|
key: 0,
|
|
16
32
|
class: "rs-fieldset__extra"
|
|
17
33
|
};
|
|
18
|
-
var
|
|
34
|
+
var _hoisted_8 = { class: "rs-fieldset__body" };
|
|
35
|
+
var _hoisted_9 = ["id"];
|
|
36
|
+
var _hoisted_10 = ["id"];
|
|
19
37
|
var RsFieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
20
38
|
name: "RsFieldset",
|
|
21
39
|
__name: "RsFieldset",
|
|
@@ -29,6 +47,17 @@ var RsFieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
29
47
|
},
|
|
30
48
|
size: { default: "md" },
|
|
31
49
|
name: {},
|
|
50
|
+
form: {},
|
|
51
|
+
id: {},
|
|
52
|
+
required: {
|
|
53
|
+
type: Boolean,
|
|
54
|
+
default: false
|
|
55
|
+
},
|
|
56
|
+
invalid: {
|
|
57
|
+
type: Boolean,
|
|
58
|
+
default: false
|
|
59
|
+
},
|
|
60
|
+
error: {},
|
|
32
61
|
borderStyle: { default: "solid" },
|
|
33
62
|
borderTone: { default: "default" },
|
|
34
63
|
titleWeight: { default: "semibold" },
|
|
@@ -39,38 +68,76 @@ var RsFieldset_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
39
68
|
const props = __props;
|
|
40
69
|
const slots = useSlots();
|
|
41
70
|
const { t } = useRsI18n();
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
const
|
|
71
|
+
const formContext = useRsFormContext();
|
|
72
|
+
const autoErrorId = useId();
|
|
73
|
+
const autoHintId = useId();
|
|
74
|
+
const isDisabled = computed(() => Boolean(props.disabled || formContext?.disabled.value));
|
|
75
|
+
const resolvedTooltip = computed(() => resolveFieldsetTooltip(props.tooltip, props.description));
|
|
45
76
|
const hasTooltip = computed(() => Boolean(resolvedTooltip.value || slots.tooltip));
|
|
46
|
-
const
|
|
77
|
+
const hasError = computed(() => Boolean(props.error?.trim() || slots.error));
|
|
78
|
+
const isInvalid = computed(() => resolveFieldsetInvalid(props.invalid, props.error, Boolean(slots.error)));
|
|
79
|
+
const hasLegend = computed(() => Boolean(props.legend || slots.legend || slots.extra || hasTooltip.value || props.required));
|
|
80
|
+
const showDisabledHint = computed(() => isDisabled.value && hasTooltip.value);
|
|
47
81
|
const helpLabel = computed(() => t("fieldset.help", "Group help"));
|
|
82
|
+
const errorId = computed(() => hasError.value ? autoErrorId : void 0);
|
|
83
|
+
const hintId = computed(() => showDisabledHint.value ? autoHintId : void 0);
|
|
84
|
+
const describedBy = computed(() => {
|
|
85
|
+
const ids = [errorId.value, hintId.value].filter(Boolean);
|
|
86
|
+
return ids.length ? ids.join(" ") : void 0;
|
|
87
|
+
});
|
|
88
|
+
const rootClass = computed(() => [
|
|
89
|
+
"rs-fieldset",
|
|
90
|
+
`rs-fieldset--${props.size}`,
|
|
91
|
+
`rs-fieldset--${props.borderStyle}`,
|
|
92
|
+
`rs-fieldset--tone-${props.borderTone}`,
|
|
93
|
+
`rs-fieldset--title-${props.titleTone}`,
|
|
94
|
+
{
|
|
95
|
+
"rs-fieldset--disabled": isDisabled.value,
|
|
96
|
+
"rs-fieldset--invalid": isInvalid.value
|
|
97
|
+
}
|
|
98
|
+
]);
|
|
48
99
|
const rootStyle = computed(() => ({
|
|
49
100
|
"--rs-fieldset-title-size": resolveFieldsetTitleSize(props.titleSize),
|
|
50
101
|
"--rs-fieldset-title-weight": resolveFieldsetTitleWeight(props.titleWeight)
|
|
51
102
|
}));
|
|
52
103
|
return (_ctx, _cache) => {
|
|
53
104
|
return openBlock(), createElementBlock("fieldset", {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
`rs-fieldset--${__props.borderStyle}`,
|
|
57
|
-
`rs-fieldset--tone-${__props.borderTone}`,
|
|
58
|
-
`rs-fieldset--title-${__props.titleTone}`,
|
|
59
|
-
{ "rs-fieldset--disabled": isDisabled.value }
|
|
60
|
-
]]),
|
|
105
|
+
id: __props.id,
|
|
106
|
+
class: normalizeClass(rootClass.value),
|
|
61
107
|
style: normalizeStyle(rootStyle.value),
|
|
62
108
|
name: __props.name,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
109
|
+
form: __props.form,
|
|
110
|
+
disabled: isDisabled.value,
|
|
111
|
+
"aria-invalid": isInvalid.value ? "true" : void 0,
|
|
112
|
+
"aria-describedby": describedBy.value
|
|
113
|
+
}, [hasLegend.value ? (openBlock(), createElementBlock("legend", _hoisted_2, [createElementVNode("span", _hoisted_3, [
|
|
114
|
+
renderSlot(_ctx.$slots, "legend", {}, () => [createElementVNode("span", _hoisted_4, toDisplayString(__props.legend), 1)], true),
|
|
115
|
+
__props.required ? (openBlock(), createElementBlock("span", _hoisted_5, "*")) : createCommentVNode("", true),
|
|
116
|
+
__props.required ? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString(unref(t)("label.required")), 1)) : createCommentVNode("", true),
|
|
117
|
+
hasTooltip.value && !isDisabled.value ? (openBlock(), createBlock(RsTooltip_default, {
|
|
118
|
+
key: 2,
|
|
119
|
+
icon: "",
|
|
120
|
+
content: resolvedTooltip.value,
|
|
121
|
+
"aria-label": helpLabel.value
|
|
122
|
+
}, createSlots({ _: 2 }, [_ctx.$slots.tooltip ? {
|
|
123
|
+
name: "content",
|
|
124
|
+
fn: withCtx(() => [renderSlot(_ctx.$slots, "tooltip", {}, void 0, true)]),
|
|
125
|
+
key: "0"
|
|
126
|
+
} : void 0]), 1032, ["content", "aria-label"])) : createCommentVNode("", true)
|
|
127
|
+
]), _ctx.$slots.extra ? (openBlock(), createElementBlock("span", _hoisted_7, [renderSlot(_ctx.$slots, "extra", {}, void 0, true)])) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", _hoisted_8, [
|
|
128
|
+
showDisabledHint.value ? (openBlock(), createElementBlock("div", {
|
|
129
|
+
key: 0,
|
|
130
|
+
id: hintId.value,
|
|
131
|
+
class: "rs-fieldset__hint"
|
|
132
|
+
}, [renderSlot(_ctx.$slots, "tooltip", {}, () => [createTextVNode(toDisplayString(resolvedTooltip.value), 1)], true)], 8, _hoisted_9)) : createCommentVNode("", true),
|
|
133
|
+
renderSlot(_ctx.$slots, "default", {}, void 0, true),
|
|
134
|
+
hasError.value ? (openBlock(), createElementBlock("p", {
|
|
135
|
+
key: 1,
|
|
136
|
+
id: errorId.value,
|
|
137
|
+
class: "rs-fieldset__error",
|
|
138
|
+
role: "alert"
|
|
139
|
+
}, [renderSlot(_ctx.$slots, "error", {}, () => [createTextVNode(toDisplayString(__props.error), 1)], true)], 8, _hoisted_10)) : createCommentVNode("", true)
|
|
140
|
+
])], 14, _hoisted_1);
|
|
74
141
|
};
|
|
75
142
|
}
|
|
76
143
|
});
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsFieldset_vue_vue_type_script_setup_true_lang_default from "./RsFieldset.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/fieldset/src/RsFieldset.vue
|
|
6
|
-
var RsFieldset_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsFieldset_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsFieldset_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsFieldset_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-460cb31f"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsFieldset_default as default };
|
|
@@ -27,3 +27,7 @@ export type RsFieldsetTitleSize = Extract<RsFontSize, 'xs' | 'sm' | 'base'>;
|
|
|
27
27
|
export declare function resolveFieldsetTitleSize(size: RsFieldsetTitleSize): string;
|
|
28
28
|
/** 解析标题字重 token。 */
|
|
29
29
|
export declare function resolveFieldsetTitleWeight(weight: RsFontWeight): string;
|
|
30
|
+
/** tooltip 优先;弃用的 description 仍映射到同一 tip。 */
|
|
31
|
+
export declare function resolveFieldsetTooltip(tooltip: string | undefined, description: string | undefined): string;
|
|
32
|
+
/** 显式 invalid,或有错误文案 / #error,都算组级失败。 */
|
|
33
|
+
export declare function resolveFieldsetInvalid(invalid: boolean, error: string | undefined, hasErrorSlot: boolean): boolean;
|
|
@@ -8,5 +8,13 @@ function resolveFieldsetTitleSize(size) {
|
|
|
8
8
|
function resolveFieldsetTitleWeight(weight) {
|
|
9
9
|
return RS_FONT_WEIGHT_CSS[weight];
|
|
10
10
|
}
|
|
11
|
+
/** tooltip 优先;弃用的 description 仍映射到同一 tip。 */
|
|
12
|
+
function resolveFieldsetTooltip(tooltip, description) {
|
|
13
|
+
return (tooltip || description || "").trim();
|
|
14
|
+
}
|
|
15
|
+
/** 显式 invalid,或有错误文案 / #error,都算组级失败。 */
|
|
16
|
+
function resolveFieldsetInvalid(invalid, error, hasErrorSlot) {
|
|
17
|
+
return Boolean(invalid || error?.trim() || hasErrorSlot);
|
|
18
|
+
}
|
|
11
19
|
//#endregion
|
|
12
|
-
export { resolveFieldsetTitleSize, resolveFieldsetTitleWeight };
|
|
20
|
+
export { resolveFieldsetInvalid, resolveFieldsetTitleSize, resolveFieldsetTitleWeight, resolveFieldsetTooltip };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { default as RsForm } from './src/RsForm.js';
|
|
2
|
+
export type { RsFormExpose, RsFormInstance } from './src/RsForm.js';
|
|
2
3
|
export { default as RsFormItem } from './src/RsFormItem.js';
|
|
3
4
|
export { default as RsFormList } from './src/RsFormList.js';
|
|
4
5
|
export type { RsFormContext, RsFormErrorRender, RsFormErrorRenderContext, RsFormFieldExpose, RsFormItemContext, RsFormListContext, RsFormListField, RsFormListOperations, RsFormFieldValidationResult, RsFormGap, RsFormLabelAlign, RsFormLabelPosition, RsFormMaxWidth, RsFormSize, RsFormValidateStatus, RsFormValidationResult, } from './src/form-utils';
|
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-form[data-v-
|
|
2
|
+
.rs-form[data-v-0cdc7aeb] {
|
|
3
|
+
--rs-form-max-sm: 24rem;
|
|
4
|
+
--rs-form-max-md: 32rem;
|
|
5
|
+
--rs-form-max-lg: 48rem;
|
|
3
6
|
display: flex;
|
|
4
7
|
flex-direction: column;
|
|
5
8
|
width: 100%;
|
|
6
9
|
}
|
|
7
|
-
.rs-form--gap-sm[data-v-
|
|
10
|
+
.rs-form--gap-sm[data-v-0cdc7aeb] {
|
|
8
11
|
gap: var(--rs-space-sm);
|
|
9
12
|
}
|
|
10
|
-
.rs-form--gap-md[data-v-
|
|
13
|
+
.rs-form--gap-md[data-v-0cdc7aeb] {
|
|
11
14
|
gap: var(--rs-space-md);
|
|
12
15
|
}
|
|
13
|
-
.rs-form--gap-lg[data-v-
|
|
16
|
+
.rs-form--gap-lg[data-v-0cdc7aeb] {
|
|
14
17
|
gap: var(--rs-space-lg);
|
|
15
18
|
}
|
|
16
|
-
.rs-form--max-sm[data-v-
|
|
17
|
-
max-width:
|
|
19
|
+
.rs-form--max-sm[data-v-0cdc7aeb] {
|
|
20
|
+
max-width: var(--rs-form-max-sm);
|
|
18
21
|
}
|
|
19
|
-
.rs-form--max-md[data-v-
|
|
20
|
-
max-width:
|
|
22
|
+
.rs-form--max-md[data-v-0cdc7aeb] {
|
|
23
|
+
max-width: var(--rs-form-max-md);
|
|
21
24
|
}
|
|
22
|
-
.rs-form--max-lg[data-v-
|
|
23
|
-
max-width:
|
|
25
|
+
.rs-form--max-lg[data-v-0cdc7aeb] {
|
|
26
|
+
max-width: var(--rs-form-max-lg);
|
|
24
27
|
}
|
|
25
|
-
.rs-form--max-full[data-v-
|
|
28
|
+
.rs-form--max-full[data-v-0cdc7aeb] {
|
|
26
29
|
max-width: 100%;
|
|
27
30
|
}
|
|
28
|
-
.rs-form--max-none[data-v-
|
|
31
|
+
.rs-form--max-none[data-v-0cdc7aeb] {
|
|
29
32
|
max-width: none;
|
|
30
33
|
}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
import type { RsFormErrorRender, RsFormFieldValidationResult, RsFormGap, RsFormLabelAlign, RsFormLabelPosition, RsFormMaxWidth, RsFormSize, RsFormValidationResult } from './form-utils';
|
|
2
2
|
import type { RsFormRuleTrigger, RsFormRules, RsFormValidateMessages } from './form-rules';
|
|
3
3
|
import { type RsFormNamePath } from './form-path';
|
|
4
|
+
/**
|
|
5
|
+
* RsForm 模板 ref 请用此类型。
|
|
6
|
+
* 不要写 `InstanceType<typeof RsForm>`:组件实例类型过深,vue-tsc 会报 Excessive stack depth。
|
|
7
|
+
*/
|
|
8
|
+
export interface RsFormExpose {
|
|
9
|
+
validate: (trigger?: RsFormRuleTrigger) => Promise<RsFormValidationResult>;
|
|
10
|
+
validateField: (name: string, trigger?: RsFormRuleTrigger) => Promise<RsFormFieldValidationResult>;
|
|
11
|
+
clearValidation: (names?: string | string[]) => void;
|
|
12
|
+
resetFields: (names?: string | string[]) => void;
|
|
13
|
+
getFieldsValue: () => Record<string, unknown>;
|
|
14
|
+
setFieldsValue: (values: Record<string, unknown>) => void;
|
|
15
|
+
getFieldValue: (name: RsFormNamePath) => unknown;
|
|
16
|
+
setFieldValue: (name: RsFormNamePath, value: unknown) => void;
|
|
17
|
+
scrollToField: (name: RsFormNamePath) => void;
|
|
18
|
+
}
|
|
19
|
+
/** 模板 ref 实例:expose + 根 form */
|
|
20
|
+
export type RsFormInstance = RsFormExpose & {
|
|
21
|
+
$el: HTMLFormElement;
|
|
22
|
+
};
|
|
4
23
|
type __VLS_Props = {
|
|
5
24
|
disabled?: boolean;
|
|
6
25
|
labelPosition?: RsFormLabelPosition;
|
|
@@ -29,32 +48,11 @@ type __VLS_Props = {
|
|
|
29
48
|
*/
|
|
30
49
|
errorRender?: RsFormErrorRender;
|
|
31
50
|
};
|
|
32
|
-
declare function getFieldValue(name: RsFormNamePath): unknown;
|
|
33
|
-
declare function setFieldValue(name: RsFormNamePath, value: unknown): void;
|
|
34
|
-
declare function getFieldsValue(): Record<string, unknown>;
|
|
35
|
-
declare function setFieldsValue(values: Record<string, unknown>): void;
|
|
36
|
-
declare function scrollToField(name: RsFormNamePath): void;
|
|
37
|
-
/** 校验全部字段;可传 trigger 过滤规则 */
|
|
38
|
-
declare function validate(trigger?: RsFormRuleTrigger): Promise<RsFormValidationResult>;
|
|
39
|
-
/** 按 name 校验单个字段 */
|
|
40
|
-
declare function validateField(name: string, trigger?: RsFormRuleTrigger): Promise<RsFormFieldValidationResult>;
|
|
41
|
-
declare function clearValidation(names?: string | string[]): void;
|
|
42
|
-
declare function resetFields(names?: string | string[]): void;
|
|
43
51
|
declare var __VLS_1: {};
|
|
44
52
|
type __VLS_Slots = {} & {
|
|
45
53
|
default?: (props: typeof __VLS_1) => any;
|
|
46
54
|
};
|
|
47
|
-
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
48
|
-
validate: typeof validate;
|
|
49
|
-
validateField: typeof validateField;
|
|
50
|
-
clearValidation: typeof clearValidation;
|
|
51
|
-
resetFields: typeof resetFields;
|
|
52
|
-
getFieldsValue: typeof getFieldsValue;
|
|
53
|
-
setFieldsValue: typeof setFieldsValue;
|
|
54
|
-
getFieldValue: typeof getFieldValue;
|
|
55
|
-
setFieldValue: typeof setFieldValue;
|
|
56
|
-
scrollToField: typeof scrollToField;
|
|
57
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
55
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, RsFormExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
58
56
|
submit: (event: Event) => any;
|
|
59
57
|
validate: (result: RsFormValidationResult) => any;
|
|
60
58
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { getByNamePath, namePathKey, setByNamePath } from "./form-path.js";
|
|
2
|
-
import { cloneFormFieldValue, provideRsFormContext, resolveFieldRules } from "./form-utils.js";
|
|
3
|
-
import { computed, createElementBlock, defineComponent, normalizeClass,
|
|
2
|
+
import { cloneFormFieldValue, normalizeRsFormNameFilter, provideRsFormContext, resolveFieldRules, scrollRsFormField } from "./form-utils.js";
|
|
3
|
+
import { computed, createElementBlock, defineComponent, normalizeClass, onBeforeUnmount, openBlock, renderSlot, toRef, useSlots, useTemplateRef } from "vue";
|
|
4
4
|
//#region src/components/form/src/RsForm.vue?vue&type=script&setup=true&lang.ts
|
|
5
5
|
var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
6
|
+
name: "RsForm",
|
|
6
7
|
__name: "RsForm",
|
|
7
8
|
props: {
|
|
8
9
|
disabled: {
|
|
@@ -29,7 +30,11 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
29
30
|
const props = __props;
|
|
30
31
|
const emit = __emit;
|
|
31
32
|
const slots = useSlots();
|
|
33
|
+
const formEl = useTemplateRef("formEl");
|
|
32
34
|
const fields = /* @__PURE__ */ new Map();
|
|
35
|
+
const fieldsByName = /* @__PURE__ */ new Map();
|
|
36
|
+
const initialValues = /* @__PURE__ */ new Map();
|
|
37
|
+
let mounted = true;
|
|
33
38
|
const disabledRef = computed(() => props.disabled);
|
|
34
39
|
const labelPositionRef = computed(() => props.labelPosition);
|
|
35
40
|
const labelWidthRef = computed(() => props.labelWidth);
|
|
@@ -38,30 +43,33 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
38
43
|
const rulesRef = toRef(props, "rules");
|
|
39
44
|
const modelRef = toRef(props, "model");
|
|
40
45
|
const validateMessagesRef = computed(() => props.validateMessages);
|
|
41
|
-
const initialValues = ref(/* @__PURE__ */ new Map());
|
|
42
46
|
function registerField(id, field) {
|
|
43
47
|
fields.set(id, field);
|
|
44
|
-
initialValues.
|
|
48
|
+
initialValues.set(id, cloneFormFieldValue(field.getValue()));
|
|
49
|
+
if (field.name && !fieldsByName.has(field.name)) fieldsByName.set(field.name, field);
|
|
45
50
|
}
|
|
46
51
|
function unregisterField(id) {
|
|
52
|
+
const field = fields.get(id);
|
|
47
53
|
fields.delete(id);
|
|
48
|
-
initialValues.
|
|
54
|
+
initialValues.delete(id);
|
|
55
|
+
if (field?.name && fieldsByName.get(field.name) === field) fieldsByName.delete(field.name);
|
|
56
|
+
}
|
|
57
|
+
function findField(name) {
|
|
58
|
+
return fieldsByName.get(name);
|
|
49
59
|
}
|
|
50
60
|
function getFieldRules(name) {
|
|
51
61
|
return resolveFieldRules(props.rules, name);
|
|
52
62
|
}
|
|
53
63
|
function getFieldValue(name) {
|
|
54
64
|
if (modelRef.value) return getByNamePath(modelRef.value, name);
|
|
55
|
-
|
|
56
|
-
return Array.from(fields.values()).find((item) => item.name === key)?.getValue();
|
|
65
|
+
return findField(namePathKey(name))?.getValue();
|
|
57
66
|
}
|
|
58
67
|
function setFieldValue(name, value) {
|
|
59
68
|
if (modelRef.value) {
|
|
60
69
|
setByNamePath(modelRef.value, name, value);
|
|
61
70
|
return;
|
|
62
71
|
}
|
|
63
|
-
|
|
64
|
-
Array.from(fields.values()).find((item) => item.name === key)?.setValue(value);
|
|
72
|
+
findField(namePathKey(name))?.setValue(value);
|
|
65
73
|
}
|
|
66
74
|
function getFieldsValue() {
|
|
67
75
|
if (modelRef.value) return { ...modelRef.value };
|
|
@@ -78,13 +86,7 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
78
86
|
});
|
|
79
87
|
}
|
|
80
88
|
function scrollToField(name) {
|
|
81
|
-
|
|
82
|
-
const key = namePathKey(name);
|
|
83
|
-
const el = document.querySelector(`[data-rs-form-item="${CSS.escape(key)}"]`);
|
|
84
|
-
if (el instanceof HTMLElement) el.scrollIntoView({
|
|
85
|
-
block: "nearest",
|
|
86
|
-
behavior: "smooth"
|
|
87
|
-
});
|
|
89
|
+
scrollRsFormField(formEl.value, name);
|
|
88
90
|
}
|
|
89
91
|
function renderError(ctx) {
|
|
90
92
|
if (slots.error) return slots.error(ctx);
|
|
@@ -121,12 +123,13 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
121
123
|
valid: true,
|
|
122
124
|
name: field.name
|
|
123
125
|
})));
|
|
126
|
+
if (!mounted) return aggregated;
|
|
124
127
|
emit("validate", aggregated);
|
|
125
128
|
return aggregated;
|
|
126
129
|
}
|
|
127
130
|
/** 按 name 校验单个字段 */
|
|
128
131
|
async function validateField(name, trigger = "submit") {
|
|
129
|
-
const field =
|
|
132
|
+
const field = findField(name);
|
|
130
133
|
if (!field) return {
|
|
131
134
|
valid: true,
|
|
132
135
|
name
|
|
@@ -140,17 +143,17 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
140
143
|
};
|
|
141
144
|
}
|
|
142
145
|
function clearValidation(names) {
|
|
143
|
-
const nameSet =
|
|
146
|
+
const nameSet = normalizeRsFormNameFilter(names);
|
|
144
147
|
fields.forEach((field) => {
|
|
145
148
|
if (nameSet && (!field.name || !nameSet.has(field.name))) return;
|
|
146
149
|
field.clearValidation?.();
|
|
147
150
|
});
|
|
148
151
|
}
|
|
149
152
|
function resetFields(names) {
|
|
150
|
-
const nameSet =
|
|
153
|
+
const nameSet = normalizeRsFormNameFilter(names);
|
|
151
154
|
fields.forEach((field, id) => {
|
|
152
155
|
if (nameSet && (!field.name || !nameSet.has(field.name))) return;
|
|
153
|
-
field.setValue(cloneFormFieldValue(initialValues.
|
|
156
|
+
field.setValue(cloneFormFieldValue(initialValues.get(id)));
|
|
154
157
|
field.clearValidation?.();
|
|
155
158
|
});
|
|
156
159
|
}
|
|
@@ -159,8 +162,15 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
159
162
|
event.preventDefault();
|
|
160
163
|
if (!(await validate("submit")).valid) return;
|
|
161
164
|
}
|
|
165
|
+
if (!mounted) return;
|
|
162
166
|
emit("submit", event);
|
|
163
167
|
}
|
|
168
|
+
onBeforeUnmount(() => {
|
|
169
|
+
mounted = false;
|
|
170
|
+
fields.clear();
|
|
171
|
+
fieldsByName.clear();
|
|
172
|
+
initialValues.clear();
|
|
173
|
+
});
|
|
164
174
|
__expose({
|
|
165
175
|
validate,
|
|
166
176
|
validateField,
|
|
@@ -174,11 +184,14 @@ var RsForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
174
184
|
});
|
|
175
185
|
return (_ctx, _cache) => {
|
|
176
186
|
return openBlock(), createElementBlock("form", {
|
|
187
|
+
ref_key: "formEl",
|
|
188
|
+
ref: formEl,
|
|
177
189
|
class: normalizeClass(["rs-form", [
|
|
178
190
|
`rs-form--gap-${__props.gap}`,
|
|
179
191
|
`rs-form--max-${__props.maxWidth}`,
|
|
180
192
|
`rs-form--label-${__props.labelPosition}`
|
|
181
193
|
]]),
|
|
194
|
+
novalidate: "",
|
|
182
195
|
onSubmit
|
|
183
196
|
}, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 34);
|
|
184
197
|
};
|