@tribepad/themis 1.0.16 → 1.0.19
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/Accordion.d.ts +3 -1
- package/dist/elements/Accordion/Accordion.d.ts.map +1 -1
- package/dist/elements/Accordion/index.js +1 -1
- package/dist/elements/Accordion/index.js.map +1 -1
- package/dist/elements/Accordion/index.mjs +1 -1
- package/dist/elements/Accordion/index.mjs.map +1 -1
- package/dist/elements/AlertDialog/index.js +1 -1
- package/dist/elements/AlertDialog/index.js.map +1 -1
- package/dist/elements/AlertDialog/index.mjs +1 -1
- package/dist/elements/AlertDialog/index.mjs.map +1 -1
- package/dist/elements/Breadcrumbs/index.js +1 -1
- package/dist/elements/Breadcrumbs/index.js.map +1 -1
- package/dist/elements/Breadcrumbs/index.mjs +1 -1
- package/dist/elements/Breadcrumbs/index.mjs.map +1 -1
- package/dist/elements/Button/Button.d.ts.map +1 -1
- package/dist/elements/Button/index.js +1 -1
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/index.mjs +1 -1
- package/dist/elements/Button/index.mjs.map +1 -1
- package/dist/elements/Card/Card.d.ts +21 -1
- package/dist/elements/Card/Card.d.ts.map +1 -1
- package/dist/elements/Card/Card.types.d.ts +36 -0
- package/dist/elements/Card/Card.types.d.ts.map +1 -1
- package/dist/elements/Card/index.d.ts +10 -3
- package/dist/elements/Card/index.d.ts.map +1 -1
- package/dist/elements/Card/index.js +1 -1
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/Card/index.mjs +1 -1
- package/dist/elements/Card/index.mjs.map +1 -1
- package/dist/elements/Carousel/Carousel.d.ts.map +1 -1
- package/dist/elements/Carousel/index.js +1 -1
- package/dist/elements/Carousel/index.js.map +1 -1
- package/dist/elements/Carousel/index.mjs +1 -1
- package/dist/elements/Carousel/index.mjs.map +1 -1
- package/dist/elements/Chart/Chart.d.ts.map +1 -1
- package/dist/elements/Chart/Chart.types.d.ts +21 -4
- package/dist/elements/Chart/Chart.types.d.ts.map +1 -1
- package/dist/elements/Chart/ChartAreaSeries.d.ts +32 -0
- package/dist/elements/Chart/ChartAreaSeries.d.ts.map +1 -0
- package/dist/elements/Chart/ChartContext.d.ts +4 -1
- package/dist/elements/Chart/ChartContext.d.ts.map +1 -1
- package/dist/elements/Chart/ChartLegend.d.ts +2 -2
- package/dist/elements/Chart/ChartLegend.d.ts.map +1 -1
- package/dist/elements/Chart/ChartPieSeries.d.ts +28 -0
- package/dist/elements/Chart/ChartPieSeries.d.ts.map +1 -0
- package/dist/elements/Chart/ChartRadarSeries.d.ts +28 -0
- package/dist/elements/Chart/ChartRadarSeries.d.ts.map +1 -0
- package/dist/elements/Chart/ChartSVG.d.ts +7 -1
- package/dist/elements/Chart/ChartSVG.d.ts.map +1 -1
- package/dist/elements/Chart/ChartScatterSeries.d.ts +31 -0
- package/dist/elements/Chart/ChartScatterSeries.d.ts.map +1 -0
- package/dist/elements/Chart/index.js +1 -1
- package/dist/elements/Chart/index.js.map +1 -1
- package/dist/elements/Chart/index.mjs +1 -1
- package/dist/elements/Chart/index.mjs.map +1 -1
- package/dist/elements/Checkbox/index.js +1 -1
- package/dist/elements/Checkbox/index.js.map +1 -1
- package/dist/elements/Checkbox/index.mjs +1 -1
- package/dist/elements/Checkbox/index.mjs.map +1 -1
- package/dist/elements/ColorPicker/ColorPicker.d.ts +20 -0
- package/dist/elements/ColorPicker/ColorPicker.d.ts.map +1 -0
- package/dist/elements/ColorPicker/ColorPicker.styles.d.ts +74 -0
- package/dist/elements/ColorPicker/ColorPicker.styles.d.ts.map +1 -0
- package/dist/elements/ColorPicker/ColorPicker.types.d.ts +113 -0
- package/dist/elements/ColorPicker/ColorPicker.types.d.ts.map +1 -0
- package/dist/elements/ColorPicker/index.d.ts +5 -0
- package/dist/elements/ColorPicker/index.d.ts.map +1 -0
- package/dist/elements/ColorPicker/index.js +3 -0
- package/dist/elements/ColorPicker/index.js.map +1 -0
- package/dist/elements/ColorPicker/index.mjs +3 -0
- package/dist/elements/ColorPicker/index.mjs.map +1 -0
- package/dist/elements/Combobox/Combobox.d.ts +1 -1
- package/dist/elements/Combobox/Combobox.d.ts.map +1 -1
- package/dist/elements/Combobox/Combobox.styles.d.ts.map +1 -1
- package/dist/elements/Combobox/index.js +1 -1
- package/dist/elements/Combobox/index.js.map +1 -1
- package/dist/elements/Combobox/index.mjs +1 -1
- package/dist/elements/Combobox/index.mjs.map +1 -1
- package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/elements/DatePicker/DatePicker.types.d.ts +6 -6
- package/dist/elements/DatePicker/index.js +1 -1
- package/dist/elements/DatePicker/index.js.map +1 -1
- package/dist/elements/DatePicker/index.mjs +1 -1
- package/dist/elements/DatePicker/index.mjs.map +1 -1
- package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/elements/Dropdown/index.js +1 -1
- package/dist/elements/Dropdown/index.js.map +1 -1
- package/dist/elements/Dropdown/index.mjs +1 -1
- package/dist/elements/Dropdown/index.mjs.map +1 -1
- package/dist/elements/FileField/index.js +1 -1
- package/dist/elements/FileField/index.js.map +1 -1
- package/dist/elements/FileField/index.mjs +1 -1
- package/dist/elements/FileField/index.mjs.map +1 -1
- package/dist/elements/Modal/Modal.d.ts +2 -1
- package/dist/elements/Modal/Modal.d.ts.map +1 -1
- package/dist/elements/Modal/index.js +1 -1
- package/dist/elements/Modal/index.js.map +1 -1
- package/dist/elements/Modal/index.mjs +1 -1
- package/dist/elements/Modal/index.mjs.map +1 -1
- package/dist/elements/NumberField/NumberField.d.ts.map +1 -1
- package/dist/elements/NumberField/NumberField.types.d.ts +1 -1
- package/dist/elements/NumberField/NumberField.variants.d.ts.map +1 -1
- package/dist/elements/NumberField/index.js +1 -1
- package/dist/elements/NumberField/index.js.map +1 -1
- package/dist/elements/NumberField/index.mjs +1 -1
- package/dist/elements/NumberField/index.mjs.map +1 -1
- package/dist/elements/OTPInput/OTPInput.d.ts +1 -1
- package/dist/elements/OTPInput/index.js +1 -1
- package/dist/elements/OTPInput/index.js.map +1 -1
- package/dist/elements/OTPInput/index.mjs +1 -1
- package/dist/elements/OTPInput/index.mjs.map +1 -1
- package/dist/elements/Pagination/index.js +1 -1
- package/dist/elements/Pagination/index.js.map +1 -1
- package/dist/elements/Pagination/index.mjs +1 -1
- package/dist/elements/Pagination/index.mjs.map +1 -1
- package/dist/elements/Panel/index.js +1 -1
- package/dist/elements/Panel/index.js.map +1 -1
- package/dist/elements/Panel/index.mjs +1 -1
- package/dist/elements/Panel/index.mjs.map +1 -1
- package/dist/elements/PasswordField/index.js +1 -1
- package/dist/elements/PasswordField/index.js.map +1 -1
- package/dist/elements/PasswordField/index.mjs +1 -1
- package/dist/elements/PasswordField/index.mjs.map +1 -1
- package/dist/elements/Progress/index.js +1 -1
- package/dist/elements/Progress/index.js.map +1 -1
- package/dist/elements/Progress/index.mjs +1 -1
- package/dist/elements/Progress/index.mjs.map +1 -1
- package/dist/elements/RatingScale/index.js +1 -1
- package/dist/elements/RatingScale/index.js.map +1 -1
- package/dist/elements/RatingScale/index.mjs +1 -1
- package/dist/elements/RatingScale/index.mjs.map +1 -1
- package/dist/elements/Resizable/index.js +1 -1
- package/dist/elements/Resizable/index.js.map +1 -1
- package/dist/elements/Resizable/index.mjs +1 -1
- package/dist/elements/Resizable/index.mjs.map +1 -1
- package/dist/elements/SearchField/index.js +1 -1
- package/dist/elements/SearchField/index.js.map +1 -1
- package/dist/elements/SearchField/index.mjs +1 -1
- package/dist/elements/SearchField/index.mjs.map +1 -1
- package/dist/elements/Select/Select.d.ts.map +1 -1
- package/dist/elements/Select/Select.styles.d.ts.map +1 -1
- package/dist/elements/Select/index.js +1 -1
- package/dist/elements/Select/index.js.map +1 -1
- package/dist/elements/Select/index.mjs +1 -1
- package/dist/elements/Select/index.mjs.map +1 -1
- package/dist/elements/SituationalJudgement/index.js +1 -1
- package/dist/elements/SituationalJudgement/index.js.map +1 -1
- package/dist/elements/SituationalJudgement/index.mjs +1 -1
- package/dist/elements/SituationalJudgement/index.mjs.map +1 -1
- package/dist/elements/Table/index.js +1 -1
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/Table/index.mjs +1 -1
- package/dist/elements/Table/index.mjs.map +1 -1
- package/dist/elements/Tabs/index.js +1 -1
- package/dist/elements/Tabs/index.js.map +1 -1
- package/dist/elements/Tabs/index.mjs +1 -1
- package/dist/elements/Tabs/index.mjs.map +1 -1
- package/dist/elements/TextField/TextField.d.ts.map +1 -1
- package/dist/elements/TextField/TextField.styles.d.ts.map +1 -1
- package/dist/elements/TextField/index.js +1 -1
- package/dist/elements/TextField/index.js.map +1 -1
- package/dist/elements/TextField/index.mjs +1 -1
- package/dist/elements/TextField/index.mjs.map +1 -1
- package/dist/elements/TimeField/TimeField.d.ts.map +1 -1
- package/dist/elements/TimeField/TimeField.types.d.ts.map +1 -1
- package/dist/elements/TimeField/index.js +1 -1
- package/dist/elements/TimeField/index.js.map +1 -1
- package/dist/elements/TimeField/index.mjs +1 -1
- package/dist/elements/TimeField/index.mjs.map +1 -1
- package/dist/elements/Toast/Toast.d.ts +21 -43
- package/dist/elements/Toast/Toast.d.ts.map +1 -1
- package/dist/elements/Toast/Toast.types.d.ts +27 -1
- package/dist/elements/Toast/Toast.types.d.ts.map +1 -1
- package/dist/elements/Toast/Toaster.d.ts +0 -12
- package/dist/elements/Toast/Toaster.d.ts.map +1 -1
- package/dist/elements/Toast/index.d.ts +1 -1
- package/dist/elements/Toast/index.d.ts.map +1 -1
- package/dist/elements/Toast/index.js +1 -1
- package/dist/elements/Toast/index.js.map +1 -1
- package/dist/elements/Toast/index.mjs +1 -1
- package/dist/elements/Toast/index.mjs.map +1 -1
- package/dist/elements/Tooltip/index.js +1 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/Tooltip/index.mjs +1 -1
- package/dist/elements/Tooltip/index.mjs.map +1 -1
- package/dist/elements/index.d.ts +3 -1
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -1
- package/dist/elements/index.js.map +1 -1
- package/dist/elements/index.mjs +1 -1
- package/dist/elements/index.mjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/styles/animations.css +110 -0
- package/dist/styles/defaults.css +32 -0
- package/dist/styles/index.d.ts +1 -1
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +1 -1
- package/dist/styles/index.js.map +1 -1
- package/dist/styles/index.mjs +1 -1
- package/dist/styles/index.mjs.map +1 -1
- package/dist/styles/shared-variants.d.ts +21 -2
- package/dist/styles/shared-variants.d.ts.map +1 -1
- package/package.json +35 -34
- package/src/elements/Chart/Chart.stories.tsx +186 -2
- package/src/elements/ColorPicker/ColorPicker.stories.tsx +289 -0
- package/src/elements/Modal/Modal.stories.tsx +6 -9
- package/src/elements/Toast/Toast.stories.tsx +745 -648
|
@@ -29,8 +29,8 @@ const meta = {
|
|
|
29
29
|
argTypes: {
|
|
30
30
|
type: {
|
|
31
31
|
control: 'select',
|
|
32
|
-
options: ['bar', 'line'],
|
|
33
|
-
description: 'Chart type
|
|
32
|
+
options: ['bar', 'line', 'area', 'scatter', 'pie', 'radar'],
|
|
33
|
+
description: 'Chart type',
|
|
34
34
|
},
|
|
35
35
|
variant: {
|
|
36
36
|
control: 'select',
|
|
@@ -614,3 +614,187 @@ export const AllThemes: Story = {
|
|
|
614
614
|
</div>
|
|
615
615
|
),
|
|
616
616
|
};
|
|
617
|
+
|
|
618
|
+
// ============================================================================
|
|
619
|
+
// Area Chart Stories
|
|
620
|
+
// ============================================================================
|
|
621
|
+
|
|
622
|
+
const areaData: DataSeries[] = [
|
|
623
|
+
{
|
|
624
|
+
name: 'Done',
|
|
625
|
+
color: '#155e75',
|
|
626
|
+
data: [
|
|
627
|
+
{ label: 'Week 1', value: 5 },
|
|
628
|
+
{ label: 'Week 2', value: 12 },
|
|
629
|
+
{ label: 'Week 3', value: 18 },
|
|
630
|
+
{ label: 'Week 4', value: 25 },
|
|
631
|
+
],
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
name: 'In Progress',
|
|
635
|
+
color: '#1e40af',
|
|
636
|
+
data: [
|
|
637
|
+
{ label: 'Week 1', value: 8 },
|
|
638
|
+
{ label: 'Week 2', value: 6 },
|
|
639
|
+
{ label: 'Week 3', value: 10 },
|
|
640
|
+
{ label: 'Week 4', value: 7 },
|
|
641
|
+
],
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
name: 'Backlog',
|
|
645
|
+
color: '#64748b',
|
|
646
|
+
data: [
|
|
647
|
+
{ label: 'Week 1', value: 20 },
|
|
648
|
+
{ label: 'Week 2', value: 15 },
|
|
649
|
+
{ label: 'Week 3', value: 10 },
|
|
650
|
+
{ label: 'Week 4', value: 6 },
|
|
651
|
+
],
|
|
652
|
+
},
|
|
653
|
+
];
|
|
654
|
+
|
|
655
|
+
export const AreaChart: Story = {
|
|
656
|
+
args: {
|
|
657
|
+
data: areaData,
|
|
658
|
+
type: 'area',
|
|
659
|
+
title: 'Cumulative Flow',
|
|
660
|
+
description: 'Stacked area showing card distribution over time',
|
|
661
|
+
xAxisLabel: 'Week',
|
|
662
|
+
yAxisLabel: 'Cards',
|
|
663
|
+
stacked: true,
|
|
664
|
+
},
|
|
665
|
+
};
|
|
666
|
+
|
|
667
|
+
export const AreaChartUnstacked: Story = {
|
|
668
|
+
args: {
|
|
669
|
+
data: areaData.slice(0, 2),
|
|
670
|
+
type: 'area',
|
|
671
|
+
title: 'Overlapping Areas',
|
|
672
|
+
description: 'Non-stacked area chart with overlapping series',
|
|
673
|
+
xAxisLabel: 'Week',
|
|
674
|
+
yAxisLabel: 'Cards',
|
|
675
|
+
stacked: false,
|
|
676
|
+
},
|
|
677
|
+
};
|
|
678
|
+
|
|
679
|
+
// ============================================================================
|
|
680
|
+
// Scatter Chart Stories
|
|
681
|
+
// ============================================================================
|
|
682
|
+
|
|
683
|
+
const scatterData: DataSeries[] = [
|
|
684
|
+
{
|
|
685
|
+
name: 'Story',
|
|
686
|
+
color: '#1e40af',
|
|
687
|
+
data: [
|
|
688
|
+
{ label: '1 SP', value: 2 },
|
|
689
|
+
{ label: '2 SP', value: 3 },
|
|
690
|
+
{ label: '3 SP', value: 5 },
|
|
691
|
+
{ label: '5 SP', value: 8 },
|
|
692
|
+
{ label: '8 SP', value: 12 },
|
|
693
|
+
],
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
name: 'Bug',
|
|
697
|
+
color: '#9a3412',
|
|
698
|
+
data: [
|
|
699
|
+
{ label: '1 SP', value: 1 },
|
|
700
|
+
{ label: '2 SP', value: 2 },
|
|
701
|
+
{ label: '3 SP', value: 4 },
|
|
702
|
+
{ label: '5 SP', value: 6 },
|
|
703
|
+
],
|
|
704
|
+
},
|
|
705
|
+
];
|
|
706
|
+
|
|
707
|
+
export const ScatterChart: Story = {
|
|
708
|
+
args: {
|
|
709
|
+
data: scatterData,
|
|
710
|
+
type: 'scatter',
|
|
711
|
+
title: 'Cycle Time vs Story Points',
|
|
712
|
+
description: 'Each point represents a completed card',
|
|
713
|
+
xAxisLabel: 'Story Points',
|
|
714
|
+
yAxisLabel: 'Cycle Time (days)',
|
|
715
|
+
},
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
// ============================================================================
|
|
719
|
+
// Pie / Donut Chart Stories
|
|
720
|
+
// ============================================================================
|
|
721
|
+
|
|
722
|
+
const pieData: DataSeries[] = [
|
|
723
|
+
{
|
|
724
|
+
name: 'Investment',
|
|
725
|
+
data: [
|
|
726
|
+
{ label: 'Features', value: 12 },
|
|
727
|
+
{ label: 'Bugs', value: 5 },
|
|
728
|
+
{ label: 'Tech Debt', value: 3 },
|
|
729
|
+
{ label: 'Spikes', value: 2 },
|
|
730
|
+
],
|
|
731
|
+
},
|
|
732
|
+
];
|
|
733
|
+
|
|
734
|
+
export const PieChart: Story = {
|
|
735
|
+
args: {
|
|
736
|
+
data: pieData,
|
|
737
|
+
type: 'pie',
|
|
738
|
+
title: 'Investment Balance',
|
|
739
|
+
description: 'Distribution of cards by type',
|
|
740
|
+
},
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
export const DonutChart: Story = {
|
|
744
|
+
args: {
|
|
745
|
+
data: pieData,
|
|
746
|
+
type: 'pie',
|
|
747
|
+
innerRadius: 50,
|
|
748
|
+
title: 'Investment Balance (Donut)',
|
|
749
|
+
description: 'Donut variant with inner radius',
|
|
750
|
+
},
|
|
751
|
+
};
|
|
752
|
+
|
|
753
|
+
// ============================================================================
|
|
754
|
+
// Radar Chart Stories
|
|
755
|
+
// ============================================================================
|
|
756
|
+
|
|
757
|
+
const radarData: DataSeries[] = [
|
|
758
|
+
{
|
|
759
|
+
name: 'Performance',
|
|
760
|
+
color: '#1e40af',
|
|
761
|
+
data: [
|
|
762
|
+
{ label: 'Deploy Freq', value: 75 },
|
|
763
|
+
{ label: 'Lead Time', value: 50 },
|
|
764
|
+
{ label: 'Change Fail', value: 25 },
|
|
765
|
+
{ label: 'Recovery', value: 75 },
|
|
766
|
+
{ label: 'Rework', value: 75 },
|
|
767
|
+
],
|
|
768
|
+
},
|
|
769
|
+
];
|
|
770
|
+
|
|
771
|
+
export const RadarChart: Story = {
|
|
772
|
+
args: {
|
|
773
|
+
data: radarData,
|
|
774
|
+
type: 'radar',
|
|
775
|
+
title: 'DORA Performance',
|
|
776
|
+
description: 'Radar view of DORA metrics',
|
|
777
|
+
},
|
|
778
|
+
};
|
|
779
|
+
|
|
780
|
+
export const RadarChartMultiSeries: Story = {
|
|
781
|
+
args: {
|
|
782
|
+
data: [
|
|
783
|
+
...radarData,
|
|
784
|
+
{
|
|
785
|
+
name: 'Target',
|
|
786
|
+
color: '#155e75',
|
|
787
|
+
data: [
|
|
788
|
+
{ label: 'Deploy Freq', value: 90 },
|
|
789
|
+
{ label: 'Lead Time', value: 80 },
|
|
790
|
+
{ label: 'Change Fail', value: 90 },
|
|
791
|
+
{ label: 'Recovery', value: 85 },
|
|
792
|
+
{ label: 'Rework', value: 80 },
|
|
793
|
+
],
|
|
794
|
+
},
|
|
795
|
+
],
|
|
796
|
+
type: 'radar',
|
|
797
|
+
title: 'DORA: Actual vs Target',
|
|
798
|
+
description: 'Multi-series radar comparing current performance to targets',
|
|
799
|
+
},
|
|
800
|
+
};
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ColorPicker Component Stories
|
|
3
|
+
*
|
|
4
|
+
* Storybook stories demonstrating all modes, variants, sizes, and states.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { useState } from 'react';
|
|
8
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
9
|
+
import { ColorPicker } from './ColorPicker';
|
|
10
|
+
import type { Color } from 'react-aria-components';
|
|
11
|
+
|
|
12
|
+
const meta = {
|
|
13
|
+
title: 'Elements/ColorPicker',
|
|
14
|
+
component: ColorPicker,
|
|
15
|
+
parameters: {
|
|
16
|
+
layout: 'centered',
|
|
17
|
+
docs: {
|
|
18
|
+
description: {
|
|
19
|
+
component:
|
|
20
|
+
'Accessible color picker with swatch presets, advanced picker, or both. Built on React Aria ColorPicker and ColorSwatchPicker primitives for WCAG 2.2 AAA compliance.',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
tags: ['autodocs'],
|
|
25
|
+
argTypes: {
|
|
26
|
+
mode: {
|
|
27
|
+
control: 'select',
|
|
28
|
+
options: ['swatch', 'advanced', 'both'],
|
|
29
|
+
description: 'Which picker UI to display',
|
|
30
|
+
table: { defaultValue: { summary: 'both' } },
|
|
31
|
+
},
|
|
32
|
+
size: {
|
|
33
|
+
control: 'select',
|
|
34
|
+
options: ['sm', 'default', 'lg'],
|
|
35
|
+
description: 'Size variant',
|
|
36
|
+
table: { defaultValue: { summary: 'default' } },
|
|
37
|
+
},
|
|
38
|
+
label: {
|
|
39
|
+
control: 'text',
|
|
40
|
+
description: 'Label text',
|
|
41
|
+
},
|
|
42
|
+
description: {
|
|
43
|
+
control: 'text',
|
|
44
|
+
description: 'Helper text below the label',
|
|
45
|
+
},
|
|
46
|
+
errorMessage: {
|
|
47
|
+
control: 'text',
|
|
48
|
+
description: 'Error message when isInvalid is true',
|
|
49
|
+
},
|
|
50
|
+
isDisabled: {
|
|
51
|
+
control: 'boolean',
|
|
52
|
+
description: 'Whether the picker is disabled',
|
|
53
|
+
},
|
|
54
|
+
isRequired: {
|
|
55
|
+
control: 'boolean',
|
|
56
|
+
description: 'Whether a value is required',
|
|
57
|
+
},
|
|
58
|
+
isInvalid: {
|
|
59
|
+
control: 'boolean',
|
|
60
|
+
description: 'Whether the field is in an invalid state',
|
|
61
|
+
},
|
|
62
|
+
isReadOnly: {
|
|
63
|
+
control: 'boolean',
|
|
64
|
+
description: 'Whether the field is read-only',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
} satisfies Meta<typeof ColorPicker>;
|
|
68
|
+
|
|
69
|
+
export default meta;
|
|
70
|
+
type Story = StoryObj<typeof meta>;
|
|
71
|
+
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// Default (Both Mode)
|
|
74
|
+
// =============================================================================
|
|
75
|
+
|
|
76
|
+
export const Default: Story = {
|
|
77
|
+
args: {
|
|
78
|
+
label: 'Brand Color',
|
|
79
|
+
defaultValue: '#7c3aed',
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// =============================================================================
|
|
84
|
+
// Swatch Only
|
|
85
|
+
// =============================================================================
|
|
86
|
+
|
|
87
|
+
export const SwatchOnly: Story = {
|
|
88
|
+
args: {
|
|
89
|
+
label: 'Pick a color',
|
|
90
|
+
mode: 'swatch',
|
|
91
|
+
defaultValue: '#ff0000',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// =============================================================================
|
|
96
|
+
// Advanced Only
|
|
97
|
+
// =============================================================================
|
|
98
|
+
|
|
99
|
+
export const AdvancedOnly: Story = {
|
|
100
|
+
args: {
|
|
101
|
+
label: 'Custom Color',
|
|
102
|
+
mode: 'advanced',
|
|
103
|
+
defaultValue: '#4a86e8',
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// =============================================================================
|
|
108
|
+
// Custom Swatch Colors
|
|
109
|
+
// =============================================================================
|
|
110
|
+
|
|
111
|
+
export const CustomColors: Story = {
|
|
112
|
+
args: {
|
|
113
|
+
label: 'Theme Color',
|
|
114
|
+
mode: 'swatch',
|
|
115
|
+
colors: [
|
|
116
|
+
'#ef4444', '#f97316', '#eab308', '#22c55e',
|
|
117
|
+
'#06b6d4', '#3b82f6', '#8b5cf6', '#ec4899',
|
|
118
|
+
],
|
|
119
|
+
defaultValue: '#3b82f6',
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// =============================================================================
|
|
124
|
+
// With Description
|
|
125
|
+
// =============================================================================
|
|
126
|
+
|
|
127
|
+
export const WithDescription: Story = {
|
|
128
|
+
args: {
|
|
129
|
+
label: 'Brand Color',
|
|
130
|
+
description: 'Choose the primary color for your brand. This will be used across all marketing materials.',
|
|
131
|
+
defaultValue: '#7c3aed',
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// =============================================================================
|
|
136
|
+
// Required
|
|
137
|
+
// =============================================================================
|
|
138
|
+
|
|
139
|
+
export const Required: Story = {
|
|
140
|
+
args: {
|
|
141
|
+
label: 'Primary Color',
|
|
142
|
+
isRequired: true,
|
|
143
|
+
defaultValue: '#000000',
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// Invalid State
|
|
149
|
+
// =============================================================================
|
|
150
|
+
|
|
151
|
+
export const Invalid: Story = {
|
|
152
|
+
args: {
|
|
153
|
+
label: 'Color',
|
|
154
|
+
isInvalid: true,
|
|
155
|
+
errorMessage: 'Please select a valid brand color',
|
|
156
|
+
defaultValue: '#000000',
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// =============================================================================
|
|
161
|
+
// Disabled
|
|
162
|
+
// =============================================================================
|
|
163
|
+
|
|
164
|
+
export const Disabled: Story = {
|
|
165
|
+
args: {
|
|
166
|
+
label: 'Color',
|
|
167
|
+
isDisabled: true,
|
|
168
|
+
defaultValue: '#7c3aed',
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// =============================================================================
|
|
173
|
+
// Read Only
|
|
174
|
+
// =============================================================================
|
|
175
|
+
|
|
176
|
+
export const ReadOnly: Story = {
|
|
177
|
+
args: {
|
|
178
|
+
label: 'Assigned Color',
|
|
179
|
+
isReadOnly: true,
|
|
180
|
+
defaultValue: '#22c55e',
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// =============================================================================
|
|
185
|
+
// Size: Small
|
|
186
|
+
// =============================================================================
|
|
187
|
+
|
|
188
|
+
export const SizeSmall: Story = {
|
|
189
|
+
args: {
|
|
190
|
+
label: 'Color',
|
|
191
|
+
size: 'sm',
|
|
192
|
+
defaultValue: '#ff0000',
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
// =============================================================================
|
|
197
|
+
// Size: Large
|
|
198
|
+
// =============================================================================
|
|
199
|
+
|
|
200
|
+
export const SizeLarge: Story = {
|
|
201
|
+
args: {
|
|
202
|
+
label: 'Color',
|
|
203
|
+
size: 'lg',
|
|
204
|
+
defaultValue: '#0000ff',
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// =============================================================================
|
|
209
|
+
// Controlled
|
|
210
|
+
// =============================================================================
|
|
211
|
+
|
|
212
|
+
function ControlledExample() {
|
|
213
|
+
const [hex, setHex] = useState('#7c3aed');
|
|
214
|
+
|
|
215
|
+
return (
|
|
216
|
+
<div className="flex flex-col gap-4">
|
|
217
|
+
<ColorPicker
|
|
218
|
+
label="Controlled Color"
|
|
219
|
+
value={hex}
|
|
220
|
+
onChange={(color: Color) => setHex(color.toString('hex'))}
|
|
221
|
+
/>
|
|
222
|
+
<p className="text-sm text-[var(--muted-foreground)]">
|
|
223
|
+
Selected: <code className="font-mono">{hex}</code>
|
|
224
|
+
</p>
|
|
225
|
+
</div>
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export const Controlled: Story = {
|
|
230
|
+
render: () => <ControlledExample />,
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// =============================================================================
|
|
234
|
+
// With Form Name
|
|
235
|
+
// =============================================================================
|
|
236
|
+
|
|
237
|
+
export const WithFormName: Story = {
|
|
238
|
+
args: {
|
|
239
|
+
label: 'Brand Color',
|
|
240
|
+
name: 'brand_color',
|
|
241
|
+
defaultValue: '#7c3aed',
|
|
242
|
+
description: 'This color will be submitted as a hidden form field named "brand_color".',
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// =============================================================================
|
|
247
|
+
// All Sizes Comparison
|
|
248
|
+
// =============================================================================
|
|
249
|
+
|
|
250
|
+
function AllSizesExample() {
|
|
251
|
+
return (
|
|
252
|
+
<div className="flex flex-col gap-6">
|
|
253
|
+
<ColorPicker label="Small" size="sm" mode="advanced" defaultValue="#ef4444" />
|
|
254
|
+
<ColorPicker label="Default" size="default" mode="advanced" defaultValue="#3b82f6" />
|
|
255
|
+
<ColorPicker label="Large" size="lg" mode="advanced" defaultValue="#22c55e" />
|
|
256
|
+
</div>
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export const AllSizes: Story = {
|
|
261
|
+
render: () => <AllSizesExample />,
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
// =============================================================================
|
|
265
|
+
// All Modes Comparison
|
|
266
|
+
// =============================================================================
|
|
267
|
+
|
|
268
|
+
function AllModesExample() {
|
|
269
|
+
return (
|
|
270
|
+
<div className="flex flex-col gap-8">
|
|
271
|
+
<div>
|
|
272
|
+
<h3 className="text-sm font-medium mb-2 text-[var(--content-foreground)]">Swatch Only</h3>
|
|
273
|
+
<ColorPicker mode="swatch" defaultValue="#ff0000" />
|
|
274
|
+
</div>
|
|
275
|
+
<div>
|
|
276
|
+
<h3 className="text-sm font-medium mb-2 text-[var(--content-foreground)]">Advanced Only</h3>
|
|
277
|
+
<ColorPicker mode="advanced" defaultValue="#3b82f6" />
|
|
278
|
+
</div>
|
|
279
|
+
<div>
|
|
280
|
+
<h3 className="text-sm font-medium mb-2 text-[var(--content-foreground)]">Both (Default)</h3>
|
|
281
|
+
<ColorPicker mode="both" defaultValue="#7c3aed" />
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
export const AllModes: Story = {
|
|
288
|
+
render: () => <AllModesExample />,
|
|
289
|
+
};
|
|
@@ -357,8 +357,8 @@ export const NotDismissable: Story = {
|
|
|
357
357
|
|
|
358
358
|
/**
|
|
359
359
|
* Controlled Mode
|
|
360
|
-
* Modal with external state control
|
|
361
|
-
* Demonstrates programmatic open/close
|
|
360
|
+
* Modal with external state control and no trigger
|
|
361
|
+
* Demonstrates programmatic open/close without Modal.Trigger
|
|
362
362
|
*/
|
|
363
363
|
export const ControlledMode: Story = {
|
|
364
364
|
render: () => {
|
|
@@ -368,8 +368,8 @@ export const ControlledMode: Story = {
|
|
|
368
368
|
return (
|
|
369
369
|
<div className="space-y-4">
|
|
370
370
|
<div className="flex gap-2">
|
|
371
|
-
<Button
|
|
372
|
-
<Button variant="outline"
|
|
371
|
+
<Button onPress={() => setIsOpen(true)}>Open Modal</Button>
|
|
372
|
+
<Button variant="outline" onPress={() => setIsOpen(false)}>
|
|
373
373
|
Close Modal
|
|
374
374
|
</Button>
|
|
375
375
|
</div>
|
|
@@ -377,15 +377,12 @@ export const ControlledMode: Story = {
|
|
|
377
377
|
Modal is currently: {isOpen ? 'Open' : 'Closed'}
|
|
378
378
|
</p>
|
|
379
379
|
<Modal isOpen={isOpen} onOpenChange={setIsOpen}>
|
|
380
|
-
<Modal.Trigger>
|
|
381
|
-
<Button>Toggle Modal</Button>
|
|
382
|
-
</Modal.Trigger>
|
|
383
380
|
<Modal.Content>
|
|
384
381
|
<Modal.Header>
|
|
385
382
|
<Modal.Title>Controlled Modal</Modal.Title>
|
|
386
383
|
<Modal.Description>
|
|
387
|
-
This modal is controlled via external state
|
|
388
|
-
close it using the buttons above.
|
|
384
|
+
This modal is controlled via external state with no
|
|
385
|
+
Modal.Trigger. Open and close it using the buttons above.
|
|
389
386
|
</Modal.Description>
|
|
390
387
|
</Modal.Header>
|
|
391
388
|
<Modal.Footer>
|