bits-ui 0.0.33 → 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 (157) hide show
  1. package/dist/bits/accordion/components/Accordion.svelte +5 -3
  2. package/dist/bits/accordion/components/AccordionContent.svelte +32 -11
  3. package/dist/bits/accordion/components/AccordionContent.svelte.d.ts +9 -5
  4. package/dist/bits/accordion/components/AccordionTrigger.svelte +3 -1
  5. package/dist/bits/accordion/types.d.ts +5 -8
  6. package/dist/bits/alert-dialog/components/AlertDialog.svelte +37 -5
  7. package/dist/bits/alert-dialog/components/AlertDialogAction.svelte +6 -2
  8. package/dist/bits/alert-dialog/components/AlertDialogAction.svelte.d.ts +2 -1
  9. package/dist/bits/alert-dialog/components/AlertDialogCancel.svelte +6 -2
  10. package/dist/bits/alert-dialog/components/AlertDialogCancel.svelte.d.ts +2 -1
  11. package/dist/bits/alert-dialog/components/AlertDialogContent.svelte +45 -6
  12. package/dist/bits/alert-dialog/components/AlertDialogContent.svelte.d.ts +10 -6
  13. package/dist/bits/alert-dialog/components/AlertDialogOverlay.svelte +33 -5
  14. package/dist/bits/alert-dialog/components/AlertDialogPortal.svelte +7 -8
  15. package/dist/bits/alert-dialog/components/AlertDialogTrigger.svelte +6 -2
  16. package/dist/bits/alert-dialog/ctx.d.ts +9 -6
  17. package/dist/bits/alert-dialog/ctx.js +6 -3
  18. package/dist/bits/alert-dialog/types.d.ts +7 -10
  19. package/dist/bits/button/types.d.ts +4 -0
  20. package/dist/bits/checkbox/components/Checkbox.svelte +7 -3
  21. package/dist/bits/checkbox/components/CheckboxIndicator.svelte +3 -1
  22. package/dist/bits/checkbox/ctx.d.ts +0 -35
  23. package/dist/bits/checkbox/ctx.js +2 -17
  24. package/dist/bits/checkbox/index.d.ts +2 -1
  25. package/dist/bits/checkbox/index.js +4 -1
  26. package/dist/bits/checkbox/types.d.ts +3 -3
  27. package/dist/bits/collapsible/components/Collapsible.svelte +4 -2
  28. package/dist/bits/collapsible/components/CollapsibleContent.svelte +36 -12
  29. package/dist/bits/collapsible/components/CollapsibleContent.svelte.d.ts +9 -5
  30. package/dist/bits/collapsible/components/CollapsibleTrigger.svelte +6 -2
  31. package/dist/bits/collapsible/types.d.ts +4 -7
  32. package/dist/bits/context-menu/components/ContextMenu.svelte +5 -3
  33. package/dist/bits/context-menu/components/ContextMenuCheckboxItem.svelte +9 -7
  34. package/dist/bits/context-menu/components/ContextMenuContent.svelte +58 -11
  35. package/dist/bits/context-menu/components/ContextMenuContent.svelte.d.ts +11 -8
  36. package/dist/bits/context-menu/components/ContextMenuItem.svelte +12 -8
  37. package/dist/bits/context-menu/components/ContextMenuRadioItem.svelte +9 -7
  38. package/dist/bits/context-menu/components/ContextMenuSubContent.svelte +68 -19
  39. package/dist/bits/context-menu/components/ContextMenuSubContent.svelte.d.ts +13 -12
  40. package/dist/bits/context-menu/components/ContextMenuSubTrigger.svelte +9 -6
  41. package/dist/bits/context-menu/components/ContextMenuTrigger.svelte +11 -6
  42. package/dist/bits/context-menu/ctx.d.ts +1 -1
  43. package/dist/bits/context-menu/ctx.js +3 -3
  44. package/dist/bits/context-menu/types.d.ts +26 -29
  45. package/dist/bits/dialog/components/Dialog.svelte +36 -4
  46. package/dist/bits/dialog/components/Dialog.svelte.d.ts +1 -1
  47. package/dist/bits/dialog/components/DialogClose.svelte +6 -2
  48. package/dist/bits/dialog/components/DialogClose.svelte.d.ts +2 -1
  49. package/dist/bits/dialog/components/DialogContent.svelte +45 -6
  50. package/dist/bits/dialog/components/DialogContent.svelte.d.ts +10 -6
  51. package/dist/bits/dialog/components/DialogOverlay.svelte +33 -5
  52. package/dist/bits/dialog/components/DialogPortal.svelte +8 -3
  53. package/dist/bits/dialog/components/DialogPortal.svelte.d.ts +3 -1
  54. package/dist/bits/dialog/components/DialogTrigger.svelte +6 -2
  55. package/dist/bits/dialog/ctx.d.ts +9 -6
  56. package/dist/bits/dialog/ctx.js +6 -2
  57. package/dist/bits/dialog/types.d.ts +8 -11
  58. package/dist/bits/dropdown-menu/components/DropdownMenu.svelte +4 -2
  59. package/dist/bits/dropdown-menu/components/DropdownMenuCheckboxItem.svelte +9 -7
  60. package/dist/bits/dropdown-menu/components/DropdownMenuCheckboxItem.svelte.d.ts +2 -1
  61. package/dist/bits/dropdown-menu/components/DropdownMenuContent.svelte +57 -11
  62. package/dist/bits/dropdown-menu/components/DropdownMenuContent.svelte.d.ts +11 -8
  63. package/dist/bits/dropdown-menu/components/DropdownMenuItem.svelte +13 -9
  64. package/dist/bits/dropdown-menu/components/DropdownMenuRadioItem.svelte +9 -7
  65. package/dist/bits/dropdown-menu/components/DropdownMenuRadioItem.svelte.d.ts +2 -1
  66. package/dist/bits/dropdown-menu/components/DropdownMenuSubContent.svelte +68 -20
  67. package/dist/bits/dropdown-menu/components/DropdownMenuSubContent.svelte.d.ts +12 -11
  68. package/dist/bits/dropdown-menu/components/DropdownMenuSubTrigger.svelte +12 -8
  69. package/dist/bits/dropdown-menu/components/DropdownMenuSubTrigger.svelte.d.ts +2 -1
  70. package/dist/bits/dropdown-menu/components/DropdownMenuTrigger.svelte +5 -3
  71. package/dist/bits/dropdown-menu/types.d.ts +27 -20
  72. package/dist/bits/label/components/Label.svelte +6 -2
  73. package/dist/bits/label/components/Label.svelte.d.ts +2 -3
  74. package/dist/bits/label/types.d.ts +4 -2
  75. package/dist/bits/link-preview/components/LinkPreview.svelte +4 -2
  76. package/dist/bits/link-preview/components/LinkPreviewContent.svelte +72 -26
  77. package/dist/bits/link-preview/components/LinkPreviewContent.svelte.d.ts +12 -12
  78. package/dist/bits/link-preview/components/LinkPreviewTrigger.svelte +9 -5
  79. package/dist/bits/link-preview/components/LinkPreviewTrigger.svelte.d.ts +2 -6
  80. package/dist/bits/link-preview/types.d.ts +17 -8
  81. package/dist/bits/menubar/components/Menubar.svelte +1 -1
  82. package/dist/bits/menubar/components/MenubarCheckboxItem.svelte +9 -7
  83. package/dist/bits/menubar/components/MenubarCheckboxItem.svelte.d.ts +2 -1
  84. package/dist/bits/menubar/components/MenubarContent.svelte +58 -10
  85. package/dist/bits/menubar/components/MenubarItem.svelte +13 -9
  86. package/dist/bits/menubar/components/MenubarMenu.svelte +4 -2
  87. package/dist/bits/menubar/components/MenubarRadioItem.svelte +12 -8
  88. package/dist/bits/menubar/components/MenubarRadioItem.svelte.d.ts +2 -1
  89. package/dist/bits/menubar/components/MenubarSubContent.svelte +74 -7
  90. package/dist/bits/menubar/components/MenubarSubTrigger.svelte +12 -8
  91. package/dist/bits/menubar/components/MenubarSubTrigger.svelte.d.ts +8 -1
  92. package/dist/bits/menubar/components/MenubarTrigger.svelte +12 -2
  93. package/dist/bits/menubar/ctx.d.ts +2 -2
  94. package/dist/bits/menubar/ctx.js +5 -5
  95. package/dist/bits/menubar/types.d.ts +30 -15
  96. package/dist/bits/popover/components/Popover.svelte +4 -2
  97. package/dist/bits/popover/components/PopoverClose.svelte +6 -2
  98. package/dist/bits/popover/components/PopoverContent.svelte +35 -11
  99. package/dist/bits/popover/components/PopoverContent.svelte.d.ts +9 -5
  100. package/dist/bits/popover/components/PopoverTrigger.svelte +6 -2
  101. package/dist/bits/popover/types.d.ts +6 -9
  102. package/dist/bits/radio-group/components/RadioGroup.svelte +4 -2
  103. package/dist/bits/radio-group/components/RadioGroupInput.svelte +3 -3
  104. package/dist/bits/radio-group/components/RadioGroupInput.svelte.d.ts +6 -8
  105. package/dist/bits/radio-group/components/RadioGroupItem.svelte +12 -2
  106. package/dist/bits/radio-group/ctx.d.ts +5 -5
  107. package/dist/bits/radio-group/types.d.ts +5 -4
  108. package/dist/bits/select/components/Select.svelte +18 -12
  109. package/dist/bits/select/components/Select.svelte.d.ts +3 -3
  110. package/dist/bits/select/components/SelectContent.svelte +57 -11
  111. package/dist/bits/select/components/SelectContent.svelte.d.ts +11 -8
  112. package/dist/bits/select/components/SelectInput.svelte.d.ts +1 -1
  113. package/dist/bits/select/components/SelectItem.svelte +11 -7
  114. package/dist/bits/select/components/SelectLabel.svelte.d.ts +2 -3
  115. package/dist/bits/select/components/SelectTrigger.svelte +3 -1
  116. package/dist/bits/select/components/SelectValue.svelte +5 -3
  117. package/dist/bits/select/components/SelectValue.svelte.d.ts +1 -1
  118. package/dist/bits/select/ctx.d.ts +15 -15
  119. package/dist/bits/select/ctx.js +1 -3
  120. package/dist/bits/select/types.d.ts +23 -19
  121. package/dist/bits/slider/components/Slider.svelte +4 -2
  122. package/dist/bits/slider/components/SliderThumb.svelte +3 -1
  123. package/dist/bits/slider/components/SliderThumb.svelte.d.ts +2 -4
  124. package/dist/bits/slider/ctx.d.ts +0 -1
  125. package/dist/bits/slider/types.d.ts +5 -2
  126. package/dist/bits/switch/components/Switch.svelte +7 -3
  127. package/dist/bits/switch/types.d.ts +4 -4
  128. package/dist/bits/tabs/components/Tabs.svelte +4 -2
  129. package/dist/bits/tabs/components/TabsTrigger.svelte +9 -1
  130. package/dist/bits/tabs/types.d.ts +5 -4
  131. package/dist/bits/toggle/components/Toggle.svelte +7 -3
  132. package/dist/bits/toggle/types.d.ts +4 -4
  133. package/dist/bits/tooltip/components/Tooltip.svelte +8 -2
  134. package/dist/bits/tooltip/components/Tooltip.svelte.d.ts +1 -0
  135. package/dist/bits/tooltip/components/TooltipContent.svelte +58 -18
  136. package/dist/bits/tooltip/components/TooltipContent.svelte.d.ts +13 -11
  137. package/dist/bits/tooltip/components/TooltipTrigger.svelte +8 -6
  138. package/dist/bits/tooltip/components/TooltipTrigger.svelte.d.ts +2 -8
  139. package/dist/bits/tooltip/ctx.js +1 -2
  140. package/dist/bits/tooltip/types.d.ts +18 -9
  141. package/dist/helpers/event-handlers.d.ts +3 -8
  142. package/dist/internal/events.d.ts +12 -0
  143. package/dist/internal/events.js +13 -0
  144. package/dist/internal/helpers.d.ts +12 -1
  145. package/dist/internal/helpers.js +65 -0
  146. package/dist/internal/index.d.ts +2 -0
  147. package/dist/internal/index.js +2 -0
  148. package/dist/internal/is.d.ts +1 -0
  149. package/dist/internal/is.js +1 -0
  150. package/dist/internal/overlay.svelte +10 -0
  151. package/dist/internal/overlay.svelte.d.ts +14 -0
  152. package/dist/internal/types.d.ts +30 -0
  153. package/package.json +17 -10
  154. package/dist/bits/alert-dialog/components/AlertDialogOverlay.svelte.d.ts +0 -240
  155. package/dist/bits/dialog/components/DialogOverlay.svelte.d.ts +0 -240
  156. package/dist/bits/menubar/components/MenubarContent.svelte.d.ts +0 -229
  157. package/dist/bits/menubar/components/MenubarSubContent.svelte.d.ts +0 -230
@@ -1,9 +1,14 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { Transition } from "../../../internal/types.js";
3
- declare class __sveltets_Render<T extends Transition> {
2
+ import { type Transition } from "../../../internal/index.js";
3
+ import type { SubContentEvents } from "../types.js";
4
+ declare class __sveltets_Render<T extends Transition, In extends Transition, Out extends Transition> {
4
5
  props(): {
5
6
  transition?: T | undefined;
6
- transitionConfig?: import("../../../internal/types.js").TransitionParams<T> | undefined;
7
+ transitionConfig?: import("../../../internal/index.js").TransitionParams<T> | undefined;
8
+ inTransition?: In | undefined;
9
+ inTransitionConfig?: import("../../../internal/index.js").TransitionParams<In> | undefined;
10
+ outTransition?: Out | undefined;
11
+ outTransitionConfig?: import("../../../internal/index.js").TransitionParams<Out> | undefined;
7
12
  asChild?: boolean | undefined;
8
13
  accesskey?: string | null | undefined;
9
14
  autofocus?: boolean | null | undefined;
@@ -214,20 +219,16 @@ declare class __sveltets_Render<T extends Transition> {
214
219
  'on:fullscreenchange'?: import("svelte/elements.js").EventHandler<Event, HTMLDivElement> | null | undefined;
215
220
  'on:fullscreenerror'?: import("svelte/elements.js").EventHandler<Event, HTMLDivElement> | null | undefined;
216
221
  };
217
- events(): {
218
- "m-keydown"?: import("@melt-ui/svelte/internal/types").MeltEventHandler<KeyboardEvent> | undefined;
219
- "m-focusout"?: import("@melt-ui/svelte/internal/types").MeltEventHandler<FocusEvent> | undefined;
220
- "m-pointermove"?: import("@melt-ui/svelte/internal/types").MeltEventHandler<PointerEvent> | undefined;
221
- };
222
+ events(): SubContentEvents;
222
223
  slots(): {
223
224
  default: {
224
225
  builder: any;
225
226
  };
226
227
  };
227
228
  }
228
- export type ContextMenuSubContentProps<T extends Transition> = ReturnType<__sveltets_Render<T>['props']>;
229
- export type ContextMenuSubContentEvents<T extends Transition> = ReturnType<__sveltets_Render<T>['events']>;
230
- export type ContextMenuSubContentSlots<T extends Transition> = ReturnType<__sveltets_Render<T>['slots']>;
231
- export default class ContextMenuSubContent<T extends Transition> extends SvelteComponent<ContextMenuSubContentProps<T>, ContextMenuSubContentEvents<T>, ContextMenuSubContentSlots<T>> {
229
+ export type ContextMenuSubContentProps<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['props']>;
230
+ export type ContextMenuSubContentEvents<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['events']>;
231
+ export type ContextMenuSubContentSlots<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['slots']>;
232
+ export default class ContextMenuSubContent<T extends Transition, In extends Transition, Out extends Transition> extends SvelteComponent<ContextMenuSubContentProps<T, In, Out>, ContextMenuSubContentEvents<T, In, Out>, ContextMenuSubContentSlots<T, In, Out>> {
232
233
  }
233
234
  export {};
@@ -1,11 +1,13 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
3
  import { disabledAttrs } from "../../../internal/helpers.js";
4
+ import { createDispatcher } from "../../../internal/events.js";
4
5
  export let disabled = false;
5
6
  export let asChild = false;
6
7
  const {
7
8
  elements: { subTrigger }
8
9
  } = ctx.getSubTrigger();
10
+ const dispatch = createDispatcher();
9
11
  </script>
10
12
 
11
13
  <!-- svelte-ignore a11y-no-static-element-interactions / applied by melt store -->
@@ -16,12 +18,13 @@ const {
16
18
  <div
17
19
  {...builder} use:builder.action
18
20
  {...$$restProps}
19
- on:m-click
20
- on:m-focusin
21
- on:m-focusout
22
- on:m-keydown
23
- on:m-pointerleave
24
- on:m-pointermove
21
+ on:m-click={dispatch}
22
+ on:m-focusin={dispatch}
23
+ on:m-focusout={dispatch}
24
+ on:m-keydown={dispatch}
25
+ on:m-pointerleave={dispatch}
26
+ on:m-pointermove={dispatch}
27
+ on:m-keydown={dispatch}
25
28
  {...disabledAttrs(disabled)}
26
29
  >
27
30
  <slot {builder} />
@@ -1,7 +1,12 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
+ import Overlay from "../../../internal/overlay.svelte";
4
+ import { createDispatcher } from "../../../internal/events.js";
3
5
  export let asChild = false;
4
- const trigger = ctx.get().elements.trigger;
6
+ const {
7
+ elements: { trigger }
8
+ } = ctx.get();
9
+ const dispatch = createDispatcher();
5
10
  </script>
6
11
 
7
12
  <!-- svelte-ignore a11y-no-static-element-interactions applied by melt's action/store -->
@@ -12,11 +17,11 @@ const trigger = ctx.get().elements.trigger;
12
17
  <div
13
18
  {...builder} use:builder.action
14
19
  {...$$restProps}
15
- on:m-contextmenu
16
- on:m-pointercancel
17
- on:m-pointerdown
18
- on:m-pointermove
19
- on:m-pointerup
20
+ on:m-contextmenu={dispatch}
21
+ on:m-pointercancel={dispatch}
22
+ on:m-pointerdown={dispatch}
23
+ on:m-pointermove={dispatch}
24
+ on:m-pointerup={dispatch}
20
25
  >
21
26
  <slot {builder} />
22
27
  </div>
@@ -18,7 +18,6 @@ export declare const ctx: {
18
18
  getGroupLabel: typeof getGroupLabel;
19
19
  setArrow: typeof setArrow;
20
20
  };
21
- declare function get(): ContextMenuReturn;
22
21
  declare function set(props: CreateContextMenuProps): {
23
22
  updateOption: <K extends string, V extends unknown>(key: K, value: V | undefined) => void;
24
23
  elements: {
@@ -194,6 +193,7 @@ declare function set(props: CreateContextMenuProps): {
194
193
  forceVisible: import("svelte/store").Writable<boolean>;
195
194
  };
196
195
  };
196
+ declare function get(): ContextMenuReturn;
197
197
  declare function setSub(props: CreateContextSubmenuProps): {
198
198
  updateOption: <K extends string, V extends unknown>(key: K, value: V | undefined) => void;
199
199
  elements: {
@@ -24,9 +24,6 @@ export const ctx = {
24
24
  getGroupLabel,
25
25
  setArrow
26
26
  };
27
- function get() {
28
- return getContext(NAME);
29
- }
30
27
  function set(props) {
31
28
  const contextMenu = createContextMenu(removeUndefined(props));
32
29
  setContext(NAME, contextMenu);
@@ -35,6 +32,9 @@ function set(props) {
35
32
  updateOption: getOptionUpdater(contextMenu.options)
36
33
  };
37
34
  }
35
+ function get() {
36
+ return getContext(NAME);
37
+ }
38
38
  function setSub(props) {
39
39
  const { builders: { createSubmenu } } = get();
40
40
  const sub = createSubmenu(removeUndefined(props));
@@ -1,6 +1,6 @@
1
- import type { AsChild, Expand, HTMLDivAttributes, OmitChecked, OmitOpen, OmitValue, OnChangeFn, Transition, TransitionParams } from "../../internal/index.js";
2
- import type { DivEventHandler } from "../..";
3
- import type { CreateContextMenuProps, CreateContextMenuCheckboxItemProps, CreateContextMenuRadioGroupProps, ContextMenuRadioItemProps, CreateContextSubmenuProps, ContextMenuComponentEvents } from "@melt-ui/svelte";
1
+ import type { AsChild, Expand, HTMLDivAttributes, OmitChecked, OmitOpen, OmitValue, OnChangeFn, Transition, TransitionProps } from "../../internal/index.js";
2
+ import type { CustomEventHandler } from "../..";
3
+ import type { CreateContextMenuProps, CreateContextMenuCheckboxItemProps, CreateContextMenuRadioGroupProps, ContextMenuRadioItemProps, CreateContextSubmenuProps } from "@melt-ui/svelte";
4
4
  type Props = Expand<OmitOpen<CreateContextMenuProps> & {
5
5
  open?: CreateContextMenuProps["defaultOpen"] & {};
6
6
  onOpenChange?: OnChangeFn<CreateContextMenuProps["defaultOpen"]>;
@@ -14,11 +14,9 @@ type RadioGroupProps = Expand<OmitValue<CreateContextMenuRadioGroupProps> & {
14
14
  onValueChange?: OnChangeFn<CreateContextMenuRadioGroupProps["defaultValue"]>;
15
15
  } & AsChild> & HTMLDivAttributes;
16
16
  type RadioItemProps = Expand<ContextMenuRadioItemProps & AsChild> & HTMLDivAttributes;
17
- type ContentProps<T extends Transition = Transition> = Expand<{
17
+ type ContentProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<{
18
18
  sideOffset?: number;
19
- transition?: T;
20
- transitionConfig?: TransitionParams<T>;
21
- } & AsChild> & HTMLDivAttributes;
19
+ } & TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
22
20
  type GroupProps = AsChild & HTMLDivAttributes;
23
21
  type ItemProps = Expand<{
24
22
  disabled?: boolean;
@@ -27,10 +25,7 @@ type CheckboxItemIndicatorProps = HTMLDivAttributes;
27
25
  type LabelProps = AsChild & HTMLDivAttributes;
28
26
  type SeparatorProps = AsChild & HTMLDivAttributes;
29
27
  type SubProps = Expand<CreateContextSubmenuProps>;
30
- type SubContentProps<T extends Transition = Transition> = Expand<{
31
- transition?: T;
32
- transitionConfig?: TransitionParams<T>;
33
- } & AsChild> & HTMLDivAttributes;
28
+ type SubContentProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
34
29
  type SubTriggerProps = Expand<{
35
30
  disabled?: boolean;
36
31
  } & AsChild> & HTMLDivAttributes;
@@ -38,26 +33,28 @@ type TriggerProps = AsChild & HTMLDivAttributes;
38
33
  type ArrowProps = Expand<{
39
34
  size?: number;
40
35
  } & AsChild> & HTMLDivAttributes;
41
- type CheckboxItemEvents = {
42
- "m-click": DivEventHandler<MouseEvent>;
43
- "m-keydown": DivEventHandler<KeyboardEvent>;
44
- };
45
- type ItemEvents = {
46
- "m-click": DivEventHandler<MouseEvent>;
47
- "m-keydown": DivEventHandler<KeyboardEvent>;
36
+ type ItemEvents<T extends Element = HTMLDivElement> = {
37
+ click: CustomEventHandler<MouseEvent, T>;
38
+ keydown: CustomEventHandler<KeyboardEvent, T>;
39
+ focusin: CustomEventHandler<FocusEvent, T>;
40
+ focusout: CustomEventHandler<FocusEvent, T>;
41
+ pointerdown: CustomEventHandler<PointerEvent, T>;
42
+ pointerleave: CustomEventHandler<PointerEvent, T>;
43
+ pointermove: CustomEventHandler<PointerEvent, T>;
48
44
  };
49
- type RadioItemEvents = {
50
- "m-click": DivEventHandler<MouseEvent>;
51
- "m-keydown": DivEventHandler<KeyboardEvent>;
45
+ type CheckboxItemEvents = ItemEvents;
46
+ type RadioItemEvents = ItemEvents;
47
+ type SubTriggerEvents = Omit<ItemEvents, "pointerdown">;
48
+ type TriggerEvents<T extends Element = HTMLDivElement> = {
49
+ pointerdown: CustomEventHandler<PointerEvent, T>;
50
+ contextmenu: CustomEventHandler<Event, T>;
52
51
  };
53
- type SubTriggerEvents = {
54
- "m-click": DivEventHandler<MouseEvent>;
55
- "m-keydown": DivEventHandler<KeyboardEvent>;
52
+ type SubContentEvents<T extends Element = HTMLDivElement> = {
53
+ keydown: CustomEventHandler<KeyboardEvent, T>;
54
+ focusout: CustomEventHandler<FocusEvent, T>;
55
+ pointermove: CustomEventHandler<PointerEvent, T>;
56
56
  };
57
- type TriggerEvents = {
58
- "m-pointerdown": DivEventHandler<MouseEvent>;
59
- "m-contextmenu": DivEventHandler<MouseEvent>;
57
+ type ContentEvents<T extends Element = HTMLDivElement> = {
58
+ keydown: CustomEventHandler<KeyboardEvent, T>;
60
59
  };
61
- type SubContentEvents = ContextMenuComponentEvents["submenu"];
62
- type ContentEvents = ContextMenuComponentEvents["menu"];
63
60
  export type { Props, ArrowProps, CheckboxItemProps, ContentProps, GroupProps, ItemProps, CheckboxItemIndicatorProps, LabelProps, RadioGroupProps, RadioItemProps, SeparatorProps, SubProps, SubContentProps, SubTriggerProps, TriggerProps, Props as ContextMenuProps, ArrowProps as ContextMenuArrowProps, CheckboxItemProps as ContextMenuCheckboxItemProps, ContentProps as ContextMenuContentProps, GroupProps as ContextMenuGroupProps, ItemProps as ContextMenuItemProps, CheckboxItemIndicatorProps as ContextMenuCheckboxItemIndicatorProps, LabelProps as ContextMenuLabelProps, RadioGroupProps as ContextMenuRadioGroupProps, RadioItemProps as ContextMenuRadioItemProps, SeparatorProps as ContextMenuSeparatorProps, SubProps as ContextMenuSubProps, SubContentProps as ContextMenuSubContentProps, SubTriggerProps as ContextMenuSubTriggerProps, TriggerProps as ContextMenuTriggerProps, ContentEvents, CheckboxItemEvents, ItemEvents, RadioItemEvents, SubTriggerEvents, TriggerEvents, SubContentEvents, ContentEvents as ContextMenuContentEvents, CheckboxItemEvents as ContextMenuCheckboxItemEvents, ItemEvents as ContextMenuItemEvents, RadioItemEvents as ContextMenuRadioItemEvents, SubTriggerEvents as ContextMenuSubTriggerEvents, TriggerEvents as ContextMenuTriggerEvents, SubContentEvents as ContextMenuSubContentEvents };
@@ -1,27 +1,59 @@
1
- <script>import { ctx } from "../ctx.js";
1
+ <script>import { onDestroy } from "svelte";
2
+ import { writable } from "svelte/store";
3
+ import { ctx } from "../ctx.js";
4
+ import { isBrowser } from "../../../internal/index.js";
2
5
  export let preventScroll = void 0;
3
6
  export let closeOnEscape = void 0;
4
7
  export let closeOnOutsideClick = void 0;
5
8
  export let portal = void 0;
6
- export let forceVisible = void 0;
9
+ export let forceVisible = true;
7
10
  export let open = void 0;
8
11
  export let onOpenChange = void 0;
12
+ const transitionTimes = writable({});
13
+ const tOpen = writable(open);
14
+ let timeout = 0;
9
15
  const {
10
16
  states: { open: localOpen },
11
17
  updateOption
12
18
  } = ctx.set({
13
- preventScroll,
14
19
  closeOnEscape,
20
+ preventScroll,
15
21
  closeOnOutsideClick,
16
22
  portal,
17
23
  forceVisible,
18
24
  defaultOpen: open,
25
+ transitionTimes,
26
+ tOpen,
19
27
  onOpenChange: ({ next }) => {
20
- onOpenChange?.(next);
28
+ if (open !== next) {
29
+ onOpenChange?.(next);
30
+ }
31
+ if (next !== $tOpen) {
32
+ tOpen.set(next);
33
+ if (!next) {
34
+ window.clearTimeout(timeout);
35
+ timeout = window.setTimeout(
36
+ () => {
37
+ localOpen.set(next);
38
+ },
39
+ $transitionTimes.out ? $transitionTimes.out * 0.5 : 0
40
+ );
41
+ open = !next;
42
+ return !next;
43
+ } else {
44
+ open = next;
45
+ return next;
46
+ }
47
+ }
21
48
  open = next;
22
49
  return next;
23
50
  }
24
51
  });
52
+ onDestroy(() => {
53
+ if (isBrowser) {
54
+ window.clearTimeout(timeout);
55
+ }
56
+ });
25
57
  $:
26
58
  open !== void 0 && localOpen.set(open);
27
59
  $:
@@ -7,7 +7,7 @@ declare const __propDef: {
7
7
  closeOnOutsideClick?: boolean | undefined;
8
8
  portal?: string | HTMLElement | null | undefined;
9
9
  open?: boolean | undefined;
10
- onOpenChange?: import("../../../internal/types.js").OnChangeFn<boolean | undefined> | undefined;
10
+ onOpenChange?: import("../../../internal/index.js").OnChangeFn<boolean | undefined> | undefined;
11
11
  };
12
12
  events: {
13
13
  [evt: string]: CustomEvent<any>;
@@ -1,14 +1,18 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
+ import { createDispatcher } from "../../../internal/events.js";
3
4
  export let asChild = false;
4
- const close = ctx.get().elements.close;
5
+ const {
6
+ elements: { close }
7
+ } = ctx.get();
8
+ const dispatch = createDispatcher();
5
9
  </script>
6
10
 
7
11
  {#if asChild}
8
12
  <slot builder={$close} />
9
13
  {:else}
10
14
  {@const builder = $close}
11
- <button {...builder} use:builder.action {...$$restProps} on:m-click on:m-keydown>
15
+ <button {...builder} use:builder.action {...$$restProps} on:m-click={dispatch} on:m-keydown={dispatch}>
12
16
  <slot {builder} />
13
17
  </button>
14
18
  {/if}
@@ -1,4 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import type { CloseEvents } from "../types.js";
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  asChild?: boolean | undefined;
@@ -226,7 +227,7 @@ declare const __propDef: {
226
227
  builder: any;
227
228
  };
228
229
  };
229
- events: import("../types.js").TriggerEvents;
230
+ events: CloseEvents;
230
231
  };
231
232
  export type DialogCloseProps = typeof __propDef.props;
232
233
  export type DialogCloseEvents = typeof __propDef.events;
@@ -1,19 +1,58 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
+ import { setTransitionTimes } from "../../../internal/index.js";
2
3
  import { ctx } from "../ctx.js";
3
4
  export let transition = void 0;
4
5
  export let transitionConfig = void 0;
6
+ export let inTransition = void 0;
7
+ export let inTransitionConfig = void 0;
8
+ export let outTransition = void 0;
9
+ export let outTransitionConfig = void 0;
5
10
  export let asChild = false;
6
- const content = ctx.get().elements.content;
11
+ const {
12
+ elements: { content },
13
+ transitionTimes,
14
+ tOpen
15
+ } = ctx.get();
16
+ $:
17
+ setTransitionTimes(transitionTimes, {
18
+ transition,
19
+ transitionConfig,
20
+ inTransition,
21
+ inTransitionConfig,
22
+ outTransition,
23
+ outTransitionConfig
24
+ });
7
25
  </script>
8
26
 
9
- {#if asChild}
10
- <slot builder={$content} />
11
- {:else if transition}
27
+ {#if asChild && $tOpen}
12
28
  {@const builder = $content}
13
- <div {...builder} use:builder.action {...$$restProps} transition:transition={transitionConfig}>
29
+ <slot {builder} />
30
+ {:else if transition && $tOpen}
31
+ {@const builder = $content}
32
+ <div transition:transition={transitionConfig} {...builder} use:builder.action {...$$restProps}>
33
+ <slot {builder} />
34
+ </div>
35
+ {:else if inTransition && outTransition && $tOpen}
36
+ {@const builder = $content}
37
+ <div
38
+ in:inTransition={inTransitionConfig}
39
+ out:outTransition={outTransitionConfig}
40
+ {...builder} use:builder.action
41
+ {...$$restProps}
42
+ >
43
+ <slot {builder} />
44
+ </div>
45
+ {:else if inTransition && $tOpen}
46
+ {@const builder = $content}
47
+ <div in:inTransition={inTransitionConfig} {...builder} use:builder.action {...$$restProps}>
48
+ <slot {builder} />
49
+ </div>
50
+ {:else if outTransition && $tOpen}
51
+ {@const builder = $content}
52
+ <div out:outTransition={outTransitionConfig} {...builder} use:builder.action {...$$restProps}>
14
53
  <slot {builder} />
15
54
  </div>
16
- {:else}
55
+ {:else if $tOpen}
17
56
  {@const builder = $content}
18
57
  <div {...builder} use:builder.action {...$$restProps}>
19
58
  <slot {builder} />
@@ -1,9 +1,13 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { Transition } from "../../../internal/index.js";
3
- declare class __sveltets_Render<T extends Transition> {
2
+ import { type Transition } from "../../../internal/index.js";
3
+ declare class __sveltets_Render<T extends Transition, In extends Transition, Out extends Transition> {
4
4
  props(): {
5
5
  transition?: T | undefined;
6
6
  transitionConfig?: import("../../../internal/index.js").TransitionParams<T> | undefined;
7
+ inTransition?: In | undefined;
8
+ inTransitionConfig?: import("../../../internal/index.js").TransitionParams<In> | undefined;
9
+ outTransition?: Out | undefined;
10
+ outTransitionConfig?: import("../../../internal/index.js").TransitionParams<Out> | undefined;
7
11
  asChild?: boolean | undefined;
8
12
  accesskey?: string | null | undefined;
9
13
  autofocus?: boolean | null | undefined;
@@ -223,9 +227,9 @@ declare class __sveltets_Render<T extends Transition> {
223
227
  };
224
228
  };
225
229
  }
226
- export type DialogContentProps<T extends Transition> = ReturnType<__sveltets_Render<T>['props']>;
227
- export type DialogContentEvents<T extends Transition> = ReturnType<__sveltets_Render<T>['events']>;
228
- export type DialogContentSlots<T extends Transition> = ReturnType<__sveltets_Render<T>['slots']>;
229
- export default class DialogContent<T extends Transition> extends SvelteComponent<DialogContentProps<T>, DialogContentEvents<T>, DialogContentSlots<T>> {
230
+ export type DialogContentProps<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['props']>;
231
+ export type DialogContentEvents<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['events']>;
232
+ export type DialogContentSlots<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['slots']>;
233
+ export default class DialogContent<T extends Transition, In extends Transition, Out extends Transition> extends SvelteComponent<DialogContentProps<T, In, Out>, DialogContentEvents<T, In, Out>, DialogContentSlots<T, In, Out>> {
230
234
  }
231
235
  export {};
@@ -1,11 +1,39 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
+ export let transition = void 0;
4
+ export let transitionConfig = void 0;
5
+ export let inTransition = void 0;
6
+ export let inTransitionConfig = void 0;
7
+ export let outTransition = void 0;
8
+ export let outTransitionConfig = void 0;
3
9
  export let asChild = false;
4
- const overlay = ctx.get().elements.overlay;
10
+ const {
11
+ elements: { overlay },
12
+ tOpen
13
+ } = ctx.get();
5
14
  </script>
6
15
 
7
- {#if asChild}
8
- <slot builder={$overlay} />
9
- {:else}
10
- <div {...$overlay} use:$overlay.action {...$$restProps} />
16
+ {#if asChild && $tOpen}
17
+ {@const builder = $overlay}
18
+ <slot {builder} />
19
+ {:else if transition && $tOpen}
20
+ {@const builder = $overlay}
21
+ <div transition:transition={transitionConfig} {...builder} use:builder.action {...$$restProps} />
22
+ {:else if inTransition && outTransition && $tOpen}
23
+ {@const builder = $overlay}
24
+ <div
25
+ in:inTransition={inTransitionConfig}
26
+ out:outTransition={outTransitionConfig}
27
+ {...builder} use:builder.action
28
+ {...$$restProps}
29
+ />
30
+ {:else if inTransition && $tOpen}
31
+ {@const builder = $overlay}
32
+ <div in:inTransition={inTransitionConfig} {...builder} use:builder.action {...$$restProps} />
33
+ {:else if outTransition && $tOpen}
34
+ {@const builder = $overlay}
35
+ <div out:outTransition={outTransitionConfig} {...builder} use:builder.action {...$$restProps} />
36
+ {:else if $tOpen}
37
+ {@const builder = $overlay}
38
+ <div {...builder} use:builder.action {...$$restProps} />
11
39
  {/if}
@@ -1,13 +1,18 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
+ export let asChild = false;
3
4
  const {
4
5
  elements: { portalled },
5
6
  states: { open }
6
7
  } = ctx.get();
7
8
  </script>
8
9
 
9
- {#if $open}
10
- <div {...$portalled} use:$portalled.action {...$$restProps}>
11
- <slot />
10
+ {#if asChild}
11
+ {@const builder = $portalled}
12
+ <slot {builder} />
13
+ {:else}
14
+ {@const builder = $portalled}
15
+ <div {...builder} use:builder.action {...$$restProps}>
16
+ <slot {builder} />
12
17
  </div>
13
18
  {/if}
@@ -215,7 +215,9 @@ declare const __propDef: {
215
215
  [evt: string]: CustomEvent<any>;
216
216
  };
217
217
  slots: {
218
- default: {};
218
+ default: {
219
+ builder: any;
220
+ };
219
221
  };
220
222
  };
221
223
  export type DialogPortalProps = typeof __propDef.props;
@@ -1,14 +1,18 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
+ import { createDispatcher } from "../../../internal/events.js";
3
4
  export let asChild = false;
4
- const trigger = ctx.get().elements.trigger;
5
+ const {
6
+ elements: { trigger }
7
+ } = ctx.get();
8
+ const dispatch = createDispatcher();
5
9
  </script>
6
10
 
7
11
  {#if asChild}
8
12
  <slot builder={$trigger} />
9
13
  {:else}
10
14
  {@const builder = $trigger}
11
- <button {...builder} use:builder.action {...$$restProps} on:m-click on:m-keydown>
15
+ <button {...builder} use:builder.action {...$$restProps} on:m-click={dispatch} on:m-keydown={dispatch}>
12
16
  <slot {builder} />
13
17
  </button>
14
18
  {/if}
@@ -1,14 +1,17 @@
1
1
  /// <reference types="svelte" />
2
2
  import { type CreateDialogProps, type Dialog as DialogReturn } from "@melt-ui/svelte";
3
+ import { type TOpen, type TransitionTimesProp } from "../../internal/index.js";
4
+ type SetProps = CreateDialogProps & TransitionTimesProp & TOpen;
5
+ type GetReturn = DialogReturn & TransitionTimesProp & TOpen;
3
6
  export declare const ctx: {
4
7
  set: typeof set;
5
8
  get: typeof get;
6
9
  };
7
- declare function set(props: CreateDialogProps): {
10
+ declare function set(props: SetProps): {
8
11
  updateOption: <K extends string, V extends unknown>(key: K, value: V | undefined) => void;
9
12
  elements: {
10
- content: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], <Node_1 extends unknown>(node: HTMLElement) => {
11
- destroy(): void;
13
+ content: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], (node: HTMLElement) => {
14
+ destroy: () => void;
12
15
  }, ([$isVisible]: [boolean]) => {
13
16
  id: string;
14
17
  role: "alertdialog" | "dialog";
@@ -36,7 +39,7 @@ declare function set(props: CreateDialogProps): {
36
39
  description: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Stores | undefined, import("svelte/action").Action<any, any, Record<never, any>>, () => {
37
40
  id: string;
38
41
  }, string>;
39
- overlay: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], <Node_2 extends unknown>(node: HTMLElement) => {
42
+ overlay: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], <Node_1 extends unknown>(node: HTMLElement) => {
40
43
  destroy(): void;
41
44
  }, ([$isVisible]: [boolean]) => {
42
45
  readonly hidden: true | undefined;
@@ -48,7 +51,7 @@ declare function set(props: CreateDialogProps): {
48
51
  close: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Stores | undefined, (node: HTMLElement) => import("@melt-ui/svelte/internal/types").MeltActionReturn<"keydown" | "click">, () => {
49
52
  readonly type: "button";
50
53
  }, string>;
51
- portalled: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Writable<string | HTMLElement | null>, <Node_3 extends unknown>(node: HTMLElement) => {
54
+ portalled: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Writable<string | HTMLElement | null>, <Node_2 extends unknown>(node: HTMLElement) => {
52
55
  destroy(): void;
53
56
  }, ($portal: string | HTMLElement | null) => {
54
57
  'data-portal': string | undefined;
@@ -73,5 +76,5 @@ declare function set(props: CreateDialogProps): {
73
76
  forceVisible: import("svelte/store").Writable<boolean>;
74
77
  };
75
78
  };
76
- declare function get(): DialogReturn;
79
+ declare function get(): GetReturn;
77
80
  export {};
@@ -7,8 +7,12 @@ export const ctx = {
7
7
  get
8
8
  };
9
9
  function set(props) {
10
- const dialog = createDialog({ ...removeUndefined(props), role: "dialog", forceVisible: true });
11
- setContext(NAME, dialog);
10
+ const dialog = createDialog({ ...removeUndefined(props), role: "dialog" });
11
+ setContext(NAME, {
12
+ ...dialog,
13
+ transitionTimes: props.transitionTimes,
14
+ tOpen: props.tOpen
15
+ });
12
16
  return {
13
17
  ...dialog,
14
18
  updateOption: getOptionUpdater(dialog.options)
@@ -1,26 +1,23 @@
1
- import type { AsChild, Expand, HTMLDivAttributes, HTMLHeadingAttributes, OmitOpen, OnChangeFn, Transition, TransitionParams } from "../../internal/index.js";
1
+ import type { AsChild, Expand, HTMLDivAttributes, HTMLHeadingAttributes, OmitOpen, OnChangeFn, Transition, TransitionProps } from "../../internal/index.js";
2
2
  import type { HTMLButtonAttributes } from "svelte/elements";
3
3
  import type { CreateDialogProps } from "@melt-ui/svelte";
4
- import type { ButtonEventHandler } from "../../index.js";
4
+ import type { CustomEventHandler } from "../../index.js";
5
5
  type Props = Expand<OmitOpen<Omit<CreateDialogProps, "role">> & {
6
6
  open?: CreateDialogProps["defaultOpen"] & {};
7
- onOpenChange?: OnChangeFn<CreateDialogProps["defaultOpen"]>;
7
+ onOpenChange?: OnChangeFn<boolean | undefined>;
8
8
  }>;
9
9
  type TriggerProps = AsChild & HTMLButtonAttributes;
10
10
  type CloseProps = TriggerProps;
11
- type ContentProps<T extends Transition = Transition> = Expand<{
12
- transition?: T;
13
- transitionConfig?: TransitionParams<T>;
14
- } & AsChild> & HTMLDivAttributes;
11
+ type ContentProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
15
12
  type DescriptionProps = AsChild & HTMLDivAttributes;
16
- type OverlayProps = AsChild & HTMLDivAttributes;
13
+ type OverlayProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
17
14
  type PortalProps = AsChild & HTMLDivAttributes;
18
15
  type TitleProps = Expand<{
19
16
  level?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
20
17
  } & AsChild> & HTMLHeadingAttributes;
21
- type TriggerEvents = {
22
- "m-click": ButtonEventHandler<MouseEvent>;
23
- "m-keydown": ButtonEventHandler<KeyboardEvent>;
18
+ type TriggerEvents<T extends Element = HTMLButtonElement> = {
19
+ click: CustomEventHandler<MouseEvent, T>;
20
+ keydown: CustomEventHandler<KeyboardEvent, T>;
24
21
  };
25
22
  type CloseEvents = TriggerEvents;
26
23
  export type { Props, CloseProps, TitleProps, PortalProps, ContentProps, TriggerProps, OverlayProps, DescriptionProps, Props as DialogProps, CloseProps as DialogCloseProps, TitleProps as DialogTitleProps, PortalProps as DialogPortalProps, ContentProps as DialogContentProps, TriggerProps as DialogTriggerProps, OverlayProps as DialogOverlayProps, DescriptionProps as DialogDescriptionProps, TriggerEvents, CloseEvents, TriggerEvents as DialogTriggerEvents, CloseEvents as DialogCloseEvents };