@invopop/popui 0.1.35 → 0.1.40

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 (119) hide show
  1. package/dist/BaseButton.svelte +4 -0
  2. package/dist/BaseDropdown.svelte +42 -3
  3. package/dist/BaseDropdown.svelte.d.ts +1 -0
  4. package/dist/BaseTableHeaderOrderBy.svelte +35 -12
  5. package/dist/ButtonSearch.svelte +82 -0
  6. package/dist/ButtonSearch.svelte.d.ts +4 -0
  7. package/dist/ButtonUuidCopy.svelte +1 -0
  8. package/dist/DatePicker.svelte +96 -27
  9. package/dist/DatePicker.svelte.d.ts +5 -1
  10. package/dist/DrawerContext.svelte +443 -34
  11. package/dist/DrawerContextItem.svelte +36 -29
  12. package/dist/DropdownSelect.svelte +68 -18
  13. package/dist/DropdownSelect.svelte.d.ts +4 -1
  14. package/dist/DropdownSelectGroup.svelte +15 -0
  15. package/dist/DropdownSelectGroup.svelte.d.ts +7 -0
  16. package/dist/EmptyState.svelte +6 -2
  17. package/dist/InputSearch.svelte +45 -5
  18. package/dist/InputSelect.svelte +12 -3
  19. package/dist/InputText.svelte +25 -8
  20. package/dist/InputToggle.svelte +23 -6
  21. package/dist/StepIcon.svelte +35 -0
  22. package/dist/StepIcon.svelte.d.ts +4 -0
  23. package/dist/StepIconList.svelte +24 -31
  24. package/dist/TagStatus.svelte +1 -1
  25. package/dist/button/button.svelte +34 -3
  26. package/dist/button/button.svelte.d.ts +29 -0
  27. package/dist/clickOutside.d.ts +5 -2
  28. package/dist/clickOutside.js +9 -3
  29. package/dist/data-table/cells/boolean-cell.svelte +29 -0
  30. package/dist/data-table/cells/boolean-cell.svelte.d.ts +8 -0
  31. package/dist/data-table/cells/cell-skeleton.svelte +35 -0
  32. package/dist/data-table/cells/cell-skeleton.svelte.d.ts +4 -0
  33. package/dist/data-table/cells/currency-cell.svelte +10 -0
  34. package/dist/data-table/cells/currency-cell.svelte.d.ts +8 -0
  35. package/dist/data-table/cells/date-cell.svelte +10 -0
  36. package/dist/data-table/cells/date-cell.svelte.d.ts +8 -0
  37. package/dist/data-table/cells/tag-cell.svelte +12 -0
  38. package/dist/data-table/cells/tag-cell.svelte.d.ts +8 -0
  39. package/dist/data-table/cells/text-cell.svelte +10 -0
  40. package/dist/data-table/cells/text-cell.svelte.d.ts +8 -0
  41. package/dist/data-table/cells/uuid-cell.svelte +17 -0
  42. package/dist/data-table/cells/uuid-cell.svelte.d.ts +8 -0
  43. package/dist/data-table/column-definitions.d.ts +12 -0
  44. package/dist/data-table/column-definitions.js +42 -0
  45. package/dist/data-table/column-sizing-helpers.d.ts +6 -0
  46. package/dist/data-table/column-sizing-helpers.js +24 -0
  47. package/dist/data-table/create-columns.d.ts +3 -0
  48. package/dist/data-table/create-columns.js +67 -0
  49. package/dist/data-table/data-table-cell.svelte +94 -0
  50. package/dist/data-table/data-table-cell.svelte.d.ts +25 -0
  51. package/dist/data-table/data-table-header-cell.svelte +188 -0
  52. package/dist/data-table/data-table-header-cell.svelte.d.ts +25 -0
  53. package/dist/data-table/data-table-helpers.d.ts +10 -0
  54. package/dist/data-table/data-table-helpers.js +124 -0
  55. package/dist/data-table/data-table-pagination.svelte +214 -0
  56. package/dist/data-table/data-table-pagination.svelte.d.ts +4 -0
  57. package/dist/data-table/data-table-row.svelte +57 -0
  58. package/dist/data-table/data-table-row.svelte.d.ts +25 -0
  59. package/dist/data-table/data-table-svelte.svelte.d.ts +40 -0
  60. package/dist/data-table/data-table-svelte.svelte.js +115 -0
  61. package/dist/data-table/data-table-toolbar.svelte +19 -0
  62. package/dist/data-table/data-table-toolbar.svelte.d.ts +32 -0
  63. package/dist/data-table/data-table-types.d.ts +194 -0
  64. package/dist/data-table/data-table-types.js +1 -0
  65. package/dist/data-table/data-table-view-options.svelte +126 -0
  66. package/dist/data-table/data-table-view-options.svelte.d.ts +29 -0
  67. package/dist/data-table/data-table.svelte +428 -0
  68. package/dist/data-table/data-table.svelte.d.ts +25 -0
  69. package/dist/data-table/flex-render.svelte +40 -0
  70. package/dist/data-table/flex-render.svelte.d.ts +33 -0
  71. package/dist/data-table/index.d.ts +13 -0
  72. package/dist/data-table/index.js +13 -0
  73. package/dist/data-table/render-helpers.d.ts +90 -0
  74. package/dist/data-table/render-helpers.js +99 -0
  75. package/dist/data-table/table-setup.d.ts +39 -0
  76. package/dist/data-table/table-setup.js +151 -0
  77. package/dist/data-table/table-styles.d.ts +17 -0
  78. package/dist/data-table/table-styles.js +70 -0
  79. package/dist/drawer-dnd-helpers.d.ts +30 -0
  80. package/dist/drawer-dnd-helpers.js +72 -0
  81. package/dist/helpers.d.ts +1 -0
  82. package/dist/helpers.js +3 -0
  83. package/dist/index.d.ts +15 -3
  84. package/dist/index.js +28 -5
  85. package/dist/skeleton/index.d.ts +5 -0
  86. package/dist/skeleton/index.js +7 -0
  87. package/dist/skeleton/skeleton-avatar.svelte +14 -0
  88. package/dist/skeleton/skeleton-avatar.svelte.d.ts +7 -0
  89. package/dist/skeleton/skeleton-card.svelte +22 -0
  90. package/dist/skeleton/skeleton-card.svelte.d.ts +9 -0
  91. package/dist/skeleton/skeleton-list.svelte +25 -0
  92. package/dist/skeleton/skeleton-list.svelte.d.ts +8 -0
  93. package/dist/skeleton/skeleton.svelte +17 -0
  94. package/dist/skeleton/skeleton.svelte.d.ts +5 -0
  95. package/dist/svg/IconDelivery.svelte +1 -1
  96. package/dist/svg/IconOrder.svelte +1 -1
  97. package/dist/svg/IconPayment.svelte +1 -1
  98. package/dist/table/table-cell.svelte +4 -2
  99. package/dist/table/table-head.svelte +4 -2
  100. package/dist/table/table-header.svelte +1 -1
  101. package/dist/table/table-row.svelte +4 -2
  102. package/dist/table/table.svelte +2 -2
  103. package/dist/tailwind.theme.css +30 -6
  104. package/dist/tooltip/index.d.ts +2 -1
  105. package/dist/tooltip/index.js +3 -2
  106. package/dist/tooltip/tooltip-auto-hide.svelte +31 -0
  107. package/dist/tooltip/tooltip-auto-hide.svelte.d.ts +7 -0
  108. package/dist/types.d.ts +51 -73
  109. package/package.json +14 -8
  110. package/dist/BaseTable.svelte +0 -391
  111. package/dist/BaseTable.svelte.d.ts +0 -4
  112. package/dist/BaseTableCellContent.svelte +0 -58
  113. package/dist/BaseTableCellContent.svelte.d.ts +0 -4
  114. package/dist/BaseTableCheckbox.svelte +0 -33
  115. package/dist/BaseTableCheckbox.svelte.d.ts +0 -4
  116. package/dist/BaseTableHeaderContent.svelte +0 -67
  117. package/dist/BaseTableHeaderContent.svelte.d.ts +0 -4
  118. package/dist/BaseTableRow.svelte +0 -127
  119. package/dist/BaseTableRow.svelte.d.ts +0 -4
@@ -14,6 +14,8 @@
14
14
  shortcut = false,
15
15
  fullwidth = false,
16
16
  notification = false,
17
+ stackedLeft = false,
18
+ stackedRight = false,
17
19
  children,
18
20
  onclick,
19
21
  class: className,
@@ -30,6 +32,8 @@
30
32
  iconClass,
31
33
  type,
32
34
  disabled,
35
+ stackedLeft,
36
+ stackedRight,
33
37
  onclick,
34
38
  class: `${fullWidthClass} ${className || ''}`,
35
39
  ...rest
@@ -4,18 +4,23 @@
4
4
  import { clickOutside } from './clickOutside.js'
5
5
  import { portal } from 'svelte-portal'
6
6
  import type { BaseDropdownProps } from './types.js'
7
+ import type { TransitionConfig } from 'svelte/transition'
7
8
 
8
9
  let {
9
10
  isOpen = $bindable(false),
10
11
  fullWidth = false,
11
12
  placement = 'bottom-start',
12
13
  matchParentWidth = false,
14
+ usePortal = true,
13
15
  class: className = '',
14
16
  trigger,
15
17
  children,
16
18
  ...rest
17
19
  }: BaseDropdownProps = $props()
18
20
 
21
+ // Conditional portal action - noop if disabled
22
+ const conditionalPortal = usePortal ? portal : () => {}
23
+
19
24
  const middleware = [offset(6), flip(), shift()]
20
25
 
21
26
  if (matchParentWidth) {
@@ -31,18 +36,51 @@
31
36
  )
32
37
  }
33
38
 
39
+ let closedFromClickOutside = $state(false)
40
+
41
+ // Create floating actions with strategy based on usePortal
42
+ const strategy = usePortal ? 'absolute' : 'fixed'
34
43
  const [floatingRef, floatingContent] = createFloatingActions({
35
- strategy: 'absolute',
44
+ strategy,
36
45
  placement,
37
46
  middleware
38
47
  })
39
48
 
40
- let closedFromClickOutside = $state(false)
49
+ // Custom transition that mimics shadcn style
50
+ function dropdownTransition(
51
+ node: HTMLElement,
52
+ { duration = 70 }: { duration?: number } = {}
53
+ ): TransitionConfig {
54
+ const side = placement.split('-')[0]
55
+
56
+ // Calculate slide direction
57
+ let slideY = 0
58
+ let slideX = 0
59
+ if (side === 'bottom') slideY = -8
60
+ if (side === 'top') slideY = 8
61
+ if (side === 'left') slideX = 8
62
+ if (side === 'right') slideX = -8
63
+
64
+ return {
65
+ duration,
66
+ css: (t) => {
67
+ const eased = t * (2 - t) // ease-out
68
+ return `
69
+ opacity: ${eased};
70
+ transform: scale(${0.95 + eased * 0.05}) translate(${slideX * (1 - eased)}px, ${slideY * (1 - eased)}px);
71
+ `
72
+ }
73
+ }
74
+ }
41
75
 
42
76
  export const toggle = () => {
43
77
  isOpen = !isOpen
44
78
  }
45
79
 
80
+ export const close = () => {
81
+ isOpen = false
82
+ }
83
+
46
84
  function handleClick(event: MouseEvent) {
47
85
  event.stopPropagation()
48
86
  if (closedFromClickOutside) return
@@ -62,7 +100,7 @@
62
100
  {#if isOpen}
63
101
  <div
64
102
  class="max-h-40 absolute z-1001"
65
- use:portal
103
+ use:conditionalPortal
66
104
  use:floatingContent
67
105
  use:clickOutside
68
106
  onclick_outside={() => {
@@ -72,6 +110,7 @@
72
110
  }, 100)
73
111
  isOpen = false
74
112
  }}
113
+ transition:dropdownTransition={{ duration: 70 }}
75
114
  >
76
115
  {@render children?.()}
77
116
  </div>
@@ -1,6 +1,7 @@
1
1
  import type { BaseDropdownProps } from './types.js';
2
2
  declare const BaseDropdown: import("svelte").Component<BaseDropdownProps, {
3
3
  toggle: () => void;
4
+ close: () => void;
4
5
  }, "isOpen">;
5
6
  type BaseDropdown = ReturnType<typeof BaseDropdown>;
6
7
  export default BaseDropdown;
@@ -1,24 +1,47 @@
1
1
  <script lang="ts">
2
- import { SortAscending, SortDescending } from '@invopop/ui-icons'
2
+ import { SortAscending, SortDescending, Preview, Filter, Lock } from '@invopop/ui-icons'
3
3
  import type { TableSortBy, DrawerOption, BaseTableHeaderOrderByProps } from './types.js'
4
4
  import DrawerContext from './DrawerContext.svelte'
5
5
 
6
- let { isActive = false, sortDirection, onOrderBy }: BaseTableHeaderOrderByProps = $props()
6
+ let { isActive = false, sortDirection, onOrderBy, onHide, onFilter, onFreeze, isFrozen = false, showSortOptions = true, showFilterOption = true }: BaseTableHeaderOrderByProps = $props()
7
7
 
8
- let items = $derived(
9
- [
10
- { icon: SortAscending, label: 'Sort Ascending', value: 'asc' },
11
- { icon: SortDescending, label: 'Sort Descending', value: 'desc' }
12
- ].map((o) => ({
13
- ...o,
14
- selected: isActive && sortDirection === o.value
15
- })) as DrawerOption[]
16
- )
8
+ let items = $derived([
9
+ ...(showSortOptions ? [
10
+ {
11
+ icon: SortAscending,
12
+ label: 'Sort Ascending',
13
+ value: 'asc',
14
+ selected: isActive && sortDirection === 'asc'
15
+ },
16
+ {
17
+ icon: SortDescending,
18
+ label: 'Sort Descending',
19
+ value: 'desc',
20
+ selected: isActive && sortDirection === 'desc'
21
+ },
22
+ { label: '', value: 'sep-1', separator: true }
23
+ ] : []),
24
+ ...(showFilterOption ? [
25
+ { icon: Filter, label: 'Filter by column', value: 'filter' },
26
+ { label: '', value: 'sep-2', separator: true }
27
+ ] : []),
28
+ { icon: Lock, label: isFrozen ? 'Unfreeze column' : 'Freeze column', value: 'freeze' },
29
+ { label: '', value: 'sep-3', separator: true },
30
+ { icon: Preview, label: 'Hide column', value: 'hide' }
31
+ ] as DrawerOption[])
17
32
  </script>
18
33
 
19
34
  <DrawerContext
20
35
  {items}
21
36
  onclick={(e) => {
22
- onOrderBy?.(e as TableSortBy)
37
+ if (e === 'hide') {
38
+ onHide?.()
39
+ } else if (e === 'filter') {
40
+ onFilter?.()
41
+ } else if (e === 'freeze') {
42
+ onFreeze?.()
43
+ } else {
44
+ onOrderBy?.(e as TableSortBy)
45
+ }
23
46
  }}
24
47
  />
@@ -0,0 +1,82 @@
1
+ <script lang="ts">
2
+ import { Search, Pulse } from '@invopop/ui-icons'
3
+ import BaseButton from './BaseButton.svelte'
4
+ import InputSearch from './InputSearch.svelte'
5
+ import { clickOutside } from './clickOutside.js'
6
+ import type { ButtonSearchProps } from './types.js'
7
+
8
+ let {
9
+ value = $bindable(''),
10
+ expanded = $bindable(false),
11
+ placeholder = 'Search...',
12
+ size = 'sm',
13
+ loading = false,
14
+ autofocus = false,
15
+ oninput,
16
+ onExpand,
17
+ onCollapse
18
+ }: ButtonSearchProps = $props()
19
+
20
+ let inputSearch: InputSearch | undefined = $state()
21
+ let isLoadingCollapsed = $derived(loading && !expanded)
22
+
23
+ function handleExpand() {
24
+ expanded = true
25
+ onExpand?.()
26
+ }
27
+
28
+ function handleClickOutside() {
29
+ if (expanded && value.trim() === '') {
30
+ expanded = false
31
+ onCollapse?.()
32
+ }
33
+ }
34
+
35
+ function handleInput(newValue: string) {
36
+ value = newValue
37
+ oninput?.(newValue)
38
+ }
39
+
40
+ $effect(() => {
41
+ if (expanded && inputSearch) {
42
+ inputSearch.focus()
43
+ }
44
+ })
45
+ </script>
46
+
47
+ <div
48
+ class="overflow-hidden transition-all duration-150 ease-in-out relative rounded-md"
49
+ class:w-[280px]={expanded}
50
+ class:w-10={!expanded}
51
+ use:clickOutside
52
+ onclick_outside={handleClickOutside}
53
+ >
54
+ <div
55
+ class="w-[280px] transition-opacity duration-100 absolute left-0 top-0"
56
+ class:opacity-0={!expanded}
57
+ class:opacity-100={expanded}
58
+ class:pointer-events-none={!expanded}
59
+ >
60
+ <InputSearch
61
+ bind:this={inputSearch}
62
+ bind:value
63
+ {placeholder}
64
+ {size}
65
+ {loading}
66
+ {autofocus}
67
+ oninput={handleInput}
68
+ />
69
+ </div>
70
+ <div
71
+ class="transition-opacity duration-100"
72
+ class:opacity-0={expanded}
73
+ class:opacity-100={!expanded}
74
+ class:pointer-events-none={expanded}
75
+ >
76
+ <BaseButton
77
+ icon={isLoadingCollapsed ? Pulse : Search}
78
+ class={isLoadingCollapsed ? 'pulse-icon' : ''}
79
+ onclick={handleExpand}
80
+ />
81
+ </div>
82
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { ButtonSearchProps } from './types.js';
2
+ declare const ButtonSearch: import("svelte").Component<ButtonSearchProps, {}, "value" | "expanded">;
3
+ type ButtonSearch = ReturnType<typeof ButtonSearch>;
4
+ export default ButtonSearch;
@@ -32,6 +32,7 @@
32
32
  icon={Duplicate}
33
33
  iconPosition="right"
34
34
  variant="ghost"
35
+ data-uuid-copy
35
36
  onclick={async (e) => {
36
37
  e.stopPropagation()
37
38
  await navigator.clipboard.writeText(uuid)
@@ -3,13 +3,17 @@
3
3
  import RangeCalendar from './range-calendar/range-calendar.svelte'
4
4
  import { parseDate, type DateValue } from '@internationalized/date'
5
5
  import type { DateRange } from 'bits-ui'
6
- import { Icon } from '@steeze-ui/svelte-icon'
7
- import { Calendar } from '@invopop/ui-icons'
6
+ import { Icon, type IconSource } from '@steeze-ui/svelte-icon'
8
7
  import Transition from 'svelte-transition'
9
8
  import type { DatePickerProps } from './types'
10
9
  import { clickOutside } from './clickOutside'
11
10
  import BaseButton from './BaseButton.svelte'
12
- import { datesFromToday, toCalendarDate } from './helpers'
11
+ import { datesFromToday, toCalendarDate, resolveIcon } from './helpers'
12
+ import { buttonVariants } from './button/button.svelte'
13
+ import { offset, flip, shift } from 'svelte-floating-ui/dom'
14
+ import { createFloatingActions } from 'svelte-floating-ui'
15
+ import { portal } from 'svelte-portal'
16
+ import { cn } from './utils'
13
17
 
14
18
  const {
15
19
  startOfThisWeek,
@@ -109,25 +113,50 @@
109
113
 
110
114
  let {
111
115
  label = 'Date',
112
- position = 'left',
116
+ placement = 'bottom-start',
113
117
  from = '',
114
118
  to = '',
115
- onSelect
119
+ onSelect,
120
+ stackLeft = false,
121
+ stackRight = false,
122
+ icon = undefined,
123
+ iconTheme = 'default',
124
+ isOpen = $bindable(false)
116
125
  }: DatePickerProps = $props()
117
126
 
127
+ const [floatingRef, floatingContent] = createFloatingActions({
128
+ strategy: 'absolute',
129
+ placement,
130
+ middleware: [offset(8), flip(), shift()]
131
+ })
132
+
133
+ let resolvedIcon: IconSource | undefined = $state()
134
+
135
+ $effect(() => {
136
+ resolveIcon(icon).then((res) => (resolvedIcon = res))
137
+ })
138
+
118
139
  let selectedPeriod = $state('custom')
119
140
  let value = $state<DateRange>({
120
141
  start: undefined,
121
142
  end: undefined
122
143
  })
123
- let isOpen = $state(false)
144
+ let selectedLabel = $state(label)
145
+ let isStacked = $derived(stackLeft || stackRight)
146
+ let hasSelectedDates = $derived(value.start !== undefined)
147
+ let hasConfirmedDates = $derived(selectedLabel !== label)
124
148
  let styles = $derived(
125
- clsx({
126
- 'border-border-selected-bold shadow-active': isOpen,
127
- 'border-border-secondary hover:border-border-default-secondary-hover': !isOpen
128
- })
149
+ isStacked
150
+ ? buttonVariants({
151
+ variant: 'ghost',
152
+ stackedLeft: stackLeft,
153
+ stackedRight: stackRight
154
+ })
155
+ : clsx('border backdrop-blur-sm backdrop-filter', {
156
+ 'border-border-selected-bold shadow-active': isOpen,
157
+ 'border-border-default-secondary hover:border-border-default-secondary-hover': !isOpen
158
+ })
129
159
  )
130
- let selectedLabel = $state(label)
131
160
 
132
161
  $effect(() => {
133
162
  if (!value.end) {
@@ -137,9 +166,19 @@
137
166
 
138
167
  $effect(() => {
139
168
  if (from) {
169
+ const startDate = parseDate(from)
170
+ const endDate = to ? parseDate(to) : undefined
171
+
140
172
  value = {
141
- start: parseDate(from),
142
- end: to ? parseDate(to) : undefined
173
+ start: startDate,
174
+ end: endDate
175
+ }
176
+
177
+ // Update label directly without calling getLabel() to avoid circular dependency
178
+ if (startDate === endDate) {
179
+ selectedLabel = getDisplayFromValue(startDate)
180
+ } else {
181
+ selectedLabel = `${getDisplayFromValue(startDate)} → ${getDisplayFromValue(endDate)}`
143
182
  }
144
183
  return
145
184
  }
@@ -180,22 +219,52 @@
180
219
 
181
220
  onSelect?.({ from: value.start?.toString() || '', to: value.end?.toString() || '' })
182
221
  }
222
+
223
+ // Exposed methods
224
+ export function open() {
225
+ isOpen = true
226
+ }
227
+
228
+ export function close() {
229
+ isOpen = false
230
+ }
231
+
232
+ export function toggle() {
233
+ isOpen = !isOpen
234
+ }
183
235
  </script>
184
236
 
185
237
  <div>
186
- <div class="relative">
187
- <button
188
- onclick={() => {
189
- isOpen = !isOpen
190
- }}
191
- class="{styles} datepicker-trigger w-full py-1.25 pl-7 pr-2 text-left border border-border-default-secondary rounded-lg text-foreground placeholder-foreground text-base cursor-pointer"
238
+ <button
239
+ use:floatingRef
240
+ onclick={() => {
241
+ isOpen = !isOpen
242
+ }}
243
+ class="{styles} {isStacked
244
+ ? 'h-7 py-1.5'
245
+ : 'py-1.5'} datepicker-trigger flex items-center w-full {resolvedIcon
246
+ ? 'pl-7'
247
+ : 'pl-2'} pr-2 text-left rounded-lg bg-background cursor-pointer relative overflow-hidden"
248
+ >
249
+ {#if resolvedIcon}
250
+ <Icon
251
+ src={resolvedIcon}
252
+ theme={iconTheme}
253
+ class="h-4 w-4 absolute top-1.5 left-2 text-foreground-default-secondary"
254
+ />
255
+ {/if}
256
+ <span
257
+ class={clsx('flex-1 text-base truncate', {
258
+ 'text-foreground': hasConfirmedDates,
259
+ 'text-foreground-default-secondary': !hasConfirmedDates,
260
+ 'font-normal': isStacked && !hasConfirmedDates
261
+ })}
192
262
  >
193
263
  {selectedLabel}
194
- </button>
195
- <Icon src={Calendar} class="h-4 w-4 absolute top-2 left-2 text-foreground-default-secondary" />
196
- </div>
264
+ </span>
265
+ </button>
197
266
 
198
- <div class="relative">
267
+ {#if isOpen}
199
268
  <Transition
200
269
  show={isOpen}
201
270
  enter="transition ease-out duration-100"
@@ -207,9 +276,9 @@
207
276
  >
208
277
  <!-- @ts-ignore -->
209
278
  <div
210
- class:left-0={position === 'left'}
211
- class:right-0={position === 'right'}
212
- class="bg-background inline-flex flex-col shadow-lg rounded-xl absolute right-0 top-2 z-40 border border-border"
279
+ use:portal
280
+ use:floatingContent
281
+ class="bg-background inline-flex flex-col shadow-lg rounded-xl absolute z-1001 border border-border"
213
282
  use:clickOutside
214
283
  onclick_outside={() => {
215
284
  if (!isOpen) return
@@ -239,5 +308,5 @@
239
308
  </div>
240
309
  </div>
241
310
  </Transition>
242
- </div>
311
+ {/if}
243
312
  </div>
@@ -1,4 +1,8 @@
1
1
  import type { DatePickerProps } from './types';
2
- declare const DatePicker: import("svelte").Component<DatePickerProps, {}, "">;
2
+ declare const DatePicker: import("svelte").Component<DatePickerProps, {
3
+ open: () => void;
4
+ close: () => void;
5
+ toggle: () => void;
6
+ }, "isOpen">;
3
7
  type DatePicker = ReturnType<typeof DatePicker>;
4
8
  export default DatePicker;