compote-ui 0.2.0 → 0.5.0

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.
Files changed (166) hide show
  1. package/dist/components/button/button.svelte +16 -0
  2. package/dist/components/button/{Button.svelte.d.ts → button.svelte.d.ts} +3 -2
  3. package/dist/components/button/button.variants.d.ts +46 -0
  4. package/dist/components/button/button.variants.js +20 -0
  5. package/dist/components/carousel/carousel.svelte +120 -0
  6. package/dist/components/carousel/carousel.svelte.d.ts +19 -0
  7. package/dist/components/checkbox/{Checkbox-group.svelte → checkbox-group.svelte} +1 -1
  8. package/dist/components/checkbox/{Checkbox.svelte → checkbox.svelte} +6 -2
  9. package/dist/components/combobox/{Combobox.svelte → combobox.svelte} +22 -25
  10. package/dist/components/combobox/types.d.ts +1 -1
  11. package/dist/components/dialog/alert-dialog.svelte +73 -0
  12. package/dist/components/dialog/alert-dialog.svelte.d.ts +13 -0
  13. package/dist/components/dialog/dialog.svelte +68 -0
  14. package/dist/components/dialog/dialog.svelte.d.ts +14 -0
  15. package/dist/components/field/field-error-text.svelte +11 -0
  16. package/dist/components/field/field-error-text.svelte.d.ts +4 -0
  17. package/dist/components/field/field-helper-text.svelte +11 -0
  18. package/dist/components/field/field-helper-text.svelte.d.ts +4 -0
  19. package/dist/components/field/field-input.svelte +38 -0
  20. package/dist/components/field/field-input.svelte.d.ts +4 -0
  21. package/dist/components/field/field-label.svelte +18 -0
  22. package/dist/components/field/field-label.svelte.d.ts +4 -0
  23. package/dist/components/field/field-textarea.svelte +16 -0
  24. package/dist/components/field/field-textarea.svelte.d.ts +4 -0
  25. package/dist/components/field/field.svelte +11 -0
  26. package/dist/components/field/field.svelte.d.ts +5 -0
  27. package/dist/components/field/index.d.ts +7 -0
  28. package/dist/components/field/index.js +6 -0
  29. package/dist/components/field/types.d.ts +22 -0
  30. package/dist/components/field/types.js +1 -0
  31. package/dist/components/file-upload/basic-document.svelte +89 -0
  32. package/dist/components/file-upload/basic-document.svelte.d.ts +4 -0
  33. package/dist/components/file-upload/basic.svelte +50 -0
  34. package/dist/components/file-upload/basic.svelte.d.ts +18 -0
  35. package/dist/components/file-upload/dropzone.svelte +26 -0
  36. package/dist/components/file-upload/dropzone.svelte.d.ts +4 -0
  37. package/dist/components/file-upload/files-list.svelte +97 -0
  38. package/dist/components/file-upload/files-list.svelte.d.ts +18 -0
  39. package/dist/components/file-upload/icons.d.ts +3 -0
  40. package/dist/components/file-upload/icons.js +39 -0
  41. package/dist/components/file-upload/types.d.ts +6 -0
  42. package/dist/components/file-upload/types.js +1 -0
  43. package/dist/components/file-upload/utils.d.ts +13 -0
  44. package/dist/components/file-upload/utils.js +18 -0
  45. package/dist/components/image-cropper/image-cropper.svelte +109 -0
  46. package/dist/components/image-cropper/image-cropper.svelte.d.ts +5 -0
  47. package/dist/components/image-cropper/types.d.ts +16 -0
  48. package/dist/components/image-cropper/types.js +1 -0
  49. package/dist/components/listbox/listbox.svelte +116 -0
  50. package/dist/components/listbox/listbox.svelte.d.ts +27 -0
  51. package/dist/components/listbox/types.d.ts +16 -0
  52. package/dist/components/listbox/types.js +1 -0
  53. package/dist/components/menu/index.d.ts +14 -0
  54. package/dist/components/menu/index.js +14 -0
  55. package/dist/components/menu/menu-checkbox-item.svelte +31 -0
  56. package/dist/components/menu/menu-checkbox-item.svelte.d.ts +12 -0
  57. package/dist/components/menu/menu-content.svelte +23 -0
  58. package/dist/components/menu/menu-content.svelte.d.ts +8 -0
  59. package/dist/components/menu/menu-context-trigger.svelte +20 -0
  60. package/dist/components/menu/menu-context-trigger.svelte.d.ts +8 -0
  61. package/dist/components/menu/menu-indicator.svelte +19 -0
  62. package/dist/components/menu/menu-indicator.svelte.d.ts +9 -0
  63. package/dist/components/menu/menu-item-group-label.svelte +17 -0
  64. package/dist/components/menu/menu-item-group-label.svelte.d.ts +9 -0
  65. package/dist/components/menu/menu-item-group.svelte +14 -0
  66. package/dist/components/menu/menu-item-group.svelte.d.ts +9 -0
  67. package/dist/components/menu/menu-item-indicator.svelte +14 -0
  68. package/dist/components/menu/menu-item-indicator.svelte.d.ts +9 -0
  69. package/dist/components/menu/menu-item.svelte +20 -0
  70. package/dist/components/menu/menu-item.svelte.d.ts +9 -0
  71. package/dist/components/menu/menu-radio-item-group.svelte +14 -0
  72. package/dist/components/menu/menu-radio-item-group.svelte.d.ts +9 -0
  73. package/dist/components/menu/menu-radio-item.svelte +28 -0
  74. package/dist/components/menu/menu-radio-item.svelte.d.ts +10 -0
  75. package/dist/components/menu/menu-separator.svelte +11 -0
  76. package/dist/components/menu/menu-separator.svelte.d.ts +7 -0
  77. package/dist/components/menu/menu-trigger-item.svelte +20 -0
  78. package/dist/components/menu/menu-trigger-item.svelte.d.ts +9 -0
  79. package/dist/components/menu/menu-trigger.svelte +19 -0
  80. package/dist/components/menu/menu-trigger.svelte.d.ts +12 -0
  81. package/dist/components/menu/menu.svelte +12 -0
  82. package/dist/components/menu/menu.svelte.d.ts +4 -0
  83. package/dist/components/number-input/number-input.svelte +67 -0
  84. package/dist/components/number-input/number-input.svelte.d.ts +5 -0
  85. package/dist/components/number-input/types.d.ts +7 -0
  86. package/dist/components/number-input/types.js +1 -0
  87. package/dist/components/select/select.svelte +93 -0
  88. package/dist/components/select/select.svelte.d.ts +26 -0
  89. package/dist/components/select/types.d.ts +13 -0
  90. package/dist/components/select/types.js +1 -0
  91. package/dist/components/splitter/splitter.svelte +60 -0
  92. package/dist/components/splitter/splitter.svelte.d.ts +5 -0
  93. package/dist/components/splitter/types.d.ts +9 -0
  94. package/dist/components/splitter/types.js +1 -0
  95. package/dist/components/switch/index.d.ts +2 -0
  96. package/dist/components/switch/index.js +1 -0
  97. package/dist/components/switch/switch.svelte +40 -0
  98. package/dist/components/switch/switch.svelte.d.ts +8 -0
  99. package/dist/components/switch/types.d.ts +5 -0
  100. package/dist/components/switch/types.js +1 -0
  101. package/dist/components/tabs/index.d.ts +4 -0
  102. package/dist/components/tabs/index.js +3 -0
  103. package/dist/components/tabs/tab-content.svelte +18 -0
  104. package/dist/components/tabs/tab-content.svelte.d.ts +7 -0
  105. package/dist/components/tabs/tab-trigger.svelte +18 -0
  106. package/dist/components/tabs/tab-trigger.svelte.d.ts +7 -0
  107. package/dist/components/tabs/tabs.svelte +39 -0
  108. package/dist/components/tabs/tabs.svelte.d.ts +5 -0
  109. package/dist/components/tabs/types.d.ts +8 -0
  110. package/dist/components/tabs/types.js +1 -0
  111. package/dist/components/tree-view/tree-view.svelte +210 -0
  112. package/dist/components/tree-view/tree-view.svelte.d.ts +26 -0
  113. package/dist/components/tree-view/types.d.ts +12 -0
  114. package/dist/components/tree-view/types.js +1 -0
  115. package/dist/icons/PhArrowLeft.svelte +18 -0
  116. package/dist/icons/PhArrowLeft.svelte.d.ts +5 -0
  117. package/dist/icons/PhArrowRight.svelte +18 -0
  118. package/dist/icons/PhArrowRight.svelte.d.ts +5 -0
  119. package/dist/icons/PhArrowsInSimple.svelte +17 -0
  120. package/dist/icons/PhArrowsInSimple.svelte.d.ts +5 -0
  121. package/dist/icons/PhCaretDown.svelte +2 -1
  122. package/dist/icons/PhCaretRight.svelte +17 -0
  123. package/dist/icons/PhCaretRight.svelte.d.ts +5 -0
  124. package/dist/icons/PhCaretUp.svelte +18 -0
  125. package/dist/icons/PhCaretUp.svelte.d.ts +5 -0
  126. package/dist/icons/PhCheck.svelte +2 -1
  127. package/dist/icons/PhFile.svelte +19 -0
  128. package/dist/icons/PhFile.svelte.d.ts +5 -0
  129. package/dist/icons/PhFileArchive.svelte +18 -0
  130. package/dist/icons/PhFileArchive.svelte.d.ts +5 -0
  131. package/dist/icons/PhFileText.svelte +18 -0
  132. package/dist/icons/PhFileText.svelte.d.ts +5 -0
  133. package/dist/icons/PhHeadphones.svelte +17 -0
  134. package/dist/icons/PhHeadphones.svelte.d.ts +5 -0
  135. package/dist/icons/PhImage.svelte +18 -0
  136. package/dist/icons/PhImage.svelte.d.ts +5 -0
  137. package/dist/icons/PhListMagnifyingGlass.svelte +17 -0
  138. package/dist/icons/PhListMagnifyingGlass.svelte.d.ts +5 -0
  139. package/dist/icons/PhMagnifyingGlass.svelte +17 -0
  140. package/dist/icons/PhMagnifyingGlass.svelte.d.ts +5 -0
  141. package/dist/icons/PhMicrosoftExcelLogo.svelte +17 -0
  142. package/dist/icons/PhMicrosoftExcelLogo.svelte.d.ts +5 -0
  143. package/dist/icons/PhStar.svelte +18 -0
  144. package/dist/icons/PhStar.svelte.d.ts +5 -0
  145. package/dist/icons/PhUploadSimple.svelte +18 -0
  146. package/dist/icons/PhUploadSimple.svelte.d.ts +5 -0
  147. package/dist/icons/PhUser.svelte +18 -0
  148. package/dist/icons/PhUser.svelte.d.ts +5 -0
  149. package/dist/icons/PhVideoCamera.svelte +17 -0
  150. package/dist/icons/PhVideoCamera.svelte.d.ts +5 -0
  151. package/dist/index.d.ts +17 -4
  152. package/dist/index.js +17 -4
  153. package/dist/open-props/props.colors-oklch-hues.css +14 -0
  154. package/dist/open-props/props.colors-oklch.css +19 -0
  155. package/dist/open-props/props.gray-oklch.css +18 -0
  156. package/dist/theme.css +19 -5
  157. package/package.json +4 -3
  158. package/dist/components/button/Button.svelte +0 -33
  159. package/dist/gray-oklch.min.css +0 -1
  160. package/dist/green-hsl.min.css +0 -1
  161. package/dist/props.colors-oklch-hues.css +0 -14
  162. package/dist/props.colors-oklch.css +0 -19
  163. package/dist/props.gray-oklch.css +0 -18
  164. /package/dist/components/checkbox/{Checkbox-group.svelte.d.ts → checkbox-group.svelte.d.ts} +0 -0
  165. /package/dist/components/checkbox/{Checkbox.svelte.d.ts → checkbox.svelte.d.ts} +0 -0
  166. /package/dist/components/combobox/{Combobox.svelte.d.ts → combobox.svelte.d.ts} +0 -0
@@ -0,0 +1,116 @@
1
+ <script module>
2
+ // eslint-disable-next-line no-import-assign
3
+ export type { ListboxItem, ListboxProps } from './types';
4
+ </script>
5
+
6
+ <script lang="ts" generics="T extends number | string = number | string">
7
+ import { Listbox, createListCollection } from '@ark-ui/svelte/listbox';
8
+ import { useFilter } from '@ark-ui/svelte/locale';
9
+ import PhCheckBold from '~icons/ph/check-bold';
10
+ import type { ListboxItem, ListboxProps } from './types';
11
+ import { cn } from 'tailwind-variants';
12
+
13
+ type Props = ListboxProps<T>;
14
+
15
+ let {
16
+ value = $bindable(),
17
+ items,
18
+ label,
19
+ name,
20
+ onValueChange,
21
+ filterable = false,
22
+ filterPlaceholder = 'Search...',
23
+ class: className,
24
+ ...restProps
25
+ }: Props = $props();
26
+
27
+ const filters = useFilter({ sensitivity: 'base' });
28
+ let filterText = $state('');
29
+ const hasGroups = $derived(items.some((i) => i.group));
30
+
31
+ const baseCollection = $derived(
32
+ createListCollection({
33
+ items,
34
+ itemToValue: (item) => item.value.toString(),
35
+ isItemDisabled: (item) => item.disabled === true,
36
+ ...(hasGroups ? { groupBy: (item: ListboxItem<T>) => item.group ?? '' } : {})
37
+ })
38
+ );
39
+
40
+ const collection = $derived(
41
+ filterable && filterText
42
+ ? baseCollection.filter((itemString) => filters().contains(itemString, filterText))
43
+ : baseCollection
44
+ );
45
+
46
+ const stringValue = $derived(value?.map(String) ?? []);
47
+
48
+ function handleValueChange(details: Parameters<NonNullable<Props['onValueChange']>>[0]) {
49
+ value = details.value as unknown as T[];
50
+ onValueChange?.(details);
51
+ }
52
+ </script>
53
+
54
+ <Listbox.Root
55
+ value={stringValue}
56
+ {collection}
57
+ onValueChange={handleValueChange}
58
+ {...restProps}
59
+ class={cn('flex h-full w-full flex-col gap-1.5 overflow-hidden', className)}
60
+ >
61
+ {#if label}
62
+ <Listbox.Label>{label}</Listbox.Label>
63
+ {/if}
64
+ {#if filterable}
65
+ <Listbox.Input
66
+ placeholder={filterPlaceholder}
67
+ oninput={(e) => (filterText = e.currentTarget.value)}
68
+ class="mx-1 h-8 w-full rounded-xs border border-surface-3 bg-transparent px-2.5 text-sm outline-none placeholder:text-ink-dim focus-visible:ring-1 focus-visible:ring-primary"
69
+ />
70
+ {/if}
71
+ <Listbox.Content class="flex min-h-0 w-full flex-1 flex-col gap-1 overflow-y-auto outline-none">
72
+ {#if hasGroups}
73
+ {#each collection.group() as [type, group] (type)}
74
+ <Listbox.ItemGroup class="flex flex-col gap-1 px-1 py-1">
75
+ <Listbox.ItemGroupLabel class="flex h-10 items-center text-sm font-medium text-ink-dim">
76
+ {type}
77
+ </Listbox.ItemGroupLabel>
78
+ {#each group as item (item.value)}
79
+ <Listbox.Item
80
+ {item}
81
+ class="flex cursor-pointer items-center justify-between rounded-xs px-2.5 py-1.5 text-sm font-medium transition-all duration-150 hover:bg-surface-2 data-disabled:opacity-50 data-highlighted:bg-surface-2"
82
+ >
83
+ <Listbox.ItemText class="flex-1 truncate">{item.label}</Listbox.ItemText>
84
+ <Listbox.ItemIndicator
85
+ class="h-5 w-5 text-primary data-[state=checked]:flex data-[state=unchecked]:hidden"
86
+ >
87
+ <PhCheckBold />
88
+ </Listbox.ItemIndicator>
89
+ </Listbox.Item>
90
+ {/each}
91
+ </Listbox.ItemGroup>
92
+ {/each}
93
+ {:else}
94
+ {#each collection.items as item (item.value)}
95
+ <Listbox.Item
96
+ {item}
97
+ class="flex cursor-pointer items-center justify-between rounded-xs px-2.5 py-1.5 text-sm font-medium transition-all duration-150 hover:bg-surface-2 data-disabled:opacity-50 data-highlighted:bg-surface-2"
98
+ >
99
+ <Listbox.ItemText class="flex-1 truncate">{item.label}</Listbox.ItemText>
100
+ <Listbox.ItemIndicator
101
+ class="h-5 w-5 text-primary data-[state=checked]:flex data-[state=unchecked]:hidden"
102
+ >
103
+ <PhCheckBold />
104
+ </Listbox.ItemIndicator>
105
+ </Listbox.Item>
106
+ {/each}
107
+ {/if}
108
+ <Listbox.Empty class="py-4 text-center text-sm text-ink-dim">No results found</Listbox.Empty>
109
+ </Listbox.Content>
110
+ </Listbox.Root>
111
+
112
+ {#if name}
113
+ {#each value ?? [] as v, i (v)}
114
+ <input type="hidden" name="{name}[{i}]" value={v ?? ''} />
115
+ {/each}
116
+ {/if}
@@ -0,0 +1,27 @@
1
+ export type { ListboxItem, ListboxProps } from './types';
2
+ import { Listbox } from '@ark-ui/svelte/listbox';
3
+ import type { ListboxProps } from './types';
4
+ declare function $$render<T extends number | string = number | string>(): {
5
+ props: ListboxProps<T>;
6
+ exports: {};
7
+ bindings: "value";
8
+ slots: {};
9
+ events: {};
10
+ };
11
+ declare class __sveltets_Render<T extends number | string = number | string> {
12
+ props(): ReturnType<typeof $$render<T>>['props'];
13
+ events(): ReturnType<typeof $$render<T>>['events'];
14
+ slots(): ReturnType<typeof $$render<T>>['slots'];
15
+ bindings(): "value";
16
+ exports(): {};
17
+ }
18
+ interface $$IsomorphicComponent {
19
+ new <T extends number | string = number | string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
20
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
21
+ } & ReturnType<__sveltets_Render<T>['exports']>;
22
+ <T extends number | string = number | string>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
23
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
24
+ }
25
+ declare const Listbox: $$IsomorphicComponent;
26
+ type Listbox<T extends number | string = number | string> = InstanceType<typeof Listbox<T>>;
27
+ export default Listbox;
@@ -0,0 +1,16 @@
1
+ import type { ListboxRootBaseProps } from '@ark-ui/svelte/listbox';
2
+ export interface ListboxItem<T = number | string> {
3
+ value: T;
4
+ label: string;
5
+ disabled?: boolean;
6
+ group?: string;
7
+ }
8
+ export interface ListboxProps<T extends number | string = number | string> extends Omit<ListboxRootBaseProps<ListboxItem<T>>, 'collection' | 'value'> {
9
+ items: ListboxItem<T>[];
10
+ value?: T[];
11
+ label?: string;
12
+ name?: string;
13
+ filterable?: boolean;
14
+ filterPlaceholder?: string;
15
+ class?: string;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ export { default as Root } from './menu.svelte';
2
+ export { default as Trigger } from './menu-trigger.svelte';
3
+ export { default as Indicator } from './menu-indicator.svelte';
4
+ export { default as ContextTrigger } from './menu-context-trigger.svelte';
5
+ export { default as Content } from './menu-content.svelte';
6
+ export { default as Item } from './menu-item.svelte';
7
+ export { default as ItemGroup } from './menu-item-group.svelte';
8
+ export { default as ItemGroupLabel } from './menu-item-group-label.svelte';
9
+ export { default as ItemIndicator } from './menu-item-indicator.svelte';
10
+ export { default as CheckboxItem } from './menu-checkbox-item.svelte';
11
+ export { default as RadioItemGroup } from './menu-radio-item-group.svelte';
12
+ export { default as RadioItem } from './menu-radio-item.svelte';
13
+ export { default as TriggerItem } from './menu-trigger-item.svelte';
14
+ export { default as Separator } from './menu-separator.svelte';
@@ -0,0 +1,14 @@
1
+ export { default as Root } from './menu.svelte';
2
+ export { default as Trigger } from './menu-trigger.svelte';
3
+ export { default as Indicator } from './menu-indicator.svelte';
4
+ export { default as ContextTrigger } from './menu-context-trigger.svelte';
5
+ export { default as Content } from './menu-content.svelte';
6
+ export { default as Item } from './menu-item.svelte';
7
+ export { default as ItemGroup } from './menu-item-group.svelte';
8
+ export { default as ItemGroupLabel } from './menu-item-group-label.svelte';
9
+ export { default as ItemIndicator } from './menu-item-indicator.svelte';
10
+ export { default as CheckboxItem } from './menu-checkbox-item.svelte';
11
+ export { default as RadioItemGroup } from './menu-radio-item-group.svelte';
12
+ export { default as RadioItem } from './menu-radio-item.svelte';
13
+ export { default as TriggerItem } from './menu-trigger-item.svelte';
14
+ export { default as Separator } from './menu-separator.svelte';
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuCheckboxItemBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+ import MenuItemIndicator from './menu-item-indicator.svelte';
7
+ import PhCheck from '../../icons/PhCheck.svelte';
8
+
9
+ type IndicatorSnippet = { indicator?: Snippet };
10
+
11
+ type Props = MenuCheckboxItemBaseProps & { class?: string; children: Snippet } & IndicatorSnippet;
12
+
13
+ const { class: className, children, indicator, ...restProps }: Props = $props();
14
+ </script>
15
+
16
+ <Menu.CheckboxItem
17
+ {...restProps}
18
+ class={cn(
19
+ 'relative flex cursor-default items-center justify-between gap-4 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-highlighted:bg-surface-2 data-highlighted:text-ink',
20
+ className
21
+ )}
22
+ >
23
+ {@render children()}
24
+ <MenuItemIndicator>
25
+ {#if indicator}
26
+ {@render indicator()}
27
+ {:else}
28
+ <PhCheck />
29
+ {/if}
30
+ </MenuItemIndicator>
31
+ </Menu.CheckboxItem>
@@ -0,0 +1,12 @@
1
+ import type { MenuCheckboxItemBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type IndicatorSnippet = {
4
+ indicator?: Snippet;
5
+ };
6
+ type Props = MenuCheckboxItemBaseProps & {
7
+ class?: string;
8
+ children: Snippet;
9
+ } & IndicatorSnippet;
10
+ declare const MenuCheckboxItem: import("svelte").Component<Props, {}, "">;
11
+ type MenuCheckboxItem = ReturnType<typeof MenuCheckboxItem>;
12
+ export default MenuCheckboxItem;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { Snippet } from 'svelte';
4
+ import { cn } from 'tailwind-variants';
5
+
6
+ type Props = {
7
+ class?: string;
8
+ children: Snippet;
9
+ };
10
+
11
+ const { class: className, children }: Props = $props();
12
+ </script>
13
+
14
+ <Menu.Positioner>
15
+ <Menu.Content
16
+ class={cn(
17
+ 'z-50 min-w-32 overflow-hidden rounded-md border bg-surface-1 p-1 text-ink shadow-md outline-none',
18
+ className
19
+ )}
20
+ >
21
+ {@render children()}
22
+ </Menu.Content>
23
+ </Menu.Positioner>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ class?: string;
4
+ children: Snippet;
5
+ };
6
+ declare const MenuContent: import("svelte").Component<Props, {}, "">;
7
+ type MenuContent = ReturnType<typeof MenuContent>;
8
+ export default MenuContent;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { Snippet } from 'svelte';
4
+ import { cn } from 'tailwind-variants';
5
+
6
+ type Props = {
7
+ class?: string;
8
+ children: Snippet;
9
+ };
10
+
11
+ const { class: className, children }: Props = $props();
12
+ </script>
13
+
14
+ <Menu.ContextTrigger>
15
+ {#snippet asChild(props)}
16
+ <div {...props()} class={cn(props().class, className)}>
17
+ {@render children()}
18
+ </div>
19
+ {/snippet}
20
+ </Menu.ContextTrigger>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ class?: string;
4
+ children: Snippet;
5
+ };
6
+ declare const MenuContextTrigger: import("svelte").Component<Props, {}, "">;
7
+ type MenuContextTrigger = ReturnType<typeof MenuContextTrigger>;
8
+ export default MenuContextTrigger;
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuIndicatorBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+ import PhCaretDown from '../../icons/PhCaretDown.svelte';
7
+
8
+ type Props = MenuIndicatorBaseProps & { class?: string; children?: Snippet };
9
+
10
+ const { class: className, children, ...restProps }: Props = $props();
11
+ </script>
12
+
13
+ <Menu.Indicator {...restProps} class={cn('transition-transform data-open:rotate-180', className)}>
14
+ {#if children}
15
+ {@render children()}
16
+ {:else}
17
+ <PhCaretDown />
18
+ {/if}
19
+ </Menu.Indicator>
@@ -0,0 +1,9 @@
1
+ import type { MenuIndicatorBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuIndicatorBaseProps & {
4
+ class?: string;
5
+ children?: Snippet;
6
+ };
7
+ declare const MenuIndicator: import("svelte").Component<Props, {}, "">;
8
+ type MenuIndicator = ReturnType<typeof MenuIndicator>;
9
+ export default MenuIndicator;
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuItemGroupLabelBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+
7
+ type Props = MenuItemGroupLabelBaseProps & { class?: string; children: Snippet };
8
+
9
+ const { class: className, children, ...restProps }: Props = $props();
10
+ </script>
11
+
12
+ <Menu.ItemGroupLabel
13
+ {...restProps}
14
+ class={cn('px-2 py-1.5 text-xs font-medium text-ink-dim', className)}
15
+ >
16
+ {@render children()}
17
+ </Menu.ItemGroupLabel>
@@ -0,0 +1,9 @@
1
+ import type { MenuItemGroupLabelBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuItemGroupLabelBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ };
7
+ declare const MenuItemGroupLabel: import("svelte").Component<Props, {}, "">;
8
+ type MenuItemGroupLabel = ReturnType<typeof MenuItemGroupLabel>;
9
+ export default MenuItemGroupLabel;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuItemGroupBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+
7
+ type Props = MenuItemGroupBaseProps & { class?: string; children: Snippet };
8
+
9
+ const { class: className, children, ...restProps }: Props = $props();
10
+ </script>
11
+
12
+ <Menu.ItemGroup {...restProps} class={cn('', className)}>
13
+ {@render children()}
14
+ </Menu.ItemGroup>
@@ -0,0 +1,9 @@
1
+ import type { MenuItemGroupBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuItemGroupBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ };
7
+ declare const MenuItemGroup: import("svelte").Component<Props, {}, "">;
8
+ type MenuItemGroup = ReturnType<typeof MenuItemGroup>;
9
+ export default MenuItemGroup;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuItemIndicatorBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+
7
+ type Props = MenuItemIndicatorBaseProps & { class?: string; children: Snippet };
8
+
9
+ const { class: className, children, ...restProps }: Props = $props();
10
+ </script>
11
+
12
+ <Menu.ItemIndicator {...restProps} class={cn('flex items-center justify-center', className)}>
13
+ {@render children()}
14
+ </Menu.ItemIndicator>
@@ -0,0 +1,9 @@
1
+ import type { MenuItemIndicatorBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuItemIndicatorBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ };
7
+ declare const MenuItemIndicator: import("svelte").Component<Props, {}, "">;
8
+ type MenuItemIndicator = ReturnType<typeof MenuItemIndicator>;
9
+ export default MenuItemIndicator;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuItemBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+
7
+ type Props = MenuItemBaseProps & { class?: string; children: Snippet };
8
+
9
+ const { class: className, children, ...restProps }: Props = $props();
10
+ </script>
11
+
12
+ <Menu.Item
13
+ {...restProps}
14
+ class={cn(
15
+ 'relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-highlighted:bg-surface-2 data-highlighted:text-ink',
16
+ className
17
+ )}
18
+ >
19
+ {@render children()}
20
+ </Menu.Item>
@@ -0,0 +1,9 @@
1
+ import type { MenuItemBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuItemBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ };
7
+ declare const MenuItem: import("svelte").Component<Props, {}, "">;
8
+ type MenuItem = ReturnType<typeof MenuItem>;
9
+ export default MenuItem;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuRadioItemGroupBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+
7
+ type Props = MenuRadioItemGroupBaseProps & { class?: string; children: Snippet };
8
+
9
+ const { class: className, children, ...restProps }: Props = $props();
10
+ </script>
11
+
12
+ <Menu.RadioItemGroup {...restProps} class={cn('', className)}>
13
+ {@render children()}
14
+ </Menu.RadioItemGroup>
@@ -0,0 +1,9 @@
1
+ import type { MenuRadioItemGroupBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuRadioItemGroupBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ };
7
+ declare const MenuRadioItemGroup: import("svelte").Component<Props, {}, "">;
8
+ type MenuRadioItemGroup = ReturnType<typeof MenuRadioItemGroup>;
9
+ export default MenuRadioItemGroup;
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuRadioItemBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+ import MenuItemIndicator from './menu-item-indicator.svelte';
7
+
8
+ type Props = MenuRadioItemBaseProps & { class?: string; children: Snippet; indicator?: Snippet };
9
+
10
+ const { class: className, children, indicator, ...restProps }: Props = $props();
11
+ </script>
12
+
13
+ <Menu.RadioItem
14
+ {...restProps}
15
+ class={cn(
16
+ 'relative flex cursor-default items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-highlighted:bg-surface-2 data-highlighted:text-ink',
17
+ className
18
+ )}
19
+ >
20
+ {@render children()}
21
+ <MenuItemIndicator>
22
+ {#if indicator}
23
+ {@render indicator()}
24
+ {:else}
25
+
26
+ {/if}
27
+ </MenuItemIndicator>
28
+ </Menu.RadioItem>
@@ -0,0 +1,10 @@
1
+ import type { MenuRadioItemBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuRadioItemBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ indicator?: Snippet;
7
+ };
8
+ declare const MenuRadioItem: import("svelte").Component<Props, {}, "">;
9
+ type MenuRadioItem = ReturnType<typeof MenuRadioItem>;
10
+ export default MenuRadioItem;
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuSeparatorBaseProps } from '@ark-ui/svelte/menu';
4
+ import { cn } from 'tailwind-variants';
5
+
6
+ type Props = MenuSeparatorBaseProps & { class?: string };
7
+
8
+ const { class: className, ...restProps }: Props = $props();
9
+ </script>
10
+
11
+ <Menu.Separator {...restProps} class={cn('-mx-1 my-1 h-px bg-surface-3', className)} />
@@ -0,0 +1,7 @@
1
+ import type { MenuSeparatorBaseProps } from '@ark-ui/svelte/menu';
2
+ type Props = MenuSeparatorBaseProps & {
3
+ class?: string;
4
+ };
5
+ declare const MenuSeparator: import("svelte").Component<Props, {}, "">;
6
+ type MenuSeparator = ReturnType<typeof MenuSeparator>;
7
+ export default MenuSeparator;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuTriggerItemBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { cn } from 'tailwind-variants';
6
+
7
+ type Props = MenuTriggerItemBaseProps & { class?: string; children: Snippet };
8
+
9
+ const { class: className, children, ...restProps }: Props = $props();
10
+ </script>
11
+
12
+ <Menu.TriggerItem
13
+ {...restProps}
14
+ class={cn(
15
+ 'relative flex cursor-default items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-highlighted:bg-surface-2 data-highlighted:text-ink',
16
+ className
17
+ )}
18
+ >
19
+ {@render children()}
20
+ </Menu.TriggerItem>
@@ -0,0 +1,9 @@
1
+ import type { MenuTriggerItemBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ type Props = MenuTriggerItemBaseProps & {
4
+ class?: string;
5
+ children: Snippet;
6
+ };
7
+ declare const MenuTriggerItem: import("svelte").Component<Props, {}, "">;
8
+ type MenuTriggerItem = ReturnType<typeof MenuTriggerItem>;
9
+ export default MenuTriggerItem;
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuTriggerBaseProps } from '@ark-ui/svelte/menu';
4
+ import type { Snippet } from 'svelte';
5
+ import { button, type ButtonVariant, type ButtonSize } from '../button/button.variants';
6
+
7
+ type Props = MenuTriggerBaseProps & {
8
+ variant?: ButtonVariant;
9
+ size?: ButtonSize;
10
+ class?: string;
11
+ children: Snippet;
12
+ };
13
+
14
+ const { variant, size, class: className, children, ...restProps }: Props = $props();
15
+ </script>
16
+
17
+ <Menu.Trigger {...restProps} class={button({ variant, size, class: className })}>
18
+ {@render children()}
19
+ </Menu.Trigger>
@@ -0,0 +1,12 @@
1
+ import type { MenuTriggerBaseProps } from '@ark-ui/svelte/menu';
2
+ import type { Snippet } from 'svelte';
3
+ import { type ButtonVariant, type ButtonSize } from '../button/button.variants';
4
+ type Props = MenuTriggerBaseProps & {
5
+ variant?: ButtonVariant;
6
+ size?: ButtonSize;
7
+ class?: string;
8
+ children: Snippet;
9
+ };
10
+ declare const MenuTrigger: import("svelte").Component<Props, {}, "">;
11
+ type MenuTrigger = ReturnType<typeof MenuTrigger>;
12
+ export default MenuTrigger;
@@ -0,0 +1,12 @@
1
+ <script lang="ts">
2
+ import { Menu } from '@ark-ui/svelte/menu';
3
+ import type { MenuRootBaseProps } from '@ark-ui/svelte/menu';
4
+
5
+ type Props = MenuRootBaseProps;
6
+
7
+ const { children, ...restProps }: Props = $props();
8
+ </script>
9
+
10
+ <Menu.Root {...restProps}>
11
+ {@render children?.()}
12
+ </Menu.Root>
@@ -0,0 +1,4 @@
1
+ import { Menu } from '@ark-ui/svelte/menu';
2
+ declare const Menu: import("svelte").Component<Menu.RootBaseProps, {}, "">;
3
+ type Menu = ReturnType<typeof Menu>;
4
+ export default Menu;