@peteai/presentation-editor 0.0.8 → 0.0.10

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 (96) hide show
  1. package/dist/components/editor/active-layers.svelte +2 -2
  2. package/dist/components/editor/design.svelte +92 -0
  3. package/dist/components/editor/design.svelte.d.ts +8 -0
  4. package/dist/components/editor/editor.svelte +1 -1
  5. package/dist/components/editor/editor.svelte.js +14 -2
  6. package/dist/components/editor/header.svelte +1 -1
  7. package/dist/components/editor/index.d.ts +2 -1
  8. package/dist/components/editor/index.js +2 -1
  9. package/dist/components/editor/layers/active-layer-border.svelte +1 -1
  10. package/dist/components/editor/layers/buttons/border-button/border-button-colors.svelte +1 -1
  11. package/dist/components/editor/layers/controls/corner-scale-control/corner-scale-control.svelte +1 -1
  12. package/dist/components/editor/layers/controls/rotate-control/rotate-control.svelte +1 -1
  13. package/dist/components/editor/layers/controls/side-scale-control/side-scale-control.svelte +1 -1
  14. package/dist/components/editor/layers/layer-button.svelte +1 -1
  15. package/dist/components/editor/layers/types/background/background-layer-buttons.svelte +1 -1
  16. package/dist/components/editor/layers/types/image/controls/image-rotate-control/image-rotate-control.svelte +1 -1
  17. package/dist/components/editor/layers/types/image/controls/image-scale-control/image-scale-control.svelte +1 -1
  18. package/dist/components/editor/layers/types/image/image-layer-crop.svelte +2 -2
  19. package/dist/components/editor/page-editor.svelte +7 -0
  20. package/dist/components/editor/{pages-navigation/page-preview.svelte → page-preview.svelte} +4 -4
  21. package/dist/components/editor/{pages-navigation/page-preview.svelte.d.ts → page-preview.svelte.d.ts} +2 -2
  22. package/dist/components/editor/page-transition-preview.svelte +34 -0
  23. package/dist/components/editor/page-transition-preview.svelte.d.ts +9 -0
  24. package/dist/components/editor/page-with-transition.svelte +48 -0
  25. package/dist/components/editor/page-with-transition.svelte.d.ts +10 -0
  26. package/dist/components/editor/page.svelte +12 -19
  27. package/dist/components/editor/pages-navigation/pages-navigation-item.svelte +80 -20
  28. package/dist/components/editor/pages-navigation/pages-navigation.svelte +7 -4
  29. package/dist/components/editor/sidebar/color-sidebar/color-sidebar-color.svelte +2 -2
  30. package/dist/components/editor/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte +5 -5
  31. package/dist/components/editor/sidebar/color-sidebar/color-sidebar.svelte +91 -81
  32. package/dist/components/editor/sidebar/color-sidebar/color-sidebar.svelte.d.ts +5 -1
  33. package/dist/components/editor/sidebar/font-sidebar/font-sidebar.svelte +10 -6
  34. package/dist/components/editor/sidebar/font-sidebar/font-sidebar.svelte.d.ts +5 -1
  35. package/dist/components/editor/sidebar/image-crop-sidebar.svelte +28 -37
  36. package/dist/components/editor/sidebar/image-crop-sidebar.svelte.d.ts +2 -0
  37. package/dist/components/editor/sidebar/position-sidebar/index.d.ts +2 -0
  38. package/dist/components/editor/sidebar/position-sidebar/index.js +2 -0
  39. package/dist/components/editor/sidebar/position-sidebar/position-sidebar.svelte +130 -0
  40. package/dist/components/editor/sidebar/position-sidebar/position-sidebar.svelte.d.ts +7 -0
  41. package/dist/components/editor/sidebar/sidebar-text-tab.svelte +7 -3
  42. package/dist/components/editor/sidebar/sidebar-text-tab.svelte.d.ts +5 -16
  43. package/dist/components/editor/sidebar/sidebar-uploads-tab.svelte +10 -8
  44. package/dist/components/editor/sidebar/sidebar-uploads-tab.svelte.d.ts +5 -1
  45. package/dist/components/editor/sidebar/sidebar-wrapper.svelte +4 -3
  46. package/dist/components/editor/sidebar/sidebar-wrapper.svelte.d.ts +1 -0
  47. package/dist/components/editor/sidebar/sidebar.svelte +20 -13
  48. package/dist/components/editor/sidebar/transition-sidebar/index.d.ts +2 -0
  49. package/dist/components/editor/sidebar/transition-sidebar/index.js +2 -0
  50. package/dist/components/editor/sidebar/transition-sidebar/transition-sidebar.svelte +257 -0
  51. package/dist/components/editor/sidebar/transition-sidebar/transition-sidebar.svelte.d.ts +7 -0
  52. package/dist/components/editor/snapping-guides.svelte +3 -3
  53. package/dist/components/editor/types.d.ts +40 -6
  54. package/dist/components/editor/utils.d.ts +2 -2
  55. package/dist/components/editor/utils.js +21 -0
  56. package/dist/components/ui/button/button.svelte +2 -1
  57. package/dist/components/ui/button/button.svelte.d.ts +3 -0
  58. package/dist/components/ui/color-picker/color-picker-alpha-grid.svelte +2 -1
  59. package/dist/components/ui/color-picker/color-picker.svelte +6 -6
  60. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
  61. package/dist/components/ui/context-menu/context-menu-content.svelte +3 -1
  62. package/dist/components/ui/context-menu/context-menu-group-heading.svelte +1 -1
  63. package/dist/components/ui/context-menu/context-menu-item.svelte +1 -1
  64. package/dist/components/ui/context-menu/context-menu-radio-item.svelte +1 -1
  65. package/dist/components/ui/context-menu/context-menu-separator.svelte +1 -1
  66. package/dist/components/ui/context-menu/context-menu-shortcut.svelte +1 -1
  67. package/dist/components/ui/context-menu/context-menu-sub-content.svelte +1 -1
  68. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +1 -1
  69. package/dist/components/ui/dialog/dialog-content.svelte +4 -2
  70. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  71. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +2 -0
  72. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  73. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  74. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
  75. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  76. package/dist/components/ui/input/input.svelte +1 -1
  77. package/dist/components/ui/slider/slider.svelte +3 -3
  78. package/dist/components/ui/tabs/index.d.ts +4 -4
  79. package/dist/components/ui/tabs/index.js +4 -4
  80. package/dist/components/ui/tabs/tabs-content.svelte +4 -4
  81. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +1 -1
  82. package/dist/components/ui/tabs/tabs-list.svelte +5 -9
  83. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +1 -1
  84. package/dist/components/ui/tabs/tabs-trigger.svelte +4 -4
  85. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +1 -1
  86. package/dist/transitions/circleWipe.d.ts +10 -0
  87. package/dist/transitions/circleWipe.js +16 -0
  88. package/dist/transitions/lineWipe.d.ts +9 -0
  89. package/dist/transitions/lineWipe.js +17 -0
  90. package/dist/transitions/stack.d.ts +8 -0
  91. package/dist/transitions/stack.js +13 -0
  92. package/package.json +19 -19
  93. package/dist/components/editor/layers/types/image/image-layer-active.svelte +0 -36
  94. package/dist/components/editor/layers/types/image/image-layer-active.svelte.d.ts +0 -7
  95. package/dist/components/editor/sidebar/position-sidebar.svelte +0 -136
  96. package/dist/components/editor/sidebar/position-sidebar.svelte.d.ts +0 -3
@@ -1,8 +1,8 @@
1
1
  import { type JSONContent } from '@tiptap/core';
2
- import type { HTMLAttributes } from 'svelte/elements';
2
+ type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
3
3
  export type ActiveSidebarTab = 'text' | 'uploads';
4
4
  type Colored = 'background' | 'text' | 'border';
5
- export type ActiveSidebarPopup = 'position' | 'font' | `${Colored}Color`;
5
+ export type ActiveSidebarPopup = 'position' | 'font' | `${Colored}Color` | 'transition';
6
6
  export type Fonts = {
7
7
  [key: string]: {
8
8
  type: string;
@@ -63,6 +63,32 @@ export type Gradient = {
63
63
  colors: string[];
64
64
  };
65
65
  export type BackgroundImage = Pick<ImageLayer, 'opacity' | 'scale' | 'image' | 'imageRotate' | 'offsetX' | 'offsetY' | 'flipX' | 'flipY'>;
66
+ interface BasePageTransition {
67
+ type: string;
68
+ duration: number;
69
+ }
70
+ export type PageTransitionDirection = 'left' | 'right' | 'up' | 'down';
71
+ export type PageTransitionFlow = 'in' | 'out';
72
+ export interface DirectionPageTransition extends BasePageTransition {
73
+ direction: PageTransitionDirection;
74
+ }
75
+ interface FadePageTransition extends BasePageTransition {
76
+ type: 'fade';
77
+ }
78
+ interface SlidePageTransition extends DirectionPageTransition {
79
+ type: 'slide';
80
+ }
81
+ export interface CircleWipePageTransition extends BasePageTransition {
82
+ type: 'circleWipe';
83
+ flow: PageTransitionFlow;
84
+ }
85
+ interface LineWipePageTransition extends DirectionPageTransition {
86
+ type: 'lineWipe';
87
+ }
88
+ interface StackPageTransition extends DirectionPageTransition {
89
+ type: 'stack';
90
+ }
91
+ export type PageTransition = FadePageTransition | SlidePageTransition | CircleWipePageTransition | LineWipePageTransition | StackPageTransition;
66
92
  export type Page = {
67
93
  id: string;
68
94
  backgroundColor: string | null;
@@ -71,7 +97,9 @@ export type Page = {
71
97
  layers: Layer[];
72
98
  sortOrder: number;
73
99
  locked: boolean;
100
+ transition: PageTransition | null;
74
101
  };
102
+ export type PageInput = OptionalKeys<Page, "transition">;
75
103
  export type ActiveAction = {
76
104
  id: string;
77
105
  type: string;
@@ -267,15 +295,21 @@ interface BaseOptions {
267
295
  }
268
296
  interface MultipleModeOption extends BaseOptions {
269
297
  mode?: 'multiple';
270
- pages?: Page[];
298
+ pages?: PageInput[];
271
299
  }
272
300
  interface SingleModeOption extends BaseOptions {
273
301
  mode: 'single';
274
- page?: Page;
302
+ page?: PageInput;
275
303
  }
276
304
  export type EditorOptions = MultipleModeOption | SingleModeOption;
277
- export interface PageOptions extends HTMLAttributes<HTMLDivElement> {
278
- page: Page;
305
+ export interface DesignOptions {
306
+ pages: PageInput[];
307
+ thumbScale?: number;
308
+ fonts?: Fonts;
309
+ loadFont?: (family: string) => Promise<void>;
310
+ }
311
+ export interface PageOptions {
312
+ page: PageInput;
279
313
  thumbScale?: number;
280
314
  fonts?: Fonts;
281
315
  loadFont?: (family: string) => Promise<void>;
@@ -1,9 +1,9 @@
1
- import type { Gradient, Page } from './types.js';
1
+ import type { Gradient, PageInput, Page } from './types.js';
2
2
  export declare const arraysEqual: (a: unknown[], b: unknown[]) => boolean;
3
3
  export declare const checkImage: (url: string) => Promise<HTMLImageElement>;
4
4
  export declare function gradientToString(gradient: Gradient): string;
5
5
  export declare function stringToGradient(value: string): Gradient;
6
- export declare const getPages: () => Page[];
6
+ export declare const getPages: () => PageInput[];
7
7
  export declare const buildParagraphHtml: ({ text, fontSize, lineHeight, textAlign, uppercase, bold, italic, }: {
8
8
  text: string;
9
9
  fontSize?: number;
@@ -426,6 +426,26 @@ const generateBackgroundColor = () => {
426
426
  return randomHexColor();
427
427
  }
428
428
  };
429
+ const generateTransition = () => {
430
+ const duration = Math.floor(Math.random() * 1000) + 1000;
431
+ const transitions = [
432
+ { type: 'fade', duration },
433
+ { type: 'slide', duration, direction: 'left' },
434
+ { type: 'circleWipe', duration, flow: 'in' },
435
+ { type: 'lineWipe', duration, direction: 'left' },
436
+ { type: 'stack', duration, direction: 'down' },
437
+ ];
438
+ const transition = transitions[Math.floor(Math.random() * transitions.length)];
439
+ if ('direction' in transition) {
440
+ const directions = ['left', 'right', 'up', 'down'];
441
+ transition.direction = directions[Math.floor(Math.random() * directions.length)];
442
+ }
443
+ if ('flow' in transition) {
444
+ const flows = ['in', 'out'];
445
+ transition.flow = flows[Math.floor(Math.random() * flows.length)];
446
+ }
447
+ return transition;
448
+ };
429
449
  export const cognitionPageToJson = (page) => {
430
450
  let sortOrder = 1;
431
451
  const layers = [];
@@ -474,5 +494,6 @@ export const cognitionPageToJson = (page) => {
474
494
  backgroundLocked: false,
475
495
  locked: false,
476
496
  layers,
497
+ transition: generateTransition(),
477
498
  };
478
499
  };
@@ -23,6 +23,7 @@
23
23
  lg: 'h-11 rounded-md px-8',
24
24
  icon: 'h-10 w-10',
25
25
  'icon-xs': 'h-8 w-8',
26
+ vague: '',
26
27
  },
27
28
  active: {
28
29
  true: '',
@@ -32,7 +33,7 @@
32
33
  {
33
34
  active: true,
34
35
  variant: 'outline',
35
- class: 'border-2 border-primary',
36
+ class: 'border-primary',
36
37
  },
37
38
  {
38
39
  active: true,
@@ -18,6 +18,7 @@ export declare const buttonVariants: import("tailwind-variants").TVReturnType<{
18
18
  lg: string;
19
19
  icon: string;
20
20
  'icon-xs': string;
21
+ vague: string;
21
22
  };
22
23
  active: {
23
24
  true: string;
@@ -39,6 +40,7 @@ export declare const buttonVariants: import("tailwind-variants").TVReturnType<{
39
40
  lg: string;
40
41
  icon: string;
41
42
  'icon-xs': string;
43
+ vague: string;
42
44
  };
43
45
  active: {
44
46
  true: string;
@@ -60,6 +62,7 @@ export declare const buttonVariants: import("tailwind-variants").TVReturnType<{
60
62
  lg: string;
61
63
  icon: string;
62
64
  'icon-xs': string;
65
+ vague: string;
63
66
  };
64
67
  active: {
65
68
  true: string;
@@ -21,7 +21,8 @@
21
21
  <style>
22
22
  .alpha-grid {
23
23
  background-color: hsl(var(--background));
24
- background-image: linear-gradient(
24
+ background-image:
25
+ linear-gradient(
25
26
  -45deg,
26
27
  hsl(var(--foreground)) 25%,
27
28
  transparent 25%,
@@ -237,7 +237,7 @@
237
237
  style:background="linear-gradient(to top, rgb(0, 0, 0), rgba(0, 0, 0, 0))"
238
238
  >
239
239
  <div
240
- class="border-primary relative m-0 -translate-x-1/2 -translate-y-1/2 rounded-full p-0"
240
+ class="relative m-0 -translate-x-1/2 -translate-y-1/2 rounded-full border-primary p-0"
241
241
  style:width="16px"
242
242
  style:height="16px"
243
243
  style:border="2px solid #fffb"
@@ -275,7 +275,7 @@
275
275
  ></span>
276
276
  <Slider.Thumb
277
277
  index={0}
278
- class="border-border-input bg-background hover:border-dark-40 dark:bg-foreground dark:shadow-card block size-2 cursor-pointer rounded-full border shadow transition-colors focus-visible:outline-none active:scale-150"
278
+ class="border-border-input hover:border-dark-40 block size-2 cursor-pointer rounded-full border bg-background shadow transition-colors focus-visible:outline-none active:scale-150 dark:bg-foreground dark:shadow-card"
279
279
  />
280
280
  {/snippet}
281
281
  </Slider.Root>
@@ -294,7 +294,7 @@
294
294
  {#snippet children()}
295
295
  <AlphaGrid
296
296
  size={8}
297
- class="shadow-inner-1 relative -mx-1 h-3 w-full grow cursor-pointer overflow-hidden rounded-full"
297
+ class="relative -mx-1 h-3 w-full grow cursor-pointer overflow-hidden rounded-full shadow-inner-1"
298
298
  >
299
299
  <div
300
300
  class="h-full w-full rounded-full"
@@ -303,7 +303,7 @@
303
303
  </AlphaGrid>
304
304
  <Slider.Thumb
305
305
  index={0}
306
- class="border-border-input bg-background hover:border-dark-40 dark:bg-foreground dark:shadow-card block size-2 cursor-pointer rounded-full border shadow transition-colors focus-visible:outline-none active:scale-150"
306
+ class="border-border-input hover:border-dark-40 block size-2 cursor-pointer rounded-full border bg-background shadow transition-colors focus-visible:outline-none active:scale-150 dark:bg-foreground dark:shadow-card"
307
307
  />
308
308
  {/snippet}
309
309
  </Slider.Root>
@@ -327,9 +327,9 @@
327
327
  </AlphaGrid>
328
328
  </div>
329
329
  </div>
330
- <div class="text-muted-foreground pointer-events-none absolute left-10 text-sm">#</div>
330
+ <div class="pointer-events-none absolute left-10 text-sm text-muted-foreground">#</div>
331
331
  <Input
332
- class={cn('pl-12', invalidHex && 'ring-destructive ring-1')}
332
+ class={cn('pl-12', invalidHex && 'ring-1 ring-destructive')}
333
333
  value={hexValue.slice(0, 7).replace('#', '')}
334
334
  oninput={onHexInput}
335
335
  onchange={onHexChange}
@@ -22,7 +22,7 @@
22
22
  bind:checked
23
23
  bind:indeterminate
24
24
  class={cn(
25
- 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
25
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50',
26
26
  className,
27
27
  )}
28
28
  {...restProps}
@@ -5,6 +5,7 @@
5
5
  let {
6
6
  ref = $bindable(null),
7
7
  portalProps,
8
+ preventScroll = false,
8
9
  class: className,
9
10
  ...restProps
10
11
  }: ContextMenuPrimitive.ContentProps & {
@@ -15,8 +16,9 @@
15
16
  <ContextMenuPrimitive.Portal {...portalProps}>
16
17
  <ContextMenuPrimitive.Content
17
18
  bind:ref
19
+ {preventScroll}
18
20
  class={cn(
19
- 'bg-popover text-popover-foreground z-50 min-w-[8rem] rounded-md border p-1 shadow-md focus:outline-none',
21
+ 'z-50 min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md focus:outline-none',
20
22
  className,
21
23
  )}
22
24
  {...restProps}
@@ -14,6 +14,6 @@
14
14
 
15
15
  <ContextMenuPrimitive.GroupHeading
16
16
  bind:ref
17
- class={cn('text-foreground px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}
17
+ class={cn('px-2 py-1.5 text-sm font-semibold text-foreground', inset && 'pl-8', className)}
18
18
  {...restProps}
19
19
  />
@@ -15,7 +15,7 @@
15
15
  <ContextMenuPrimitive.Item
16
16
  bind:ref
17
17
  class={cn(
18
- 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
18
+ 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50',
19
19
  inset && 'pl-8',
20
20
  className,
21
21
  )}
@@ -14,7 +14,7 @@
14
14
  <ContextMenuPrimitive.RadioItem
15
15
  bind:ref
16
16
  class={cn(
17
- 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
17
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50',
18
18
  className,
19
19
  )}
20
20
  {...restProps}
@@ -11,6 +11,6 @@
11
11
 
12
12
  <ContextMenuPrimitive.Separator
13
13
  bind:ref
14
- class={cn('bg-border -mx-1 my-1 h-px', className)}
14
+ class={cn('-mx-1 my-1 h-px bg-border', className)}
15
15
  {...restProps}
16
16
  />
@@ -14,7 +14,7 @@
14
14
  <kbd
15
15
  bind:this={ref}
16
16
  class={cn(
17
- 'bg-muted text-muted-foreground ml-auto rounded-sm px-2 py-1 font-sans text-xs tracking-widest',
17
+ 'ml-auto rounded-sm bg-muted px-2 py-1 font-sans text-xs tracking-widest text-muted-foreground',
18
18
  className,
19
19
  )}
20
20
  {...restProps}
@@ -12,7 +12,7 @@
12
12
  <ContextMenuPrimitive.SubContent
13
13
  bind:ref
14
14
  class={cn(
15
- 'bg-popover text-popover-foreground z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md focus:outline-none',
15
+ 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md focus:outline-none',
16
16
  className,
17
17
  )}
18
18
  {...restProps}
@@ -17,7 +17,7 @@
17
17
  <ContextMenuPrimitive.SubTrigger
18
18
  bind:ref
19
19
  class={cn(
20
- 'data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:text-accent-foreground flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
20
+ 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:text-accent-foreground data-[disabled]:opacity-50',
21
21
  inset && 'pl-8',
22
22
  className,
23
23
  )}
@@ -7,6 +7,7 @@
7
7
 
8
8
  let {
9
9
  ref = $bindable(null),
10
+ preventScroll = false,
10
11
  class: className,
11
12
  portalProps,
12
13
  children,
@@ -21,15 +22,16 @@
21
22
  <Dialog.Overlay />
22
23
  <DialogPrimitive.Content
23
24
  bind:ref
25
+ {preventScroll}
24
26
  class={cn(
25
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] bg-background fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg',
27
+ 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 sm:rounded-lg',
26
28
  className,
27
29
  )}
28
30
  {...restProps}
29
31
  >
30
32
  {@render children?.()}
31
33
  <DialogPrimitive.Close
32
- class="ring-offset-background focus:ring-ring absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none"
34
+ class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none"
33
35
  >
34
36
  <X class="size-4" />
35
37
  <span class="sr-only">Close</span>
@@ -22,7 +22,7 @@
22
22
  bind:checked
23
23
  bind:indeterminate
24
24
  class={cn(
25
- 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
25
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50',
26
26
  className,
27
27
  )}
28
28
  {...restProps}
@@ -5,6 +5,7 @@
5
5
  let {
6
6
  ref = $bindable(null),
7
7
  sideOffset = 4,
8
+ preventScroll = false,
8
9
  class: className,
9
10
  ...restProps
10
11
  }: DropdownMenuPrimitive.ContentProps = $props();
@@ -13,6 +14,7 @@
13
14
  <DropdownMenuPrimitive.Content
14
15
  bind:ref
15
16
  {sideOffset}
17
+ {preventScroll}
16
18
  class={cn(
17
19
  'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md outline-none',
18
20
  className,
@@ -15,7 +15,7 @@
15
15
  <DropdownMenuPrimitive.Item
16
16
  bind:ref
17
17
  class={cn(
18
- 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
18
+ 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
19
19
  inset && 'pl-8',
20
20
  className,
21
21
  )}
@@ -14,7 +14,7 @@
14
14
  <DropdownMenuPrimitive.RadioItem
15
15
  bind:ref
16
16
  class={cn(
17
- 'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
17
+ 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50',
18
18
  className,
19
19
  )}
20
20
  {...restProps}
@@ -14,7 +14,7 @@
14
14
  <kbd
15
15
  bind:this={ref}
16
16
  class={cn(
17
- 'bg-muted text-muted-foreground ml-auto rounded-sm px-2 py-1 font-sans text-xs tracking-widest',
17
+ 'ml-auto rounded-sm bg-muted px-2 py-1 font-sans text-xs tracking-widest text-muted-foreground',
18
18
  className,
19
19
  )}
20
20
  {...restProps}
@@ -17,7 +17,7 @@
17
17
  <DropdownMenuPrimitive.SubTrigger
18
18
  bind:ref
19
19
  class={cn(
20
- 'data-[state=open]:bg-accent data-[highlighted]:bg-accent flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
20
+ 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
21
21
  inset && 'pl-8',
22
22
  className,
23
23
  )}
@@ -14,7 +14,7 @@
14
14
  <input
15
15
  bind:this={ref}
16
16
  class={cn(
17
- 'border-input bg-background placeholder:text-muted-foreground focus-visible:border-ring flex h-10 w-full rounded-md border px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',
17
+ 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:border-ring focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',
18
18
  className,
19
19
  )}
20
20
  bind:value
@@ -28,16 +28,16 @@ get along, so we shut typescript up by casting `value` to `never`.
28
28
  {#snippet children({ thumbs })}
29
29
  <span
30
30
  data-orientation={orientation}
31
- class="bg-secondary relative grow overflow-hidden rounded-full data-[orientation='horizontal']:h-2 data-[orientation='vertical']:h-full data-[orientation='horizontal']:w-full data-[orientation='vertical']:w-2"
31
+ class="relative grow overflow-hidden rounded-full bg-secondary data-[orientation='horizontal']:h-2 data-[orientation='vertical']:h-full data-[orientation='horizontal']:w-full data-[orientation='vertical']:w-2"
32
32
  >
33
33
  <SliderPrimitive.Range
34
- class="bg-primary absolute data-[orientation='horizontal']:h-full data-[orientation='vertical']:w-full"
34
+ class="absolute bg-primary data-[orientation='horizontal']:h-full data-[orientation='vertical']:w-full"
35
35
  />
36
36
  </span>
37
37
  {#each thumbs as thumb (thumb)}
38
38
  <SliderPrimitive.Thumb
39
39
  index={thumb}
40
- class="border-primary bg-background ring-offset-background focus-visible:ring-ring block size-5 rounded-full border-2 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"
40
+ class="block size-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"
41
41
  />
42
42
  {/each}
43
43
  {/snippet}
@@ -1,6 +1,6 @@
1
- import { Tabs as TabsPrimitive } from "bits-ui";
2
- import Content from "./tabs-content.svelte";
3
- import List from "./tabs-list.svelte";
4
- import Trigger from "./tabs-trigger.svelte";
1
+ import { Tabs as TabsPrimitive } from 'bits-ui';
2
+ import Content from './tabs-content.svelte';
3
+ import List from './tabs-list.svelte';
4
+ import Trigger from './tabs-trigger.svelte';
5
5
  declare const Root: import("svelte").Component<TabsPrimitive.RootProps, {}, "ref" | "value">;
6
6
  export { Root, Content, List, Trigger, Root as Tabs, Content as TabsContent, List as TabsList, Trigger as TabsTrigger, };
@@ -1,7 +1,7 @@
1
- import { Tabs as TabsPrimitive } from "bits-ui";
2
- import Content from "./tabs-content.svelte";
3
- import List from "./tabs-list.svelte";
4
- import Trigger from "./tabs-trigger.svelte";
1
+ import { Tabs as TabsPrimitive } from 'bits-ui';
2
+ import Content from './tabs-content.svelte';
3
+ import List from './tabs-list.svelte';
4
+ import Trigger from './tabs-trigger.svelte';
5
5
  const Root = TabsPrimitive.Root;
6
6
  export { Root, Content, List, Trigger,
7
7
  //
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
- import { Tabs as TabsPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
2
+ import { Tabs as TabsPrimitive } from 'bits-ui';
3
+ import { cn } from '../../../utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -12,8 +12,8 @@
12
12
  <TabsPrimitive.Content
13
13
  bind:ref
14
14
  class={cn(
15
- "ring-offset-background focus-visible:ring-ring mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
16
- className
15
+ 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
16
+ className,
17
17
  )}
18
18
  {...restProps}
19
19
  />
@@ -1,4 +1,4 @@
1
- import { Tabs as TabsPrimitive } from "bits-ui";
1
+ import { Tabs as TabsPrimitive } from 'bits-ui';
2
2
  declare const TabsContent: import("svelte").Component<TabsPrimitive.ContentProps, {}, "ref">;
3
3
  type TabsContent = ReturnType<typeof TabsContent>;
4
4
  export default TabsContent;
@@ -1,19 +1,15 @@
1
1
  <script lang="ts">
2
- import { Tabs as TabsPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
2
+ import { Tabs as TabsPrimitive } from 'bits-ui';
3
+ import { cn } from '../../../utils.js';
4
4
 
5
- let {
6
- ref = $bindable(null),
7
- class: className,
8
- ...restProps
9
- }: TabsPrimitive.ListProps = $props();
5
+ let { ref = $bindable(null), class: className, ...restProps }: TabsPrimitive.ListProps = $props();
10
6
  </script>
11
7
 
12
8
  <TabsPrimitive.List
13
9
  bind:ref
14
10
  class={cn(
15
- "bg-muted text-muted-foreground inline-flex h-10 items-center justify-center rounded-md p-1",
16
- className
11
+ 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',
12
+ className,
17
13
  )}
18
14
  {...restProps}
19
15
  />
@@ -1,4 +1,4 @@
1
- import { Tabs as TabsPrimitive } from "bits-ui";
1
+ import { Tabs as TabsPrimitive } from 'bits-ui';
2
2
  declare const TabsList: import("svelte").Component<TabsPrimitive.ListProps, {}, "ref">;
3
3
  type TabsList = ReturnType<typeof TabsList>;
4
4
  export default TabsList;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
- import { Tabs as TabsPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
2
+ import { Tabs as TabsPrimitive } from 'bits-ui';
3
+ import { cn } from '../../../utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -12,8 +12,8 @@
12
12
  <TabsPrimitive.Trigger
13
13
  bind:ref
14
14
  class={cn(
15
- "ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm",
16
- className
15
+ 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',
16
+ className,
17
17
  )}
18
18
  {...restProps}
19
19
  />
@@ -1,4 +1,4 @@
1
- import { Tabs as TabsPrimitive } from "bits-ui";
1
+ import { Tabs as TabsPrimitive } from 'bits-ui';
2
2
  declare const TabsTrigger: import("svelte").Component<TabsPrimitive.TriggerProps, {}, "ref">;
3
3
  type TabsTrigger = ReturnType<typeof TabsTrigger>;
4
4
  export default TabsTrigger;
@@ -0,0 +1,10 @@
1
+ import type { TransitionConfig } from 'svelte/transition';
2
+ export interface CircleWipeParams {
3
+ duration?: number;
4
+ easing?: (t: number) => number;
5
+ x?: string;
6
+ y?: string;
7
+ maxRadius?: number;
8
+ direction?: 'in' | 'out';
9
+ }
10
+ export declare function circleWipe(_node: HTMLElement, { duration, easing, x, y, maxRadius, direction, }?: CircleWipeParams): TransitionConfig;
@@ -0,0 +1,16 @@
1
+ export function circleWipe(_node, { duration = 600, easing = (t) => t, x = '50%', y = '50%', maxRadius = 100, direction = 'in', } = {}) {
2
+ return {
3
+ duration,
4
+ easing,
5
+ css: (t, u) => {
6
+ const r = (direction === 'in' ? u : t) * maxRadius;
7
+ const innerColor = direction === 'in' ? 'rgba(0,0,0,1)' : 'rgba(0,0,0,0)';
8
+ const outerColor = direction === 'in' ? 'rgba(0,0,0,0)' : 'rgba(0,0,0,1)';
9
+ const mask = `radial-gradient(circle at ${x} ${y}, ${outerColor} ${r}%, ${innerColor} ${r}%)`;
10
+ return `
11
+ mask: ${mask};
12
+ -webkit-mask: ${mask};
13
+ `;
14
+ },
15
+ };
16
+ }
@@ -0,0 +1,9 @@
1
+ import type { TransitionConfig } from 'svelte/transition';
2
+ export interface LineWipeParams {
3
+ duration?: number;
4
+ easing?: (t: number) => number;
5
+ x?: string;
6
+ y?: string;
7
+ direction?: 'left' | 'right' | 'up' | 'down';
8
+ }
9
+ export declare function lineWipe(_node: HTMLElement, { duration, easing, direction }?: LineWipeParams): TransitionConfig;
@@ -0,0 +1,17 @@
1
+ export function lineWipe(_node, { duration = 600, easing = (t) => t, direction = 'left' } = {}) {
2
+ return {
3
+ duration,
4
+ easing,
5
+ css: (t) => {
6
+ const offset = t * 100;
7
+ const angle = { left: 270, up: 0, right: 90, down: 180 }[direction];
8
+ const startColor = 'rgba(0,0,0,1)';
9
+ const endColor = 'rgba(0,0,0,0)';
10
+ const mask = `linear-gradient(${angle}deg, ${startColor} ${offset}%, ${endColor} ${offset}%)`;
11
+ return `
12
+ mask: ${mask};
13
+ -webkit-mask: ${mask};
14
+ `;
15
+ },
16
+ };
17
+ }