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,332 @@
1
+ <!--
2
+ @component
3
+ TreeNode - An individual node within a Tree component.
4
+ Provides consistent styling, accessibility features, and keyboard navigation.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <TreeNode label="Documents">
9
+ <TreeNode label="Work" />
10
+ <TreeNode label="Personal" />
11
+ </TreeNode>
12
+
13
+ <TreeNode
14
+ label="Images"
15
+ icon="<svg>...</svg>"
16
+ expanded
17
+ selected
18
+ disabled
19
+ >
20
+ <TreeNode label="Vacation" />
21
+ </TreeNode>
22
+ ```
23
+ -->
24
+ <script>
25
+ import { getContext, onMount } from "svelte"
26
+
27
+ const {
28
+ /** @type {string} - Additional CSS classes */
29
+ class: className = "",
30
+
31
+ /** @type {string} - HTML id for accessibility */
32
+ id = crypto.randomUUID(),
33
+
34
+ /** @type {string} - Node key for selection (defaults to id) */
35
+ key = id,
36
+
37
+ /** @type {string} - Node label */
38
+ label,
39
+
40
+ /** @type {string} - Custom icon (HTML or SVG string) */
41
+ icon,
42
+
43
+ /** @type {boolean} - Whether the node is expanded */
44
+ expanded = false,
45
+
46
+ /** @type {boolean} - Whether the node is selected */
47
+ selected = false,
48
+
49
+ /** @type {boolean} - Whether the node is disabled */
50
+ disabled = false,
51
+
52
+ /** @type {boolean} - Whether the node is a leaf (no children) */
53
+ leaf = false,
54
+
55
+ /** @type {number} - Indentation level (managed internally) */
56
+ level = 0,
57
+
58
+ /** @type {Function} - Custom render function for the label */
59
+ labelRender,
60
+
61
+ children,
62
+
63
+ ...restProps
64
+ } = $props()
65
+
66
+ // Get tree context
67
+ const treeContext = getContext("tree")
68
+
69
+ // Component state
70
+ let isExpanded = $state(expanded)
71
+ let isSelected = $state(selected)
72
+ let hasChildren = $state(false)
73
+ let nodeElement
74
+
75
+ // Update expanded state when prop changes
76
+ $effect(() => {
77
+ isExpanded = expanded
78
+ })
79
+
80
+ // Update selected state from context or prop
81
+ $effect(() => {
82
+ if (treeContext?.selectable) {
83
+ isSelected = treeContext.isSelected(key)
84
+ } else {
85
+ isSelected = selected
86
+ }
87
+ })
88
+
89
+ // Check if node has children
90
+ onMount(() => {
91
+ hasChildren = !!children && children().length > 0
92
+
93
+ return () => {
94
+ // Cleanup if needed
95
+ }
96
+ })
97
+
98
+ // Determine if node is selectable
99
+ const isSelectable = $derived(treeContext?.selectable && !disabled)
100
+
101
+ // Determine if node should show icons
102
+ const showIcons = $derived(treeContext?.showIcons !== false)
103
+
104
+ // Determine if tree should show lines
105
+ const showLines = $derived(treeContext?.showLines !== false)
106
+
107
+ /**
108
+ * Toggles the expanded state
109
+ * @param {Event} event - Click event
110
+ */
111
+ function toggleExpanded(event) {
112
+ if (disabled || !hasChildren) return
113
+
114
+ isExpanded = !isExpanded
115
+ dispatch("toggle", { expanded: isExpanded, key })
116
+
117
+ // Prevent event from triggering selection
118
+ event.stopPropagation()
119
+ }
120
+
121
+ /**
122
+ * Handles click on the node
123
+ */
124
+ function handleClick() {
125
+ if (disabled) return
126
+
127
+ if (isSelectable) {
128
+ treeContext.toggleSelection(key)
129
+ dispatch("select", { selected: isSelected, key })
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Handles keydown events for accessibility
135
+ * @param {KeyboardEvent} event - Keydown event
136
+ */
137
+ function handleKeyDown(event) {
138
+ if (disabled) return
139
+
140
+ switch (event.key) {
141
+ case "Enter":
142
+ case " ":
143
+ // Select node
144
+ if (isSelectable) {
145
+ treeContext.toggleSelection(key)
146
+ dispatch("select", { selected: isSelected, key })
147
+ event.preventDefault()
148
+ }
149
+ break
150
+
151
+ case "ArrowRight":
152
+ // Expand node if collapsed
153
+ if (hasChildren && !isExpanded) {
154
+ isExpanded = true
155
+ dispatch("toggle", { expanded: true, key })
156
+ event.preventDefault()
157
+ }
158
+ break
159
+
160
+ case "ArrowLeft":
161
+ // Collapse node if expanded
162
+ if (hasChildren && isExpanded) {
163
+ isExpanded = false
164
+ dispatch("toggle", { expanded: false, key })
165
+ event.preventDefault()
166
+ }
167
+ break
168
+ }
169
+ }
170
+ </script>
171
+
172
+ <div
173
+ {id}
174
+ class="
175
+ tree-node
176
+ {isSelected ? 'tree-node-selected' : ''}
177
+ {disabled ? 'tree-node-disabled' : ''}
178
+ {hasChildren ? 'tree-node-parent' : 'tree-node-leaf'}
179
+ {className}
180
+ "
181
+ style="--tree-node-level: {level};"
182
+ bind:this={nodeElement}
183
+ >
184
+ <div
185
+ class="
186
+ tree-node-content
187
+ {isSelectable ? 'tree-node-selectable' : ''}
188
+ "
189
+ role="treeitem"
190
+ aria-expanded={hasChildren ? isExpanded : undefined}
191
+ aria-selected={isSelectable ? isSelected : undefined}
192
+ aria-disabled={disabled ? true : undefined}
193
+ tabindex={disabled ? undefined : 0}
194
+ onclick={handleClick}
195
+ onkeydown={handleKeyDown}
196
+ >
197
+ {#if showLines}
198
+ <div class="tree-node-lines"></div>
199
+ {/if}
200
+
201
+ <div class="tree-node-inner">
202
+ {#if hasChildren}
203
+ <button
204
+ type="button"
205
+ class="tree-node-toggle"
206
+ aria-label={isExpanded ? 'Collapse' : 'Expand'}
207
+ onclick={toggleExpanded}
208
+ tabindex="-1"
209
+ disabled={disabled}
210
+ >
211
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
212
+ <path
213
+ stroke-linecap="round"
214
+ stroke-linejoin="round"
215
+ stroke-width="2"
216
+ d={isExpanded ? "M19 9l-7 7-7-7" : "M9 5l7 7-7 7"}
217
+ ></path>
218
+ </svg>
219
+ </button>
220
+ {:else}
221
+ <div class="tree-node-spacer"></div>
222
+ {/if}
223
+
224
+ {#if showIcons}
225
+ <div class="tree-node-icon">
226
+ {#if icon}
227
+ {@html icon}
228
+ {:else if hasChildren}
229
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
230
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"></path>
231
+ </svg>
232
+ {:else}
233
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
234
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z"></path>
235
+ </svg>
236
+ {/if}
237
+ </div>
238
+ {/if}
239
+
240
+ <div class="tree-node-label">
241
+ {#if labelRender}
242
+ {@render labelRender()}
243
+ {:else}
244
+ {label}
245
+ {/if}
246
+ </div>
247
+ </div>
248
+ </div>
249
+
250
+ {#if hasChildren && isExpanded}
251
+ <div class="tree-node-children" role="group">
252
+ <svelte:self {...restProps} level={level + 1}>
253
+ {@render children?.()}
254
+ </svelte:self>
255
+ </div>
256
+ {/if}
257
+ </div>
258
+
259
+ <style>
260
+ @reference "../../twintrinsic.css";
261
+
262
+ .tree-node {
263
+ @apply w-full;
264
+ }
265
+
266
+ .tree-node-content {
267
+ @apply flex items-center;
268
+ @apply py-1 px-2 rounded-md;
269
+ @apply text-text dark:text-text;
270
+ @apply transition-colors duration-150;
271
+ }
272
+
273
+ .tree-node-selectable {
274
+ @apply cursor-pointer;
275
+ @apply hover:bg-hover dark:hover:bg-hover;
276
+ @apply focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400;
277
+ }
278
+
279
+ .tree-node-selected > .tree-node-content {
280
+ @apply bg-primary-50 dark:bg-primary-900/20;
281
+ @apply text-primary-700 dark:text-primary-300;
282
+ }
283
+
284
+ .tree-node-disabled {
285
+ @apply opacity-50 cursor-not-allowed;
286
+ @apply pointer-events-none;
287
+ }
288
+
289
+ .tree-node-inner {
290
+ @apply flex items-center;
291
+ @apply min-w-0;
292
+ }
293
+
294
+ .tree-node-toggle {
295
+ @apply flex items-center justify-center;
296
+ @apply w-5 h-5 mr-1;
297
+ @apply text-muted dark:text-muted;
298
+ @apply hover:text-text dark:hover:text-text;
299
+ @apply rounded-sm;
300
+ @apply focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400;
301
+ @apply transition-colors duration-150;
302
+ }
303
+
304
+ .tree-node-spacer {
305
+ @apply w-5 h-5 mr-1;
306
+ }
307
+
308
+ .tree-node-icon {
309
+ @apply flex-shrink-0 mr-2;
310
+ @apply text-muted dark:text-muted;
311
+ }
312
+
313
+ .tree-node-label {
314
+ @apply flex-grow truncate;
315
+ }
316
+
317
+ .tree-node-children {
318
+ @apply pl-5;
319
+ }
320
+
321
+ /* Lines for tree visualization */
322
+ .tree-node-lines {
323
+ @apply absolute left-0;
324
+ @apply border-l border-dashed border-border dark:border-border;
325
+ @apply h-full;
326
+ @apply -ml-4;
327
+ }
328
+
329
+ .tree-with-lines .tree-node-children {
330
+ @apply relative;
331
+ }
332
+ </style>
@@ -0,0 +1,55 @@
1
+ export default TreeNode;
2
+ type TreeNode = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * TreeNode - An individual node within a Tree component.
8
+ * Provides consistent styling, accessibility features, and keyboard navigation.
9
+ *
10
+ * Usage:
11
+ * ```svelte
12
+ * <TreeNode label="Documents">
13
+ * <TreeNode label="Work" />
14
+ * <TreeNode label="Personal" />
15
+ * </TreeNode>
16
+ *
17
+ * <TreeNode
18
+ * label="Images"
19
+ * icon="<svg>...</svg>"
20
+ * expanded
21
+ * selected
22
+ * disabled
23
+ * >
24
+ * <TreeNode label="Vacation" />
25
+ * </TreeNode>
26
+ * ```
27
+ */
28
+ declare const TreeNode: import("svelte").Component<{
29
+ class?: string;
30
+ id?: any;
31
+ key?: any;
32
+ label: any;
33
+ icon: any;
34
+ expanded?: boolean;
35
+ selected?: boolean;
36
+ disabled?: boolean;
37
+ leaf?: boolean;
38
+ level?: number;
39
+ labelRender: any;
40
+ children: any;
41
+ } & Record<string, any>, {}, "">;
42
+ type $$ComponentProps = {
43
+ class?: string;
44
+ id?: any;
45
+ key?: any;
46
+ label: any;
47
+ icon: any;
48
+ expanded?: boolean;
49
+ selected?: boolean;
50
+ disabled?: boolean;
51
+ leaf?: boolean;
52
+ level?: number;
53
+ labelRender: any;
54
+ children: any;
55
+ } & Record<string, any>;
@@ -0,0 +1,73 @@
1
+ <!--
2
+ @component
3
+ A modern, dynamic logo for Twintrinsic that represents Tailwind's utility-first approach
4
+ and the intrinsic nature of web design.
5
+ -->
6
+ <script>
7
+ const { class: className = "", size = "3rem" } = $props()
8
+ </script>
9
+
10
+ <svg
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ viewBox="0 0 180 180"
13
+ class={className}
14
+ width={size}
15
+ height={size}
16
+ fill="none"
17
+ stroke="currentColor"
18
+ aria-label="Twintrinsic Logo"
19
+ >
20
+ <rect
21
+ style="opacity:0.995712;fill:none;stroke:#5b21b6;stroke-width:8;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
22
+ class="tw-logo-window"
23
+ width="172"
24
+ height="172"
25
+ x="4"
26
+ y="4" />
27
+ <path
28
+ style="fill:none;stroke:#5b21b6;stroke-width:6.15013;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
29
+ d="M 0,45 H 180"
30
+ class="tw-logo-separator" />
31
+ <text
32
+ xml:space="preserve"
33
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;line-height:1.25;font-family:'OpenDyslexicMono Nerd Font';-inkscape-font-specification:'OpenDyslexicMono Nerd Font, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5b21b6;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
34
+ x="9.6828251"
35
+ y="145.79205"
36
+ class="tw-logo-letters"><tspan
37
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;font-family:'OpenDyslexicMono Nerd Font';-inkscape-font-specification:'OpenDyslexicMono Nerd Font, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5b21b6;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
38
+ x="9.6828251"
39
+ y="145.79205">Tw</tspan></text>
40
+ </svg>
41
+
42
+ <style>
43
+ @reference '../../twintrinsic.css';
44
+ svg {
45
+ @apply transition-colors duration-300;
46
+ }
47
+
48
+ .tw-logo-window, .tw-logo-separator {
49
+ @apply transition-all duration-500;
50
+ }
51
+
52
+ .tw-logo-letters {
53
+ @apply transition-transform duration-300 ;
54
+ }
55
+
56
+ /* Optional: Add hover effects */
57
+ svg:hover .tw-logo-window {
58
+ @apply stroke-primary-500;
59
+ }
60
+
61
+ svg:hover .tw-logo-letters {
62
+ @apply stroke-primary-600;
63
+ }
64
+
65
+ /* Dark mode support */
66
+ :global(.dark) svg:hover .tw-logo-window {
67
+ @apply stroke-primary-400;
68
+ }
69
+
70
+ :global(.dark) svg:hover .tw-logo-letters {
71
+ @apply stroke-primary-300;
72
+ }
73
+ </style>
@@ -0,0 +1,17 @@
1
+ export default TwintrinsicLogo;
2
+ type TwintrinsicLogo = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * A modern, dynamic logo for Twintrinsic that represents Tailwind's utility-first approach
8
+ * and the intrinsic nature of web design.
9
+ */
10
+ declare const TwintrinsicLogo: import("svelte").Component<{
11
+ class?: string;
12
+ size?: string;
13
+ }, {}, "">;
14
+ type $$ComponentProps = {
15
+ class?: string;
16
+ size?: string;
17
+ };
@@ -0,0 +1,73 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="180mm"
6
+ height="180mm"
7
+ viewBox="0 0 180 180"
8
+ version="1.1"
9
+ id="svg1"
10
+ inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
11
+ sodipodi:docname="twintrinsic.svg"
12
+ inkscape:export-filename="twintrinsic-source.svg"
13
+ inkscape:export-xdpi="49.24"
14
+ inkscape:export-ydpi="49.24"
15
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
16
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
17
+ xmlns="http://www.w3.org/2000/svg"
18
+ xmlns:svg="http://www.w3.org/2000/svg">
19
+ <sodipodi:namedview
20
+ id="namedview1"
21
+ pagecolor="#505050"
22
+ bordercolor="#eeeeee"
23
+ borderopacity="1"
24
+ inkscape:showpageshadow="0"
25
+ inkscape:pageopacity="0"
26
+ inkscape:pagecheckerboard="0"
27
+ inkscape:deskcolor="#505050"
28
+ inkscape:document-units="mm"
29
+ inkscape:zoom="0.72248176"
30
+ inkscape:cx="337.72479"
31
+ inkscape:cy="356.41038"
32
+ inkscape:window-width="1920"
33
+ inkscape:window-height="1014"
34
+ inkscape:window-x="0"
35
+ inkscape:window-y="0"
36
+ inkscape:window-maximized="1"
37
+ inkscape:current-layer="layer1" />
38
+ <defs
39
+ id="defs1">
40
+ <inkscape:path-effect
41
+ effect="spiro"
42
+ id="path-effect2"
43
+ is_visible="true"
44
+ lpeversion="1" />
45
+ </defs>
46
+ <g
47
+ inkscape:label="Layer 1"
48
+ inkscape:groupmode="layer"
49
+ id="layer1">
50
+ <rect
51
+ style="opacity:0.995712;fill:none;stroke:#5b21b6;stroke-width:8;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
52
+ id="rect1"
53
+ width="172"
54
+ height="172"
55
+ x="4"
56
+ y="4" />
57
+ <path
58
+ style="fill:none;stroke:#5b21b6;stroke-width:6.15013;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
59
+ d="M 0,45 180,45"
60
+ id="path2" />
61
+ <text
62
+ xml:space="preserve"
63
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;line-height:1.25;font-family:'OpenDyslexicMono Nerd Font';-inkscape-font-specification:'OpenDyslexicMono Nerd Font, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5b21b6;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
64
+ x="9.6828251"
65
+ y="145.79205"
66
+ id="text5"><tspan
67
+ sodipodi:role="line"
68
+ id="tspan5"
69
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;font-family:'OpenDyslexicMono Nerd Font';-inkscape-font-specification:'OpenDyslexicMono Nerd Font, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5b21b6;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
70
+ x="9.6828251"
71
+ y="145.79205">Tw</tspan></text>
72
+ </g>
73
+ </svg>
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="180mm"
6
+ height="180mm"
7
+ viewBox="0 0 180 180"
8
+ version="1.1"
9
+ id="svg1"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ xmlns:svg="http://www.w3.org/2000/svg">
12
+ <defs
13
+ id="defs1" />
14
+ <g
15
+ id="layer1">
16
+ <rect
17
+ style="opacity:0.995712;fill:none;stroke:#5b21b6;stroke-width:8;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
18
+ id="rect1"
19
+ width="172"
20
+ height="172"
21
+ x="4"
22
+ y="4" />
23
+ <path
24
+ style="fill:none;stroke:#5b21b6;stroke-width:6.15013;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
25
+ d="M 0,45 H 180"
26
+ id="path2" />
27
+ <text
28
+ xml:space="preserve"
29
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;line-height:1.25;font-family:'OpenDyslexicMono Nerd Font';-inkscape-font-specification:'OpenDyslexicMono Nerd Font, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5b21b6;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
30
+ x="9.6828251"
31
+ y="145.79205"
32
+ id="text5"><tspan
33
+ id="tspan5"
34
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:105.833px;font-family:'OpenDyslexicMono Nerd Font';-inkscape-font-specification:'OpenDyslexicMono Nerd Font, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#5b21b6;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none;stroke-opacity:1"
35
+ x="9.6828251"
36
+ y="145.79205">Tw</tspan></text>
37
+ </g>
38
+ </svg>
@@ -0,0 +1,86 @@
1
+ <!--
2
+ @component
3
+ EventsTable - A component for displaying component events documentation.
4
+
5
+ Usage:
6
+ ```svelte
7
+ <EventsTable
8
+ events={[
9
+ {
10
+ name: 'change',
11
+ type: '{ value: string }',
12
+ description: 'Fired when value changes'
13
+ }
14
+ ]}
15
+ />
16
+ ```
17
+ -->
18
+ <script>
19
+ const {
20
+ /** @type {Array<{ name: string, type: string, description: string }>} */
21
+ events = [],
22
+ } = $props()
23
+ </script>
24
+
25
+ <div class="events-table">
26
+ <table>
27
+ <thead>
28
+ <tr>
29
+ <th>Event</th>
30
+ <th>Detail Type</th>
31
+ <th>Description</th>
32
+ </tr>
33
+ </thead>
34
+ <tbody>
35
+ {#each events as event}
36
+ <tr>
37
+ <td class="event-name">
38
+ <code>on{event.name}</code>
39
+ </td>
40
+ <td class="event-type">
41
+ <code>{event.type}</code>
42
+ </td>
43
+ <td class="event-description">
44
+ {event.description}
45
+ </td>
46
+ </tr>
47
+ {/each}
48
+ </tbody>
49
+ </table>
50
+ </div>
51
+
52
+ <style>
53
+ @reference '../twintrinsic.css';
54
+
55
+ .events-table {
56
+ @apply my-4 overflow-x-auto;
57
+ }
58
+
59
+ table {
60
+ @apply w-full border-collapse;
61
+ }
62
+
63
+ th {
64
+ @apply px-4 py-2 text-left font-medium bg-surface border-b border-border;
65
+ }
66
+
67
+ td {
68
+ @apply px-4 py-2 border-b border-border;
69
+ }
70
+
71
+ .event-name {
72
+ @apply whitespace-nowrap font-medium;
73
+ }
74
+
75
+ .event-type {
76
+ @apply whitespace-nowrap text-muted;
77
+ }
78
+
79
+ .event-description {
80
+ @apply text-sm;
81
+ }
82
+
83
+ code {
84
+ @apply px-1.5 py-0.5 text-xs font-mono rounded bg-surface;
85
+ }
86
+ </style>
@@ -0,0 +1,27 @@
1
+ export default EventsTable;
2
+ type EventsTable = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * EventsTable - A component for displaying component events documentation.
8
+ *
9
+ * Usage:
10
+ * ```svelte
11
+ * <EventsTable
12
+ * events={[
13
+ * {
14
+ * name: 'change',
15
+ * type: '{ value: string }',
16
+ * description: 'Fired when value changes'
17
+ * }
18
+ * ]}
19
+ * />
20
+ * ```
21
+ */
22
+ declare const EventsTable: import("svelte").Component<{
23
+ events?: any[];
24
+ }, {}, "">;
25
+ type $$ComponentProps = {
26
+ events?: any[];
27
+ };