@lanrenbang/basecoat-ultra-svelte 0.1.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 (88) hide show
  1. package/dist/components/Accordion.svelte +64 -0
  2. package/dist/components/Accordion.svelte.d.ts +14 -0
  3. package/dist/components/Alert.svelte +51 -0
  4. package/dist/components/Alert.svelte.d.ts +12 -0
  5. package/dist/components/Avatar.svelte +57 -0
  6. package/dist/components/Avatar.svelte.d.ts +13 -0
  7. package/dist/components/Badge.svelte +30 -0
  8. package/dist/components/Badge.svelte.d.ts +10 -0
  9. package/dist/components/Breadcrumb.svelte +54 -0
  10. package/dist/components/Breadcrumb.svelte.d.ts +14 -0
  11. package/dist/components/Button.svelte +38 -0
  12. package/dist/components/Button.svelte.d.ts +12 -0
  13. package/dist/components/ButtonGroup.svelte +26 -0
  14. package/dist/components/ButtonGroup.svelte.d.ts +10 -0
  15. package/dist/components/Card.svelte +67 -0
  16. package/dist/components/Card.svelte.d.ts +13 -0
  17. package/dist/components/Carousel.svelte +142 -0
  18. package/dist/components/Carousel.svelte.d.ts +11 -0
  19. package/dist/components/CatppuccinThemeSwitcher.svelte +132 -0
  20. package/dist/components/CatppuccinThemeSwitcher.svelte.d.ts +3 -0
  21. package/dist/components/Checkbox.svelte +20 -0
  22. package/dist/components/Checkbox.svelte.d.ts +8 -0
  23. package/dist/components/Collapsible.svelte +39 -0
  24. package/dist/components/Collapsible.svelte.d.ts +13 -0
  25. package/dist/components/Command.svelte +78 -0
  26. package/dist/components/Command.svelte.d.ts +12 -0
  27. package/dist/components/DatePicker.svelte +172 -0
  28. package/dist/components/DatePicker.svelte.d.ts +13 -0
  29. package/dist/components/Dialog.svelte +91 -0
  30. package/dist/components/Dialog.svelte.d.ts +14 -0
  31. package/dist/components/Drawer.svelte +127 -0
  32. package/dist/components/Drawer.svelte.d.ts +12 -0
  33. package/dist/components/DropdownMenu.svelte +62 -0
  34. package/dist/components/DropdownMenu.svelte.d.ts +14 -0
  35. package/dist/components/Empty.svelte +58 -0
  36. package/dist/components/Empty.svelte.d.ts +12 -0
  37. package/dist/components/Input.svelte +22 -0
  38. package/dist/components/Input.svelte.d.ts +9 -0
  39. package/dist/components/InputOTP.svelte +189 -0
  40. package/dist/components/InputOTP.svelte.d.ts +12 -0
  41. package/dist/components/Item.svelte +64 -0
  42. package/dist/components/Item.svelte.d.ts +14 -0
  43. package/dist/components/Kbd.svelte +28 -0
  44. package/dist/components/Kbd.svelte.d.ts +9 -0
  45. package/dist/components/Label.svelte +30 -0
  46. package/dist/components/Label.svelte.d.ts +10 -0
  47. package/dist/components/Pagination.svelte +120 -0
  48. package/dist/components/Pagination.svelte.d.ts +35 -0
  49. package/dist/components/Popover.svelte +68 -0
  50. package/dist/components/Popover.svelte.d.ts +16 -0
  51. package/dist/components/Progress.svelte +26 -0
  52. package/dist/components/Progress.svelte.d.ts +9 -0
  53. package/dist/components/Radio.svelte +22 -0
  54. package/dist/components/Radio.svelte.d.ts +9 -0
  55. package/dist/components/Resizable.svelte +66 -0
  56. package/dist/components/Resizable.svelte.d.ts +13 -0
  57. package/dist/components/Select.svelte +183 -0
  58. package/dist/components/Select.svelte.d.ts +16 -0
  59. package/dist/components/Separator.svelte +19 -0
  60. package/dist/components/Separator.svelte.d.ts +8 -0
  61. package/dist/components/Sheet.svelte +182 -0
  62. package/dist/components/Sheet.svelte.d.ts +13 -0
  63. package/dist/components/Skeleton.svelte +27 -0
  64. package/dist/components/Skeleton.svelte.d.ts +8 -0
  65. package/dist/components/Slider.svelte +38 -0
  66. package/dist/components/Slider.svelte.d.ts +11 -0
  67. package/dist/components/Spinner.svelte +28 -0
  68. package/dist/components/Spinner.svelte.d.ts +8 -0
  69. package/dist/components/Switch.svelte +20 -0
  70. package/dist/components/Switch.svelte.d.ts +8 -0
  71. package/dist/components/Table.svelte +61 -0
  72. package/dist/components/Table.svelte.d.ts +13 -0
  73. package/dist/components/Tabs.svelte +97 -0
  74. package/dist/components/Tabs.svelte.d.ts +15 -0
  75. package/dist/components/Textarea.svelte +22 -0
  76. package/dist/components/Textarea.svelte.d.ts +9 -0
  77. package/dist/components/Toast.svelte +73 -0
  78. package/dist/components/Toast.svelte.d.ts +3 -0
  79. package/dist/components/Toggle.svelte +69 -0
  80. package/dist/components/Toggle.svelte.d.ts +13 -0
  81. package/dist/components/ToggleGroup.svelte +69 -0
  82. package/dist/components/ToggleGroup.svelte.d.ts +12 -0
  83. package/dist/components/Tooltip.svelte +32 -0
  84. package/dist/components/Tooltip.svelte.d.ts +11 -0
  85. package/dist/index.d.ts +42 -0
  86. package/dist/index.js +47 -0
  87. package/dist/reference.css +2 -0
  88. package/package.json +70 -0
@@ -0,0 +1,69 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { getContext } from 'svelte';
4
+
5
+ let {
6
+ children,
7
+ pressed = $bindable(false),
8
+ value = '',
9
+ variant = 'outline',
10
+ size = 'md',
11
+ class: className = '',
12
+ ...rest
13
+ }: {
14
+ children?: Snippet;
15
+ pressed?: boolean;
16
+ value?: string;
17
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive';
18
+ size?: 'sm' | 'md' | 'lg' | 'icon';
19
+ class?: string;
20
+ [key: string]: any;
21
+ } = $props();
22
+
23
+ // Check if we're inside a ToggleGroup
24
+ const groupContext = getContext<{
25
+ handleToggle: (value: string) => void;
26
+ isPressed: (value: string) => boolean;
27
+ getType: () => 'single' | 'multiple';
28
+ } | undefined>('toggle-group');
29
+
30
+ const isInGroup = !!groupContext;
31
+
32
+ // Determine pressed state - from group context or local state
33
+ const isPressed = $derived(
34
+ isInGroup && value ? groupContext!.isPressed(value) : pressed
35
+ );
36
+
37
+ function handleClick() {
38
+ if (isInGroup && value) {
39
+ groupContext!.handleToggle(value);
40
+ } else {
41
+ pressed = !pressed;
42
+ }
43
+ }
44
+
45
+ const baseClass = 'btn toggle';
46
+ const finalClass = $derived([
47
+ baseClass,
48
+ variant !== 'primary' ? `btn-${variant}` : '',
49
+ size !== 'md' ? `btn-${size}` : '',
50
+ className
51
+ ].filter(Boolean).join(' '));
52
+ </script>
53
+
54
+ <button
55
+ type="button"
56
+ class={finalClass}
57
+ aria-pressed={isPressed}
58
+ data-value={value || undefined}
59
+ onclick={handleClick}
60
+ {...rest}
61
+ >
62
+ {@render children?.()}
63
+ </button>
64
+
65
+ <style>
66
+ @import "../../../../ultra/src/css/parts/components/button.css";
67
+ @import "../../../../ultra/src/css/parts/custom/toggle-group.css";
68
+ @reference "../reference.css";
69
+ </style>
@@ -0,0 +1,13 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ pressed?: boolean;
5
+ value?: string;
6
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive';
7
+ size?: 'sm' | 'md' | 'lg' | 'icon';
8
+ class?: string;
9
+ [key: string]: any;
10
+ };
11
+ declare const Toggle: import("svelte").Component<$$ComponentProps, {}, "pressed">;
12
+ type Toggle = ReturnType<typeof Toggle>;
13
+ export default Toggle;
@@ -0,0 +1,69 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { setContext } from 'svelte';
4
+
5
+ let {
6
+ children,
7
+ type = 'single',
8
+ value = $bindable<string | string[] | null>(null),
9
+ variant = 'default',
10
+ class: className = '',
11
+ ...rest
12
+ }: {
13
+ children?: Snippet;
14
+ type?: 'single' | 'multiple';
15
+ value?: string | string[] | null;
16
+ variant?: 'default' | 'outline';
17
+ class?: string;
18
+ [key: string]: any;
19
+ } = $props();
20
+
21
+ // Initialize value based on type
22
+ $effect(() => {
23
+ if (value === null) {
24
+ value = type === 'single' ? null : [];
25
+ }
26
+ });
27
+
28
+ function handleToggle(toggleValue: string) {
29
+ if (type === 'single') {
30
+ value = value === toggleValue ? null : toggleValue;
31
+ } else {
32
+ const currentValues = Array.isArray(value) ? value : [];
33
+ if (currentValues.includes(toggleValue)) {
34
+ value = currentValues.filter(v => v !== toggleValue);
35
+ } else {
36
+ value = [...currentValues, toggleValue];
37
+ }
38
+ }
39
+ }
40
+
41
+ function isPressed(toggleValue: string): boolean {
42
+ if (type === 'single') {
43
+ return value === toggleValue;
44
+ }
45
+ return Array.isArray(value) && value.includes(toggleValue);
46
+ }
47
+
48
+ // Expose context for child Toggle components
49
+ setContext('toggle-group', {
50
+ handleToggle,
51
+ isPressed,
52
+ getType: () => type
53
+ });
54
+ </script>
55
+
56
+ <div
57
+ class={['toggle-group', className].filter(Boolean).join(' ')}
58
+ role="group"
59
+ data-type={type}
60
+ data-variant={variant}
61
+ {...rest}
62
+ >
63
+ {@render children?.()}
64
+ </div>
65
+
66
+ <style>
67
+ @import "../../../../ultra/src/css/parts/custom/toggle-group.css";
68
+ @reference "../reference.css";
69
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ type?: 'single' | 'multiple';
5
+ value?: string | string[] | null;
6
+ variant?: 'default' | 'outline';
7
+ class?: string;
8
+ [key: string]: any;
9
+ };
10
+ declare const ToggleGroup: import("svelte").Component<$$ComponentProps, {}, "value">;
11
+ type ToggleGroup = ReturnType<typeof ToggleGroup>;
12
+ export default ToggleGroup;
@@ -0,0 +1,32 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ let {
5
+ children,
6
+ content,
7
+ side = 'top',
8
+ class: className = '',
9
+ ...rest
10
+ }: {
11
+ children: Snippet;
12
+ content: string;
13
+ side?: 'top' | 'bottom' | 'left' | 'right';
14
+ class?: string;
15
+ [key: string]: any;
16
+ } = $props();
17
+ </script>
18
+
19
+ <div
20
+ class={['inline-block', className].filter(Boolean).join(' ')}
21
+ data-tooltip={content}
22
+ data-side={side}
23
+ {...rest}
24
+ >
25
+ {@render children()}
26
+ </div>
27
+
28
+ <style>
29
+ /* Basecoat 的 Tooltip 往往在 tooltip.css 中定义了属性选择器 */
30
+ @import "../../../../ultra/src/css/parts/components/tooltip.css";
31
+ @reference "../reference.css";
32
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children: Snippet;
4
+ content: string;
5
+ side?: 'top' | 'bottom' | 'left' | 'right';
6
+ class?: string;
7
+ [key: string]: any;
8
+ };
9
+ declare const Tooltip: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type Tooltip = ReturnType<typeof Tooltip>;
11
+ export default Tooltip;
@@ -0,0 +1,42 @@
1
+ export { default as Button } from './components/Button.svelte';
2
+ export { default as Badge } from './components/Badge.svelte';
3
+ export { default as Alert } from './components/Alert.svelte';
4
+ export { default as Card } from './components/Card.svelte';
5
+ export { default as Avatar } from './components/Avatar.svelte';
6
+ export { default as Kbd } from './components/Kbd.svelte';
7
+ export { default as Skeleton } from './components/Skeleton.svelte';
8
+ export { default as Spinner } from './components/Spinner.svelte';
9
+ export { default as Progress } from './components/Progress.svelte';
10
+ export { default as Label } from './components/Label.svelte';
11
+ export { default as Input } from './components/Input.svelte';
12
+ export { default as Textarea } from './components/Textarea.svelte';
13
+ export { default as Checkbox } from './components/Checkbox.svelte';
14
+ export { default as Radio } from './components/Radio.svelte';
15
+ export { default as Switch } from './components/Switch.svelte';
16
+ export { default as Slider } from './components/Slider.svelte';
17
+ export { default as Separator } from './components/Separator.svelte';
18
+ export { default as ButtonGroup } from './components/ButtonGroup.svelte';
19
+ export { default as Toggle } from './components/Toggle.svelte';
20
+ export { default as ToggleGroup } from './components/ToggleGroup.svelte';
21
+ export { default as Table } from './components/Table.svelte';
22
+ export { default as Item } from './components/Item.svelte';
23
+ export { default as Empty } from './components/Empty.svelte';
24
+ export { default as Breadcrumb } from './components/Breadcrumb.svelte';
25
+ export { default as Pagination } from './components/Pagination.svelte';
26
+ export { default as Accordion } from './components/Accordion.svelte';
27
+ export { default as Collapsible } from './components/Collapsible.svelte';
28
+ export { default as Popover } from './components/Popover.svelte';
29
+ export { default as Tooltip } from './components/Tooltip.svelte';
30
+ export { default as Tabs } from './components/Tabs.svelte';
31
+ export { default as Dialog } from './components/Dialog.svelte';
32
+ export { default as Sheet } from './components/Sheet.svelte';
33
+ export { default as Drawer } from './components/Drawer.svelte';
34
+ export { default as DropdownMenu } from './components/DropdownMenu.svelte';
35
+ export { default as Select } from './components/Select.svelte';
36
+ export { default as Toast } from './components/Toast.svelte';
37
+ export { default as Command } from './components/Command.svelte';
38
+ export { default as InputOTP } from './components/InputOTP.svelte';
39
+ export { default as Carousel } from './components/Carousel.svelte';
40
+ export { default as DatePicker } from './components/DatePicker.svelte';
41
+ export { default as Resizable } from './components/Resizable.svelte';
42
+ export { default as CatppuccinThemeSwitcher } from './components/CatppuccinThemeSwitcher.svelte';
package/dist/index.js ADDED
@@ -0,0 +1,47 @@
1
+ export { default as Button } from './components/Button.svelte';
2
+ export { default as Badge } from './components/Badge.svelte';
3
+ export { default as Alert } from './components/Alert.svelte';
4
+ export { default as Card } from './components/Card.svelte';
5
+ // Batch 1: Atomic Components
6
+ export { default as Avatar } from './components/Avatar.svelte';
7
+ export { default as Kbd } from './components/Kbd.svelte';
8
+ export { default as Skeleton } from './components/Skeleton.svelte';
9
+ export { default as Spinner } from './components/Spinner.svelte';
10
+ export { default as Progress } from './components/Progress.svelte';
11
+ export { default as Label } from './components/Label.svelte';
12
+ export { default as Input } from './components/Input.svelte';
13
+ export { default as Textarea } from './components/Textarea.svelte';
14
+ export { default as Checkbox } from './components/Checkbox.svelte';
15
+ export { default as Radio } from './components/Radio.svelte';
16
+ export { default as Switch } from './components/Switch.svelte';
17
+ export { default as Slider } from './components/Slider.svelte';
18
+ export { default as Separator } from './components/Separator.svelte';
19
+ export { default as ButtonGroup } from './components/ButtonGroup.svelte';
20
+ export { default as Toggle } from './components/Toggle.svelte';
21
+ export { default as ToggleGroup } from './components/ToggleGroup.svelte';
22
+ // Batch 2: Structure & List Components
23
+ export { default as Table } from './components/Table.svelte';
24
+ export { default as Item } from './components/Item.svelte';
25
+ export { default as Empty } from './components/Empty.svelte';
26
+ export { default as Breadcrumb } from './components/Breadcrumb.svelte';
27
+ export { default as Pagination } from './components/Pagination.svelte';
28
+ // Batch 3: Interactive Components
29
+ export { default as Accordion } from './components/Accordion.svelte';
30
+ export { default as Collapsible } from './components/Collapsible.svelte';
31
+ export { default as Popover } from './components/Popover.svelte';
32
+ export { default as Tooltip } from './components/Tooltip.svelte';
33
+ export { default as Tabs } from './components/Tabs.svelte';
34
+ // Batch 4: Complex Overlays & Menus
35
+ export { default as Dialog } from './components/Dialog.svelte';
36
+ export { default as Sheet } from './components/Sheet.svelte';
37
+ export { default as Drawer } from './components/Drawer.svelte';
38
+ export { default as DropdownMenu } from './components/DropdownMenu.svelte';
39
+ export { default as Select } from './components/Select.svelte';
40
+ // Batch 5: Advanced & External Components
41
+ export { default as Toast } from './components/Toast.svelte';
42
+ export { default as Command } from './components/Command.svelte';
43
+ export { default as InputOTP } from './components/InputOTP.svelte';
44
+ export { default as Carousel } from './components/Carousel.svelte';
45
+ export { default as DatePicker } from './components/DatePicker.svelte';
46
+ export { default as Resizable } from './components/Resizable.svelte';
47
+ export { default as CatppuccinThemeSwitcher } from './components/CatppuccinThemeSwitcher.svelte';
@@ -0,0 +1,2 @@
1
+ @import "tailwindcss";
2
+ @reference "../../../ultra/src/css/basecoat.css";
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@lanrenbang/basecoat-ultra-svelte",
3
+ "version": "0.1.0",
4
+ "description": "Svelte 5 components for Basecoat Ultra with Runes support.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Lanrenbang",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Lanrenbang/basecoat-ultra.git",
11
+ "directory": "packages/svelte"
12
+ },
13
+ "homepage": "https://lanrenbang.github.io/basecoat-ultra",
14
+ "bugs": {
15
+ "url": "https://github.com/Lanrenbang/basecoat-ultra/issues"
16
+ },
17
+ "keywords": [
18
+ "svelte",
19
+ "svelte5",
20
+ "runes",
21
+ "tailwind",
22
+ "ui",
23
+ "components",
24
+ "basecoat"
25
+ ],
26
+ "svelte": "./dist/index.js",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "svelte": "./dist/index.js",
31
+ "default": "./dist/index.js"
32
+ },
33
+ "./components/*": {
34
+ "types": "./dist/components/*.svelte.d.ts",
35
+ "svelte": "./dist/components/*.svelte",
36
+ "default": "./dist/components/*.svelte"
37
+ },
38
+ "./*": {
39
+ "types": "./dist/components/*.svelte.d.ts",
40
+ "svelte": "./dist/components/*.svelte",
41
+ "default": "./dist/components/*.svelte"
42
+ }
43
+ },
44
+ "files": [
45
+ "dist",
46
+ "README.md",
47
+ "LICENSE.md"
48
+ ],
49
+ "scripts": {
50
+ "dev": "vite build --watch",
51
+ "build": "vite build && svelte-package"
52
+ },
53
+ "dependencies": {
54
+ "flatpickr": "^4.6.13",
55
+ "split.js": "^1.6.5"
56
+ },
57
+ "peerDependencies": {
58
+ "@lanrenbang/basecoat-ultra": ">=0.2.0",
59
+ "svelte": "^5.0.0"
60
+ },
61
+ "devDependencies": {
62
+ "@lanrenbang/basecoat-ultra": "workspace:^",
63
+ "@sveltejs/package": "^2.3.9",
64
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
65
+ "@tailwindcss/vite": "^4.1.18",
66
+ "svelte": "^5.0.0",
67
+ "tailwindcss": "^4.1.18",
68
+ "vite": "^7.3.0"
69
+ }
70
+ }