@spaethtech/svelte-ui 0.1.10 → 0.3.1-dev.10.ff03a8d

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 (218) hide show
  1. package/.claude/skills/svelte-ui/SKILL.md +118 -0
  2. package/.claude/skills/themes/SKILL.md +303 -0
  3. package/CLAUDE.md +248 -0
  4. package/README.md +180 -42
  5. package/dist/components/Alert.svelte +119 -0
  6. package/dist/components/Alert.svelte.d.ts +29 -0
  7. package/dist/components/Badge/Badge.svelte +142 -69
  8. package/dist/components/Badge/Badge.svelte.d.ts +26 -6
  9. package/dist/components/Badge/index.d.ts +1 -1
  10. package/dist/components/Badge/index.js +1 -1
  11. package/dist/components/Banner.svelte +133 -0
  12. package/dist/components/Banner.svelte.d.ts +31 -0
  13. package/dist/components/Button.svelte +240 -0
  14. package/dist/components/Button.svelte.d.ts +33 -0
  15. package/dist/components/ButtonDropdown.svelte +145 -0
  16. package/dist/components/ButtonDropdown.svelte.d.ts +31 -0
  17. package/dist/components/Calendar.svelte +259 -0
  18. package/dist/components/Calendar.svelte.d.ts +27 -0
  19. package/dist/components/Card.svelte +79 -0
  20. package/dist/components/Card.svelte.d.ts +17 -0
  21. package/dist/components/CardBody.svelte +41 -0
  22. package/dist/components/CardBody.svelte.d.ts +17 -0
  23. package/dist/components/CardFooter.svelte +51 -0
  24. package/dist/components/CardFooter.svelte.d.ts +16 -0
  25. package/dist/components/CardHeader.svelte +51 -0
  26. package/dist/components/CardHeader.svelte.d.ts +16 -0
  27. package/dist/components/Checkbox.svelte +131 -0
  28. package/dist/components/Checkbox.svelte.d.ts +16 -0
  29. package/dist/components/ConfirmDialog.svelte +103 -0
  30. package/dist/components/ConfirmDialog.svelte.d.ts +33 -0
  31. package/dist/components/DataTable.svelte +518 -0
  32. package/dist/components/DataTable.svelte.d.ts +74 -0
  33. package/dist/components/DatePicker.svelte +312 -0
  34. package/dist/components/DatePicker.svelte.d.ts +32 -0
  35. package/dist/components/DateTimeInput.svelte +93 -0
  36. package/dist/components/DateTimeInput.svelte.d.ts +20 -0
  37. package/dist/components/Dialog.svelte +151 -0
  38. package/dist/components/Dialog.svelte.d.ts +30 -0
  39. package/dist/components/{EmailInput/EmailInput.svelte → EmailInput.svelte} +17 -8
  40. package/dist/components/EmailInput.svelte.d.ts +21 -0
  41. package/dist/components/Input.svelte +369 -0
  42. package/dist/components/Input.svelte.d.ts +35 -0
  43. package/dist/components/{List/List.svelte → List.svelte} +194 -133
  44. package/dist/components/{List/List.svelte.d.ts → List.svelte.d.ts} +9 -1
  45. package/dist/components/Menu.svelte +117 -0
  46. package/dist/components/Menu.svelte.d.ts +20 -0
  47. package/dist/components/NotesEditor.svelte +127 -0
  48. package/dist/components/NotesEditor.svelte.d.ts +17 -0
  49. package/dist/components/{NumberInput/NumberInput.svelte → NumberInput.svelte} +146 -105
  50. package/dist/components/{NumberInput/NumberInput.svelte.d.ts → NumberInput.svelte.d.ts} +11 -4
  51. package/dist/components/PasswordInput.svelte +52 -0
  52. package/dist/components/PasswordInput.svelte.d.ts +20 -0
  53. package/dist/components/Popup.svelte +140 -0
  54. package/dist/components/Popup.svelte.d.ts +31 -0
  55. package/dist/components/Query.svelte +284 -0
  56. package/dist/components/Query.svelte.d.ts +15 -0
  57. package/dist/components/{Rating/Rating.svelte → Rating.svelte} +19 -10
  58. package/dist/components/Rating.svelte.d.ts +13 -0
  59. package/dist/components/{SearchInput/SearchInput.svelte → SearchInput.svelte} +19 -8
  60. package/dist/components/{SearchInput/SearchInput.svelte.d.ts → SearchInput.svelte.d.ts} +9 -2
  61. package/dist/components/{Select/Select.svelte → Select.svelte} +48 -76
  62. package/dist/components/{Select/Select.svelte.d.ts → Select.svelte.d.ts} +11 -1
  63. package/dist/components/SideBarMenu/SideBarMenu.svelte +724 -0
  64. package/dist/components/SideBarMenu/SideBarMenu.svelte.d.ts +109 -0
  65. package/dist/components/SideBarMenu/index.d.ts +2 -0
  66. package/dist/components/SideBarMenu/index.js +1 -0
  67. package/dist/components/TabStrip/TabStrip.svelte +384 -0
  68. package/dist/components/TabStrip/TabStrip.svelte.d.ts +50 -0
  69. package/dist/components/TabStrip/index.d.ts +3 -0
  70. package/dist/components/TabStrip/index.js +2 -0
  71. package/dist/components/{TextArea/TextArea.svelte → TextArea.svelte} +143 -112
  72. package/dist/components/TextArea.svelte.d.ts +38 -0
  73. package/dist/components/ThemeSelector.svelte +81 -0
  74. package/dist/components/ThemeSelector.svelte.d.ts +10 -0
  75. package/dist/components/TimePicker.svelte +148 -0
  76. package/dist/components/TimePicker.svelte.d.ts +28 -0
  77. package/dist/components/TimeRangeInput.svelte +203 -0
  78. package/dist/components/TimeRangeInput.svelte.d.ts +29 -0
  79. package/dist/components/TimeSpinner.svelte +202 -0
  80. package/dist/components/TimeSpinner.svelte.d.ts +26 -0
  81. package/dist/components/Toast/Toaster.svelte +51 -0
  82. package/dist/components/Toast/Toaster.svelte.d.ts +12 -0
  83. package/dist/components/Toast/toast.svelte.d.ts +29 -0
  84. package/dist/components/Toast/toast.svelte.js +27 -0
  85. package/dist/components/Toggle.svelte +93 -0
  86. package/dist/components/Toggle.svelte.d.ts +15 -0
  87. package/dist/data/dataset.d.ts +42 -0
  88. package/dist/data/dataset.js +3 -0
  89. package/dist/data/index.d.ts +3 -0
  90. package/dist/data/index.js +3 -0
  91. package/dist/data/query/ast.d.ts +62 -0
  92. package/dist/data/query/ast.js +12 -0
  93. package/dist/data/query/index.d.ts +3 -0
  94. package/dist/data/query/index.js +3 -0
  95. package/dist/data/query/lexer.d.ts +33 -0
  96. package/dist/data/query/lexer.js +225 -0
  97. package/dist/data/query/parser.d.ts +11 -0
  98. package/dist/data/query/parser.js +252 -0
  99. package/dist/data/table/grid.svelte.d.ts +57 -0
  100. package/dist/data/table/grid.svelte.js +139 -0
  101. package/dist/data/table/index.d.ts +2 -0
  102. package/dist/data/table/index.js +2 -0
  103. package/dist/data/table/types.d.ts +79 -0
  104. package/dist/index.d.ts +49 -22
  105. package/dist/index.js +46 -21
  106. package/dist/positioning/anchored.d.ts +61 -0
  107. package/dist/positioning/anchored.js +122 -0
  108. package/dist/positioning/tooltip.d.ts +41 -0
  109. package/dist/positioning/tooltip.js +147 -0
  110. package/dist/theme.css +205 -0
  111. package/dist/types/breakpoints.d.ts +24 -0
  112. package/dist/types/breakpoints.js +13 -0
  113. package/dist/types/responsive.d.ts +32 -0
  114. package/dist/types/responsive.js +54 -0
  115. package/dist/types/sizes.d.ts +10 -3
  116. package/dist/types/time.d.ts +19 -0
  117. package/dist/types/time.js +10 -0
  118. package/dist/types/variants.d.ts +8 -1
  119. package/dist/types/variants.js +16 -1
  120. package/docs/components.md +255 -0
  121. package/docs/examples.md +323 -0
  122. package/docs/paradigm.md +240 -0
  123. package/docs/themes.md +170 -0
  124. package/docs/usage.md +450 -0
  125. package/package.json +97 -63
  126. package/dist/components/Button/Button.svelte +0 -172
  127. package/dist/components/Button/Button.svelte.d.ts +0 -32
  128. package/dist/components/Button/index.d.ts +0 -1
  129. package/dist/components/Button/index.js +0 -1
  130. package/dist/components/Dialog/Dialog.svelte +0 -101
  131. package/dist/components/Dialog/Dialog.svelte.d.ts +0 -18
  132. package/dist/components/Dialog/index.d.ts +0 -1
  133. package/dist/components/Dialog/index.js +0 -1
  134. package/dist/components/ElementManager/ElementManager.svelte +0 -397
  135. package/dist/components/ElementManager/ElementManager.svelte.d.ts +0 -43
  136. package/dist/components/ElementManager/index.d.ts +0 -1
  137. package/dist/components/ElementManager/index.js +0 -1
  138. package/dist/components/EmailInput/EmailInput.svelte.d.ts +0 -14
  139. package/dist/components/EmailInput/index.d.ts +0 -1
  140. package/dist/components/EmailInput/index.js +0 -1
  141. package/dist/components/Icon/Icon.svelte +0 -74
  142. package/dist/components/Icon/Icon.svelte.d.ts +0 -13
  143. package/dist/components/Icon/index.d.ts +0 -1
  144. package/dist/components/Icon/index.js +0 -1
  145. package/dist/components/Input/Input.svelte +0 -268
  146. package/dist/components/Input/Input.svelte.d.ts +0 -18
  147. package/dist/components/Input/index.d.ts +0 -1
  148. package/dist/components/Input/index.js +0 -1
  149. package/dist/components/List/index.d.ts +0 -1
  150. package/dist/components/List/index.js +0 -1
  151. package/dist/components/ListItem/ListItem.svelte +0 -175
  152. package/dist/components/ListItem/ListItem.svelte.d.ts +0 -24
  153. package/dist/components/ListItem/index.d.ts +0 -2
  154. package/dist/components/ListItem/index.js +0 -2
  155. package/dist/components/ListView/ListView.svelte +0 -463
  156. package/dist/components/ListView/ListView.svelte.d.ts +0 -37
  157. package/dist/components/ListView/index.d.ts +0 -2
  158. package/dist/components/ListView/index.js +0 -2
  159. package/dist/components/NodeGraph/BaseNode.d.ts +0 -57
  160. package/dist/components/NodeGraph/BaseNode.js +0 -30
  161. package/dist/components/NodeGraph/Edge.svelte +0 -60
  162. package/dist/components/NodeGraph/Edge.svelte.d.ts +0 -16
  163. package/dist/components/NodeGraph/ExpressionEvaluator.d.ts +0 -82
  164. package/dist/components/NodeGraph/ExpressionEvaluator.js +0 -152
  165. package/dist/components/NodeGraph/Node.svelte +0 -100
  166. package/dist/components/NodeGraph/Node.svelte.d.ts +0 -10
  167. package/dist/components/NodeGraph/NodeGraph.svelte +0 -52
  168. package/dist/components/NodeGraph/NodeGraph.svelte.d.ts +0 -14
  169. package/dist/components/NodeGraph/NodeInstance.svelte.d.ts +0 -80
  170. package/dist/components/NodeGraph/NodeInstance.svelte.js +0 -241
  171. package/dist/components/NodeGraph/NodePort.svelte +0 -75
  172. package/dist/components/NodeGraph/NodePort.svelte.d.ts +0 -11
  173. package/dist/components/NodeGraph/decorators.d.ts +0 -81
  174. package/dist/components/NodeGraph/decorators.js +0 -148
  175. package/dist/components/NodeGraph/index.d.ts +0 -9
  176. package/dist/components/NodeGraph/index.js +0 -9
  177. package/dist/components/NodeGraph/types.d.ts +0 -94
  178. package/dist/components/NodeGraph/types.js +0 -33
  179. package/dist/components/NotesEditor/NotesEditor.svelte +0 -203
  180. package/dist/components/NotesEditor/NotesEditor.svelte.d.ts +0 -9
  181. package/dist/components/NotesEditor/index.d.ts +0 -1
  182. package/dist/components/NotesEditor/index.js +0 -1
  183. package/dist/components/NumberInput/index.d.ts +0 -1
  184. package/dist/components/NumberInput/index.js +0 -1
  185. package/dist/components/PasswordInput/PasswordInput.svelte +0 -41
  186. package/dist/components/PasswordInput/PasswordInput.svelte.d.ts +0 -13
  187. package/dist/components/PasswordInput/index.d.ts +0 -1
  188. package/dist/components/PasswordInput/index.js +0 -1
  189. package/dist/components/Popup/index.d.ts +0 -1
  190. package/dist/components/Popup/index.js +0 -1
  191. package/dist/components/Rating/Rating.svelte.d.ts +0 -7
  192. package/dist/components/Rating/index.d.ts +0 -1
  193. package/dist/components/Rating/index.js +0 -1
  194. package/dist/components/ScrollView/ScrollView.svelte +0 -285
  195. package/dist/components/ScrollView/ScrollView.svelte.d.ts +0 -19
  196. package/dist/components/ScrollView/index.d.ts +0 -1
  197. package/dist/components/ScrollView/index.js +0 -1
  198. package/dist/components/SearchInput/index.d.ts +0 -1
  199. package/dist/components/SearchInput/index.js +0 -1
  200. package/dist/components/Select/index.d.ts +0 -1
  201. package/dist/components/Select/index.js +0 -1
  202. package/dist/components/TextArea/TextArea.svelte.d.ts +0 -19
  203. package/dist/components/TextArea/index.d.ts +0 -1
  204. package/dist/components/TextArea/index.js +0 -1
  205. package/dist/components/ThemeSelector/ThemeSelector.svelte +0 -64
  206. package/dist/components/ThemeSelector/ThemeSelector.svelte.d.ts +0 -3
  207. package/dist/components/ThemeSelector/index.d.ts +0 -1
  208. package/dist/components/ThemeSelector/index.js +0 -1
  209. package/dist/components/TooltipHandler/TooltipHandler.svelte +0 -593
  210. package/dist/components/TooltipHandler/TooltipHandler.svelte.d.ts +0 -10
  211. package/dist/components/TooltipHandler/index.d.ts +0 -1
  212. package/dist/components/TooltipHandler/index.js +0 -1
  213. package/dist/styles/sizes.d.ts +0 -78
  214. package/dist/styles/sizes.js +0 -120
  215. package/dist/styles/variants.d.ts +0 -106
  216. package/dist/styles/variants.js +0 -194
  217. package/dist/types/ManagerTypes.d.ts +0 -42
  218. /package/dist/{types/ManagerTypes.js → data/table/types.js} +0 -0
package/package.json CHANGED
@@ -1,65 +1,99 @@
1
1
  {
2
- "name": "@spaethtech/svelte-ui",
3
- "version": "0.1.10",
4
- "scripts": {
5
- "dev": "vite dev",
6
- "build": "vite build && npm run package",
7
- "package": "svelte-kit sync && svelte-package && publint",
8
- "preview": "vite preview",
9
- "prepare": "svelte-kit sync || echo ''",
10
- "prepack": "svelte-kit sync && svelte-package && publint",
11
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
13
- "test": "playwright test",
14
- "test:ui": "playwright test --ui",
15
- "test:headed": "playwright test --headed",
16
- "test:debug": "playwright test --debug"
17
- },
18
- "files": [
19
- "dist",
20
- "!dist/**/*.test.*",
21
- "!dist/**/*.spec.*"
22
- ],
23
- "sideEffects": [
24
- "**/*.css"
25
- ],
26
- "svelte": "./dist/index.js",
27
- "types": "./dist/index.d.ts",
28
- "type": "module",
29
- "exports": {
30
- ".": {
31
- "types": "./dist/index.d.ts",
32
- "svelte": "./dist/index.js"
33
- }
34
- },
35
- "peerDependencies": {
36
- "@fortawesome/fontawesome-svg-core": "^6.7.0",
37
- "@fortawesome/free-solid-svg-icons": "^6.7.0",
38
- "svelte": "^5.0.0",
39
- "tailwindcss": "^4.0.0"
40
- },
41
- "devDependencies": {
42
- "@fortawesome/fontawesome-svg-core": "^6.7.2",
43
- "@fortawesome/free-solid-svg-icons": "^6.7.2",
44
- "@playwright/test": "^1.54.2",
45
- "@sveltejs/adapter-auto": "^6.0.0",
46
- "@sveltejs/kit": "^2.22.0",
47
- "@sveltejs/package": "^2.0.0",
48
- "@sveltejs/vite-plugin-svelte": "^6.0.0",
49
- "@tailwindcss/vite": "^4.1.11",
50
- "@types/node": "^24.7.1",
51
- "publint": "^0.3.2",
52
- "svelte": "^5.0.0",
53
- "svelte-check": "^4.0.0",
54
- "tailwindcss": "^4.1.11",
55
- "typescript": "^5.0.0",
56
- "vite": "^7.0.4",
57
- "vite-plugin-devtools-json": "^1.0.0"
58
- },
59
- "keywords": [
60
- "svelte"
61
- ],
62
- "description": "Reusable Svelte 5 UI components with Tailwind CSS styling",
63
- "author": "",
64
- "license": "ISC"
2
+ "name": "@spaethtech/svelte-ui",
3
+ "version": "0.3.1-dev.10.ff03a8d",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "git+https://github.com/spaethtech/svelte-ui.git"
7
+ },
8
+ "bugs": {
9
+ "url": "https://github.com/spaethtech/svelte-ui/issues"
10
+ },
11
+ "homepage": "https://github.com/spaethtech/svelte-ui#readme",
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "scripts": {
16
+ "dev": "vite dev",
17
+ "build": "vite build && npm run package",
18
+ "package": "svelte-kit sync && svelte-package && publint",
19
+ "package:watch": "svelte-package --watch",
20
+ "dev:linked": "svelte-kit sync && (npm run package:watch & npm run dev)",
21
+ "preview": "vite preview",
22
+ "prepare": "svelte-kit sync || echo ''",
23
+ "prepack": "svelte-kit sync && svelte-package && publint",
24
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
25
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
26
+ "format": "prettier --write .",
27
+ "format:check": "prettier --check .",
28
+ "test": "playwright test",
29
+ "test:ui": "playwright test --ui",
30
+ "test:headed": "playwright test --headed",
31
+ "test:debug": "playwright test --debug"
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "!dist/**/*.test.*",
36
+ "!dist/**/*.spec.*",
37
+ "CLAUDE.md",
38
+ "docs",
39
+ ".claude/skills/themes",
40
+ ".claude/skills/svelte-ui"
41
+ ],
42
+ "sideEffects": [
43
+ "**/*.css"
44
+ ],
45
+ "svelte": "./dist/index.js",
46
+ "types": "./dist/index.d.ts",
47
+ "type": "module",
48
+ "exports": {
49
+ ".": {
50
+ "types": "./dist/index.d.ts",
51
+ "svelte": "./dist/index.js"
52
+ },
53
+ "./data": {
54
+ "types": "./dist/data/index.d.ts",
55
+ "svelte": "./dist/data/index.js",
56
+ "default": "./dist/data/index.js"
57
+ },
58
+ "./theme.css": "./dist/theme.css"
59
+ },
60
+ "peerDependencies": {
61
+ "@iconify-json/mdi": "^1.2.3",
62
+ "svelte": "^5.0.0",
63
+ "tailwindcss": "^4.0.0",
64
+ "unplugin-icons": "^23.0.1"
65
+ },
66
+ "peerDependenciesMeta": {
67
+ "@iconify-json/mdi": {
68
+ "optional": false
69
+ },
70
+ "unplugin-icons": {
71
+ "optional": false
72
+ }
73
+ },
74
+ "devDependencies": {
75
+ "@iconify-json/mdi": "^1.2.3",
76
+ "@playwright/test": "^1.54.2",
77
+ "@sveltejs/adapter-auto": "^6.0.0",
78
+ "@sveltejs/kit": "^2.22.0",
79
+ "@sveltejs/package": "^2.0.0",
80
+ "@sveltejs/vite-plugin-svelte": "^6.0.0",
81
+ "@tailwindcss/vite": "^4.1.11",
82
+ "prettier": "^3.9.4",
83
+ "prettier-plugin-svelte": "^4.1.1",
84
+ "publint": "^0.3.2",
85
+ "svelte": "^5",
86
+ "svelte-check": "^4.0.0",
87
+ "tailwindcss": "^4.1.11",
88
+ "typescript": "^5.0.0",
89
+ "unplugin-icons": "^23.0.1",
90
+ "vite": "^7.0.4",
91
+ "vite-plugin-devtools-json": "^1.0.0"
92
+ },
93
+ "keywords": [
94
+ "svelte"
95
+ ],
96
+ "description": "Reusable Svelte 5 UI components with Tailwind CSS styling",
97
+ "author": "",
98
+ "license": "ISC"
65
99
  }
@@ -1,172 +0,0 @@
1
- <script lang="ts">
2
- import Icon from "../Icon/Icon.svelte";
3
- import type { IconDefinition } from "@fortawesome/free-solid-svg-icons";
4
- import type { Snippet } from "svelte";
5
- import type { Variant } from "../../types/variants.js";
6
- import type { Size } from "../../types/sizes.js";
7
- import {
8
- getVariantClasses,
9
- getVariantStyles,
10
- } from "../../styles/variants.js";
11
- import {
12
- buttonSizeClasses,
13
- getComponentHeight,
14
- } from "../../styles/sizes.js";
15
- import { DEV } from "esm-env";
16
-
17
- interface BaseProps {
18
- icon?: IconDefinition;
19
- text?: string;
20
- variant?: Variant;
21
- size?: Size;
22
- iconPosition?: "left" | "right";
23
- children?: Snippet;
24
- class?: string;
25
- title?: string;
26
- onclick?: (event: MouseEvent) => void;
27
- onmouseenter?: (event: MouseEvent) => void;
28
- onmouseleave?: (event: MouseEvent) => void;
29
- element?: HTMLButtonElement | HTMLAnchorElement;
30
- }
31
-
32
- interface ButtonProps extends BaseProps {
33
- href?: never;
34
- type?: "button" | "submit" | "reset";
35
- disabled?: boolean;
36
- }
37
-
38
- interface AnchorProps extends BaseProps {
39
- href: string;
40
- type?: never;
41
- disabled?: never;
42
- }
43
-
44
- export type Props = ButtonProps | AnchorProps;
45
-
46
- let {
47
- icon,
48
- text,
49
- variant = "secondary",
50
- size = "md",
51
- iconPosition = "left",
52
- children,
53
- disabled = false,
54
- type = "button",
55
- href,
56
- class: additionalClass = "",
57
- title,
58
- onclick,
59
- onmouseenter,
60
- onmouseleave,
61
- element = $bindable(),
62
- ...restProps
63
- }: Props = $props();
64
-
65
- // Development warnings for prop conflicts and empty content
66
- if (DEV) {
67
- if ((text || icon) && children) {
68
- console.warn(
69
- "Button: Props (text/icon) and children provided. Using props, ignoring children.",
70
- );
71
- }
72
- if (!text && !icon && !children) {
73
- console.warn(
74
- "Button: No content provided (text, icon, or children). Button will be empty.",
75
- );
76
- }
77
- }
78
-
79
- // Determine content mode and styling
80
- const hasProps = !!(text || icon);
81
- const isIconOnly = icon && !text;
82
-
83
- // Base classes - height is always h-8 (32px), width is h-8 for icon-only
84
- const baseClasses =
85
- "inline-flex items-center justify-center h-8 rounded-md text-sm font-medium transition-colors no-underline cursor-pointer focus-visible:[outline:2px_solid_color-mix(in_srgb,var(--color-text)_70%,transparent)] focus-visible:[outline-offset:0px]";
86
-
87
- // Additional classes for disabled state (only applies to buttons)
88
- const disabledClasses = href
89
- ? ""
90
- : "disabled:opacity-50 disabled:cursor-not-allowed";
91
-
92
- // Size classes - width and padding depend on content
93
- const sizeClasses = isIconOnly ? "w-8" : "px-4 py-2";
94
-
95
- // Ghost variant uses outline (doesn't affect layout) instead of border
96
- // Other variants don't need borders since they have solid backgrounds
97
-
98
- // Build final classes - reactive to variant changes
99
- const buttonClasses = $derived(
100
- [
101
- baseClasses,
102
- sizeClasses,
103
- getVariantClasses(variant, { includeBorder: true }),
104
- disabledClasses,
105
- additionalClass,
106
- ]
107
- .filter(Boolean)
108
- .join(" "),
109
- );
110
-
111
- // Get text and icon adjustments from variant styles
112
- const textAdjustment = $derived(getVariantStyles(variant).textAdjustment);
113
- const iconAdjustment = $derived(getVariantStyles(variant).iconAdjustment);
114
- </script>
115
-
116
- {#if href}
117
- <a
118
- bind:this={element}
119
- {href}
120
- {title}
121
- {onclick}
122
- {onmouseenter}
123
- {onmouseleave}
124
- class={buttonClasses}
125
- {...restProps}
126
- >
127
- <div class="flex items-center justify-center gap-2 select-none">
128
- {#if hasProps}
129
- {#if iconPosition === "left" && icon}
130
- <span class={iconAdjustment}><Icon {icon} /></span>
131
- {/if}
132
- {#if text}
133
- <span class={textAdjustment}>{text}</span>
134
- {/if}
135
- {#if iconPosition === "right" && icon}
136
- <span class={iconAdjustment}><Icon {icon} /></span>
137
- {/if}
138
- {:else if children}
139
- {@render children()}
140
- {/if}
141
- </div>
142
- </a>
143
- {:else}
144
- <button
145
- bind:this={element}
146
- {type}
147
- {disabled}
148
- aria-disabled={disabled}
149
- {title}
150
- {onclick}
151
- {onmouseenter}
152
- {onmouseleave}
153
- class={buttonClasses}
154
- {...restProps}
155
- >
156
- <div class="flex items-center justify-center gap-2 select-none">
157
- {#if hasProps}
158
- {#if iconPosition === "left" && icon}
159
- <span class={iconAdjustment}><Icon {icon} /></span>
160
- {/if}
161
- {#if text}
162
- <span class={textAdjustment}>{text}</span>
163
- {/if}
164
- {#if iconPosition === "right" && icon}
165
- <span class={iconAdjustment}><Icon {icon} /></span>
166
- {/if}
167
- {:else if children}
168
- {@render children()}
169
- {/if}
170
- </div>
171
- </button>
172
- {/if}
@@ -1,32 +0,0 @@
1
- import type { IconDefinition } from "@fortawesome/free-solid-svg-icons";
2
- import type { Snippet } from "svelte";
3
- import type { Variant } from "../../types/variants.js";
4
- import type { Size } from "../../types/sizes.js";
5
- interface BaseProps {
6
- icon?: IconDefinition;
7
- text?: string;
8
- variant?: Variant;
9
- size?: Size;
10
- iconPosition?: "left" | "right";
11
- children?: Snippet;
12
- class?: string;
13
- title?: string;
14
- onclick?: (event: MouseEvent) => void;
15
- onmouseenter?: (event: MouseEvent) => void;
16
- onmouseleave?: (event: MouseEvent) => void;
17
- element?: HTMLButtonElement | HTMLAnchorElement;
18
- }
19
- interface ButtonProps extends BaseProps {
20
- href?: never;
21
- type?: "button" | "submit" | "reset";
22
- disabled?: boolean;
23
- }
24
- interface AnchorProps extends BaseProps {
25
- href: string;
26
- type?: never;
27
- disabled?: never;
28
- }
29
- export type Props = ButtonProps | AnchorProps;
30
- declare const Button: import("svelte").Component<Props, {}, "element">;
31
- type Button = ReturnType<typeof Button>;
32
- export default Button;
@@ -1 +0,0 @@
1
- export { default } from './Button.svelte';
@@ -1 +0,0 @@
1
- export { default } from './Button.svelte';
@@ -1,101 +0,0 @@
1
- <script lang="ts">
2
- import Button from '../Button/Button.svelte';
3
- import type { Snippet } from 'svelte';
4
- import type { Variant } from '../../types/variants.js';
5
-
6
- interface Props {
7
- isOpen: boolean;
8
- title?: string;
9
- message?: string;
10
- confirmText?: string;
11
- cancelText?: string;
12
- onConfirm?: () => void;
13
- onCancel?: () => void;
14
- variant?: Variant;
15
- showConfirm?: boolean;
16
- showCancel?: boolean;
17
- children?: Snippet;
18
- }
19
-
20
- let {
21
- isOpen = $bindable(),
22
- title = "Dialog",
23
- message,
24
- confirmText = "Confirm",
25
- cancelText = "Cancel",
26
- onConfirm,
27
- onCancel,
28
- variant = "primary",
29
- showConfirm = true,
30
- showCancel = true,
31
- children
32
- }: Props = $props();
33
-
34
- function handleConfirm() {
35
- if (onConfirm) onConfirm();
36
- isOpen = false;
37
- }
38
-
39
- function handleCancel() {
40
- if (onCancel) onCancel();
41
- isOpen = false;
42
- }
43
-
44
- function handleBackdropClick(event: MouseEvent) {
45
- if (event.target === event.currentTarget) {
46
- handleCancel();
47
- }
48
- }
49
-
50
- function handleKeydown(event: KeyboardEvent) {
51
- if (event.key === 'Escape') {
52
- handleCancel();
53
- }
54
- }
55
- </script>
56
-
57
- <svelte:window on:keydown={handleKeydown} />
58
-
59
- {#if isOpen}
60
- <div
61
- class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-[9999]"
62
- onclick={handleBackdropClick}
63
- onkeydown={handleKeydown}
64
- role="dialog"
65
- aria-modal="true"
66
- tabindex="-1"
67
- >
68
- <div class="[background-color:var(--color-background)] rounded-lg shadow-xl max-w-md w-full mx-4 z-[10000]" style="padding: calc(var(--ui-padding) * 2);">
69
- <h3 class="text-lg font-medium [color:var(--color-text)]" style="margin-bottom: calc(var(--ui-padding) * 1.5);">
70
- {title}
71
- </h3>
72
-
73
- {#if children}
74
- {@render children()}
75
- {:else if message}
76
- <p class="text-sm [color:var(--color-secondary)]">
77
- {message}
78
- </p>
79
- {/if}
80
-
81
- {#if showConfirm || showCancel}
82
- <div class="flex gap-3 justify-end" style="margin-top: calc(var(--ui-padding) * 1.5);">
83
- {#if showCancel}
84
- <Button
85
- text={cancelText}
86
- onclick={handleCancel}
87
- variant="secondary"
88
- />
89
- {/if}
90
- {#if showConfirm}
91
- <Button
92
- text={confirmText}
93
- onclick={handleConfirm}
94
- variant={variant}
95
- />
96
- {/if}
97
- </div>
98
- {/if}
99
- </div>
100
- </div>
101
- {/if}
@@ -1,18 +0,0 @@
1
- import type { Snippet } from 'svelte';
2
- import type { Variant } from '../../types/variants.js';
3
- interface Props {
4
- isOpen: boolean;
5
- title?: string;
6
- message?: string;
7
- confirmText?: string;
8
- cancelText?: string;
9
- onConfirm?: () => void;
10
- onCancel?: () => void;
11
- variant?: Variant;
12
- showConfirm?: boolean;
13
- showCancel?: boolean;
14
- children?: Snippet;
15
- }
16
- declare const Dialog: import("svelte").Component<Props, {}, "isOpen">;
17
- type Dialog = ReturnType<typeof Dialog>;
18
- export default Dialog;
@@ -1 +0,0 @@
1
- export { default } from './Dialog.svelte';
@@ -1 +0,0 @@
1
- export { default } from './Dialog.svelte';