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,149 @@
1
+ <!--
2
+ @component
3
+ CarouselItem - An individual slide within a Carousel component.
4
+ Provides consistent styling, accessibility features, and transition effects.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <CarouselItem>
9
+ <img src="/image1.jpg" alt="Image 1" />
10
+ </CarouselItem>
11
+
12
+ <CarouselItem>
13
+ <div class="p-4 text-center">
14
+ <h3>Slide Title</h3>
15
+ <p>Slide content goes here</p>
16
+ </div>
17
+ </CarouselItem>
18
+ ```
19
+ -->
20
+ <script>
21
+ import { getContext, onMount } from "svelte"
22
+
23
+ const {
24
+ /** @type {string} - Additional CSS classes */
25
+ class: className = "",
26
+
27
+ /** @type {string} - HTML id for accessibility */
28
+ id = crypto.randomUUID(),
29
+
30
+ /** @type {boolean} - Whether the item is active */
31
+ active = false,
32
+
33
+ children,
34
+ } = $props()
35
+
36
+ // Get carousel context
37
+ const carouselContext = getContext("carousel")
38
+
39
+ // Component state
40
+ let index = $state(-1)
41
+ let isActive = $state(false)
42
+ let isVisible = $state(false)
43
+ let wasActive = $state(false)
44
+
45
+ // Register with parent on mount
46
+ onMount(() => {
47
+ if (carouselContext) {
48
+ index = carouselContext.registerItem()
49
+ }
50
+
51
+ return () => {
52
+ // Cleanup if needed
53
+ }
54
+ })
55
+
56
+ // Update active state when prop changes
57
+ $effect(() => {
58
+ if (!carouselContext) {
59
+ isActive = active
60
+ }
61
+ })
62
+
63
+ // Update active state based on context
64
+ $effect(() => {
65
+ if (carouselContext) {
66
+ const currentIndex = carouselContext.currentIndex
67
+ wasActive = isActive
68
+ isActive = index === currentIndex
69
+
70
+ // For fade transition, we need to keep the item visible for a bit after it becomes inactive
71
+ if (carouselContext.transition === "fade") {
72
+ if (isActive) {
73
+ isVisible = true
74
+ } else if (wasActive) {
75
+ // Keep visible during transition, then hide
76
+ isVisible = true
77
+ setTimeout(() => {
78
+ isVisible = false
79
+ }, carouselContext.transitionDuration)
80
+ }
81
+ }
82
+ }
83
+ })
84
+
85
+ // Determine transition styles based on context
86
+ const transitionType = $derived(carouselContext?.transition || "slide")
87
+ const transitionDuration = $derived(carouselContext?.transitionDuration || 300)
88
+ const currentIndex = $derived(carouselContext?.currentIndex || 0)
89
+
90
+ // Calculate transform for slide transition
91
+ const transform = $derived(() => {
92
+ if (transitionType === "slide" && typeof index === "number" && typeof currentIndex === "number") {
93
+ const offset = (index - currentIndex) * 100
94
+ return `translateX(${offset}%)`
95
+ }
96
+ return ""
97
+ })
98
+ </script>
99
+
100
+ <div
101
+ {id}
102
+ class="
103
+ carousel-item
104
+ carousel-item-{transitionType}
105
+ {isActive ? 'carousel-item-active' : ''}
106
+ {isVisible ? 'carousel-item-visible' : ''}
107
+ {className}
108
+ "
109
+ style="
110
+ --transition-duration: {transitionDuration}ms;
111
+ transform: {transform};
112
+ "
113
+ role="tabpanel"
114
+ aria-hidden={!isActive}
115
+ aria-roledescription="slide"
116
+ >
117
+ {@render children?.()}
118
+ </div>
119
+
120
+ <style>
121
+ @reference "../../twintrinsic.css";
122
+
123
+ .carousel-item {
124
+ @apply w-full flex-shrink-0;
125
+ }
126
+
127
+ /* Slide transition */
128
+ .carousel-item-slide {
129
+ @apply transition-transform ease-in-out;
130
+ transition-duration: var(--transition-duration);
131
+ }
132
+
133
+ /* Fade transition */
134
+ .carousel-item-fade {
135
+ @apply absolute inset-0;
136
+ @apply opacity-0 invisible;
137
+ @apply transition-opacity ease-in-out;
138
+ transition-duration: var(--transition-duration);
139
+ }
140
+
141
+ .carousel-item-fade.carousel-item-active,
142
+ .carousel-item-fade.carousel-item-visible {
143
+ @apply opacity-100 visible;
144
+ }
145
+
146
+ .carousel-item-active {
147
+ @apply z-10;
148
+ }
149
+ </style>
@@ -0,0 +1,35 @@
1
+ export default CarouselItem;
2
+ type CarouselItem = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * CarouselItem - An individual slide within a Carousel component.
8
+ * Provides consistent styling, accessibility features, and transition effects.
9
+ *
10
+ * Usage:
11
+ * ```svelte
12
+ * <CarouselItem>
13
+ * <img src="/image1.jpg" alt="Image 1" />
14
+ * </CarouselItem>
15
+ *
16
+ * <CarouselItem>
17
+ * <div class="p-4 text-center">
18
+ * <h3>Slide Title</h3>
19
+ * <p>Slide content goes here</p>
20
+ * </div>
21
+ * </CarouselItem>
22
+ * ```
23
+ */
24
+ declare const CarouselItem: import("svelte").Component<{
25
+ class?: string;
26
+ id?: any;
27
+ active?: boolean;
28
+ children: any;
29
+ }, {}, "">;
30
+ type $$ComponentProps = {
31
+ class?: string;
32
+ id?: any;
33
+ active?: boolean;
34
+ children: any;
35
+ };
@@ -0,0 +1,288 @@
1
+ <!--
2
+ @component
3
+ Chip - A compact element for representing an input, attribute, or action.
4
+ Provides consistent styling, accessibility features, and interactive options.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <Chip>Basic Chip</Chip>
9
+
10
+ <Chip variant="primary" icon="<svg>...</svg>">
11
+ Primary Chip
12
+ </Chip>
13
+
14
+ <Chip
15
+ variant="success"
16
+ removable
17
+ onremove={() => console.log('Chip removed')}
18
+ >
19
+ Removable Chip
20
+ </Chip>
21
+
22
+ <Chip
23
+ variant="warning"
24
+ avatar="<img src='user.jpg' alt='User'>"
25
+ clickable
26
+ onclick={() => console.log('Chip clicked')}
27
+ >
28
+ User Name
29
+ </Chip>
30
+ ```
31
+ -->
32
+ <script>
33
+ const {
34
+ /** @type {string} - Additional CSS classes */
35
+ class: className = "",
36
+
37
+ /** @type {string} - HTML id for accessibility */
38
+ id = crypto.randomUUID(),
39
+
40
+ /** @type {string} - Visual style variant */
41
+ variant = "default",
42
+
43
+ /** @type {string} - Size of the chip (sm, md, lg) */
44
+ size = "md",
45
+
46
+ /** @type {string} - Icon to display (HTML or SVG string) */
47
+ icon,
48
+
49
+ /** @type {string} - Avatar to display (HTML or img tag) */
50
+ avatar,
51
+
52
+ /** @type {boolean} - Whether the chip is removable */
53
+ removable = false,
54
+
55
+ /** @type {boolean} - Whether the chip is clickable */
56
+ clickable = false,
57
+
58
+ /** @type {boolean} - Whether the chip is disabled */
59
+ disabled = false,
60
+
61
+ /** @type {boolean} - Whether the chip is selected */
62
+ selected = false,
63
+
64
+ /** @type {boolean} - Whether to show an outline style */
65
+ outline = false,
66
+
67
+ /** @type {string} - ARIA label for the remove button */
68
+ removeAriaLabel = "Remove",
69
+
70
+ /** @type {string} - Custom remove icon (HTML or SVG string) */
71
+ removeIcon,
72
+
73
+ /** @type {(event: CustomEvent) => void} - Remove event handler */
74
+ onremove,
75
+ /** @type {(event: CustomEvent) => void} - Click event handler */
76
+ onclick,
77
+
78
+ children,
79
+ } = $props()
80
+
81
+ // Determine variant classes
82
+ const variantClasses = $derived(
83
+ outline
84
+ ? {
85
+ default: "bg-transparent border border-muted text-text dark:border-muted dark:text-text",
86
+ primary:
87
+ "bg-transparent border border-primary-500 text-primary-500 dark:border-primary-500 dark:text-primary-500",
88
+ secondary:
89
+ "bg-transparent border border-secondary-500 text-secondary-500 dark:border-secondary-500 dark:text-secondary-500",
90
+ success:
91
+ "bg-transparent border border-success-500 text-success-500 dark:border-success-500 dark:text-success-500",
92
+ warning:
93
+ "bg-transparent border border-warning-500 text-warning-500 dark:border-warning-500 dark:text-warning-500",
94
+ error:
95
+ "bg-transparent border border-error-500 text-error-500 dark:border-error-500 dark:text-error-500",
96
+ info: "bg-transparent border border-info-500 text-info-500 dark:border-info-500 dark:text-info-500",
97
+ }[variant]
98
+ : {
99
+ default: "bg-muted/10 text-text dark:bg-muted/20 dark:text-text",
100
+ primary: "bg-primary-100 text-primary-800 dark:bg-primary-900 dark:text-primary-200",
101
+ secondary:
102
+ "bg-secondary-100 text-secondary-800 dark:bg-secondary-900 dark:text-secondary-200",
103
+ success: "bg-success-100 text-success-800 dark:bg-success-900 dark:text-success-200",
104
+ warning: "bg-warning-100 text-warning-800 dark:bg-warning-900 dark:text-warning-200",
105
+ error: "bg-error-100 text-error-800 dark:bg-error-900 dark:text-error-200",
106
+ info: "bg-info-100 text-info-800 dark:bg-info-900 dark:text-info-200",
107
+ }[variant]
108
+ )
109
+
110
+ // Determine selected variant classes
111
+ const selectedClasses = $derived(
112
+ selected
113
+ ? {
114
+ default: "bg-muted/20 dark:bg-muted/30",
115
+ primary: "bg-primary-200 dark:bg-primary-800",
116
+ secondary: "bg-secondary-200 dark:bg-secondary-800",
117
+ success: "bg-success-200 dark:bg-success-800",
118
+ warning: "bg-warning-200 dark:bg-warning-800",
119
+ error: "bg-error-200 dark:bg-error-800",
120
+ info: "bg-info-200 dark:bg-info-800",
121
+ }[variant]
122
+ : ""
123
+ )
124
+
125
+ // Determine size classes
126
+ const sizeClasses = $derived(
127
+ {
128
+ sm: "text-xs px-2 py-0.5 h-6",
129
+ md: "text-sm px-2.5 py-1 h-8",
130
+ lg: "text-base px-3 py-1.5 h-10",
131
+ }[size] || "text-sm px-2.5 py-1 h-8"
132
+ )
133
+
134
+ // Determine icon size classes
135
+ const iconSizeClasses = $derived(
136
+ {
137
+ sm: "w-3.5 h-3.5",
138
+ md: "w-4 h-4",
139
+ lg: "w-5 h-5",
140
+ }[size] || "w-4 h-4"
141
+ )
142
+
143
+ /**
144
+ * Handles click on the chip
145
+ * @param {MouseEvent} event - Click event
146
+ */
147
+ function handleClick(event) {
148
+ if (disabled) {
149
+ event.preventDefault()
150
+ return
151
+ }
152
+
153
+ if (clickable) {
154
+ onclick?.(new CustomEvent("click", { detail: event }))
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Handles remove button click
160
+ * @param {MouseEvent} event - Click event
161
+ */
162
+ function handleRemove(event) {
163
+ if (disabled) {
164
+ event.preventDefault()
165
+ return
166
+ }
167
+
168
+ event.stopPropagation()
169
+ onremove?.(new CustomEvent("remove"))
170
+ }
171
+
172
+ /**
173
+ * Handles keydown events
174
+ * @param {KeyboardEvent} event - Keydown event
175
+ */
176
+ function handleKeydown(event) {
177
+ if (disabled) return
178
+
179
+ if ((clickable && event.key === "Enter") || event.key === " ") {
180
+ event.preventDefault()
181
+ onclick?.(new CustomEvent("click", { detail: event }))
182
+ }
183
+ }
184
+ </script>
185
+
186
+ <div
187
+ {id}
188
+ class="
189
+ chip
190
+ {variantClasses}
191
+ {selectedClasses}
192
+ {sizeClasses}
193
+ {clickable ? 'chip-clickable' : ''}
194
+ {disabled ? 'chip-disabled' : ''}
195
+ {selected ? 'chip-selected' : ''}
196
+ {className}
197
+ "
198
+ role={clickable ? 'button' : 'presentation'}
199
+ tabindex={clickable && !disabled ? 0 : undefined}
200
+ aria-disabled={disabled ? true : undefined}
201
+ onclick={handleClick}
202
+ onkeydown={handleKeydown}
203
+ >
204
+ {#if avatar}
205
+ <span class="chip-avatar">
206
+ {@html avatar}
207
+ </span>
208
+ {/if}
209
+
210
+ {#if icon}
211
+ <span class="chip-icon {iconSizeClasses}" aria-hidden="true">
212
+ {@html icon}
213
+ </span>
214
+ {/if}
215
+
216
+ <span class="chip-content">
217
+ {@render children?.()}
218
+ </span>
219
+
220
+ {#if removable && !disabled}
221
+ <button
222
+ type="button"
223
+ class="chip-remove"
224
+ aria-label={removeAriaLabel}
225
+ onclick={handleRemove}
226
+ >
227
+ {#if removeIcon}
228
+ <span class="chip-remove-icon {iconSizeClasses}">
229
+ {@html removeIcon}
230
+ </span>
231
+ {:else}
232
+ <svg class="{iconSizeClasses}" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
233
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
234
+ </svg>
235
+ {/if}
236
+ </button>
237
+ {/if}
238
+ </div>
239
+
240
+ <style>
241
+ @reference "../../twintrinsic.css";
242
+
243
+ .chip {
244
+ @apply inline-flex items-center;
245
+ @apply rounded-full;
246
+ @apply font-medium;
247
+ @apply transition-colors duration-150;
248
+ @apply max-w-full;
249
+ }
250
+
251
+ .chip-clickable {
252
+ @apply cursor-pointer;
253
+ @apply hover:bg-inherit/80 dark:hover:bg-inherit/80;
254
+ @apply focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400 focus:ring-offset-2;
255
+ }
256
+
257
+ .chip-disabled {
258
+ @apply opacity-50 cursor-not-allowed;
259
+ @apply pointer-events-none;
260
+ }
261
+
262
+ .chip-avatar {
263
+ @apply -ml-1 mr-1;
264
+ }
265
+
266
+ .chip-avatar :global(img),
267
+ .chip-avatar :global(svg) {
268
+ @apply w-6 h-6 rounded-full object-cover;
269
+ }
270
+
271
+ .chip-icon {
272
+ @apply mr-1 flex-shrink-0;
273
+ }
274
+
275
+ .chip-content {
276
+ @apply truncate;
277
+ }
278
+
279
+ .chip-remove {
280
+ @apply ml-1 -mr-1 p-0.5;
281
+ @apply rounded-full;
282
+ @apply flex items-center justify-center;
283
+ @apply text-current opacity-70;
284
+ @apply hover:opacity-100;
285
+ @apply focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400;
286
+ @apply transition-opacity duration-150;
287
+ }
288
+ </style>
@@ -0,0 +1,71 @@
1
+ export default Chip;
2
+ type Chip = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ /**
7
+ * Chip - A compact element for representing an input, attribute, or action.
8
+ * Provides consistent styling, accessibility features, and interactive options.
9
+ *
10
+ * Usage:
11
+ * ```svelte
12
+ * <Chip>Basic Chip</Chip>
13
+ *
14
+ * <Chip variant="primary" icon="<svg>...</svg>">
15
+ * Primary Chip
16
+ * </Chip>
17
+ *
18
+ * <Chip
19
+ * variant="success"
20
+ * removable
21
+ * onremove={() => console.log('Chip removed')}
22
+ * >
23
+ * Removable Chip
24
+ * </Chip>
25
+ *
26
+ * <Chip
27
+ * variant="warning"
28
+ * avatar="<img src='user.jpg' alt='User'>"
29
+ * clickable
30
+ * onclick={() => console.log('Chip clicked')}
31
+ * >
32
+ * User Name
33
+ * </Chip>
34
+ * ```
35
+ */
36
+ declare const Chip: import("svelte").Component<{
37
+ class?: string;
38
+ id?: any;
39
+ variant?: string;
40
+ size?: string;
41
+ icon: any;
42
+ avatar: any;
43
+ removable?: boolean;
44
+ clickable?: boolean;
45
+ disabled?: boolean;
46
+ selected?: boolean;
47
+ outline?: boolean;
48
+ removeAriaLabel?: string;
49
+ removeIcon: any;
50
+ onremove: any;
51
+ onclick: any;
52
+ children: any;
53
+ }, {}, "">;
54
+ type $$ComponentProps = {
55
+ class?: string;
56
+ id?: any;
57
+ variant?: string;
58
+ size?: string;
59
+ icon: any;
60
+ avatar: any;
61
+ removable?: boolean;
62
+ clickable?: boolean;
63
+ disabled?: boolean;
64
+ selected?: boolean;
65
+ outline?: boolean;
66
+ removeAriaLabel?: string;
67
+ removeIcon: any;
68
+ onremove: any;
69
+ onclick: any;
70
+ children: any;
71
+ };