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.
- package/LICENSE +674 -0
- package/README.md +150 -0
- package/dist/App/App.svelte +54 -0
- package/dist/App/App.svelte.d.ts +65 -0
- package/dist/Section.svelte +25 -0
- package/dist/Section.svelte.d.ts +34 -0
- package/dist/actions/clickOutside.d.ts +9 -0
- package/dist/actions/clickOutside.js +19 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/actions/index.js +1 -0
- package/dist/components/Accordion/Accordion.svelte +75 -0
- package/dist/components/Accordion/Accordion.svelte.d.ts +39 -0
- package/dist/components/Accordion/AccordionItem.svelte +150 -0
- package/dist/components/Accordion/AccordionItem.svelte.d.ts +30 -0
- package/dist/components/App/App.story.md +8 -0
- package/dist/components/App/App.story.svelte +170 -0
- package/dist/components/App/App.story.svelte.d.ts +22 -0
- package/dist/components/App/App.svelte +77 -0
- package/dist/components/App/App.svelte.d.ts +66 -0
- package/dist/components/App/Split.svelte +346 -0
- package/dist/components/App/Split.svelte.d.ts +54 -0
- package/dist/components/App/index.d.ts +2 -0
- package/dist/components/App/index.js +3 -0
- package/dist/components/AppHeader/AppHeader.svelte +439 -0
- package/dist/components/AppHeader/AppHeader.svelte.d.ts +24 -0
- package/dist/components/Avatar/Avatar.svelte +300 -0
- package/dist/components/Avatar/Avatar.svelte.d.ts +48 -0
- package/dist/components/Avatar/AvatarGroup.svelte +185 -0
- package/dist/components/Avatar/AvatarGroup.svelte.d.ts +46 -0
- package/dist/components/Badge/Badge.svelte +186 -0
- package/dist/components/Badge/Badge.svelte.d.ts +51 -0
- package/dist/components/BottomBar/BottomBar.svelte +146 -0
- package/dist/components/BottomBar/BottomBar.svelte.d.ts +38 -0
- package/dist/components/Breadcrumb/Breadcrumb.svelte +77 -0
- package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts +42 -0
- package/dist/components/Breadcrumb/BreadcrumbItem.svelte +171 -0
- package/dist/components/Breadcrumb/BreadcrumbItem.svelte.d.ts +38 -0
- package/dist/components/Button/Button.svelte +252 -0
- package/dist/components/Button/Button.svelte.d.ts +80 -0
- package/dist/components/Button/ButtonGroup.svelte +127 -0
- package/dist/components/Button/ButtonGroup.svelte.d.ts +44 -0
- package/dist/components/Card/Card.svelte +152 -0
- package/dist/components/Card/Card.svelte.d.ts +55 -0
- package/dist/components/Carousel/Carousel.svelte +461 -0
- package/dist/components/Carousel/Carousel.svelte.d.ts +79 -0
- package/dist/components/Carousel/CarouselItem.svelte +149 -0
- package/dist/components/Carousel/CarouselItem.svelte.d.ts +35 -0
- package/dist/components/Chip/Chip.svelte +288 -0
- package/dist/components/Chip/Chip.svelte.d.ts +71 -0
- package/dist/components/Chip/ChipGroup.svelte +190 -0
- package/dist/components/Chip/ChipGroup.svelte.d.ts +71 -0
- package/dist/components/CodeBlock/CodeBlock.svelte +356 -0
- package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +44 -0
- package/dist/components/CodeBlock/index.d.ts +1 -0
- package/dist/components/CodeBlock/index.js +1 -0
- package/dist/components/CodeBlockSpeed/CodeBlockSpeed.svelte +145 -0
- package/dist/components/CodeBlockSpeed/CodeBlockSpeed.svelte.d.ts +44 -0
- package/dist/components/CodeEditor/CodeEditor.svelte +229 -0
- package/dist/components/CodeEditor/CodeEditor.svelte.d.ts +23 -0
- package/dist/components/Combobox/Combobox.svelte +279 -0
- package/dist/components/Combobox/Combobox.svelte.d.ts +34 -0
- package/dist/components/Container/Container.svelte +45 -0
- package/dist/components/Container/Container.svelte.d.ts +36 -0
- package/dist/components/DataTable/DataTable.svelte +879 -0
- package/dist/components/DataTable/DataTable.svelte.d.ts +102 -0
- package/dist/components/Form/AutoComplete.svelte +357 -0
- package/dist/components/Form/AutoComplete.svelte.d.ts +73 -0
- package/dist/components/Form/Calendar.svelte +429 -0
- package/dist/components/Form/Calendar.svelte.d.ts +53 -0
- package/dist/components/Form/Checkbox.svelte +196 -0
- package/dist/components/Form/Checkbox.svelte.d.ts +50 -0
- package/dist/components/Form/ColorPicker.svelte +396 -0
- package/dist/components/Form/ColorPicker.svelte.d.ts +43 -0
- package/dist/components/Form/Combobox.svelte +645 -0
- package/dist/components/Form/Combobox.svelte.d.ts +93 -0
- package/dist/components/Form/Dropdown.svelte +773 -0
- package/dist/components/Form/Dropdown.svelte.d.ts +81 -0
- package/dist/components/Form/FileUpload.svelte +796 -0
- package/dist/components/Form/FileUpload.svelte.d.ts +78 -0
- package/dist/components/Form/FloatLabel.svelte +245 -0
- package/dist/components/Form/FloatLabel.svelte.d.ts +44 -0
- package/dist/components/Form/Form.svelte +281 -0
- package/dist/components/Form/Form.svelte.d.ts +54 -0
- package/dist/components/Form/FormField.svelte +218 -0
- package/dist/components/Form/FormField.svelte.d.ts +47 -0
- package/dist/components/Form/Input.svelte +340 -0
- package/dist/components/Form/Input.svelte.d.ts +79 -0
- package/dist/components/Form/InputSwitch.svelte +189 -0
- package/dist/components/Form/InputSwitch.svelte.d.ts +46 -0
- package/dist/components/Form/InvalidState.svelte +97 -0
- package/dist/components/Form/InvalidState.svelte.d.ts +37 -0
- package/dist/components/Form/Knob.svelte +537 -0
- package/dist/components/Form/Knob.svelte.d.ts +78 -0
- package/dist/components/Form/ListInput.svelte +469 -0
- package/dist/components/Form/ListInput.svelte.d.ts +70 -0
- package/dist/components/Form/Listbox.svelte +513 -0
- package/dist/components/Form/Listbox.svelte.d.ts +74 -0
- package/dist/components/Form/NumberInput.svelte +452 -0
- package/dist/components/Form/NumberInput.svelte.d.ts +82 -0
- package/dist/components/Form/Radio.svelte +192 -0
- package/dist/components/Form/Radio.svelte.d.ts +53 -0
- package/dist/components/Form/RadioGroup.svelte +155 -0
- package/dist/components/Form/RadioGroup.svelte.d.ts +48 -0
- package/dist/components/Form/Rating.svelte +380 -0
- package/dist/components/Form/Rating.svelte.d.ts +64 -0
- package/dist/components/Form/Select.svelte +436 -0
- package/dist/components/Form/Select.svelte.d.ts +49 -0
- package/dist/components/Form/SelectGroup.svelte +34 -0
- package/dist/components/Form/SelectGroup.svelte.d.ts +33 -0
- package/dist/components/Form/Slider.svelte +622 -0
- package/dist/components/Form/Slider.svelte.d.ts +73 -0
- package/dist/components/Form/Switch.svelte +192 -0
- package/dist/components/Form/Switch.svelte.d.ts +46 -0
- package/dist/components/Form/TextInput.svelte +274 -0
- package/dist/components/Form/TextInput.svelte.d.ts +74 -0
- package/dist/components/Form/Textarea.svelte +207 -0
- package/dist/components/Form/Textarea.svelte.d.ts +62 -0
- package/dist/components/Icon/Icon.svelte +140 -0
- package/dist/components/Icon/Icon.svelte.d.ts +25 -0
- package/dist/components/Icon/index.d.ts +1 -0
- package/dist/components/Icon/index.js +1 -0
- package/dist/components/Lazy/Lazy.svelte +158 -0
- package/dist/components/Lazy/Lazy.svelte.d.ts +42 -0
- package/dist/components/Masonry/Masonry.svelte +299 -0
- package/dist/components/Masonry/Masonry.svelte.d.ts +55 -0
- package/dist/components/Menu/Menu/Menu.svelte +65 -0
- package/dist/components/Menu/Menu/Menu.svelte.d.ts +17 -0
- package/dist/components/Menu/Menu/MenuItem.svelte +90 -0
- package/dist/components/Menu/Menu/MenuItem.svelte.d.ts +27 -0
- package/dist/components/Modal/Modal.svelte +334 -0
- package/dist/components/Modal/Modal.svelte.d.ts +55 -0
- package/dist/components/Panel/Card.svelte +141 -0
- package/dist/components/Panel/Card.svelte.d.ts +52 -0
- package/dist/components/Panel/Hero/Hero.story.md +9 -0
- package/dist/components/Panel/Hero/Hero.story.svelte +49 -0
- package/dist/components/Panel/Hero/Hero.story.svelte.d.ts +21 -0
- package/dist/components/Panel/Hero/Hero.svelte +24 -0
- package/dist/components/Panel/Hero/Hero.svelte.d.ts +32 -0
- package/dist/components/Panel/LazyPanel.svelte +110 -0
- package/dist/components/Panel/LazyPanel.svelte.d.ts +46 -0
- package/dist/components/Panel/Panel.svelte +205 -0
- package/dist/components/Panel/Panel.svelte.d.ts +23 -0
- package/dist/components/Progress/Progress.svelte +220 -0
- package/dist/components/Progress/Progress.svelte.d.ts +61 -0
- package/dist/components/Separator/Separator.svelte +109 -0
- package/dist/components/Separator/Separator.svelte.d.ts +35 -0
- package/dist/components/Sidebar/Sidebar.svelte +213 -0
- package/dist/components/Sidebar/Sidebar.svelte.d.ts +60 -0
- package/dist/components/Skeleton/Skeleton.svelte +170 -0
- package/dist/components/Skeleton/Skeleton.svelte.d.ts +48 -0
- package/dist/components/Stepper/Stepper.svelte +111 -0
- package/dist/components/Stepper/Stepper.svelte.d.ts +54 -0
- package/dist/components/Stepper/StepperStep.svelte +369 -0
- package/dist/components/Stepper/StepperStep.svelte.d.ts +63 -0
- package/dist/components/Table/Table.svelte +167 -0
- package/dist/components/Table/Table.svelte.d.ts +56 -0
- package/dist/components/Table/TableBody.svelte +41 -0
- package/dist/components/Table/TableBody.svelte.d.ts +33 -0
- package/dist/components/Table/TableCell.svelte +76 -0
- package/dist/components/Table/TableCell.svelte.d.ts +36 -0
- package/dist/components/Table/TableHead.svelte +41 -0
- package/dist/components/Table/TableHead.svelte.d.ts +32 -0
- package/dist/components/Table/TableHeader.svelte +148 -0
- package/dist/components/Table/TableHeader.svelte.d.ts +42 -0
- package/dist/components/Table/TableRow.svelte +99 -0
- package/dist/components/Table/TableRow.svelte.d.ts +40 -0
- package/dist/components/Tabs/Tab.svelte +145 -0
- package/dist/components/Tabs/Tab.svelte.d.ts +36 -0
- package/dist/components/Tabs/TabList.svelte +60 -0
- package/dist/components/Tabs/TabList.svelte.d.ts +32 -0
- package/dist/components/Tabs/TabPanel.svelte +118 -0
- package/dist/components/Tabs/TabPanel.svelte.d.ts +38 -0
- package/dist/components/Tabs/Tabs.svelte +287 -0
- package/dist/components/Tabs/Tabs.svelte.d.ts +50 -0
- package/dist/components/Tag/Tag.svelte +260 -0
- package/dist/components/Tag/Tag.svelte.d.ts +54 -0
- package/dist/components/Tag/TagGroup.svelte +147 -0
- package/dist/components/Tag/TagGroup.svelte.d.ts +62 -0
- package/dist/components/ThemeToggle/ThemeToggle.svelte +93 -0
- package/dist/components/ThemeToggle/ThemeToggle.svelte.d.ts +12 -0
- package/dist/components/Timeline/Timeline.svelte +144 -0
- package/dist/components/Timeline/Timeline.svelte.d.ts +48 -0
- package/dist/components/Timeline/TimelineItem.svelte +391 -0
- package/dist/components/Timeline/TimelineItem.svelte.d.ts +63 -0
- package/dist/components/Toast/Toast.svelte +313 -0
- package/dist/components/Toast/Toast.svelte.d.ts +44 -0
- package/dist/components/Toast/toastStore.d.ts +40 -0
- package/dist/components/Toast/toastStore.js +293 -0
- package/dist/components/Tooltip/Tooltip.svelte +282 -0
- package/dist/components/Tooltip/Tooltip.svelte.d.ts +55 -0
- package/dist/components/Tree/Tree.svelte +129 -0
- package/dist/components/Tree/Tree.svelte.d.ts +61 -0
- package/dist/components/Tree/TreeNode.svelte +332 -0
- package/dist/components/Tree/TreeNode.svelte.d.ts +55 -0
- package/dist/components/icons/TwintrinsicLogo.svelte +73 -0
- package/dist/components/icons/TwintrinsicLogo.svelte.d.ts +17 -0
- package/dist/components/icons/twintrinsic-source.svg +73 -0
- package/dist/components/icons/twintrinsic.svg +38 -0
- package/dist/docs/EventsTable.svelte +86 -0
- package/dist/docs/EventsTable.svelte.d.ts +27 -0
- package/dist/docs/PropsTable.svelte +103 -0
- package/dist/docs/PropsTable.svelte.d.ts +28 -0
- package/dist/docs/index.d.ts +2 -0
- package/dist/docs/index.js +2 -0
- package/dist/helpers/detectLanguage.d.ts +6 -0
- package/dist/helpers/detectLanguage.js +60 -0
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +94 -0
- package/dist/twintrinsic.css +347 -0
- package/package.json +98 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
Stepper - A component for displaying multi-step processes or wizards.
|
|
4
|
+
Provides consistent styling, accessibility features, and various display options.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
```svelte
|
|
8
|
+
<Stepper activeStep={1}>
|
|
9
|
+
<StepperStep title="Account" completed>Account details</StepperStep>
|
|
10
|
+
<StepperStep title="Profile" active>Profile information</StepperStep>
|
|
11
|
+
<StepperStep title="Review">Review and submit</StepperStep>
|
|
12
|
+
</Stepper>
|
|
13
|
+
|
|
14
|
+
<Stepper
|
|
15
|
+
activeStep={2}
|
|
16
|
+
variant="primary"
|
|
17
|
+
orientation="vertical"
|
|
18
|
+
alternativeLabels
|
|
19
|
+
>
|
|
20
|
+
<StepperStep title="Step 1" completed>Step 1 content</StepperStep>
|
|
21
|
+
<StepperStep title="Step 2" completed>Step 2 content</StepperStep>
|
|
22
|
+
<StepperStep title="Step 3" active>Step 3 content</StepperStep>
|
|
23
|
+
<StepperStep title="Step 4">Step 4 content</StepperStep>
|
|
24
|
+
</Stepper>
|
|
25
|
+
```
|
|
26
|
+
-->
|
|
27
|
+
<script>
|
|
28
|
+
import { setContext } from "svelte"
|
|
29
|
+
|
|
30
|
+
const {
|
|
31
|
+
/** @type {string} - Additional CSS classes */
|
|
32
|
+
class: className = "",
|
|
33
|
+
|
|
34
|
+
/** @type {string} - HTML id for accessibility */
|
|
35
|
+
id = crypto.randomUUID(),
|
|
36
|
+
|
|
37
|
+
/** @type {number} - Index of the active step (0-based) */
|
|
38
|
+
activeStep = 0,
|
|
39
|
+
|
|
40
|
+
/** @type {string} - Visual style variant */
|
|
41
|
+
variant = "primary",
|
|
42
|
+
|
|
43
|
+
/** @type {string} - Orientation of the stepper (horizontal, vertical) */
|
|
44
|
+
orientation = "horizontal",
|
|
45
|
+
|
|
46
|
+
/** @type {boolean} - Whether to place labels below the step icons */
|
|
47
|
+
alternativeLabels = false,
|
|
48
|
+
|
|
49
|
+
/** @type {boolean} - Whether to show linear progression only */
|
|
50
|
+
linear = true,
|
|
51
|
+
|
|
52
|
+
/** @type {boolean} - Whether to show the connector between steps */
|
|
53
|
+
connector = true,
|
|
54
|
+
|
|
55
|
+
/** @type {string} - ARIA label for the stepper */
|
|
56
|
+
ariaLabel = "Step progress",
|
|
57
|
+
|
|
58
|
+
children,
|
|
59
|
+
} = $props()
|
|
60
|
+
|
|
61
|
+
// Provide context for child components
|
|
62
|
+
$effect(() => {
|
|
63
|
+
setContext("stepper", {
|
|
64
|
+
activeStep,
|
|
65
|
+
variant,
|
|
66
|
+
orientation,
|
|
67
|
+
alternativeLabels,
|
|
68
|
+
linear,
|
|
69
|
+
connector,
|
|
70
|
+
getStepState: (index) => {
|
|
71
|
+
if (index < activeStep) return "completed"
|
|
72
|
+
if (index === activeStep) return "active"
|
|
73
|
+
return "pending"
|
|
74
|
+
},
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
</script>
|
|
78
|
+
|
|
79
|
+
<div
|
|
80
|
+
{id}
|
|
81
|
+
class="
|
|
82
|
+
stepper
|
|
83
|
+
stepper-{orientation}
|
|
84
|
+
{alternativeLabels ? 'stepper-alternative-labels' : ''}
|
|
85
|
+
{className}
|
|
86
|
+
"
|
|
87
|
+
role="navigation"
|
|
88
|
+
aria-label={ariaLabel}
|
|
89
|
+
>
|
|
90
|
+
{@render children?.()}
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<style>
|
|
94
|
+
@reference "../../twintrinsic.css";
|
|
95
|
+
|
|
96
|
+
.stepper {
|
|
97
|
+
@apply w-full;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.stepper-horizontal {
|
|
101
|
+
@apply flex flex-row items-start;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.stepper-vertical {
|
|
105
|
+
@apply flex flex-col;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.stepper-alternative-labels.stepper-horizontal {
|
|
109
|
+
@apply flex-col;
|
|
110
|
+
}
|
|
111
|
+
</style>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export default Stepper;
|
|
2
|
+
type Stepper = {
|
|
3
|
+
$on?(type: string, callback: (e: any) => void): () => void;
|
|
4
|
+
$set?(props: Partial<$$ComponentProps>): void;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Stepper - A component for displaying multi-step processes or wizards.
|
|
8
|
+
* Provides consistent styling, accessibility features, and various display options.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```svelte
|
|
12
|
+
* <Stepper activeStep={1}>
|
|
13
|
+
* <StepperStep title="Account" completed>Account details</StepperStep>
|
|
14
|
+
* <StepperStep title="Profile" active>Profile information</StepperStep>
|
|
15
|
+
* <StepperStep title="Review">Review and submit</StepperStep>
|
|
16
|
+
* </Stepper>
|
|
17
|
+
*
|
|
18
|
+
* <Stepper
|
|
19
|
+
* activeStep={2}
|
|
20
|
+
* variant="primary"
|
|
21
|
+
* orientation="vertical"
|
|
22
|
+
* alternativeLabels
|
|
23
|
+
* >
|
|
24
|
+
* <StepperStep title="Step 1" completed>Step 1 content</StepperStep>
|
|
25
|
+
* <StepperStep title="Step 2" completed>Step 2 content</StepperStep>
|
|
26
|
+
* <StepperStep title="Step 3" active>Step 3 content</StepperStep>
|
|
27
|
+
* <StepperStep title="Step 4">Step 4 content</StepperStep>
|
|
28
|
+
* </Stepper>
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
declare const Stepper: import("svelte").Component<{
|
|
32
|
+
class?: string;
|
|
33
|
+
id?: any;
|
|
34
|
+
activeStep?: number;
|
|
35
|
+
variant?: string;
|
|
36
|
+
orientation?: string;
|
|
37
|
+
alternativeLabels?: boolean;
|
|
38
|
+
linear?: boolean;
|
|
39
|
+
connector?: boolean;
|
|
40
|
+
ariaLabel?: string;
|
|
41
|
+
children: any;
|
|
42
|
+
}, {}, "">;
|
|
43
|
+
type $$ComponentProps = {
|
|
44
|
+
class?: string;
|
|
45
|
+
id?: any;
|
|
46
|
+
activeStep?: number;
|
|
47
|
+
variant?: string;
|
|
48
|
+
orientation?: string;
|
|
49
|
+
alternativeLabels?: boolean;
|
|
50
|
+
linear?: boolean;
|
|
51
|
+
connector?: boolean;
|
|
52
|
+
ariaLabel?: string;
|
|
53
|
+
children: any;
|
|
54
|
+
};
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
StepperStep - An individual step within a Stepper component.
|
|
4
|
+
Provides consistent styling, accessibility features, and various display options.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
```svelte
|
|
8
|
+
<StepperStep title="Account Details">
|
|
9
|
+
Content for the account details step
|
|
10
|
+
</StepperStep>
|
|
11
|
+
|
|
12
|
+
<StepperStep
|
|
13
|
+
title="Review"
|
|
14
|
+
subtitle="Verify your information"
|
|
15
|
+
icon="<svg>...</svg>"
|
|
16
|
+
completed
|
|
17
|
+
>
|
|
18
|
+
Review step content
|
|
19
|
+
</StepperStep>
|
|
20
|
+
|
|
21
|
+
<StepperStep
|
|
22
|
+
title="Payment"
|
|
23
|
+
optional
|
|
24
|
+
error={paymentError}
|
|
25
|
+
>
|
|
26
|
+
Payment step content
|
|
27
|
+
</StepperStep>
|
|
28
|
+
```
|
|
29
|
+
-->
|
|
30
|
+
<script>
|
|
31
|
+
import { getContext, onMount } from "svelte"
|
|
32
|
+
|
|
33
|
+
const {
|
|
34
|
+
/** @type {string} - Additional CSS classes */
|
|
35
|
+
class: className = "",
|
|
36
|
+
|
|
37
|
+
/** @type {string} - HTML id for accessibility */
|
|
38
|
+
id = crypto.randomUUID(),
|
|
39
|
+
|
|
40
|
+
/** @type {string} - Step title */
|
|
41
|
+
title,
|
|
42
|
+
|
|
43
|
+
/** @type {string} - Step subtitle or description */
|
|
44
|
+
subtitle,
|
|
45
|
+
|
|
46
|
+
/** @type {string} - Custom icon (HTML or SVG string) */
|
|
47
|
+
icon,
|
|
48
|
+
|
|
49
|
+
/** @type {boolean} - Whether the step is optional */
|
|
50
|
+
optional = false,
|
|
51
|
+
|
|
52
|
+
/** @type {boolean} - Whether the step is disabled */
|
|
53
|
+
disabled = false,
|
|
54
|
+
|
|
55
|
+
/** @type {boolean} - Whether the step is completed */
|
|
56
|
+
completed = false,
|
|
57
|
+
|
|
58
|
+
/** @type {boolean} - Whether the step is active */
|
|
59
|
+
active = false,
|
|
60
|
+
|
|
61
|
+
/** @type {boolean} - Whether the step has an error */
|
|
62
|
+
error = false,
|
|
63
|
+
|
|
64
|
+
/** @type {boolean} - Whether to expand the step content (for vertical orientation) */
|
|
65
|
+
expanded = false,
|
|
66
|
+
|
|
67
|
+
/** @type {Function} - Click handler for the step */
|
|
68
|
+
onClick,
|
|
69
|
+
|
|
70
|
+
children,
|
|
71
|
+
} = $props()
|
|
72
|
+
|
|
73
|
+
// Get stepper context
|
|
74
|
+
const stepperContext = getContext("stepper")
|
|
75
|
+
|
|
76
|
+
// Component state
|
|
77
|
+
let stepElement
|
|
78
|
+
let index = $state(-1)
|
|
79
|
+
|
|
80
|
+
// Register with parent on mount
|
|
81
|
+
onMount(() => {
|
|
82
|
+
if (stepElement) {
|
|
83
|
+
// Find our index among siblings
|
|
84
|
+
const parent = stepElement.parentElement
|
|
85
|
+
if (parent) {
|
|
86
|
+
const steps = Array.from(parent.children)
|
|
87
|
+
index = steps.indexOf(stepElement)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
// Determine step state based on context and props
|
|
93
|
+
const stepState = $derived(() => {
|
|
94
|
+
if (error) return "error"
|
|
95
|
+
if (completed) return "completed"
|
|
96
|
+
if (active) return "active"
|
|
97
|
+
|
|
98
|
+
// If not explicitly set, use context
|
|
99
|
+
if (stepperContext && index >= 0) {
|
|
100
|
+
return stepperContext.getStepState(index)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return "pending"
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
// Determine if this is the last step
|
|
107
|
+
const isLast = $derived(!stepElement?.nextElementSibling)
|
|
108
|
+
|
|
109
|
+
// Determine if step is clickable
|
|
110
|
+
const isClickable = $derived(!!onClick && !disabled)
|
|
111
|
+
|
|
112
|
+
// Determine if content should be shown
|
|
113
|
+
const showContent = $derived(
|
|
114
|
+
stepperContext?.orientation === "vertical" && (expanded || stepState === "active") && !!children
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
// Determine variant from context
|
|
118
|
+
const variant = $derived(stepperContext?.variant || "primary")
|
|
119
|
+
|
|
120
|
+
// Determine orientation from context
|
|
121
|
+
const orientation = $derived(stepperContext?.orientation || "horizontal")
|
|
122
|
+
|
|
123
|
+
// Determine if using alternative labels
|
|
124
|
+
const alternativeLabels = $derived(stepperContext?.alternativeLabels || false)
|
|
125
|
+
|
|
126
|
+
// Determine if showing connector
|
|
127
|
+
const showConnector = $derived(stepperContext?.connector !== false && !isLast)
|
|
128
|
+
|
|
129
|
+
// Determine variant classes
|
|
130
|
+
const variantClasses = $derived(
|
|
131
|
+
{
|
|
132
|
+
default: "text-muted dark:text-muted",
|
|
133
|
+
primary: "text-primary-500 dark:text-primary-500",
|
|
134
|
+
secondary: "text-secondary-500 dark:text-secondary-500",
|
|
135
|
+
success: "text-success-500 dark:text-success-500",
|
|
136
|
+
warning: "text-warning-500 dark:text-warning-500",
|
|
137
|
+
error: "text-error-500 dark:text-error-500",
|
|
138
|
+
info: "text-info-500 dark:text-info-500",
|
|
139
|
+
}[variant] || "text-primary-500 dark:text-primary-500"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
// Handle click on step
|
|
143
|
+
function handleClick() {
|
|
144
|
+
if (isClickable) {
|
|
145
|
+
onClick(index)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
</script>
|
|
149
|
+
|
|
150
|
+
<div
|
|
151
|
+
{id}
|
|
152
|
+
class="
|
|
153
|
+
stepper-step
|
|
154
|
+
stepper-step-{orientation}
|
|
155
|
+
stepper-step-{stepState}
|
|
156
|
+
{alternativeLabels ? 'stepper-step-alternative-labels' : ''}
|
|
157
|
+
{disabled ? 'stepper-step-disabled' : ''}
|
|
158
|
+
{isClickable ? 'stepper-step-clickable' : ''}
|
|
159
|
+
{className}
|
|
160
|
+
"
|
|
161
|
+
role="listitem"
|
|
162
|
+
aria-current={stepState === 'active' ? 'step' : undefined}
|
|
163
|
+
aria-disabled={disabled ? true : undefined}
|
|
164
|
+
bind:this={stepElement}
|
|
165
|
+
>
|
|
166
|
+
<div
|
|
167
|
+
class="stepper-step-header"
|
|
168
|
+
onclick={handleClick}
|
|
169
|
+
onkeydown={(e) => e.key === 'Enter' && handleClick()}
|
|
170
|
+
tabindex={isClickable ? 0 : undefined}
|
|
171
|
+
role={isClickable ? 'button' : undefined}
|
|
172
|
+
>
|
|
173
|
+
<div class="stepper-step-icon-container">
|
|
174
|
+
<div class="stepper-step-icon {variantClasses}">
|
|
175
|
+
{#if stepState === 'completed'}
|
|
176
|
+
{#if icon}
|
|
177
|
+
<span class="stepper-step-custom-icon">
|
|
178
|
+
{@html icon}
|
|
179
|
+
</span>
|
|
180
|
+
{:else}
|
|
181
|
+
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
182
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
|
|
183
|
+
</svg>
|
|
184
|
+
{/if}
|
|
185
|
+
{:else if stepState === 'error'}
|
|
186
|
+
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
187
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
|
|
188
|
+
</svg>
|
|
189
|
+
{:else if icon}
|
|
190
|
+
<span class="stepper-step-custom-icon">
|
|
191
|
+
{@html icon}
|
|
192
|
+
</span>
|
|
193
|
+
{:else}
|
|
194
|
+
<span class="stepper-step-number">{index + 1}</span>
|
|
195
|
+
{/if}
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
{#if showConnector}
|
|
199
|
+
<div class="stepper-step-connector">
|
|
200
|
+
<span class="stepper-step-connector-line"></span>
|
|
201
|
+
</div>
|
|
202
|
+
{/if}
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<div class="stepper-step-label">
|
|
206
|
+
<span class="stepper-step-title">
|
|
207
|
+
{title}
|
|
208
|
+
{#if optional}
|
|
209
|
+
<span class="stepper-step-optional">(optional)</span>
|
|
210
|
+
{/if}
|
|
211
|
+
</span>
|
|
212
|
+
|
|
213
|
+
{#if subtitle}
|
|
214
|
+
<span class="stepper-step-subtitle">
|
|
215
|
+
{subtitle}
|
|
216
|
+
</span>
|
|
217
|
+
{/if}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
{#if showContent}
|
|
222
|
+
<div class="stepper-step-content">
|
|
223
|
+
{@render children?.()}
|
|
224
|
+
</div>
|
|
225
|
+
{/if}
|
|
226
|
+
</div>
|
|
227
|
+
|
|
228
|
+
<style>
|
|
229
|
+
@reference "../../twintrinsic.css";
|
|
230
|
+
|
|
231
|
+
.stepper-step {
|
|
232
|
+
@apply relative;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* Horizontal layout */
|
|
236
|
+
.stepper-step-horizontal {
|
|
237
|
+
@apply flex-1;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.stepper-step-horizontal .stepper-step-header {
|
|
241
|
+
@apply flex flex-col items-center;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.stepper-step-horizontal .stepper-step-icon-container {
|
|
245
|
+
@apply flex-1 flex items-center;
|
|
246
|
+
@apply w-full;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.stepper-step-horizontal .stepper-step-connector {
|
|
250
|
+
@apply flex-1 ml-2;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.stepper-step-horizontal .stepper-step-connector-line {
|
|
254
|
+
@apply block w-full h-0.5;
|
|
255
|
+
@apply bg-border dark:bg-border;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.stepper-step-horizontal.stepper-step-completed .stepper-step-connector-line,
|
|
259
|
+
.stepper-step-horizontal.stepper-step-active .stepper-step-connector-line {
|
|
260
|
+
@apply bg-current;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/* Alternative labels for horizontal */
|
|
264
|
+
.stepper-step-horizontal.stepper-step-alternative-labels .stepper-step-header {
|
|
265
|
+
@apply flex-row items-start;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.stepper-step-horizontal.stepper-step-alternative-labels .stepper-step-icon-container {
|
|
269
|
+
@apply w-auto;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.stepper-step-horizontal.stepper-step-alternative-labels .stepper-step-label {
|
|
273
|
+
@apply ml-3;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Vertical layout */
|
|
277
|
+
.stepper-step-vertical {
|
|
278
|
+
@apply mb-4;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.stepper-step-vertical .stepper-step-header {
|
|
282
|
+
@apply flex flex-row items-start;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.stepper-step-vertical .stepper-step-icon-container {
|
|
286
|
+
@apply flex flex-col items-center;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.stepper-step-vertical .stepper-step-connector {
|
|
290
|
+
@apply flex-1 mt-2;
|
|
291
|
+
@apply h-full min-h-8;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.stepper-step-vertical .stepper-step-connector-line {
|
|
295
|
+
@apply block h-full w-0.5;
|
|
296
|
+
@apply bg-border dark:bg-border;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.stepper-step-vertical.stepper-step-completed .stepper-step-connector-line,
|
|
300
|
+
.stepper-step-vertical.stepper-step-active .stepper-step-connector-line {
|
|
301
|
+
@apply bg-current;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.stepper-step-vertical .stepper-step-label {
|
|
305
|
+
@apply ml-3;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.stepper-step-vertical .stepper-step-content {
|
|
309
|
+
@apply ml-12 mt-2 mb-4;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* Common styles */
|
|
313
|
+
.stepper-step-icon {
|
|
314
|
+
@apply flex items-center justify-center;
|
|
315
|
+
@apply w-8 h-8 rounded-full;
|
|
316
|
+
@apply bg-muted/10 dark:bg-muted/10;
|
|
317
|
+
@apply text-muted dark:text-muted;
|
|
318
|
+
@apply z-10;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.stepper-step-active .stepper-step-icon {
|
|
322
|
+
@apply bg-current/10;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.stepper-step-completed .stepper-step-icon {
|
|
326
|
+
@apply bg-current/10;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.stepper-step-error .stepper-step-icon {
|
|
330
|
+
@apply bg-error-100 dark:bg-error-900;
|
|
331
|
+
@apply text-error-500 dark:text-error-500;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.stepper-step-title {
|
|
335
|
+
@apply text-sm font-medium;
|
|
336
|
+
@apply text-text dark:text-text;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.stepper-step-active .stepper-step-title {
|
|
340
|
+
@apply text-current;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.stepper-step-subtitle {
|
|
344
|
+
@apply text-xs;
|
|
345
|
+
@apply text-muted dark:text-muted;
|
|
346
|
+
@apply block mt-0.5;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.stepper-step-optional {
|
|
350
|
+
@apply text-xs font-normal;
|
|
351
|
+
@apply text-muted dark:text-muted;
|
|
352
|
+
@apply ml-1;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.stepper-step-clickable {
|
|
356
|
+
@apply cursor-pointer;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.stepper-step-clickable .stepper-step-header {
|
|
360
|
+
@apply hover:opacity-80;
|
|
361
|
+
@apply focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400 focus:ring-offset-2 rounded;
|
|
362
|
+
@apply transition-opacity duration-150;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.stepper-step-disabled {
|
|
366
|
+
@apply opacity-50 cursor-not-allowed;
|
|
367
|
+
@apply pointer-events-none;
|
|
368
|
+
}
|
|
369
|
+
</style>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export default StepperStep;
|
|
2
|
+
type StepperStep = {
|
|
3
|
+
$on?(type: string, callback: (e: any) => void): () => void;
|
|
4
|
+
$set?(props: Partial<$$ComponentProps>): void;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* StepperStep - An individual step within a Stepper component.
|
|
8
|
+
* Provides consistent styling, accessibility features, and various display options.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```svelte
|
|
12
|
+
* <StepperStep title="Account Details">
|
|
13
|
+
* Content for the account details step
|
|
14
|
+
* </StepperStep>
|
|
15
|
+
*
|
|
16
|
+
* <StepperStep
|
|
17
|
+
* title="Review"
|
|
18
|
+
* subtitle="Verify your information"
|
|
19
|
+
* icon="<svg>...</svg>"
|
|
20
|
+
* completed
|
|
21
|
+
* >
|
|
22
|
+
* Review step content
|
|
23
|
+
* </StepperStep>
|
|
24
|
+
*
|
|
25
|
+
* <StepperStep
|
|
26
|
+
* title="Payment"
|
|
27
|
+
* optional
|
|
28
|
+
* error={paymentError}
|
|
29
|
+
* >
|
|
30
|
+
* Payment step content
|
|
31
|
+
* </StepperStep>
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
declare const StepperStep: import("svelte").Component<{
|
|
35
|
+
class?: string;
|
|
36
|
+
id?: any;
|
|
37
|
+
title: any;
|
|
38
|
+
subtitle: any;
|
|
39
|
+
icon: any;
|
|
40
|
+
optional?: boolean;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
completed?: boolean;
|
|
43
|
+
active?: boolean;
|
|
44
|
+
error?: boolean;
|
|
45
|
+
expanded?: boolean;
|
|
46
|
+
onClick: any;
|
|
47
|
+
children: any;
|
|
48
|
+
}, {}, "">;
|
|
49
|
+
type $$ComponentProps = {
|
|
50
|
+
class?: string;
|
|
51
|
+
id?: any;
|
|
52
|
+
title: any;
|
|
53
|
+
subtitle: any;
|
|
54
|
+
icon: any;
|
|
55
|
+
optional?: boolean;
|
|
56
|
+
disabled?: boolean;
|
|
57
|
+
completed?: boolean;
|
|
58
|
+
active?: boolean;
|
|
59
|
+
error?: boolean;
|
|
60
|
+
expanded?: boolean;
|
|
61
|
+
onClick: any;
|
|
62
|
+
children: any;
|
|
63
|
+
};
|