@tribepad/themis 1.0.1 → 1.0.2
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/dist/elements/Accordion/index.js +1 -335
- package/dist/elements/Accordion/index.js.map +1 -1
- package/dist/elements/Accordion/index.mjs +1 -317
- package/dist/elements/Accordion/index.mjs.map +1 -1
- package/dist/elements/AlertDialog/AlertDialog.d.ts +43 -0
- package/dist/elements/AlertDialog/AlertDialog.d.ts.map +1 -0
- package/dist/elements/AlertDialog/AlertDialog.styles.d.ts +15 -0
- package/dist/elements/AlertDialog/AlertDialog.styles.d.ts.map +1 -0
- package/dist/elements/AlertDialog/AlertDialog.types.d.ts +72 -0
- package/dist/elements/AlertDialog/AlertDialog.types.d.ts.map +1 -0
- package/dist/elements/AlertDialog/index.d.ts +25 -0
- package/dist/elements/AlertDialog/index.d.ts.map +1 -0
- package/dist/elements/AlertDialog/index.js +3 -0
- package/dist/elements/AlertDialog/index.js.map +1 -0
- package/dist/elements/AlertDialog/index.mjs +3 -0
- package/dist/elements/AlertDialog/index.mjs.map +1 -0
- package/dist/elements/Avatar/index.js +1 -468
- package/dist/elements/Avatar/index.js.map +1 -1
- package/dist/elements/Avatar/index.mjs +1 -456
- package/dist/elements/Avatar/index.mjs.map +1 -1
- package/dist/elements/Badge/index.js +1 -243
- package/dist/elements/Badge/index.js.map +1 -1
- package/dist/elements/Badge/index.mjs +1 -234
- package/dist/elements/Badge/index.mjs.map +1 -1
- package/dist/elements/Breadcrumbs/index.js +1 -821
- package/dist/elements/Breadcrumbs/index.js.map +1 -1
- package/dist/elements/Breadcrumbs/index.mjs +1 -810
- package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
- package/dist/elements/Button/Button.d.ts +26 -81
- package/dist/elements/Button/Button.d.ts.map +1 -1
- package/dist/elements/Button/Button.styles.d.ts +35 -0
- package/dist/elements/Button/Button.styles.d.ts.map +1 -0
- package/dist/elements/Button/Button.types.d.ts +20 -8
- package/dist/elements/Button/Button.types.d.ts.map +1 -1
- package/dist/elements/Button/index.js +1 -288
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/index.mjs +1 -283
- package/dist/elements/Button/index.mjs.map +1 -1
- package/dist/elements/ButtonGroup/index.js +1 -237
- package/dist/elements/ButtonGroup/index.js.map +1 -1
- package/dist/elements/ButtonGroup/index.mjs +1 -222
- package/dist/elements/ButtonGroup/index.mjs.map +1 -1
- package/dist/elements/Card/index.js +1 -579
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/Card/index.mjs +1 -560
- package/dist/elements/Card/index.mjs.map +1 -1
- package/dist/elements/Carousel/Carousel.d.ts +1 -11
- package/dist/elements/Carousel/Carousel.d.ts.map +1 -1
- package/dist/elements/Carousel/LazyCarousel.d.ts +1 -1
- package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -1
- package/dist/elements/Carousel/index.js +1 -789
- package/dist/elements/Carousel/index.js.map +1 -1
- package/dist/elements/Carousel/index.mjs +1 -786
- package/dist/elements/Carousel/index.mjs.map +1 -1
- package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
- package/dist/elements/Chart/index.js +1 -1842
- package/dist/elements/Chart/index.js.map +1 -1
- package/dist/elements/Chart/index.mjs +1 -1832
- package/dist/elements/Chart/index.mjs.map +1 -1
- package/dist/elements/Checkbox/index.js +1 -316
- package/dist/elements/Checkbox/index.js.map +1 -1
- package/dist/elements/Checkbox/index.mjs +1 -306
- package/dist/elements/Checkbox/index.mjs.map +1 -1
- package/dist/elements/CheckboxGroup/index.js +1 -455
- package/dist/elements/CheckboxGroup/index.js.map +1 -1
- package/dist/elements/CheckboxGroup/index.mjs +1 -439
- package/dist/elements/CheckboxGroup/index.mjs.map +1 -1
- package/dist/elements/Combobox/Combobox.d.ts +56 -0
- package/dist/elements/Combobox/Combobox.d.ts.map +1 -0
- package/dist/elements/Combobox/Combobox.styles.d.ts +29 -0
- package/dist/elements/Combobox/Combobox.styles.d.ts.map +1 -0
- package/dist/elements/Combobox/Combobox.types.d.ts +67 -0
- package/dist/elements/Combobox/Combobox.types.d.ts.map +1 -0
- package/dist/elements/Combobox/index.d.ts +20 -0
- package/dist/elements/Combobox/index.d.ts.map +1 -0
- package/dist/elements/Combobox/index.js +3 -0
- package/dist/elements/Combobox/index.js.map +1 -0
- package/dist/elements/Combobox/index.mjs +3 -0
- package/dist/elements/Combobox/index.mjs.map +1 -0
- package/dist/elements/DatePicker/DatePicker.d.ts +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/index.js +1 -903
- package/dist/elements/DatePicker/index.js.map +1 -1
- package/dist/elements/DatePicker/index.mjs +1 -853
- package/dist/elements/DatePicker/index.mjs.map +1 -1
- package/dist/elements/Dropdown/Dropdown.d.ts +7 -15
- package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/elements/Dropdown/Dropdown.styles.d.ts +22 -0
- package/dist/elements/Dropdown/Dropdown.styles.d.ts.map +1 -0
- package/dist/elements/Dropdown/index.d.ts +1 -0
- package/dist/elements/Dropdown/index.d.ts.map +1 -1
- package/dist/elements/Dropdown/index.js +1 -193
- package/dist/elements/Dropdown/index.js.map +1 -1
- package/dist/elements/Dropdown/index.mjs +1 -184
- package/dist/elements/Dropdown/index.mjs.map +1 -1
- package/dist/elements/FileField/index.js +1 -1539
- package/dist/elements/FileField/index.js.map +1 -1
- package/dist/elements/FileField/index.mjs +1 -1507
- package/dist/elements/FileField/index.mjs.map +1 -1
- package/dist/elements/FormLayout/index.js +1 -170
- package/dist/elements/FormLayout/index.js.map +1 -1
- package/dist/elements/FormLayout/index.mjs +1 -167
- package/dist/elements/FormLayout/index.mjs.map +1 -1
- package/dist/elements/Modal/Modal.d.ts +9 -14
- package/dist/elements/Modal/Modal.d.ts.map +1 -1
- package/dist/elements/Modal/Modal.styles.d.ts +29 -0
- package/dist/elements/Modal/Modal.styles.d.ts.map +1 -0
- package/dist/elements/Modal/index.d.ts +1 -0
- package/dist/elements/Modal/index.d.ts.map +1 -1
- package/dist/elements/Modal/index.js +1 -232
- package/dist/elements/Modal/index.js.map +1 -1
- package/dist/elements/Modal/index.mjs +1 -220
- package/dist/elements/Modal/index.mjs.map +1 -1
- package/dist/elements/NumberField/index.js +1 -666
- package/dist/elements/NumberField/index.js.map +1 -1
- package/dist/elements/NumberField/index.mjs +1 -654
- package/dist/elements/NumberField/index.mjs.map +1 -1
- package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -1
- package/dist/elements/OTPInput/index.js +1 -734
- package/dist/elements/OTPInput/index.js.map +1 -1
- package/dist/elements/OTPInput/index.mjs +1 -732
- package/dist/elements/OTPInput/index.mjs.map +1 -1
- package/dist/elements/Pagination/Pagination.d.ts +45 -0
- package/dist/elements/Pagination/Pagination.d.ts.map +1 -0
- package/dist/elements/Pagination/Pagination.styles.d.ts +10 -0
- package/dist/elements/Pagination/Pagination.styles.d.ts.map +1 -0
- package/dist/elements/Pagination/Pagination.types.d.ts +55 -0
- package/dist/elements/Pagination/Pagination.types.d.ts.map +1 -0
- package/dist/elements/Pagination/index.d.ts +21 -0
- package/dist/elements/Pagination/index.d.ts.map +1 -0
- package/dist/elements/Pagination/index.js +3 -0
- package/dist/elements/Pagination/index.js.map +1 -0
- package/dist/elements/Pagination/index.mjs +3 -0
- package/dist/elements/Pagination/index.mjs.map +1 -0
- package/dist/elements/Panel/index.js +1 -330
- package/dist/elements/Panel/index.js.map +1 -1
- package/dist/elements/Panel/index.mjs +1 -323
- package/dist/elements/Panel/index.mjs.map +1 -1
- package/dist/elements/PasswordField/PasswordField.d.ts +27 -0
- package/dist/elements/PasswordField/PasswordField.d.ts.map +1 -0
- package/dist/elements/PasswordField/PasswordField.styles.d.ts +32 -0
- package/dist/elements/PasswordField/PasswordField.styles.d.ts.map +1 -0
- package/dist/elements/PasswordField/PasswordField.types.d.ts +100 -0
- package/dist/elements/PasswordField/PasswordField.types.d.ts.map +1 -0
- package/dist/elements/PasswordField/index.css +2 -0
- package/dist/elements/PasswordField/index.css.map +1 -0
- package/dist/elements/PasswordField/index.d.ts +20 -0
- package/dist/elements/PasswordField/index.d.ts.map +1 -0
- package/dist/elements/PasswordField/index.js +3 -0
- package/dist/elements/PasswordField/index.js.map +1 -0
- package/dist/elements/PasswordField/index.mjs +3 -0
- package/dist/elements/PasswordField/index.mjs.map +1 -0
- package/dist/elements/Progress/index.js +1 -187
- package/dist/elements/Progress/index.js.map +1 -1
- package/dist/elements/Progress/index.mjs +1 -181
- package/dist/elements/Progress/index.mjs.map +1 -1
- package/dist/elements/RadioGroup/index.js +1 -369
- package/dist/elements/RadioGroup/index.js.map +1 -1
- package/dist/elements/RadioGroup/index.mjs +1 -359
- package/dist/elements/RadioGroup/index.mjs.map +1 -1
- package/dist/elements/Resizable/index.js +1 -1580
- package/dist/elements/Resizable/index.js.map +1 -1
- package/dist/elements/Resizable/index.mjs +1 -1566
- package/dist/elements/Resizable/index.mjs.map +1 -1
- package/dist/elements/SearchField/SearchField.d.ts +27 -0
- package/dist/elements/SearchField/SearchField.d.ts.map +1 -0
- package/dist/elements/SearchField/SearchField.styles.d.ts +32 -0
- package/dist/elements/SearchField/SearchField.styles.d.ts.map +1 -0
- package/dist/elements/SearchField/SearchField.types.d.ts +45 -0
- package/dist/elements/SearchField/SearchField.types.d.ts.map +1 -0
- package/dist/elements/SearchField/index.css +2 -0
- package/dist/elements/SearchField/index.css.map +1 -0
- package/dist/elements/SearchField/index.d.ts +21 -0
- package/dist/elements/SearchField/index.d.ts.map +1 -0
- package/dist/elements/SearchField/index.js +3 -0
- package/dist/elements/SearchField/index.js.map +1 -0
- package/dist/elements/SearchField/index.mjs +3 -0
- package/dist/elements/SearchField/index.mjs.map +1 -0
- package/dist/elements/Select/Select.d.ts +19 -48
- package/dist/elements/Select/Select.d.ts.map +1 -1
- package/dist/elements/Select/Select.styles.d.ts +55 -0
- package/dist/elements/Select/Select.styles.d.ts.map +1 -0
- package/dist/elements/Select/index.js +1 -589
- package/dist/elements/Select/index.js.map +1 -1
- package/dist/elements/Select/index.mjs +1 -582
- package/dist/elements/Select/index.mjs.map +1 -1
- package/dist/elements/Skeleton/index.js +1 -82
- package/dist/elements/Skeleton/index.js.map +1 -1
- package/dist/elements/Skeleton/index.mjs +1 -78
- package/dist/elements/Skeleton/index.mjs.map +1 -1
- package/dist/elements/Switch/index.js +1 -179
- package/dist/elements/Switch/index.js.map +1 -1
- package/dist/elements/Switch/index.mjs +1 -173
- package/dist/elements/Switch/index.mjs.map +1 -1
- package/dist/elements/Table/Table.d.ts +3 -24
- package/dist/elements/Table/Table.d.ts.map +1 -1
- package/dist/elements/Table/Table.styles.d.ts +24 -0
- package/dist/elements/Table/Table.styles.d.ts.map +1 -0
- package/dist/elements/Table/index.js +1 -595
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Table/index.mjs +1 -578
- package/dist/elements/Table/index.mjs.map +1 -1
- package/dist/elements/Tabs/index.js +1 -337
- package/dist/elements/Tabs/index.js.map +1 -1
- package/dist/elements/Tabs/index.mjs +1 -320
- package/dist/elements/Tabs/index.mjs.map +1 -1
- package/dist/elements/TextField/TextField.d.ts +6 -42
- package/dist/elements/TextField/TextField.d.ts.map +1 -1
- package/dist/elements/TextField/TextField.hooks.d.ts +63 -0
- package/dist/elements/TextField/TextField.hooks.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.icons.d.ts +19 -0
- package/dist/elements/TextField/TextField.icons.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.styles.d.ts +37 -0
- package/dist/elements/TextField/TextField.styles.d.ts.map +1 -0
- package/dist/elements/TextField/TextField.types.d.ts +3 -0
- package/dist/elements/TextField/TextField.types.d.ts.map +1 -1
- package/dist/elements/TextField/index.css +1 -22
- package/dist/elements/TextField/index.css.map +1 -1
- package/dist/elements/TextField/index.js +1 -902
- package/dist/elements/TextField/index.js.map +1 -1
- package/dist/elements/TextField/index.mjs +1 -882
- package/dist/elements/TextField/index.mjs.map +1 -1
- package/dist/elements/TimeField/index.js +1 -254
- package/dist/elements/TimeField/index.js.map +1 -1
- package/dist/elements/TimeField/index.mjs +1 -238
- package/dist/elements/TimeField/index.mjs.map +1 -1
- package/dist/elements/Toast/Toast.d.ts +0 -22
- package/dist/elements/Toast/Toast.d.ts.map +1 -1
- package/dist/elements/Toast/index.js +1 -737
- package/dist/elements/Toast/index.js.map +1 -1
- package/dist/elements/Toast/index.mjs +1 -724
- package/dist/elements/Toast/index.mjs.map +1 -1
- package/dist/elements/Tooltip/index.js +1 -323
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Tooltip/index.mjs +1 -310
- package/dist/elements/Tooltip/index.mjs.map +1 -1
- package/dist/elements/index.css +1 -22
- package/dist/elements/index.css.map +1 -1
- package/dist/elements/index.d.ts +13 -1
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -12455
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/index.mjs +1 -12233
- package/dist/elements/index.mjs.map +1 -1
- package/dist/index.css +1 -22
- package/dist/index.css.map +1 -1
- package/dist/index.js +2 -12490
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -12262
- package/dist/index.mjs.map +1 -1
- package/dist/schemas/index.js +2 -54
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/index.mjs +2 -48
- package/dist/schemas/index.mjs.map +1 -1
- package/dist/styles/defaults.css +151 -0
- package/dist/styles/index.js +1 -166
- package/dist/styles/index.js.map +1 -1
- package/dist/styles/index.mjs +1 -129
- package/dist/styles/index.mjs.map +1 -1
- package/dist/utils/index.js +1 -12
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +1 -10
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +9 -7
- package/src/elements/Accordion/Accordion.stories.tsx +1 -1
- package/src/elements/AlertDialog/AlertDialog.stories.tsx +124 -0
- package/src/elements/Avatar/Avatar.stories.tsx +1 -1
- package/src/elements/Badge/Badge.stories.tsx +1 -1
- package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +1 -1
- package/src/elements/Button/Button.stories.tsx +1 -1
- package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +1 -1
- package/src/elements/Card/Card.stories.tsx +1 -1
- package/src/elements/Carousel/Carousel.stories.tsx +1 -1
- package/src/elements/Chart/Chart.stories.tsx +1 -1
- package/src/elements/Checkbox/Checkbox.stories.tsx +1 -1
- package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1 -1
- package/src/elements/Combobox/Combobox.stories.tsx +133 -0
- package/src/elements/DatePicker/DatePicker.stories.tsx +1 -1
- package/src/elements/Dropdown/Dropdown.stories.tsx +1 -1
- package/src/elements/FileField/FileField.stories.tsx +1 -1
- package/src/elements/FileField/FileProgress.stories.tsx +1 -1
- package/src/elements/FormLayout/FormLayout.stories.tsx +1 -1
- package/src/elements/Modal/Modal.stories.tsx +1 -1
- package/src/elements/NumberField/NumberField.stories.tsx +1 -1
- package/src/elements/OTPInput/OTPInput.stories.tsx +1 -1
- package/src/elements/Pagination/Pagination.stories.tsx +203 -0
- package/src/elements/Panel/Panel.stories.tsx +1 -1
- package/src/elements/PasswordField/PasswordField.stories.tsx +167 -0
- package/src/elements/Progress/Progress.stories.tsx +1 -1
- package/src/elements/RadioGroup/RadioGroup.stories.tsx +1 -1
- package/src/elements/Resizable/Resizable.stories.tsx +1 -1
- package/src/elements/SearchField/SearchField.stories.tsx +146 -0
- package/src/elements/Select/Select.stories.tsx +1 -1
- package/src/elements/Skeleton/Skeleton.stories.tsx +1 -1
- package/src/elements/Switch/Switch.stories.tsx +1 -1
- package/src/elements/Table/Table.stories.tsx +1 -1
- package/src/elements/Tabs/Tabs.stories.tsx +1 -1
- package/src/elements/TextField/TextField.stories.tsx +1 -1
- package/src/elements/TimeField/TimeField.stories.tsx +1 -1
- package/src/elements/Toast/Toast.stories.tsx +1 -1
- package/src/elements/Tooltip/Tooltip.stories.tsx +1 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { fn } from '@storybook/test';
|
|
3
|
+
import { Combobox, ComboboxItem, ComboboxSection } from './Combobox';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Elements/Combobox',
|
|
7
|
+
component: Combobox,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'centered',
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: 'A filterable select/autocomplete input. Type to filter options, navigate with keyboard, or enter custom values. Built on React Aria ComboBox.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
tags: ['autodocs'],
|
|
17
|
+
argTypes: {
|
|
18
|
+
size: {
|
|
19
|
+
control: { type: 'select' },
|
|
20
|
+
options: ['sm', 'default', 'lg'],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
args: {
|
|
24
|
+
onSelectionChange: fn(),
|
|
25
|
+
onInputChange: fn(),
|
|
26
|
+
},
|
|
27
|
+
} satisfies Meta<typeof Combobox>;
|
|
28
|
+
|
|
29
|
+
export default meta;
|
|
30
|
+
type Story = StoryObj<typeof meta>;
|
|
31
|
+
|
|
32
|
+
export const Default: Story = {
|
|
33
|
+
render: (args) => (
|
|
34
|
+
<Combobox label="Framework" placeholder="Select a framework..." {...args}>
|
|
35
|
+
<ComboboxItem id="react">React</ComboboxItem>
|
|
36
|
+
<ComboboxItem id="vue">Vue</ComboboxItem>
|
|
37
|
+
<ComboboxItem id="angular">Angular</ComboboxItem>
|
|
38
|
+
<ComboboxItem id="svelte">Svelte</ComboboxItem>
|
|
39
|
+
<ComboboxItem id="solid">SolidJS</ComboboxItem>
|
|
40
|
+
</Combobox>
|
|
41
|
+
),
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const WithSections: Story = {
|
|
45
|
+
render: (args) => (
|
|
46
|
+
<Combobox label="Technology" placeholder="Choose..." {...args}>
|
|
47
|
+
<ComboboxSection header="Frontend">
|
|
48
|
+
<ComboboxItem id="react">React</ComboboxItem>
|
|
49
|
+
<ComboboxItem id="vue">Vue</ComboboxItem>
|
|
50
|
+
<ComboboxItem id="angular">Angular</ComboboxItem>
|
|
51
|
+
</ComboboxSection>
|
|
52
|
+
<ComboboxSection header="Backend">
|
|
53
|
+
<ComboboxItem id="express">Express</ComboboxItem>
|
|
54
|
+
<ComboboxItem id="fastify">Fastify</ComboboxItem>
|
|
55
|
+
<ComboboxItem id="nest">NestJS</ComboboxItem>
|
|
56
|
+
</ComboboxSection>
|
|
57
|
+
</Combobox>
|
|
58
|
+
),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const AllowsCustomValue: Story = {
|
|
62
|
+
render: (args) => (
|
|
63
|
+
<Combobox label="Color" placeholder="Type a color..." allowsCustomValue {...args}>
|
|
64
|
+
<ComboboxItem id="red">Red</ComboboxItem>
|
|
65
|
+
<ComboboxItem id="blue">Blue</ComboboxItem>
|
|
66
|
+
<ComboboxItem id="green">Green</ComboboxItem>
|
|
67
|
+
</Combobox>
|
|
68
|
+
),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const WithDescription: Story = {
|
|
72
|
+
render: (args) => (
|
|
73
|
+
<Combobox label="Language" description="Choose your preferred language" placeholder="Select..." {...args}>
|
|
74
|
+
<ComboboxItem id="en">English</ComboboxItem>
|
|
75
|
+
<ComboboxItem id="fr">French</ComboboxItem>
|
|
76
|
+
<ComboboxItem id="de">German</ComboboxItem>
|
|
77
|
+
</Combobox>
|
|
78
|
+
),
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const WithError: Story = {
|
|
82
|
+
render: (args) => (
|
|
83
|
+
<Combobox label="Country" errorMessage="Selection is required" placeholder="Select..." {...args}>
|
|
84
|
+
<ComboboxItem id="us">United States</ComboboxItem>
|
|
85
|
+
<ComboboxItem id="uk">United Kingdom</ComboboxItem>
|
|
86
|
+
</Combobox>
|
|
87
|
+
),
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const Disabled: Story = {
|
|
91
|
+
render: (args) => (
|
|
92
|
+
<Combobox label="Disabled" placeholder="Cannot interact" isDisabled {...args}>
|
|
93
|
+
<ComboboxItem id="a">Option A</ComboboxItem>
|
|
94
|
+
</Combobox>
|
|
95
|
+
),
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export const Small: Story = {
|
|
99
|
+
render: (args) => (
|
|
100
|
+
<Combobox label="Small" size="sm" placeholder="Small size..." {...args}>
|
|
101
|
+
<ComboboxItem id="a">Option A</ComboboxItem>
|
|
102
|
+
<ComboboxItem id="b">Option B</ComboboxItem>
|
|
103
|
+
</Combobox>
|
|
104
|
+
),
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export const Large: Story = {
|
|
108
|
+
render: (args) => (
|
|
109
|
+
<Combobox label="Large" size="lg" placeholder="Large size..." {...args}>
|
|
110
|
+
<ComboboxItem id="a">Option A</ComboboxItem>
|
|
111
|
+
<ComboboxItem id="b">Option B</ComboboxItem>
|
|
112
|
+
</Combobox>
|
|
113
|
+
),
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export const AllSizes: Story = {
|
|
117
|
+
render: () => (
|
|
118
|
+
<div className="flex flex-col gap-4 w-[400px]">
|
|
119
|
+
<Combobox label="Small" size="sm" placeholder="Small...">
|
|
120
|
+
<ComboboxItem id="a">Option A</ComboboxItem>
|
|
121
|
+
<ComboboxItem id="b">Option B</ComboboxItem>
|
|
122
|
+
</Combobox>
|
|
123
|
+
<Combobox label="Default" placeholder="Default...">
|
|
124
|
+
<ComboboxItem id="a">Option A</ComboboxItem>
|
|
125
|
+
<ComboboxItem id="b">Option B</ComboboxItem>
|
|
126
|
+
</Combobox>
|
|
127
|
+
<Combobox label="Large" size="lg" placeholder="Large...">
|
|
128
|
+
<ComboboxItem id="a">Option A</ComboboxItem>
|
|
129
|
+
<ComboboxItem id="b">Option B</ComboboxItem>
|
|
130
|
+
</Combobox>
|
|
131
|
+
</div>
|
|
132
|
+
),
|
|
133
|
+
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* DateField, and Calendar variants and use cases.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
8
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
9
9
|
import { useState } from 'react';
|
|
10
10
|
import { DatePicker, DateRangePicker, DateField, Calendar } from './index';
|
|
11
11
|
import { parseDate, today, getLocalTimeZone, isWeekend } from '@internationalized/date';
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @see tasks.md T027 (Storybook stories with 7+ examples)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
8
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
9
9
|
import { Dropdown } from './Dropdown';
|
|
10
10
|
import { Button } from '../Button';
|
|
11
11
|
import {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { useState, type FormEvent } from 'react';
|
|
10
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
10
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
11
11
|
import { FileField } from './FileField';
|
|
12
12
|
import { formatFileSize, formatAcceptedTypes } from './utils';
|
|
13
13
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @see future-plan.md Section 2: Upload Progress Indication
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
8
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
9
9
|
import { FileProgress } from './FileProgress';
|
|
10
10
|
|
|
11
11
|
// Create mock file helper
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @see FormLayout-design-decisions.md (Visual specifications)
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
9
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
10
10
|
import { FormLayout } from './FormLayout';
|
|
11
11
|
import { Button } from '../Button/Button';
|
|
12
12
|
import { TextField } from '../TextField/TextField';
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @see ACCESSIBILITY.md (WCAG 2.2 AAA Compliance Documentation)
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
9
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
10
10
|
import { OTPInput } from './OTPInput';
|
|
11
11
|
import { useState } from 'react';
|
|
12
12
|
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
+
import { Pagination } from './Pagination';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Elements/Pagination',
|
|
7
|
+
component: Pagination,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'centered',
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: 'Navigation component for paginated content. Supports page numbers, prev/next, first/last buttons, and multiple visual variants.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
tags: ['autodocs'],
|
|
17
|
+
argTypes: {
|
|
18
|
+
size: {
|
|
19
|
+
control: { type: 'select' },
|
|
20
|
+
options: ['sm', 'default', 'lg'],
|
|
21
|
+
},
|
|
22
|
+
variant: {
|
|
23
|
+
control: { type: 'select' },
|
|
24
|
+
options: ['default', 'outline', 'ghost'],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
} satisfies Meta<typeof Pagination>;
|
|
28
|
+
|
|
29
|
+
export default meta;
|
|
30
|
+
type Story = StoryObj<typeof meta>;
|
|
31
|
+
|
|
32
|
+
export const Default: Story = {
|
|
33
|
+
args: {
|
|
34
|
+
page: 1,
|
|
35
|
+
totalPages: 10,
|
|
36
|
+
onPageChange: () => {},
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const Interactive: Story = {
|
|
41
|
+
render: () => {
|
|
42
|
+
const [page, setPage] = useState(1);
|
|
43
|
+
return (
|
|
44
|
+
<div className="flex flex-col items-center gap-4">
|
|
45
|
+
<Pagination page={page} totalPages={20} onPageChange={setPage} />
|
|
46
|
+
<p className="text-sm text-[var(--muted-foreground)]">
|
|
47
|
+
Page {page} of 20
|
|
48
|
+
</p>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const MiddlePage: Story = {
|
|
55
|
+
args: {
|
|
56
|
+
page: 5,
|
|
57
|
+
totalPages: 10,
|
|
58
|
+
onPageChange: () => {},
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const LastPage: Story = {
|
|
63
|
+
args: {
|
|
64
|
+
page: 10,
|
|
65
|
+
totalPages: 10,
|
|
66
|
+
onPageChange: () => {},
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const FewPages: Story = {
|
|
71
|
+
args: {
|
|
72
|
+
page: 2,
|
|
73
|
+
totalPages: 3,
|
|
74
|
+
onPageChange: () => {},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const SinglePage: Story = {
|
|
79
|
+
args: {
|
|
80
|
+
page: 1,
|
|
81
|
+
totalPages: 1,
|
|
82
|
+
onPageChange: () => {},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const ManyPages: Story = {
|
|
87
|
+
args: {
|
|
88
|
+
page: 50,
|
|
89
|
+
totalPages: 100,
|
|
90
|
+
onPageChange: () => {},
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const OutlineVariant: Story = {
|
|
95
|
+
args: {
|
|
96
|
+
page: 3,
|
|
97
|
+
totalPages: 10,
|
|
98
|
+
variant: 'outline',
|
|
99
|
+
onPageChange: () => {},
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export const GhostVariant: Story = {
|
|
104
|
+
args: {
|
|
105
|
+
page: 3,
|
|
106
|
+
totalPages: 10,
|
|
107
|
+
variant: 'ghost',
|
|
108
|
+
onPageChange: () => {},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const SmallSize: Story = {
|
|
113
|
+
args: {
|
|
114
|
+
page: 3,
|
|
115
|
+
totalPages: 10,
|
|
116
|
+
size: 'sm',
|
|
117
|
+
onPageChange: () => {},
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const LargeSize: Story = {
|
|
122
|
+
args: {
|
|
123
|
+
page: 3,
|
|
124
|
+
totalPages: 10,
|
|
125
|
+
size: 'lg',
|
|
126
|
+
onPageChange: () => {},
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export const Disabled: Story = {
|
|
131
|
+
args: {
|
|
132
|
+
page: 5,
|
|
133
|
+
totalPages: 10,
|
|
134
|
+
isDisabled: true,
|
|
135
|
+
onPageChange: () => {},
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const NoFirstLast: Story = {
|
|
140
|
+
args: {
|
|
141
|
+
page: 5,
|
|
142
|
+
totalPages: 10,
|
|
143
|
+
showFirstLast: false,
|
|
144
|
+
onPageChange: () => {},
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
export const NoPrevNext: Story = {
|
|
149
|
+
args: {
|
|
150
|
+
page: 5,
|
|
151
|
+
totalPages: 10,
|
|
152
|
+
showPrevNext: false,
|
|
153
|
+
onPageChange: () => {},
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export const PageNumbersOnly: Story = {
|
|
158
|
+
args: {
|
|
159
|
+
page: 5,
|
|
160
|
+
totalPages: 10,
|
|
161
|
+
showFirstLast: false,
|
|
162
|
+
showPrevNext: false,
|
|
163
|
+
onPageChange: () => {},
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export const AllVariants: Story = {
|
|
168
|
+
render: () => (
|
|
169
|
+
<div className="flex flex-col gap-6">
|
|
170
|
+
<div>
|
|
171
|
+
<p className="text-sm text-[var(--muted-foreground)] mb-2">Default</p>
|
|
172
|
+
<Pagination page={5} totalPages={10} variant="default" onPageChange={() => {}} />
|
|
173
|
+
</div>
|
|
174
|
+
<div>
|
|
175
|
+
<p className="text-sm text-[var(--muted-foreground)] mb-2">Outline</p>
|
|
176
|
+
<Pagination page={5} totalPages={10} variant="outline" onPageChange={() => {}} />
|
|
177
|
+
</div>
|
|
178
|
+
<div>
|
|
179
|
+
<p className="text-sm text-[var(--muted-foreground)] mb-2">Ghost</p>
|
|
180
|
+
<Pagination page={5} totalPages={10} variant="ghost" onPageChange={() => {}} />
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
),
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export const AllSizes: Story = {
|
|
187
|
+
render: () => (
|
|
188
|
+
<div className="flex flex-col gap-6">
|
|
189
|
+
<div>
|
|
190
|
+
<p className="text-sm text-[var(--muted-foreground)] mb-2">Small</p>
|
|
191
|
+
<Pagination page={5} totalPages={10} size="sm" onPageChange={() => {}} />
|
|
192
|
+
</div>
|
|
193
|
+
<div>
|
|
194
|
+
<p className="text-sm text-[var(--muted-foreground)] mb-2">Default</p>
|
|
195
|
+
<Pagination page={5} totalPages={10} size="default" onPageChange={() => {}} />
|
|
196
|
+
</div>
|
|
197
|
+
<div>
|
|
198
|
+
<p className="text-sm text-[var(--muted-foreground)] mb-2">Large</p>
|
|
199
|
+
<Pagination page={5} totalPages={10} size="lg" onPageChange={() => {}} />
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
),
|
|
203
|
+
};
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import { useState, type ReactElement } from 'react';
|
|
16
|
-
import type { Meta, StoryObj } from '@storybook/
|
|
16
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
17
17
|
import { Panel } from './Panel';
|
|
18
18
|
import { Button } from '../Button';
|
|
19
19
|
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PasswordField Component Stories
|
|
3
|
+
* Storybook stories for PasswordField component demonstrating all variants, sizes, and states
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
7
|
+
import { PasswordField } from './PasswordField';
|
|
8
|
+
|
|
9
|
+
const meta = {
|
|
10
|
+
title: 'Elements/PasswordField',
|
|
11
|
+
component: PasswordField,
|
|
12
|
+
parameters: {
|
|
13
|
+
layout: 'centered',
|
|
14
|
+
docs: {
|
|
15
|
+
description: {
|
|
16
|
+
component:
|
|
17
|
+
'A specialized password input with show/hide toggle. Built on Themis TextField for WCAG 2.2 AAA compliance.',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
tags: ['autodocs'],
|
|
22
|
+
argTypes: {
|
|
23
|
+
size: {
|
|
24
|
+
control: { type: 'select' },
|
|
25
|
+
options: ['sm', 'default', 'lg'],
|
|
26
|
+
description: 'The size variant of the password field',
|
|
27
|
+
},
|
|
28
|
+
isDisabled: {
|
|
29
|
+
control: 'boolean',
|
|
30
|
+
description: 'Whether the password field is disabled',
|
|
31
|
+
},
|
|
32
|
+
isReadOnly: {
|
|
33
|
+
control: 'boolean',
|
|
34
|
+
description: 'Whether the password field is read-only',
|
|
35
|
+
},
|
|
36
|
+
isRequired: {
|
|
37
|
+
control: 'boolean',
|
|
38
|
+
description: 'Whether the password field is required',
|
|
39
|
+
},
|
|
40
|
+
hasToggle: {
|
|
41
|
+
control: 'boolean',
|
|
42
|
+
description: 'Whether to show the password visibility toggle',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
} satisfies Meta<typeof PasswordField>;
|
|
46
|
+
|
|
47
|
+
export default meta;
|
|
48
|
+
type Story = StoryObj<typeof meta>;
|
|
49
|
+
|
|
50
|
+
export const Default: Story = {
|
|
51
|
+
args: {
|
|
52
|
+
label: 'Password',
|
|
53
|
+
placeholder: 'Enter your password',
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const WithDescription: Story = {
|
|
58
|
+
args: {
|
|
59
|
+
label: 'Password',
|
|
60
|
+
placeholder: 'Enter your password',
|
|
61
|
+
description: 'Must be at least 8 characters',
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const WithError: Story = {
|
|
66
|
+
args: {
|
|
67
|
+
label: 'Password',
|
|
68
|
+
placeholder: 'Enter your password',
|
|
69
|
+
errorMessage: 'Password must be at least 8 characters',
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const WithSuccess: Story = {
|
|
74
|
+
args: {
|
|
75
|
+
label: 'Password',
|
|
76
|
+
placeholder: 'Enter your password',
|
|
77
|
+
successMessage: 'Strong password!',
|
|
78
|
+
defaultValue: 'SecureP@ss123',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const NoToggle: Story = {
|
|
83
|
+
args: {
|
|
84
|
+
label: 'Password',
|
|
85
|
+
placeholder: 'Enter your password',
|
|
86
|
+
hasToggle: false,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const NewPassword: Story = {
|
|
91
|
+
args: {
|
|
92
|
+
label: 'New Password',
|
|
93
|
+
placeholder: 'Create a password',
|
|
94
|
+
autoComplete: 'new-password',
|
|
95
|
+
description: 'Use at least 8 characters with a mix of letters, numbers, and symbols',
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export const Required: Story = {
|
|
100
|
+
args: {
|
|
101
|
+
label: 'Password',
|
|
102
|
+
placeholder: 'Required',
|
|
103
|
+
isRequired: true,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export const Disabled: Story = {
|
|
108
|
+
args: {
|
|
109
|
+
label: 'Password',
|
|
110
|
+
placeholder: 'Disabled',
|
|
111
|
+
isDisabled: true,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export const ReadOnly: Story = {
|
|
116
|
+
args: {
|
|
117
|
+
label: 'Password',
|
|
118
|
+
defaultValue: 'readonly-value',
|
|
119
|
+
isReadOnly: true,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const Small: Story = {
|
|
124
|
+
args: {
|
|
125
|
+
label: 'Password',
|
|
126
|
+
placeholder: 'Small',
|
|
127
|
+
size: 'sm',
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export const Large: Story = {
|
|
132
|
+
args: {
|
|
133
|
+
label: 'Password',
|
|
134
|
+
placeholder: 'Large',
|
|
135
|
+
size: 'lg',
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const AllSizes: Story = {
|
|
140
|
+
render: () => (
|
|
141
|
+
<div className="flex flex-col gap-4 w-[400px]">
|
|
142
|
+
<PasswordField label="Small" size="sm" placeholder="Small password..." />
|
|
143
|
+
<PasswordField label="Default" size="default" placeholder="Default password..." />
|
|
144
|
+
<PasswordField label="Large" size="lg" placeholder="Large password..." />
|
|
145
|
+
</div>
|
|
146
|
+
),
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export const LoginForm: Story = {
|
|
150
|
+
render: () => (
|
|
151
|
+
<div className="flex flex-col gap-4 w-[400px]">
|
|
152
|
+
<PasswordField
|
|
153
|
+
label="Current Password"
|
|
154
|
+
placeholder="Enter current password"
|
|
155
|
+
autoComplete="current-password"
|
|
156
|
+
isRequired
|
|
157
|
+
/>
|
|
158
|
+
<PasswordField
|
|
159
|
+
label="New Password"
|
|
160
|
+
placeholder="Create new password"
|
|
161
|
+
autoComplete="new-password"
|
|
162
|
+
description="Must be at least 8 characters"
|
|
163
|
+
isRequired
|
|
164
|
+
/>
|
|
165
|
+
</div>
|
|
166
|
+
),
|
|
167
|
+
};
|