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,9 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
2
  import { ctx } from "../ctx.js";
3
3
  export let multiple = false;
4
- export let disabled = false;
5
4
  export let value = void 0;
6
5
  export let onValueChange = void 0;
6
+ export let disabled = false;
7
7
  export let asChild = false;
8
8
  const {
9
9
  elements: { root },
@@ -14,8 +14,10 @@ const {
14
14
  disabled,
15
15
  defaultValue: value,
16
16
  onValueChange: ({ next }) => {
17
- onValueChange?.(next);
18
- value = next;
17
+ if (value !== next) {
18
+ onValueChange?.(next);
19
+ value = next;
20
+ }
19
21
  return next;
20
22
  }
21
23
  // I'm sorry
@@ -2,24 +2,45 @@
2
2
  import { ctx } from "../ctx.js";
3
3
  export let transition = void 0;
4
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;
5
9
  export let asChild = false;
6
10
  const { content, isSelected, props } = ctx.getContent();
7
11
  </script>
8
12
 
9
- {#if asChild}
10
- {#if $isSelected(props)}
11
- <slot builder={$content(props)} />
12
- {/if}
13
- {:else if transition}
13
+ {#if asChild && $isSelected(props)}
14
14
  {@const builder = $content(props)}
15
- {#if $isSelected(props)}
16
- <div {...builder} use:builder.action transition:transition={transitionConfig} {...$$restProps}>
17
- <slot {builder} />
18
- </div>
19
- {/if}
15
+ <slot {builder} />
16
+ {:else if transition && $isSelected(props)}
17
+ {@const builder = $content(props)}
18
+ <div transition:transition={transitionConfig} {...builder} use:builder.action {...$$restProps}>
19
+ <slot {builder} />
20
+ </div>
21
+ {:else if inTransition && outTransition && $isSelected(props)}
22
+ {@const builder = $content(props)}
23
+ <div
24
+ in:inTransition={inTransitionConfig}
25
+ out:outTransition={outTransitionConfig}
26
+ {...builder} use:builder.action
27
+ {...$$restProps}
28
+ >
29
+ <slot {builder} />
30
+ </div>
31
+ {:else if inTransition && $isSelected(props)}
32
+ {@const builder = $content(props)}
33
+ <div in:inTransition={inTransitionConfig} {...builder} use:builder.action {...$$restProps}>
34
+ <slot {builder} />
35
+ </div>
36
+ {:else if outTransition && $isSelected(props)}
37
+ {@const builder = $content(props)}
38
+ <div out:outTransition={outTransitionConfig} {...builder} use:builder.action {...$$restProps}>
39
+ <slot {builder} />
40
+ </div>
20
41
  {:else if $isSelected(props)}
21
42
  {@const builder = $content(props)}
22
- <div {...builder} use:builder.action {...$$restProps}>
43
+ <div {...$$restProps}>
23
44
  <slot {builder} />
24
45
  </div>
25
46
  {/if}
@@ -1,9 +1,13 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { Transition } from "../../../internal/index.js";
3
- declare class __sveltets_Render<T extends Transition> {
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 AccordionContentProps<T extends Transition> = ReturnType<__sveltets_Render<T>['props']>;
227
- export type AccordionContentEvents<T extends Transition> = ReturnType<__sveltets_Render<T>['events']>;
228
- export type AccordionContentSlots<T extends Transition> = ReturnType<__sveltets_Render<T>['slots']>;
229
- export default class AccordionContent<T extends Transition> extends SvelteComponent<AccordionContentProps<T>, AccordionContentEvents<T>, AccordionContentSlots<T>> {
230
+ export type AccordionContentProps<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['props']>;
231
+ export type AccordionContentEvents<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['events']>;
232
+ export type AccordionContentSlots<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['slots']>;
233
+ export default class AccordionContent<T extends Transition, In extends Transition, Out extends Transition> extends SvelteComponent<AccordionContentProps<T, In, Out>, AccordionContentEvents<T, In, Out>, AccordionContentSlots<T, In, Out>> {
230
234
  }
231
235
  export {};
@@ -1,14 +1,16 @@
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
5
  const { trigger, props } = ctx.getTrigger();
6
+ const dispatch = createDispatcher();
5
7
  </script>
6
8
 
7
9
  {#if asChild}
8
10
  <slot builder={$trigger(props)} />
9
11
  {:else}
10
12
  {@const builder = $trigger(props)}
11
- <button {...builder} use:builder.action {...$$restProps} on:m-keydown on:m-click>
13
+ <button {...builder} use:builder.action {...$$restProps} on:m-keydown={dispatch} on:m-click={dispatch}>
12
14
  <slot {builder} />
13
15
  </button>
14
16
  {/if}
@@ -1,5 +1,5 @@
1
- import type { HTMLDivAttributes, ObjectVariation, Transition, TransitionParams, OmitValue, Expand, OnChangeFn, AsChild } from "../../internal/index.js";
2
- import type { ButtonEventHandler } from "../../index.js";
1
+ import type { HTMLDivAttributes, ObjectVariation, Transition, OmitValue, Expand, OnChangeFn, AsChild, TransitionProps } from "../../internal/index.js";
2
+ import type { CustomEventHandler } from "../../index.js";
3
3
  import type { CreateAccordionProps, AccordionItemProps as _ItemProps, AccordionHeadingProps as _HeadingProps } from "@melt-ui/svelte";
4
4
  import type { HTMLButtonAttributes } from "svelte/elements";
5
5
  type Props<Multiple extends boolean> = Expand<OmitValue<CreateAccordionProps<Multiple>> & {
@@ -11,12 +11,9 @@ type HeaderProps = Expand<{
11
11
  level?: ObjectVariation<_HeadingProps>["level"];
12
12
  } & AsChild> & HTMLDivAttributes;
13
13
  type TriggerProps = AsChild & HTMLButtonAttributes;
14
- type ContentProps<T extends Transition = Transition> = Expand<{
15
- transition?: T;
16
- transitionConfig?: TransitionParams<T>;
17
- } & AsChild> & HTMLDivAttributes;
14
+ type ContentProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
18
15
  type TriggerEvents = {
19
- "m-click": ButtonEventHandler<MouseEvent>;
20
- "m-keydown": ButtonEventHandler<KeyboardEvent>;
16
+ click: CustomEventHandler<MouseEvent, HTMLButtonElement>;
17
+ keydown: CustomEventHandler<KeyboardEvent, HTMLButtonElement>;
21
18
  };
22
19
  export type { Props, ItemProps, HeaderProps, TriggerProps, ContentProps, Props as AccordionProps, ItemProps as AccordionItemProps, HeaderProps as AccordionHeaderProps, TriggerProps as AccordionTriggerProps, ContentProps as AccordionContentProps, TriggerEvents, TriggerEvents as AccordionTriggerEvents };
@@ -1,27 +1,59 @@
1
- <script>import { ctx } from "../ctx.js";
1
+ <script>import { writable } from "svelte/store";
2
+ import { ctx } from "../ctx.js";
3
+ import { onDestroy } from "svelte";
4
+ import { isBrowser } from "../../../internal/is.js";
2
5
  export let preventScroll = void 0;
3
6
  export let closeOnEscape = void 0;
4
- export let closeOnOutsideClick = void 0;
7
+ export let closeOnOutsideClick = false;
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 }) => {
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.6 : 0
40
+ );
41
+ open = !next;
42
+ return !next;
43
+ } else {
44
+ open = next;
45
+ return next;
46
+ }
47
+ }
20
48
  open = next;
21
- onOpenChange?.(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
  $:
@@ -1,14 +1,18 @@
1
1
  <script>import { melt } from "@melt-ui/svelte";
2
+ import { createDispatcher } from "../../../internal/events.js";
2
3
  import { ctx } from "../ctx.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 { ActionEvents } 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: ActionEvents;
230
231
  };
231
232
  export type AlertDialogActionProps = typeof __propDef.props;
232
233
  export type AlertDialogActionEvents = typeof __propDef.events;
@@ -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 on:m-click on:m-keydown {...$$restProps}>
15
+ <button {...builder} use:builder.action on:m-click={dispatch} on:m-keydown={dispatch} {...$$restProps}>
12
16
  <slot {builder} />
13
17
  </button>
14
18
  {/if}
@@ -1,4 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import type { CancelEvents } 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: CancelEvents;
230
231
  };
231
232
  export type AlertDialogCancelProps = typeof __propDef.props;
232
233
  export type AlertDialogCancelEvents = 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 AlertDialogContentProps<T extends Transition> = ReturnType<__sveltets_Render<T>['props']>;
227
- export type AlertDialogContentEvents<T extends Transition> = ReturnType<__sveltets_Render<T>['events']>;
228
- export type AlertDialogContentSlots<T extends Transition> = ReturnType<__sveltets_Render<T>['slots']>;
229
- export default class AlertDialogContent<T extends Transition> extends SvelteComponent<AlertDialogContentProps<T>, AlertDialogContentEvents<T>, AlertDialogContentSlots<T>> {
230
+ export type AlertDialogContentProps<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['props']>;
231
+ export type AlertDialogContentEvents<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['events']>;
232
+ export type AlertDialogContentSlots<T extends Transition, In extends Transition, Out extends Transition> = ReturnType<__sveltets_Render<T, In, Out>['slots']>;
233
+ export default class AlertDialogContent<T extends Transition, In extends Transition, Out extends Transition> extends SvelteComponent<AlertDialogContentProps<T, In, Out>, AlertDialogContentEvents<T, In, Out>, AlertDialogContentSlots<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}
@@ -7,13 +7,12 @@ const {
7
7
  } = ctx.get();
8
8
  </script>
9
9
 
10
- {#if $open}
10
+ {#if asChild}
11
11
  {@const builder = $portalled}
12
- {#if asChild}
13
- <slot builder={$portalled} />
14
- {:else}
15
- <div {...builder} use:builder.action {...$$restProps}>
16
- <slot {builder} />
17
- </div>
18
- {/if}
12
+ <slot {builder} />
13
+ {:else}
14
+ {@const builder = $portalled}
15
+ <div {...builder} use:builder.action {...$$restProps}>
16
+ <slot {builder} />
17
+ </div>
19
18
  {/if}
@@ -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 on:m-click on:m-keydown {...$$restProps}>
15
+ <button {...builder} use:builder.action on:m-click={dispatch} on:m-keydown={dispatch} {...$$restProps}>
12
16
  <slot {builder} />
13
17
  </button>
14
18
  {/if}
@@ -1,10 +1,13 @@
1
1
  /// <reference types="svelte" />
2
2
  import { type Dialog as AlertDialogReturn, type CreateDialogProps as CreateAlertDialogProps } from "@melt-ui/svelte";
3
- declare function set(props: CreateAlertDialogProps): {
3
+ import { type TOpen, type TransitionTimesProp } from "../../internal/index.js";
4
+ type SetProps = CreateAlertDialogProps & TransitionTimesProp & TOpen;
5
+ type GetReturn = AlertDialogReturn & TransitionTimesProp & TOpen;
6
+ declare function set(props: SetProps): {
4
7
  updateOption: <K extends string, V extends unknown>(key: K, value: V | undefined) => void;
5
8
  elements: {
6
- content: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], <Node_1 extends unknown>(node: HTMLElement) => {
7
- destroy(): void;
9
+ content: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], (node: HTMLElement) => {
10
+ destroy: () => void;
8
11
  }, ([$isVisible]: [boolean]) => {
9
12
  id: string;
10
13
  role: "alertdialog" | "dialog";
@@ -32,7 +35,7 @@ declare function set(props: CreateAlertDialogProps): {
32
35
  description: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Stores | undefined, import("svelte/action").Action<any, any, Record<never, any>>, () => {
33
36
  id: string;
34
37
  }, string>;
35
- overlay: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], <Node_2 extends unknown>(node: HTMLElement) => {
38
+ overlay: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<[import("svelte/store").Readable<boolean>], <Node_1 extends unknown>(node: HTMLElement) => {
36
39
  destroy(): void;
37
40
  }, ([$isVisible]: [boolean]) => {
38
41
  readonly hidden: true | undefined;
@@ -44,7 +47,7 @@ declare function set(props: CreateAlertDialogProps): {
44
47
  close: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Stores | undefined, (node: HTMLElement) => import("@melt-ui/svelte/internal/types").MeltActionReturn<"keydown" | "click">, () => {
45
48
  readonly type: "button";
46
49
  }, string>;
47
- portalled: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Writable<string | HTMLElement | null>, <Node_3 extends unknown>(node: HTMLElement) => {
50
+ portalled: import("@melt-ui/svelte/internal/helpers").ExplicitBuilderReturn<import("svelte/store").Writable<string | HTMLElement | null>, <Node_2 extends unknown>(node: HTMLElement) => {
48
51
  destroy(): void;
49
52
  }, ($portal: string | HTMLElement | null) => {
50
53
  'data-portal': string | undefined;
@@ -69,7 +72,7 @@ declare function set(props: CreateAlertDialogProps): {
69
72
  forceVisible: import("svelte/store").Writable<boolean>;
70
73
  };
71
74
  };
72
- declare function get(): AlertDialogReturn;
75
+ declare function get(): GetReturn;
73
76
  export declare const ctx: {
74
77
  set: typeof set;
75
78
  get: typeof get;
@@ -5,10 +5,13 @@ const NAME = "AlertDialog";
5
5
  function set(props) {
6
6
  const alertDialog = createDialog({
7
7
  ...removeUndefined(props),
8
- role: "alertdialog",
9
- forceVisible: true
8
+ role: "alertdialog"
9
+ });
10
+ setContext(NAME, {
11
+ ...alertDialog,
12
+ transitionTimes: props.transitionTimes,
13
+ tOpen: props.tOpen
10
14
  });
11
- setContext(NAME, alertDialog);
12
15
  return {
13
16
  ...alertDialog,
14
17
  updateOption: getOptionUpdater(alertDialog.options)
@@ -1,7 +1,7 @@
1
- import type { HTMLDivAttributes, OmitOpen, Expand, HTMLHeadingAttributes, OnChangeFn, Transition, TransitionParams, AsChild } from "../../internal/index.js";
1
+ import type { HTMLDivAttributes, OmitOpen, Expand, HTMLHeadingAttributes, OnChangeFn, Transition, AsChild, 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
7
  onOpenChange?: OnChangeFn<CreateDialogProps["defaultOpen"]>;
@@ -9,19 +9,16 @@ type Props = Expand<OmitOpen<Omit<CreateDialogProps, "role">> & {
9
9
  type TriggerProps = AsChild & HTMLButtonAttributes;
10
10
  type ActionProps = TriggerProps;
11
11
  type CancelProps = TriggerProps;
12
- type ContentProps<T extends Transition = Transition> = Expand<{
13
- transition?: T;
14
- transitionConfig?: TransitionParams<T>;
15
- } & AsChild> & HTMLDivAttributes;
12
+ type ContentProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
16
13
  type DescriptionProps = AsChild & HTMLDivAttributes;
17
- type OverlayProps = AsChild & HTMLDivAttributes;
14
+ type OverlayProps<T extends Transition = Transition, In extends Transition = Transition, Out extends Transition = Transition> = Expand<TransitionProps<T, In, Out> & AsChild> & HTMLDivAttributes;
18
15
  type PortalProps = AsChild & HTMLDivAttributes;
19
16
  type TitleProps = Expand<{
20
17
  level?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
21
18
  } & AsChild> & HTMLHeadingAttributes;
22
- type TriggerEvents = {
23
- "m-click": ButtonEventHandler<MouseEvent>;
24
- "m-keydown": ButtonEventHandler<KeyboardEvent>;
19
+ type TriggerEvents<T extends Element = HTMLButtonElement> = {
20
+ click: CustomEventHandler<MouseEvent, T>;
21
+ keydown: CustomEventHandler<KeyboardEvent, T>;
25
22
  };
26
23
  type ActionEvents = TriggerEvents;
27
24
  type CancelEvents = TriggerEvents;
@@ -18,5 +18,9 @@ type ButtonEventHandler<T extends Event = Event> = T & {
18
18
  type Events = {
19
19
  click: ButtonEventHandler<MouseEvent>;
20
20
  keydown: ButtonEventHandler<KeyboardEvent>;
21
+ change: ButtonEventHandler<Event>;
22
+ keyup: ButtonEventHandler<KeyboardEvent>;
23
+ mouseenter: ButtonEventHandler<MouseEvent>;
24
+ mouseleave: ButtonEventHandler<MouseEvent>;
21
25
  };
22
26
  export type { Props, Props as ButtonProps, Events, Events as ButtonEvents, ButtonEventHandler };
@@ -1,5 +1,6 @@
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 checked = void 0;
4
5
  export let disabled = void 0;
5
6
  export let name = void 0;
@@ -18,11 +19,14 @@ const {
18
19
  required,
19
20
  value,
20
21
  onCheckedChange: ({ next }) => {
21
- onCheckedChange?.(next);
22
- checked = next;
22
+ if (checked !== next) {
23
+ onCheckedChange?.(next);
24
+ checked = next;
25
+ }
23
26
  return next;
24
27
  }
25
28
  });
29
+ const dispatch = createDispatcher();
26
30
  $:
27
31
  checked !== void 0 && localChecked.set(checked);
28
32
  $:
@@ -39,7 +43,7 @@ $:
39
43
  <slot builder={$root} />
40
44
  {:else}
41
45
  {@const builder = $root}
42
- <button {...builder} use:builder.action {...$$restProps} on:m-click on:m-keydown>
46
+ <button {...builder} use:builder.action {...$$restProps} on:m-click={dispatch} on:m-keydown={dispatch}>
43
47
  <slot {builder} />
44
48
  </button>
45
49
  {/if}
@@ -1,5 +1,7 @@
1
1
  <script>import { ctx } from "../ctx.js";
2
- const { isChecked, isIndeterminate } = ctx.getIndicator();
2
+ const {
3
+ helpers: { isChecked, isIndeterminate }
4
+ } = ctx.get();
3
5
  </script>
4
6
 
5
7
  <div {...$$restProps}>