@webamoki/web-svelte 0.2.0 → 0.3.1
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/dist/components/form/FieldWrapper.svelte +6 -0
- package/dist/components/form/FieldWrapper.svelte.d.ts +5 -0
- package/dist/components/form/fields/ChoiceField.svelte +44 -0
- package/dist/components/form/fields/ChoiceField.svelte.d.ts +27 -0
- package/dist/components/form/fields/ChoiceMultiField.svelte +46 -0
- package/dist/components/form/fields/ChoiceMultiField.svelte.d.ts +27 -0
- package/dist/components/form/fields/WeekdayChoiceField.svelte +41 -0
- package/dist/components/form/fields/WeekdayChoiceField.svelte.d.ts +27 -0
- package/dist/components/form/fields/WeekdayChoiceMultiField.svelte +41 -0
- package/dist/components/form/fields/WeekdayChoiceMultiField.svelte.d.ts +27 -0
- package/dist/components/index.d.ts +7 -1
- package/dist/components/index.js +7 -1
- package/dist/components/showcase/CodeBlock.svelte +52 -0
- package/dist/components/showcase/CodeBlock.svelte.d.ts +30 -0
- package/dist/components/showcase/Container.svelte +13 -0
- package/dist/components/showcase/Container.svelte.d.ts +24 -0
- package/dist/components/showcase/Preview.svelte +6 -0
- package/dist/components/showcase/Preview.svelte.d.ts +26 -0
- package/dist/components/showcase/Sidebar.svelte +6 -0
- package/dist/components/showcase/Sidebar.svelte.d.ts +26 -0
- package/dist/components/showcase/SidebarLink.svelte +7 -0
- package/dist/components/showcase/SidebarLink.svelte.d.ts +20 -0
- package/dist/components/ui/choice/Choice.svelte +27 -0
- package/dist/components/ui/choice/Choice.svelte.d.ts +29 -0
- package/dist/components/ui/choice/ChoiceInternal.svelte +57 -0
- package/dist/components/ui/choice/ChoiceInternal.svelte.d.ts +34 -0
- package/dist/components/ui/choice/ChoiceMulti.svelte +55 -0
- package/dist/components/ui/choice/ChoiceMulti.svelte.d.ts +30 -0
- package/dist/components/ui/choice/WeekdayChoice.svelte +28 -0
- package/dist/components/ui/choice/WeekdayChoice.svelte.d.ts +13 -0
- package/dist/components/ui/choice/WeekdayChoiceMulti.svelte +29 -0
- package/dist/components/ui/choice/WeekdayChoiceMulti.svelte.d.ts +14 -0
- package/dist/highlight.d.ts +1 -0
- package/dist/highlight.js +9 -0
- package/dist/utils/datetime/index.d.ts +9 -1
- package/dist/utils/datetime/index.js +13 -1
- package/package.json +5 -2
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
label?: string;
|
|
6
6
|
description?: string;
|
|
7
7
|
}
|
|
8
|
+
|
|
9
|
+
export interface FormAttrs extends ControlAttrs {
|
|
10
|
+
disabled?: HTMLInputAttributes['disabled'];
|
|
11
|
+
readonly?: HTMLInputAttributes['readonly'];
|
|
12
|
+
}
|
|
8
13
|
</script>
|
|
9
14
|
|
|
10
15
|
<script lang="ts" generics="T extends Record<string, unknown>, U extends FormPath<T>, M">
|
|
@@ -19,6 +24,7 @@
|
|
|
19
24
|
import type { Snippet } from 'svelte';
|
|
20
25
|
import type { FormPath } from 'sveltekit-superforms';
|
|
21
26
|
import Errors from './Errors.svelte';
|
|
27
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
22
28
|
|
|
23
29
|
interface Props extends FieldWrapperProps<T, U, M> {
|
|
24
30
|
formElem: Snippet<[ControlAttrs]>;
|
|
@@ -4,9 +4,14 @@ export interface FieldWrapperProps<T extends Record<string, unknown>, U extends
|
|
|
4
4
|
label?: string;
|
|
5
5
|
description?: string;
|
|
6
6
|
}
|
|
7
|
+
export interface FormAttrs extends ControlAttrs {
|
|
8
|
+
disabled?: HTMLInputAttributes['disabled'];
|
|
9
|
+
readonly?: HTMLInputAttributes['readonly'];
|
|
10
|
+
}
|
|
7
11
|
import { type ControlAttrs, type FsSuperForm } from 'formsnap';
|
|
8
12
|
import type { Snippet } from 'svelte';
|
|
9
13
|
import type { FormPath } from 'sveltekit-superforms';
|
|
14
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
10
15
|
declare function $$render<T extends Record<string, unknown>, U extends FormPath<T>, M>(): {
|
|
11
16
|
props: FieldWrapperProps<T, U, M> & {
|
|
12
17
|
formElem: Snippet<[ControlAttrs]>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script
|
|
2
|
+
lang="ts"
|
|
3
|
+
generics="V, K extends string | number | symbol,T extends Record<string, unknown>, U extends FormPath<T>, M"
|
|
4
|
+
>
|
|
5
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
6
|
+
import FieldWrapper, { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
7
|
+
import Choice, { type ChoiceProps } from '../../ui/choice/Choice.svelte';
|
|
8
|
+
|
|
9
|
+
type Props = FieldWrapperProps<T, U, M> & ChoiceProps<V, K>;
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
items,
|
|
13
|
+
getKey,
|
|
14
|
+
getLabel,
|
|
15
|
+
onChange,
|
|
16
|
+
vertical,
|
|
17
|
+
value = $bindable(undefined),
|
|
18
|
+
|
|
19
|
+
form,
|
|
20
|
+
name,
|
|
21
|
+
label,
|
|
22
|
+
description,
|
|
23
|
+
disabled,
|
|
24
|
+
readonly
|
|
25
|
+
}: Props = $props();
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<FieldWrapper {form} {name} {label} {description}>
|
|
29
|
+
{#snippet formElem(props)}
|
|
30
|
+
<div class="flex w-full items-center gap-2">
|
|
31
|
+
<Choice
|
|
32
|
+
{items}
|
|
33
|
+
{getKey}
|
|
34
|
+
{getLabel}
|
|
35
|
+
{onChange}
|
|
36
|
+
{vertical}
|
|
37
|
+
{disabled}
|
|
38
|
+
{readonly}
|
|
39
|
+
bind:value
|
|
40
|
+
{...props}
|
|
41
|
+
/>
|
|
42
|
+
</div>
|
|
43
|
+
{/snippet}
|
|
44
|
+
</FieldWrapper>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
2
|
+
import { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
3
|
+
import { type ChoiceProps } from '../../ui/choice/Choice.svelte';
|
|
4
|
+
declare function $$render<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M>(): {
|
|
5
|
+
props: FieldWrapperProps<T, U, M> & ChoiceProps<V, K>;
|
|
6
|
+
exports: {};
|
|
7
|
+
bindings: "value";
|
|
8
|
+
slots: {};
|
|
9
|
+
events: {};
|
|
10
|
+
};
|
|
11
|
+
declare class __sveltets_Render<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M> {
|
|
12
|
+
props(): ReturnType<typeof $$render<V, K, T, U, M>>['props'];
|
|
13
|
+
events(): ReturnType<typeof $$render<V, K, T, U, M>>['events'];
|
|
14
|
+
slots(): ReturnType<typeof $$render<V, K, T, U, M>>['slots'];
|
|
15
|
+
bindings(): "value";
|
|
16
|
+
exports(): {};
|
|
17
|
+
}
|
|
18
|
+
interface $$IsomorphicComponent {
|
|
19
|
+
new <V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<V, K, T, U, M>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<V, K, T, U, M>['props']>, ReturnType<__sveltets_Render<V, K, T, U, M>['events']>, ReturnType<__sveltets_Render<V, K, T, U, M>['slots']>> & {
|
|
20
|
+
$$bindings?: ReturnType<__sveltets_Render<V, K, T, U, M>['bindings']>;
|
|
21
|
+
} & ReturnType<__sveltets_Render<V, K, T, U, M>['exports']>;
|
|
22
|
+
<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M>(internal: unknown, props: ReturnType<__sveltets_Render<V, K, T, U, M>['props']> & {}): ReturnType<__sveltets_Render<V, K, T, U, M>['exports']>;
|
|
23
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any, any, any>['bindings']>;
|
|
24
|
+
}
|
|
25
|
+
declare const ChoiceField: $$IsomorphicComponent;
|
|
26
|
+
type ChoiceField<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M> = InstanceType<typeof ChoiceField<V, K, T, U, M>>;
|
|
27
|
+
export default ChoiceField;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script
|
|
2
|
+
lang="ts"
|
|
3
|
+
generics="V, K extends string | number | symbol,T extends Record<string, unknown>, U extends FormPath<T>, M"
|
|
4
|
+
>
|
|
5
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
6
|
+
import FieldWrapper, { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
7
|
+
import { type ChoiceMultiProps } from '../../ui/choice/ChoiceMulti.svelte';
|
|
8
|
+
import ChoiceMulti from '../../ui/choice/ChoiceMulti.svelte';
|
|
9
|
+
|
|
10
|
+
type Props = FieldWrapperProps<T, U, M> & ChoiceMultiProps<V, K>;
|
|
11
|
+
let {
|
|
12
|
+
items,
|
|
13
|
+
getKey,
|
|
14
|
+
getLabel,
|
|
15
|
+
onAdd,
|
|
16
|
+
onRemove,
|
|
17
|
+
vertical,
|
|
18
|
+
value = $bindable([]),
|
|
19
|
+
|
|
20
|
+
form,
|
|
21
|
+
name,
|
|
22
|
+
label,
|
|
23
|
+
description,
|
|
24
|
+
disabled,
|
|
25
|
+
readonly
|
|
26
|
+
}: Props = $props();
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<FieldWrapper {form} {name} {label} {description}>
|
|
30
|
+
{#snippet formElem(props)}
|
|
31
|
+
<div class="flex w-full items-center gap-2">
|
|
32
|
+
<ChoiceMulti
|
|
33
|
+
{items}
|
|
34
|
+
{getKey}
|
|
35
|
+
{getLabel}
|
|
36
|
+
{onAdd}
|
|
37
|
+
{onRemove}
|
|
38
|
+
{disabled}
|
|
39
|
+
{readonly}
|
|
40
|
+
{vertical}
|
|
41
|
+
{...props}
|
|
42
|
+
bind:value
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
{/snippet}
|
|
46
|
+
</FieldWrapper>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
2
|
+
import { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
3
|
+
import { type ChoiceMultiProps } from '../../ui/choice/ChoiceMulti.svelte';
|
|
4
|
+
declare function $$render<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M>(): {
|
|
5
|
+
props: FieldWrapperProps<T, U, M> & ChoiceMultiProps<V, K>;
|
|
6
|
+
exports: {};
|
|
7
|
+
bindings: "value";
|
|
8
|
+
slots: {};
|
|
9
|
+
events: {};
|
|
10
|
+
};
|
|
11
|
+
declare class __sveltets_Render<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M> {
|
|
12
|
+
props(): ReturnType<typeof $$render<V, K, T, U, M>>['props'];
|
|
13
|
+
events(): ReturnType<typeof $$render<V, K, T, U, M>>['events'];
|
|
14
|
+
slots(): ReturnType<typeof $$render<V, K, T, U, M>>['slots'];
|
|
15
|
+
bindings(): "value";
|
|
16
|
+
exports(): {};
|
|
17
|
+
}
|
|
18
|
+
interface $$IsomorphicComponent {
|
|
19
|
+
new <V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<V, K, T, U, M>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<V, K, T, U, M>['props']>, ReturnType<__sveltets_Render<V, K, T, U, M>['events']>, ReturnType<__sveltets_Render<V, K, T, U, M>['slots']>> & {
|
|
20
|
+
$$bindings?: ReturnType<__sveltets_Render<V, K, T, U, M>['bindings']>;
|
|
21
|
+
} & ReturnType<__sveltets_Render<V, K, T, U, M>['exports']>;
|
|
22
|
+
<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M>(internal: unknown, props: ReturnType<__sveltets_Render<V, K, T, U, M>['props']> & {}): ReturnType<__sveltets_Render<V, K, T, U, M>['exports']>;
|
|
23
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any, any, any>['bindings']>;
|
|
24
|
+
}
|
|
25
|
+
declare const ChoiceMultiField: $$IsomorphicComponent;
|
|
26
|
+
type ChoiceMultiField<V, K extends string | number | symbol, T extends Record<string, unknown>, U extends FormPath<T>, M> = InstanceType<typeof ChoiceMultiField<V, K, T, U, M>>;
|
|
27
|
+
export default ChoiceMultiField;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts" generics="T extends Record<string, unknown>, U extends FormPath<T>, M">
|
|
2
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
3
|
+
import FieldWrapper, { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
4
|
+
import WeekdayChoice, {
|
|
5
|
+
type WeekdayChoiceProps
|
|
6
|
+
} from '../../ui/choice/WeekdayChoice.svelte';
|
|
7
|
+
|
|
8
|
+
type Props = FieldWrapperProps<T, U, M> & WeekdayChoiceProps;
|
|
9
|
+
|
|
10
|
+
let {
|
|
11
|
+
onChange,
|
|
12
|
+
vertical,
|
|
13
|
+
value = $bindable(undefined),
|
|
14
|
+
letterLabels,
|
|
15
|
+
longLabels,
|
|
16
|
+
|
|
17
|
+
form,
|
|
18
|
+
name,
|
|
19
|
+
label,
|
|
20
|
+
description,
|
|
21
|
+
disabled,
|
|
22
|
+
readonly
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<FieldWrapper {form} {name} {label} {description}>
|
|
27
|
+
{#snippet formElem(props)}
|
|
28
|
+
<div class="flex w-full items-center gap-2">
|
|
29
|
+
<WeekdayChoice
|
|
30
|
+
{onChange}
|
|
31
|
+
{vertical}
|
|
32
|
+
{disabled}
|
|
33
|
+
{readonly}
|
|
34
|
+
{letterLabels}
|
|
35
|
+
{longLabels}
|
|
36
|
+
bind:value
|
|
37
|
+
{...props}
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
{/snippet}
|
|
41
|
+
</FieldWrapper>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
2
|
+
import { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
3
|
+
import { type WeekdayChoiceProps } from '../../ui/choice/WeekdayChoice.svelte';
|
|
4
|
+
declare function $$render<T extends Record<string, unknown>, U extends FormPath<T>, M>(): {
|
|
5
|
+
props: FieldWrapperProps<T, U, M> & WeekdayChoiceProps;
|
|
6
|
+
exports: {};
|
|
7
|
+
bindings: "value";
|
|
8
|
+
slots: {};
|
|
9
|
+
events: {};
|
|
10
|
+
};
|
|
11
|
+
declare class __sveltets_Render<T extends Record<string, unknown>, U extends FormPath<T>, M> {
|
|
12
|
+
props(): ReturnType<typeof $$render<T, U, M>>['props'];
|
|
13
|
+
events(): ReturnType<typeof $$render<T, U, M>>['events'];
|
|
14
|
+
slots(): ReturnType<typeof $$render<T, U, M>>['slots'];
|
|
15
|
+
bindings(): "value";
|
|
16
|
+
exports(): {};
|
|
17
|
+
}
|
|
18
|
+
interface $$IsomorphicComponent {
|
|
19
|
+
new <T extends Record<string, unknown>, U extends FormPath<T>, M>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, U, M>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, U, M>['props']>, ReturnType<__sveltets_Render<T, U, M>['events']>, ReturnType<__sveltets_Render<T, U, M>['slots']>> & {
|
|
20
|
+
$$bindings?: ReturnType<__sveltets_Render<T, U, M>['bindings']>;
|
|
21
|
+
} & ReturnType<__sveltets_Render<T, U, M>['exports']>;
|
|
22
|
+
<T extends Record<string, unknown>, U extends FormPath<T>, M>(internal: unknown, props: ReturnType<__sveltets_Render<T, U, M>['props']> & {}): ReturnType<__sveltets_Render<T, U, M>['exports']>;
|
|
23
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
24
|
+
}
|
|
25
|
+
declare const WeekdayChoiceField: $$IsomorphicComponent;
|
|
26
|
+
type WeekdayChoiceField<T extends Record<string, unknown>, U extends FormPath<T>, M> = InstanceType<typeof WeekdayChoiceField<T, U, M>>;
|
|
27
|
+
export default WeekdayChoiceField;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts" generics="T extends Record<string, unknown>, U extends FormPath<T>, M">
|
|
2
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
3
|
+
import FieldWrapper, { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
4
|
+
import type { WeekdayChoiceMultiProps } from '../../ui/choice/WeekdayChoiceMulti.svelte';
|
|
5
|
+
import WeekdayChoiceMulti from '../../ui/choice/WeekdayChoiceMulti.svelte';
|
|
6
|
+
|
|
7
|
+
type Props = FieldWrapperProps<T, U, M> & WeekdayChoiceMultiProps;
|
|
8
|
+
let {
|
|
9
|
+
onAdd,
|
|
10
|
+
onRemove,
|
|
11
|
+
vertical,
|
|
12
|
+
value = $bindable([]),
|
|
13
|
+
letterLabels,
|
|
14
|
+
longLabels,
|
|
15
|
+
|
|
16
|
+
form,
|
|
17
|
+
name,
|
|
18
|
+
label,
|
|
19
|
+
description,
|
|
20
|
+
disabled,
|
|
21
|
+
readonly
|
|
22
|
+
}: Props = $props();
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<FieldWrapper {form} {name} {label} {description}>
|
|
26
|
+
{#snippet formElem(props)}
|
|
27
|
+
<div class="flex w-full items-center gap-2">
|
|
28
|
+
<WeekdayChoiceMulti
|
|
29
|
+
{onAdd}
|
|
30
|
+
{onRemove}
|
|
31
|
+
{disabled}
|
|
32
|
+
{readonly}
|
|
33
|
+
{vertical}
|
|
34
|
+
{letterLabels}
|
|
35
|
+
{longLabels}
|
|
36
|
+
{...props}
|
|
37
|
+
bind:value
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
{/snippet}
|
|
41
|
+
</FieldWrapper>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FormPath } from 'sveltekit-superforms';
|
|
2
|
+
import { type FieldWrapperProps } from '../FieldWrapper.svelte';
|
|
3
|
+
import type { WeekdayChoiceMultiProps } from '../../ui/choice/WeekdayChoiceMulti.svelte';
|
|
4
|
+
declare function $$render<T extends Record<string, unknown>, U extends FormPath<T>, M>(): {
|
|
5
|
+
props: FieldWrapperProps<T, U, M> & WeekdayChoiceMultiProps;
|
|
6
|
+
exports: {};
|
|
7
|
+
bindings: "value";
|
|
8
|
+
slots: {};
|
|
9
|
+
events: {};
|
|
10
|
+
};
|
|
11
|
+
declare class __sveltets_Render<T extends Record<string, unknown>, U extends FormPath<T>, M> {
|
|
12
|
+
props(): ReturnType<typeof $$render<T, U, M>>['props'];
|
|
13
|
+
events(): ReturnType<typeof $$render<T, U, M>>['events'];
|
|
14
|
+
slots(): ReturnType<typeof $$render<T, U, M>>['slots'];
|
|
15
|
+
bindings(): "value";
|
|
16
|
+
exports(): {};
|
|
17
|
+
}
|
|
18
|
+
interface $$IsomorphicComponent {
|
|
19
|
+
new <T extends Record<string, unknown>, U extends FormPath<T>, M>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, U, M>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, U, M>['props']>, ReturnType<__sveltets_Render<T, U, M>['events']>, ReturnType<__sveltets_Render<T, U, M>['slots']>> & {
|
|
20
|
+
$$bindings?: ReturnType<__sveltets_Render<T, U, M>['bindings']>;
|
|
21
|
+
} & ReturnType<__sveltets_Render<T, U, M>['exports']>;
|
|
22
|
+
<T extends Record<string, unknown>, U extends FormPath<T>, M>(internal: unknown, props: ReturnType<__sveltets_Render<T, U, M>['props']> & {}): ReturnType<__sveltets_Render<T, U, M>['exports']>;
|
|
23
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
|
|
24
|
+
}
|
|
25
|
+
declare const WeekdayChoiceMultiField: $$IsomorphicComponent;
|
|
26
|
+
type WeekdayChoiceMultiField<T extends Record<string, unknown>, U extends FormPath<T>, M> = InstanceType<typeof WeekdayChoiceMultiField<T, U, M>>;
|
|
27
|
+
export default WeekdayChoiceMultiField;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import TextField from './form/fields/TextField.svelte';
|
|
2
2
|
import PasswordField from './form/fields/PasswordField.svelte';
|
|
3
|
-
|
|
3
|
+
import ChoiceField from './form/fields/ChoiceField.svelte';
|
|
4
|
+
import ChoiceMultiField from './form/fields/ChoiceMultiField.svelte';
|
|
5
|
+
import Choice from './ui/choice/Choice.svelte';
|
|
6
|
+
import ChoiceMulti from './ui/choice/ChoiceMulti.svelte';
|
|
7
|
+
import WeekdayChoice from './ui/choice/WeekdayChoice.svelte';
|
|
8
|
+
import WeekdayChoiceMulti from './ui/choice/WeekdayChoiceMulti.svelte';
|
|
9
|
+
export { TextField, PasswordField, ChoiceMultiField, ChoiceField, Choice, ChoiceMulti, WeekdayChoice, WeekdayChoiceMulti };
|
package/dist/components/index.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import TextField from './form/fields/TextField.svelte';
|
|
2
2
|
import PasswordField from './form/fields/PasswordField.svelte';
|
|
3
|
-
|
|
3
|
+
import ChoiceField from './form/fields/ChoiceField.svelte';
|
|
4
|
+
import ChoiceMultiField from './form/fields/ChoiceMultiField.svelte';
|
|
5
|
+
import Choice from './ui/choice/Choice.svelte';
|
|
6
|
+
import ChoiceMulti from './ui/choice/ChoiceMulti.svelte';
|
|
7
|
+
import WeekdayChoice from './ui/choice/WeekdayChoice.svelte';
|
|
8
|
+
import WeekdayChoiceMulti from './ui/choice/WeekdayChoiceMulti.svelte';
|
|
9
|
+
export { TextField, PasswordField, ChoiceMultiField, ChoiceField, Choice, ChoiceMulti, WeekdayChoice, WeekdayChoiceMulti };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { highlight } from '../../highlight.js';
|
|
3
|
+
import { onMount } from 'svelte';
|
|
4
|
+
|
|
5
|
+
export let language: string = 'svelte';
|
|
6
|
+
export let theme: string = 'nord';
|
|
7
|
+
|
|
8
|
+
let highlightedCode = '';
|
|
9
|
+
let codeBlock: HTMLDivElement;
|
|
10
|
+
|
|
11
|
+
onMount(async () => {
|
|
12
|
+
const code = codeBlock.textContent || '';
|
|
13
|
+
const lines = code.split('\n');
|
|
14
|
+
const firstLine = lines.find((line) => line.trim() !== '');
|
|
15
|
+
|
|
16
|
+
// Dedent the code first
|
|
17
|
+
let dedentedCode = '';
|
|
18
|
+
if (firstLine) {
|
|
19
|
+
const leadingSpaces = firstLine.match(/^\s*/)?.[0].length || 0;
|
|
20
|
+
dedentedCode = lines
|
|
21
|
+
.map((line) => line.slice(leadingSpaces))
|
|
22
|
+
.join('\n')
|
|
23
|
+
.trim();
|
|
24
|
+
} else {
|
|
25
|
+
dedentedCode = code.trim();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Add tabs to each line and spacing above/below
|
|
29
|
+
const spacedCode =
|
|
30
|
+
'\n' +
|
|
31
|
+
dedentedCode
|
|
32
|
+
.split('\n')
|
|
33
|
+
.map((line) => `\t${line}`)
|
|
34
|
+
.join('\n') +
|
|
35
|
+
'\n\n';
|
|
36
|
+
|
|
37
|
+
highlightedCode = await highlight(spacedCode, language, theme);
|
|
38
|
+
});
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<div class="overflow-hidden rounded-b-xl border bg-gray-900">
|
|
42
|
+
<div class="border-b border-gray-800 bg-gray-800 px-4 py-2 text-sm font-medium text-gray-200">
|
|
43
|
+
Code
|
|
44
|
+
</div>
|
|
45
|
+
<div bind:this={codeBlock} class="overflow-x-auto text-sm" style="display: none;">
|
|
46
|
+
<slot />
|
|
47
|
+
</div>
|
|
48
|
+
<div class="overflow-x-auto text-sm">
|
|
49
|
+
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
|
|
50
|
+
{@html highlightedCode}
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: Props & {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
|
|
15
|
+
default: any;
|
|
16
|
+
} ? Props extends Record<string, never> ? any : {
|
|
17
|
+
children?: any;
|
|
18
|
+
} : {});
|
|
19
|
+
declare const CodeBlock: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
|
|
20
|
+
language?: string;
|
|
21
|
+
theme?: string;
|
|
22
|
+
}, {
|
|
23
|
+
default: {};
|
|
24
|
+
}>, {
|
|
25
|
+
[evt: string]: CustomEvent<any>;
|
|
26
|
+
}, {
|
|
27
|
+
default: {};
|
|
28
|
+
}, {}, string>;
|
|
29
|
+
type CodeBlock = InstanceType<typeof CodeBlock>;
|
|
30
|
+
export default CodeBlock;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export let title: string;
|
|
3
|
+
export let description: string;
|
|
4
|
+
let id = title.toLowerCase().replace(/\s+/g, '-');
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<section {id} class="mx-auto mb-12 w-full max-w-screen px-4">
|
|
8
|
+
<h2 class="mb-4 text-2xl font-semibold text-gray-800">{title}</h2>
|
|
9
|
+
<p class="mb-6 text-gray-600">{description}</p>
|
|
10
|
+
|
|
11
|
+
<slot name="preview" />
|
|
12
|
+
<slot name="code" />
|
|
13
|
+
</section>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: Props & {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const Container: $$__sveltets_2_IsomorphicComponent<{
|
|
15
|
+
title: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}, {
|
|
18
|
+
[evt: string]: CustomEvent<any>;
|
|
19
|
+
}, {
|
|
20
|
+
preview: {};
|
|
21
|
+
code: {};
|
|
22
|
+
}, {}, string>;
|
|
23
|
+
type Container = InstanceType<typeof Container>;
|
|
24
|
+
export default Container;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default Preview;
|
|
2
|
+
type Preview = SvelteComponent<any, {
|
|
3
|
+
[evt: string]: CustomEvent<any>;
|
|
4
|
+
}, {
|
|
5
|
+
default: {};
|
|
6
|
+
}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Preview: $$__sveltets_2_IsomorphicComponent<any, {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
}, {
|
|
12
|
+
default: {};
|
|
13
|
+
}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export default Sidebar;
|
|
2
|
+
type Sidebar = SvelteComponent<any, {
|
|
3
|
+
[evt: string]: CustomEvent<any>;
|
|
4
|
+
}, {
|
|
5
|
+
default: {};
|
|
6
|
+
}> & {
|
|
7
|
+
$$bindings?: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
declare const Sidebar: $$__sveltets_2_IsomorphicComponent<any, {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
}, {
|
|
12
|
+
default: {};
|
|
13
|
+
}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: Props & {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const SidebarLink: $$__sveltets_2_IsomorphicComponent<{
|
|
15
|
+
title: string;
|
|
16
|
+
}, {
|
|
17
|
+
[evt: string]: CustomEvent<any>;
|
|
18
|
+
}, {}, {}, string>;
|
|
19
|
+
type SidebarLink = InstanceType<typeof SidebarLink>;
|
|
20
|
+
export default SidebarLink;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export interface ChoiceProps<V, K extends string | number | symbol>
|
|
3
|
+
extends ChoiceInternalProps<V, K> {
|
|
4
|
+
value?: V;
|
|
5
|
+
onChange?: (value: V) => void;
|
|
6
|
+
}
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<script lang="ts" generics="V, K extends string | number | symbol">
|
|
10
|
+
import ChoiceInternal, {
|
|
11
|
+
type ChoiceInternalProps as ChoiceInternalProps
|
|
12
|
+
} from './ChoiceInternal.svelte';
|
|
13
|
+
|
|
14
|
+
let { value = $bindable(undefined), onChange, ...props }: ChoiceProps<V, K> = $props();
|
|
15
|
+
|
|
16
|
+
function handleItemClick(item: V) {
|
|
17
|
+
value = item;
|
|
18
|
+
// Trigger event
|
|
19
|
+
onChange?.(item);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isActive(item: V) {
|
|
23
|
+
return value === item;
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<ChoiceInternal {handleItemClick} {isActive} {...props} />
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ChoiceProps<V, K extends string | number | symbol> extends ChoiceInternalProps<V, K> {
|
|
2
|
+
value?: V;
|
|
3
|
+
onChange?: (value: V) => void;
|
|
4
|
+
}
|
|
5
|
+
import { type ChoiceInternalProps as ChoiceInternalProps } from './ChoiceInternal.svelte';
|
|
6
|
+
declare function $$render<V, K extends string | number | symbol>(): {
|
|
7
|
+
props: ChoiceProps<V, K>;
|
|
8
|
+
exports: {};
|
|
9
|
+
bindings: "value";
|
|
10
|
+
slots: {};
|
|
11
|
+
events: {};
|
|
12
|
+
};
|
|
13
|
+
declare class __sveltets_Render<V, K extends string | number | symbol> {
|
|
14
|
+
props(): ReturnType<typeof $$render<V, K>>['props'];
|
|
15
|
+
events(): ReturnType<typeof $$render<V, K>>['events'];
|
|
16
|
+
slots(): ReturnType<typeof $$render<V, K>>['slots'];
|
|
17
|
+
bindings(): "value";
|
|
18
|
+
exports(): {};
|
|
19
|
+
}
|
|
20
|
+
interface $$IsomorphicComponent {
|
|
21
|
+
new <V, K extends string | number | symbol>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<V, K>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<V, K>['props']>, ReturnType<__sveltets_Render<V, K>['events']>, ReturnType<__sveltets_Render<V, K>['slots']>> & {
|
|
22
|
+
$$bindings?: ReturnType<__sveltets_Render<V, K>['bindings']>;
|
|
23
|
+
} & ReturnType<__sveltets_Render<V, K>['exports']>;
|
|
24
|
+
<V, K extends string | number | symbol>(internal: unknown, props: ReturnType<__sveltets_Render<V, K>['props']> & {}): ReturnType<__sveltets_Render<V, K>['exports']>;
|
|
25
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
26
|
+
}
|
|
27
|
+
declare const Choice: $$IsomorphicComponent;
|
|
28
|
+
type Choice<V, K extends string | number | symbol> = InstanceType<typeof Choice<V, K>>;
|
|
29
|
+
export default Choice;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export interface ChoiceInternalProps<T, K extends string | number | symbol>
|
|
3
|
+
extends Partial<FormAttrs> {
|
|
4
|
+
items: readonly T[];
|
|
5
|
+
getKey: (item: T) => K;
|
|
6
|
+
getLabel: (item: T) => string;
|
|
7
|
+
vertical?: boolean;
|
|
8
|
+
}
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts" generics="T, K extends string | number | symbol">
|
|
12
|
+
import type { FormAttrs } from '../../form/FieldWrapper.svelte';
|
|
13
|
+
import { cn } from '../../../shadcn/utils.js';
|
|
14
|
+
|
|
15
|
+
interface Props extends ChoiceInternalProps<T, K> {
|
|
16
|
+
handleItemClick: (item: T) => void;
|
|
17
|
+
isActive: (item: T) => boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
items = [],
|
|
22
|
+
getKey,
|
|
23
|
+
getLabel,
|
|
24
|
+
vertical,
|
|
25
|
+
handleItemClick,
|
|
26
|
+
isActive,
|
|
27
|
+
disabled,
|
|
28
|
+
readonly,
|
|
29
|
+
'aria-invalid': ariaInvalid,
|
|
30
|
+
...control
|
|
31
|
+
}: Props = $props();
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<div
|
|
35
|
+
{...control}
|
|
36
|
+
class={cn(
|
|
37
|
+
'w-fit rounded-lg border border-border bg-muted p-1 text-sm leading-[0.01em] font-semibold shadow-inner',
|
|
38
|
+
'grid gap-1',
|
|
39
|
+
vertical ? 'grid-flow-row auto-rows-fr' : 'auto-cols-fr grid-flow-col',
|
|
40
|
+
disabled || readonly ? 'pointer-events-none' : 'cursor-pointer',
|
|
41
|
+
disabled && 'opacity-50',
|
|
42
|
+
ariaInvalid && 'border-destructive'
|
|
43
|
+
)}
|
|
44
|
+
>
|
|
45
|
+
{#each items as item (getKey(item))}
|
|
46
|
+
<button
|
|
47
|
+
type="button"
|
|
48
|
+
onclick={() => {
|
|
49
|
+
if (disabled || readonly) return;
|
|
50
|
+
handleItemClick(item);
|
|
51
|
+
}}
|
|
52
|
+
data-state={isActive(item) ? 'active' : 'inactive'}
|
|
53
|
+
class="h-8 cursor-pointer rounded-lg bg-transparent p-2 text-muted-foreground hover:text-foreground hover:outline-2 focus-visible:outline-ring data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm"
|
|
54
|
+
>{getLabel(item)}
|
|
55
|
+
</button>
|
|
56
|
+
{/each}
|
|
57
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface ChoiceInternalProps<T, K extends string | number | symbol> extends Partial<FormAttrs> {
|
|
2
|
+
items: readonly T[];
|
|
3
|
+
getKey: (item: T) => K;
|
|
4
|
+
getLabel: (item: T) => string;
|
|
5
|
+
vertical?: boolean;
|
|
6
|
+
}
|
|
7
|
+
import type { FormAttrs } from '../../form/FieldWrapper.svelte';
|
|
8
|
+
declare function $$render<T, K extends string | number | symbol>(): {
|
|
9
|
+
props: ChoiceInternalProps<T, K> & {
|
|
10
|
+
handleItemClick: (item: T) => void;
|
|
11
|
+
isActive: (item: T) => boolean;
|
|
12
|
+
};
|
|
13
|
+
exports: {};
|
|
14
|
+
bindings: "";
|
|
15
|
+
slots: {};
|
|
16
|
+
events: {};
|
|
17
|
+
};
|
|
18
|
+
declare class __sveltets_Render<T, K extends string | number | symbol> {
|
|
19
|
+
props(): ReturnType<typeof $$render<T, K>>['props'];
|
|
20
|
+
events(): ReturnType<typeof $$render<T, K>>['events'];
|
|
21
|
+
slots(): ReturnType<typeof $$render<T, K>>['slots'];
|
|
22
|
+
bindings(): "";
|
|
23
|
+
exports(): {};
|
|
24
|
+
}
|
|
25
|
+
interface $$IsomorphicComponent {
|
|
26
|
+
new <T, K extends string | number | symbol>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, K>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, K>['props']>, ReturnType<__sveltets_Render<T, K>['events']>, ReturnType<__sveltets_Render<T, K>['slots']>> & {
|
|
27
|
+
$$bindings?: ReturnType<__sveltets_Render<T, K>['bindings']>;
|
|
28
|
+
} & ReturnType<__sveltets_Render<T, K>['exports']>;
|
|
29
|
+
<T, K extends string | number | symbol>(internal: unknown, props: ReturnType<__sveltets_Render<T, K>['props']> & {}): ReturnType<__sveltets_Render<T, K>['exports']>;
|
|
30
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
31
|
+
}
|
|
32
|
+
declare const ChoiceInternal: $$IsomorphicComponent;
|
|
33
|
+
type ChoiceInternal<T, K extends string | number | symbol> = InstanceType<typeof ChoiceInternal<T, K>>;
|
|
34
|
+
export default ChoiceInternal;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export interface ChoiceMultiProps<V, K extends string | number | symbol>
|
|
3
|
+
extends ChoiceInternalProps<V, K> {
|
|
4
|
+
value: V[];
|
|
5
|
+
onAdd?: (value: V) => void;
|
|
6
|
+
onRemove?: (value: V) => void;
|
|
7
|
+
}
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<script lang="ts" generics="V, K extends string | number | symbol">
|
|
11
|
+
import ChoiceInternal, { type ChoiceInternalProps } from './ChoiceInternal.svelte';
|
|
12
|
+
import * as sorted from 'sorted-array-functions';
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
value = $bindable([]),
|
|
16
|
+
onAdd,
|
|
17
|
+
onRemove,
|
|
18
|
+
items,
|
|
19
|
+
...props
|
|
20
|
+
}: ChoiceMultiProps<V, K> = $props();
|
|
21
|
+
|
|
22
|
+
const valueIndex = new Map<V, number>(items.map((item, index) => [item, index] as const));
|
|
23
|
+
|
|
24
|
+
function compareItems(a: V, b: V) {
|
|
25
|
+
const index1 = valueIndex.get(a);
|
|
26
|
+
if (index1 === undefined) return 1;
|
|
27
|
+
const index2 = valueIndex.get(b);
|
|
28
|
+
if (index2 === undefined) return -1;
|
|
29
|
+
|
|
30
|
+
return Math.sign(index1 - index2) as -1 | 0 | 1;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function contains(item: V) {
|
|
34
|
+
// Sorted contains function
|
|
35
|
+
return sorted.has(value, item, compareItems);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function handleItemClick(item: V) {
|
|
39
|
+
// Toggle add or remove
|
|
40
|
+
if (!contains(item)) {
|
|
41
|
+
sorted.add(value, item, compareItems);
|
|
42
|
+
// Trigger event
|
|
43
|
+
onAdd?.(item);
|
|
44
|
+
} else {
|
|
45
|
+
sorted.remove(value, item, compareItems);
|
|
46
|
+
// Trigger event
|
|
47
|
+
onRemove?.(item);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Re-assign value to trigger state update
|
|
51
|
+
value = value;
|
|
52
|
+
}
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<ChoiceInternal {handleItemClick} isActive={contains} {items} {...props} />
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ChoiceMultiProps<V, K extends string | number | symbol> extends ChoiceInternalProps<V, K> {
|
|
2
|
+
value: V[];
|
|
3
|
+
onAdd?: (value: V) => void;
|
|
4
|
+
onRemove?: (value: V) => void;
|
|
5
|
+
}
|
|
6
|
+
import { type ChoiceInternalProps } from './ChoiceInternal.svelte';
|
|
7
|
+
declare function $$render<V, K extends string | number | symbol>(): {
|
|
8
|
+
props: ChoiceMultiProps<V, K>;
|
|
9
|
+
exports: {};
|
|
10
|
+
bindings: "value";
|
|
11
|
+
slots: {};
|
|
12
|
+
events: {};
|
|
13
|
+
};
|
|
14
|
+
declare class __sveltets_Render<V, K extends string | number | symbol> {
|
|
15
|
+
props(): ReturnType<typeof $$render<V, K>>['props'];
|
|
16
|
+
events(): ReturnType<typeof $$render<V, K>>['events'];
|
|
17
|
+
slots(): ReturnType<typeof $$render<V, K>>['slots'];
|
|
18
|
+
bindings(): "value";
|
|
19
|
+
exports(): {};
|
|
20
|
+
}
|
|
21
|
+
interface $$IsomorphicComponent {
|
|
22
|
+
new <V, K extends string | number | symbol>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<V, K>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<V, K>['props']>, ReturnType<__sveltets_Render<V, K>['events']>, ReturnType<__sveltets_Render<V, K>['slots']>> & {
|
|
23
|
+
$$bindings?: ReturnType<__sveltets_Render<V, K>['bindings']>;
|
|
24
|
+
} & ReturnType<__sveltets_Render<V, K>['exports']>;
|
|
25
|
+
<V, K extends string | number | symbol>(internal: unknown, props: ReturnType<__sveltets_Render<V, K>['props']> & {}): ReturnType<__sveltets_Render<V, K>['exports']>;
|
|
26
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
27
|
+
}
|
|
28
|
+
declare const ChoiceMulti: $$IsomorphicComponent;
|
|
29
|
+
type ChoiceMulti<V, K extends string | number | symbol> = InstanceType<typeof ChoiceMulti<V, K>>;
|
|
30
|
+
export default ChoiceMulti;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export interface WeekdayChoiceProps {
|
|
3
|
+
value?: Day;
|
|
4
|
+
onChange?: (value: Day) => void;
|
|
5
|
+
vertical?: boolean;
|
|
6
|
+
longLabels?: boolean;
|
|
7
|
+
letterLabels?: boolean;
|
|
8
|
+
disabled?: boolean | null;
|
|
9
|
+
readonly?: boolean | null;
|
|
10
|
+
}
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<script lang="ts">
|
|
14
|
+
import { Days, formatDayLetter, formatDayShort, type Day } from '../../../utils/index.js';
|
|
15
|
+
import { identity } from 'ramda';
|
|
16
|
+
|
|
17
|
+
import Choice from './Choice.svelte';
|
|
18
|
+
|
|
19
|
+
let { value = $bindable(undefined), ...props }: WeekdayChoiceProps = $props();
|
|
20
|
+
|
|
21
|
+
let getLabel = $derived.by(() => {
|
|
22
|
+
if (props.longLabels) return identity;
|
|
23
|
+
if (props.letterLabels) return formatDayLetter;
|
|
24
|
+
return formatDayShort;
|
|
25
|
+
});
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Choice items={Days} bind:value {getLabel} getKey={identity} {...props} />
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface WeekdayChoiceProps {
|
|
2
|
+
value?: Day;
|
|
3
|
+
onChange?: (value: Day) => void;
|
|
4
|
+
vertical?: boolean;
|
|
5
|
+
longLabels?: boolean;
|
|
6
|
+
letterLabels?: boolean;
|
|
7
|
+
disabled?: boolean | null;
|
|
8
|
+
readonly?: boolean | null;
|
|
9
|
+
}
|
|
10
|
+
import { type Day } from '../../../utils/index.js';
|
|
11
|
+
declare const WeekdayChoice: import("svelte").Component<WeekdayChoiceProps, {}, "value">;
|
|
12
|
+
type WeekdayChoice = ReturnType<typeof WeekdayChoice>;
|
|
13
|
+
export default WeekdayChoice;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { identity } from 'ramda';
|
|
3
|
+
|
|
4
|
+
export interface WeekdayChoiceMultiProps {
|
|
5
|
+
value: Day[];
|
|
6
|
+
onAdd?: (value: Day) => void;
|
|
7
|
+
onRemove?: (value: Day) => void;
|
|
8
|
+
vertical?: boolean;
|
|
9
|
+
longLabels?: boolean;
|
|
10
|
+
letterLabels?: boolean;
|
|
11
|
+
disabled?: boolean | null;
|
|
12
|
+
readonly?: boolean | null;
|
|
13
|
+
}
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<script lang="ts">
|
|
17
|
+
import ChoiceMulti from './ChoiceMulti.svelte';
|
|
18
|
+
import { Days, formatDayLetter, formatDayShort, type Day } from '../../../utils/index.js';
|
|
19
|
+
|
|
20
|
+
let { value = $bindable([]), ...props }: WeekdayChoiceMultiProps = $props();
|
|
21
|
+
|
|
22
|
+
let getLabel = $derived.by(() => {
|
|
23
|
+
if (props.longLabels) return identity;
|
|
24
|
+
if (props.letterLabels) return formatDayLetter;
|
|
25
|
+
return formatDayShort;
|
|
26
|
+
});
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<ChoiceMulti items={Days} bind:value {getLabel} getKey={identity} {...props} />
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface WeekdayChoiceMultiProps {
|
|
2
|
+
value: Day[];
|
|
3
|
+
onAdd?: (value: Day) => void;
|
|
4
|
+
onRemove?: (value: Day) => void;
|
|
5
|
+
vertical?: boolean;
|
|
6
|
+
longLabels?: boolean;
|
|
7
|
+
letterLabels?: boolean;
|
|
8
|
+
disabled?: boolean | null;
|
|
9
|
+
readonly?: boolean | null;
|
|
10
|
+
}
|
|
11
|
+
import { type Day } from '../../../utils/index.js';
|
|
12
|
+
declare const WeekdayChoiceMulti: import("svelte").Component<WeekdayChoiceMultiProps, {}, "value">;
|
|
13
|
+
type WeekdayChoiceMulti = ReturnType<typeof WeekdayChoiceMulti>;
|
|
14
|
+
export default WeekdayChoiceMulti;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function highlight(code: string, lang?: string, theme?: string): Promise<string>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { bundledLanguages, bundledThemes, createHighlighter } from 'shiki';
|
|
2
|
+
const highlighterPromise = createHighlighter({
|
|
3
|
+
themes: Object.keys(bundledThemes), // all bundled themes
|
|
4
|
+
langs: Object.keys(bundledLanguages) // all bundled languages
|
|
5
|
+
});
|
|
6
|
+
export async function highlight(code, lang = 'svelte', theme = 'nord') {
|
|
7
|
+
const highlighter = await highlighterPromise;
|
|
8
|
+
return highlighter.codeToHtml(code, { lang, theme });
|
|
9
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CalendarDate, Time, ZonedDateTime, type DateDuration } from '@internationalized/date';
|
|
2
2
|
export declare const Days: readonly ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
|
|
3
3
|
export type Day = (typeof Days)[number];
|
|
4
|
+
export declare const Day: import("arktype/internal/methods/string.ts").StringType<"Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday", {}>;
|
|
4
5
|
/**
|
|
5
6
|
* Gets the day of the week for a given date.
|
|
6
7
|
* @param date - The date to get the day of the week for.
|
|
@@ -59,7 +60,7 @@ export declare function getLastDatesOfDay(dayOfWeek: Day, count: number, startDa
|
|
|
59
60
|
*/
|
|
60
61
|
export declare function getLastMonths(count: number, startDate: CalendarDate): CalendarDate[];
|
|
61
62
|
/**
|
|
62
|
-
* Checks if two time ranges overlap
|
|
63
|
+
* Checks if two time ranges overlap, boundaries are not considered overlapping.
|
|
63
64
|
* @param start1 - The start time of the first range.
|
|
64
65
|
* @param end1 - The end time of the first range.
|
|
65
66
|
* @param start2 - The start time of the second range.
|
|
@@ -88,6 +89,13 @@ export declare function dateDiffWeeks(date1: CalendarDate, date2: CalendarDate):
|
|
|
88
89
|
* @returns Formatted string of the day of the week.
|
|
89
90
|
*/
|
|
90
91
|
export declare function formatDayShort(day: Day): string;
|
|
92
|
+
/**
|
|
93
|
+
* Formats a day of the week.
|
|
94
|
+
* @param day - The day of the week to format.
|
|
95
|
+
* @example "Monday" -> "M"
|
|
96
|
+
* @returns Formatted letter of the day of the week.
|
|
97
|
+
*/
|
|
98
|
+
export declare function formatDayLetter(day: Day): string;
|
|
91
99
|
/**
|
|
92
100
|
* @param date The CalendarDate object to format.
|
|
93
101
|
* @returns string of date in shortened format
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CalendarDate, DateFormatter, getDayOfWeek, getLocalTimeZone, startOfMonth, Time, toCalendarDate, today, toTime, ZonedDateTime } from '@internationalized/date';
|
|
2
|
+
import { type } from 'arktype';
|
|
2
3
|
import { map, range } from 'ramda';
|
|
3
4
|
const DEFAULT_TIME_ZONE = 'Europe/London';
|
|
4
5
|
const DEFAULT_LOCALE = 'en-GB';
|
|
@@ -12,6 +13,7 @@ export const Days = [
|
|
|
12
13
|
'Saturday',
|
|
13
14
|
'Sunday'
|
|
14
15
|
];
|
|
16
|
+
export const Day = type.enumerated(...Days);
|
|
15
17
|
const DayIndex = Object.fromEntries(Days.map((day, index) => [day, index]));
|
|
16
18
|
/** Gets the day index of the date */
|
|
17
19
|
function getDayIndex(date) {
|
|
@@ -130,7 +132,7 @@ export function getLastMonths(count, startDate) {
|
|
|
130
132
|
}
|
|
131
133
|
/* Intervals */
|
|
132
134
|
/**
|
|
133
|
-
* Checks if two time ranges overlap
|
|
135
|
+
* Checks if two time ranges overlap, boundaries are not considered overlapping.
|
|
134
136
|
* @param start1 - The start time of the first range.
|
|
135
137
|
* @param end1 - The end time of the first range.
|
|
136
138
|
* @param start2 - The start time of the second range.
|
|
@@ -176,6 +178,16 @@ export function formatDayShort(day) {
|
|
|
176
178
|
// Use the first three letters of the day
|
|
177
179
|
return day.slice(0, 3);
|
|
178
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Formats a day of the week.
|
|
183
|
+
* @param day - The day of the week to format.
|
|
184
|
+
* @example "Monday" -> "M"
|
|
185
|
+
* @returns Formatted letter of the day of the week.
|
|
186
|
+
*/
|
|
187
|
+
export function formatDayLetter(day) {
|
|
188
|
+
// Use the first letters of the day
|
|
189
|
+
return day.slice(0, 1);
|
|
190
|
+
}
|
|
179
191
|
/* Calendar Dates */
|
|
180
192
|
const FullDateFormatter = new DateFormatter(DEFAULT_LOCALE, {
|
|
181
193
|
day: 'numeric',
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.3.1",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"files": [
|
|
9
9
|
"dist",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"@tailwindcss/vite": "^4.0.0",
|
|
51
51
|
"@types/node": "^22",
|
|
52
52
|
"@types/ramda": "^0.31.1",
|
|
53
|
+
"@types/sorted-array-functions": "^1.3.3",
|
|
53
54
|
"arktype": "^2.1.22",
|
|
54
55
|
"clsx": "^2.1.1",
|
|
55
56
|
"eslint": "^9.22.0",
|
|
@@ -60,6 +61,7 @@
|
|
|
60
61
|
"prettier-plugin-svelte": "^3.3.3",
|
|
61
62
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
|
62
63
|
"publint": "^0.3.2",
|
|
64
|
+
"shiki": "^3.13.0",
|
|
63
65
|
"svelte": "^5.0.0",
|
|
64
66
|
"svelte-check": "^4.0.0",
|
|
65
67
|
"sveltekit-superforms": "^2.27.1",
|
|
@@ -77,7 +79,8 @@
|
|
|
77
79
|
],
|
|
78
80
|
"dependencies": {
|
|
79
81
|
"formsnap": "^2.0.1",
|
|
80
|
-
"ramda": "^0.31.3"
|
|
82
|
+
"ramda": "^0.31.3",
|
|
83
|
+
"sorted-array-functions": "^1.3.0"
|
|
81
84
|
},
|
|
82
85
|
"scripts": {
|
|
83
86
|
"dev": "vite dev",
|