@x33025/sveltely 0.0.58 → 0.1.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 (188) hide show
  1. package/dist/actions/tooltip.d.ts +10 -0
  2. package/dist/actions/tooltip.js +255 -0
  3. package/dist/components/{AnimatedNumber.demo.svelte → Library/AnimatedNumber/AnimatedNumber.demo.svelte} +6 -10
  4. package/dist/components/{AnimatedNumber.demo.svelte.d.ts → Library/AnimatedNumber/AnimatedNumber.demo.svelte.d.ts} +0 -1
  5. package/dist/components/Library/AnimatedNumber/AnimatedNumber.svelte +29 -0
  6. package/dist/components/Library/AnimatedNumber/AnimatedNumber.svelte.d.ts +9 -0
  7. package/dist/components/Library/AnimatedNumber/index.d.ts +1 -0
  8. package/dist/components/Library/AnimatedNumber/index.js +1 -0
  9. package/dist/components/{AsyncButton.demo.svelte → Library/AsyncButton/AsyncButton.demo.svelte} +0 -1
  10. package/dist/components/Library/AsyncButton/AsyncButton.svelte +178 -0
  11. package/dist/components/{AsyncButton.svelte.d.ts → Library/AsyncButton/AsyncButton.svelte.d.ts} +7 -2
  12. package/dist/components/Library/AsyncButton/index.d.ts +1 -0
  13. package/dist/components/Library/AsyncButton/index.js +1 -0
  14. package/dist/components/Library/Button/Button.demo.svelte +17 -0
  15. package/dist/components/Library/Button/Button.demo.svelte.d.ts +23 -0
  16. package/dist/components/Library/Button/Button.svelte +134 -0
  17. package/dist/components/Library/Button/Button.svelte.d.ts +17 -0
  18. package/dist/components/Library/Button/index.d.ts +1 -0
  19. package/dist/components/Library/Button/index.js +1 -0
  20. package/dist/components/Library/Calendar/Calendar.demo.svelte +30 -0
  21. package/dist/components/Library/Calendar/Calendar.demo.svelte.d.ts +10 -0
  22. package/dist/components/Library/Calendar/Calendar.svelte +310 -0
  23. package/dist/components/Library/Calendar/Calendar.svelte.d.ts +10 -0
  24. package/dist/components/Library/Calendar/index.d.ts +1 -0
  25. package/dist/components/Library/Calendar/index.js +1 -0
  26. package/dist/components/Library/Checkbox/Checkbox.demo.svelte +20 -0
  27. package/dist/components/Library/Checkbox/Checkbox.demo.svelte.d.ts +8 -0
  28. package/dist/components/Library/Checkbox/Checkbox.svelte +134 -0
  29. package/dist/components/Library/Checkbox/Checkbox.svelte.d.ts +11 -0
  30. package/dist/components/Library/Checkbox/index.d.ts +1 -0
  31. package/dist/components/Library/Checkbox/index.js +1 -0
  32. package/dist/components/{ChipInput.demo.svelte → Library/ChipInput/ChipInput.demo.svelte} +1 -2
  33. package/dist/components/{ChipInput.demo.svelte.d.ts → Library/ChipInput/ChipInput.demo.svelte.d.ts} +0 -1
  34. package/dist/components/{ChipInput.svelte → Library/ChipInput/ChipInput.svelte} +77 -3
  35. package/dist/components/{ChipInput.svelte.d.ts → Library/ChipInput/ChipInput.svelte.d.ts} +2 -1
  36. package/dist/components/Library/ChipInput/index.d.ts +1 -0
  37. package/dist/components/Library/ChipInput/index.js +1 -0
  38. package/dist/components/Library/Dropdown/Dropdown.demo.svelte +54 -0
  39. package/dist/components/Library/Dropdown/Dropdown.demo.svelte.d.ts +8 -0
  40. package/dist/components/Library/Dropdown/Dropdown.svelte +346 -0
  41. package/dist/components/Library/Dropdown/Dropdown.svelte.d.ts +40 -0
  42. package/dist/components/Library/Dropdown/index.d.ts +2 -0
  43. package/dist/components/Library/Dropdown/index.js +1 -0
  44. package/dist/components/Library/Dropdown/types.d.ts +27 -0
  45. package/dist/components/Library/Dropdown/types.js +1 -0
  46. package/dist/components/{Popover/Popover.svelte → Library/Floating/Floating.svelte} +155 -101
  47. package/dist/components/Library/Floating/Floating.svelte.d.ts +30 -0
  48. package/dist/components/Library/Floating/registry.svelte.d.ts +6 -0
  49. package/dist/components/{Popover → Library/Floating}/registry.svelte.js +2 -23
  50. package/dist/components/{GlowEffect.svelte → Library/GlowEffect/GlowEffect.svelte} +15 -6
  51. package/dist/components/{GlowEffect.svelte.d.ts → Library/GlowEffect/GlowEffect.svelte.d.ts} +3 -2
  52. package/dist/components/Library/GlowEffect/index.d.ts +1 -0
  53. package/dist/components/Library/GlowEffect/index.js +1 -0
  54. package/dist/components/Library/NavigationStack/NavigationStack.svelte +242 -0
  55. package/dist/components/Library/NavigationStack/NavigationStack.svelte.d.ts +15 -0
  56. package/dist/components/Library/NavigationStack/SidebarToggle.svelte +52 -0
  57. package/dist/components/Library/NavigationStack/SidebarToggle.svelte.d.ts +10 -0
  58. package/dist/components/Library/NavigationStack/Toolbar.svelte +59 -0
  59. package/dist/components/Library/NavigationStack/Toolbar.svelte.d.ts +11 -0
  60. package/dist/components/{Pagination.demo.svelte → Library/Pagination/Pagination.demo.svelte} +0 -1
  61. package/dist/components/{Pagination.demo.svelte.d.ts → Library/Pagination/Pagination.demo.svelte.d.ts} +0 -1
  62. package/dist/components/Library/Pagination/Pagination.svelte +227 -0
  63. package/dist/components/{Pagination.svelte.d.ts → Library/Pagination/Pagination.svelte.d.ts} +3 -3
  64. package/dist/components/Library/Pagination/index.d.ts +1 -0
  65. package/dist/components/Library/Pagination/index.js +1 -0
  66. package/dist/components/Library/Popover/Popover.demo.svelte +21 -0
  67. package/dist/components/Library/Popover/Popover.svelte +92 -0
  68. package/dist/components/Library/Popover/Popover.svelte.d.ts +14 -0
  69. package/dist/components/{Popover → Library/Popover}/PopoverDebugOverlay.svelte +1 -1
  70. package/dist/components/Library/Popover/index.d.ts +1 -0
  71. package/dist/components/Library/Popover/index.js +1 -0
  72. package/dist/components/Library/ScrollView/ScrollView.svelte +89 -0
  73. package/dist/components/Library/ScrollView/ScrollView.svelte.d.ts +12 -0
  74. package/dist/components/Library/ScrollView/index.d.ts +1 -0
  75. package/dist/components/Library/ScrollView/index.js +1 -0
  76. package/dist/components/{SearchInput.demo.svelte → Library/SearchInput/SearchInput.demo.svelte} +2 -3
  77. package/dist/components/{SearchInput.demo.svelte.d.ts → Library/SearchInput/SearchInput.demo.svelte.d.ts} +0 -1
  78. package/dist/components/Library/SearchInput/SearchInput.svelte +88 -0
  79. package/dist/components/{SearchInput.svelte.d.ts → Library/SearchInput/SearchInput.svelte.d.ts} +3 -3
  80. package/dist/components/Library/SearchInput/index.d.ts +1 -0
  81. package/dist/components/Library/SearchInput/index.js +1 -0
  82. package/dist/components/{SegmentedPicker.demo.svelte → Library/SegmentedPicker/SegmentedPicker.demo.svelte} +1 -2
  83. package/dist/components/{SegmentedPicker.demo.svelte.d.ts → Library/SegmentedPicker/SegmentedPicker.demo.svelte.d.ts} +0 -1
  84. package/dist/components/Library/SegmentedPicker/SegmentedPicker.svelte +106 -0
  85. package/dist/components/{SegmentedPicker.svelte.d.ts → Library/SegmentedPicker/SegmentedPicker.svelte.d.ts} +2 -2
  86. package/dist/components/Library/SegmentedPicker/index.d.ts +1 -0
  87. package/dist/components/Library/SegmentedPicker/index.js +1 -0
  88. package/dist/components/{Sheet → Library/Sheet}/Sheet.demo.svelte +4 -17
  89. package/dist/components/Library/Sheet/Sheet.demo.svelte.d.ts +23 -0
  90. package/dist/components/Library/Sheet/Sheet.svelte +113 -0
  91. package/dist/components/{Sheet → Library/Sheet}/Sheet.svelte.d.ts +4 -2
  92. package/dist/components/{Slider.demo.svelte → Library/Slider/Slider.demo.svelte} +2 -3
  93. package/dist/components/{Slider.demo.svelte.d.ts → Library/Slider/Slider.demo.svelte.d.ts} +0 -1
  94. package/dist/components/Library/Slider/Slider.svelte +122 -0
  95. package/dist/components/{Slider.svelte.d.ts → Library/Slider/Slider.svelte.d.ts} +2 -3
  96. package/dist/components/Library/Slider/index.d.ts +1 -0
  97. package/dist/components/Library/Slider/index.js +1 -0
  98. package/dist/components/{Spinner.demo.svelte → Library/Spinner/Spinner.demo.svelte} +3 -1
  99. package/dist/components/Library/Spinner/Spinner.svelte +32 -0
  100. package/dist/components/{Spinner.svelte.d.ts → Library/Spinner/Spinner.svelte.d.ts} +3 -2
  101. package/dist/components/Library/Spinner/index.d.ts +1 -0
  102. package/dist/components/Library/Spinner/index.js +1 -0
  103. package/dist/components/Library/Switch/Switch.demo.svelte +20 -0
  104. package/dist/components/Library/Switch/Switch.demo.svelte.d.ts +8 -0
  105. package/dist/components/Library/Switch/Switch.svelte +168 -0
  106. package/dist/components/Library/Switch/Switch.svelte.d.ts +11 -0
  107. package/dist/components/Library/Switch/index.d.ts +1 -0
  108. package/dist/components/Library/Switch/index.js +1 -0
  109. package/dist/components/Library/TextShimmer/TextShimmer.demo.svelte +14 -0
  110. package/dist/components/Library/TextShimmer/TextShimmer.demo.svelte.d.ts +23 -0
  111. package/dist/components/Library/TextShimmer/TextShimmer.svelte +88 -0
  112. package/dist/components/Library/TextShimmer/TextShimmer.svelte.d.ts +11 -0
  113. package/dist/components/Library/TextShimmer/index.d.ts +1 -0
  114. package/dist/components/Library/TextShimmer/index.js +1 -0
  115. package/dist/components/Library/TimePicker/TimePicker.demo.svelte +18 -0
  116. package/dist/components/Library/TimePicker/TimePicker.demo.svelte.d.ts +10 -0
  117. package/dist/components/Library/TimePicker/TimePicker.svelte +143 -0
  118. package/dist/components/Library/TimePicker/TimePicker.svelte.d.ts +13 -0
  119. package/dist/components/Library/TimePicker/index.d.ts +2 -0
  120. package/dist/components/Library/TimePicker/index.js +1 -0
  121. package/dist/components/{TokenSearchInput.demo.svelte → Library/TokenSearchInput/TokenSearchInput.demo.svelte} +1 -2
  122. package/dist/components/{TokenSearchInput.demo.svelte.d.ts → Library/TokenSearchInput/TokenSearchInput.demo.svelte.d.ts} +0 -1
  123. package/dist/components/Library/TokenSearchInput/TokenSearchInput.svelte +230 -0
  124. package/dist/components/{TokenSearchInput.svelte.d.ts → Library/TokenSearchInput/TokenSearchInput.svelte.d.ts} +2 -3
  125. package/dist/components/Library/TokenSearchInput/index.d.ts +1 -0
  126. package/dist/components/Library/TokenSearchInput/index.js +1 -0
  127. package/dist/components/Library/Tooltip/Tooltip.demo.svelte +14 -0
  128. package/dist/components/{Tooltip.demo.svelte.d.ts → Library/Tooltip/Tooltip.demo.svelte.d.ts} +0 -1
  129. package/dist/components/Library/Tooltip/index.d.ts +2 -0
  130. package/dist/components/Library/Tooltip/index.js +1 -0
  131. package/dist/components/Library/WheelPicker/WheelColumn.svelte +302 -0
  132. package/dist/components/Library/WheelPicker/WheelColumn.svelte.d.ts +29 -0
  133. package/dist/components/Library/WheelPicker/WheelPicker.svelte +114 -0
  134. package/dist/components/Library/WheelPicker/WheelPicker.svelte.d.ts +9 -0
  135. package/dist/components/Library/WheelPicker/index.d.ts +2 -0
  136. package/dist/components/Library/WheelPicker/index.js +1 -0
  137. package/dist/components/Library/WheelPicker/types.d.ts +10 -0
  138. package/dist/components/Library/WheelPicker/types.js +1 -0
  139. package/dist/components/Local/ComponentGrid.svelte +7 -6
  140. package/dist/components/Local/ComponentGrid.svelte.d.ts +1 -1
  141. package/dist/components/Local/HeroCard.svelte +18 -8
  142. package/dist/components/Local/HeroCard.svelte.d.ts +1 -1
  143. package/dist/components/Local/StyleControls.svelte +119 -0
  144. package/dist/components/Local/StyleControls.svelte.d.ts +15 -0
  145. package/dist/index.d.ts +24 -15
  146. package/dist/index.js +23 -15
  147. package/dist/style/index.css +61 -325
  148. package/dist/style/surface.d.ts +17 -0
  149. package/dist/style/surface.js +54 -0
  150. package/dist/style.css +86 -601
  151. package/dist/utils/positioning.d.ts +3 -2
  152. package/dist/utils/positioning.js +9 -5
  153. package/package.json +1 -1
  154. package/dist/components/AnimatedNumber.svelte +0 -18
  155. package/dist/components/AnimatedNumber.svelte.d.ts +0 -8
  156. package/dist/components/AsyncButton.svelte +0 -93
  157. package/dist/components/NavigationStack/NavigationStack.svelte +0 -76
  158. package/dist/components/NavigationStack/NavigationStack.svelte.d.ts +0 -10
  159. package/dist/components/NavigationStack/SidebarToggle.svelte +0 -36
  160. package/dist/components/NavigationStack/SidebarToggle.svelte.d.ts +0 -9
  161. package/dist/components/NavigationStack/Toolbar.svelte +0 -25
  162. package/dist/components/NavigationStack/Toolbar.svelte.d.ts +0 -9
  163. package/dist/components/Pagination.svelte +0 -144
  164. package/dist/components/Popover/Popover.demo.svelte +0 -35
  165. package/dist/components/Popover/Popover.svelte.d.ts +0 -13
  166. package/dist/components/Popover/index.d.ts +0 -2
  167. package/dist/components/Popover/index.js +0 -2
  168. package/dist/components/Popover/registry.svelte.d.ts +0 -18
  169. package/dist/components/SearchInput.svelte +0 -39
  170. package/dist/components/SegmentedPicker.svelte +0 -51
  171. package/dist/components/Sheet/Sheet.demo.svelte.d.ts +0 -8
  172. package/dist/components/Sheet/Sheet.svelte +0 -60
  173. package/dist/components/Slider.svelte +0 -47
  174. package/dist/components/Spinner.svelte +0 -7
  175. package/dist/components/TextShimmer.svelte +0 -60
  176. package/dist/components/TextShimmer.svelte.d.ts +0 -10
  177. package/dist/components/TokenSearchInput.svelte +0 -124
  178. package/dist/components/Tooltip.demo.svelte +0 -16
  179. package/dist/components/Tooltip.svelte +0 -79
  180. package/dist/components/Tooltip.svelte.d.ts +0 -12
  181. /package/dist/components/{AsyncButton.demo.svelte.d.ts → Library/AsyncButton/AsyncButton.demo.svelte.d.ts} +0 -0
  182. /package/dist/components/{NavigationStack → Library/NavigationStack}/index.d.ts +0 -0
  183. /package/dist/components/{NavigationStack → Library/NavigationStack}/index.js +0 -0
  184. /package/dist/components/{Popover → Library/Popover}/Popover.demo.svelte.d.ts +0 -0
  185. /package/dist/components/{Popover → Library/Popover}/PopoverDebugOverlay.svelte.d.ts +0 -0
  186. /package/dist/components/{Sheet → Library/Sheet}/index.d.ts +0 -0
  187. /package/dist/components/{Sheet → Library/Sheet}/index.js +0 -0
  188. /package/dist/components/{Spinner.demo.svelte.d.ts → Library/Spinner/Spinner.demo.svelte.d.ts} +0 -0
@@ -1,60 +0,0 @@
1
- <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import { portalContent } from '../../actions/portal';
4
- interface Props {
5
- open?: boolean;
6
- label?: string;
7
- onClose?: () => void;
8
- class?: string;
9
- maxWidth?: string;
10
- children?: Snippet;
11
- }
12
-
13
- let {
14
- open = $bindable(false),
15
- label = 'Dialog',
16
- onClose,
17
- class: className = '',
18
- maxWidth = '32rem',
19
- children
20
- }: Props = $props();
21
-
22
- function close() {
23
- if (!open) return;
24
- open = false;
25
- onClose?.();
26
- }
27
-
28
- $effect(() => {
29
- if (!open) return;
30
- const onKey = (event: KeyboardEvent) => {
31
- if (event.key === 'Escape') close();
32
- };
33
- window.addEventListener('keydown', onKey);
34
- return () => window.removeEventListener('keydown', onKey);
35
- });
36
- </script>
37
-
38
- {#if open}
39
- <div class="center fixed inset-0 z-50 flex" use:portalContent>
40
- <button
41
- type="button"
42
- aria-label="Close dialog"
43
- class="sheet-overlay absolute inset-0"
44
- onclick={close}
45
- ></button>
46
- <div
47
- role="dialog"
48
- aria-modal="true"
49
- aria-label={label}
50
- style={`max-width: ${maxWidth};`}
51
- class="sheet relative z-10 flex max-h-full w-full flex-col overflow-auto {className}"
52
- >
53
- <div class="flex-1">
54
- {#if children}
55
- {@render children()}
56
- {/if}
57
- </div>
58
- </div>
59
- </div>
60
- {/if}
@@ -1,47 +0,0 @@
1
- <script lang="ts">
2
- let {
3
- value = $bindable(0),
4
- min = 0,
5
- max = 100,
6
- step = 1,
7
- disabled = false,
8
- class: className = '',
9
- style = '',
10
- ...props
11
- }: {
12
- value?: number;
13
- min?: number;
14
- max?: number;
15
- step?: number | string;
16
- disabled?: boolean;
17
- class?: string;
18
- style?: string;
19
- } & Record<string, unknown> = $props();
20
-
21
- const percent = $derived.by(() => {
22
- const minValue = Number(min);
23
- const maxValue = Number(max);
24
- const currentValue = Number(value);
25
- const range = maxValue - minValue;
26
- if (!Number.isFinite(range) || range <= 0) return 0;
27
- const raw = ((currentValue - minValue) / range) * 100;
28
- return Math.max(0, Math.min(100, raw));
29
- });
30
-
31
- const sliderStyle = $derived.by(() => {
32
- const cssVars = `--slider-pct: ${percent}%;`;
33
- return style ? `${cssVars} ${style}` : cssVars;
34
- });
35
- </script>
36
-
37
- <input
38
- type="range"
39
- bind:value
40
- {min}
41
- {max}
42
- {step}
43
- {disabled}
44
- class="slider {className}"
45
- style={sliderStyle}
46
- {...props}
47
- />
@@ -1,7 +0,0 @@
1
- <script lang="ts">
2
- import { LoaderIcon } from '@lucide/svelte';
3
-
4
- let { class: className = '', ...props }: { class?: string } & Record<string, unknown> = $props();
5
- </script>
6
-
7
- <LoaderIcon role="status" aria-label="Loading" class="size-4 animate-spin {className}" {...props} />
@@ -1,60 +0,0 @@
1
- <script lang="ts">
2
- interface Props {
3
- text: string;
4
- as?: keyof HTMLElementTagNameMap;
5
- class?: string;
6
- duration?: number;
7
- spread?: number;
8
- }
9
-
10
- let { text, as = 'span', class: className = '', duration = 2, spread = 2 }: Props = $props();
11
-
12
- let dynamicSpread = $derived(text.length * spread);
13
- </script>
14
-
15
- <svelte:element
16
- this={as}
17
- class="text-shimmer {className}"
18
- style="--spread: {dynamicSpread}px; animation-duration: {duration}s; background-image: var(--bg), linear-gradient(var(--base-color), var(--base-color));"
19
- >
20
- {text}
21
- </svelte:element>
22
-
23
- <style>
24
- @keyframes shimmer {
25
- 0% {
26
- background-position: 100% center;
27
- }
28
- 100% {
29
- background-position: 0% center;
30
- }
31
- }
32
-
33
- :global(.text-shimmer) {
34
- position: relative;
35
- display: inline-block;
36
- width: max-content;
37
- max-width: 100%;
38
- background-size:
39
- 250% 100%,
40
- auto;
41
- background-clip: text;
42
- -webkit-background-clip: text;
43
- color: transparent;
44
- --base-color: #a1a1aa;
45
- --base-gradient-color: #000;
46
- background-repeat: no-repeat, padding-box;
47
- --bg: linear-gradient(
48
- 90deg,
49
- #0000 calc(50% - var(--spread)),
50
- var(--base-gradient-color),
51
- #0000 calc(50% + var(--spread))
52
- );
53
- animation: shimmer linear infinite;
54
- }
55
-
56
- :global(.dark .text-shimmer) {
57
- --base-color: #71717a;
58
- --base-gradient-color: #ffffff;
59
- }
60
- </style>
@@ -1,10 +0,0 @@
1
- interface Props {
2
- text: string;
3
- as?: keyof HTMLElementTagNameMap;
4
- class?: string;
5
- duration?: number;
6
- spread?: number;
7
- }
8
- declare const TextShimmer: import("svelte").Component<Props, {}, "">;
9
- type TextShimmer = ReturnType<typeof TextShimmer>;
10
- export default TextShimmer;
@@ -1,124 +0,0 @@
1
- <script lang="ts">
2
- import { SearchIcon, X } from '@lucide/svelte';
3
- import type { HTMLInputAttributes } from 'svelte/elements';
4
-
5
- type Props = {
6
- tokens?: string[];
7
- value?: string;
8
- confirmText?: string | null;
9
- inputClass?: string;
10
- tokenClass?: string;
11
- placeholder?: string;
12
- tokenPlaceholder?: string;
13
- normalizeToken?: (value: string) => string;
14
- showIcon?: boolean;
15
- } & Omit<HTMLInputAttributes, 'children' | 'type' | 'value' | 'placeholder'>;
16
-
17
- const defaultNormalizeToken = (value: string) => value.trim().replace(/\s+/g, ' ');
18
-
19
- let {
20
- tokens = $bindable<string[]>([]),
21
- value = $bindable(''),
22
- confirmText = null,
23
- inputClass = '',
24
- tokenClass = '',
25
- placeholder = 'Search',
26
- tokenPlaceholder = 'Add search token',
27
- normalizeToken = defaultNormalizeToken,
28
- showIcon = false,
29
- class: className = '',
30
- disabled = false,
31
- ...props
32
- }: Props = $props();
33
-
34
- const addToken = (rawValue: string) => {
35
- const token = normalizeToken(rawValue);
36
- if (!token || tokens.includes(token)) return;
37
- tokens = [...tokens, token];
38
- };
39
-
40
- const commitValue = () => {
41
- addToken(value);
42
- value = '';
43
- };
44
-
45
- const removeToken = (index: number) => {
46
- if (index < 0 || index >= tokens.length) return;
47
- tokens = tokens.filter((_, currentIndex) => currentIndex !== index);
48
- };
49
-
50
- const onKeydown = (event: KeyboardEvent) => {
51
- if (event.key === 'Enter' || event.key === ',') {
52
- event.preventDefault();
53
- commitValue();
54
- return;
55
- }
56
-
57
- if (event.key === 'Backspace' && value.length === 0 && tokens.length > 0) {
58
- event.preventDefault();
59
- tokens = tokens.slice(0, -1);
60
- }
61
- };
62
-
63
- const onPaste = (event: ClipboardEvent) => {
64
- const pasted = event.clipboardData?.getData('text') ?? '';
65
- if (!pasted.includes(',')) return;
66
-
67
- event.preventDefault();
68
-
69
- const nextTokens = [...tokens];
70
- const seen = new Set(nextTokens);
71
- for (const part of pasted.split(',')) {
72
- const token = normalizeToken(part);
73
- if (!token || seen.has(token)) continue;
74
- nextTokens.push(token);
75
- seen.add(token);
76
- }
77
-
78
- tokens = nextTokens;
79
- value = '';
80
- };
81
- </script>
82
-
83
- <div
84
- class="token-search-input hstack w-full flex-nowrap items-center gap-1 overflow-x-auto overflow-y-hidden whitespace-nowrap {className}"
85
- class:token-search-input-has-tokens={tokens.length > 0}
86
- data-disabled={disabled ? 'true' : 'false'}
87
- >
88
- {#if showIcon}
89
- <span class="token-search-input-icon" aria-hidden="true">
90
- <SearchIcon class="size-4" />
91
- </span>
92
- {/if}
93
-
94
- {#each tokens as token, index (`${token}-${index}`)}
95
- <button
96
- type="button"
97
- class="token-search-input-token {tokenClass}"
98
- onclick={() => removeToken(index)}
99
- aria-label={`Remove search token ${token}`}
100
- {disabled}
101
- >
102
- <span>{token}</span>
103
- <X class="size-3" aria-hidden="true" />
104
- </button>
105
- {/each}
106
-
107
- <input
108
- type="search"
109
- bind:value
110
- {disabled}
111
- placeholder={tokens.length === 0 ? placeholder : tokenPlaceholder}
112
- class="token-search-input-field {inputClass}"
113
- onkeydown={onKeydown}
114
- onpaste={onPaste}
115
- onblur={commitValue}
116
- {...props}
117
- />
118
-
119
- {#if confirmText}
120
- <span class="token-search-input-confirm">
121
- {confirmText}
122
- </span>
123
- {/if}
124
- </div>
@@ -1,16 +0,0 @@
1
- <script module lang="ts">
2
- export const demo = {
3
- name: 'Tooltip',
4
- description: 'Hover or focus a trigger to reveal contextual text.'
5
- };
6
- </script>
7
-
8
- <script lang="ts">
9
- import Tooltip from './Tooltip.svelte';
10
- </script>
11
-
12
- <Tooltip label="This is a tooltip">
13
- <button type="button" class="rounded-full border border-zinc-300 px-3 py-2 text-sm text-zinc-800">
14
- Hover me
15
- </button>
16
- </Tooltip>
@@ -1,79 +0,0 @@
1
- <script lang="ts">
2
- import { tick } from 'svelte';
3
- import type { Snippet } from 'svelte';
4
- import { portalContent } from '../actions/portal';
5
- import { computePosition, type Anchor } from '../utils/positioning';
6
-
7
- let {
8
- label,
9
- class: className = '',
10
- disabled = false,
11
- anchor = 'top' as Anchor,
12
- children,
13
- ...props
14
- }: {
15
- label: string;
16
- class?: string;
17
- disabled?: boolean;
18
- anchor?: Anchor;
19
- children: Snippet;
20
- } & Record<string, unknown> = $props();
21
-
22
- let triggerEl = $state<HTMLElement | null>(null);
23
- let tooltipEl = $state<HTMLElement | null>(null);
24
- let visible = $state(false);
25
- let coords = $state({ top: 0, left: 0 });
26
- let transform = $state('none');
27
- let resolvedAnchor = $state<Anchor>('top');
28
-
29
- const position = async () => {
30
- await tick();
31
- await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()));
32
- if (!triggerEl || !tooltipEl) return;
33
- const result = computePosition(
34
- triggerEl.getBoundingClientRect(),
35
- tooltipEl.offsetWidth,
36
- tooltipEl.offsetHeight,
37
- anchor,
38
- 'center'
39
- );
40
- coords = { top: result.top, left: result.left };
41
- transform = result.transform;
42
- resolvedAnchor = result.anchor;
43
- };
44
-
45
- const show = () => {
46
- if (disabled) return;
47
- visible = true;
48
- void position();
49
- };
50
-
51
- const hide = () => {
52
- visible = false;
53
- };
54
- </script>
55
-
56
- <span
57
- bind:this={triggerEl}
58
- class="inline-flex items-center {className}"
59
- onmouseenter={show}
60
- onmouseleave={hide}
61
- onfocusin={show}
62
- onfocusout={hide}
63
- {...props}
64
- >
65
- {@render children()}
66
- </span>
67
-
68
- {#if visible}
69
- <div
70
- use:portalContent
71
- class="tooltip pointer-events-none fixed z-50"
72
- data-anchor={resolvedAnchor}
73
- style="top: {coords.top}px; left: {coords.left}px; transform: {transform};"
74
- role="tooltip"
75
- bind:this={tooltipEl}
76
- >
77
- {label}
78
- </div>
79
- {/if}
@@ -1,12 +0,0 @@
1
- import type { Snippet } from 'svelte';
2
- import { type Anchor } from '../utils/positioning';
3
- type $$ComponentProps = {
4
- label: string;
5
- class?: string;
6
- disabled?: boolean;
7
- anchor?: Anchor;
8
- children: Snippet;
9
- } & Record<string, unknown>;
10
- declare const Tooltip: import("svelte").Component<$$ComponentProps, {}, "">;
11
- type Tooltip = ReturnType<typeof Tooltip>;
12
- export default Tooltip;