svseeds 0.4.6 → 0.4.8
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/_svseeds/Accordion.svelte +17 -17
- package/_svseeds/Accordion.svelte.d.ts +10 -10
- package/_svseeds/DarkToggle.svelte +15 -15
- package/_svseeds/DarkToggle.svelte.d.ts +6 -6
- package/_svseeds/TagsInputField.svelte +48 -53
- package/_svseeds/TagsInputField.svelte.d.ts +22 -22
- package/_svseeds/ToggleGroupField.svelte +39 -39
- package/_svseeds/ToggleGroupField.svelte.d.ts +18 -18
- package/_svseeds/_Button.svelte +23 -22
- package/_svseeds/_Button.svelte.d.ts +13 -13
- package/_svseeds/_CheckField.svelte +33 -33
- package/_svseeds/_CheckField.svelte.d.ts +14 -14
- package/_svseeds/_ColorPicker.svelte +16 -16
- package/_svseeds/_ColorPicker.svelte.d.ts +10 -10
- package/_svseeds/_ComboBox.svelte +15 -15
- package/_svseeds/_ComboBox.svelte.d.ts +8 -8
- package/_svseeds/_ContextMenu.svelte +18 -18
- package/_svseeds/_ContextMenu.svelte.d.ts +12 -12
- package/_svseeds/_Disclosure.svelte +31 -29
- package/_svseeds/_Disclosure.svelte.d.ts +14 -14
- package/_svseeds/_HotkeyCapture.svelte +19 -19
- package/_svseeds/_HotkeyCapture.svelte.d.ts +10 -10
- package/_svseeds/_Modal.svelte +19 -19
- package/_svseeds/_Modal.svelte.d.ts +12 -12
- package/_svseeds/_ProgressTracker.svelte +27 -26
- package/_svseeds/_ProgressTracker.svelte.d.ts +15 -15
- package/_svseeds/_SelectField.svelte +36 -36
- package/_svseeds/_SelectField.svelte.d.ts +14 -14
- package/_svseeds/_Slider.svelte +26 -25
- package/_svseeds/_Slider.svelte.d.ts +15 -15
- package/_svseeds/_Sortable.svelte +35 -35
- package/_svseeds/_Sortable.svelte.d.ts +18 -18
- package/_svseeds/_Tabs.svelte +23 -23
- package/_svseeds/_Tabs.svelte.d.ts +10 -10
- package/_svseeds/{TagsInput.svelte → _TagsInput.svelte} +40 -47
- package/_svseeds/{TagsInput.svelte.d.ts → _TagsInput.svelte.d.ts} +17 -21
- package/_svseeds/_TextField.svelte +39 -39
- package/_svseeds/_TextField.svelte.d.ts +16 -16
- package/_svseeds/_Toggle.svelte +30 -34
- package/_svseeds/_Toggle.svelte.d.ts +16 -18
- package/_svseeds/_ToggleGroup.svelte +16 -16
- package/_svseeds/_ToggleGroup.svelte.d.ts +10 -10
- package/_svseeds/_Tooltip.svelte +21 -21
- package/_svseeds/_Tooltip.svelte.d.ts +13 -13
- package/_svseeds/core.d.ts +34 -17
- package/_svseeds/core.js +1 -1
- package/index.d.ts +3 -4
- package/index.js +2 -3
- package/package.json +1 -1
- package/_svseeds/_Badge.svelte +0 -73
- package/_svseeds/_Badge.svelte.d.ts +0 -33
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
|
-
default value:
|
|
3
|
+
default value: `(value)`
|
|
4
4
|
```ts
|
|
5
5
|
interface ToggleGroupFieldProps {
|
|
6
6
|
options: SvelteMap<string, string> | Map<string, string>;
|
|
7
7
|
label?: string;
|
|
8
8
|
extra?: string;
|
|
9
|
-
aux?: Snippet<[string, string
|
|
10
|
-
left?: Snippet<[string, string
|
|
11
|
-
right?: Snippet<[string, string
|
|
9
|
+
aux?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
10
|
+
left?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
11
|
+
right?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
12
12
|
bottom?: string;
|
|
13
|
-
descFirst?: boolean; //
|
|
13
|
+
descFirst?: boolean; // (false)
|
|
14
14
|
values?: string[]; // bindable
|
|
15
|
-
multiple?: boolean; //
|
|
15
|
+
multiple?: boolean; // (true)
|
|
16
16
|
validations?: ToggleGroupFieldValidation[];
|
|
17
|
-
status?: string; // bindable <STATE.NEUTRAL>
|
|
18
|
-
style?: SVSStyle;
|
|
19
17
|
name?: string;
|
|
18
|
+
styling?: SVSClass;
|
|
19
|
+
variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
20
20
|
deps?: ToggleGroupFieldDeps;
|
|
21
21
|
[key: string]: unknown | Snippet;
|
|
22
22
|
}
|
|
23
23
|
interface ToggleGroupFieldDeps {
|
|
24
24
|
svsToggleGroup?: Omit<ToggleGroupProps, ToggleGroupReqdProps | ToggleGroupBindProps | "ariaDescId" | "multiple">;
|
|
25
25
|
}
|
|
26
|
-
type ToggleGroupFieldValidation = (values: string[]) => string;
|
|
26
|
+
type ToggleGroupFieldValidation = (values: string[]) => string | undefined;
|
|
27
27
|
```
|
|
28
28
|
-->
|
|
29
29
|
<script module lang="ts">
|
|
@@ -31,17 +31,17 @@
|
|
|
31
31
|
options: SvelteMap<string, string> | Map<string, string>;
|
|
32
32
|
label?: string;
|
|
33
33
|
extra?: string;
|
|
34
|
-
aux?: Snippet<[string, string
|
|
35
|
-
left?: Snippet<[string, string
|
|
36
|
-
right?: Snippet<[string, string
|
|
34
|
+
aux?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
35
|
+
left?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
36
|
+
right?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
37
37
|
bottom?: string;
|
|
38
|
-
descFirst?: boolean; //
|
|
38
|
+
descFirst?: boolean; // (false)
|
|
39
39
|
values?: string[]; // bindable
|
|
40
|
-
multiple?: boolean; //
|
|
40
|
+
multiple?: boolean; // (true)
|
|
41
41
|
validations?: ToggleGroupFieldValidation[];
|
|
42
|
-
status?: string; // bindable <STATE.NEUTRAL>
|
|
43
|
-
style?: SVSStyle;
|
|
44
42
|
name?: string;
|
|
43
|
+
styling?: SVSClass;
|
|
44
|
+
variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
45
45
|
deps?: ToggleGroupFieldDeps;
|
|
46
46
|
[key: string]: unknown | Snippet;
|
|
47
47
|
}
|
|
@@ -49,24 +49,24 @@
|
|
|
49
49
|
svsToggleGroup?: Omit<ToggleGroupProps, ToggleGroupReqdProps | ToggleGroupBindProps | "ariaDescId" | "multiple">;
|
|
50
50
|
}
|
|
51
51
|
export type ToggleGroupFieldReqdProps = "options";
|
|
52
|
-
export type ToggleGroupFieldBindProps = "values" | "
|
|
53
|
-
export type ToggleGroupFieldValidation = (values: string[]) => string;
|
|
52
|
+
export type ToggleGroupFieldBindProps = "values" | "variant";
|
|
53
|
+
export type ToggleGroupFieldValidation = (values: string[]) => string | undefined;
|
|
54
54
|
|
|
55
55
|
const preset = "svs-toggle-group-field";
|
|
56
56
|
|
|
57
57
|
import { type Snippet, untrack } from "svelte";
|
|
58
58
|
import { type Action } from "svelte/action";
|
|
59
59
|
import { type SvelteMap } from "svelte/reactivity";
|
|
60
|
-
import { type
|
|
60
|
+
import { type SVSClass, VARIANT, PARTS, elemId, fnClass, isNeutral } from "./core";
|
|
61
61
|
import ToggleGroup, { type ToggleGroupProps, type ToggleGroupReqdProps, type ToggleGroupBindProps } from "./_ToggleGroup.svelte";
|
|
62
62
|
</script>
|
|
63
63
|
|
|
64
64
|
<script lang="ts">
|
|
65
|
-
let { options, label, extra, aux, left, right, bottom, descFirst = false, values = $bindable([]), multiple = true, validations = [],
|
|
65
|
+
let { options, label, extra, aux, left, right, bottom, descFirst = false, values = $bindable([]), multiple = true, validations = [], name, styling, variant = $bindable(""), deps, ...rest }: ToggleGroupFieldProps = $props();
|
|
66
66
|
|
|
67
67
|
// *** Initialize *** //
|
|
68
|
-
if (!
|
|
69
|
-
const cls = fnClass(preset,
|
|
68
|
+
if (!variant) variant = VARIANT.NEUTRAL;
|
|
69
|
+
const cls = fnClass(preset, styling);
|
|
70
70
|
const idLabel = elemId.get(label?.trim());
|
|
71
71
|
const idDesc = elemId.get(bottom?.trim());
|
|
72
72
|
const idErr = idDesc ?? elemId.id;
|
|
@@ -77,19 +77,19 @@
|
|
|
77
77
|
const svsToggleGroup = {
|
|
78
78
|
...Object.fromEntries(Object.entries(rest).filter(([_, v]) => typeof v === "function")),
|
|
79
79
|
ariaDescId: idDesc,
|
|
80
|
-
|
|
80
|
+
styling: deps?.svsToggleGroup?.styling as SVSClass ?? `${preset} svs-toggle-group`,
|
|
81
81
|
action: deps?.svsToggleGroup?.action as Action,
|
|
82
82
|
};
|
|
83
83
|
|
|
84
84
|
// *** Status *** //
|
|
85
|
-
let neutral = $state(isNeutral(
|
|
86
|
-
$effect(() => { neutral = isNeutral(
|
|
87
|
-
let live = $derived(
|
|
88
|
-
let idMsg = $derived(
|
|
85
|
+
let neutral = $state(isNeutral(variant) ? variant : VARIANT.NEUTRAL);
|
|
86
|
+
$effect(() => { neutral = isNeutral(variant) ? variant : neutral });
|
|
87
|
+
let live = $derived(variant === VARIANT.INACTIVE ? "alert" : "status");
|
|
88
|
+
let idMsg = $derived(variant === VARIANT.INACTIVE && message?.trim() ? idErr : undefined);
|
|
89
89
|
function shift(oninvalid?: boolean) {
|
|
90
90
|
const vmsg = element?.validationMessage ?? "";
|
|
91
|
-
|
|
92
|
-
message =
|
|
91
|
+
variant = oninvalid && vmsg ? VARIANT.INACTIVE : (!values.length || vmsg) ? neutral : VARIANT.ACTIVE;
|
|
92
|
+
message = variant === VARIANT.INACTIVE ? vmsg ? vmsg : bottom : bottom;
|
|
93
93
|
}
|
|
94
94
|
function verify() {
|
|
95
95
|
if (!element) return;
|
|
@@ -121,20 +121,20 @@
|
|
|
121
121
|
<!---------------------------------------->
|
|
122
122
|
|
|
123
123
|
{#if options.size}
|
|
124
|
-
<div class={cls(PARTS.WHOLE,
|
|
124
|
+
<div class={cls(PARTS.WHOLE, variant)} role="group" aria-labelledby={idLabel}>
|
|
125
125
|
{#if aux}
|
|
126
|
-
<div class={cls(PARTS.TOP,
|
|
126
|
+
<div class={cls(PARTS.TOP, variant)}>
|
|
127
127
|
{@render lbl()}
|
|
128
|
-
<span class={cls(PARTS.AUX,
|
|
128
|
+
<span class={cls(PARTS.AUX, variant)}>{@render aux(values, variant)}</span>
|
|
129
129
|
</div>
|
|
130
130
|
{:else}
|
|
131
131
|
{@render lbl()}
|
|
132
132
|
{/if}
|
|
133
133
|
{@render desc(descFirst)}
|
|
134
|
-
<div class={cls(PARTS.MIDDLE,
|
|
134
|
+
<div class={cls(PARTS.MIDDLE, variant)}>
|
|
135
135
|
{@render side(PARTS.LEFT, left)}
|
|
136
136
|
{@render fnForm()}
|
|
137
|
-
<ToggleGroup bind:values bind:ariaErrMsgId={idMsg} bind:
|
|
137
|
+
<ToggleGroup bind:values bind:ariaErrMsgId={idMsg} bind:variant={neutral} {options} {multiple} {...svsToggleGroup} />
|
|
138
138
|
{@render side(PARTS.RIGHT, right)}
|
|
139
139
|
</div>
|
|
140
140
|
{@render desc(!descFirst)}
|
|
@@ -143,22 +143,22 @@
|
|
|
143
143
|
|
|
144
144
|
{#snippet lbl()}
|
|
145
145
|
{#if label?.trim()}
|
|
146
|
-
<span class={cls(PARTS.LABEL,
|
|
146
|
+
<span class={cls(PARTS.LABEL, variant)} id={idLabel}>
|
|
147
147
|
{label}
|
|
148
148
|
{#if extra?.trim()}
|
|
149
|
-
<span class={cls(PARTS.EXTRA,
|
|
149
|
+
<span class={cls(PARTS.EXTRA, variant)}>{extra}</span>
|
|
150
150
|
{/if}
|
|
151
151
|
</span>
|
|
152
152
|
{/if}
|
|
153
153
|
{/snippet}
|
|
154
|
-
{#snippet side(area: string, body?: Snippet<[string, string
|
|
154
|
+
{#snippet side(area: string, body?: Snippet<[string[], string]>)}
|
|
155
155
|
{#if body}
|
|
156
|
-
<span class={cls(area,
|
|
156
|
+
<span class={cls(area, variant)}>{@render body(values, variant)}</span>
|
|
157
157
|
{/if}
|
|
158
158
|
{/snippet}
|
|
159
159
|
{#snippet desc(show: boolean)}
|
|
160
160
|
{#if show && message?.trim()}
|
|
161
|
-
<div class={cls(PARTS.BOTTOM,
|
|
161
|
+
<div class={cls(PARTS.BOTTOM, variant)} id={idDesc ?? idErr} role={live}>{message}</div>
|
|
162
162
|
{/if}
|
|
163
163
|
{/snippet}
|
|
164
164
|
{#snippet fnForm()}
|
|
@@ -2,17 +2,17 @@ export interface ToggleGroupFieldProps {
|
|
|
2
2
|
options: SvelteMap<string, string> | Map<string, string>;
|
|
3
3
|
label?: string;
|
|
4
4
|
extra?: string;
|
|
5
|
-
aux?: Snippet<[string, string
|
|
6
|
-
left?: Snippet<[string, string
|
|
7
|
-
right?: Snippet<[string, string
|
|
5
|
+
aux?: Snippet<[string[], string]>;
|
|
6
|
+
left?: Snippet<[string[], string]>;
|
|
7
|
+
right?: Snippet<[string[], string]>;
|
|
8
8
|
bottom?: string;
|
|
9
9
|
descFirst?: boolean;
|
|
10
10
|
values?: string[];
|
|
11
11
|
multiple?: boolean;
|
|
12
12
|
validations?: ToggleGroupFieldValidation[];
|
|
13
|
-
status?: string;
|
|
14
|
-
style?: SVSStyle;
|
|
15
13
|
name?: string;
|
|
14
|
+
styling?: SVSClass;
|
|
15
|
+
variant?: string;
|
|
16
16
|
deps?: ToggleGroupFieldDeps;
|
|
17
17
|
[key: string]: unknown | Snippet;
|
|
18
18
|
}
|
|
@@ -20,39 +20,39 @@ export interface ToggleGroupFieldDeps {
|
|
|
20
20
|
svsToggleGroup?: Omit<ToggleGroupProps, ToggleGroupReqdProps | ToggleGroupBindProps | "ariaDescId" | "multiple">;
|
|
21
21
|
}
|
|
22
22
|
export type ToggleGroupFieldReqdProps = "options";
|
|
23
|
-
export type ToggleGroupFieldBindProps = "values" | "
|
|
24
|
-
export type ToggleGroupFieldValidation = (values: string[]) => string;
|
|
23
|
+
export type ToggleGroupFieldBindProps = "values" | "variant";
|
|
24
|
+
export type ToggleGroupFieldValidation = (values: string[]) => string | undefined;
|
|
25
25
|
import { type Snippet } from "svelte";
|
|
26
26
|
import { type SvelteMap } from "svelte/reactivity";
|
|
27
|
-
import { type
|
|
27
|
+
import { type SVSClass } from "./core";
|
|
28
28
|
import { type ToggleGroupProps, type ToggleGroupReqdProps, type ToggleGroupBindProps } from "./_ToggleGroup.svelte";
|
|
29
29
|
/**
|
|
30
|
-
* default value:
|
|
30
|
+
* default value: `(value)`
|
|
31
31
|
* ```ts
|
|
32
32
|
* interface ToggleGroupFieldProps {
|
|
33
33
|
* options: SvelteMap<string, string> | Map<string, string>;
|
|
34
34
|
* label?: string;
|
|
35
35
|
* extra?: string;
|
|
36
|
-
* aux?: Snippet<[string, string
|
|
37
|
-
* left?: Snippet<[string, string
|
|
38
|
-
* right?: Snippet<[string, string
|
|
36
|
+
* aux?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
37
|
+
* left?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
38
|
+
* right?: Snippet<[string[], string]>; // Snippet<[values,variant]>
|
|
39
39
|
* bottom?: string;
|
|
40
|
-
* descFirst?: boolean; //
|
|
40
|
+
* descFirst?: boolean; // (false)
|
|
41
41
|
* values?: string[]; // bindable
|
|
42
|
-
* multiple?: boolean; //
|
|
42
|
+
* multiple?: boolean; // (true)
|
|
43
43
|
* validations?: ToggleGroupFieldValidation[];
|
|
44
|
-
* status?: string; // bindable <STATE.NEUTRAL>
|
|
45
|
-
* style?: SVSStyle;
|
|
46
44
|
* name?: string;
|
|
45
|
+
* styling?: SVSClass;
|
|
46
|
+
* variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
47
47
|
* deps?: ToggleGroupFieldDeps;
|
|
48
48
|
* [key: string]: unknown | Snippet;
|
|
49
49
|
* }
|
|
50
50
|
* interface ToggleGroupFieldDeps {
|
|
51
51
|
* svsToggleGroup?: Omit<ToggleGroupProps, ToggleGroupReqdProps | ToggleGroupBindProps | "ariaDescId" | "multiple">;
|
|
52
52
|
* }
|
|
53
|
-
* type ToggleGroupFieldValidation = (values: string[]) => string;
|
|
53
|
+
* type ToggleGroupFieldValidation = (values: string[]) => string | undefined;
|
|
54
54
|
* ```
|
|
55
55
|
*/
|
|
56
|
-
declare const ToggleGroupField: import("svelte").Component<ToggleGroupFieldProps, {}, "
|
|
56
|
+
declare const ToggleGroupField: import("svelte").Component<ToggleGroupFieldProps, {}, "variant" | "values">;
|
|
57
57
|
type ToggleGroupField = ReturnType<typeof ToggleGroupField>;
|
|
58
58
|
export default ToggleGroupField;
|
package/_svseeds/_Button.svelte
CHANGED
|
@@ -1,52 +1,53 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
|
-
default value:
|
|
3
|
+
default value: `(value)`
|
|
4
4
|
```ts
|
|
5
5
|
interface ButtonProps {
|
|
6
|
-
children: Snippet
|
|
7
|
-
left?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[
|
|
8
|
-
right?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[
|
|
9
|
-
type?: "submit" | "reset" | "button"; //
|
|
6
|
+
children: Snippet<[string]>; // Snippet<[variant]>
|
|
7
|
+
left?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[variant,element]>
|
|
8
|
+
right?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[variant,element]>
|
|
9
|
+
type?: "submit" | "reset" | "button"; // ("button")
|
|
10
10
|
onclick?: MouseEventHandler<HTMLButtonElement> | null;
|
|
11
11
|
form?: HTMLFormElement; // bindable
|
|
12
|
-
status?: string; // bindable <STATE.NEUTRAL>
|
|
13
|
-
style?: SVSStyle;
|
|
14
12
|
attributes?: HTMLButtonAttributes;
|
|
15
13
|
action?: Action;
|
|
16
14
|
element?: HTMLButtonElement; // bindable
|
|
15
|
+
styling?: SVSClass;
|
|
16
|
+
variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
17
17
|
}
|
|
18
18
|
```
|
|
19
19
|
-->
|
|
20
20
|
<script module lang="ts">
|
|
21
21
|
export interface ButtonProps {
|
|
22
|
-
children: Snippet
|
|
23
|
-
left?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[
|
|
24
|
-
right?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[
|
|
25
|
-
type?: "submit" | "reset" | "button"; //
|
|
22
|
+
children: Snippet<[string]>; // Snippet<[variant]>
|
|
23
|
+
left?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[variant,element]>
|
|
24
|
+
right?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[variant,element]>
|
|
25
|
+
type?: "submit" | "reset" | "button"; // ("button")
|
|
26
26
|
onclick?: MouseEventHandler<HTMLButtonElement> | null;
|
|
27
27
|
form?: HTMLFormElement; // bindable
|
|
28
|
-
status?: string; // bindable <STATE.NEUTRAL>
|
|
29
|
-
style?: SVSStyle;
|
|
30
28
|
attributes?: HTMLButtonAttributes;
|
|
31
29
|
action?: Action;
|
|
32
30
|
element?: HTMLButtonElement; // bindable
|
|
31
|
+
styling?: SVSClass;
|
|
32
|
+
variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
33
33
|
}
|
|
34
34
|
export type ButtonReqdProps = "children";
|
|
35
|
-
export type ButtonBindProps = "form" | "
|
|
35
|
+
export type ButtonBindProps = "form" | "variant" | "element";
|
|
36
36
|
|
|
37
37
|
const preset = "svs-button";
|
|
38
38
|
|
|
39
39
|
import { type Snippet } from "svelte";
|
|
40
40
|
import { type Action } from "svelte/action";
|
|
41
41
|
import { type HTMLButtonAttributes, type MouseEventHandler } from "svelte/elements";
|
|
42
|
-
import { type
|
|
42
|
+
import { type SVSClass, VARIANT, PARTS, fnClass, omit } from "./core";
|
|
43
43
|
</script>
|
|
44
44
|
|
|
45
45
|
<script lang="ts">
|
|
46
|
-
let { children, left, right, type = "button", onclick, form = $bindable(),
|
|
46
|
+
let { children, left, right, type = "button", onclick, form = $bindable(), attributes, action, element = $bindable(), styling, variant = $bindable("") }: ButtonProps = $props();
|
|
47
47
|
|
|
48
48
|
// *** Initialize *** //
|
|
49
|
-
|
|
49
|
+
if (!variant) variant = VARIANT.NEUTRAL;
|
|
50
|
+
const cls = fnClass(preset, styling);
|
|
50
51
|
const click = onclick ?? attributes?.["onclick"];
|
|
51
52
|
const attrs = omit(attributes, "class", "type", "onclick");
|
|
52
53
|
|
|
@@ -59,24 +60,24 @@
|
|
|
59
60
|
<!---------------------------------------->
|
|
60
61
|
|
|
61
62
|
{#if action}
|
|
62
|
-
<button bind:this={element} class={cls(PARTS.WHOLE,
|
|
63
|
+
<button bind:this={element} class={cls(PARTS.WHOLE, variant)} {type} {onclick} {...attrs} use:action>
|
|
63
64
|
{@render whole()}
|
|
64
65
|
</button>
|
|
65
66
|
{:else}
|
|
66
|
-
<button bind:this={element} class={cls(PARTS.WHOLE,
|
|
67
|
+
<button bind:this={element} class={cls(PARTS.WHOLE, variant)} {type} {onclick} {...attrs}>
|
|
67
68
|
{@render whole()}
|
|
68
69
|
</button>
|
|
69
70
|
{/if}
|
|
70
71
|
|
|
71
72
|
{#snippet side(area: string, body?: Snippet<[string, HTMLButtonElement | undefined]>)}
|
|
72
73
|
{#if body}
|
|
73
|
-
<span class={cls(area,
|
|
74
|
+
<span class={cls(area, variant)}>{@render body(variant, element)}</span>
|
|
74
75
|
{/if}
|
|
75
76
|
{/snippet}
|
|
76
77
|
{#snippet whole()}
|
|
77
78
|
{@render side(PARTS.LEFT, left)}
|
|
78
|
-
<span class={cls(PARTS.MAIN,
|
|
79
|
-
{@render children()}
|
|
79
|
+
<span class={cls(PARTS.MAIN, variant)}>
|
|
80
|
+
{@render children(variant)}
|
|
80
81
|
</span>
|
|
81
82
|
{@render side(PARTS.RIGHT, right)}
|
|
82
83
|
{/snippet}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
export interface ButtonProps {
|
|
2
|
-
children: Snippet
|
|
2
|
+
children: Snippet<[string]>;
|
|
3
3
|
left?: Snippet<[string, HTMLButtonElement | undefined]>;
|
|
4
4
|
right?: Snippet<[string, HTMLButtonElement | undefined]>;
|
|
5
5
|
type?: "submit" | "reset" | "button";
|
|
6
6
|
onclick?: MouseEventHandler<HTMLButtonElement> | null;
|
|
7
7
|
form?: HTMLFormElement;
|
|
8
|
-
status?: string;
|
|
9
|
-
style?: SVSStyle;
|
|
10
8
|
attributes?: HTMLButtonAttributes;
|
|
11
9
|
action?: Action;
|
|
12
10
|
element?: HTMLButtonElement;
|
|
11
|
+
styling?: SVSClass;
|
|
12
|
+
variant?: string;
|
|
13
13
|
}
|
|
14
14
|
export type ButtonReqdProps = "children";
|
|
15
|
-
export type ButtonBindProps = "form" | "
|
|
15
|
+
export type ButtonBindProps = "form" | "variant" | "element";
|
|
16
16
|
import { type Snippet } from "svelte";
|
|
17
17
|
import { type Action } from "svelte/action";
|
|
18
18
|
import { type HTMLButtonAttributes, type MouseEventHandler } from "svelte/elements";
|
|
19
|
-
import { type
|
|
19
|
+
import { type SVSClass } from "./core";
|
|
20
20
|
/**
|
|
21
|
-
* default value:
|
|
21
|
+
* default value: `(value)`
|
|
22
22
|
* ```ts
|
|
23
23
|
* interface ButtonProps {
|
|
24
|
-
* children: Snippet
|
|
25
|
-
* left?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[
|
|
26
|
-
* right?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[
|
|
27
|
-
* type?: "submit" | "reset" | "button"; //
|
|
24
|
+
* children: Snippet<[string]>; // Snippet<[variant]>
|
|
25
|
+
* left?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[variant,element]>
|
|
26
|
+
* right?: Snippet<[string, HTMLButtonElement | undefined]>; // Snippet<[variant,element]>
|
|
27
|
+
* type?: "submit" | "reset" | "button"; // ("button")
|
|
28
28
|
* onclick?: MouseEventHandler<HTMLButtonElement> | null;
|
|
29
29
|
* form?: HTMLFormElement; // bindable
|
|
30
|
-
* status?: string; // bindable <STATE.NEUTRAL>
|
|
31
|
-
* style?: SVSStyle;
|
|
32
30
|
* attributes?: HTMLButtonAttributes;
|
|
33
31
|
* action?: Action;
|
|
34
32
|
* element?: HTMLButtonElement; // bindable
|
|
33
|
+
* styling?: SVSClass;
|
|
34
|
+
* variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
35
35
|
* }
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
|
-
declare const Button: import("svelte").Component<ButtonProps, {}, "
|
|
38
|
+
declare const Button: import("svelte").Component<ButtonProps, {}, "variant" | "form" | "element">;
|
|
39
39
|
type Button = ReturnType<typeof Button>;
|
|
40
40
|
export default Button;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
|
-
default value:
|
|
3
|
+
default value: `(value)`
|
|
4
4
|
```ts
|
|
5
5
|
interface CheckFieldProps {
|
|
6
6
|
options: SvelteMap<string, string> | Map<string, string>;
|
|
7
7
|
label?: string;
|
|
8
8
|
extra?: string;
|
|
9
|
-
aux?: Snippet<[string, string
|
|
9
|
+
aux?: Snippet<[string[], string, HTMLInputElement[]]>; // Snippet<[values,variant,elements]>
|
|
10
10
|
bottom?: string;
|
|
11
|
-
descFirst?: boolean; //
|
|
11
|
+
descFirst?: boolean; // (false)
|
|
12
12
|
values?: string[]; // bindable
|
|
13
|
-
multiple?: boolean; //
|
|
13
|
+
multiple?: boolean; // (true)
|
|
14
14
|
validations?: CheckFieldValidation[];
|
|
15
|
-
status?: string; // bindable <STATE.NEUTRAL>
|
|
16
|
-
style?: SVSStyle;
|
|
17
15
|
attributes?: HTMLInputAttributes;
|
|
18
16
|
action?: Action;
|
|
19
17
|
elements?: HTMLInputElement[]; // bindable
|
|
18
|
+
styling?: SVSClass;
|
|
19
|
+
variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
20
20
|
}
|
|
21
|
-
type CheckFieldValidation = (values: string[], validity: ValidityState) => string;
|
|
21
|
+
type CheckFieldValidation = (values: string[], validity: ValidityState) => string | undefined;
|
|
22
22
|
```
|
|
23
23
|
-->
|
|
24
24
|
<script module lang="ts">
|
|
@@ -26,21 +26,21 @@
|
|
|
26
26
|
options: SvelteMap<string, string> | Map<string, string>;
|
|
27
27
|
label?: string;
|
|
28
28
|
extra?: string;
|
|
29
|
-
aux?: Snippet<[string, string
|
|
29
|
+
aux?: Snippet<[string[], string, HTMLInputElement[]]>; // Snippet<[values,variant,elements]>
|
|
30
30
|
bottom?: string;
|
|
31
|
-
descFirst?: boolean; //
|
|
31
|
+
descFirst?: boolean; // (false)
|
|
32
32
|
values?: string[]; // bindable
|
|
33
|
-
multiple?: boolean; //
|
|
33
|
+
multiple?: boolean; // (true)
|
|
34
34
|
validations?: CheckFieldValidation[];
|
|
35
|
-
status?: string; // bindable <STATE.NEUTRAL>
|
|
36
|
-
style?: SVSStyle;
|
|
37
35
|
attributes?: HTMLInputAttributes;
|
|
38
36
|
action?: Action;
|
|
39
37
|
elements?: HTMLInputElement[]; // bindable
|
|
38
|
+
styling?: SVSClass;
|
|
39
|
+
variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
40
40
|
}
|
|
41
41
|
export type CheckFieldReqdProps = "options";
|
|
42
|
-
export type CheckFieldBindProps = "values" | "
|
|
43
|
-
export type CheckFieldValidation = (values: string[], validity: ValidityState) => string;
|
|
42
|
+
export type CheckFieldBindProps = "values" | "variant" | "elements";
|
|
43
|
+
export type CheckFieldValidation = (values: string[], validity: ValidityState) => string | undefined;
|
|
44
44
|
|
|
45
45
|
const preset = "svs-check-field";
|
|
46
46
|
|
|
@@ -48,15 +48,15 @@
|
|
|
48
48
|
import { type Action } from "svelte/action";
|
|
49
49
|
import { type SvelteMap } from "svelte/reactivity";
|
|
50
50
|
import { type HTMLInputAttributes } from "svelte/elements";
|
|
51
|
-
import { type
|
|
51
|
+
import { type SVSClass, VARIANT, PARTS, elemId, fnClass, isNeutral, omit } from "./core";
|
|
52
52
|
</script>
|
|
53
53
|
|
|
54
54
|
<script lang="ts">
|
|
55
|
-
let { options, label, extra, aux, bottom, values = $bindable([]), multiple = true, descFirst = false, validations = [],
|
|
55
|
+
let { options, label, extra, aux, bottom, values = $bindable([]), multiple = true, descFirst = false, validations = [], attributes, action, elements = $bindable([]), styling, variant = $bindable("") }: CheckFieldProps = $props();
|
|
56
56
|
|
|
57
57
|
// *** Initialize *** //
|
|
58
|
-
if (!
|
|
59
|
-
const cls = fnClass(preset,
|
|
58
|
+
if (!variant) variant = VARIANT.NEUTRAL;
|
|
59
|
+
const cls = fnClass(preset, styling);
|
|
60
60
|
const type = multiple ? "checkbox" : "radio";
|
|
61
61
|
const name = attributes?.["name"] ? attributes?.["name"] : elemId.id;
|
|
62
62
|
const idLabel = elemId.get(label?.trim());
|
|
@@ -67,15 +67,15 @@
|
|
|
67
67
|
let message = $state(bottom);
|
|
68
68
|
|
|
69
69
|
// *** Status *** //
|
|
70
|
-
let neutral = $state(isNeutral(
|
|
71
|
-
$effect(() => { neutral = isNeutral(
|
|
72
|
-
let live = $derived(
|
|
73
|
-
let invalid = $derived(
|
|
74
|
-
let idMsg = $derived(
|
|
70
|
+
let neutral = $state(isNeutral(variant) ? variant : VARIANT.NEUTRAL);
|
|
71
|
+
$effect(() => { neutral = isNeutral(variant) ? variant : neutral });
|
|
72
|
+
let live = $derived(variant === VARIANT.INACTIVE ? "alert" : "status");
|
|
73
|
+
let invalid = $derived(variant === VARIANT.INACTIVE ? true : undefined);
|
|
74
|
+
let idMsg = $derived(variant === VARIANT.INACTIVE && message?.trim() ? idErr : undefined);
|
|
75
75
|
function shift(oninvalid?: boolean) {
|
|
76
76
|
const vmsg = elements[0]?.validationMessage ?? "";
|
|
77
|
-
|
|
78
|
-
message =
|
|
77
|
+
variant = oninvalid && vmsg ? VARIANT.INACTIVE : (!values.length || vmsg) ? neutral : VARIANT.ACTIVE;
|
|
78
|
+
message = variant === VARIANT.INACTIVE ? vmsg ? vmsg : bottom : bottom;
|
|
79
79
|
}
|
|
80
80
|
function verify() {
|
|
81
81
|
if (!elements[0]) return;
|
|
@@ -113,11 +113,11 @@
|
|
|
113
113
|
<!---------------------------------------->
|
|
114
114
|
|
|
115
115
|
{#if opts.length}
|
|
116
|
-
<div class={cls(PARTS.WHOLE,
|
|
116
|
+
<div class={cls(PARTS.WHOLE, variant)} role="group" aria-labelledby={idLabel}>
|
|
117
117
|
{#if aux}
|
|
118
|
-
<div class={cls(PARTS.TOP,
|
|
118
|
+
<div class={cls(PARTS.TOP, variant)}>
|
|
119
119
|
{@render lbl()}
|
|
120
|
-
<span class={cls(PARTS.AUX,
|
|
120
|
+
<span class={cls(PARTS.AUX, variant)}>{@render aux(values, variant, elements)}</span>
|
|
121
121
|
</div>
|
|
122
122
|
{:else}
|
|
123
123
|
{@render lbl()}
|
|
@@ -130,18 +130,18 @@
|
|
|
130
130
|
|
|
131
131
|
{#snippet lbl()}
|
|
132
132
|
{#if label?.trim()}
|
|
133
|
-
<span class={cls(PARTS.LABEL,
|
|
133
|
+
<span class={cls(PARTS.LABEL, variant)} id={idLabel}>
|
|
134
134
|
{label}
|
|
135
135
|
{#if extra?.trim()}
|
|
136
|
-
<span class={cls(PARTS.EXTRA,
|
|
136
|
+
<span class={cls(PARTS.EXTRA, variant)}>{extra}</span>
|
|
137
137
|
{/if}
|
|
138
138
|
</span>
|
|
139
139
|
{/if}
|
|
140
140
|
{/snippet}
|
|
141
141
|
{#snippet main()}
|
|
142
|
-
<div class={cls(PARTS.MIDDLE,
|
|
142
|
+
<div class={cls(PARTS.MIDDLE, variant)} role={roleGroup} aria-describedby={idDesc} aria-invalid={!multiple ? invalid : undefined} aria-errormessage={!multiple ? idMsg : undefined}>
|
|
143
143
|
{#each opts as {value, text, checked}, i (value)}
|
|
144
|
-
{@const stat = checked ?
|
|
144
|
+
{@const stat = checked ? VARIANT.ACTIVE : neutral}
|
|
145
145
|
<label class={cls(PARTS.MAIN, stat)}>
|
|
146
146
|
{#if action}
|
|
147
147
|
<input bind:this={elements[i]} class={cls(PARTS.LEFT, stat)} aria-invalid={multiple ? invalid : undefined} aria-errormessage={multiple ? idMsg : undefined} {value} {name} {type} {checked} {onchange} {oninvalid} {...attrs} use:action />
|
|
@@ -155,6 +155,6 @@
|
|
|
155
155
|
{/snippet}
|
|
156
156
|
{#snippet desc(show: boolean)}
|
|
157
157
|
{#if show && message?.trim()}
|
|
158
|
-
<div class={cls(PARTS.BOTTOM,
|
|
158
|
+
<div class={cls(PARTS.BOTTOM, variant)} id={idDesc ?? idErr} role={live}>{message}</div>
|
|
159
159
|
{/if}
|
|
160
160
|
{/snippet}
|
|
@@ -2,48 +2,48 @@ export interface CheckFieldProps {
|
|
|
2
2
|
options: SvelteMap<string, string> | Map<string, string>;
|
|
3
3
|
label?: string;
|
|
4
4
|
extra?: string;
|
|
5
|
-
aux?: Snippet<[string, string
|
|
5
|
+
aux?: Snippet<[string[], string, HTMLInputElement[]]>;
|
|
6
6
|
bottom?: string;
|
|
7
7
|
descFirst?: boolean;
|
|
8
8
|
values?: string[];
|
|
9
9
|
multiple?: boolean;
|
|
10
10
|
validations?: CheckFieldValidation[];
|
|
11
|
-
status?: string;
|
|
12
|
-
style?: SVSStyle;
|
|
13
11
|
attributes?: HTMLInputAttributes;
|
|
14
12
|
action?: Action;
|
|
15
13
|
elements?: HTMLInputElement[];
|
|
14
|
+
styling?: SVSClass;
|
|
15
|
+
variant?: string;
|
|
16
16
|
}
|
|
17
17
|
export type CheckFieldReqdProps = "options";
|
|
18
|
-
export type CheckFieldBindProps = "values" | "
|
|
19
|
-
export type CheckFieldValidation = (values: string[], validity: ValidityState) => string;
|
|
18
|
+
export type CheckFieldBindProps = "values" | "variant" | "elements";
|
|
19
|
+
export type CheckFieldValidation = (values: string[], validity: ValidityState) => string | undefined;
|
|
20
20
|
import { type Snippet } from "svelte";
|
|
21
21
|
import { type Action } from "svelte/action";
|
|
22
22
|
import { type SvelteMap } from "svelte/reactivity";
|
|
23
23
|
import { type HTMLInputAttributes } from "svelte/elements";
|
|
24
|
-
import { type
|
|
24
|
+
import { type SVSClass } from "./core";
|
|
25
25
|
/**
|
|
26
|
-
* default value:
|
|
26
|
+
* default value: `(value)`
|
|
27
27
|
* ```ts
|
|
28
28
|
* interface CheckFieldProps {
|
|
29
29
|
* options: SvelteMap<string, string> | Map<string, string>;
|
|
30
30
|
* label?: string;
|
|
31
31
|
* extra?: string;
|
|
32
|
-
* aux?: Snippet<[string, string
|
|
32
|
+
* aux?: Snippet<[string[], string, HTMLInputElement[]]>; // Snippet<[values,variant,elements]>
|
|
33
33
|
* bottom?: string;
|
|
34
|
-
* descFirst?: boolean; //
|
|
34
|
+
* descFirst?: boolean; // (false)
|
|
35
35
|
* values?: string[]; // bindable
|
|
36
|
-
* multiple?: boolean; //
|
|
36
|
+
* multiple?: boolean; // (true)
|
|
37
37
|
* validations?: CheckFieldValidation[];
|
|
38
|
-
* status?: string; // bindable <STATE.NEUTRAL>
|
|
39
|
-
* style?: SVSStyle;
|
|
40
38
|
* attributes?: HTMLInputAttributes;
|
|
41
39
|
* action?: Action;
|
|
42
40
|
* elements?: HTMLInputElement[]; // bindable
|
|
41
|
+
* styling?: SVSClass;
|
|
42
|
+
* variant?: string; // bindable (VARIANT.NEUTRAL)
|
|
43
43
|
* }
|
|
44
|
-
* type CheckFieldValidation = (values: string[], validity: ValidityState) => string;
|
|
44
|
+
* type CheckFieldValidation = (values: string[], validity: ValidityState) => string | undefined;
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
|
-
declare const CheckField: import("svelte").Component<CheckFieldProps, {}, "
|
|
47
|
+
declare const CheckField: import("svelte").Component<CheckFieldProps, {}, "variant" | "elements" | "values">;
|
|
48
48
|
type CheckField = ReturnType<typeof CheckField>;
|
|
49
49
|
export default CheckField;
|