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,109 @@
1
+ <!--
2
+ @component
3
+ Separator - A visual divider that can be horizontal or vertical with optional text/icon content.
4
+
5
+ Usage:
6
+ ```svelte
7
+ <Separator />
8
+ <Separator>or</Separator>
9
+ <Separator vertical />
10
+ <Separator>
11
+ <Icon name="star" />
12
+ Featured Content
13
+ </Separator>
14
+ ```
15
+ -->
16
+ <script>
17
+ const {
18
+ /** @type {boolean} - Whether the separator should be vertical */
19
+ vertical = false,
20
+
21
+ /** @type {string} - Additional CSS classes */
22
+ class: className = "",
23
+
24
+ /** @type {string} - ARIA label */
25
+ ariaLabel,
26
+
27
+ /** @type {string} - Color variant */
28
+ color = "default",
29
+
30
+ /** @type {"div" | "hr"} - HTML element to render */
31
+ as,
32
+
33
+ children,
34
+ } = $props()
35
+
36
+ // Color variants mapping
37
+ const colorClasses = {
38
+ default: "border-border",
39
+ primary: "border-primary-200 dark:border-primary-800",
40
+ success: "border-success/30",
41
+ warning: "border-warning/30",
42
+ error: "border-error/30",
43
+ }
44
+
45
+ // Determine if we have content and element type
46
+ const hasContent = $derived(children !== undefined)
47
+ const element = $derived(as ?? (hasContent ? "div" : "hr"))
48
+ </script>
49
+
50
+ <svelte:element
51
+ this={element}
52
+ class="separator {colorClasses[color]} {vertical ? 'separator-vertical' : 'separator-horizontal'} {hasContent ? 'separator-with-content' : ''} {className}"
53
+ role={element === 'div' ? 'separator' : undefined}
54
+ aria-orientation={vertical ? 'vertical' : 'horizontal'}
55
+ aria-label={ariaLabel}
56
+ >
57
+ {#if hasContent}
58
+ <div class="separator-content">
59
+ {@render children()}
60
+ </div>
61
+ {/if}
62
+ </svelte:element>
63
+
64
+ <style>
65
+ @reference "../../twintrinsic.css";
66
+ /* Base separator styles */
67
+ .separator {
68
+ @apply relative border-0;
69
+ }
70
+
71
+ /* Horizontal separator */
72
+ .separator-horizontal {
73
+ @apply w-full h-px mt-4 mb-4;
74
+ }
75
+
76
+ .separator-horizontal:not(.separator-with-content) {
77
+ @apply border-t;
78
+ }
79
+
80
+ .separator-horizontal.separator-with-content {
81
+ @apply flex items-center text-center before:content-[''] after:content-[''];
82
+ @apply before:flex-1 before:border-t;
83
+ @apply after:flex-1 after:border-t;
84
+ }
85
+
86
+ /* Vertical separator */
87
+ .separator-vertical {
88
+ @apply h-full w-px mx-4 inline-block align-middle;
89
+ }
90
+
91
+ .separator-vertical:not(.separator-with-content) {
92
+ @apply border-l;
93
+ }
94
+
95
+ .separator-vertical.separator-with-content {
96
+ @apply flex flex-col items-center text-center before:content-[''] after:content-[''];
97
+ @apply before:flex-1 before:border-l;
98
+ @apply after:flex-1 after:border-l;
99
+ }
100
+
101
+ /* Content styles */
102
+ .separator-content {
103
+ @apply flex items-center gap-2 px-3 text-muted;
104
+ }
105
+
106
+ .separator-vertical .separator-content {
107
+ @apply py-3 px-0 rotate-180 [writing-mode:vertical-lr];
108
+ }
109
+ </style>
@@ -0,0 +1,35 @@
1
+ export default Separator;
2
+ type Separator = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * Separator - A visual divider that can be horizontal or vertical with optional text/icon content.
8
+ *
9
+ * Usage:
10
+ * ```svelte
11
+ * <Separator />
12
+ * <Separator>or</Separator>
13
+ * <Separator vertical />
14
+ * <Separator>
15
+ * <Icon name="star" />
16
+ * Featured Content
17
+ * </Separator>
18
+ * ```
19
+ */
20
+ declare const Separator: import("svelte").Component<{
21
+ vertical?: boolean;
22
+ class?: string;
23
+ ariaLabel: any;
24
+ color?: string;
25
+ as: any;
26
+ children: any;
27
+ }, {}, "">;
28
+ type $$ComponentProps = {
29
+ vertical?: boolean;
30
+ class?: string;
31
+ ariaLabel: any;
32
+ color?: string;
33
+ as: any;
34
+ children: any;
35
+ };
@@ -0,0 +1,213 @@
1
+ <!--
2
+ @component
3
+ Sidebar - A collapsible side panel that attaches to its parent container.
4
+ Built on top of the Panel component with additional positioning and animation features.
5
+
6
+ ## Props
7
+ - `expanded` - Initial expanded state (default: true)
8
+ - `position` - Sidebar position: "left" or "right" (default: "left")
9
+ - `width` - Width of the sidebar when expanded (default: "16rem")
10
+ - `floatOnMobile` - Float above content on mobile instead of taking full width (default: false)
11
+ - `disabled` - Disable toggle functionality (default: false)
12
+ - `hideBackdrop` - Hide the backdrop overlay when expanded (default: false)
13
+ - `id` - Custom element ID (default: random UUID)
14
+ - `ariaLabel` - Accessibility label for the sidebar
15
+ - `docked` - Reserved for future use
16
+ - `class` - Additional CSS classes
17
+ - `ontoggle` - Callback when sidebar is toggled
18
+
19
+ ## Slots
20
+ - `header` - Header content for the Panel
21
+ - `default` - Main sidebar content
22
+
23
+ ## Usage
24
+ ```svelte
25
+ <Sidebar>
26
+ <svelte:fragment slot="header">Navigation</svelte:fragment>
27
+ <nav>Menu items here</nav>
28
+ </Sidebar>
29
+
30
+ <Sidebar position="right" expanded={false}>
31
+ <svelte:fragment slot="header">Settings</svelte:fragment>
32
+ Settings content
33
+ </Sidebar>
34
+
35
+ <Sidebar floatOnMobile>
36
+ <svelte:fragment slot="header">Mobile Menu</svelte:fragment>
37
+ Content that floats on mobile
38
+ </Sidebar>
39
+ ```
40
+ -->
41
+ <script lang="ts">
42
+ import { slide } from "svelte/transition"
43
+ import Panel from "../Panel/Panel.svelte"
44
+
45
+ /** Sidebar component props configuration */
46
+ type SidebarProps = {
47
+ /** Initial expanded state */
48
+ expanded?: boolean
49
+ /** Additional CSS classes */
50
+ class?: string
51
+ /** Sidebar position: left or right */
52
+ position?: "left" | "right"
53
+ /** Width of the sidebar when expanded */
54
+ width?: string
55
+ /** Custom element ID (auto-generated if not provided) */
56
+ id?: string
57
+ /** Accessibility label for the sidebar */
58
+ ariaLabel?: string
59
+ /** Disable toggle functionality */
60
+ disabled?: boolean
61
+ /** Hide the backdrop overlay when expanded */
62
+ hideBackdrop?: boolean
63
+ /** Float above content on mobile instead of taking full width */
64
+ floatOnMobile?: boolean
65
+ /** Reserved for future use */
66
+ docked?: boolean
67
+ /** Callback when sidebar is toggled */
68
+ ontoggle?: (payload: { expanded: boolean }) => void
69
+ }
70
+
71
+ const {
72
+ expanded = true,
73
+ class: className = "",
74
+ position = "left",
75
+ width = "16rem",
76
+ id = crypto.randomUUID(),
77
+ ariaLabel,
78
+ disabled = false,
79
+ hideBackdrop = false,
80
+ floatOnMobile = false,
81
+ docked = false,
82
+ ontoggle,
83
+ } = $props() satisfies SidebarProps
84
+
85
+ let isExpanded = $state(false)
86
+ let sidebarElement = $state()
87
+
88
+ // Initialize and sync expanded state when prop changes
89
+ $effect(() => {
90
+ isExpanded = expanded
91
+ })
92
+
93
+ /** Handle toggle events from the Panel component */
94
+ function handleToggle(payload: { expanded: boolean }): void {
95
+ isExpanded = payload.expanded
96
+ ontoggle?.({ expanded: isExpanded })
97
+ }
98
+
99
+ /** Handle backdrop click to collapse the sidebar */
100
+ function handleBackdropClick(): void {
101
+ if (!disabled) {
102
+ isExpanded = false
103
+ ontoggle?.({ expanded: isExpanded })
104
+ }
105
+ }
106
+
107
+ /** Handle Escape key to collapse the sidebar */
108
+ function handleKeydown(event: KeyboardEvent): void {
109
+ if (!disabled && event.key === "Escape" && isExpanded) {
110
+ isExpanded = false
111
+ ontoggle?.({ expanded: isExpanded })
112
+ }
113
+ }
114
+ </script>
115
+
116
+ <svelte:window onkeydown={handleKeydown} />
117
+
118
+ <div
119
+ class="
120
+ sidebar-container
121
+ {position === 'right' ? 'sidebar-right' : 'sidebar-left'}
122
+ {floatOnMobile ? 'sidebar-float-mobile' : ''}
123
+ {className}
124
+ "
125
+ style="--sidebar-width: {width}"
126
+ {id}
127
+ role="complementary"
128
+ aria-label={ariaLabel}
129
+ >
130
+ {#if !hideBackdrop && isExpanded}
131
+ <div
132
+ class="sidebar-backdrop"
133
+ onclick={handleBackdropClick}
134
+ transition:slide={{ duration: 200 }}
135
+ aria-hidden="true"
136
+ ></div>
137
+ {/if}
138
+
139
+ <div
140
+ class="
141
+ sidebar
142
+ {isExpanded ? 'sidebar-expanded' : 'sidebar-collapsed'}
143
+ "
144
+ role="region"
145
+ aria-labelledby="{id}-header"
146
+ >
147
+ <Panel
148
+ expanded={isExpanded}
149
+ {disabled}
150
+ bordered={false}
151
+ ontoggle={handleToggle}
152
+ >
153
+ <svelte:fragment slot="header">
154
+ <slot name="header" />
155
+ </svelte:fragment>
156
+ <slot />
157
+ </Panel>
158
+ </div>
159
+ </div>
160
+
161
+ <style>
162
+ @reference "../../twintrinsic.css";
163
+ .sidebar-container {
164
+ @apply relative;
165
+ }
166
+
167
+ /* Base sidebar styles */
168
+ .sidebar {
169
+ @apply h-full bg-background transition-[width,transform] duration-200 ease-in-out;
170
+ width: var(--sidebar-width);
171
+ }
172
+
173
+ /* Left position styles */
174
+ .sidebar-left .sidebar {
175
+ @apply left-0;
176
+ }
177
+
178
+ .sidebar-left .sidebar-collapsed {
179
+ @apply -translate-x-full;
180
+ }
181
+
182
+ /* Right position styles */
183
+ .sidebar-right .sidebar {
184
+ @apply right-0;
185
+ }
186
+
187
+ .sidebar-right .sidebar-collapsed {
188
+ @apply translate-x-full;
189
+ }
190
+
191
+ /* Backdrop styles */
192
+ .sidebar-backdrop {
193
+ @apply fixed inset-0 bg-black/20 backdrop-blur-sm z-40;
194
+ }
195
+
196
+ /* Mobile styles */
197
+ @media (max-width: 640px) {
198
+ .sidebar-float-mobile .sidebar {
199
+ @apply fixed top-0 bottom-0 z-50;
200
+ }
201
+
202
+ .sidebar-float-mobile .sidebar-backdrop {
203
+ @apply z-40;
204
+ }
205
+ }
206
+
207
+ /* Non-floating mobile styles */
208
+ @media (max-width: 640px) {
209
+ .sidebar:not(.sidebar-float-mobile) {
210
+ @apply w-full;
211
+ }
212
+ }
213
+ </style>
@@ -0,0 +1,60 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ /**
15
+ * Sidebar - A collapsible side panel that attaches to its parent container.
16
+ * Built on top of the Panel component with additional positioning and animation features.
17
+ *
18
+ * ## Props
19
+ * - `expanded` - Initial expanded state (default: true)
20
+ * - `position` - Sidebar position: "left" or "right" (default: "left")
21
+ * - `width` - Width of the sidebar when expanded (default: "16rem")
22
+ * - `floatOnMobile` - Float above content on mobile instead of taking full width (default: false)
23
+ * - `disabled` - Disable toggle functionality (default: false)
24
+ * - `hideBackdrop` - Hide the backdrop overlay when expanded (default: false)
25
+ * - `id` - Custom element ID (default: random UUID)
26
+ * - `ariaLabel` - Accessibility label for the sidebar
27
+ * - `docked` - Reserved for future use
28
+ * - `class` - Additional CSS classes
29
+ * - `ontoggle` - Callback when sidebar is toggled
30
+ *
31
+ * ## Slots
32
+ * - `header` - Header content for the Panel
33
+ * - `default` - Main sidebar content
34
+ *
35
+ * ## Usage
36
+ * ```svelte
37
+ * <Sidebar>
38
+ * <svelte:fragment slot="header">Navigation</svelte:fragment>
39
+ * <nav>Menu items here</nav>
40
+ * </Sidebar>
41
+ *
42
+ * <Sidebar position="right" expanded={false}>
43
+ * <svelte:fragment slot="header">Settings</svelte:fragment>
44
+ * Settings content
45
+ * </Sidebar>
46
+ *
47
+ * <Sidebar floatOnMobile>
48
+ * <svelte:fragment slot="header">Mobile Menu</svelte:fragment>
49
+ * Content that floats on mobile
50
+ * </Sidebar>
51
+ * ```
52
+ */
53
+ declare const Sidebar: $$__sveltets_2_IsomorphicComponent<any, {
54
+ [evt: string]: CustomEvent<any>;
55
+ }, {
56
+ header: {};
57
+ default: {};
58
+ }, {}, "">;
59
+ type Sidebar = InstanceType<typeof Sidebar>;
60
+ export default Sidebar;
@@ -0,0 +1,170 @@
1
+ <!--
2
+ @component
3
+ Skeleton - A component for displaying loading placeholders.
4
+ Provides consistent styling, accessibility features, and various shapes for content loading states.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <Skeleton width="100%" height="20px" />
9
+
10
+ <Skeleton variant="circle" size="40px" />
11
+
12
+ <Skeleton variant="text" lines={3} />
13
+
14
+ <div class="flex gap-4">
15
+ <Skeleton variant="circle" size="48px" />
16
+ <div class="flex-1">
17
+ <Skeleton variant="text" width="60%" />
18
+ <Skeleton variant="text" width="80%" />
19
+ </div>
20
+ </div>
21
+ ```
22
+ -->
23
+ <script>
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} - Shape variant (text, rectangle, circle, rounded) */
32
+ variant = "rectangle",
33
+
34
+ /** @type {string|number} - Width of the skeleton */
35
+ width = "100%",
36
+
37
+ /** @type {string|number} - Height of the skeleton */
38
+ height,
39
+
40
+ /** @type {string|number} - Size for circle and square variants (sets both width and height) */
41
+ size,
42
+
43
+ /** @type {number} - Number of lines for text variant */
44
+ lines = 1,
45
+
46
+ /** @type {boolean} - Whether to show the animation */
47
+ animated = true,
48
+
49
+ /** @type {string} - ARIA label for accessibility */
50
+ ariaLabel = "Loading content",
51
+ } = $props()
52
+
53
+ // Determine height based on variant
54
+ const computedHeight = $derived(
55
+ (() => {
56
+ if (height) return height
57
+ if (size) return size
58
+
59
+ return (
60
+ {
61
+ text: "1em",
62
+ rectangle: "100px",
63
+ circle: "40px",
64
+ rounded: "40px",
65
+ }[variant] || "100px"
66
+ )
67
+ })()
68
+ )
69
+
70
+ // Determine width based on variant
71
+ const computedWidth = $derived(
72
+ (() => {
73
+ if (width) return width
74
+ if (size) return size
75
+ if (variant === "circle") return computedHeight
76
+
77
+ return "100%"
78
+ })()
79
+ )
80
+
81
+ // Determine border radius based on variant
82
+ const borderRadius = $derived(
83
+ {
84
+ text: "4px",
85
+ rectangle: "0",
86
+ circle: "50%",
87
+ rounded: "8px",
88
+ }[variant] || "0"
89
+ )
90
+
91
+ // Generate array for multiple lines
92
+ const lineArray = $derived(Array.from({ length: lines }))
93
+
94
+ // Determine if we should render multiple lines
95
+ const isMultiLine = $derived(variant === "text" && lines > 1)
96
+ </script>
97
+
98
+ {#if isMultiLine}
99
+ <div
100
+ {id}
101
+ class="skeleton-group {className}"
102
+ role="status"
103
+ aria-label={ariaLabel}
104
+ >
105
+ {#each lineArray as _, i}
106
+ <div
107
+ class="
108
+ skeleton
109
+ skeleton-{variant}
110
+ {animated ? 'skeleton-animated' : ''}
111
+ "
112
+ style="
113
+ width: {i === lineArray.length - 1 && lineArray.length > 1 ? '80%' : computedWidth};
114
+ height: {computedHeight};
115
+ border-radius: {borderRadius};
116
+ margin-bottom: {i === lineArray.length - 1 ? '0' : '0.5rem'};
117
+ "
118
+ aria-hidden="true"
119
+ ></div>
120
+ {/each}
121
+ <span class="sr-only">{ariaLabel}</span>
122
+ </div>
123
+ {:else}
124
+ <div
125
+ {id}
126
+ class="
127
+ skeleton
128
+ skeleton-{variant}
129
+ {animated ? 'skeleton-animated' : ''}
130
+ {className}
131
+ "
132
+ style="
133
+ width: {computedWidth};
134
+ height: {computedHeight};
135
+ border-radius: {borderRadius};
136
+ "
137
+ role="status"
138
+ aria-label={ariaLabel}
139
+ >
140
+ <span class="sr-only">{ariaLabel}</span>
141
+ </div>
142
+ {/if}
143
+
144
+ <style>
145
+ @reference "../../twintrinsic.css";
146
+
147
+ .skeleton {
148
+ @apply bg-muted/10 dark:bg-muted/10;
149
+ @apply inline-block;
150
+ }
151
+
152
+ .skeleton-group {
153
+ @apply w-full;
154
+ }
155
+
156
+ .skeleton-animated {
157
+ @apply relative overflow-hidden;
158
+ @apply before:absolute before:inset-0;
159
+ @apply before:translate-x-[-100%];
160
+ @apply before:animate-[skeleton-loading_1.5s_infinite];
161
+ @apply before:bg-gradient-to-r;
162
+ @apply before:from-transparent before:via-muted/20 before:to-transparent;
163
+ }
164
+
165
+ @keyframes skeleton-loading {
166
+ 100% {
167
+ transform: translateX(100%);
168
+ }
169
+ }
170
+ </style>
@@ -0,0 +1,48 @@
1
+ export default Skeleton;
2
+ type Skeleton = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * Skeleton - A component for displaying loading placeholders.
8
+ * Provides consistent styling, accessibility features, and various shapes for content loading states.
9
+ *
10
+ * Usage:
11
+ * ```svelte
12
+ * <Skeleton width="100%" height="20px" />
13
+ *
14
+ * <Skeleton variant="circle" size="40px" />
15
+ *
16
+ * <Skeleton variant="text" lines={3} />
17
+ *
18
+ * <div class="flex gap-4">
19
+ * <Skeleton variant="circle" size="48px" />
20
+ * <div class="flex-1">
21
+ * <Skeleton variant="text" width="60%" />
22
+ * <Skeleton variant="text" width="80%" />
23
+ * </div>
24
+ * </div>
25
+ * ```
26
+ */
27
+ declare const Skeleton: import("svelte").Component<{
28
+ class?: string;
29
+ id?: any;
30
+ variant?: string;
31
+ width?: string;
32
+ height: any;
33
+ size: any;
34
+ lines?: number;
35
+ animated?: boolean;
36
+ ariaLabel?: string;
37
+ }, {}, "">;
38
+ type $$ComponentProps = {
39
+ class?: string;
40
+ id?: any;
41
+ variant?: string;
42
+ width?: string;
43
+ height: any;
44
+ size: any;
45
+ lines?: number;
46
+ animated?: boolean;
47
+ ariaLabel?: string;
48
+ };