@colletdev/svelte 0.1.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 +58 -0
- package/package.json +33 -0
- package/src/accordion.svelte +52 -0
- package/src/accordion.svelte.d.ts +19 -0
- package/src/activity-group.svelte +34 -0
- package/src/activity-group.svelte.d.ts +16 -0
- package/src/alert.svelte +61 -0
- package/src/alert.svelte.d.ts +24 -0
- package/src/autocomplete.svelte +126 -0
- package/src/autocomplete.svelte.d.ts +47 -0
- package/src/avatar.svelte +32 -0
- package/src/avatar.svelte.d.ts +15 -0
- package/src/backdrop.svelte +24 -0
- package/src/backdrop.svelte.d.ts +11 -0
- package/src/badge.svelte +45 -0
- package/src/badge.svelte.d.ts +19 -0
- package/src/breadcrumb.svelte +42 -0
- package/src/breadcrumb.svelte.d.ts +16 -0
- package/src/button.svelte +52 -0
- package/src/button.svelte.d.ts +23 -0
- package/src/card.svelte +67 -0
- package/src/card.svelte.d.ts +22 -0
- package/src/carousel.svelte +59 -0
- package/src/carousel.svelte.d.ts +29 -0
- package/src/chat-input.svelte +76 -0
- package/src/chat-input.svelte.d.ts +28 -0
- package/src/checkbox.svelte +83 -0
- package/src/checkbox.svelte.d.ts +29 -0
- package/src/code-block.svelte +40 -0
- package/src/code-block.svelte.d.ts +19 -0
- package/src/collapsible.svelte +56 -0
- package/src/collapsible.svelte.d.ts +27 -0
- package/src/date-picker.svelte +110 -0
- package/src/date-picker.svelte.d.ts +40 -0
- package/src/dialog.svelte +56 -0
- package/src/dialog.svelte.d.ts +24 -0
- package/src/drawer.svelte +56 -0
- package/src/drawer.svelte.d.ts +24 -0
- package/src/elements.d.ts +715 -0
- package/src/fab.svelte +48 -0
- package/src/fab.svelte.d.ts +21 -0
- package/src/file-upload.svelte +55 -0
- package/src/file-upload.svelte.d.ts +24 -0
- package/src/index.ts +85 -0
- package/src/label.svelte +29 -0
- package/src/label.svelte.d.ts +20 -0
- package/src/listbox.svelte +75 -0
- package/src/listbox.svelte.d.ts +21 -0
- package/src/menu.svelte +76 -0
- package/src/menu.svelte.d.ts +27 -0
- package/src/message-bubble.svelte +49 -0
- package/src/message-bubble.svelte.d.ts +20 -0
- package/src/message-group.svelte +41 -0
- package/src/message-group.svelte.d.ts +16 -0
- package/src/message-part.svelte +20 -0
- package/src/message-part.svelte.d.ts +9 -0
- package/src/pagination.svelte +40 -0
- package/src/pagination.svelte.d.ts +19 -0
- package/src/popover.svelte +66 -0
- package/src/popover.svelte.d.ts +28 -0
- package/src/profile-menu.svelte +55 -0
- package/src/profile-menu.svelte.d.ts +24 -0
- package/src/progress.svelte +33 -0
- package/src/progress.svelte.d.ts +16 -0
- package/src/radio-group.svelte +91 -0
- package/src/radio-group.svelte.d.ts +26 -0
- package/src/scrollbar.svelte +41 -0
- package/src/scrollbar.svelte.d.ts +16 -0
- package/src/search-bar.svelte +94 -0
- package/src/search-bar.svelte.d.ts +34 -0
- package/src/select.svelte +112 -0
- package/src/select.svelte.d.ts +37 -0
- package/src/separator.svelte +25 -0
- package/src/separator.svelte.d.ts +18 -0
- package/src/sidebar.svelte +65 -0
- package/src/sidebar.svelte.d.ts +26 -0
- package/src/skeleton.svelte +30 -0
- package/src/skeleton.svelte.d.ts +14 -0
- package/src/slider.svelte +100 -0
- package/src/slider.svelte.d.ts +35 -0
- package/src/speed-dial.svelte +66 -0
- package/src/speed-dial.svelte.d.ts +30 -0
- package/src/spinner.svelte +26 -0
- package/src/spinner.svelte.d.ts +12 -0
- package/src/split-button.svelte +64 -0
- package/src/split-button.svelte.d.ts +28 -0
- package/src/stepper.svelte +48 -0
- package/src/stepper.svelte.d.ts +19 -0
- package/src/switch.svelte +85 -0
- package/src/switch.svelte.d.ts +30 -0
- package/src/table.svelte +133 -0
- package/src/table.svelte.d.ts +33 -0
- package/src/tabs.svelte +51 -0
- package/src/tabs.svelte.d.ts +21 -0
- package/src/text-input.svelte +126 -0
- package/src/text-input.svelte.d.ts +49 -0
- package/src/text.svelte +63 -0
- package/src/text.svelte.d.ts +23 -0
- package/src/thinking.svelte +30 -0
- package/src/thinking.svelte.d.ts +14 -0
- package/src/toast.svelte +58 -0
- package/src/toast.svelte.d.ts +25 -0
- package/src/toggle-group.svelte +64 -0
- package/src/toggle-group.svelte.d.ts +23 -0
- package/src/tooltip.svelte +38 -0
- package/src/tooltip.svelte.d.ts +17 -0
- package/src/types.ts +334 -0
package/src/fab.svelte
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-fab> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import type { ClickDetail } from './types.js';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
icon?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
ariaLabel?: string;
|
|
10
|
+
variant?: 'filled' | 'outline' | 'ghost';
|
|
11
|
+
intent?: 'neutral' | 'primary' | 'info' | 'success' | 'warning' | 'danger';
|
|
12
|
+
shape?: 'rounded' | 'pill';
|
|
13
|
+
size?: 'sm' | 'md' | 'lg';
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
hasPopup?: boolean;
|
|
16
|
+
expanded?: boolean;
|
|
17
|
+
controls?: string;
|
|
18
|
+
onClick?: (event: CustomEvent<ClickDetail>) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let { icon, label, ariaLabel, variant, intent, shape, size, disabled, hasPopup, expanded, controls, onClick }: Props = $props();
|
|
22
|
+
|
|
23
|
+
let el: HTMLElement;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
$effect(() => {
|
|
27
|
+
if (!el) return;
|
|
28
|
+
const handler = (e: Event) => onClick?.(e as CustomEvent);
|
|
29
|
+
el.addEventListener('cx-click', handler);
|
|
30
|
+
return () => el.removeEventListener('cx-click', handler);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<cx-fab
|
|
36
|
+
bind:this={el}
|
|
37
|
+
icon={typeof icon === 'object' && icon != null ? JSON.stringify(icon) : icon}
|
|
38
|
+
label={typeof label === 'object' && label != null ? JSON.stringify(label) : label}
|
|
39
|
+
aria-label={typeof ariaLabel === 'object' && ariaLabel != null ? JSON.stringify(ariaLabel) : ariaLabel}
|
|
40
|
+
variant={typeof variant === 'object' && variant != null ? JSON.stringify(variant) : variant}
|
|
41
|
+
intent={typeof intent === 'object' && intent != null ? JSON.stringify(intent) : intent}
|
|
42
|
+
shape={typeof shape === 'object' && shape != null ? JSON.stringify(shape) : shape}
|
|
43
|
+
size={typeof size === 'object' && size != null ? JSON.stringify(size) : size}
|
|
44
|
+
disabled={disabled || undefined}
|
|
45
|
+
has-popup={hasPopup || undefined}
|
|
46
|
+
expanded={expanded || undefined}
|
|
47
|
+
controls={typeof controls === 'object' && controls != null ? JSON.stringify(controls) : controls}
|
|
48
|
+
/>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import type { ClickDetail } from './types.js';
|
|
4
|
+
|
|
5
|
+
interface FabProps {
|
|
6
|
+
icon?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
ariaLabel?: string;
|
|
9
|
+
variant?: 'filled' | 'outline' | 'ghost';
|
|
10
|
+
intent?: 'neutral' | 'primary' | 'info' | 'success' | 'warning' | 'danger';
|
|
11
|
+
shape?: 'rounded' | 'pill';
|
|
12
|
+
size?: 'sm' | 'md' | 'lg';
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
hasPopup?: boolean;
|
|
15
|
+
expanded?: boolean;
|
|
16
|
+
controls?: string;
|
|
17
|
+
onClick?: (event: CustomEvent<ClickDetail>) => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare const Fab: Component<FabProps, {}>;
|
|
21
|
+
export default Fab;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-file-upload> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
id?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
mode?: 'inline' | 'overlay';
|
|
9
|
+
variant?: 'outline' | 'filled' | 'subtle';
|
|
10
|
+
shape?: 'sharp' | 'rounded' | 'pill';
|
|
11
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
multiple?: boolean;
|
|
14
|
+
accept?: string;
|
|
15
|
+
maxSize?: number;
|
|
16
|
+
heading?: string;
|
|
17
|
+
browseText?: string;
|
|
18
|
+
hint?: string;
|
|
19
|
+
capture?: string;
|
|
20
|
+
preview?: boolean;
|
|
21
|
+
onChange?: (event: CustomEvent) => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let { id, label, mode, variant, shape, size, disabled, multiple, accept, maxSize, heading, browseText, hint, capture, preview, onChange }: Props = $props();
|
|
25
|
+
|
|
26
|
+
let el: HTMLElement;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
$effect(() => {
|
|
30
|
+
if (!el) return;
|
|
31
|
+
const handler = (e: Event) => onChange?.(e as CustomEvent);
|
|
32
|
+
el.addEventListener('cx-change', handler);
|
|
33
|
+
return () => el.removeEventListener('cx-change', handler);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<cx-file-upload
|
|
39
|
+
bind:this={el}
|
|
40
|
+
id={typeof id === 'object' && id != null ? JSON.stringify(id) : id}
|
|
41
|
+
label={typeof label === 'object' && label != null ? JSON.stringify(label) : label}
|
|
42
|
+
mode={typeof mode === 'object' && mode != null ? JSON.stringify(mode) : mode}
|
|
43
|
+
variant={typeof variant === 'object' && variant != null ? JSON.stringify(variant) : variant}
|
|
44
|
+
shape={typeof shape === 'object' && shape != null ? JSON.stringify(shape) : shape}
|
|
45
|
+
size={typeof size === 'object' && size != null ? JSON.stringify(size) : size}
|
|
46
|
+
disabled={disabled || undefined}
|
|
47
|
+
multiple={multiple || undefined}
|
|
48
|
+
accept={typeof accept === 'object' && accept != null ? JSON.stringify(accept) : accept}
|
|
49
|
+
max-size={typeof maxSize === 'object' && maxSize != null ? JSON.stringify(maxSize) : maxSize}
|
|
50
|
+
heading={typeof heading === 'object' && heading != null ? JSON.stringify(heading) : heading}
|
|
51
|
+
browse-text={typeof browseText === 'object' && browseText != null ? JSON.stringify(browseText) : browseText}
|
|
52
|
+
hint={typeof hint === 'object' && hint != null ? JSON.stringify(hint) : hint}
|
|
53
|
+
capture={typeof capture === 'object' && capture != null ? JSON.stringify(capture) : capture}
|
|
54
|
+
preview={preview || undefined}
|
|
55
|
+
/>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface FileUploadProps {
|
|
5
|
+
id?: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
mode?: 'inline' | 'overlay';
|
|
8
|
+
variant?: 'outline' | 'filled' | 'subtle';
|
|
9
|
+
shape?: 'sharp' | 'rounded' | 'pill';
|
|
10
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
multiple?: boolean;
|
|
13
|
+
accept?: string;
|
|
14
|
+
maxSize?: number;
|
|
15
|
+
heading?: string;
|
|
16
|
+
browseText?: string;
|
|
17
|
+
hint?: string;
|
|
18
|
+
capture?: string;
|
|
19
|
+
preview?: boolean;
|
|
20
|
+
onChange?: (event: CustomEvent) => void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare const FileUpload: Component<FileUploadProps, {}>;
|
|
24
|
+
export default FileUpload;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import '@colletdev/core';
|
|
3
|
+
|
|
4
|
+
// Re-export init and types from core
|
|
5
|
+
export { init, componentNames } from '@colletdev/core';
|
|
6
|
+
export type { InitOptions, ComponentName } from '@colletdev/core';
|
|
7
|
+
|
|
8
|
+
// Structured prop types
|
|
9
|
+
export type {
|
|
10
|
+
SelectOption, OptionGroup,
|
|
11
|
+
TabItem,
|
|
12
|
+
TableColumn, TableCell, TableRow, SortState, PaginationConfig, FooterRow, EmptyStateConfig,
|
|
13
|
+
AccordionItem,
|
|
14
|
+
MenuEntry, MenuRadioItem,
|
|
15
|
+
SidebarNavItem, SidebarGroup,
|
|
16
|
+
BreadcrumbItem,
|
|
17
|
+
RadioOption,
|
|
18
|
+
ToggleItem,
|
|
19
|
+
SplitMenuEntry,
|
|
20
|
+
SpeedDialAction,
|
|
21
|
+
CarouselSlide,
|
|
22
|
+
MessageGroupPart,
|
|
23
|
+
StepperStep,
|
|
24
|
+
} from './types.js';
|
|
25
|
+
|
|
26
|
+
// Event detail types
|
|
27
|
+
export type {
|
|
28
|
+
InputDetail, SelectDetail, CheckedDetail, SliderDetail,
|
|
29
|
+
ToggleDetail, AccordionDetail, CollapsibleDetail,
|
|
30
|
+
MenuActionDetail, MenuChangeDetail,
|
|
31
|
+
SortDetail, TableSelectDetail, TableExpandDetail, PageDetail,
|
|
32
|
+
NavigateDetail, ClickDetail, CloseDetail, DismissDetail,
|
|
33
|
+
FocusDetail, KeyboardDetail,
|
|
34
|
+
CarouselDetail, FileChangeDetail, FileInfo,
|
|
35
|
+
} from './types.js';
|
|
36
|
+
|
|
37
|
+
export { default as Accordion } from './accordion.svelte';
|
|
38
|
+
export { default as ActivityGroup } from './activity-group.svelte';
|
|
39
|
+
export { default as Alert } from './alert.svelte';
|
|
40
|
+
export { default as Autocomplete } from './autocomplete.svelte';
|
|
41
|
+
export { default as Avatar } from './avatar.svelte';
|
|
42
|
+
export { default as Backdrop } from './backdrop.svelte';
|
|
43
|
+
export { default as Badge } from './badge.svelte';
|
|
44
|
+
export { default as Breadcrumb } from './breadcrumb.svelte';
|
|
45
|
+
export { default as Button } from './button.svelte';
|
|
46
|
+
export { default as Card } from './card.svelte';
|
|
47
|
+
export { default as Carousel } from './carousel.svelte';
|
|
48
|
+
export { default as ChatInput } from './chat-input.svelte';
|
|
49
|
+
export { default as Checkbox } from './checkbox.svelte';
|
|
50
|
+
export { default as CodeBlock } from './code-block.svelte';
|
|
51
|
+
export { default as Collapsible } from './collapsible.svelte';
|
|
52
|
+
export { default as DatePicker } from './date-picker.svelte';
|
|
53
|
+
export { default as Dialog } from './dialog.svelte';
|
|
54
|
+
export { default as Drawer } from './drawer.svelte';
|
|
55
|
+
export { default as Fab } from './fab.svelte';
|
|
56
|
+
export { default as FileUpload } from './file-upload.svelte';
|
|
57
|
+
export { default as Listbox } from './listbox.svelte';
|
|
58
|
+
export { default as Menu } from './menu.svelte';
|
|
59
|
+
export { default as MessageBubble } from './message-bubble.svelte';
|
|
60
|
+
export { default as MessageGroup } from './message-group.svelte';
|
|
61
|
+
export { default as MessagePart } from './message-part.svelte';
|
|
62
|
+
export { default as Pagination } from './pagination.svelte';
|
|
63
|
+
export { default as Popover } from './popover.svelte';
|
|
64
|
+
export { default as ProfileMenu } from './profile-menu.svelte';
|
|
65
|
+
export { default as Progress } from './progress.svelte';
|
|
66
|
+
export { default as RadioGroup } from './radio-group.svelte';
|
|
67
|
+
export { default as Scrollbar } from './scrollbar.svelte';
|
|
68
|
+
export { default as SearchBar } from './search-bar.svelte';
|
|
69
|
+
export { default as Select } from './select.svelte';
|
|
70
|
+
export { default as Sidebar } from './sidebar.svelte';
|
|
71
|
+
export { default as Skeleton } from './skeleton.svelte';
|
|
72
|
+
export { default as Slider } from './slider.svelte';
|
|
73
|
+
export { default as SpeedDial } from './speed-dial.svelte';
|
|
74
|
+
export { default as Spinner } from './spinner.svelte';
|
|
75
|
+
export { default as SplitButton } from './split-button.svelte';
|
|
76
|
+
export { default as Stepper } from './stepper.svelte';
|
|
77
|
+
export { default as Switch } from './switch.svelte';
|
|
78
|
+
export { default as Table } from './table.svelte';
|
|
79
|
+
export { default as Tabs } from './tabs.svelte';
|
|
80
|
+
export { default as Text } from './text.svelte';
|
|
81
|
+
export { default as TextInput } from './text-input.svelte';
|
|
82
|
+
export { default as Thinking } from './thinking.svelte';
|
|
83
|
+
export { default as Toast } from './toast.svelte';
|
|
84
|
+
export { default as ToggleGroup } from './toggle-group.svelte';
|
|
85
|
+
export { default as Tooltip } from './tooltip.svelte';
|
package/src/label.svelte
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte wrapper for <cx-label> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
export let id: string;
|
|
5
|
+
export let text: string;
|
|
6
|
+
export let forInput: string | undefined = undefined;
|
|
7
|
+
export let size: string | undefined = undefined;
|
|
8
|
+
export let required: boolean | undefined = undefined;
|
|
9
|
+
export let optionalText: string | undefined = undefined;
|
|
10
|
+
export let disabled: boolean | undefined = undefined;
|
|
11
|
+
export let helperText: string | undefined = undefined;
|
|
12
|
+
export let error: string | undefined = undefined;
|
|
13
|
+
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<cx-label
|
|
17
|
+
id={id}
|
|
18
|
+
text={text}
|
|
19
|
+
for-input={forInput}
|
|
20
|
+
size={size}
|
|
21
|
+
required={required || undefined}
|
|
22
|
+
optional-text={optionalText}
|
|
23
|
+
disabled={disabled || undefined}
|
|
24
|
+
helper-text={helperText}
|
|
25
|
+
error={error}
|
|
26
|
+
|
|
27
|
+
>
|
|
28
|
+
<slot />
|
|
29
|
+
</cx-label>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import { SvelteComponent } from 'svelte';
|
|
3
|
+
|
|
4
|
+
export interface LabelProps {
|
|
5
|
+
id: string;
|
|
6
|
+
text: string;
|
|
7
|
+
forInput?: string;
|
|
8
|
+
size?: string;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
optionalText?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
helperText?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface LabelEvents {
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default class Label extends SvelteComponent<LabelProps, LabelEvents> {}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-listbox> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import type { FocusDetail, KeyboardDetail, OptionGroup, SelectOption } from './types.js';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
id?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
shape?: 'sharp' | 'rounded' | 'pill';
|
|
10
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
11
|
+
selectionMode?: string;
|
|
12
|
+
selected?: string[] | string;
|
|
13
|
+
items?: SelectOption[] | string;
|
|
14
|
+
groups?: OptionGroup[] | string;
|
|
15
|
+
onFocus?: (event: CustomEvent<FocusDetail>) => void;
|
|
16
|
+
onBlur?: (event: CustomEvent<FocusDetail>) => void;
|
|
17
|
+
onKeydown?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
18
|
+
onKeyup?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let { id, label, shape, size, selectionMode, selected, items, groups, onFocus, onBlur, onKeydown, onKeyup }: Props = $props();
|
|
22
|
+
|
|
23
|
+
let el: HTMLElement;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
$effect(() => {
|
|
27
|
+
if (!el) return;
|
|
28
|
+
if (selected != null) el.setAttribute('selected', typeof selected === 'object' ? JSON.stringify(selected) : String(selected));
|
|
29
|
+
else el.removeAttribute('selected');
|
|
30
|
+
});
|
|
31
|
+
$effect(() => {
|
|
32
|
+
if (!el) return;
|
|
33
|
+
if (items != null) el.setAttribute('items', typeof items === 'object' ? JSON.stringify(items) : String(items));
|
|
34
|
+
else el.removeAttribute('items');
|
|
35
|
+
});
|
|
36
|
+
$effect(() => {
|
|
37
|
+
if (!el) return;
|
|
38
|
+
if (groups != null) el.setAttribute('groups', typeof groups === 'object' ? JSON.stringify(groups) : String(groups));
|
|
39
|
+
else el.removeAttribute('groups');
|
|
40
|
+
});
|
|
41
|
+
$effect(() => {
|
|
42
|
+
if (!el) return;
|
|
43
|
+
const handler = (e: Event) => onFocus?.(e as CustomEvent);
|
|
44
|
+
el.addEventListener('cx-focus', handler);
|
|
45
|
+
return () => el.removeEventListener('cx-focus', handler);
|
|
46
|
+
});
|
|
47
|
+
$effect(() => {
|
|
48
|
+
if (!el) return;
|
|
49
|
+
const handler = (e: Event) => onBlur?.(e as CustomEvent);
|
|
50
|
+
el.addEventListener('cx-blur', handler);
|
|
51
|
+
return () => el.removeEventListener('cx-blur', handler);
|
|
52
|
+
});
|
|
53
|
+
$effect(() => {
|
|
54
|
+
if (!el) return;
|
|
55
|
+
const handler = (e: Event) => onKeydown?.(e as CustomEvent);
|
|
56
|
+
el.addEventListener('cx-keydown', handler);
|
|
57
|
+
return () => el.removeEventListener('cx-keydown', handler);
|
|
58
|
+
});
|
|
59
|
+
$effect(() => {
|
|
60
|
+
if (!el) return;
|
|
61
|
+
const handler = (e: Event) => onKeyup?.(e as CustomEvent);
|
|
62
|
+
el.addEventListener('cx-keyup', handler);
|
|
63
|
+
return () => el.removeEventListener('cx-keyup', handler);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<cx-listbox
|
|
69
|
+
bind:this={el}
|
|
70
|
+
id={typeof id === 'object' && id != null ? JSON.stringify(id) : id}
|
|
71
|
+
label={typeof label === 'object' && label != null ? JSON.stringify(label) : label}
|
|
72
|
+
shape={typeof shape === 'object' && shape != null ? JSON.stringify(shape) : shape}
|
|
73
|
+
size={typeof size === 'object' && size != null ? JSON.stringify(size) : size}
|
|
74
|
+
selection-mode={typeof selectionMode === 'object' && selectionMode != null ? JSON.stringify(selectionMode) : selectionMode}
|
|
75
|
+
/>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import type { FocusDetail, KeyboardDetail, OptionGroup, SelectOption } from './types.js';
|
|
4
|
+
|
|
5
|
+
interface ListboxProps {
|
|
6
|
+
id?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
shape?: 'sharp' | 'rounded' | 'pill';
|
|
9
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
10
|
+
selectionMode?: string;
|
|
11
|
+
selected?: string[] | string;
|
|
12
|
+
items?: SelectOption[] | string;
|
|
13
|
+
groups?: OptionGroup[] | string;
|
|
14
|
+
onFocus?: (event: CustomEvent<FocusDetail>) => void;
|
|
15
|
+
onBlur?: (event: CustomEvent<FocusDetail>) => void;
|
|
16
|
+
onKeydown?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
17
|
+
onKeyup?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare const Listbox: Component<ListboxProps, {}>;
|
|
21
|
+
export default Listbox;
|
package/src/menu.svelte
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-menu> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import type { KeyboardDetail, MenuActionDetail, MenuChangeDetail, MenuEntry } from './types.js';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
id?: string;
|
|
8
|
+
triggerLabel: string;
|
|
9
|
+
entries?: MenuEntry[] | string;
|
|
10
|
+
variant?: 'filled' | 'outline' | 'ghost';
|
|
11
|
+
shape?: 'sharp' | 'rounded' | 'pill';
|
|
12
|
+
width?: 'auto' | 'sm' | 'md' | 'lg';
|
|
13
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
14
|
+
icon?: string;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
onAction?: (event: CustomEvent<MenuActionDetail>) => void;
|
|
17
|
+
onChange?: (event: CustomEvent<MenuChangeDetail>) => void;
|
|
18
|
+
onKeydown?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
19
|
+
onKeyup?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let { id, triggerLabel, entries, variant, shape, width, size, icon, disabled, onAction, onChange, onKeydown, onKeyup }: Props = $props();
|
|
23
|
+
|
|
24
|
+
let el: HTMLElement;
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
$effect(() => {
|
|
28
|
+
if (!el) return;
|
|
29
|
+
if (width != null) el.setAttribute('width', String(width));
|
|
30
|
+
else el.removeAttribute('width');
|
|
31
|
+
});
|
|
32
|
+
$effect(() => {
|
|
33
|
+
if (!el) return;
|
|
34
|
+
if (entries != null) el.setAttribute('entries', typeof entries === 'object' ? JSON.stringify(entries) : String(entries));
|
|
35
|
+
else el.removeAttribute('entries');
|
|
36
|
+
});
|
|
37
|
+
$effect(() => {
|
|
38
|
+
if (!el) return;
|
|
39
|
+
const handler = (e: Event) => onAction?.(e as CustomEvent);
|
|
40
|
+
el.addEventListener('cx-action', handler);
|
|
41
|
+
return () => el.removeEventListener('cx-action', handler);
|
|
42
|
+
});
|
|
43
|
+
$effect(() => {
|
|
44
|
+
if (!el) return;
|
|
45
|
+
const handler = (e: Event) => onChange?.(e as CustomEvent);
|
|
46
|
+
el.addEventListener('cx-change', handler);
|
|
47
|
+
return () => el.removeEventListener('cx-change', handler);
|
|
48
|
+
});
|
|
49
|
+
$effect(() => {
|
|
50
|
+
if (!el) return;
|
|
51
|
+
const handler = (e: Event) => onKeydown?.(e as CustomEvent);
|
|
52
|
+
el.addEventListener('cx-keydown', handler);
|
|
53
|
+
return () => el.removeEventListener('cx-keydown', handler);
|
|
54
|
+
});
|
|
55
|
+
$effect(() => {
|
|
56
|
+
if (!el) return;
|
|
57
|
+
const handler = (e: Event) => onKeyup?.(e as CustomEvent);
|
|
58
|
+
el.addEventListener('cx-keyup', handler);
|
|
59
|
+
return () => el.removeEventListener('cx-keyup', handler);
|
|
60
|
+
});
|
|
61
|
+
/** Opens the menu dropdown. */
|
|
62
|
+
export function open() { (el as any)?.open(); }
|
|
63
|
+
/** Closes the menu dropdown. */
|
|
64
|
+
export function close() { (el as any)?.close(); }
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<cx-menu
|
|
68
|
+
bind:this={el}
|
|
69
|
+
id={typeof id === 'object' && id != null ? JSON.stringify(id) : id}
|
|
70
|
+
trigger-label={typeof triggerLabel === 'object' && triggerLabel != null ? JSON.stringify(triggerLabel) : triggerLabel}
|
|
71
|
+
variant={typeof variant === 'object' && variant != null ? JSON.stringify(variant) : variant}
|
|
72
|
+
shape={typeof shape === 'object' && shape != null ? JSON.stringify(shape) : shape}
|
|
73
|
+
size={typeof size === 'object' && size != null ? JSON.stringify(size) : size}
|
|
74
|
+
icon={typeof icon === 'object' && icon != null ? JSON.stringify(icon) : icon}
|
|
75
|
+
disabled={disabled || undefined}
|
|
76
|
+
/>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import type { KeyboardDetail, MenuActionDetail, MenuChangeDetail, MenuEntry } from './types.js';
|
|
4
|
+
|
|
5
|
+
interface MenuProps {
|
|
6
|
+
id?: string;
|
|
7
|
+
triggerLabel: string;
|
|
8
|
+
entries?: MenuEntry[] | string;
|
|
9
|
+
variant?: 'filled' | 'outline' | 'ghost';
|
|
10
|
+
shape?: 'sharp' | 'rounded' | 'pill';
|
|
11
|
+
width?: 'auto' | 'sm' | 'md' | 'lg';
|
|
12
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
13
|
+
icon?: string;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
onAction?: (event: CustomEvent<MenuActionDetail>) => void;
|
|
16
|
+
onChange?: (event: CustomEvent<MenuChangeDetail>) => void;
|
|
17
|
+
onKeydown?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
18
|
+
onKeyup?: (event: CustomEvent<KeyboardDetail>) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare const Menu: Component<MenuProps, {
|
|
22
|
+
/** Opens the menu dropdown. */
|
|
23
|
+
open(): void;
|
|
24
|
+
/** Closes the menu dropdown. */
|
|
25
|
+
close(): void;
|
|
26
|
+
}>;
|
|
27
|
+
export default Menu;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-message-bubble> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
id?: string;
|
|
7
|
+
role?: 'user' | 'assistant';
|
|
8
|
+
variant?: 'filled' | 'ghost';
|
|
9
|
+
shape?: 'sharp' | 'rounded';
|
|
10
|
+
alignment?: 'auto' | 'start' | 'end';
|
|
11
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
12
|
+
htmlContent?: string;
|
|
13
|
+
senderName?: string;
|
|
14
|
+
timestamp?: string;
|
|
15
|
+
border?: string;
|
|
16
|
+
animated?: boolean;
|
|
17
|
+
children?: import('svelte').Snippet;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let { id, role, variant, shape, alignment, size, htmlContent, senderName, timestamp, border, animated, children }: Props = $props();
|
|
21
|
+
|
|
22
|
+
let el: HTMLElement;
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
$effect(() => {
|
|
26
|
+
if (!el) return;
|
|
27
|
+
if (role != null) el.setAttribute('role', String(role));
|
|
28
|
+
else el.removeAttribute('role');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<cx-message-bubble
|
|
34
|
+
bind:this={el}
|
|
35
|
+
id={typeof id === 'object' && id != null ? JSON.stringify(id) : id}
|
|
36
|
+
variant={typeof variant === 'object' && variant != null ? JSON.stringify(variant) : variant}
|
|
37
|
+
shape={typeof shape === 'object' && shape != null ? JSON.stringify(shape) : shape}
|
|
38
|
+
alignment={typeof alignment === 'object' && alignment != null ? JSON.stringify(alignment) : alignment}
|
|
39
|
+
size={typeof size === 'object' && size != null ? JSON.stringify(size) : size}
|
|
40
|
+
html-content={typeof htmlContent === 'object' && htmlContent != null ? JSON.stringify(htmlContent) : htmlContent}
|
|
41
|
+
sender-name={typeof senderName === 'object' && senderName != null ? JSON.stringify(senderName) : senderName}
|
|
42
|
+
timestamp={typeof timestamp === 'object' && timestamp != null ? JSON.stringify(timestamp) : timestamp}
|
|
43
|
+
border={typeof border === 'object' && border != null ? JSON.stringify(border) : border}
|
|
44
|
+
animated={animated || undefined}
|
|
45
|
+
>
|
|
46
|
+
{#if children}
|
|
47
|
+
{@render children()}
|
|
48
|
+
{/if}
|
|
49
|
+
</cx-message-bubble>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface MessageBubbleProps {
|
|
5
|
+
id?: string;
|
|
6
|
+
role?: 'user' | 'assistant';
|
|
7
|
+
variant?: 'filled' | 'ghost';
|
|
8
|
+
shape?: 'sharp' | 'rounded';
|
|
9
|
+
alignment?: 'auto' | 'start' | 'end';
|
|
10
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
11
|
+
htmlContent?: string;
|
|
12
|
+
senderName?: string;
|
|
13
|
+
timestamp?: string;
|
|
14
|
+
border?: string;
|
|
15
|
+
animated?: boolean;
|
|
16
|
+
children?: import('svelte').Snippet;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare const MessageBubble: Component<MessageBubbleProps, {}>;
|
|
20
|
+
export default MessageBubble;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-message-group> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
import type { MessageGroupPart } from './types.js';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
id?: string;
|
|
8
|
+
role?: 'user' | 'assistant';
|
|
9
|
+
alignment?: 'auto' | 'start' | 'end';
|
|
10
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
11
|
+
senderName?: string;
|
|
12
|
+
animated?: boolean;
|
|
13
|
+
parts?: MessageGroupPart[] | string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let { id, role, alignment, size, senderName, animated, parts }: Props = $props();
|
|
17
|
+
|
|
18
|
+
let el: HTMLElement;
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
$effect(() => {
|
|
22
|
+
if (!el) return;
|
|
23
|
+
if (role != null) el.setAttribute('role', String(role));
|
|
24
|
+
else el.removeAttribute('role');
|
|
25
|
+
});
|
|
26
|
+
$effect(() => {
|
|
27
|
+
if (!el) return;
|
|
28
|
+
if (parts != null) el.setAttribute('parts', typeof parts === 'object' ? JSON.stringify(parts) : String(parts));
|
|
29
|
+
else el.removeAttribute('parts');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<cx-message-group
|
|
35
|
+
bind:this={el}
|
|
36
|
+
id={typeof id === 'object' && id != null ? JSON.stringify(id) : id}
|
|
37
|
+
alignment={typeof alignment === 'object' && alignment != null ? JSON.stringify(alignment) : alignment}
|
|
38
|
+
size={typeof size === 'object' && size != null ? JSON.stringify(size) : size}
|
|
39
|
+
sender-name={typeof senderName === 'object' && senderName != null ? JSON.stringify(senderName) : senderName}
|
|
40
|
+
animated={animated || undefined}
|
|
41
|
+
/>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import type { MessageGroupPart } from './types.js';
|
|
4
|
+
|
|
5
|
+
interface MessageGroupProps {
|
|
6
|
+
id?: string;
|
|
7
|
+
role?: 'user' | 'assistant';
|
|
8
|
+
alignment?: 'auto' | 'start' | 'end';
|
|
9
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
10
|
+
senderName?: string;
|
|
11
|
+
animated?: boolean;
|
|
12
|
+
parts?: MessageGroupPart[] | string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
declare const MessageGroup: Component<MessageGroupProps, {}>;
|
|
16
|
+
export default MessageGroup;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- Auto-generated by scripts/generate-svelte.mjs — DO NOT EDIT -->
|
|
2
|
+
<!-- Svelte 5 wrapper for <cx-message-part> -->
|
|
3
|
+
<script lang="ts">
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let { }: Props = $props();
|
|
10
|
+
|
|
11
|
+
let el: HTMLElement;
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<cx-message-part
|
|
18
|
+
bind:this={el}
|
|
19
|
+
|
|
20
|
+
/>
|