@godxjp/ui 13.17.3 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/charts/area-chart.d.ts +8 -0
- package/dist/components/charts/area-chart.js +8 -0
- package/dist/components/charts/bar-chart.d.ts +8 -0
- package/dist/components/charts/bar-chart.js +8 -0
- package/dist/components/charts/chart-cartesian.d.ts +31 -0
- package/dist/components/charts/chart-cartesian.js +178 -0
- package/dist/components/charts/chart-frame.d.ts +44 -0
- package/dist/components/charts/chart-frame.js +72 -0
- package/dist/components/charts/chart-summary.d.ts +21 -0
- package/dist/components/charts/chart-summary.js +23 -0
- package/dist/components/charts/index.d.ts +16 -0
- package/dist/components/charts/index.js +12 -0
- package/dist/components/charts/line-chart.d.ts +8 -0
- package/dist/components/charts/line-chart.js +8 -0
- package/dist/components/charts/pie-chart.d.ts +8 -0
- package/dist/components/charts/pie-chart.js +73 -0
- package/dist/components/data-display/card.d.ts +2 -1
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/list-row.d.ts +24 -0
- package/dist/components/data-display/list-row.js +31 -0
- package/dist/components/data-entry/command.d.ts +10 -10
- package/dist/components/data-entry/transfer.js +1 -1
- package/dist/components/general/button.d.ts +1 -0
- package/dist/components/general/button.js +3 -0
- package/dist/components/general/index.d.ts +2 -0
- package/dist/components/general/index.js +4 -1
- package/dist/components/general/logo.d.ts +28 -0
- package/dist/components/general/logo.js +45 -0
- package/dist/components/layout/index.d.ts +1 -1
- package/dist/components/layout/sidebar.js +32 -24
- package/dist/components/layout/topbar.d.ts +19 -2
- package/dist/components/layout/topbar.js +7 -128
- package/dist/i18n/messages/en.json +5 -0
- package/dist/i18n/messages/ja.json +5 -0
- package/dist/i18n/messages/vi.json +5 -0
- package/dist/props/components/charts.prop.d.ts +89 -0
- package/dist/props/components/charts.prop.js +0 -0
- package/dist/props/components/general.prop.d.ts +5 -0
- package/dist/props/components/index.d.ts +2 -1
- package/dist/props/components/layout.prop.d.ts +16 -33
- package/dist/props/registry.d.ts +170 -11
- package/dist/props/registry.js +112 -11
- package/dist/styles/card-layout.css +5 -3
- package/dist/styles/chart-layout.css +37 -0
- package/dist/styles/data-display-layout.css +38 -0
- package/dist/styles/index.css +1 -0
- package/dist/styles/shell-layout.css +39 -0
- package/dist/styles/text-layout.css +3 -0
- package/dist/tokens/base.css +2 -0
- package/dist/tokens/components/card.css +5 -0
- package/dist/tokens/components/list-row.css +9 -0
- package/dist/tokens/components/logo.css +11 -0
- package/dist/tokens/foundation.css +13 -0
- package/package.json +42 -7
- package/scripts/_agent-setup.mjs +145 -0
- package/scripts/audit-hook.mjs +66 -0
- package/scripts/cli.mjs +26 -0
- package/scripts/init-agent-kit.mjs +52 -0
- package/scripts/postinstall.mjs +31 -0
- package/scripts/ui-audit.mjs +165 -3
- package/scripts/visual-audit-rules.mjs +119 -0
- package/scripts/visual-audit.mjs +261 -0
|
@@ -103,37 +103,20 @@ export type SidebarProp = {
|
|
|
103
103
|
renderItem?: (item: SidebarItemData) => ReactNode;
|
|
104
104
|
footer?: ReactNode;
|
|
105
105
|
};
|
|
106
|
-
/**
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
/** Dropdown content for the project chip. When neither `project` nor `projectMenu` is set the
|
|
123
|
-
* project chip is hidden (no dead "Pick project" placeholder). */
|
|
124
|
-
projectMenu?: ReactNode;
|
|
125
|
-
onProductOpen?: () => void;
|
|
126
|
-
onProjectOpen?: () => void;
|
|
127
|
-
onSearchOpen?: () => void;
|
|
128
|
-
onTweaksOpen?: () => void;
|
|
129
|
-
collapsed?: boolean;
|
|
130
|
-
onToggleCollapsed?: () => void;
|
|
131
|
-
rightSlot?: ReactNode;
|
|
132
|
-
unread?: boolean;
|
|
133
|
-
/** Accessible placeholder when project is intentionally unset but a project chip is rendered. */
|
|
134
|
-
projectPlaceholder?: string;
|
|
135
|
-
/** Search-bar placeholder text — defaults to the i18n `layout.topbar.searchPlaceholder`. */
|
|
136
|
-
searchPlaceholder?: string;
|
|
137
|
-
onNotificationsOpen?: () => void;
|
|
138
|
-
user?: ReactNode;
|
|
106
|
+
/**
|
|
107
|
+
* @see Topbar — a PURE SLOT bar (no baked chrome). The library only positions three clusters; the
|
|
108
|
+
* CONSUMER decides what goes in each (brand `Logo`, sidebar toggle, nav, a search trigger, settings
|
|
109
|
+
* pickers like `AppSettingPicker`, a notification button, a user menu). The shell never forces a
|
|
110
|
+
* product switcher, a search box, or a language picker — those are the consumer's components,
|
|
111
|
+
* configured via THEIR own props and dropped into a slot.
|
|
112
|
+
*/
|
|
113
|
+
export type TopbarProp = Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
114
|
+
/** Inline-start cluster — typically the sidebar toggle + brand `Logo` + primary nav. */
|
|
115
|
+
start?: ReactNode;
|
|
116
|
+
/** Center cluster — optional (e.g. a search trigger or a page/entity switcher). */
|
|
117
|
+
center?: ReactNode;
|
|
118
|
+
/** Inline-end cluster — settings pickers, notifications, the user menu. */
|
|
119
|
+
end?: ReactNode;
|
|
120
|
+
/** Escape hatch — render fully custom bar content instead of the three slots. */
|
|
121
|
+
children?: ReactNode;
|
|
139
122
|
};
|
package/dist/props/registry.d.ts
CHANGED
|
@@ -453,20 +453,10 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
453
453
|
readonly file: "components/layout.prop.ts";
|
|
454
454
|
readonly vocabulary: readonly ["IdProp", "OnValueChangeProp", "ChildrenProp"];
|
|
455
455
|
};
|
|
456
|
-
readonly TopbarProductProp: {
|
|
457
|
-
readonly group: "layout";
|
|
458
|
-
readonly file: "components/layout.prop.ts";
|
|
459
|
-
readonly vocabulary: readonly ["LabelProp"];
|
|
460
|
-
};
|
|
461
|
-
readonly TopbarProjectProp: {
|
|
462
|
-
readonly group: "layout";
|
|
463
|
-
readonly file: "components/layout.prop.ts";
|
|
464
|
-
readonly vocabulary: readonly ["LabelProp"];
|
|
465
|
-
};
|
|
466
456
|
readonly TopbarProp: {
|
|
467
457
|
readonly group: "layout";
|
|
468
458
|
readonly file: "components/layout.prop.ts";
|
|
469
|
-
readonly vocabulary: readonly ["ChildrenProp"
|
|
459
|
+
readonly vocabulary: readonly ["ChildrenProp"];
|
|
470
460
|
};
|
|
471
461
|
readonly ButtonProp: {
|
|
472
462
|
readonly group: "general";
|
|
@@ -690,6 +680,175 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
690
680
|
readonly file: "components/data-display.prop.ts";
|
|
691
681
|
readonly vocabulary: readonly ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp"];
|
|
692
682
|
};
|
|
683
|
+
readonly ChartSeriesProp: {
|
|
684
|
+
readonly group: "data-display";
|
|
685
|
+
readonly file: "components/charts.prop.ts";
|
|
686
|
+
readonly vocabulary: readonly ["LabelProp", {
|
|
687
|
+
readonly field: "dataKey";
|
|
688
|
+
readonly local: true;
|
|
689
|
+
readonly reason: "Accessor key into each datum for this series.";
|
|
690
|
+
}, {
|
|
691
|
+
readonly field: "color";
|
|
692
|
+
readonly local: true;
|
|
693
|
+
readonly reason: "Per-series colour override (defaults to --chart-N).";
|
|
694
|
+
}];
|
|
695
|
+
};
|
|
696
|
+
readonly LineChartProp: {
|
|
697
|
+
readonly group: "data-display";
|
|
698
|
+
readonly file: "components/charts.prop.ts";
|
|
699
|
+
readonly vocabulary: readonly ["LabelProp", "DescriptionProp", "SizeProp", "EmptyMessageProp", "ClassNameProp", "IdProp", {
|
|
700
|
+
readonly field: "data";
|
|
701
|
+
readonly local: true;
|
|
702
|
+
readonly reason: "Chart row data (category + value per series).";
|
|
703
|
+
}, {
|
|
704
|
+
readonly field: "series";
|
|
705
|
+
readonly local: true;
|
|
706
|
+
readonly reason: "Plotted series descriptors.";
|
|
707
|
+
}, {
|
|
708
|
+
readonly field: "categoryKey";
|
|
709
|
+
readonly local: true;
|
|
710
|
+
readonly reason: "Accessor key for the x-axis category.";
|
|
711
|
+
}, {
|
|
712
|
+
readonly field: "height";
|
|
713
|
+
readonly local: true;
|
|
714
|
+
readonly reason: "Explicit canvas height px (overrides size tier).";
|
|
715
|
+
}, {
|
|
716
|
+
readonly field: "showLegend";
|
|
717
|
+
readonly local: true;
|
|
718
|
+
readonly reason: "Chart-specific legend toggle.";
|
|
719
|
+
}, {
|
|
720
|
+
readonly field: "showGrid";
|
|
721
|
+
readonly local: true;
|
|
722
|
+
readonly reason: "Chart-specific grid toggle.";
|
|
723
|
+
}, {
|
|
724
|
+
readonly field: "numberFormat";
|
|
725
|
+
readonly local: true;
|
|
726
|
+
readonly reason: "Intl.NumberFormat options for ticks/tooltips.";
|
|
727
|
+
}, {
|
|
728
|
+
readonly field: "curved";
|
|
729
|
+
readonly local: true;
|
|
730
|
+
readonly reason: "Smooth (monotone) line rendering.";
|
|
731
|
+
}];
|
|
732
|
+
};
|
|
733
|
+
readonly BarChartProp: {
|
|
734
|
+
readonly group: "data-display";
|
|
735
|
+
readonly file: "components/charts.prop.ts";
|
|
736
|
+
readonly vocabulary: readonly ["LabelProp", "DescriptionProp", "SizeProp", "EmptyMessageProp", "ClassNameProp", "IdProp", {
|
|
737
|
+
readonly field: "data";
|
|
738
|
+
readonly local: true;
|
|
739
|
+
readonly reason: "Chart row data (category + value per series).";
|
|
740
|
+
}, {
|
|
741
|
+
readonly field: "series";
|
|
742
|
+
readonly local: true;
|
|
743
|
+
readonly reason: "Plotted series descriptors.";
|
|
744
|
+
}, {
|
|
745
|
+
readonly field: "categoryKey";
|
|
746
|
+
readonly local: true;
|
|
747
|
+
readonly reason: "Accessor key for the category axis.";
|
|
748
|
+
}, {
|
|
749
|
+
readonly field: "height";
|
|
750
|
+
readonly local: true;
|
|
751
|
+
readonly reason: "Explicit canvas height px (overrides size tier).";
|
|
752
|
+
}, {
|
|
753
|
+
readonly field: "showLegend";
|
|
754
|
+
readonly local: true;
|
|
755
|
+
readonly reason: "Chart-specific legend toggle.";
|
|
756
|
+
}, {
|
|
757
|
+
readonly field: "showGrid";
|
|
758
|
+
readonly local: true;
|
|
759
|
+
readonly reason: "Chart-specific grid toggle.";
|
|
760
|
+
}, {
|
|
761
|
+
readonly field: "numberFormat";
|
|
762
|
+
readonly local: true;
|
|
763
|
+
readonly reason: "Intl.NumberFormat options for ticks/tooltips.";
|
|
764
|
+
}, {
|
|
765
|
+
readonly field: "stacked";
|
|
766
|
+
readonly local: true;
|
|
767
|
+
readonly reason: "Stack series into one bar.";
|
|
768
|
+
}, {
|
|
769
|
+
readonly field: "horizontal";
|
|
770
|
+
readonly local: true;
|
|
771
|
+
readonly reason: "Category axis on the left.";
|
|
772
|
+
}];
|
|
773
|
+
};
|
|
774
|
+
readonly AreaChartProp: {
|
|
775
|
+
readonly group: "data-display";
|
|
776
|
+
readonly file: "components/charts.prop.ts";
|
|
777
|
+
readonly vocabulary: readonly ["LabelProp", "DescriptionProp", "SizeProp", "EmptyMessageProp", "ClassNameProp", "IdProp", {
|
|
778
|
+
readonly field: "data";
|
|
779
|
+
readonly local: true;
|
|
780
|
+
readonly reason: "Chart row data (category + value per series).";
|
|
781
|
+
}, {
|
|
782
|
+
readonly field: "series";
|
|
783
|
+
readonly local: true;
|
|
784
|
+
readonly reason: "Plotted series descriptors.";
|
|
785
|
+
}, {
|
|
786
|
+
readonly field: "categoryKey";
|
|
787
|
+
readonly local: true;
|
|
788
|
+
readonly reason: "Accessor key for the x-axis category.";
|
|
789
|
+
}, {
|
|
790
|
+
readonly field: "height";
|
|
791
|
+
readonly local: true;
|
|
792
|
+
readonly reason: "Explicit canvas height px (overrides size tier).";
|
|
793
|
+
}, {
|
|
794
|
+
readonly field: "showLegend";
|
|
795
|
+
readonly local: true;
|
|
796
|
+
readonly reason: "Chart-specific legend toggle.";
|
|
797
|
+
}, {
|
|
798
|
+
readonly field: "showGrid";
|
|
799
|
+
readonly local: true;
|
|
800
|
+
readonly reason: "Chart-specific grid toggle.";
|
|
801
|
+
}, {
|
|
802
|
+
readonly field: "numberFormat";
|
|
803
|
+
readonly local: true;
|
|
804
|
+
readonly reason: "Intl.NumberFormat options for ticks/tooltips.";
|
|
805
|
+
}, {
|
|
806
|
+
readonly field: "stacked";
|
|
807
|
+
readonly local: true;
|
|
808
|
+
readonly reason: "Stack series areas.";
|
|
809
|
+
}, {
|
|
810
|
+
readonly field: "curved";
|
|
811
|
+
readonly local: true;
|
|
812
|
+
readonly reason: "Smooth (monotone) area rendering.";
|
|
813
|
+
}];
|
|
814
|
+
};
|
|
815
|
+
readonly PieChartProp: {
|
|
816
|
+
readonly group: "data-display";
|
|
817
|
+
readonly file: "components/charts.prop.ts";
|
|
818
|
+
readonly vocabulary: readonly ["LabelProp", "DescriptionProp", "SizeProp", "EmptyMessageProp", "ClassNameProp", "IdProp", {
|
|
819
|
+
readonly field: "data";
|
|
820
|
+
readonly local: true;
|
|
821
|
+
readonly reason: "Chart row data (one slice per row).";
|
|
822
|
+
}, {
|
|
823
|
+
readonly field: "dataKey";
|
|
824
|
+
readonly local: true;
|
|
825
|
+
readonly reason: "Accessor key for the slice value.";
|
|
826
|
+
}, {
|
|
827
|
+
readonly field: "nameKey";
|
|
828
|
+
readonly local: true;
|
|
829
|
+
readonly reason: "Accessor key for the slice category label.";
|
|
830
|
+
}, {
|
|
831
|
+
readonly field: "colors";
|
|
832
|
+
readonly local: true;
|
|
833
|
+
readonly reason: "Per-slice colour overrides (defaults to --chart-N).";
|
|
834
|
+
}, {
|
|
835
|
+
readonly field: "height";
|
|
836
|
+
readonly local: true;
|
|
837
|
+
readonly reason: "Explicit canvas height px (overrides size tier).";
|
|
838
|
+
}, {
|
|
839
|
+
readonly field: "showLegend";
|
|
840
|
+
readonly local: true;
|
|
841
|
+
readonly reason: "Chart-specific legend toggle.";
|
|
842
|
+
}, {
|
|
843
|
+
readonly field: "numberFormat";
|
|
844
|
+
readonly local: true;
|
|
845
|
+
readonly reason: "Intl.NumberFormat options for tooltips.";
|
|
846
|
+
}, {
|
|
847
|
+
readonly field: "donut";
|
|
848
|
+
readonly local: true;
|
|
849
|
+
readonly reason: "Hollow-centre donut rendering.";
|
|
850
|
+
}];
|
|
851
|
+
};
|
|
693
852
|
readonly AlertDialogProp: {
|
|
694
853
|
readonly group: "feedback";
|
|
695
854
|
readonly file: "components/feedback.prop.ts";
|
package/dist/props/registry.js
CHANGED
|
@@ -431,20 +431,10 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
431
431
|
file: "components/layout.prop.ts",
|
|
432
432
|
vocabulary: ["IdProp", "OnValueChangeProp", "ChildrenProp"]
|
|
433
433
|
},
|
|
434
|
-
TopbarProductProp: {
|
|
435
|
-
group: "layout",
|
|
436
|
-
file: "components/layout.prop.ts",
|
|
437
|
-
vocabulary: ["LabelProp"]
|
|
438
|
-
},
|
|
439
|
-
TopbarProjectProp: {
|
|
440
|
-
group: "layout",
|
|
441
|
-
file: "components/layout.prop.ts",
|
|
442
|
-
vocabulary: ["LabelProp"]
|
|
443
|
-
},
|
|
444
434
|
TopbarProp: {
|
|
445
435
|
group: "layout",
|
|
446
436
|
file: "components/layout.prop.ts",
|
|
447
|
-
vocabulary: ["ChildrenProp"
|
|
437
|
+
vocabulary: ["ChildrenProp"]
|
|
448
438
|
},
|
|
449
439
|
ButtonProp: {
|
|
450
440
|
group: "general",
|
|
@@ -732,6 +722,117 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
732
722
|
file: "components/data-display.prop.ts",
|
|
733
723
|
vocabulary: ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp"]
|
|
734
724
|
},
|
|
725
|
+
ChartSeriesProp: {
|
|
726
|
+
group: "data-display",
|
|
727
|
+
file: "components/charts.prop.ts",
|
|
728
|
+
vocabulary: [
|
|
729
|
+
"LabelProp",
|
|
730
|
+
{ field: "dataKey", local: true, reason: "Accessor key into each datum for this series." },
|
|
731
|
+
{
|
|
732
|
+
field: "color",
|
|
733
|
+
local: true,
|
|
734
|
+
reason: "Per-series colour override (defaults to --chart-N)."
|
|
735
|
+
}
|
|
736
|
+
]
|
|
737
|
+
},
|
|
738
|
+
LineChartProp: {
|
|
739
|
+
group: "data-display",
|
|
740
|
+
file: "components/charts.prop.ts",
|
|
741
|
+
vocabulary: [
|
|
742
|
+
"LabelProp",
|
|
743
|
+
"DescriptionProp",
|
|
744
|
+
"SizeProp",
|
|
745
|
+
"EmptyMessageProp",
|
|
746
|
+
"ClassNameProp",
|
|
747
|
+
"IdProp",
|
|
748
|
+
{ field: "data", local: true, reason: "Chart row data (category + value per series)." },
|
|
749
|
+
{ field: "series", local: true, reason: "Plotted series descriptors." },
|
|
750
|
+
{ field: "categoryKey", local: true, reason: "Accessor key for the x-axis category." },
|
|
751
|
+
{ field: "height", local: true, reason: "Explicit canvas height px (overrides size tier)." },
|
|
752
|
+
{ field: "showLegend", local: true, reason: "Chart-specific legend toggle." },
|
|
753
|
+
{ field: "showGrid", local: true, reason: "Chart-specific grid toggle." },
|
|
754
|
+
{
|
|
755
|
+
field: "numberFormat",
|
|
756
|
+
local: true,
|
|
757
|
+
reason: "Intl.NumberFormat options for ticks/tooltips."
|
|
758
|
+
},
|
|
759
|
+
{ field: "curved", local: true, reason: "Smooth (monotone) line rendering." }
|
|
760
|
+
]
|
|
761
|
+
},
|
|
762
|
+
BarChartProp: {
|
|
763
|
+
group: "data-display",
|
|
764
|
+
file: "components/charts.prop.ts",
|
|
765
|
+
vocabulary: [
|
|
766
|
+
"LabelProp",
|
|
767
|
+
"DescriptionProp",
|
|
768
|
+
"SizeProp",
|
|
769
|
+
"EmptyMessageProp",
|
|
770
|
+
"ClassNameProp",
|
|
771
|
+
"IdProp",
|
|
772
|
+
{ field: "data", local: true, reason: "Chart row data (category + value per series)." },
|
|
773
|
+
{ field: "series", local: true, reason: "Plotted series descriptors." },
|
|
774
|
+
{ field: "categoryKey", local: true, reason: "Accessor key for the category axis." },
|
|
775
|
+
{ field: "height", local: true, reason: "Explicit canvas height px (overrides size tier)." },
|
|
776
|
+
{ field: "showLegend", local: true, reason: "Chart-specific legend toggle." },
|
|
777
|
+
{ field: "showGrid", local: true, reason: "Chart-specific grid toggle." },
|
|
778
|
+
{
|
|
779
|
+
field: "numberFormat",
|
|
780
|
+
local: true,
|
|
781
|
+
reason: "Intl.NumberFormat options for ticks/tooltips."
|
|
782
|
+
},
|
|
783
|
+
{ field: "stacked", local: true, reason: "Stack series into one bar." },
|
|
784
|
+
{ field: "horizontal", local: true, reason: "Category axis on the left." }
|
|
785
|
+
]
|
|
786
|
+
},
|
|
787
|
+
AreaChartProp: {
|
|
788
|
+
group: "data-display",
|
|
789
|
+
file: "components/charts.prop.ts",
|
|
790
|
+
vocabulary: [
|
|
791
|
+
"LabelProp",
|
|
792
|
+
"DescriptionProp",
|
|
793
|
+
"SizeProp",
|
|
794
|
+
"EmptyMessageProp",
|
|
795
|
+
"ClassNameProp",
|
|
796
|
+
"IdProp",
|
|
797
|
+
{ field: "data", local: true, reason: "Chart row data (category + value per series)." },
|
|
798
|
+
{ field: "series", local: true, reason: "Plotted series descriptors." },
|
|
799
|
+
{ field: "categoryKey", local: true, reason: "Accessor key for the x-axis category." },
|
|
800
|
+
{ field: "height", local: true, reason: "Explicit canvas height px (overrides size tier)." },
|
|
801
|
+
{ field: "showLegend", local: true, reason: "Chart-specific legend toggle." },
|
|
802
|
+
{ field: "showGrid", local: true, reason: "Chart-specific grid toggle." },
|
|
803
|
+
{
|
|
804
|
+
field: "numberFormat",
|
|
805
|
+
local: true,
|
|
806
|
+
reason: "Intl.NumberFormat options for ticks/tooltips."
|
|
807
|
+
},
|
|
808
|
+
{ field: "stacked", local: true, reason: "Stack series areas." },
|
|
809
|
+
{ field: "curved", local: true, reason: "Smooth (monotone) area rendering." }
|
|
810
|
+
]
|
|
811
|
+
},
|
|
812
|
+
PieChartProp: {
|
|
813
|
+
group: "data-display",
|
|
814
|
+
file: "components/charts.prop.ts",
|
|
815
|
+
vocabulary: [
|
|
816
|
+
"LabelProp",
|
|
817
|
+
"DescriptionProp",
|
|
818
|
+
"SizeProp",
|
|
819
|
+
"EmptyMessageProp",
|
|
820
|
+
"ClassNameProp",
|
|
821
|
+
"IdProp",
|
|
822
|
+
{ field: "data", local: true, reason: "Chart row data (one slice per row)." },
|
|
823
|
+
{ field: "dataKey", local: true, reason: "Accessor key for the slice value." },
|
|
824
|
+
{ field: "nameKey", local: true, reason: "Accessor key for the slice category label." },
|
|
825
|
+
{
|
|
826
|
+
field: "colors",
|
|
827
|
+
local: true,
|
|
828
|
+
reason: "Per-slice colour overrides (defaults to --chart-N)."
|
|
829
|
+
},
|
|
830
|
+
{ field: "height", local: true, reason: "Explicit canvas height px (overrides size tier)." },
|
|
831
|
+
{ field: "showLegend", local: true, reason: "Chart-specific legend toggle." },
|
|
832
|
+
{ field: "numberFormat", local: true, reason: "Intl.NumberFormat options for tooltips." },
|
|
833
|
+
{ field: "donut", local: true, reason: "Hollow-centre donut rendering." }
|
|
834
|
+
]
|
|
835
|
+
},
|
|
735
836
|
AlertDialogProp: {
|
|
736
837
|
group: "feedback",
|
|
737
838
|
file: "components/feedback.prop.ts",
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
--card-space-body-y: var(--space-5);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/* ── Accent edge —
|
|
58
|
+
/* ── Accent edge — semantic left stripe (token width), content on shell ─ */
|
|
59
59
|
[data-slot="card"][data-accent] {
|
|
60
|
-
border-inline-start-width:
|
|
60
|
+
border-inline-start-width: var(--card-accent-rail-width);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
[data-slot="card"][data-accent="primary"] {
|
|
@@ -87,7 +87,9 @@
|
|
|
87
87
|
[data-slot="card"][data-accent] > [data-slot="card-header"],
|
|
88
88
|
[data-slot="card"][data-accent] > [data-slot="card-content"]:not([data-flush]),
|
|
89
89
|
[data-slot="card"][data-accent] > [data-slot="card-footer"]:not([data-flush]) {
|
|
90
|
-
padding-inline-start: calc(
|
|
90
|
+
padding-inline-start: calc(
|
|
91
|
+
var(--card-space-inset) - var(--card-accent-rail-width)
|
|
92
|
+
);
|
|
91
93
|
}
|
|
92
94
|
|
|
93
95
|
/* ── Header ──────────────────────────────────────────────────────────── */
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* Chart layout — the accessible figure chrome for `@godxjp/ui/charts`.
|
|
2
|
+
* Colours come from the foundation `--chart-1..6` + semantic tokens; recharts
|
|
3
|
+
* draws the SVG itself. Logical properties only (RTL-safe). */
|
|
4
|
+
|
|
5
|
+
.ui-chart {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--space-stack-sm);
|
|
9
|
+
margin: 0;
|
|
10
|
+
inline-size: 100%;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.ui-chart-title {
|
|
14
|
+
font-size: var(--font-size-sm);
|
|
15
|
+
font-weight: var(--font-weight-medium);
|
|
16
|
+
color: hsl(var(--foreground));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ui-chart-canvas {
|
|
20
|
+
inline-size: 100%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* recharts legend/axis text inherits the design typography + muted tone. */
|
|
24
|
+
.ui-chart .recharts-text,
|
|
25
|
+
.ui-chart .recharts-legend-item-text {
|
|
26
|
+
font-size: var(--font-size-xs);
|
|
27
|
+
fill: hsl(var(--muted-foreground));
|
|
28
|
+
color: hsl(var(--muted-foreground));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.ui-chart .recharts-default-tooltip {
|
|
32
|
+
border-radius: var(--radius);
|
|
33
|
+
border: 1px solid hsl(var(--border)) !important;
|
|
34
|
+
background: hsl(var(--popover)) !important;
|
|
35
|
+
color: hsl(var(--popover-foreground));
|
|
36
|
+
font-size: var(--font-size-xs);
|
|
37
|
+
}
|
|
@@ -426,3 +426,41 @@
|
|
|
426
426
|
.ui-carousel[data-orientation="vertical"] .ui-carousel-next {
|
|
427
427
|
bottom: var(--space-2);
|
|
428
428
|
}
|
|
429
|
+
|
|
430
|
+
@layer components {
|
|
431
|
+
/* ListRow — single-line entity row (leading · title/description · trailing) for short lists
|
|
432
|
+
* inside a flush CardContent. Rows separate with a quiet divider; the last row leaves the
|
|
433
|
+
* Card border to close the list. Logical properties throughout (RTL-safe). */
|
|
434
|
+
[data-slot="list-row"] {
|
|
435
|
+
display: flex;
|
|
436
|
+
align-items: center;
|
|
437
|
+
gap: var(--list-row-gap);
|
|
438
|
+
padding: var(--list-row-padding-y) var(--list-row-padding-x);
|
|
439
|
+
}
|
|
440
|
+
[data-slot="list-row"][data-align="start"] {
|
|
441
|
+
align-items: flex-start;
|
|
442
|
+
}
|
|
443
|
+
[data-slot="list-row"]:not(:last-child) {
|
|
444
|
+
border-block-end: var(--list-row-border);
|
|
445
|
+
}
|
|
446
|
+
[data-slot="list-row-leading"] {
|
|
447
|
+
display: inline-flex;
|
|
448
|
+
flex-shrink: 0;
|
|
449
|
+
align-items: center;
|
|
450
|
+
justify-content: center;
|
|
451
|
+
color: hsl(var(--muted-foreground));
|
|
452
|
+
}
|
|
453
|
+
[data-slot="list-row-body"] {
|
|
454
|
+
display: flex;
|
|
455
|
+
min-width: 0;
|
|
456
|
+
flex: 1 1 auto;
|
|
457
|
+
flex-direction: column;
|
|
458
|
+
}
|
|
459
|
+
[data-slot="list-row-trailing"] {
|
|
460
|
+
display: inline-flex;
|
|
461
|
+
flex-shrink: 0;
|
|
462
|
+
align-items: center;
|
|
463
|
+
gap: var(--space-2);
|
|
464
|
+
margin-inline-start: auto;
|
|
465
|
+
}
|
|
466
|
+
}
|
package/dist/styles/index.css
CHANGED
|
@@ -151,6 +151,13 @@
|
|
|
151
151
|
background: hsl(var(--accent));
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
/* Non-interactive brand header — no click target, so no pointer/hover affordance and no caret. */
|
|
155
|
+
.sb-product-static,
|
|
156
|
+
.sb-product-static:hover {
|
|
157
|
+
cursor: default;
|
|
158
|
+
background: transparent;
|
|
159
|
+
}
|
|
160
|
+
|
|
154
161
|
.sb-logo-mark {
|
|
155
162
|
display: grid;
|
|
156
163
|
width: 1.75rem;
|
|
@@ -491,6 +498,30 @@
|
|
|
491
498
|
gap: 2px;
|
|
492
499
|
}
|
|
493
500
|
|
|
501
|
+
/* Topbar — a pure slot bar. start (inline-start) · center (grows, centered) · end (inline-end).
|
|
502
|
+
* The library owns ONLY this positioning; every control inside is the consumer's to compose. */
|
|
503
|
+
.ui-topbar {
|
|
504
|
+
display: flex;
|
|
505
|
+
width: 100%;
|
|
506
|
+
align-items: center;
|
|
507
|
+
gap: var(--space-2);
|
|
508
|
+
}
|
|
509
|
+
.ui-topbar-start,
|
|
510
|
+
.ui-topbar-center,
|
|
511
|
+
.ui-topbar-end {
|
|
512
|
+
display: flex;
|
|
513
|
+
min-width: 0;
|
|
514
|
+
align-items: center;
|
|
515
|
+
gap: var(--space-2);
|
|
516
|
+
}
|
|
517
|
+
.ui-topbar-center {
|
|
518
|
+
flex: 1 1 auto;
|
|
519
|
+
justify-content: center;
|
|
520
|
+
}
|
|
521
|
+
.ui-topbar-end {
|
|
522
|
+
margin-inline-start: auto;
|
|
523
|
+
}
|
|
524
|
+
|
|
494
525
|
.tb-chip {
|
|
495
526
|
display: inline-flex;
|
|
496
527
|
max-width: 15rem;
|
|
@@ -520,6 +551,14 @@
|
|
|
520
551
|
color: hsl(var(--muted-foreground));
|
|
521
552
|
}
|
|
522
553
|
|
|
554
|
+
/* Non-interactive brand chip — no menu/handler, so no pointer/hover affordance and no caret. */
|
|
555
|
+
.tb-chip-static,
|
|
556
|
+
.tb-chip-static:hover {
|
|
557
|
+
border-color: transparent;
|
|
558
|
+
background: transparent;
|
|
559
|
+
cursor: default;
|
|
560
|
+
}
|
|
561
|
+
|
|
523
562
|
.tb-chip-icon {
|
|
524
563
|
display: grid;
|
|
525
564
|
width: 1.125rem;
|
|
@@ -98,6 +98,9 @@
|
|
|
98
98
|
overflow: hidden;
|
|
99
99
|
text-overflow: ellipsis;
|
|
100
100
|
white-space: nowrap;
|
|
101
|
+
/* min-width:0 lets a truncating Text shrink inside a flex row WITHOUT the consumer
|
|
102
|
+
* having to add `min-w-0` — the documented flex-truncate idiom (issue #114). */
|
|
103
|
+
min-width: 0;
|
|
101
104
|
}
|
|
102
105
|
[data-slot="text"][data-tabular] {
|
|
103
106
|
font-variant-numeric: tabular-nums;
|
package/dist/tokens/base.css
CHANGED
|
@@ -14,5 +14,7 @@
|
|
|
14
14
|
@import "./components/badge.css";
|
|
15
15
|
@import "./components/navigation.css";
|
|
16
16
|
@import "./components/data-display.css";
|
|
17
|
+
@import "./components/list-row.css";
|
|
18
|
+
@import "./components/logo.css";
|
|
17
19
|
@import "./components/data-entry.css";
|
|
18
20
|
@import "./components/shell.css";
|
|
@@ -20,6 +20,11 @@
|
|
|
20
20
|
* --card-header-background-alpha: 0 for a quiet borderless-band header. */
|
|
21
21
|
--card-header-border-bottom: 1px solid hsl(var(--card-border));
|
|
22
22
|
--card-radius: var(--radius);
|
|
23
|
+
/* Accent edge — width of the semantic leading-edge stripe (data-accent).
|
|
24
|
+
* Tokenised (rule #44) so a service theme can re-tune it without forking CSS.
|
|
25
|
+
* The slot padding compensation in card-layout.css subtracts the same token,
|
|
26
|
+
* so content stays aligned on the shell whatever the rail width. */
|
|
27
|
+
--card-accent-rail-width: 6px;
|
|
23
28
|
--stat-card-label-font-size: var(--font-size-xs);
|
|
24
29
|
--stat-card-label-font-weight: var(--font-weight-medium);
|
|
25
30
|
--stat-card-label-letter-spacing: 0.04em;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/* ListRow component tokens — a single-line entity row for short lists inside a Card
|
|
2
|
+
* (sessions / API tokens / linked accounts / passkeys …). Sits in a flush CardContent;
|
|
3
|
+
* rows separate with a quiet divider (#44 — chrome defaults to the calm semantic border). */
|
|
4
|
+
:root {
|
|
5
|
+
--list-row-padding-y: var(--space-3);
|
|
6
|
+
--list-row-padding-x: var(--space-4);
|
|
7
|
+
--list-row-gap: var(--space-3);
|
|
8
|
+
--list-row-border: 1px solid hsl(var(--border));
|
|
9
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Logo (brand mark) component tokens. Box size and corner radius are knobs (#45) so a service can
|
|
2
|
+
* match its own grid without forking the mark; brand fill follows --primary. The `size` prop picks
|
|
3
|
+
* the step; a service retunes the steps globally here. (Not a --control-height tier — the mark is
|
|
4
|
+
* decorative, not a density-aware interactive control.) */
|
|
5
|
+
:root {
|
|
6
|
+
--logo-size: 2rem; /* md */
|
|
7
|
+
--logo-size-xs: 1.5rem;
|
|
8
|
+
--logo-size-sm: 1.75rem;
|
|
9
|
+
--logo-size-lg: 2.5rem;
|
|
10
|
+
--logo-radius: var(--radius);
|
|
11
|
+
}
|
|
@@ -234,6 +234,19 @@
|
|
|
234
234
|
--space-chrome-y: var(--space-4);
|
|
235
235
|
--space-chrome-gap: var(--space-2);
|
|
236
236
|
--field-label-gap: var(--space-2);
|
|
237
|
+
|
|
238
|
+
/* Motion — the primitive tier for animation, so enter/transition timing reads a token
|
|
239
|
+
* instead of a literal 0.5s / cubic-bezier(...) / translateY(10px) (cardinal rule #2).
|
|
240
|
+
* dxs-kintai keeps motion LOW: short durations, a calm decelerate curve, a small reveal shift.
|
|
241
|
+
* Consumers honour prefers-reduced-motion at the call site. */
|
|
242
|
+
--duration-fast: 150ms;
|
|
243
|
+
--duration-base: 250ms;
|
|
244
|
+
--duration-slow: 500ms;
|
|
245
|
+
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
|
246
|
+
--ease-emphasized: cubic-bezier(0.32, 0.72, 0, 1);
|
|
247
|
+
--ease-decelerate: cubic-bezier(0, 0, 0, 1);
|
|
248
|
+
--ease-accelerate: cubic-bezier(0.3, 0, 1, 1);
|
|
249
|
+
--reveal-distance: 10px;
|
|
237
250
|
}
|
|
238
251
|
|
|
239
252
|
.dark,
|