twintrinsic 0.0.1

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 (212) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +150 -0
  3. package/dist/App/App.svelte +54 -0
  4. package/dist/App/App.svelte.d.ts +65 -0
  5. package/dist/Section.svelte +25 -0
  6. package/dist/Section.svelte.d.ts +34 -0
  7. package/dist/actions/clickOutside.d.ts +9 -0
  8. package/dist/actions/clickOutside.js +19 -0
  9. package/dist/actions/index.d.ts +1 -0
  10. package/dist/actions/index.js +1 -0
  11. package/dist/components/Accordion/Accordion.svelte +75 -0
  12. package/dist/components/Accordion/Accordion.svelte.d.ts +39 -0
  13. package/dist/components/Accordion/AccordionItem.svelte +150 -0
  14. package/dist/components/Accordion/AccordionItem.svelte.d.ts +30 -0
  15. package/dist/components/App/App.story.md +8 -0
  16. package/dist/components/App/App.story.svelte +170 -0
  17. package/dist/components/App/App.story.svelte.d.ts +22 -0
  18. package/dist/components/App/App.svelte +77 -0
  19. package/dist/components/App/App.svelte.d.ts +66 -0
  20. package/dist/components/App/Split.svelte +346 -0
  21. package/dist/components/App/Split.svelte.d.ts +54 -0
  22. package/dist/components/App/index.d.ts +2 -0
  23. package/dist/components/App/index.js +3 -0
  24. package/dist/components/AppHeader/AppHeader.svelte +439 -0
  25. package/dist/components/AppHeader/AppHeader.svelte.d.ts +24 -0
  26. package/dist/components/Avatar/Avatar.svelte +300 -0
  27. package/dist/components/Avatar/Avatar.svelte.d.ts +48 -0
  28. package/dist/components/Avatar/AvatarGroup.svelte +185 -0
  29. package/dist/components/Avatar/AvatarGroup.svelte.d.ts +46 -0
  30. package/dist/components/Badge/Badge.svelte +186 -0
  31. package/dist/components/Badge/Badge.svelte.d.ts +51 -0
  32. package/dist/components/BottomBar/BottomBar.svelte +146 -0
  33. package/dist/components/BottomBar/BottomBar.svelte.d.ts +38 -0
  34. package/dist/components/Breadcrumb/Breadcrumb.svelte +77 -0
  35. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts +42 -0
  36. package/dist/components/Breadcrumb/BreadcrumbItem.svelte +171 -0
  37. package/dist/components/Breadcrumb/BreadcrumbItem.svelte.d.ts +38 -0
  38. package/dist/components/Button/Button.svelte +252 -0
  39. package/dist/components/Button/Button.svelte.d.ts +80 -0
  40. package/dist/components/Button/ButtonGroup.svelte +127 -0
  41. package/dist/components/Button/ButtonGroup.svelte.d.ts +44 -0
  42. package/dist/components/Card/Card.svelte +152 -0
  43. package/dist/components/Card/Card.svelte.d.ts +55 -0
  44. package/dist/components/Carousel/Carousel.svelte +461 -0
  45. package/dist/components/Carousel/Carousel.svelte.d.ts +79 -0
  46. package/dist/components/Carousel/CarouselItem.svelte +149 -0
  47. package/dist/components/Carousel/CarouselItem.svelte.d.ts +35 -0
  48. package/dist/components/Chip/Chip.svelte +288 -0
  49. package/dist/components/Chip/Chip.svelte.d.ts +71 -0
  50. package/dist/components/Chip/ChipGroup.svelte +190 -0
  51. package/dist/components/Chip/ChipGroup.svelte.d.ts +71 -0
  52. package/dist/components/CodeBlock/CodeBlock.svelte +356 -0
  53. package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +44 -0
  54. package/dist/components/CodeBlock/index.d.ts +1 -0
  55. package/dist/components/CodeBlock/index.js +1 -0
  56. package/dist/components/CodeBlockSpeed/CodeBlockSpeed.svelte +145 -0
  57. package/dist/components/CodeBlockSpeed/CodeBlockSpeed.svelte.d.ts +44 -0
  58. package/dist/components/CodeEditor/CodeEditor.svelte +229 -0
  59. package/dist/components/CodeEditor/CodeEditor.svelte.d.ts +23 -0
  60. package/dist/components/Combobox/Combobox.svelte +279 -0
  61. package/dist/components/Combobox/Combobox.svelte.d.ts +34 -0
  62. package/dist/components/Container/Container.svelte +45 -0
  63. package/dist/components/Container/Container.svelte.d.ts +36 -0
  64. package/dist/components/DataTable/DataTable.svelte +879 -0
  65. package/dist/components/DataTable/DataTable.svelte.d.ts +102 -0
  66. package/dist/components/Form/AutoComplete.svelte +357 -0
  67. package/dist/components/Form/AutoComplete.svelte.d.ts +73 -0
  68. package/dist/components/Form/Calendar.svelte +429 -0
  69. package/dist/components/Form/Calendar.svelte.d.ts +53 -0
  70. package/dist/components/Form/Checkbox.svelte +196 -0
  71. package/dist/components/Form/Checkbox.svelte.d.ts +50 -0
  72. package/dist/components/Form/ColorPicker.svelte +396 -0
  73. package/dist/components/Form/ColorPicker.svelte.d.ts +43 -0
  74. package/dist/components/Form/Combobox.svelte +645 -0
  75. package/dist/components/Form/Combobox.svelte.d.ts +93 -0
  76. package/dist/components/Form/Dropdown.svelte +773 -0
  77. package/dist/components/Form/Dropdown.svelte.d.ts +81 -0
  78. package/dist/components/Form/FileUpload.svelte +796 -0
  79. package/dist/components/Form/FileUpload.svelte.d.ts +78 -0
  80. package/dist/components/Form/FloatLabel.svelte +245 -0
  81. package/dist/components/Form/FloatLabel.svelte.d.ts +44 -0
  82. package/dist/components/Form/Form.svelte +281 -0
  83. package/dist/components/Form/Form.svelte.d.ts +54 -0
  84. package/dist/components/Form/FormField.svelte +218 -0
  85. package/dist/components/Form/FormField.svelte.d.ts +47 -0
  86. package/dist/components/Form/Input.svelte +340 -0
  87. package/dist/components/Form/Input.svelte.d.ts +79 -0
  88. package/dist/components/Form/InputSwitch.svelte +189 -0
  89. package/dist/components/Form/InputSwitch.svelte.d.ts +46 -0
  90. package/dist/components/Form/InvalidState.svelte +97 -0
  91. package/dist/components/Form/InvalidState.svelte.d.ts +37 -0
  92. package/dist/components/Form/Knob.svelte +537 -0
  93. package/dist/components/Form/Knob.svelte.d.ts +78 -0
  94. package/dist/components/Form/ListInput.svelte +469 -0
  95. package/dist/components/Form/ListInput.svelte.d.ts +70 -0
  96. package/dist/components/Form/Listbox.svelte +513 -0
  97. package/dist/components/Form/Listbox.svelte.d.ts +74 -0
  98. package/dist/components/Form/NumberInput.svelte +452 -0
  99. package/dist/components/Form/NumberInput.svelte.d.ts +82 -0
  100. package/dist/components/Form/Radio.svelte +192 -0
  101. package/dist/components/Form/Radio.svelte.d.ts +53 -0
  102. package/dist/components/Form/RadioGroup.svelte +155 -0
  103. package/dist/components/Form/RadioGroup.svelte.d.ts +48 -0
  104. package/dist/components/Form/Rating.svelte +380 -0
  105. package/dist/components/Form/Rating.svelte.d.ts +64 -0
  106. package/dist/components/Form/Select.svelte +436 -0
  107. package/dist/components/Form/Select.svelte.d.ts +49 -0
  108. package/dist/components/Form/SelectGroup.svelte +34 -0
  109. package/dist/components/Form/SelectGroup.svelte.d.ts +33 -0
  110. package/dist/components/Form/Slider.svelte +622 -0
  111. package/dist/components/Form/Slider.svelte.d.ts +73 -0
  112. package/dist/components/Form/Switch.svelte +192 -0
  113. package/dist/components/Form/Switch.svelte.d.ts +46 -0
  114. package/dist/components/Form/TextInput.svelte +274 -0
  115. package/dist/components/Form/TextInput.svelte.d.ts +74 -0
  116. package/dist/components/Form/Textarea.svelte +207 -0
  117. package/dist/components/Form/Textarea.svelte.d.ts +62 -0
  118. package/dist/components/Icon/Icon.svelte +140 -0
  119. package/dist/components/Icon/Icon.svelte.d.ts +25 -0
  120. package/dist/components/Icon/index.d.ts +1 -0
  121. package/dist/components/Icon/index.js +1 -0
  122. package/dist/components/Lazy/Lazy.svelte +158 -0
  123. package/dist/components/Lazy/Lazy.svelte.d.ts +42 -0
  124. package/dist/components/Masonry/Masonry.svelte +299 -0
  125. package/dist/components/Masonry/Masonry.svelte.d.ts +55 -0
  126. package/dist/components/Menu/Menu/Menu.svelte +65 -0
  127. package/dist/components/Menu/Menu/Menu.svelte.d.ts +17 -0
  128. package/dist/components/Menu/Menu/MenuItem.svelte +90 -0
  129. package/dist/components/Menu/Menu/MenuItem.svelte.d.ts +27 -0
  130. package/dist/components/Modal/Modal.svelte +334 -0
  131. package/dist/components/Modal/Modal.svelte.d.ts +55 -0
  132. package/dist/components/Panel/Card.svelte +141 -0
  133. package/dist/components/Panel/Card.svelte.d.ts +52 -0
  134. package/dist/components/Panel/Hero/Hero.story.md +9 -0
  135. package/dist/components/Panel/Hero/Hero.story.svelte +49 -0
  136. package/dist/components/Panel/Hero/Hero.story.svelte.d.ts +21 -0
  137. package/dist/components/Panel/Hero/Hero.svelte +24 -0
  138. package/dist/components/Panel/Hero/Hero.svelte.d.ts +32 -0
  139. package/dist/components/Panel/LazyPanel.svelte +110 -0
  140. package/dist/components/Panel/LazyPanel.svelte.d.ts +46 -0
  141. package/dist/components/Panel/Panel.svelte +205 -0
  142. package/dist/components/Panel/Panel.svelte.d.ts +23 -0
  143. package/dist/components/Progress/Progress.svelte +220 -0
  144. package/dist/components/Progress/Progress.svelte.d.ts +61 -0
  145. package/dist/components/Separator/Separator.svelte +109 -0
  146. package/dist/components/Separator/Separator.svelte.d.ts +35 -0
  147. package/dist/components/Sidebar/Sidebar.svelte +213 -0
  148. package/dist/components/Sidebar/Sidebar.svelte.d.ts +60 -0
  149. package/dist/components/Skeleton/Skeleton.svelte +170 -0
  150. package/dist/components/Skeleton/Skeleton.svelte.d.ts +48 -0
  151. package/dist/components/Stepper/Stepper.svelte +111 -0
  152. package/dist/components/Stepper/Stepper.svelte.d.ts +54 -0
  153. package/dist/components/Stepper/StepperStep.svelte +369 -0
  154. package/dist/components/Stepper/StepperStep.svelte.d.ts +63 -0
  155. package/dist/components/Table/Table.svelte +167 -0
  156. package/dist/components/Table/Table.svelte.d.ts +56 -0
  157. package/dist/components/Table/TableBody.svelte +41 -0
  158. package/dist/components/Table/TableBody.svelte.d.ts +33 -0
  159. package/dist/components/Table/TableCell.svelte +76 -0
  160. package/dist/components/Table/TableCell.svelte.d.ts +36 -0
  161. package/dist/components/Table/TableHead.svelte +41 -0
  162. package/dist/components/Table/TableHead.svelte.d.ts +32 -0
  163. package/dist/components/Table/TableHeader.svelte +148 -0
  164. package/dist/components/Table/TableHeader.svelte.d.ts +42 -0
  165. package/dist/components/Table/TableRow.svelte +99 -0
  166. package/dist/components/Table/TableRow.svelte.d.ts +40 -0
  167. package/dist/components/Tabs/Tab.svelte +145 -0
  168. package/dist/components/Tabs/Tab.svelte.d.ts +36 -0
  169. package/dist/components/Tabs/TabList.svelte +60 -0
  170. package/dist/components/Tabs/TabList.svelte.d.ts +32 -0
  171. package/dist/components/Tabs/TabPanel.svelte +118 -0
  172. package/dist/components/Tabs/TabPanel.svelte.d.ts +38 -0
  173. package/dist/components/Tabs/Tabs.svelte +287 -0
  174. package/dist/components/Tabs/Tabs.svelte.d.ts +50 -0
  175. package/dist/components/Tag/Tag.svelte +260 -0
  176. package/dist/components/Tag/Tag.svelte.d.ts +54 -0
  177. package/dist/components/Tag/TagGroup.svelte +147 -0
  178. package/dist/components/Tag/TagGroup.svelte.d.ts +62 -0
  179. package/dist/components/ThemeToggle/ThemeToggle.svelte +93 -0
  180. package/dist/components/ThemeToggle/ThemeToggle.svelte.d.ts +12 -0
  181. package/dist/components/Timeline/Timeline.svelte +144 -0
  182. package/dist/components/Timeline/Timeline.svelte.d.ts +48 -0
  183. package/dist/components/Timeline/TimelineItem.svelte +391 -0
  184. package/dist/components/Timeline/TimelineItem.svelte.d.ts +63 -0
  185. package/dist/components/Toast/Toast.svelte +313 -0
  186. package/dist/components/Toast/Toast.svelte.d.ts +44 -0
  187. package/dist/components/Toast/toastStore.d.ts +40 -0
  188. package/dist/components/Toast/toastStore.js +293 -0
  189. package/dist/components/Tooltip/Tooltip.svelte +282 -0
  190. package/dist/components/Tooltip/Tooltip.svelte.d.ts +55 -0
  191. package/dist/components/Tree/Tree.svelte +129 -0
  192. package/dist/components/Tree/Tree.svelte.d.ts +61 -0
  193. package/dist/components/Tree/TreeNode.svelte +332 -0
  194. package/dist/components/Tree/TreeNode.svelte.d.ts +55 -0
  195. package/dist/components/icons/TwintrinsicLogo.svelte +73 -0
  196. package/dist/components/icons/TwintrinsicLogo.svelte.d.ts +17 -0
  197. package/dist/components/icons/twintrinsic-source.svg +73 -0
  198. package/dist/components/icons/twintrinsic.svg +38 -0
  199. package/dist/docs/EventsTable.svelte +86 -0
  200. package/dist/docs/EventsTable.svelte.d.ts +27 -0
  201. package/dist/docs/PropsTable.svelte +103 -0
  202. package/dist/docs/PropsTable.svelte.d.ts +28 -0
  203. package/dist/docs/index.d.ts +2 -0
  204. package/dist/docs/index.js +2 -0
  205. package/dist/helpers/detectLanguage.d.ts +6 -0
  206. package/dist/helpers/detectLanguage.js +60 -0
  207. package/dist/helpers/index.d.ts +1 -0
  208. package/dist/helpers/index.js +1 -0
  209. package/dist/index.d.ts +86 -0
  210. package/dist/index.js +94 -0
  211. package/dist/twintrinsic.css +347 -0
  212. package/package.json +98 -0
@@ -0,0 +1,282 @@
1
+ <!--
2
+ @component
3
+ Tooltip - A component for displaying additional information when hovering or focusing on an element.
4
+ Provides accessible, configurable tooltips with various positions and styles.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <Tooltip content="This is a tooltip">
9
+ <Button>Hover me</Button>
10
+ </Tooltip>
11
+
12
+ <Tooltip position="bottom" delay={300}>
13
+ <svelte:fragment slot="content">
14
+ <strong>Custom tooltip</strong> with HTML content
15
+ </svelte:fragment>
16
+ <span>Hover for more info</span>
17
+ </Tooltip>
18
+ ```
19
+ -->
20
+ <script>
21
+ import { onMount } from "svelte"
22
+ import { fade } from "svelte/transition"
23
+
24
+ const {
25
+ /** @type {string} - Additional CSS classes */
26
+ class: className = "",
27
+
28
+ /** @type {string} - HTML id for accessibility */
29
+ id = crypto.randomUUID(),
30
+
31
+ /** @type {string} - Tooltip content (simple string version) */
32
+ content = "",
33
+
34
+ /** @type {string} - Tooltip position (top, right, bottom, left) */
35
+ position = "top",
36
+
37
+ /** @type {number} - Delay before showing tooltip (ms) */
38
+ delay = 0,
39
+
40
+ /** @type {number} - Duration to show tooltip (ms, 0 for indefinite) */
41
+ duration = 0,
42
+
43
+ /** @type {boolean} - Whether to show an arrow pointing to the target */
44
+ arrow = true,
45
+
46
+ /** @type {number} - Distance from target element (px) */
47
+ offset = 8,
48
+
49
+ /** @type {boolean} - Whether to show on focus (for keyboard users) */
50
+ showOnFocus = true,
51
+
52
+ /** @type {string} - ARIA description for accessibility */
53
+ ariaDescription,
54
+
55
+ /** @type {(event: CustomEvent) => void} - Show event handler */
56
+ onshow,
57
+ /** @type {(event: CustomEvent) => void} - Hide event handler */
58
+ onhide,
59
+
60
+ children,
61
+ tooltipContent,
62
+ } = $props()
63
+
64
+ // Tooltip state
65
+ let isVisible = $state(false)
66
+ let triggerElement = $state()
67
+ let tooltipElement = $state()
68
+ let showTimeout = $state(null)
69
+ let hideTimeout = $state(null)
70
+
71
+ // Position state
72
+ let tooltipPosition = $state({
73
+ top: 0,
74
+ left: 0,
75
+ })
76
+
77
+ /**
78
+ * Shows the tooltip
79
+ */
80
+ function showTooltip() {
81
+ clearTimeout(hideTimeout)
82
+
83
+ if (delay > 0) {
84
+ showTimeout = setTimeout(() => {
85
+ isVisible = true
86
+ updatePosition()
87
+ onshow?.(new CustomEvent("show"))
88
+
89
+ // Auto-hide after duration if specified
90
+ if (duration > 0) {
91
+ hideTimeout = setTimeout(hideTooltip, duration)
92
+ }
93
+ }, delay)
94
+ } else {
95
+ isVisible = true
96
+ updatePosition()
97
+ onshow?.(new CustomEvent("show"))
98
+
99
+ // Auto-hide after duration if specified
100
+ if (duration > 0) {
101
+ hideTimeout = setTimeout(hideTooltip, duration)
102
+ }
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Hides the tooltip
108
+ */
109
+ function hideTooltip() {
110
+ clearTimeout(showTimeout)
111
+ isVisible = false
112
+ onhide?.(new CustomEvent("hide"))
113
+ }
114
+
115
+ /**
116
+ * Updates the tooltip position based on trigger element
117
+ */
118
+ function updatePosition() {
119
+ if (!triggerElement || !tooltipElement) return
120
+
121
+ // Get element dimensions and positions
122
+ const triggerRect = triggerElement.getBoundingClientRect()
123
+ const tooltipRect = tooltipElement.getBoundingClientRect()
124
+
125
+ // Calculate position based on specified position
126
+ let top = 0
127
+ let left = 0
128
+
129
+ switch (position) {
130
+ case "top":
131
+ top = triggerRect.top - tooltipRect.height - offset
132
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2
133
+ break
134
+ case "right":
135
+ top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2
136
+ left = triggerRect.right + offset
137
+ break
138
+ case "bottom":
139
+ top = triggerRect.bottom + offset
140
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2
141
+ break
142
+ case "left":
143
+ top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2
144
+ left = triggerRect.left - tooltipRect.width - offset
145
+ break
146
+ default:
147
+ // Default to top
148
+ top = triggerRect.top - tooltipRect.height - offset
149
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2
150
+ }
151
+
152
+ // Adjust for scroll position
153
+ top += window.scrollY
154
+ left += window.scrollX
155
+
156
+ // Ensure tooltip stays within viewport
157
+ const viewportWidth = window.innerWidth
158
+ const viewportHeight = window.innerHeight
159
+
160
+ // Adjust horizontal position if needed
161
+ if (left < 10) {
162
+ left = 10
163
+ } else if (left + tooltipRect.width > viewportWidth - 10) {
164
+ left = viewportWidth - tooltipRect.width - 10
165
+ }
166
+
167
+ // Adjust vertical position if needed
168
+ if (top < 10) {
169
+ top = 10
170
+ } else if (top + tooltipRect.height > viewportHeight - 10) {
171
+ top = viewportHeight - tooltipRect.height - 10
172
+ }
173
+
174
+ // Update position state
175
+ tooltipPosition = { top, left }
176
+ }
177
+
178
+ // Event handlers
179
+ function handleMouseEnter() {
180
+ showTooltip()
181
+ }
182
+
183
+ function handleMouseLeave() {
184
+ hideTooltip()
185
+ }
186
+
187
+ function handleFocus() {
188
+ if (showOnFocus) {
189
+ showTooltip()
190
+ }
191
+ }
192
+
193
+ function handleBlur() {
194
+ hideTooltip()
195
+ }
196
+
197
+ // Clean up timers on unmount
198
+ onMount(() => {
199
+ return () => {
200
+ clearTimeout(showTimeout)
201
+ clearTimeout(hideTimeout)
202
+ }
203
+ })
204
+ </script>
205
+
206
+ <div class="tooltip-wrapper {className}">
207
+ <!-- Trigger element -->
208
+ <div
209
+ class="tooltip-trigger"
210
+ onmouseenter={handleMouseEnter}
211
+ onmouseleave={handleMouseLeave}
212
+ onfocus={handleFocus}
213
+ onblur={handleBlur}
214
+ bind:this={triggerElement}
215
+ aria-describedby={isVisible ? `${id}-tooltip` : undefined}
216
+ >
217
+ {@render children?.()}
218
+ </div>
219
+
220
+ <!-- Tooltip -->
221
+ {#if isVisible}
222
+ <div
223
+ id="{id}-tooltip"
224
+ class="tooltip tooltip-{position} {arrow ? 'tooltip-arrow' : ''}"
225
+ style="top: {tooltipPosition.top}px; left: {tooltipPosition.left}px;"
226
+ role="tooltip"
227
+ bind:this={tooltipElement}
228
+ transition:fade={{ duration: 200 }}
229
+ >
230
+ {#if tooltipContent}
231
+ {@render tooltipContent()}
232
+ {:else}
233
+ {content}
234
+ {/if}
235
+ </div>
236
+ {/if}
237
+ </div>
238
+
239
+ <style>
240
+ @reference "../../twintrinsic.css";
241
+
242
+ .tooltip-wrapper {
243
+ @apply inline-block relative;
244
+ }
245
+
246
+ .tooltip-trigger {
247
+ @apply inline-block;
248
+ }
249
+
250
+ .tooltip {
251
+ @apply fixed z-50 max-w-xs;
252
+ @apply bg-surface dark:bg-surface text-text dark:text-text;
253
+ @apply border border-border dark:border-border rounded-md shadow-md;
254
+ @apply px-3 py-2 text-sm;
255
+ }
256
+
257
+ /* Arrow styles */
258
+ .tooltip-arrow::before {
259
+ @apply content-[''] absolute w-2 h-2 rotate-45;
260
+ @apply bg-surface dark:bg-surface border border-border dark:border-border;
261
+ }
262
+
263
+ .tooltip-top.tooltip-arrow::before {
264
+ @apply -bottom-1 left-1/2 -ml-1;
265
+ @apply border-b border-r;
266
+ }
267
+
268
+ .tooltip-right.tooltip-arrow::before {
269
+ @apply -left-1 top-1/2 -mt-1;
270
+ @apply border-l border-t;
271
+ }
272
+
273
+ .tooltip-bottom.tooltip-arrow::before {
274
+ @apply -top-1 left-1/2 -ml-1;
275
+ @apply border-t border-l;
276
+ }
277
+
278
+ .tooltip-left.tooltip-arrow::before {
279
+ @apply -right-1 top-1/2 -mt-1;
280
+ @apply border-r border-b;
281
+ }
282
+ </style>
@@ -0,0 +1,55 @@
1
+ export default Tooltip;
2
+ type Tooltip = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * Tooltip - A component for displaying additional information when hovering or focusing on an element.
8
+ * Provides accessible, configurable tooltips with various positions and styles.
9
+ *
10
+ * Usage:
11
+ * ```svelte
12
+ * <Tooltip content="This is a tooltip">
13
+ * <Button>Hover me</Button>
14
+ * </Tooltip>
15
+ *
16
+ * <Tooltip position="bottom" delay={300}>
17
+ * <svelte:fragment slot="content">
18
+ * <strong>Custom tooltip</strong> with HTML content
19
+ * </svelte:fragment>
20
+ * <span>Hover for more info</span>
21
+ * </Tooltip>
22
+ * ```
23
+ */
24
+ declare const Tooltip: import("svelte").Component<{
25
+ class?: string;
26
+ id?: any;
27
+ content?: string;
28
+ position?: string;
29
+ delay?: number;
30
+ duration?: number;
31
+ arrow?: boolean;
32
+ offset?: number;
33
+ showOnFocus?: boolean;
34
+ ariaDescription: any;
35
+ onshow: any;
36
+ onhide: any;
37
+ children: any;
38
+ tooltipContent: any;
39
+ }, {}, "">;
40
+ type $$ComponentProps = {
41
+ class?: string;
42
+ id?: any;
43
+ content?: string;
44
+ position?: string;
45
+ delay?: number;
46
+ duration?: number;
47
+ arrow?: boolean;
48
+ offset?: number;
49
+ showOnFocus?: boolean;
50
+ ariaDescription: any;
51
+ onshow: any;
52
+ onhide: any;
53
+ children: any;
54
+ tooltipContent: any;
55
+ };
@@ -0,0 +1,129 @@
1
+ <!--
2
+ @component
3
+ Tree - A component for displaying hierarchical data with expandable nodes.
4
+ Provides consistent styling, accessibility features, and keyboard navigation.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <Tree>
9
+ <TreeNode label="Root">
10
+ <TreeNode label="Child 1" />
11
+ <TreeNode label="Child 2">
12
+ <TreeNode label="Grandchild 1" />
13
+ <TreeNode label="Grandchild 2" />
14
+ </TreeNode>
15
+ </TreeNode>
16
+ </Tree>
17
+
18
+ <Tree
19
+ selectable
20
+ multiSelect
21
+ onselect={handleSelect}
22
+ >
23
+ <TreeNode
24
+ label="Documents"
25
+ icon="<svg>...</svg>"
26
+ expanded
27
+ >
28
+ <TreeNode label="Work" />
29
+ <TreeNode label="Personal" />
30
+ </TreeNode>
31
+ </Tree>
32
+ ```
33
+ -->
34
+ <script>
35
+ import { setContext } from "svelte"
36
+
37
+ const {
38
+ /** @type {string} - Additional CSS classes */
39
+ class: className = "",
40
+
41
+ /** @type {string} - HTML id for accessibility */
42
+ id = crypto.randomUUID(),
43
+
44
+ /** @type {boolean} - Whether nodes can be selected */
45
+ selectable = false,
46
+
47
+ /** @type {boolean} - Whether multiple nodes can be selected */
48
+ multiSelect = false,
49
+
50
+ /** @type {Array} - Selected node keys */
51
+ selected = [],
52
+
53
+ /** @type {boolean} - Whether to show icons */
54
+ showIcons = true,
55
+
56
+ /** @type {boolean} - Whether to show lines connecting nodes */
57
+ showLines = true,
58
+
59
+ /** @type {string} - ARIA label for the tree */
60
+ ariaLabel = "Tree",
61
+
62
+ /** @type {(event: CustomEvent) => void} - Select event handler */
63
+ onselect,
64
+
65
+ children,
66
+ } = $props()
67
+
68
+ // Component state
69
+ let selectedNodes = $state(Array.isArray(selected) ? [...selected] : [])
70
+
71
+ // Provide context for child components
72
+ $effect(() => {
73
+ setContext("tree", {
74
+ selectable,
75
+ multiSelect,
76
+ showIcons,
77
+ showLines,
78
+ isSelected: (key) => selectedNodes.includes(key),
79
+ toggleSelection: (key) => {
80
+ if (selectable) {
81
+ if (selectedNodes.includes(key)) {
82
+ // Remove if already selected
83
+ if (multiSelect) {
84
+ selectedNodes = selectedNodes.filter((k) => k !== key)
85
+ } else {
86
+ // For single select, clicking the selected item again doesn't deselect it
87
+ }
88
+ } else {
89
+ // Add if not selected
90
+ if (multiSelect) {
91
+ selectedNodes = [...selectedNodes, key]
92
+ } else {
93
+ selectedNodes = [key]
94
+ }
95
+ }
96
+
97
+ onselect?.(new CustomEvent("select", { detail: { selected: selectedNodes } }))
98
+ }
99
+ },
100
+ })
101
+ })
102
+
103
+ // Update selected state when prop changes
104
+ $effect(() => {
105
+ selectedNodes = Array.isArray(selected) ? [...selected] : []
106
+ })
107
+ </script>
108
+
109
+ <div
110
+ {id}
111
+ class="
112
+ tree
113
+ {showLines ? 'tree-with-lines' : ''}
114
+ {className}
115
+ "
116
+ role="tree"
117
+ aria-label={ariaLabel}
118
+ aria-multiselectable={multiSelect}
119
+ >
120
+ {@render children?.()}
121
+ </div>
122
+
123
+ <style>
124
+ @reference "../../twintrinsic.css";
125
+
126
+ .tree {
127
+ @apply w-full;
128
+ }
129
+ </style>
@@ -0,0 +1,61 @@
1
+ export default Tree;
2
+ type Tree = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * Tree - A component for displaying hierarchical data with expandable nodes.
8
+ * Provides consistent styling, accessibility features, and keyboard navigation.
9
+ *
10
+ * Usage:
11
+ * ```svelte
12
+ * <Tree>
13
+ * <TreeNode label="Root">
14
+ * <TreeNode label="Child 1" />
15
+ * <TreeNode label="Child 2">
16
+ * <TreeNode label="Grandchild 1" />
17
+ * <TreeNode label="Grandchild 2" />
18
+ * </TreeNode>
19
+ * </TreeNode>
20
+ * </Tree>
21
+ *
22
+ * <Tree
23
+ * selectable
24
+ * multiSelect
25
+ * onselect={handleSelect}
26
+ * >
27
+ * <TreeNode
28
+ * label="Documents"
29
+ * icon="<svg>...</svg>"
30
+ * expanded
31
+ * >
32
+ * <TreeNode label="Work" />
33
+ * <TreeNode label="Personal" />
34
+ * </TreeNode>
35
+ * </Tree>
36
+ * ```
37
+ */
38
+ declare const Tree: import("svelte").Component<{
39
+ class?: string;
40
+ id?: any;
41
+ selectable?: boolean;
42
+ multiSelect?: boolean;
43
+ selected?: any[];
44
+ showIcons?: boolean;
45
+ showLines?: boolean;
46
+ ariaLabel?: string;
47
+ onselect: any;
48
+ children: any;
49
+ }, {}, "">;
50
+ type $$ComponentProps = {
51
+ class?: string;
52
+ id?: any;
53
+ selectable?: boolean;
54
+ multiSelect?: boolean;
55
+ selected?: any[];
56
+ showIcons?: boolean;
57
+ showLines?: boolean;
58
+ ariaLabel?: string;
59
+ onselect: any;
60
+ children: any;
61
+ };