ropav 0.0.2 → 0.0.3
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 +32 -3
- package/dist/base.css +125 -88
- package/dist/button.css +259 -32
- package/dist/button.js +51 -19
- package/dist/button.js.map +1 -1
- package/dist/checkbox.css +125 -21
- package/dist/checkbox.js +77 -42
- package/dist/checkbox.js.map +1 -1
- package/dist/components/button/button.d.ts +2 -2
- package/dist/components/button/index.d.ts +1 -1
- package/dist/components/button/types.d.ts +8 -1
- package/dist/components/checkbox/index.d.ts +1 -1
- package/dist/components/checkbox/types.d.ts +8 -0
- package/dist/components/input/index.d.ts +1 -1
- package/dist/components/input/input.d.ts +5 -1
- package/dist/components/input/types.d.ts +5 -0
- package/dist/components/radio/index.d.ts +1 -1
- package/dist/components/radio/types.d.ts +12 -0
- package/dist/components/select/types.d.ts +3 -0
- package/dist/components/select/useSelect.d.ts +2 -0
- package/dist/components/switch/index.d.ts +1 -1
- package/dist/components/switch/types.d.ts +4 -0
- package/dist/components/textarea/index.d.ts +1 -1
- package/dist/components/textarea/types.d.ts +5 -0
- package/dist/components/textarea/useTextarea.d.ts +1 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.js +2 -4
- package/dist/input.css +87 -21
- package/dist/input.js +66 -23
- package/dist/input.js.map +1 -1
- package/dist/radio.css +82 -18
- package/dist/radio.js +35 -8
- package/dist/radio.js.map +1 -1
- package/dist/select.css +104 -39
- package/dist/select.js +149 -87
- package/dist/select.js.map +1 -1
- package/dist/switch.css +75 -20
- package/dist/switch.js +8 -4
- package/dist/switch.js.map +1 -1
- package/dist/textarea.css +80 -20
- package/dist/textarea.js +33 -5
- package/dist/textarea.js.map +1 -1
- package/dist/useControlState.js +4 -0
- package/dist/useControlState.js.map +1 -1
- package/package.json +9 -9
- package/src/styles/_mixins.scss +18 -8
- package/src/styles/_tokens.scss +130 -99
- package/src/styles/_variables.scss +28 -28
- package/dist/components/_internal/icons/CheckIcon.d.ts +0 -18
- package/dist/components/_internal/icons/ChevronDownIcon.d.ts +0 -18
- package/dist/components/_internal/icons/MinusIcon.d.ts +0 -18
- package/dist/components/_internal/icons/index.d.ts +0 -3
- package/dist/components/_internal/optionList.d.ts +0 -9
- package/dist/components/tabs/index.d.ts +0 -5
- package/dist/components/tabs/index.js +0 -2
- package/dist/components/tabs/tab-panel.d.ts +0 -21
- package/dist/components/tabs/tabs-list.d.ts +0 -20
- package/dist/components/tabs/tabs-trigger.d.ts +0 -21
- package/dist/components/tabs/tabs.d.ts +0 -23
- package/dist/components/tabs/types.d.ts +0 -18
- package/dist/components/tabs/useTabs.d.ts +0 -19
- package/dist/components/tooltip/index.d.ts +0 -2
- package/dist/components/tooltip/index.js +0 -2
- package/dist/components/tooltip/tooltip.d.ts +0 -23
- package/dist/components/tooltip/types.d.ts +0 -5
- package/dist/components/tooltip/useTooltip.d.ts +0 -8
- package/dist/tabs.css +0 -45
- package/dist/tabs.js +0 -205
- package/dist/tabs.js.map +0 -1
- package/dist/tooltip.css +0 -78
- package/dist/tooltip.js +0 -112
- package/dist/tooltip.js.map +0 -1
- package/dist/useRequiredInject.js +0 -11
- package/dist/useRequiredInject.js.map +0 -1
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { InjectionKey } from 'vue';
|
|
2
|
+
export type RadioColor = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
|
|
3
|
+
export type RadioSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
export type RadioVariant = 'solid' | 'outline';
|
|
2
5
|
export interface RadioProps {
|
|
3
6
|
value: string | number;
|
|
7
|
+
variant?: RadioVariant;
|
|
8
|
+
color?: RadioColor;
|
|
9
|
+
size?: RadioSize;
|
|
4
10
|
disabled?: boolean;
|
|
5
11
|
}
|
|
6
12
|
export interface RadioGroupProps {
|
|
7
13
|
id?: string;
|
|
8
14
|
name?: string;
|
|
9
15
|
modelValue: string | number | null;
|
|
16
|
+
variant?: RadioVariant;
|
|
17
|
+
color?: RadioColor;
|
|
18
|
+
size?: RadioSize;
|
|
10
19
|
disabled?: boolean;
|
|
11
20
|
required?: boolean;
|
|
12
21
|
invalid?: boolean;
|
|
@@ -19,6 +28,9 @@ export interface RadioGroupContext {
|
|
|
19
28
|
name: string;
|
|
20
29
|
disabled: boolean;
|
|
21
30
|
required: boolean;
|
|
31
|
+
variant?: RadioVariant;
|
|
32
|
+
color?: RadioColor;
|
|
33
|
+
size?: RadioSize;
|
|
22
34
|
select: (value: string | number) => void;
|
|
23
35
|
}
|
|
24
36
|
export declare const radioGroupKey: InjectionKey<RadioGroupContext>;
|
|
@@ -3,12 +3,15 @@ export interface SelectOption {
|
|
|
3
3
|
value: string | number;
|
|
4
4
|
disabled?: boolean;
|
|
5
5
|
}
|
|
6
|
+
export type SelectRadius = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
6
7
|
export interface SelectProps {
|
|
7
8
|
id?: string;
|
|
8
9
|
name?: string;
|
|
9
10
|
modelValue: string | number | null;
|
|
10
11
|
options?: SelectOption[];
|
|
12
|
+
radius?: SelectRadius;
|
|
11
13
|
placeholder?: string;
|
|
14
|
+
clearable?: boolean;
|
|
12
15
|
disabled?: boolean;
|
|
13
16
|
required?: boolean;
|
|
14
17
|
invalid?: boolean;
|
|
@@ -13,8 +13,10 @@ export declare function useSelect(props: Readonly<SelectProps>, emitUpdate: (val
|
|
|
13
13
|
rootClass: import('vue').ComputedRef<string[]>;
|
|
14
14
|
hasValue: import('vue').ComputedRef<boolean>;
|
|
15
15
|
displayLabel: import('vue').ComputedRef<string>;
|
|
16
|
+
canClear: import('vue').ComputedRef<boolean>;
|
|
16
17
|
toggle: () => void;
|
|
17
18
|
selectOption: (option: SelectOption) => void;
|
|
19
|
+
clearSelection: () => void;
|
|
18
20
|
onOptionMouseenter: (option: SelectOption, index: number) => void;
|
|
19
21
|
onTriggerKeydown: (e: KeyboardEvent) => void;
|
|
20
22
|
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as Switch } from './switch';
|
|
2
|
-
export type { SwitchProps } from './types';
|
|
2
|
+
export type { SwitchColor, SwitchProps, SwitchSize } from './types';
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
export type SwitchColor = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
|
|
2
|
+
export type SwitchSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1
3
|
export interface SwitchProps {
|
|
2
4
|
id?: string;
|
|
3
5
|
name?: string;
|
|
4
6
|
modelValue: boolean;
|
|
7
|
+
color?: SwitchColor;
|
|
8
|
+
size?: SwitchSize;
|
|
5
9
|
disabled?: boolean;
|
|
6
10
|
required?: boolean;
|
|
7
11
|
invalid?: boolean;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as Textarea } from './textarea';
|
|
2
|
-
export type { TextareaProps } from './types';
|
|
2
|
+
export type { TextareaProps, TextareaRadius, TextareaSize } from './types';
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
export type TextareaRadius = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2
|
+
export type TextareaSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1
3
|
export interface TextareaProps {
|
|
2
4
|
id?: string;
|
|
3
5
|
name?: string;
|
|
4
6
|
modelValue: string;
|
|
7
|
+
size?: TextareaSize;
|
|
8
|
+
radius?: TextareaRadius;
|
|
5
9
|
placeholder?: string;
|
|
6
10
|
rows?: number;
|
|
7
11
|
disabled?: boolean;
|
|
8
12
|
readonly?: boolean;
|
|
9
13
|
required?: boolean;
|
|
10
14
|
invalid?: boolean;
|
|
15
|
+
valid?: boolean;
|
|
11
16
|
ariaLabel?: string;
|
|
12
17
|
describedby?: string;
|
|
13
18
|
labelledby?: string;
|
|
@@ -3,4 +3,5 @@ export declare function useTextarea(props: Readonly<TextareaProps>, emitUpdate:
|
|
|
3
3
|
control: import('../../composables/useControlState').ControlState;
|
|
4
4
|
rootClass: import('vue').ComputedRef<string[]>;
|
|
5
5
|
onInput: (e: Event) => void;
|
|
6
|
+
focusTextarea: (e: MouseEvent) => void;
|
|
6
7
|
};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { t as button_default } from "./button.js";
|
|
2
2
|
import { t as checkbox_default } from "./checkbox.js";
|
|
3
|
-
import { t as select_default } from "./select.js";
|
|
4
3
|
import { t as input_default } from "./input.js";
|
|
5
4
|
import { n as radio_default, t as radio_group_default } from "./radio.js";
|
|
5
|
+
import { t as select_default } from "./select.js";
|
|
6
6
|
import { t as switch_default } from "./switch.js";
|
|
7
|
-
import { i as tabs_default, n as tabs_trigger_default, r as tabs_list_default, t as tab_panel_default } from "./tabs.js";
|
|
8
7
|
import { t as textarea_default } from "./textarea.js";
|
|
9
|
-
|
|
10
|
-
export { button_default as Button, checkbox_default as Checkbox, input_default as Input, radio_default as Radio, radio_group_default as RadioGroup, select_default as Select, switch_default as Switch, tab_panel_default as TabPanel, tabs_default as Tabs, tabs_list_default as TabsList, tabs_trigger_default as TabsTrigger, textarea_default as Textarea, tooltip_default as Tooltip };
|
|
8
|
+
export { button_default as Button, checkbox_default as Checkbox, input_default as Input, radio_default as Radio, radio_group_default as RadioGroup, select_default as Select, switch_default as Switch, textarea_default as Textarea };
|
package/dist/input.css
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
.rp-input[data-v-
|
|
1
|
+
.rp-input[data-v-fedf15e7] {
|
|
2
|
+
--_rp-input-height: var(--rp-size-control-md);
|
|
3
|
+
--_rp-input-padding-x: var(--rp-spacing-3);
|
|
4
|
+
--_rp-input-font-size: var(--rp-font-size-base);
|
|
5
|
+
--_rp-input-radius: var(--rp-radius-sm);
|
|
2
6
|
display: inline-flex;
|
|
3
7
|
align-items: center;
|
|
4
8
|
justify-content: center;
|
|
@@ -6,46 +10,108 @@
|
|
|
6
10
|
gap: var(--rp-spacing-2);
|
|
7
11
|
font-family: var(--rp-font-family);
|
|
8
12
|
font-weight: var(--rp-font-weight-normal);
|
|
9
|
-
background-color: var(--rp-color-
|
|
10
|
-
border: var(--rp-border-width-thin) solid var(--rp-color-
|
|
13
|
+
background-color: var(--rp-color-button-default-bg);
|
|
14
|
+
border: var(--rp-border-width-thin) solid var(--rp-color-border);
|
|
15
|
+
cursor: text;
|
|
11
16
|
transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
|
|
12
17
|
}
|
|
13
|
-
.rp-input[data-v-
|
|
14
|
-
border-color: var(--rp-color-
|
|
18
|
+
.rp-input[data-v-fedf15e7]:hover:not(.rp-input--disabled):not(.rp-input--invalid):not(.rp-input--valid) {
|
|
19
|
+
border-color: var(--rp-color-border-hover);
|
|
15
20
|
}
|
|
16
|
-
.rp-input[data-v-
|
|
17
|
-
border-color: var(--rp-color-
|
|
21
|
+
.rp-input[data-v-fedf15e7]:focus-within:not(.rp-input--disabled):not(.rp-input--invalid):not(.rp-input--valid) {
|
|
22
|
+
border-color: var(--rp-color-primary);
|
|
18
23
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
19
24
|
}
|
|
20
|
-
.rp-input[data-v-
|
|
21
|
-
height: var(--
|
|
22
|
-
padding: 0 var(--
|
|
23
|
-
font-size: var(--
|
|
24
|
-
border-radius: var(--
|
|
25
|
+
.rp-input[data-v-fedf15e7] {
|
|
26
|
+
height: var(--_rp-input-height);
|
|
27
|
+
padding: 0 var(--_rp-input-padding-x);
|
|
28
|
+
font-size: var(--_rp-input-font-size);
|
|
29
|
+
border-radius: var(--_rp-input-radius);
|
|
25
30
|
}
|
|
26
|
-
.rp-input--
|
|
31
|
+
.rp-input--size-xs[data-v-fedf15e7] {
|
|
32
|
+
--_rp-input-height: calc(var(--rp-size-control-sm) - var(--rp-spacing-1));
|
|
33
|
+
--_rp-input-padding-x: var(--rp-spacing-1);
|
|
34
|
+
--_rp-input-font-size: var(--rp-font-size-xs);
|
|
35
|
+
}
|
|
36
|
+
.rp-input--size-sm[data-v-fedf15e7] {
|
|
37
|
+
--_rp-input-height: var(--rp-size-control-sm);
|
|
38
|
+
--_rp-input-padding-x: var(--rp-spacing-2);
|
|
39
|
+
--_rp-input-font-size: var(--rp-font-size-sm);
|
|
40
|
+
}
|
|
41
|
+
.rp-input--size-md[data-v-fedf15e7] {
|
|
42
|
+
--_rp-input-height: var(--rp-size-control-md);
|
|
43
|
+
--_rp-input-padding-x: var(--rp-spacing-3);
|
|
44
|
+
--_rp-input-font-size: var(--rp-font-size-base);
|
|
45
|
+
}
|
|
46
|
+
.rp-input--size-lg[data-v-fedf15e7] {
|
|
47
|
+
--_rp-input-height: var(--rp-size-control-lg);
|
|
48
|
+
--_rp-input-padding-x: var(--rp-spacing-4);
|
|
49
|
+
--_rp-input-font-size: var(--rp-font-size-lg);
|
|
50
|
+
}
|
|
51
|
+
.rp-input--size-xl[data-v-fedf15e7] {
|
|
52
|
+
--_rp-input-height: calc(var(--rp-size-control-lg) + var(--rp-spacing-2));
|
|
53
|
+
--_rp-input-padding-x: var(--rp-spacing-5);
|
|
54
|
+
--_rp-input-font-size: var(--rp-font-size-lg);
|
|
55
|
+
}
|
|
56
|
+
.rp-input--radius-xs[data-v-fedf15e7] {
|
|
57
|
+
--_rp-input-radius: var(--rp-radius-sm);
|
|
58
|
+
}
|
|
59
|
+
.rp-input--radius-sm[data-v-fedf15e7] {
|
|
60
|
+
--_rp-input-radius: var(--rp-radius-sm);
|
|
61
|
+
}
|
|
62
|
+
.rp-input--radius-md[data-v-fedf15e7] {
|
|
63
|
+
--_rp-input-radius: var(--rp-radius-md);
|
|
64
|
+
}
|
|
65
|
+
.rp-input--radius-lg[data-v-fedf15e7] {
|
|
66
|
+
--_rp-input-radius: var(--rp-radius-lg);
|
|
67
|
+
}
|
|
68
|
+
.rp-input--radius-xl[data-v-fedf15e7] {
|
|
69
|
+
--_rp-input-radius: var(--rp-radius-xl);
|
|
70
|
+
}
|
|
71
|
+
.rp-input--disabled[data-v-fedf15e7] {
|
|
27
72
|
opacity: var(--rp-opacity-disabled);
|
|
28
73
|
cursor: not-allowed;
|
|
29
74
|
}
|
|
30
|
-
.rp-input--
|
|
75
|
+
.rp-input--valid[data-v-fedf15e7] {
|
|
76
|
+
border-color: var(--rp-color-success-fg);
|
|
77
|
+
}
|
|
78
|
+
.rp-input--valid[data-v-fedf15e7]:focus-within:not(.rp-input--disabled) {
|
|
79
|
+
border-color: var(--rp-color-success-fg);
|
|
80
|
+
box-shadow: 0 0 0 var(--rp-border-width-medium) color-mix(in srgb, var(--rp-color-success-fg) 32%, transparent);
|
|
81
|
+
}
|
|
82
|
+
.rp-input--invalid[data-v-fedf15e7] {
|
|
83
|
+
border-color: var(--rp-color-danger-fg);
|
|
84
|
+
}
|
|
85
|
+
.rp-input--invalid[data-v-fedf15e7]:focus-within:not(.rp-input--disabled) {
|
|
31
86
|
border-color: var(--rp-color-danger-fg);
|
|
87
|
+
box-shadow: 0 0 0 var(--rp-border-width-medium) color-mix(in srgb, var(--rp-color-danger-fg) 32%, transparent);
|
|
32
88
|
}
|
|
33
|
-
.rp-input--readonly[data-v-
|
|
34
|
-
background-color: var(--rp-color-
|
|
89
|
+
.rp-input--readonly[data-v-fedf15e7] {
|
|
90
|
+
background-color: var(--rp-color-surface-muted);
|
|
35
91
|
}
|
|
36
|
-
.rp-input__native[data-v-
|
|
92
|
+
.rp-input__native[data-v-fedf15e7] {
|
|
93
|
+
box-sizing: border-box;
|
|
37
94
|
flex: 1;
|
|
95
|
+
width: 100%;
|
|
96
|
+
height: 100%;
|
|
38
97
|
min-width: 0;
|
|
98
|
+
padding: 0;
|
|
39
99
|
border: none;
|
|
40
100
|
outline: none;
|
|
41
101
|
background: transparent;
|
|
42
102
|
font: inherit;
|
|
43
|
-
color: var(--rp-color-
|
|
103
|
+
color: var(--rp-color-text);
|
|
44
104
|
line-height: var(--rp-line-height-none);
|
|
45
105
|
}
|
|
46
|
-
.rp-input__native[data-v-
|
|
47
|
-
color: var(--rp-color-
|
|
106
|
+
.rp-input__native[data-v-fedf15e7]::placeholder {
|
|
107
|
+
color: var(--rp-color-text-secondary);
|
|
48
108
|
}
|
|
49
|
-
.rp-input__native[data-v-
|
|
109
|
+
.rp-input__native[data-v-fedf15e7]:disabled {
|
|
50
110
|
cursor: not-allowed;
|
|
111
|
+
}
|
|
112
|
+
.rp-input__left[data-v-fedf15e7], .rp-input__right[data-v-fedf15e7] {
|
|
113
|
+
display: inline-flex;
|
|
114
|
+
align-items: center;
|
|
115
|
+
flex-shrink: 0;
|
|
116
|
+
color: color-mix(in srgb, var(--rp-color-text-secondary) 50%, var(--rp-color-border));
|
|
51
117
|
}
|
package/dist/input.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import './input.css';
|
|
2
2
|
import { n as bem, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
3
3
|
import { t as useControlState } from "./useControlState.js";
|
|
4
|
-
import { child, computed, createInvoker, defineVaporComponent, delegateEvents, renderEffect, setAttr, setClass, setProp, setValue, template, unref } from "vue";
|
|
4
|
+
import { child, computed, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, renderEffect, setAttr, setClass, setInsertionState, setProp, setValue, template, unref } from "vue";
|
|
5
5
|
//#region src/components/input/input.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
6
|
-
var t0 = template("<
|
|
7
|
-
|
|
6
|
+
var t0 = template("<span data-v-fedf15e7 class=rp-input__left>");
|
|
7
|
+
var t1 = template("<span data-v-fedf15e7 class=rp-input__right>");
|
|
8
|
+
var t2 = template("<label data-v-fedf15e7><input data-v-fedf15e7 class=rp-input__native>", 1);
|
|
9
|
+
delegateEvents("input", "mousedown");
|
|
8
10
|
//#endregion
|
|
9
11
|
//#region src/components/input/input.vue
|
|
10
12
|
var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -15,6 +17,8 @@ var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
15
17
|
name: {},
|
|
16
18
|
modelValue: {},
|
|
17
19
|
type: { default: "text" },
|
|
20
|
+
size: {},
|
|
21
|
+
radius: {},
|
|
18
22
|
placeholder: { default: "" },
|
|
19
23
|
disabled: {
|
|
20
24
|
type: Boolean,
|
|
@@ -32,47 +36,86 @@ var input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
32
36
|
type: Boolean,
|
|
33
37
|
default: void 0
|
|
34
38
|
},
|
|
39
|
+
valid: {
|
|
40
|
+
type: Boolean,
|
|
41
|
+
default: void 0
|
|
42
|
+
},
|
|
35
43
|
ariaLabel: {},
|
|
36
44
|
describedby: {},
|
|
37
45
|
labelledby: {}
|
|
38
46
|
},
|
|
39
47
|
emits: ["update:modelValue"],
|
|
40
|
-
setup(__props, { emit: __emit }) {
|
|
48
|
+
setup(__props, { emit: __emit, slots: $slots }) {
|
|
41
49
|
const props = __props;
|
|
42
50
|
const emit = __emit;
|
|
43
51
|
const control = useControlState(props);
|
|
44
52
|
const rootClass = computed(() => bem("rp-input", {
|
|
53
|
+
[`size-${props.size}`]: Boolean(props.size),
|
|
54
|
+
[`radius-${props.radius}`]: Boolean(props.radius),
|
|
45
55
|
disabled: control.disabled,
|
|
46
56
|
invalid: control.invalid,
|
|
57
|
+
valid: control.valid && !control.invalid,
|
|
47
58
|
readonly: props.readonly
|
|
48
59
|
}));
|
|
49
60
|
function onInput(e) {
|
|
50
61
|
emit("update:modelValue", e.target.value);
|
|
51
62
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
function focusInput(e) {
|
|
64
|
+
if (control.disabled) return;
|
|
65
|
+
const target = e.target;
|
|
66
|
+
if (target instanceof Element && isInteractiveElement(target)) return;
|
|
67
|
+
e.currentTarget.querySelector(".rp-input__native")?.focus();
|
|
68
|
+
}
|
|
69
|
+
function isInteractiveElement(target) {
|
|
70
|
+
return Boolean(target.closest([
|
|
71
|
+
"button",
|
|
72
|
+
"a[href]",
|
|
73
|
+
"input:not(.rp-input__native)",
|
|
74
|
+
"select",
|
|
75
|
+
"textarea",
|
|
76
|
+
"[contenteditable=\"true\"]",
|
|
77
|
+
"[tabindex]:not([tabindex=\"-1\"])"
|
|
78
|
+
].join(",")));
|
|
79
|
+
}
|
|
80
|
+
const n9 = t2();
|
|
81
|
+
const n4 = child(n9, 1);
|
|
82
|
+
renderEffect(() => setClass(n9, rootClass.value));
|
|
83
|
+
setInsertionState(n9, 0, 0);
|
|
84
|
+
createIf(() => $slots.left, () => {
|
|
85
|
+
const n3 = t0();
|
|
86
|
+
setInsertionState(n3, null, 0);
|
|
87
|
+
createSlot("left", null, null, 1);
|
|
88
|
+
return n3;
|
|
89
|
+
});
|
|
90
|
+
n4.$evtinput = createInvoker(onInput);
|
|
55
91
|
renderEffect(() => {
|
|
56
92
|
const _control = unref(control);
|
|
57
93
|
const _control_required = _control.required;
|
|
58
|
-
|
|
59
|
-
setProp(
|
|
60
|
-
setProp(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
setProp(
|
|
64
|
-
setProp(
|
|
65
|
-
setProp(
|
|
66
|
-
|
|
67
|
-
setAttr(
|
|
68
|
-
setAttr(
|
|
69
|
-
setAttr(
|
|
70
|
-
setAttr(
|
|
71
|
-
|
|
94
|
+
setProp(n4, "id", _control.id);
|
|
95
|
+
setProp(n4, "name", __props.name);
|
|
96
|
+
setProp(n4, "type", __props.type);
|
|
97
|
+
setValue(n4, __props.modelValue);
|
|
98
|
+
setProp(n4, "placeholder", __props.placeholder);
|
|
99
|
+
setProp(n4, "disabled", _control.disabled || void 0);
|
|
100
|
+
setProp(n4, "readonly", __props.readonly || void 0);
|
|
101
|
+
setProp(n4, "required", _control_required || void 0);
|
|
102
|
+
setAttr(n4, "aria-label", __props.ariaLabel || void 0);
|
|
103
|
+
setAttr(n4, "aria-labelledby", _control.ariaLabelledby);
|
|
104
|
+
setAttr(n4, "aria-describedby", _control.ariaDescribedby);
|
|
105
|
+
setAttr(n4, "aria-invalid", _control.invalid || void 0);
|
|
106
|
+
setAttr(n4, "aria-required", _control_required || void 0);
|
|
107
|
+
});
|
|
108
|
+
setInsertionState(n9, null, 2);
|
|
109
|
+
createIf(() => $slots.right, () => {
|
|
110
|
+
const n8 = t1();
|
|
111
|
+
setInsertionState(n8, null, 0);
|
|
112
|
+
createSlot("right", null, null, 1);
|
|
113
|
+
return n8;
|
|
72
114
|
});
|
|
73
|
-
|
|
115
|
+
n9.$evtmousedown = createInvoker(focusInput);
|
|
116
|
+
return n9;
|
|
74
117
|
}
|
|
75
|
-
}), [["__scopeId", "data-v-
|
|
118
|
+
}), [["__scopeId", "data-v-fedf15e7"]]);
|
|
76
119
|
//#endregion
|
|
77
120
|
export { input_default as t };
|
|
78
121
|
|
package/dist/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","names":[],"sources":["../src/components/input/input.vue","../src/components/input/input.vue"],"sourcesContent":["<template>\n <
|
|
1
|
+
{"version":3,"file":"input.js","names":[],"sources":["../src/components/input/input.vue","../src/components/input/input.vue"],"sourcesContent":["<template>\n <label :class=\"rootClass\" @mousedown=\"focusInput\">\n <span v-if=\"$slots.left\" class=\"rp-input__left\">\n <slot name=\"left\" />\n </span>\n <input\n :id=\"control.id\"\n :name=\"name\"\n class=\"rp-input__native\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"control.disabled || undefined\"\n :readonly=\"readonly || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n @input=\"onInput\"\n />\n <span v-if=\"$slots.right\" class=\"rp-input__right\">\n <slot name=\"right\" />\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { computed } from 'vue';\nimport { useControlState } from '@/composables/useControlState';\nimport { bem } from '@/utils/bem';\nimport type { InputProps } from './types';\n\ndefineOptions({ name: 'RpInput' });\n\nconst props = withDefaults(defineProps<InputProps>(), {\n type: 'text',\n placeholder: '',\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst control = useControlState(props);\n\nconst rootClass = computed(() =>\n bem('rp-input', {\n [`size-${props.size}`]: Boolean(props.size),\n [`radius-${props.radius}`]: Boolean(props.radius),\n disabled: control.disabled,\n invalid: control.invalid,\n valid: control.valid && !control.invalid,\n readonly: props.readonly,\n }),\n);\n\nfunction onInput(e: Event) {\n emit('update:modelValue', (e.target as HTMLInputElement).value);\n}\n\nfunction focusInput(e: MouseEvent) {\n if (control.disabled) return;\n\n const target = e.target;\n if (target instanceof Element && isInteractiveElement(target)) return;\n\n (e.currentTarget as HTMLElement).querySelector<HTMLInputElement>('.rp-input__native')?.focus();\n}\n\nfunction isInteractiveElement(target: Element) {\n return Boolean(\n target.closest(\n [\n 'button',\n 'a[href]',\n 'input:not(.rp-input__native)',\n 'select',\n 'textarea',\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(','),\n ),\n );\n}\n</script>\n\n<style src=\"./input.scss\" lang=\"scss\" scoped></style>\n","<template>\n <label :class=\"rootClass\" @mousedown=\"focusInput\">\n <span v-if=\"$slots.left\" class=\"rp-input__left\">\n <slot name=\"left\" />\n </span>\n <input\n :id=\"control.id\"\n :name=\"name\"\n class=\"rp-input__native\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"control.disabled || undefined\"\n :readonly=\"readonly || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n @input=\"onInput\"\n />\n <span v-if=\"$slots.right\" class=\"rp-input__right\">\n <slot name=\"right\" />\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { computed } from 'vue';\nimport { useControlState } from '@/composables/useControlState';\nimport { bem } from '@/utils/bem';\nimport type { InputProps } from './types';\n\ndefineOptions({ name: 'RpInput' });\n\nconst props = withDefaults(defineProps<InputProps>(), {\n type: 'text',\n placeholder: '',\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst control = useControlState(props);\n\nconst rootClass = computed(() =>\n bem('rp-input', {\n [`size-${props.size}`]: Boolean(props.size),\n [`radius-${props.radius}`]: Boolean(props.radius),\n disabled: control.disabled,\n invalid: control.invalid,\n valid: control.valid && !control.invalid,\n readonly: props.readonly,\n }),\n);\n\nfunction onInput(e: Event) {\n emit('update:modelValue', (e.target as HTMLInputElement).value);\n}\n\nfunction focusInput(e: MouseEvent) {\n if (control.disabled) return;\n\n const target = e.target;\n if (target instanceof Element && isInteractiveElement(target)) return;\n\n (e.currentTarget as HTMLElement).querySelector<HTMLInputElement>('.rp-input__native')?.focus();\n}\n\nfunction isInteractiveElement(target: Element) {\n return Boolean(\n target.closest(\n [\n 'button',\n 'a[href]',\n 'input:not(.rp-input__native)',\n 'select',\n 'textarea',\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(','),\n ),\n );\n}\n</script>\n\n<style src=\"./input.scss\" lang=\"scss\" scoped></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCA,MAAM,QAAQ;EAUd,MAAM,OAAO;EAIb,MAAM,UAAU,gBAAgB,KAAK;EAErC,MAAM,YAAY,eACd,IAAI,YAAY;IACX,QAAQ,MAAM,SAAS,QAAQ,MAAM,IAAI;IACzC,UAAU,MAAM,WAAW,QAAQ,MAAM,MAAM;GAChD,UAAU,QAAQ;GAClB,SAAS,QAAQ;GACjB,OAAO,QAAQ,SAAS,CAAC,QAAQ;GACjC,UAAU,MAAM;EACpB,CAAC,CACL;EAEA,SAAS,QAAQ,GAAU;GACvB,KAAK,qBAAsB,EAAE,OAA4B,KAAK;EAClE;EAEA,SAAS,WAAW,GAAe;GAC/B,IAAI,QAAQ,UAAU;GAEtB,MAAM,SAAS,EAAE;GACjB,IAAI,kBAAkB,WAAW,qBAAqB,MAAM,GAAG;GAE/D,EAAG,cAA8B,cAAgC,mBAAmB,CAAC,EAAE,MAAM;EACjG;EAEA,SAAS,qBAAqB,QAAiB;GAC3C,OAAO,QACH,OAAO,QACH;IACI;IACA;IACA;IACA;IACA;IACA;IACA;GACJ,CAAC,CAAC,KAAK,GAAG,CACd,CACJ;EACJ;;;kCAzFmB,UAAA,KAAS,CAAA;;iBACR,OAAM,YAAA;;;cACR,QAAW,MAAA,MAAA,CAAA;;;+BAiBT,OAAO;;;;eAdd,MAAI,SAAO,EAAA;eACX,QAAM,QAAA,IAAI;eAEV,QAAM,QAAA,IAAI;gBACH,QAAA,UAAU;eACjB,eAAa,QAAA,WAAW;eACxB,YAAU,SAAO,YAAa,KAAA,CAAS;eACvC,YAAU,QAAA,YAAY,KAAA,CAAS;eAC/B,YAAU,qBAAoB,KAAA,CAAS;eACvC,cAAY,QAAA,aAAa,KAAA,CAAS;eAClC,mBAAiB,SAAO,cAAA;eACxB,oBAAkB,SAAO,eAAA;eACzB,gBAAc,SAAO,WAAY,KAAA,CAAS;eAC1C,iBAAe,qBAAoB,KAAA,CAAS;;;iBAGrC,OAAM,aAAA;;;cACR,SAAY,MAAA,MAAA,CAAA;;;mCAtBY,UAAU"}
|
package/dist/radio.css
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
|
-
.rp-radio[data-v-
|
|
1
|
+
.rp-radio[data-v-ecddd6c8] {
|
|
2
|
+
--_radio-color: var(--rp-color-primary);
|
|
3
|
+
--_radio-on-color: var(--rp-color-on-primary);
|
|
4
|
+
--_radio-size: 18px;
|
|
5
|
+
--_radio-dot: 8px;
|
|
6
|
+
--_radio-font-size: var(--rp-font-size-base);
|
|
7
|
+
--_radio-checked-bg: var(--_radio-color);
|
|
8
|
+
--_radio-checked-border: var(--_radio-color);
|
|
9
|
+
--_radio-checked-dot: var(--_radio-on-color);
|
|
2
10
|
display: inline-flex;
|
|
3
11
|
align-items: center;
|
|
4
12
|
cursor: pointer;
|
|
5
13
|
font-family: var(--rp-font-family);
|
|
6
14
|
user-select: none;
|
|
7
15
|
}
|
|
8
|
-
.rp-radio--disabled[data-v-
|
|
16
|
+
.rp-radio--disabled[data-v-ecddd6c8] {
|
|
9
17
|
opacity: var(--rp-opacity-disabled);
|
|
10
18
|
cursor: not-allowed;
|
|
11
19
|
}
|
|
12
|
-
.rp-radio[data-v-
|
|
20
|
+
.rp-radio[data-v-ecddd6c8] {
|
|
13
21
|
gap: var(--rp-spacing-2);
|
|
14
|
-
font-size: var(--
|
|
15
|
-
--_radio-size: 18px;
|
|
16
|
-
--_radio-dot: 8px;
|
|
22
|
+
font-size: var(--_radio-font-size);
|
|
17
23
|
}
|
|
18
|
-
.rp-radio__native[data-v-
|
|
24
|
+
.rp-radio__native[data-v-ecddd6c8] {
|
|
19
25
|
position: absolute;
|
|
20
26
|
width: 1px;
|
|
21
27
|
height: 1px;
|
|
@@ -27,38 +33,96 @@
|
|
|
27
33
|
border-width: 0;
|
|
28
34
|
pointer-events: none;
|
|
29
35
|
}
|
|
30
|
-
.rp-radio__dot[data-v-
|
|
36
|
+
.rp-radio__native:focus-visible + .rp-radio__dot[data-v-ecddd6c8] {
|
|
37
|
+
border-color: var(--rp-color-primary);
|
|
38
|
+
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
39
|
+
}
|
|
40
|
+
.rp-radio__dot[data-v-ecddd6c8] {
|
|
31
41
|
display: inline-flex;
|
|
32
42
|
align-items: center;
|
|
33
43
|
justify-content: center;
|
|
34
44
|
width: var(--_radio-size);
|
|
35
45
|
height: var(--_radio-size);
|
|
36
46
|
flex-shrink: 0;
|
|
37
|
-
border: var(--rp-border-width-medium) solid var(--rp-color-
|
|
47
|
+
border: var(--rp-border-width-medium) solid var(--rp-color-border);
|
|
38
48
|
border-radius: var(--rp-radius-full);
|
|
39
|
-
background-color: var(--rp-color-
|
|
49
|
+
background-color: var(--rp-color-button-default-bg);
|
|
40
50
|
transition: background-color var(--rp-transition-fast), border-color var(--rp-transition-fast);
|
|
41
51
|
}
|
|
42
|
-
.rp-radio__dot[data-v-
|
|
52
|
+
.rp-radio__dot[data-v-ecddd6c8]::after {
|
|
43
53
|
content: "";
|
|
44
54
|
width: var(--_radio-dot);
|
|
45
55
|
height: var(--_radio-dot);
|
|
46
56
|
border-radius: var(--rp-radius-full);
|
|
47
|
-
background-color: var(--
|
|
57
|
+
background-color: var(--_radio-checked-dot);
|
|
48
58
|
transform: scale(0);
|
|
49
59
|
transition: transform var(--rp-transition-fast);
|
|
50
60
|
}
|
|
51
|
-
.rp-radio--checked .rp-radio__dot[data-v-
|
|
52
|
-
background-color: var(--
|
|
53
|
-
border-color: var(--
|
|
61
|
+
.rp-radio--checked .rp-radio__dot[data-v-ecddd6c8] {
|
|
62
|
+
background-color: var(--_radio-checked-bg);
|
|
63
|
+
border-color: var(--_radio-checked-border);
|
|
54
64
|
}
|
|
55
|
-
.rp-radio--checked .rp-radio__dot[data-v-
|
|
65
|
+
.rp-radio--checked .rp-radio__dot[data-v-ecddd6c8]::after {
|
|
56
66
|
transform: scale(1);
|
|
57
67
|
}
|
|
58
|
-
.rp-radio__label[data-v-
|
|
68
|
+
.rp-radio__label[data-v-ecddd6c8] {
|
|
59
69
|
line-height: var(--rp-line-height-normal);
|
|
60
70
|
color: var(--rp-color-text);
|
|
61
|
-
}
|
|
71
|
+
}
|
|
72
|
+
.rp-radio--color-primary[data-v-ecddd6c8] {
|
|
73
|
+
--_radio-color: var(--rp-color-primary);
|
|
74
|
+
--_radio-on-color: var(--rp-color-on-primary);
|
|
75
|
+
}
|
|
76
|
+
.rp-radio--color-secondary[data-v-ecddd6c8] {
|
|
77
|
+
--_radio-color: var(--rp-color-secondary);
|
|
78
|
+
--_radio-on-color: var(--rp-color-on-secondary);
|
|
79
|
+
}
|
|
80
|
+
.rp-radio--color-success[data-v-ecddd6c8] {
|
|
81
|
+
--_radio-color: var(--rp-color-success);
|
|
82
|
+
--_radio-on-color: var(--rp-color-on-success);
|
|
83
|
+
}
|
|
84
|
+
.rp-radio--color-warning[data-v-ecddd6c8] {
|
|
85
|
+
--_radio-color: var(--rp-color-warning);
|
|
86
|
+
--_radio-on-color: var(--rp-color-on-warning);
|
|
87
|
+
}
|
|
88
|
+
.rp-radio--color-danger[data-v-ecddd6c8] {
|
|
89
|
+
--_radio-color: var(--rp-color-danger);
|
|
90
|
+
--_radio-on-color: var(--rp-color-on-danger);
|
|
91
|
+
}
|
|
92
|
+
.rp-radio--color-info[data-v-ecddd6c8] {
|
|
93
|
+
--_radio-color: var(--rp-color-info);
|
|
94
|
+
--_radio-on-color: var(--rp-color-on-info);
|
|
95
|
+
}
|
|
96
|
+
.rp-radio--outline[data-v-ecddd6c8] {
|
|
97
|
+
--_radio-checked-bg: var(--rp-color-button-default-bg);
|
|
98
|
+
--_radio-checked-border: var(--_radio-color);
|
|
99
|
+
--_radio-checked-dot: var(--_radio-color);
|
|
100
|
+
}
|
|
101
|
+
.rp-radio--size-xs[data-v-ecddd6c8] {
|
|
102
|
+
--_radio-size: 14px;
|
|
103
|
+
--_radio-dot: 6px;
|
|
104
|
+
--_radio-font-size: var(--rp-font-size-xs);
|
|
105
|
+
}
|
|
106
|
+
.rp-radio--size-sm[data-v-ecddd6c8] {
|
|
107
|
+
--_radio-size: 16px;
|
|
108
|
+
--_radio-dot: 7px;
|
|
109
|
+
--_radio-font-size: var(--rp-font-size-sm);
|
|
110
|
+
}
|
|
111
|
+
.rp-radio--size-md[data-v-ecddd6c8] {
|
|
112
|
+
--_radio-size: 18px;
|
|
113
|
+
--_radio-dot: 8px;
|
|
114
|
+
--_radio-font-size: var(--rp-font-size-base);
|
|
115
|
+
}
|
|
116
|
+
.rp-radio--size-lg[data-v-ecddd6c8] {
|
|
117
|
+
--_radio-size: 22px;
|
|
118
|
+
--_radio-dot: 10px;
|
|
119
|
+
--_radio-font-size: var(--rp-font-size-lg);
|
|
120
|
+
}
|
|
121
|
+
.rp-radio--size-xl[data-v-ecddd6c8] {
|
|
122
|
+
--_radio-size: 26px;
|
|
123
|
+
--_radio-dot: 12px;
|
|
124
|
+
--_radio-font-size: var(--rp-font-size-xl);
|
|
125
|
+
}.rp-radio-group[data-v-a2c46e46] {
|
|
62
126
|
display: flex;
|
|
63
127
|
flex-direction: column;
|
|
64
128
|
gap: var(--rp-spacing-3);
|