slexkit 0.2.0

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 (221) hide show
  1. package/AGENTS.slexkit.md +29 -0
  2. package/CHANGELOG.md +90 -0
  3. package/LICENSE +21 -0
  4. package/README.md +165 -0
  5. package/README.zh-CN.md +165 -0
  6. package/dist/ai/llms-authoring.txt +44 -0
  7. package/dist/ai/llms-components.txt +669 -0
  8. package/dist/ai/llms-full.txt +6586 -0
  9. package/dist/ai/llms-runtime.txt +1475 -0
  10. package/dist/ai/llms-toolhost.txt +295 -0
  11. package/dist/ai/llms.txt +69 -0
  12. package/dist/ai/slexkit-ai-manifest.json +2922 -0
  13. package/dist/base.css +621 -0
  14. package/dist/chunks/accordion-5f0nvjjm.js +376 -0
  15. package/dist/chunks/accordion-830dw78f.js +221 -0
  16. package/dist/chunks/accordion-cfjyxw93.js +630 -0
  17. package/dist/chunks/accordion-cw5r75jm.js +424 -0
  18. package/dist/chunks/accordion-ehnhpeca.js +492 -0
  19. package/dist/chunks/accordion-hzyrngd6.js +2377 -0
  20. package/dist/chunks/accordion-nw12ytps.js +6823 -0
  21. package/dist/components/accordion.js +163 -0
  22. package/dist/components/badge.js +80 -0
  23. package/dist/components/button.css +114 -0
  24. package/dist/components/button.js +16 -0
  25. package/dist/components/callout.js +154 -0
  26. package/dist/components/card.js +95 -0
  27. package/dist/components/checkbox.js +114 -0
  28. package/dist/components/choice.css +165 -0
  29. package/dist/components/code-block.js +264 -0
  30. package/dist/components/collapsible.js +111 -0
  31. package/dist/components/column.js +49 -0
  32. package/dist/components/content.css +474 -0
  33. package/dist/components/disclosure.css +162 -0
  34. package/dist/components/display.css +259 -0
  35. package/dist/components/divider.js +98 -0
  36. package/dist/components/feedback.css +219 -0
  37. package/dist/components/grid.js +67 -0
  38. package/dist/components/index.js +13364 -0
  39. package/dist/components/input.css +1247 -0
  40. package/dist/components/input.js +384 -0
  41. package/dist/components/link.js +77 -0
  42. package/dist/components/progress.js +111 -0
  43. package/dist/components/radio-group.js +189 -0
  44. package/dist/components/row.js +200 -0
  45. package/dist/components/section.js +161 -0
  46. package/dist/components/select.css +260 -0
  47. package/dist/components/select.js +16 -0
  48. package/dist/components/slider.css +125 -0
  49. package/dist/components/slider.js +175 -0
  50. package/dist/components/specs.js +1090 -0
  51. package/dist/components/stat.js +178 -0
  52. package/dist/components/submit.css +9 -0
  53. package/dist/components/submit.js +77 -0
  54. package/dist/components/switch.css +114 -0
  55. package/dist/components/switch.js +114 -0
  56. package/dist/components/table.js +157 -0
  57. package/dist/components/tabs.css +192 -0
  58. package/dist/components/tabs.js +17 -0
  59. package/dist/components/text-input.css +245 -0
  60. package/dist/components/text.js +50 -0
  61. package/dist/components/toast.js +240 -0
  62. package/dist/components/tooling.css +1009 -0
  63. package/dist/components/tooling.js +48951 -0
  64. package/dist/runtime.cjs +3728 -0
  65. package/dist/runtime.js +3686 -0
  66. package/dist/slexkit.cjs +18539 -0
  67. package/dist/slexkit.css +4776 -0
  68. package/dist/slexkit.js +18497 -0
  69. package/dist/tooling.js +59141 -0
  70. package/dist/types/components/accordion.d.ts +2 -0
  71. package/dist/types/components/badge.d.ts +2 -0
  72. package/dist/types/components/button.d.ts +2 -0
  73. package/dist/types/components/callout.d.ts +2 -0
  74. package/dist/types/components/card.d.ts +2 -0
  75. package/dist/types/components/checkbox.d.ts +2 -0
  76. package/dist/types/components/code-block.d.ts +2 -0
  77. package/dist/types/components/collapsible.d.ts +2 -0
  78. package/dist/types/components/column.d.ts +2 -0
  79. package/dist/types/components/divider.d.ts +2 -0
  80. package/dist/types/components/entries/accordion.d.ts +3 -0
  81. package/dist/types/components/entries/badge.d.ts +3 -0
  82. package/dist/types/components/entries/button.d.ts +3 -0
  83. package/dist/types/components/entries/callout.d.ts +3 -0
  84. package/dist/types/components/entries/card.d.ts +3 -0
  85. package/dist/types/components/entries/checkbox.d.ts +3 -0
  86. package/dist/types/components/entries/code-block.d.ts +3 -0
  87. package/dist/types/components/entries/collapsible.d.ts +3 -0
  88. package/dist/types/components/entries/column.d.ts +3 -0
  89. package/dist/types/components/entries/divider.d.ts +3 -0
  90. package/dist/types/components/entries/grid.d.ts +3 -0
  91. package/dist/types/components/entries/input.d.ts +3 -0
  92. package/dist/types/components/entries/link.d.ts +3 -0
  93. package/dist/types/components/entries/progress.d.ts +3 -0
  94. package/dist/types/components/entries/radio-group.d.ts +3 -0
  95. package/dist/types/components/entries/row.d.ts +3 -0
  96. package/dist/types/components/entries/section.d.ts +3 -0
  97. package/dist/types/components/entries/select.d.ts +3 -0
  98. package/dist/types/components/entries/slider.d.ts +3 -0
  99. package/dist/types/components/entries/specs.d.ts +1 -0
  100. package/dist/types/components/entries/stat.d.ts +3 -0
  101. package/dist/types/components/entries/submit.d.ts +3 -0
  102. package/dist/types/components/entries/switch.d.ts +3 -0
  103. package/dist/types/components/entries/table.d.ts +3 -0
  104. package/dist/types/components/entries/tabs.d.ts +3 -0
  105. package/dist/types/components/entries/text.d.ts +3 -0
  106. package/dist/types/components/entries/toast.d.ts +3 -0
  107. package/dist/types/components/entries/tooling.d.ts +1 -0
  108. package/dist/types/components/grid.d.ts +2 -0
  109. package/dist/types/components/index.d.ts +6 -0
  110. package/dist/types/components/input.d.ts +2 -0
  111. package/dist/types/components/link.d.ts +2 -0
  112. package/dist/types/components/progress.d.ts +2 -0
  113. package/dist/types/components/radio-group.d.ts +2 -0
  114. package/dist/types/components/row.d.ts +2 -0
  115. package/dist/types/components/section.d.ts +2 -0
  116. package/dist/types/components/select.d.ts +2 -0
  117. package/dist/types/components/slider.d.ts +2 -0
  118. package/dist/types/components/spec-helpers.d.ts +23 -0
  119. package/dist/types/components/spec-registry.d.ts +12 -0
  120. package/dist/types/components/spec-schema.d.ts +74 -0
  121. package/dist/types/components/specs.d.ts +2 -0
  122. package/dist/types/components/stat.d.ts +2 -0
  123. package/dist/types/components/submit.d.ts +2 -0
  124. package/dist/types/components/svelte/adapter.d.ts +3 -0
  125. package/dist/types/components/svelte/bindProps.d.ts +2 -0
  126. package/dist/types/components/svelte/helpers.d.ts +33 -0
  127. package/dist/types/components/svelte/layout/balancedTiles.d.ts +14 -0
  128. package/dist/types/components/svelte/types.d.ts +12 -0
  129. package/dist/types/components/switch.d.ts +2 -0
  130. package/dist/types/components/table.d.ts +2 -0
  131. package/dist/types/components/tabs.d.ts +2 -0
  132. package/dist/types/components/text.d.ts +2 -0
  133. package/dist/types/components/toast.d.ts +2 -0
  134. package/dist/types/components/tooling.d.ts +2 -0
  135. package/dist/types/components-svelte.d.ts +5 -0
  136. package/dist/types/engine/component-scope.d.ts +14 -0
  137. package/dist/types/engine/component-state.d.ts +9 -0
  138. package/dist/types/engine/diagnostics.d.ts +24 -0
  139. package/dist/types/engine/engineering.d.ts +11 -0
  140. package/dist/types/engine/eval.d.ts +5 -0
  141. package/dist/types/engine/index.d.ts +26 -0
  142. package/dist/types/engine/markdown-runtime.d.ts +33 -0
  143. package/dist/types/engine/merge.d.ts +1 -0
  144. package/dist/types/engine/reactive.d.ts +11 -0
  145. package/dist/types/engine/registry.d.ts +4 -0
  146. package/dist/types/engine/renderer.d.ts +6 -0
  147. package/dist/types/engine/sandbox-runner.d.ts +2 -0
  148. package/dist/types/engine/secure-runtime.d.ts +214 -0
  149. package/dist/types/engine/store.d.ts +12 -0
  150. package/dist/types/engine/types.d.ts +58 -0
  151. package/dist/types/icons/manager.d.ts +17 -0
  152. package/dist/types/icons/phosphor.d.ts +45 -0
  153. package/dist/types/index.d.ts +61 -0
  154. package/dist/types/runtime.d.ts +32 -0
  155. package/dist/types/toolhost/index.d.ts +78 -0
  156. package/dist/types/tooling-umd.d.ts +47 -0
  157. package/dist/types/version.d.ts +8 -0
  158. package/dist/umd/slexkit.tooling.umd.js +66553 -0
  159. package/dist/umd/slexkit.umd.js +18552 -0
  160. package/package.json +136 -0
  161. package/scripts/cli.mjs +47 -0
  162. package/skills/slexkit/SKILL.md +27 -0
  163. package/skills/slexkit-author/SKILL.md +50 -0
  164. package/skills/slexkit-host-integration/SKILL.md +33 -0
  165. package/skills/slexkit-secure-runtime/SKILL.md +31 -0
  166. package/skills/slexkit-toolhost/SKILL.md +38 -0
  167. package/skills/slexkit-update/SKILL.md +23 -0
  168. package/src/components/svelte/InlineIcon.svelte +66 -0
  169. package/src/components/svelte/adapter.ts +76 -0
  170. package/src/components/svelte/bindProps.ts +9 -0
  171. package/src/components/svelte/content/Badge.svelte +19 -0
  172. package/src/components/svelte/content/Callout.svelte +57 -0
  173. package/src/components/svelte/content/CodeBlock.svelte +130 -0
  174. package/src/components/svelte/content/Divider.svelte +21 -0
  175. package/src/components/svelte/content/Link.svelte +21 -0
  176. package/src/components/svelte/content/Section.svelte +24 -0
  177. package/src/components/svelte/content/Table.svelte +44 -0
  178. package/src/components/svelte/disclosure/Accordion.svelte +100 -0
  179. package/src/components/svelte/disclosure/Collapsible.svelte +45 -0
  180. package/src/components/svelte/display/Stat.svelte +102 -0
  181. package/src/components/svelte/display/Text.svelte +11 -0
  182. package/src/components/svelte/feedback/Progress.svelte +34 -0
  183. package/src/components/svelte/feedback/Toast.svelte +105 -0
  184. package/src/components/svelte/helpers.ts +148 -0
  185. package/src/components/svelte/input/Button.svelte +78 -0
  186. package/src/components/svelte/input/Checkbox.svelte +52 -0
  187. package/src/components/svelte/input/Input.svelte +202 -0
  188. package/src/components/svelte/input/RadioGroup.svelte +71 -0
  189. package/src/components/svelte/input/Select.svelte +220 -0
  190. package/src/components/svelte/input/Slider.svelte +96 -0
  191. package/src/components/svelte/input/Submit.svelte +32 -0
  192. package/src/components/svelte/input/Switch.svelte +53 -0
  193. package/src/components/svelte/input/Tabs.svelte +188 -0
  194. package/src/components/svelte/layout/Card.svelte +17 -0
  195. package/src/components/svelte/layout/Column.svelte +15 -0
  196. package/src/components/svelte/layout/Grid.svelte +26 -0
  197. package/src/components/svelte/layout/Row.svelte +105 -0
  198. package/src/components/svelte/layout/balancedTiles.ts +85 -0
  199. package/src/components/svelte/tooling/CodeMirror.svelte +91 -0
  200. package/src/components/svelte/tooling/Playground.svelte +765 -0
  201. package/src/components/svelte/tooling/PlaygroundMarkdown.svelte +26 -0
  202. package/src/components/svelte/tooling/PlaygroundSlexCode.svelte +76 -0
  203. package/src/components/svelte/types.ts +17 -0
  204. package/src/styles/animation.css +98 -0
  205. package/src/styles/components/button.css +114 -0
  206. package/src/styles/components/choice.css +165 -0
  207. package/src/styles/components/select.css +260 -0
  208. package/src/styles/components/slider.css +125 -0
  209. package/src/styles/components/submit.css +9 -0
  210. package/src/styles/components/switch.css +114 -0
  211. package/src/styles/components/tabs.css +192 -0
  212. package/src/styles/components/text-input.css +245 -0
  213. package/src/styles/content.css +474 -0
  214. package/src/styles/disclosure.css +162 -0
  215. package/src/styles/display.css +259 -0
  216. package/src/styles/entry.css +34 -0
  217. package/src/styles/feedback.css +219 -0
  218. package/src/styles/input.css +8 -0
  219. package/src/styles/layout.css +365 -0
  220. package/src/styles/theme.css +31 -0
  221. package/src/styles/tooling.css +1009 -0
@@ -0,0 +1,630 @@
1
+ import {
2
+ getTabsContext,
3
+ getTheme,
4
+ setTabsContext,
5
+ tv,
6
+ warnThemeDeprecation
7
+ } from "./accordion-hzyrngd6.js";
8
+ import {
9
+ InlineIcon
10
+ } from "./accordion-cw5r75jm.js";
11
+ import {
12
+ action,
13
+ append,
14
+ attribute_effect,
15
+ bindPropStore,
16
+ child,
17
+ clsx,
18
+ clsx_default,
19
+ comment,
20
+ delegate,
21
+ delegated,
22
+ each,
23
+ emit,
24
+ first_child,
25
+ from_html,
26
+ get,
27
+ getContext,
28
+ if_block,
29
+ index,
30
+ list,
31
+ next,
32
+ noop,
33
+ pop,
34
+ prop,
35
+ props_id,
36
+ proxy,
37
+ push,
38
+ reset,
39
+ rest_props,
40
+ set,
41
+ setContext,
42
+ set_attribute,
43
+ set_class,
44
+ set_text,
45
+ sibling,
46
+ snippet,
47
+ state,
48
+ template_effect,
49
+ text,
50
+ text1 as text2,
51
+ untrack,
52
+ user_derived,
53
+ user_effect
54
+ } from "./accordion-nw12ytps.js";
55
+
56
+ // node_modules/.bun/flowbite-svelte@1.33.1+c74efb4fcdd27e5c/node_modules/flowbite-svelte/dist/utils/singleselection.svelte.js
57
+ var SINGLE_SELECTION_KEY = Symbol("singleton");
58
+ function createSingleSelectionContext(nonReactive = false) {
59
+ if (nonReactive)
60
+ return setContext(SINGLE_SELECTION_KEY, {});
61
+ const context = proxy({ value: null });
62
+ return setContext(SINGLE_SELECTION_KEY, context);
63
+ }
64
+ function setSelected(context, open, value) {
65
+ if (open)
66
+ context.value = value ?? null;
67
+ else if (context.value === value)
68
+ context.value = null;
69
+ return context;
70
+ }
71
+ function useSingleSelection(callback) {
72
+ const context = getContext(SINGLE_SELECTION_KEY) ?? createSingleSelectionContext(false);
73
+ if (!context.hasOwnProperty?.("value"))
74
+ return () => context;
75
+ user_effect(() => {
76
+ if (context.value !== null)
77
+ callback(context.value);
78
+ });
79
+ return (open, v) => untrack(() => setSelected(context, open, v));
80
+ }
81
+
82
+ // node_modules/.bun/flowbite-svelte@1.33.1+c74efb4fcdd27e5c/node_modules/flowbite-svelte/dist/tabs/theme.js
83
+ var tabs = tv({
84
+ slots: {
85
+ base: "flex space-x-2 rtl:space-x-reverse",
86
+ content: "p-4 bg-gray-50 rounded-lg dark:bg-gray-800 mt-4",
87
+ divider: "h-px bg-gray-200 dark:bg-gray-700",
88
+ active: "p-4 text-primary-600 bg-gray-100 rounded-t-lg dark:bg-gray-800 dark:text-primary-500",
89
+ inactive: "p-4 text-gray-500 rounded-t-lg hover:text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-300"
90
+ },
91
+ variants: {
92
+ tabStyle: {
93
+ full: {
94
+ active: "p-4 w-full rounded-none group-first:rounded-s-lg group-last:rounded-e-lg text-gray-900 bg-gray-100 focus:ring-4 focus:ring-primary-300 focus:outline-hidden dark:bg-gray-700 dark:text-white",
95
+ inactive: "p-4 w-full rounded-none group-first:rounded-s-lg group-last:rounded-e-lg text-gray-500 dark:text-gray-400 bg-white hover:text-gray-700 hover:bg-gray-50 focus:ring-4 focus:ring-primary-300 focus:outline-hidden dark:hover:text-white dark:bg-gray-800 dark:hover:bg-gray-700"
96
+ },
97
+ pill: {
98
+ active: "py-3 px-4 text-white bg-primary-600 rounded-lg",
99
+ inactive: "py-3 px-4 text-gray-500 rounded-lg hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white"
100
+ },
101
+ underline: {
102
+ base: "-mb-px",
103
+ active: "p-4 text-primary-600 border-b-2 border-primary-600 dark:text-primary-500 dark:border-primary-500 bg-transparent",
104
+ inactive: "p-4 border-b-2 border-transparent hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 text-gray-500 dark:text-gray-400 bg-transparent"
105
+ },
106
+ none: {
107
+ active: "",
108
+ inactive: ""
109
+ }
110
+ },
111
+ hasDivider: {
112
+ true: {}
113
+ }
114
+ },
115
+ compoundVariants: [
116
+ {
117
+ tabStyle: ["full", "pill"],
118
+ hasDivider: true,
119
+ class: {
120
+ divider: "hidden"
121
+ }
122
+ }
123
+ ],
124
+ defaultVariants: {
125
+ tabStyle: "none",
126
+ hasDivider: true
127
+ }
128
+ });
129
+ var tabItem = tv({
130
+ slots: {
131
+ base: "group focus-within:z-10",
132
+ button: "inline-block text-sm font-medium text-center disabled:cursor-not-allowed"
133
+ },
134
+ variants: {
135
+ open: {
136
+ true: {
137
+ button: "active"
138
+ }
139
+ },
140
+ disabled: {
141
+ true: {
142
+ button: "cursor-not-allowed"
143
+ }
144
+ }
145
+ },
146
+ compoundVariants: [
147
+ {
148
+ open: true,
149
+ class: {
150
+ button: ""
151
+ }
152
+ },
153
+ {
154
+ open: false,
155
+ class: {
156
+ button: ""
157
+ }
158
+ }
159
+ ],
160
+ defaultVariants: {
161
+ open: false,
162
+ disabled: false
163
+ }
164
+ });
165
+
166
+ // node_modules/.bun/flowbite-svelte@1.33.1+c74efb4fcdd27e5c/node_modules/flowbite-svelte/dist/tabs/Tabs.svelte
167
+ var root_1 = from_html(`<div></div>`);
168
+ var root = from_html(`<ul><!></ul> <!> <div role="tabpanel"><!></div>`, 1);
169
+ function Tabs($$anchor, $$props) {
170
+ const uuid = props_id();
171
+ push($$props, true);
172
+ let selected = prop($$props, "selected", 15), tabStyle = prop($$props, "tabStyle", 3, "none"), divider = prop($$props, "divider", 3, true), restProps = rest_props($$props, [
173
+ "$$slots",
174
+ "$$events",
175
+ "$$legacy",
176
+ "children",
177
+ "selected",
178
+ "tabStyle",
179
+ "ulClass",
180
+ "contentClass",
181
+ "divider",
182
+ "class",
183
+ "classes"
184
+ ]);
185
+ const activeClasses = user_derived(() => typeof $$props.classes?.active === "string" ? $$props.classes.active : undefined);
186
+ warnThemeDeprecation("Tabs", untrack(() => ({ ulClass: $$props.ulClass, contentClass: $$props.contentClass })), { ulClass: "class", contentClass: "content" });
187
+ const theme = user_derived(() => getTheme("tabs"));
188
+ const styling = user_derived(() => $$props.classes ?? { content: $$props.contentClass });
189
+ const $$d = user_derived(() => tabs({ tabStyle: tabStyle(), hasDivider: divider() })), base = user_derived(() => get($$d).base), content = user_derived(() => get($$d).content), dividerClass = user_derived(() => get($$d).divider);
190
+ const panelId = `tab-panel-${uuid}`;
191
+ const ctx = user_derived(() => ({ tabStyle: tabStyle(), panelId }));
192
+ const dividerBool = user_derived(() => ["full", "pill"].includes(tabStyle()) ? false : divider());
193
+ createSingleSelectionContext();
194
+ const tabRegistry = proxy(new Map);
195
+ let selectedTab = state(proxy({}));
196
+ const updateSelection = useSingleSelection((v) => {
197
+ set(selectedTab, v ?? {}, true);
198
+ selected(v?.id);
199
+ });
200
+ user_effect(() => {
201
+ if (selected() && selected() !== get(selectedTab).id) {
202
+ const targetTab = tabRegistry.get(selected());
203
+ if (targetTab) {
204
+ updateSelection(true, targetTab);
205
+ }
206
+ }
207
+ });
208
+ user_effect(() => {
209
+ if (tabRegistry.size > 0 && !get(selectedTab).id) {
210
+ const targetTab = selected() ? tabRegistry.get(selected()) : tabRegistry.values().next().value;
211
+ if (targetTab) {
212
+ updateSelection(true, targetTab);
213
+ }
214
+ }
215
+ });
216
+ const registerFn = (tabData) => {
217
+ if (tabData.id) {
218
+ tabRegistry.set(tabData.id, tabData);
219
+ }
220
+ };
221
+ const unregisterFn = (tabId) => {
222
+ tabRegistry.delete(tabId);
223
+ };
224
+ setTabsContext({
225
+ get activeClasses() {
226
+ return get(activeClasses);
227
+ },
228
+ get ctx() {
229
+ return get(ctx);
230
+ },
231
+ registerTab: registerFn,
232
+ unregisterTab: unregisterFn
233
+ });
234
+ var fragment = root();
235
+ var ul = first_child(fragment);
236
+ attribute_effect(ul, ($0) => ({ role: "tablist", ...restProps, class: $0 }), [
237
+ () => get(base)({
238
+ class: clsx_default(get(theme)?.base, $$props.class ?? $$props.ulClass)
239
+ })
240
+ ]);
241
+ var node = child(ul);
242
+ snippet(node, () => $$props.children);
243
+ reset(ul);
244
+ var node_1 = sibling(ul, 2);
245
+ {
246
+ var consequent = ($$anchor2) => {
247
+ var div = root_1();
248
+ template_effect(($0) => set_class(div, 1, $0), [
249
+ () => clsx(get(dividerClass)({ class: clsx_default(get(theme)?.divider, $$props.classes?.divider) }))
250
+ ]);
251
+ append($$anchor2, div);
252
+ };
253
+ if_block(node_1, ($$render) => {
254
+ if (get(dividerBool))
255
+ $$render(consequent);
256
+ });
257
+ }
258
+ var div_1 = sibling(node_1, 2);
259
+ var node_2 = child(div_1);
260
+ snippet(node_2, () => get(selectedTab).snippet ?? noop);
261
+ reset(div_1);
262
+ template_effect(($0) => {
263
+ set_attribute(div_1, "id", panelId);
264
+ set_class(div_1, 1, $0);
265
+ set_attribute(div_1, "aria-labelledby", get(selectedTab).id);
266
+ }, [
267
+ () => clsx(get(content)({ class: clsx_default(get(theme)?.content, get(styling).content) }))
268
+ ]);
269
+ append($$anchor, fragment);
270
+ pop();
271
+ }
272
+
273
+ // node_modules/.bun/flowbite-svelte@1.33.1+c74efb4fcdd27e5c/node_modules/flowbite-svelte/dist/tabs/TabItem.svelte
274
+ var root2 = from_html(`<li><button type="button" role="tab"><!></button></li>`);
275
+ function TabItem($$anchor, $$props) {
276
+ const tabId = props_id();
277
+ push($$props, true);
278
+ let open = prop($$props, "open", 15, false), title = prop($$props, "title", 3, "Tab title"), restProps = rest_props($$props, [
279
+ "$$slots",
280
+ "$$events",
281
+ "$$legacy",
282
+ "children",
283
+ "titleSlot",
284
+ "open",
285
+ "title",
286
+ "key",
287
+ "activeClass",
288
+ "inactiveClass",
289
+ "class",
290
+ "classes",
291
+ "disabled",
292
+ "tabStyle"
293
+ ]);
294
+ const theme = user_derived(() => getTheme("tabItem"));
295
+ const tabsCtx = getTabsContext();
296
+ if (!tabsCtx) {
297
+ throw new Error("TabItem must be used within a Tabs component");
298
+ }
299
+ const activeClasses = tabsCtx.activeClasses;
300
+ const ctx = tabsCtx.ctx;
301
+ const compoTabStyle = user_derived(() => $$props.tabStyle ?? ctx.tabStyle ?? "full");
302
+ const $$d = user_derived(() => tabs({ tabStyle: get(compoTabStyle), hasDivider: true })), active = user_derived(() => get($$d).active), inactive = user_derived(() => get($$d).inactive);
303
+ const tabIdentifier = user_derived(() => $$props.key ?? tabId);
304
+ const self = user_derived(() => ({ id: get(tabIdentifier), snippet: $$props.children }));
305
+ const registerTab = tabsCtx.registerTab;
306
+ const unregisterTab = tabsCtx.unregisterTab;
307
+ const updateSingleSelection = useSingleSelection((value) => open(value?.id === get(self).id));
308
+ user_effect(() => {
309
+ updateSingleSelection(open(), get(self));
310
+ registerTab?.(get(self));
311
+ return () => {
312
+ if (get(self).id) {
313
+ unregisterTab?.(get(self).id);
314
+ }
315
+ };
316
+ });
317
+ const $$d_1 = user_derived(() => tabItem({ open: open(), disabled: $$props.disabled })), base = user_derived(() => get($$d_1).base), button = user_derived(() => get($$d_1).button);
318
+ var li = root2();
319
+ attribute_effect(li, ($0) => ({ ...restProps, class: $0, role: "presentation" }), [
320
+ () => get(base)({ class: clsx_default(get(theme)?.base, $$props.class) })
321
+ ]);
322
+ var button_1 = child(li);
323
+ var node = child(button_1);
324
+ {
325
+ var consequent = ($$anchor2) => {
326
+ var fragment = comment();
327
+ var node_1 = first_child(fragment);
328
+ snippet(node_1, () => $$props.titleSlot);
329
+ append($$anchor2, fragment);
330
+ };
331
+ var alternate = ($$anchor2) => {
332
+ var text3 = text();
333
+ template_effect(() => set_text(text3, title()));
334
+ append($$anchor2, text3);
335
+ };
336
+ if_block(node, ($$render) => {
337
+ if ($$props.titleSlot)
338
+ $$render(consequent);
339
+ else
340
+ $$render(alternate, -1);
341
+ });
342
+ }
343
+ reset(button_1);
344
+ reset(li);
345
+ template_effect(($0) => {
346
+ set_attribute(button_1, "id", get(self).id);
347
+ set_attribute(button_1, "aria-controls", ctx.panelId);
348
+ set_attribute(button_1, "aria-selected", open());
349
+ button_1.disabled = $$props.disabled;
350
+ set_class(button_1, 1, $0);
351
+ }, [
352
+ () => clsx(get(button)({
353
+ class: clsx_default(open() ? $$props.activeClass ?? get(active)({ class: activeClasses }) : $$props.inactiveClass ?? get(inactive)(), get(theme)?.button, $$props.classes?.button)
354
+ }))
355
+ ]);
356
+ delegated("click", button_1, () => open(true));
357
+ append($$anchor, li);
358
+ pop();
359
+ }
360
+ delegate(["click"]);
361
+
362
+ // src/components/svelte/input/Tabs.svelte
363
+ var root_5 = from_html(`<span class="slex-sr-only"> </span>`);
364
+ var root_3 = from_html(`<!> <!>`, 1);
365
+ var root_8 = from_html(`<div></div>`);
366
+ var root_12 = from_html(`<!> <span class="slex-tabs-selected-indicator" aria-hidden="true"></span>`, 1);
367
+ var root3 = from_html(`<div class="slex-tabs"><!></div>`);
368
+ function Tabs2($$anchor, $$props) {
369
+ push($$props, true);
370
+ let p = state(proxy({}));
371
+ let value = state(undefined);
372
+ let iconVersion = state(0);
373
+ const orientation = user_derived(() => text2(get(p).orientation, "horizontal"));
374
+ const items = user_derived(() => list(get(p).tabs));
375
+ const triggerClass = "slex-tabs-trigger";
376
+ user_effect(() => bindPropStore($$props.props, (next2) => {
377
+ set(p, next2, true);
378
+ set(value, next2.value, true);
379
+ }));
380
+ function choose(next2) {
381
+ set(value, next2, true);
382
+ emit($$props.ctx, "change", next2);
383
+ }
384
+ function requestIndicatorUpdate() {
385
+ set(iconVersion, get(iconVersion) + 1);
386
+ }
387
+ function isLayoutContent(value2) {
388
+ return !!value2 && typeof value2 === "object" && !Array.isArray(value2);
389
+ }
390
+ function renderTabPanel(node, item) {
391
+ function render(next2) {
392
+ node.replaceChildren();
393
+ if (isLayoutContent(next2.content)) {
394
+ $$props.ctx.renderTree(next2.content, node, $$props.ctx.forCtx);
395
+ return;
396
+ }
397
+ if (next2.content !== undefined && next2.content !== null) {
398
+ node.textContent = text2(next2.content);
399
+ }
400
+ }
401
+ render(item);
402
+ return {
403
+ update(next2) {
404
+ render(next2);
405
+ },
406
+ destroy() {
407
+ node.replaceChildren();
408
+ }
409
+ };
410
+ }
411
+ function annotateTabs(node) {
412
+ let raf;
413
+ let resizeObserver;
414
+ let indicatorReady = false;
415
+ function scheduleIndicatorUpdate(list3, selectedTrigger) {
416
+ if (raf !== undefined)
417
+ cancelAnimationFrame(raf);
418
+ raf = requestAnimationFrame(() => {
419
+ raf = undefined;
420
+ if (!selectedTrigger) {
421
+ list3.style.setProperty("--slex-tabs-indicator-opacity", "0");
422
+ return;
423
+ }
424
+ const listRect = list3.getBoundingClientRect();
425
+ const triggerRect = selectedTrigger.getBoundingClientRect();
426
+ const iconRect = selectedTrigger.querySelector(".slex-tabs-trigger-icon")?.getBoundingClientRect();
427
+ const vertical = get(orientation) === "vertical";
428
+ const indicatorStyle = getComputedStyle(list3);
429
+ const inlineInset = Number.parseFloat(indicatorStyle.getPropertyValue("--slex-tabs-indicator-inline-inset")) || 0;
430
+ const blockInset = Number.parseFloat(indicatorStyle.getPropertyValue("--slex-tabs-indicator-block-inset")) || 0;
431
+ const iconOnly = !!iconRect && selectedTrigger.classList.contains("slex-tabs-trigger--icon");
432
+ const targetRect = iconOnly && iconRect.width > 0 ? iconRect : triggerRect;
433
+ const width = vertical ? 2 : iconOnly ? Math.max(14, Math.min(22, targetRect.width + 2)) : Math.max(8, triggerRect.width - inlineInset * 2);
434
+ const height = vertical ? Math.max(8, triggerRect.height - blockInset * 2) : 2;
435
+ const targetCenterX = targetRect.left - listRect.left + targetRect.width / 2;
436
+ const targetCenterY = targetRect.top - listRect.top + targetRect.height / 2;
437
+ const x = vertical ? listRect.width - width : targetCenterX - width / 2;
438
+ const y = vertical ? targetCenterY - height / 2 : listRect.height - height;
439
+ list3.style.setProperty("--slex-tabs-indicator-width", `${Math.max(0, width)}px`);
440
+ list3.style.setProperty("--slex-tabs-indicator-height", `${Math.max(0, height)}px`);
441
+ list3.style.setProperty("--slex-tabs-indicator-x", `${Math.max(0, x)}px`);
442
+ list3.style.setProperty("--slex-tabs-indicator-y", `${Math.max(0, y)}px`);
443
+ list3.style.setProperty("--slex-tabs-indicator-opacity", "1");
444
+ if (!indicatorReady) {
445
+ indicatorReady = true;
446
+ requestAnimationFrame(() => {
447
+ list3.dataset.indicatorReady = "true";
448
+ });
449
+ }
450
+ });
451
+ }
452
+ function applyNow() {
453
+ const triggers = node.querySelectorAll(".slex-tabs-trigger");
454
+ const list3 = node.querySelector(".slex-tabs-list");
455
+ let selectedTrigger;
456
+ get(items).forEach((item, index2) => {
457
+ const trigger = triggers[index2];
458
+ if (!trigger)
459
+ return;
460
+ const itemValue = item.value ?? item.label;
461
+ const selected = text2(itemValue) === text2(get(value));
462
+ trigger.dataset.value = text2(itemValue);
463
+ trigger.toggleAttribute("data-selected", selected);
464
+ trigger.classList.toggle("slex-tabs-trigger--selected", selected);
465
+ trigger.setAttribute("aria-selected", String(selected));
466
+ if (selected)
467
+ selectedTrigger = trigger;
468
+ });
469
+ if (list3)
470
+ scheduleIndicatorUpdate(list3, selectedTrigger);
471
+ }
472
+ function apply() {
473
+ applyNow();
474
+ queueMicrotask(applyNow);
475
+ }
476
+ apply();
477
+ const list2 = node.querySelector(".slex-tabs-list");
478
+ if (list2 && "ResizeObserver" in window) {
479
+ resizeObserver = new ResizeObserver(apply);
480
+ resizeObserver.observe(list2);
481
+ }
482
+ return {
483
+ update() {
484
+ apply();
485
+ },
486
+ destroy() {
487
+ if (raf !== undefined)
488
+ cancelAnimationFrame(raf);
489
+ resizeObserver?.disconnect();
490
+ }
491
+ };
492
+ }
493
+ var div = root3();
494
+ var node_1 = child(div);
495
+ {
496
+ let $0 = user_derived(() => text2(get(value)));
497
+ Tabs(node_1, {
498
+ class: "slex-tabs-list",
499
+ tabStyle: "none",
500
+ divider: false,
501
+ get selected() {
502
+ return get($0);
503
+ },
504
+ get "aria-orientation"() {
505
+ return get(orientation);
506
+ },
507
+ classes: { content: "slex-tabs-content" },
508
+ children: ($$anchor2, $$slotProps) => {
509
+ var fragment = root_12();
510
+ var node_2 = first_child(fragment);
511
+ each(node_2, 17, () => get(items), index, ($$anchor3, item) => {
512
+ const itemValue = user_derived(() => get(item).value ?? get(item).label);
513
+ const selected = user_derived(() => text2(get(itemValue)) === text2(get(value)));
514
+ const hasIcon = user_derived(() => !!text2(get(item).icon));
515
+ const label = user_derived(() => text2(get(item).label ?? get(itemValue)));
516
+ const itemIconOnly = user_derived(() => !!get(item).iconOnly || get(hasIcon) && !get(item).label);
517
+ const iconClass = user_derived(() => get(itemIconOnly) ? "slex-tabs-trigger--icon" : get(hasIcon) ? "slex-tabs-trigger--with-icon" : "");
518
+ {
519
+ const titleSlot = ($$anchor4) => {
520
+ var fragment_2 = root_3();
521
+ var node_3 = first_child(fragment_2);
522
+ {
523
+ var consequent = ($$anchor5) => {
524
+ InlineIcon($$anchor5, {
525
+ get name() {
526
+ return get(item).icon;
527
+ },
528
+ get selected() {
529
+ return get(selected);
530
+ },
531
+ className: "slex-tabs-trigger-icon",
532
+ onIconLoad: requestIndicatorUpdate
533
+ });
534
+ };
535
+ if_block(node_3, ($$render) => {
536
+ if (get(hasIcon))
537
+ $$render(consequent);
538
+ });
539
+ }
540
+ var node_4 = sibling(node_3, 2);
541
+ {
542
+ var consequent_1 = ($$anchor5) => {
543
+ var span = root_5();
544
+ var text_1 = child(span, true);
545
+ reset(span);
546
+ template_effect(() => set_text(text_1, get(label)));
547
+ append($$anchor5, span);
548
+ };
549
+ var alternate = ($$anchor5) => {
550
+ var text_2 = text();
551
+ template_effect(() => set_text(text_2, get(label)));
552
+ append($$anchor5, text_2);
553
+ };
554
+ if_block(node_4, ($$render) => {
555
+ if (get(itemIconOnly))
556
+ $$render(consequent_1);
557
+ else
558
+ $$render(alternate, -1);
559
+ });
560
+ }
561
+ append($$anchor4, fragment_2);
562
+ };
563
+ let $02 = user_derived(() => text2(get(itemValue)));
564
+ let $1 = user_derived(() => !!get(item).disabled);
565
+ let $2 = user_derived(() => text2(get(itemValue)));
566
+ let $3 = user_derived(() => `${triggerClass} slex-tabs-trigger--selected ${get(iconClass)}`);
567
+ let $4 = user_derived(() => `${triggerClass} ${get(iconClass)}`);
568
+ let $5 = user_derived(() => ({ button: get(selected) ? "slex-tabs-trigger--selected" : "" }));
569
+ TabItem($$anchor3, {
570
+ get key() {
571
+ return get($02);
572
+ },
573
+ get open() {
574
+ return get(selected);
575
+ },
576
+ get disabled() {
577
+ return get($1);
578
+ },
579
+ get "data-value"() {
580
+ return get($2);
581
+ },
582
+ get activeClass() {
583
+ return get($3);
584
+ },
585
+ get inactiveClass() {
586
+ return get($4);
587
+ },
588
+ get classes() {
589
+ return get($5);
590
+ },
591
+ onclick: () => choose(get(itemValue)),
592
+ titleSlot,
593
+ children: ($$anchor4, $$slotProps2) => {
594
+ var fragment_5 = comment();
595
+ var node_5 = first_child(fragment_5);
596
+ {
597
+ var consequent_2 = ($$anchor5) => {
598
+ var div_1 = root_8();
599
+ action(div_1, ($$node, $$action_arg) => renderTabPanel?.($$node, $$action_arg), () => get(item));
600
+ append($$anchor5, div_1);
601
+ };
602
+ if_block(node_5, ($$render) => {
603
+ if (get(item).content)
604
+ $$render(consequent_2);
605
+ });
606
+ }
607
+ append($$anchor4, fragment_5);
608
+ },
609
+ $$slots: { titleSlot: true, default: true }
610
+ });
611
+ }
612
+ });
613
+ next(2);
614
+ append($$anchor2, fragment);
615
+ },
616
+ $$slots: { default: true }
617
+ });
618
+ }
619
+ reset(div);
620
+ action(div, ($$node, $$action_arg) => annotateTabs?.($$node, $$action_arg), () => ({
621
+ value: get(value),
622
+ items: get(items),
623
+ iconVersion: get(iconVersion)
624
+ }));
625
+ template_effect(() => set_attribute(div, "data-orientation", get(orientation)));
626
+ append($$anchor, div);
627
+ pop();
628
+ }
629
+
630
+ export { Tabs2 as Tabs };