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
package/README.md ADDED
@@ -0,0 +1,150 @@
1
+ # Twintrinsic
2
+ A tailwind-based collection of svelte components.
3
+
4
+ # WTF is Twintrinsic?
5
+ I got this idea during the christmas break of 2022 when I was looking for a new UI library that was flexible enough to allow me to extend it in ways I wanted and had good accessibility support. After combing through a bunch, I got the idea to try to create a small lib that was basically extensions of HTML. Since HTML elements already have basic accessibility built-in, it's a no-brainer to use these instead of fancy custom elements. I also wanted to use Tailwind for its themeability and easy customization. HTML in intrinsic to the web and tailwind is an extension, so i got `tailwind + intrinsic = twintrinsic`.
6
+
7
+ # Performance
8
+ I am not going to worry about performance for now. I am going to use available HTML and CSS as much as possible, without using Javascript for interactivity unless absolutely necessary. This should keep the compiled bundle pretty performant. My main focus is going to be on code readability, accessibility, and extensibility.
9
+
10
+ ## Components:
11
+ This is in order of heirarchy.
12
+ - [ ] Container
13
+ - [ ] Panel (collapsible content and header)
14
+ - [ ] Sidebar (attaches to side of parent)
15
+ - [ ] BottomBar
16
+ - [ ] Accordion
17
+ - [ ] Card
18
+ - [ ] Lazy (content loads when card is visible)
19
+ - [ ]
20
+ - [ ] AppHeader
21
+ - [ ] App
22
+ - [ ] `split` is IDE-style (resizable panels)
23
+ - [ ] Separator (visual HR/VR with text, icon, etc)
24
+ - [ ]Form
25
+ - [ ] General (all inputs)
26
+ - [ ] Input Validation
27
+ - [ ] floating labels (optional)
28
+ - [ ] compact view ("input group" with icons on left/right)
29
+ - [ ] Placeholder
30
+ - [ ] input masking (formatting display)
31
+ - [ ] AutoComplete
32
+ - [ ] Calendar
33
+ - [ ] Checkbox
34
+ - [ ] configurable states / icons
35
+ - [ ] ListInput (multiple value with "chips")
36
+ - [ ] ColorPicker
37
+ - [ ] Dropdown
38
+ - [ ] Cascading Menu
39
+ - [ ] Multiple selection
40
+ - [ ] icons
41
+ - [ ] FloatLabel
42
+ - [ ] NumberInput
43
+ - [ ] unit display (with masking)
44
+ - [ ] vertical
45
+ - [ ] InputSwitch
46
+ - [ ] InputText
47
+ - [ ] InvalidState
48
+ - [ ] Knob (circle progress "slider")
49
+ - [ ] Listbox
50
+ - [ ] MultiSelect
51
+ - [ ] Password
52
+ - [ ] RadioButton
53
+ - [ ] Rating
54
+ - [ ] SelectButton
55
+ - [ ] Slider
56
+ - [ ] Textarea
57
+ - [ ] ToggleButton
58
+ - [ ] TreeSelect
59
+ - [ ] Validation on all inputs
60
+ - [ ]
61
+ - [ ] Advanced
62
+ - [ ] Editor
63
+ - [ ] Terminal
64
+
65
+ - [ ]General
66
+ - [ ] Localization
67
+ - [ ] Theming
68
+ - [ ] Colors
69
+ - [ ] Specifying Iconsets
70
+ - [ ] Button
71
+ - [ ] Button
72
+ - [ ] Speed Dial
73
+ - [ ] SplitButton
74
+ - [ ] Data
75
+ - [ ] DataTable
76
+ - [ ] DataView
77
+ - [ ] VirtualScroller
78
+ - [ ] FilterService
79
+ - [ ] FullCalendar
80
+ - [ ] OrderList
81
+ - [ ] OrganizationChart
82
+ - [ ] Paginator
83
+ - [ ] PickList
84
+ - [ ] Timeline
85
+ - [ ] Tree
86
+ - [ ] TreeTable
87
+ - [ ] Panel
88
+ - [ ] Accordion
89
+ - [ ] Card
90
+ - [ ] Deferred
91
+ - [ ] Divider
92
+ - [ ] Fieldset
93
+ - [ ] Panel
94
+ - [ ] Splitter
95
+ - [ ] ScrollPanel
96
+ - [ ] TabView
97
+ - [ ] Toolbar
98
+ - [ ] Overlay
99
+ - [ ] ConfirmDialog
100
+ - [ ] ConfirmPopup
101
+ - [ ] Dialog
102
+ - [ ] DynamicDialog
103
+ - [ ] OverlayPanel
104
+ - [ ] Sidebar
105
+ - [ ] Tooltip
106
+ - [ ] File
107
+ - [ ] Upload
108
+ - [ ] Menu
109
+ - [ ] MenuModel
110
+ - [ ] BreadCrumb
111
+ - [ ] ContextMenu
112
+ - [ ] MegaMenu
113
+ - [ ] Menu
114
+ - [ ] Menubar
115
+ - [ ] PanelMenu
116
+ - [ ] Steps
117
+ - [ ] TabMenu
118
+ - [ ] TieredMenu
119
+ - [ ] Dock
120
+ - [ ] Chart
121
+ - [ ] ChartModel
122
+ - [ ] Pie
123
+ - [ ] Doughnut
124
+ - [ ] Bar
125
+ - [ ] Line
126
+ - [ ] PolarArea
127
+ - [ ] Radar
128
+ - [ ] Combo
129
+ - [ ] Messages
130
+ - [ ] Message
131
+ - [ ] Toast
132
+ - [ ] Media
133
+ - [ ] Carousel
134
+ - [ ] Galleria
135
+ - [ ] Image
136
+ - [ ] Misc
137
+ - [ ] Avatar
138
+ - [ ] Badge
139
+ - [ ] BlockUI
140
+ - [ ] Chip
141
+ - [ ] FocusTrap
142
+ - [ ] Inplace
143
+ - [ ] ProgressBar
144
+ - [ ] ProgressSpinner
145
+ - [ ] Ripple
146
+ - [ ] ScrollTop
147
+ - [ ] Skeleton
148
+ - [ ] StyleClass
149
+ - [ ] Tag
150
+ - [ ] Terminal
@@ -0,0 +1,54 @@
1
+ <script>
2
+ import { onDestroy, setContext } from "svelte"
3
+ export let darkMode = false
4
+
5
+ setContext("appDarkMode", {
6
+ getDarkMode: () => darkMode,
7
+ })
8
+ export let appName = "Twintrinsic App"
9
+ export let leftPanelWidth = "300px"
10
+ export let rightPanelWidth = "300px"
11
+ </script>
12
+
13
+ <svelte:head>
14
+ <title>{appName}</title>
15
+ </svelte:head>
16
+ <!-- <svelte:body class="{darkMode ? "dark" : "light"}"/> -->
17
+ <div class='app bg-element-100 dark:bg-dark dark:text-light min-h-screen' style="--left-panel-width: {leftPanelWidth}; --right-panel-width: {rightPanelWidth};">
18
+ {#if $$slots.menu}
19
+ <div class="appMenu">
20
+ <slot name="menu"/>
21
+ </div>
22
+ {/if}
23
+ {#if $$slots.header}
24
+ <div class="appHeader">
25
+ <slot name="header"/>
26
+ </div>
27
+ {/if}
28
+ <div class="appWrapper w-full flex flex-col sm:flex-row flex-wrap sm:flex-nowrap py-4 grow">
29
+ {#if $$slots.leftPanel}
30
+ <div class="appLeftPanel w-fixed w-full shrink grow-0 px-4">
31
+ <div class="sticky top-0 p-4 w-full h-full">
32
+ <slot name="leftPanel"/>
33
+ </div>
34
+ </div>
35
+ {/if}
36
+ <main class="appMain w-full grow pt-1 px-3">
37
+ <slot/>
38
+ </main>
39
+ {#if $$slots.rightPanel}
40
+ <div class="appRightPanel w-fixed w-full shrink grow-0 px-2">
41
+ <!-- fixed-width -->
42
+ <div class="flex sm:flex-col px-2">
43
+ <slot name="rightPanel"/>
44
+ </div>
45
+ </div>
46
+ {/if}
47
+ </div>
48
+ {#if $$slots.footer}
49
+ <footer class="bg-black mt-auto">
50
+ <slot name="footer"/>
51
+ </footer>
52
+ {/if}
53
+ </div>
54
+
@@ -0,0 +1,65 @@
1
+ export default App;
2
+ type App = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
+ darkMode?: boolean | undefined;
4
+ appName?: string | undefined;
5
+ leftPanelWidth?: string | undefined;
6
+ rightPanelWidth?: string | undefined;
7
+ }, {
8
+ menu: {};
9
+ header: {};
10
+ leftPanel: {};
11
+ default: {};
12
+ rightPanel: {};
13
+ footer: {};
14
+ }>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {
17
+ menu: {};
18
+ header: {};
19
+ leftPanel: {};
20
+ default: {};
21
+ rightPanel: {};
22
+ footer: {};
23
+ }> & {
24
+ $$bindings?: string | undefined;
25
+ };
26
+ declare const App: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
27
+ darkMode?: boolean | undefined;
28
+ appName?: string | undefined;
29
+ leftPanelWidth?: string | undefined;
30
+ rightPanelWidth?: string | undefined;
31
+ }, {
32
+ menu: {};
33
+ header: {};
34
+ leftPanel: {};
35
+ default: {};
36
+ rightPanel: {};
37
+ footer: {};
38
+ }>, {
39
+ [evt: string]: CustomEvent<any>;
40
+ }, {
41
+ menu: {};
42
+ header: {};
43
+ leftPanel: {};
44
+ default: {};
45
+ rightPanel: {};
46
+ footer: {};
47
+ }, {}, string>;
48
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
49
+ default: any;
50
+ } ? Props extends Record<string, never> ? any : {
51
+ children?: any;
52
+ } : {});
53
+ 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> {
54
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
55
+ $$bindings?: Bindings;
56
+ } & Exports;
57
+ (internal: unknown, props: Props & {
58
+ $$events?: Events;
59
+ $$slots?: Slots;
60
+ }): Exports & {
61
+ $set?: any;
62
+ $on?: any;
63
+ };
64
+ z_$$bindings?: Bindings;
65
+ }
@@ -0,0 +1,25 @@
1
+ <script lang="ts">
2
+ const {
3
+ heading = "",
4
+ class: propClasses = "",
5
+ type = null,
6
+ } = $props<{ heading?: string; class?: string; type?: string | null }>()
7
+
8
+ const typeCSS = $derived(type ? `bg-${type}` : "")
9
+ </script>
10
+
11
+ <style>
12
+ @reference "./twintrinsic.css";
13
+ .twin-section {
14
+ @apply m-2 my-4;
15
+ }
16
+ </style>
17
+
18
+ <section class="twin-section {propClasses} {typeCSS}">
19
+ {#if $$slots.heading}
20
+ <slot name="heading">
21
+ <h2>{heading}</h2>
22
+ </slot>
23
+ {/if}
24
+ <slot></slot>
25
+ </section>
@@ -0,0 +1,34 @@
1
+ type $$ComponentProps = {
2
+ heading?: string;
3
+ class?: string;
4
+ type?: string | null;
5
+ };
6
+ 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> {
7
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
8
+ $$bindings?: Bindings;
9
+ } & Exports;
10
+ (internal: unknown, props: Props & {
11
+ $$events?: Events;
12
+ $$slots?: Slots;
13
+ }): Exports & {
14
+ $set?: any;
15
+ $on?: any;
16
+ };
17
+ z_$$bindings?: Bindings;
18
+ }
19
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
20
+ default: any;
21
+ } ? Props extends Record<string, never> ? any : {
22
+ children?: any;
23
+ } : {});
24
+ declare const Section: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<$$ComponentProps, {
25
+ heading: {};
26
+ default: {};
27
+ }>, {
28
+ [evt: string]: CustomEvent<any>;
29
+ }, {
30
+ heading: {};
31
+ default: {};
32
+ }, {}, "">;
33
+ type Section = InstanceType<typeof Section>;
34
+ export default Section;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Action that triggers a callback when clicking outside of an element
3
+ * @param node - The element to watch for outside clicks
4
+ * @param callback - Function to call when clicking outside
5
+ * @returns Action object with destroy method
6
+ */
7
+ export declare function clickOutside(node: HTMLElement, callback: () => void): {
8
+ destroy(): void;
9
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Action that triggers a callback when clicking outside of an element
3
+ * @param node - The element to watch for outside clicks
4
+ * @param callback - Function to call when clicking outside
5
+ * @returns Action object with destroy method
6
+ */
7
+ export function clickOutside(node, callback) {
8
+ function handleClick(event) {
9
+ if (node && !node.contains(event.target) && event.target instanceof Node) {
10
+ callback();
11
+ }
12
+ }
13
+ document.addEventListener("click", handleClick, true);
14
+ return {
15
+ destroy() {
16
+ document.removeEventListener("click", handleClick, true);
17
+ },
18
+ };
19
+ }
@@ -0,0 +1 @@
1
+ export { clickOutside } from "./clickOutside";
@@ -0,0 +1 @@
1
+ export { clickOutside } from "./clickOutside";
@@ -0,0 +1,75 @@
1
+ <!--
2
+ @component
3
+ Accordion - A group of collapsible panels using native HTML details/summary elements.
4
+ By default, only one panel can be open at a time using the native `name` attribute.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <Accordion>
9
+ <AccordionItem>
10
+ <svelte:fragment slot="header">Section 1</svelte:fragment>
11
+ Content for section 1
12
+ </AccordionItem>
13
+ <AccordionItem>
14
+ <svelte:fragment slot="header">Section 2</svelte:fragment>
15
+ Content for section 2
16
+ </AccordionItem>
17
+ </Accordion>
18
+ ```
19
+ -->
20
+ <script lang="ts">
21
+ import type { Snippet } from "svelte";
22
+ import { setContext } from "svelte";
23
+
24
+ interface Props {
25
+ /** Additional CSS classes */
26
+ class?: string;
27
+ /** HTML id for accessibility */
28
+ id?: string;
29
+ /** Whether to allow multiple panels to be open simultaneously */
30
+ allowMultiple?: boolean;
31
+ /** Index of the initially expanded item (null for all collapsed) */
32
+ defaultExpanded?: number | null;
33
+ /** Whether to add a border around the accordion */
34
+ bordered?: boolean;
35
+ /** Change event handler */
36
+ onchange?: (event: CustomEvent<{ expandedItems: number[] }>) => void;
37
+ children?: Snippet;
38
+ }
39
+
40
+ let {
41
+ class: className = "",
42
+ id = crypto.randomUUID(),
43
+ allowMultiple = false,
44
+ defaultExpanded = 0,
45
+ bordered = true,
46
+ onchange,
47
+ children,
48
+ }: Props = $props();
49
+
50
+ const groupName = crypto.randomUUID();
51
+
52
+ const accordionContext = $derived({
53
+ groupName,
54
+ allowMultiple,
55
+ defaultExpanded,
56
+ onchange,
57
+ });
58
+
59
+ setContext("accordion", accordionContext);
60
+ </script>
61
+
62
+ <div
63
+ class="accordion {bordered ? 'border border-border dark:border-border rounded-lg' : ''} {className}"
64
+ id={id}
65
+ >
66
+ {@render children?.()}
67
+ </div>
68
+
69
+ <style>
70
+ @reference "../../twintrinsic.css";
71
+
72
+ .accordion {
73
+ @apply divide-y divide-border dark:divide-border overflow-hidden;
74
+ }
75
+ </style>
@@ -0,0 +1,39 @@
1
+ import type { Snippet } from "svelte";
2
+ interface Props {
3
+ /** Additional CSS classes */
4
+ class?: string;
5
+ /** HTML id for accessibility */
6
+ id?: string;
7
+ /** Whether to allow multiple panels to be open simultaneously */
8
+ allowMultiple?: boolean;
9
+ /** Index of the initially expanded item (null for all collapsed) */
10
+ defaultExpanded?: number | null;
11
+ /** Whether to add a border around the accordion */
12
+ bordered?: boolean;
13
+ /** Change event handler */
14
+ onchange?: (event: CustomEvent<{
15
+ expandedItems: number[];
16
+ }>) => void;
17
+ children?: Snippet;
18
+ }
19
+ /**
20
+ * Accordion - A group of collapsible panels using native HTML details/summary elements.
21
+ * By default, only one panel can be open at a time using the native `name` attribute.
22
+ *
23
+ * Usage:
24
+ * ```svelte
25
+ * <Accordion>
26
+ * <AccordionItem>
27
+ * <svelte:fragment slot="header">Section 1</svelte:fragment>
28
+ * Content for section 1
29
+ * </AccordionItem>
30
+ * <AccordionItem>
31
+ * <svelte:fragment slot="header">Section 2</svelte:fragment>
32
+ * Content for section 2
33
+ * </AccordionItem>
34
+ * </Accordion>
35
+ * ```
36
+ */
37
+ declare const Accordion: import("svelte").Component<Props, {}, "">;
38
+ type Accordion = ReturnType<typeof Accordion>;
39
+ export default Accordion;
@@ -0,0 +1,150 @@
1
+ <!--
2
+ @component
3
+ AccordionItem - Individual item within an Accordion component.
4
+ Uses native HTML details/summary elements for semantic disclosure.
5
+
6
+ Usage:
7
+ ```svelte
8
+ <AccordionItem>
9
+ <svelte:fragment slot="header">Section Title</svelte:fragment>
10
+ Content goes here
11
+ </AccordionItem>
12
+ ```
13
+ -->
14
+ <script lang="ts">
15
+ import type { Snippet } from "svelte";
16
+ import { getContext, onMount } from "svelte";
17
+
18
+ interface AccordionContext {
19
+ groupName: string;
20
+ allowMultiple: boolean;
21
+ defaultExpanded: number | null;
22
+ onchange?: (event: CustomEvent<{ expandedItems: number[] }>) => void;
23
+ }
24
+
25
+ interface Props {
26
+ /** Additional CSS classes */
27
+ class?: string;
28
+ /** HTML id for accessibility */
29
+ id?: string;
30
+ /** ARIA label for the header */
31
+ ariaLabel?: string;
32
+ /** Whether to disable the item controls */
33
+ disabled?: boolean;
34
+ /** Whether to show the expand/collapse icon */
35
+ showIcon?: boolean;
36
+ children?: Snippet;
37
+ header?: Snippet;
38
+ }
39
+
40
+ let {
41
+ class: className = "",
42
+ id = crypto.randomUUID(),
43
+ ariaLabel,
44
+ disabled = false,
45
+ showIcon = true,
46
+ children,
47
+ header,
48
+ }: Props = $props();
49
+
50
+ const accordion = getContext<AccordionContext | undefined>("accordion");
51
+
52
+ let index = $state(-1);
53
+ let detailsElement: HTMLDetailsElement | undefined = $state();
54
+
55
+ onMount(() => {
56
+ const parent = detailsElement?.parentElement;
57
+ if (parent) {
58
+ const items = Array.from(parent.children);
59
+ index = items.indexOf(detailsElement!);
60
+ }
61
+ });
62
+
63
+ const shouldBeOpen = $derived(
64
+ accordion?.defaultExpanded === index && accordion?.defaultExpanded !== null
65
+ );
66
+
67
+ function handleToggle(event: Event): void {
68
+ if (disabled) {
69
+ event.preventDefault();
70
+ return;
71
+ }
72
+
73
+ const target = event.target as HTMLDetailsElement;
74
+ accordion?.onchange?.(
75
+ new CustomEvent("change", {
76
+ detail: { expandedItems: [index] },
77
+ })
78
+ );
79
+ }
80
+ </script>
81
+
82
+ <details
83
+ class="accordion-item {className}"
84
+ class:disabled
85
+ bind:this={detailsElement}
86
+ {id}
87
+ name={accordion?.allowMultiple ? undefined : accordion?.groupName}
88
+ ontoggle={handleToggle}
89
+ open={shouldBeOpen}
90
+ >
91
+ <summary
92
+ class="
93
+ w-full flex items-center justify-between
94
+ px-4 py-3
95
+ text-left
96
+ bg-surface dark:bg-surface
97
+ hover:bg-hover dark:hover:bg-hover
98
+ focus:outline-none focus:ring-2 focus:ring-focus-ring dark:focus:ring-focus-ring
99
+ cursor-pointer
100
+ text-text dark:text-text
101
+ "
102
+ aria-label={ariaLabel}
103
+ >
104
+ <div class="flex items-center gap-2">
105
+ {#if header}
106
+ {@render header()}
107
+ {:else}
108
+ Item
109
+ {/if}
110
+ </div>
111
+
112
+ {#if showIcon}
113
+ <svg
114
+ class="w-5 h-5 transform transition-transform duration-200 text-muted dark:text-muted"
115
+ xmlns="http://www.w3.org/2000/svg"
116
+ viewBox="0 0 20 20"
117
+ fill="currentColor"
118
+ aria-hidden="true"
119
+ >
120
+ <path
121
+ fill-rule="evenodd"
122
+ d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
123
+ clip-rule="evenodd"
124
+ />
125
+ </svg>
126
+ {/if}
127
+ </summary>
128
+
129
+ <div
130
+ class="px-4 py-3 bg-background dark:bg-background text-text dark:text-text"
131
+ >
132
+ {@render children?.()}
133
+ </div>
134
+ </details>
135
+
136
+ <style>
137
+ @reference "../../twintrinsic.css";
138
+
139
+ .accordion-item {
140
+ @apply overflow-hidden;
141
+ }
142
+
143
+ .accordion-item.disabled {
144
+ @apply opacity-50 cursor-not-allowed pointer-events-none;
145
+ }
146
+
147
+ :is(details[open]) :is(summary) :is(svg) {
148
+ @apply rotate-180;
149
+ }
150
+ </style>
@@ -0,0 +1,30 @@
1
+ import type { Snippet } from "svelte";
2
+ interface Props {
3
+ /** Additional CSS classes */
4
+ class?: string;
5
+ /** HTML id for accessibility */
6
+ id?: string;
7
+ /** ARIA label for the header */
8
+ ariaLabel?: string;
9
+ /** Whether to disable the item controls */
10
+ disabled?: boolean;
11
+ /** Whether to show the expand/collapse icon */
12
+ showIcon?: boolean;
13
+ children?: Snippet;
14
+ header?: Snippet;
15
+ }
16
+ /**
17
+ * AccordionItem - Individual item within an Accordion component.
18
+ * Uses native HTML details/summary elements for semantic disclosure.
19
+ *
20
+ * Usage:
21
+ * ```svelte
22
+ * <AccordionItem>
23
+ * <svelte:fragment slot="header">Section Title</svelte:fragment>
24
+ * Content goes here
25
+ * </AccordionItem>
26
+ * ```
27
+ */
28
+ declare const AccordionItem: import("svelte").Component<Props, {}, "">;
29
+ type AccordionItem = ReturnType<typeof AccordionItem>;
30
+ export default AccordionItem;
@@ -0,0 +1,8 @@
1
+ ---
2
+ group: 'app'
3
+ icon: 'lucide:layout'
4
+ ---
5
+
6
+ # App
7
+
8
+ App components are components used in the shell of of apps, such as panel layout, menus, etc.