@sybilion/uilib 1.3.48 → 1.3.50
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/esm/components/ui/AnalysesSelector/AnalysesSelector.js +2 -2
- package/dist/esm/components/ui/AnalysesSelector/AnalysesSelector.styl.js +2 -2
- package/dist/esm/components/ui/Page/PageTabs/PageTabs.js +2 -2
- package/dist/esm/components/ui/Select/Select.styl.js +1 -1
- package/dist/esm/components/ui/Tabs/Tabs.styl.js +2 -2
- package/dist/esm/types/src/components/ui/Page/PageTabs/PageTabs.d.ts +11 -7
- package/dist/esm/types/src/components/ui/Page/index.d.ts +1 -1
- package/dist/esm/types/src/components/ui/Tabs/Tabs.d.ts +2 -2
- package/dist/esm/types/src/components/ui/Tabs/Tabs.types.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/ui/AnalysesSelector/AnalysesSelector.styl +26 -0
- package/src/components/ui/AnalysesSelector/AnalysesSelector.styl.d.ts +2 -0
- package/src/components/ui/AnalysesSelector/AnalysesSelector.tsx +15 -2
- package/src/components/ui/Page/PageTabs/PageTabs.tsx +18 -4
- package/src/components/ui/Page/index.ts +1 -1
- package/src/components/ui/Select/Select.styl +1 -1
- package/src/components/ui/Tabs/Tabs.styl +48 -1
- package/src/components/ui/Tabs/Tabs.styl.d.ts +1 -0
- package/src/components/ui/Tabs/Tabs.tsx +2 -1
- package/src/components/ui/Tabs/Tabs.types.ts +2 -0
- package/src/docs/pages/PageTabsPage.tsx +34 -0
- package/src/docs/pages/TabsPage.tsx +86 -2
|
@@ -25,9 +25,9 @@ function renderIcon(icon) {
|
|
|
25
25
|
if (!icon)
|
|
26
26
|
return null;
|
|
27
27
|
if (typeof icon === 'string') {
|
|
28
|
-
return jsx("img", { src: icon, alt: "", className: S.icon });
|
|
28
|
+
return (jsx("img", { src: icon, alt: "", width: 16, height: 16, "data-slot": "analysis-icon", className: cn(S.icon, S.iconImage) }));
|
|
29
29
|
}
|
|
30
|
-
return jsx("span", { className: S.icon, children: icon });
|
|
30
|
+
return (jsx("span", { "data-slot": "analysis-icon", className: cn(S.icon, S.iconWrapper), children: icon }));
|
|
31
31
|
}
|
|
32
32
|
function AnalysesSelector({ items, selectedIds, onItemToggle, inlineMode = false, placeholder, disabled, size = 'md', variant = 'default', darker = false, className, triggerProps, onFailedItemClick, showHistorical = true, enableToggleHidden = false, maxVisibleItems = 1, preventDeselection = false, hiddenSeries: hiddenSeriesProp = new Set(), onToggleSeries = () => { }, isAnalysisInProgress: isAnalysisInProgressProp = defaultIsAnalysisInProgress, }) {
|
|
33
33
|
const historicalAutoSelectedRef = useRef(false);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from 'style-inject';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".AnalysesSelector_root__V8v0T{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.AnalysesSelector_variant-default__lbURP.AnalysesSelector_single__rAPT6{background-color:var(--background);border-radius:var(--p-4);padding:0 var(--p-2)}.AnalysesSelector_item__d3pDt{align-items:center;cursor:pointer;display:flex;gap:var(--p-2);margin:var(--p-1);transition:opacity .2s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none}.AnalysesSelector_item__d3pDt.AnalysesSelector_disabled__6JhJQ,.AnalysesSelector_item__d3pDt:hover{opacity:.5}.AnalysesSelector_item__d3pDt.AnalysesSelector_disabled__6JhJQ:hover{opacity:.8}.AnalysesSelector_item__d3pDt.AnalysesSelector_historical__hAqpN{pointer-events:none}.AnalysesSelector_item__d3pDt.AnalysesSelector_dimmed__mYWY7{opacity:.5}.AnalysesSelector_icon__1Tb0U{align-items:center;display:flex;flex-shrink:0;height:16px;
|
|
4
|
-
var S = {"root":"AnalysesSelector_root__V8v0T","variant-default":"AnalysesSelector_variant-default__lbURP","single":"AnalysesSelector_single__rAPT6","item":"AnalysesSelector_item__d3pDt","disabled":"AnalysesSelector_disabled__6JhJQ","historical":"AnalysesSelector_historical__hAqpN","dimmed":"AnalysesSelector_dimmed__mYWY7","icon":"AnalysesSelector_icon__1Tb0U","label":"AnalysesSelector_label__m-9Ml","selectItemContent":"AnalysesSelector_selectItemContent__iRsNR","selectTrigger":"AnalysesSelector_selectTrigger__Avjkd","selectTriggerLabelWithId":"AnalysesSelector_selectTriggerLabelWithId__C32ph","itemLabelWithId":"AnalysesSelector_itemLabelWithId__8c0mY"};
|
|
3
|
+
var css_248z = ".AnalysesSelector_root__V8v0T{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.AnalysesSelector_variant-default__lbURP.AnalysesSelector_single__rAPT6{background-color:var(--background);border-radius:var(--p-4);padding:0 var(--p-2)}.AnalysesSelector_item__d3pDt{align-items:center;cursor:pointer;display:flex;gap:var(--p-2);margin:var(--p-1);transition:opacity .2s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none}.AnalysesSelector_item__d3pDt.AnalysesSelector_disabled__6JhJQ,.AnalysesSelector_item__d3pDt:hover{opacity:.5}.AnalysesSelector_item__d3pDt.AnalysesSelector_disabled__6JhJQ:hover{opacity:.8}.AnalysesSelector_item__d3pDt.AnalysesSelector_historical__hAqpN{pointer-events:none}.AnalysesSelector_item__d3pDt.AnalysesSelector_dimmed__mYWY7{opacity:.5}.AnalysesSelector_icon__1Tb0U{flex-shrink:0;height:16px;max-height:16px;max-width:16px;overflow:hidden;width:16px}.AnalysesSelector_iconImage__r9yJx{display:block;-o-object-fit:contain;object-fit:contain}.AnalysesSelector_iconWrapper__2Kx8j{align-items:center;display:flex;justify-content:center;position:relative}.AnalysesSelector_iconWrapper__2Kx8j>img{height:100%;max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain;width:100%}[data-slot=select-item] [data-slot=analysis-icon]{flex-shrink:0;height:16px!important;max-height:16px!important;max-width:16px!important;-o-object-fit:contain;object-fit:contain;overflow:hidden;width:16px!important}.AnalysesSelector_label__m-9Ml{flex-grow:1;font-size:var(--text-xs);white-space:nowrap}.AnalysesSelector_selectItemContent__iRsNR{align-items:center;display:flex;gap:var(--p-2);width:100%}.AnalysesSelector_selectTrigger__Avjkd{font-size:var(--text-xs);height:auto;min-width:auto}.AnalysesSelector_selectTriggerLabelWithId__C32ph{display:flex}.AnalysesSelector_itemLabelWithId__8c0mY{align-items:center;display:flex;flex-grow:1;min-width:0}";
|
|
4
|
+
var S = {"root":"AnalysesSelector_root__V8v0T","variant-default":"AnalysesSelector_variant-default__lbURP","single":"AnalysesSelector_single__rAPT6","item":"AnalysesSelector_item__d3pDt","disabled":"AnalysesSelector_disabled__6JhJQ","historical":"AnalysesSelector_historical__hAqpN","dimmed":"AnalysesSelector_dimmed__mYWY7","icon":"AnalysesSelector_icon__1Tb0U","iconImage":"AnalysesSelector_iconImage__r9yJx","iconWrapper":"AnalysesSelector_iconWrapper__2Kx8j","label":"AnalysesSelector_label__m-9Ml","selectItemContent":"AnalysesSelector_selectItemContent__iRsNR","selectTrigger":"AnalysesSelector_selectTrigger__Avjkd","selectTriggerLabelWithId":"AnalysesSelector_selectTriggerLabelWithId__C32ph","itemLabelWithId":"AnalysesSelector_itemLabelWithId__8c0mY"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { S as default };
|
|
@@ -15,8 +15,8 @@ function hasTabPanelContent(content) {
|
|
|
15
15
|
return false;
|
|
16
16
|
return true;
|
|
17
17
|
}
|
|
18
|
-
function PageTabs({ className, contentClassName, innerClassName, scrollbarClassName, items, tabsListProps, ...props }) {
|
|
19
|
-
return (jsxs(Tabs, { className: cn(S.root, className), variant:
|
|
18
|
+
function PageTabs({ className, contentClassName, innerClassName, scrollbarClassName, items, tabsListProps, variant = 'link', ...props }) {
|
|
19
|
+
return (jsxs(Tabs, { className: cn(S.root, className), variant: variant, ...props, children: [jsx(TabsList, { ...tabsListProps, className: cn(S.list, tabsListProps?.withPaddings && S.withPaddings), children: jsx(PageXScroll, { size: "sm", scrollbarClassName: cn(S.scrollbar, scrollbarClassName), innerClassName: innerClassName, children: items.map((item, index) => (jsx(TabsTrigger, { value: item.value, children: item.label }, item.key ?? `${item.value}-${index}`))) }) }), items.map(item => hasTabPanelContent(item.content) ? (jsx(TabsContent, { value: item.value, className: cn(S.content, contentClassName), children: item.content }, item.value)) : null)] }));
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export { PageTabs };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import styleInject from 'style-inject';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".Select_selectTrigger__oTOBl{align-items:center;background-color:var(--background);border:none;border-radius:var(--p-4);box-shadow:none;color:var(--foreground);cursor:pointer;display:flex;font-size:var(--text-sm);font-weight:500;gap:var(--p-1);justify-content:space-between;max-width:calc(90vw - var(--page-x-padding)*2);outline:none;overflow:hidden;padding:var(--p-1) var(--p-3);position:relative;transition:all .2s ease-in-out;white-space:nowrap;width:-moz-fit-content;width:fit-content}.Select_selectTrigger__oTOBl:before{background-image:linear-gradient(to right,transparent,var(--background));content:\"\";display:block;height:100%;left:60vw;min-height:100%;min-width:var(--page-x-padding);position:absolute;width:var(--page-x-padding);width:20%}.Select_selectTrigger__oTOBl[aria-expanded=true]:before{display:none}.Select_selectTrigger__oTOBl.Select_darker__wwisI{background-color:var(--muted)}.Select_selectTrigger__oTOBl:hover{box-shadow:0 0 0 2px var(--background)}.Select_selectTrigger__oTOBl[data-size=md]{height:1.75rem}.Select_selectTrigger__oTOBl[data-size=sm]{font-size:var(--text-xs);height:1.75rem}.Select_selectTrigger__oTOBl[data-size=lg]{font-size:var(--text-sm);height:2.25rem}.Select_selectTrigger__oTOBl[data-placeholder]{color:var(--muted-foreground)}.Select_selectTrigger__oTOBl:focus-visible{border-color:var(--ring)}.Select_selectTrigger__oTOBl[aria-invalid=true]{border-color:var(--destructive)}.Select_selectTrigger__oTOBl:disabled{cursor:not-allowed;opacity:.5}.Select_selectTrigger__oTOBl [data-slot=select-value]{align-items:center;display:flex;gap:var(--p-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Select_selectTrigger__oTOBl svg{flex-shrink:0;pointer-events:none}.Select_selectTrigger__oTOBl svg:not([class*=text-]){color:var(--foreground)}.Select_selectTrigger__oTOBl svg:not([class*=size-]){height:1rem;width:1rem}.dark .Select_selectTrigger__oTOBl:not(.Select_darker__wwisI){background-color:var(--background)}.dark .Select_selectTrigger__oTOBl:not(.Select_darker__wwisI):hover{background-color:var(--background-alpha-800)}.Select_clear__vxo-N{background-color:transparent;border:none;box-shadow:none;padding:0}.Select_clear__vxo-N:focus-visible{border:none;box-shadow:none}@media (prefers-color-scheme:dark){.Select_clear__vxo-N,.Select_clear__vxo-N:hover{background-color:transparent}}.Select_selectContent__Wbegi{background-color:var(--popover);border:1px solid var(--border);border-radius:var(--p-4);box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:var(--popover-foreground);max-height:var(--radix-select-content-available-height);min-width:8rem;overflow-x:hidden;overflow-y:auto;position:relative;transform-origin:var(--radix-select-content-transform-origin);z-index:1100}.Select_selectContent__Wbegi[data-state=open]{animation:Select_fadeIn__hm7v- .25s,Select_zoomIn__ep77v .1s}.Select_selectContent__Wbegi[data-state=closed]{animation:Select_fadeOut__A-ccN .25s,Select_zoomOut__pZ-7e .1s}.Select_selectContent__Wbegi[data-side=bottom]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromTop__O1LeF .1s}.Select_selectContent__Wbegi[data-side=left]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromRight__iJq-J .1s}.Select_selectContent__Wbegi[data-side=right]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromLeft__8tm7S .1s}.Select_selectContent__Wbegi[data-side=top]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromBottom__PsvX6 .1s}.Select_selectContentPopper__TU8Jn[data-side=bottom]{transform:translateY(.25rem)}.Select_selectContentPopper__TU8Jn[data-side=left]{transform:translateX(-.25rem)}.Select_selectContentPopper__TU8Jn[data-side=right]{transform:translateX(.25rem)}.Select_selectContentPopper__TU8Jn[data-side=top]{transform:translateY(-.25rem)}.Select_selectViewport__OtOW7{padding:var(--p-1)}.Select_selectViewportPopper__dUoFi{height:var(--radix-select-trigger-height);min-width:var(--radix-select-trigger-width);scroll-margin:var(--p-1) 0;width:100%}.Select_selectLabel__rX9cj{color:var(--muted-foreground);font-size:var(--text-xs);padding:var(--p-2) var(--p-2);padding-bottom:var(--p-2);padding-top:var(--p-2)}.Select_selectItem__JLg4D{align-items:center;border-radius:var(--radius-sm);cursor:default;display:flex;flex-grow:1;font-size:var(--text-sm);gap:var(--p-2);outline:none;padding:var(--p-1) var(--p-2);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.Select_selectItem__JLg4D.Select_selected__tmqut{background-color:var(--accent);font-weight:600}.Select_selectItem__JLg4D:first-child{border-top-left-radius:var(--p-3);border-top-right-radius:var(--p-3)}.Select_selectItem__JLg4D:last-child{border-bottom-left-radius:var(--p-3);border-bottom-right-radius:var(--p-3)}.Select_selectItem__JLg4D:focus{background-color:var(--accent);color:var(--accent-foreground)}.Select_selectItem__JLg4D[data-disabled]{opacity:.5;pointer-events:none}.Select_selectItem__JLg4D svg{flex-shrink:0;pointer-events:none}.Select_selectItem__JLg4D svg:not([class*=text-]){color:var(--muted-foreground)}.Select_selectItem__JLg4D svg:not([class*=size-]){height:1rem;width:1rem}.Select_selectItem__JLg4D span{display:flex;flex-grow:1;width:100%}.Select_selectItem__JLg4D span:last-child{align-items:center;display:flex;gap:var(--p-2)}.Select_selectItemText__9JXv9{align-items:center;display:flex;gap:var(--p-1)}.Select_selectItemIndicatorContainer__Vte2-{align-items:center;display:flex;height:var(--p-8);justify-content:center;position:absolute;right:0;width:var(--p-8)}.Select_selectItemIndicator__9HcxQ{height:1rem;width:1rem}.Select_selectSeparator__OZw53{background-color:var(--border);height:1px;margin:-.25rem var(--p-1) var(--p-1);pointer-events:none}.Select_selectScrollButton__-z-iR{align-items:center;cursor:default;display:flex;justify-content:center;padding:var(--p-1) 0}.Select_selectIcon__-TfP9{height:1rem;margin-right:calc(var(--p-1)*-1);opacity:.5;width:1rem}.Select_selectScrollIcon__ZyTUI{height:1rem;width:1rem}@keyframes Select_fadeIn__hm7v-{0%{opacity:0}to{opacity:1}}@keyframes Select_fadeOut__A-ccN{0%{opacity:1}to{opacity:0}}@keyframes Select_zoomIn__ep77v{0%{transform:scale(.95)}to{transform:scale(1)}}@keyframes Select_zoomOut__pZ-7e{0%{transform:scale(1)}to{transform:scale(.95)}}@keyframes Select_slideInFromTop__O1LeF{0%{transform:translateY(-.5rem)}to{transform:translateY(.2)}}@keyframes Select_slideInFromBottom__PsvX6{0%{transform:translateY(.5rem)}to{transform:translateY(.2)}}@keyframes Select_slideInFromLeft__8tm7S{0%{transform:translateX(-.5rem)}to{transform:translateX(.2)}}@keyframes Select_slideInFromRight__iJq-J{0%{transform:translateX(.5rem)}to{transform:translateY(.2)}}";
|
|
3
|
+
var css_248z = ".Select_selectTrigger__oTOBl{align-items:center;background-color:var(--background);border:none;border-radius:var(--p-4);box-shadow:none;color:var(--foreground);cursor:pointer;display:flex;font-size:var(--text-sm);font-weight:500;gap:var(--p-1);justify-content:space-between;max-width:calc(90vw - var(--page-x-padding)*2);outline:none;overflow:hidden;padding:var(--p-1) var(--p-3);position:relative;transition:all .2s ease-in-out;white-space:nowrap;width:-moz-fit-content;width:fit-content}.Select_selectTrigger__oTOBl:before{background-image:linear-gradient(to right,transparent,var(--background));content:\"\";display:block;height:100%;left:60vw;min-height:100%;min-width:var(--page-x-padding);position:absolute;width:var(--page-x-padding);width:20%}.Select_selectTrigger__oTOBl[aria-expanded=true]:before{display:none}.Select_selectTrigger__oTOBl.Select_darker__wwisI{background-color:var(--muted)}.Select_selectTrigger__oTOBl:hover{box-shadow:0 0 0 2px var(--background)}.Select_selectTrigger__oTOBl[data-size=md]{height:1.75rem}.Select_selectTrigger__oTOBl[data-size=sm]{font-size:var(--text-xs);height:1.75rem}.Select_selectTrigger__oTOBl[data-size=lg]{font-size:var(--text-sm);height:2.25rem}.Select_selectTrigger__oTOBl[data-placeholder]{color:var(--muted-foreground)}.Select_selectTrigger__oTOBl:focus-visible{border-color:var(--ring)}.Select_selectTrigger__oTOBl[aria-invalid=true]{border-color:var(--destructive)}.Select_selectTrigger__oTOBl:disabled{cursor:not-allowed;opacity:.5}.Select_selectTrigger__oTOBl [data-slot=select-value]{align-items:center;display:flex;gap:var(--p-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Select_selectTrigger__oTOBl svg{flex-shrink:0;pointer-events:none}.Select_selectTrigger__oTOBl svg:not([class*=text-]){color:var(--foreground)}.Select_selectTrigger__oTOBl svg:not([class*=size-]){height:1rem;width:1rem}.dark .Select_selectTrigger__oTOBl:not(.Select_darker__wwisI){background-color:var(--background)}.dark .Select_selectTrigger__oTOBl:not(.Select_darker__wwisI):hover{background-color:var(--background-alpha-800)}.Select_clear__vxo-N{background-color:transparent;border:none;box-shadow:none;padding:0}.Select_clear__vxo-N:focus-visible{border:none;box-shadow:none}@media (prefers-color-scheme:dark){.Select_clear__vxo-N,.Select_clear__vxo-N:hover{background-color:transparent}}.Select_selectContent__Wbegi{background-color:var(--popover);border:1px solid var(--border);border-radius:var(--p-4);box-shadow:0 10px 15px -3px rgba(0,0,0,.1);color:var(--popover-foreground);max-height:var(--radix-select-content-available-height);min-width:8rem;overflow-x:hidden;overflow-y:auto;position:relative;transform-origin:var(--radix-select-content-transform-origin);z-index:1100}.Select_selectContent__Wbegi[data-state=open]{animation:Select_fadeIn__hm7v- .25s,Select_zoomIn__ep77v .1s}.Select_selectContent__Wbegi[data-state=closed]{animation:Select_fadeOut__A-ccN .25s,Select_zoomOut__pZ-7e .1s}.Select_selectContent__Wbegi[data-side=bottom]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromTop__O1LeF .1s}.Select_selectContent__Wbegi[data-side=left]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromRight__iJq-J .1s}.Select_selectContent__Wbegi[data-side=right]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromLeft__8tm7S .1s}.Select_selectContent__Wbegi[data-side=top]{animation:Select_fadeIn__hm7v- .25s,Select_slideInFromBottom__PsvX6 .1s}.Select_selectContentPopper__TU8Jn[data-side=bottom]{transform:translateY(.25rem)}.Select_selectContentPopper__TU8Jn[data-side=left]{transform:translateX(-.25rem)}.Select_selectContentPopper__TU8Jn[data-side=right]{transform:translateX(.25rem)}.Select_selectContentPopper__TU8Jn[data-side=top]{transform:translateY(-.25rem)}.Select_selectViewport__OtOW7{padding:var(--p-1)}.Select_selectViewportPopper__dUoFi{height:var(--radix-select-trigger-height);min-width:var(--radix-select-trigger-width);scroll-margin:var(--p-1) 0;width:100%}.Select_selectLabel__rX9cj{color:var(--muted-foreground);font-size:var(--text-xs);padding:var(--p-2) var(--p-2);padding-bottom:var(--p-2);padding-top:var(--p-2)}.Select_selectItem__JLg4D{align-items:center;border-radius:var(--radius-sm);cursor:default;display:flex;flex-grow:1;font-size:var(--text-sm);gap:var(--p-2);outline:none;padding:var(--p-1) var(--p-2);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.Select_selectItem__JLg4D.Select_selected__tmqut{background-color:var(--accent);font-weight:600}.Select_selectItem__JLg4D:first-child{border-top-left-radius:var(--p-3);border-top-right-radius:var(--p-3)}.Select_selectItem__JLg4D:last-child{border-bottom-left-radius:var(--p-3);border-bottom-right-radius:var(--p-3)}.Select_selectItem__JLg4D:focus{background-color:var(--accent);color:var(--accent-foreground)}.Select_selectItem__JLg4D[data-disabled]{opacity:.5;pointer-events:none}.Select_selectItem__JLg4D svg{flex-shrink:0;pointer-events:none}.Select_selectItem__JLg4D svg:not([class*=text-]){color:var(--muted-foreground)}.Select_selectItem__JLg4D svg:not([class*=size-]){height:1rem;width:1rem}.Select_selectItem__JLg4D span:not([data-slot=analysis-icon]){display:flex;flex-grow:1;width:100%}.Select_selectItem__JLg4D span:last-child{align-items:center;display:flex;gap:var(--p-2)}.Select_selectItemText__9JXv9{align-items:center;display:flex;gap:var(--p-1)}.Select_selectItemIndicatorContainer__Vte2-{align-items:center;display:flex;height:var(--p-8);justify-content:center;position:absolute;right:0;width:var(--p-8)}.Select_selectItemIndicator__9HcxQ{height:1rem;width:1rem}.Select_selectSeparator__OZw53{background-color:var(--border);height:1px;margin:-.25rem var(--p-1) var(--p-1);pointer-events:none}.Select_selectScrollButton__-z-iR{align-items:center;cursor:default;display:flex;justify-content:center;padding:var(--p-1) 0}.Select_selectIcon__-TfP9{height:1rem;margin-right:calc(var(--p-1)*-1);opacity:.5;width:1rem}.Select_selectScrollIcon__ZyTUI{height:1rem;width:1rem}@keyframes Select_fadeIn__hm7v-{0%{opacity:0}to{opacity:1}}@keyframes Select_fadeOut__A-ccN{0%{opacity:1}to{opacity:0}}@keyframes Select_zoomIn__ep77v{0%{transform:scale(.95)}to{transform:scale(1)}}@keyframes Select_zoomOut__pZ-7e{0%{transform:scale(1)}to{transform:scale(.95)}}@keyframes Select_slideInFromTop__O1LeF{0%{transform:translateY(-.5rem)}to{transform:translateY(.2)}}@keyframes Select_slideInFromBottom__PsvX6{0%{transform:translateY(.5rem)}to{transform:translateY(.2)}}@keyframes Select_slideInFromLeft__8tm7S{0%{transform:translateX(-.5rem)}to{transform:translateX(.2)}}@keyframes Select_slideInFromRight__iJq-J{0%{transform:translateX(.5rem)}to{transform:translateY(.2)}}";
|
|
4
4
|
var S = {"selectTrigger":"Select_selectTrigger__oTOBl","darker":"Select_darker__wwisI","clear":"Select_clear__vxo-N","selectContent":"Select_selectContent__Wbegi","fadeIn":"Select_fadeIn__hm7v-","zoomIn":"Select_zoomIn__ep77v","fadeOut":"Select_fadeOut__A-ccN","zoomOut":"Select_zoomOut__pZ-7e","slideInFromTop":"Select_slideInFromTop__O1LeF","slideInFromRight":"Select_slideInFromRight__iJq-J","slideInFromLeft":"Select_slideInFromLeft__8tm7S","slideInFromBottom":"Select_slideInFromBottom__PsvX6","selectContentPopper":"Select_selectContentPopper__TU8Jn","selectViewport":"Select_selectViewport__OtOW7","selectViewportPopper":"Select_selectViewportPopper__dUoFi","selectLabel":"Select_selectLabel__rX9cj","selectItem":"Select_selectItem__JLg4D","selected":"Select_selected__tmqut","selectItemText":"Select_selectItemText__9JXv9","selectItemIndicatorContainer":"Select_selectItemIndicatorContainer__Vte2-","selectItemIndicator":"Select_selectItemIndicator__9HcxQ","selectSeparator":"Select_selectSeparator__OZw53","selectScrollButton":"Select_selectScrollButton__-z-iR","selectIcon":"Select_selectIcon__-TfP9","selectScrollIcon":"Select_selectScrollIcon__ZyTUI"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styleInject from 'style-inject';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".Tabs_root__cB9Au{display:flex;flex-direction:column;gap:.5rem}.Tabs_list__9Hs22{align-items:center;color:var(--muted-foreground);display:inline-flex;height:48px;justify-content:center;width:-moz-fit-content;width:fit-content}.Tabs_list__9Hs22.Tabs_fullWidth__Lj2Dd{width:100%}.Tabs_variant-link__xOMDg>.Tabs_list__9Hs22{background-color:transparent!important}.Tabs_variant-button__wtc8k .Tabs_list__9Hs22{border-radius:1.5rem;box-shadow:none;gap:.25rem;height:auto}.Tabs_trigger__uzdqH{align-items:center;border:1px solid transparent;border-radius:.375rem;color:var(--muted-foreground);cursor:pointer;display:inline-flex;flex:1;font-size:var(--text-sm);font-weight:500;gap:.375rem;height:calc(100% - 1px);justify-content:center;padding:.25rem .5rem;transition:color .2s,box-shadow .2s;white-space:nowrap}.Tabs_trigger__uzdqH:focus-visible{border-color:var(--ring);box-shadow:0 0 0 3px var(--ring-50);outline:1px solid var(--ring);outline-offset:0}.Tabs_trigger__uzdqH:disabled{opacity:.5;pointer-events:none}.Tabs_trigger__uzdqH[data-state=active]{background-color:var(--background);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.Tabs_trigger__uzdqH:hover,.Tabs_trigger__uzdqH[data-state=active]{color:var(--foreground)!important}.Tabs_darker__l-R0I .Tabs_trigger__uzdqH{background-color:var(--muted)}.Tabs_variant-button__wtc8k .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{border:none;border-radius:var(--p-4);box-shadow:none;color:var(--muted-foreground);flex-shrink:0;font-weight:600;padding:var(--p-1) var(--p-3);transition:all .15s ease-in-out}.Tabs_variant-button__wtc8k .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{border-radius:var(--p-6);box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:var(--foreground)}.Tabs_variant-link__xOMDg>.Tabs_list__9Hs22 .Tabs_trigger__uzdqH{background-color:transparent!important;border:0!important;border-radius:0!important;box-shadow:0!important;font-size:16px;padding:12px 16px}.Tabs_variant-link__xOMDg>.Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{box-shadow:inset 0 -3px 0 -1px var(--
|
|
4
|
-
var S = {"root":"Tabs_root__cB9Au","list":"Tabs_list__9Hs22","fullWidth":"Tabs_fullWidth__Lj2Dd","variant-link":"Tabs_variant-link__xOMDg","variant-button":"Tabs_variant-button__wtc8k","trigger":"Tabs_trigger__uzdqH","darker":"Tabs_darker__l-R0I","content":"Tabs_content__K27Vl","sizeSm":"Tabs_sizeSm__gfpc6","sizeLg":"Tabs_sizeLg__CcRFZ"};
|
|
3
|
+
var css_248z = ".Tabs_root__cB9Au{display:flex;flex-direction:column;gap:.5rem}.Tabs_list__9Hs22{align-items:center;color:var(--muted-foreground);display:inline-flex;height:48px;justify-content:center;width:-moz-fit-content;width:fit-content}.Tabs_list__9Hs22.Tabs_fullWidth__Lj2Dd{width:100%}.Tabs_variant-link__xOMDg>.Tabs_list__9Hs22{background-color:transparent!important}.Tabs_variant-button__wtc8k .Tabs_list__9Hs22,.Tabs_variant-outline__2CJJg .Tabs_list__9Hs22{border-radius:1.5rem;box-shadow:none;gap:.25rem;height:auto}.Tabs_variant-outline__2CJJg .Tabs_list__9Hs22{background-color:transparent!important;gap:var(--p-2)}.Tabs_trigger__uzdqH{align-items:center;border:1px solid transparent;border-radius:.375rem;color:var(--muted-foreground);cursor:pointer;display:inline-flex;flex:1;font-size:var(--text-sm);font-weight:500;gap:.375rem;height:calc(100% - 1px);justify-content:center;padding:.25rem .5rem;transition:color .2s,box-shadow .2s;white-space:nowrap}.Tabs_trigger__uzdqH:focus-visible{border-color:var(--ring);box-shadow:0 0 0 3px var(--ring-50);outline:1px solid var(--ring);outline-offset:0}.Tabs_trigger__uzdqH:disabled{opacity:.5;pointer-events:none}.Tabs_trigger__uzdqH[data-state=active]{background-color:var(--background);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.Tabs_trigger__uzdqH:hover,.Tabs_trigger__uzdqH[data-state=active]{color:var(--foreground)!important}.Tabs_darker__l-R0I .Tabs_trigger__uzdqH{background-color:var(--muted)}.Tabs_variant-button__wtc8k .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{border:none;border-radius:var(--p-4);box-shadow:none;color:var(--muted-foreground);flex-shrink:0;font-weight:600;padding:var(--p-1) var(--p-3);transition:all .15s ease-in-out}.Tabs_variant-button__wtc8k .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{border-radius:var(--p-6);box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:var(--foreground)}.Tabs_variant-outline__2CJJg .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{background-color:var(--background);border-radius:var(--p-6);color:var(--muted-foreground);flex-shrink:0;font-weight:600;padding:var(--p-1) var(--p-4);transition:box-shadow .15s ease-in-out,color .15s ease-in-out}.Tabs_variant-outline__2CJJg .Tabs_list__9Hs22 .Tabs_trigger__uzdqH:hover{color:var(--foreground)}.Tabs_variant-outline__2CJJg .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{background-color:var(--background);box-shadow:inset 0 0 0 2px var(--selected-tab-outline-color,var(--brand-color-400));color:var(--foreground)}.Tabs_variant-link__xOMDg>.Tabs_list__9Hs22 .Tabs_trigger__uzdqH{background-color:transparent!important;border:0!important;border-radius:0!important;box-shadow:0!important;font-size:16px;padding:12px 16px}.Tabs_variant-link__xOMDg>.Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{box-shadow:inset 0 -3px 0 -1px var(--selected-tab-outline-color,var(--brand-color-400))!important}.Tabs_trigger__uzdqH svg{flex-shrink:0;pointer-events:none}.Tabs_trigger__uzdqH svg:not([class*=size-]){height:1rem;width:1rem}.dark .Tabs_trigger__uzdqH{color:var(--muted-foreground)}.dark .Tabs_trigger__uzdqH[data-state=active]{background-color:var(--input-30);border-color:var(--input);color:var(--foreground)}.dark .Tabs_variant-outline__2CJJg .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{background-color:var(--background);box-shadow:inset 0 0 0 2px var(--selected-tab-outline-color,var(--brand-color-400));color:var(--foreground)}.Tabs_content__K27Vl{flex:1;outline:none}.Tabs_root__cB9Au.Tabs_variant-button__wtc8k.Tabs_sizeSm__gfpc6 .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{font-size:var(--text-xs);padding:var(--p-1) var(--p-2)}.Tabs_root__cB9Au.Tabs_variant-button__wtc8k.Tabs_sizeSm__gfpc6 .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{border-radius:var(--p-4)}.Tabs_root__cB9Au.Tabs_variant-button__wtc8k.Tabs_sizeLg__CcRFZ .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{font-size:var(--text-base);padding:var(--p-2) var(--p-4)}.Tabs_root__cB9Au.Tabs_variant-button__wtc8k.Tabs_sizeLg__CcRFZ .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{border-radius:var(--p-8)}.Tabs_root__cB9Au.Tabs_variant-outline__2CJJg.Tabs_sizeSm__gfpc6 .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{border-radius:var(--p-4);font-size:var(--text-xs);padding:var(--p-1) var(--p-3)}.Tabs_root__cB9Au.Tabs_variant-outline__2CJJg.Tabs_sizeSm__gfpc6 .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{border-radius:var(--p-4)}.Tabs_root__cB9Au.Tabs_variant-outline__2CJJg.Tabs_sizeLg__CcRFZ .Tabs_list__9Hs22 .Tabs_trigger__uzdqH{border-radius:var(--p-8);font-size:var(--text-base);padding:var(--p-2) var(--p-5)}.Tabs_root__cB9Au.Tabs_variant-outline__2CJJg.Tabs_sizeLg__CcRFZ .Tabs_list__9Hs22 .Tabs_trigger__uzdqH[data-state=active]{border-radius:var(--p-8)}.Tabs_root__cB9Au.Tabs_variant-link__xOMDg.Tabs_sizeSm__gfpc6>.Tabs_list__9Hs22{height:auto;min-height:36px}.Tabs_root__cB9Au.Tabs_variant-link__xOMDg.Tabs_sizeSm__gfpc6>.Tabs_list__9Hs22 .Tabs_trigger__uzdqH{font-size:14px;padding:8px 12px}.Tabs_root__cB9Au.Tabs_variant-link__xOMDg.Tabs_sizeLg__CcRFZ>.Tabs_list__9Hs22{height:auto;min-height:56px}.Tabs_root__cB9Au.Tabs_variant-link__xOMDg.Tabs_sizeLg__CcRFZ>.Tabs_list__9Hs22 .Tabs_trigger__uzdqH{font-size:18px;padding:16px 24px}";
|
|
4
|
+
var S = {"root":"Tabs_root__cB9Au","list":"Tabs_list__9Hs22","fullWidth":"Tabs_fullWidth__Lj2Dd","variant-link":"Tabs_variant-link__xOMDg","variant-button":"Tabs_variant-button__wtc8k","variant-outline":"Tabs_variant-outline__2CJJg","trigger":"Tabs_trigger__uzdqH","darker":"Tabs_darker__l-R0I","content":"Tabs_content__K27Vl","sizeSm":"Tabs_sizeSm__gfpc6","sizeLg":"Tabs_sizeLg__CcRFZ"};
|
|
5
5
|
styleInject(css_248z);
|
|
6
6
|
|
|
7
7
|
export { S as default };
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { TabsListProps, TabsProps } from '#uilib/components/ui/Tabs';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { TabsListProps, TabsProps, type TabsVariant } from '#uilib/components/ui/Tabs';
|
|
2
|
+
export type PageTabsItem = {
|
|
3
|
+
value: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
content?: React.ReactNode;
|
|
6
|
+
/** React list key when multiple items may share `value`. */
|
|
7
|
+
key?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function PageTabs({ className, contentClassName, innerClassName, scrollbarClassName, items, tabsListProps, variant, ...props }: {
|
|
10
|
+
items: PageTabsItem[];
|
|
8
11
|
tabsListProps?: TabsListProps & {
|
|
9
12
|
fullWidth?: boolean;
|
|
10
13
|
withPaddings?: boolean;
|
|
11
14
|
};
|
|
15
|
+
variant?: TabsVariant;
|
|
12
16
|
} & TabsProps & {
|
|
13
17
|
contentClassName?: string;
|
|
14
18
|
innerClassName?: string;
|
|
@@ -7,7 +7,7 @@ export { PageXScroll } from './PageXScroll/PageXScroll';
|
|
|
7
7
|
export { Breadcrumbs } from './Breadcrumbs/Breadcrumbs';
|
|
8
8
|
export { PageFooter } from './PageFooter/PageFooter';
|
|
9
9
|
export type { PageFooterLinkItem, PageFooterProps, } from './PageFooter/PageFooter';
|
|
10
|
-
export { PageTabs } from './PageTabs/PageTabs';
|
|
10
|
+
export { PageTabs, type PageTabsItem } from './PageTabs/PageTabs';
|
|
11
11
|
export { PageColumns } from './PageColumns/PageColumns';
|
|
12
12
|
export { SectionHeader } from './SectionHeader';
|
|
13
13
|
export type { SectionHeaderProps } from './SectionHeader';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { TabsContentProps, TabsListProps, TabsProps, TabsTriggerProps } from './Tabs.types';
|
|
1
|
+
import { TabsContentProps, TabsListProps, TabsProps, TabsTriggerProps, TabsVariant } from './Tabs.types';
|
|
2
2
|
declare function Tabs({ className, variant, size, darker, ...props }: TabsProps & {
|
|
3
|
-
variant?:
|
|
3
|
+
variant?: TabsVariant;
|
|
4
4
|
size?: 'sm' | 'md' | 'lg';
|
|
5
5
|
darker?: boolean;
|
|
6
6
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComponentProps } from 'react';
|
|
2
2
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
3
|
+
export type TabsVariant = 'button' | 'link' | 'outline';
|
|
3
4
|
export type TabsProps = ComponentProps<typeof TabsPrimitive.Root>;
|
|
4
5
|
export type TabsListProps = ComponentProps<typeof TabsPrimitive.List>;
|
|
5
6
|
export type TabsTriggerProps = ComponentProps<typeof TabsPrimitive.Trigger>;
|
package/package.json
CHANGED
|
@@ -36,12 +36,38 @@
|
|
|
36
36
|
.icon
|
|
37
37
|
width 16px
|
|
38
38
|
height 16px
|
|
39
|
+
max-width 16px
|
|
40
|
+
max-height 16px
|
|
39
41
|
flex-shrink 0
|
|
42
|
+
overflow hidden
|
|
43
|
+
|
|
44
|
+
.iconImage
|
|
45
|
+
display block
|
|
46
|
+
object-fit contain
|
|
47
|
+
|
|
48
|
+
.iconWrapper
|
|
40
49
|
position relative
|
|
41
50
|
display flex
|
|
42
51
|
align-items center
|
|
43
52
|
justify-content center
|
|
44
53
|
|
|
54
|
+
> img
|
|
55
|
+
width 100%
|
|
56
|
+
height 100%
|
|
57
|
+
max-width 100%
|
|
58
|
+
max-height 100%
|
|
59
|
+
object-fit contain
|
|
60
|
+
|
|
61
|
+
// Restore icon sizing in portal dropdown (large source assets e.g. Expert.png)
|
|
62
|
+
:global([data-slot="select-item"] [data-slot="analysis-icon"])
|
|
63
|
+
width 16px !important
|
|
64
|
+
height 16px !important
|
|
65
|
+
max-width 16px !important
|
|
66
|
+
max-height 16px !important
|
|
67
|
+
flex-shrink 0
|
|
68
|
+
overflow hidden
|
|
69
|
+
object-fit contain
|
|
70
|
+
|
|
45
71
|
.label
|
|
46
72
|
flex-grow 1
|
|
47
73
|
font-size var(--text-xs)
|
|
@@ -54,9 +54,22 @@ function renderItemContent(item: AnalysesSelectorItem) {
|
|
|
54
54
|
function renderIcon(icon: AnalysesSelectorItem['icon']) {
|
|
55
55
|
if (!icon) return null;
|
|
56
56
|
if (typeof icon === 'string') {
|
|
57
|
-
return
|
|
57
|
+
return (
|
|
58
|
+
<img
|
|
59
|
+
src={icon}
|
|
60
|
+
alt=""
|
|
61
|
+
width={16}
|
|
62
|
+
height={16}
|
|
63
|
+
data-slot="analysis-icon"
|
|
64
|
+
className={cn(S.icon, S.iconImage)}
|
|
65
|
+
/>
|
|
66
|
+
);
|
|
58
67
|
}
|
|
59
|
-
return
|
|
68
|
+
return (
|
|
69
|
+
<span data-slot="analysis-icon" className={cn(S.icon, S.iconWrapper)}>
|
|
70
|
+
{icon}
|
|
71
|
+
</span>
|
|
72
|
+
);
|
|
60
73
|
}
|
|
61
74
|
|
|
62
75
|
export function AnalysesSelector({
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
TabsListProps,
|
|
9
9
|
TabsProps,
|
|
10
10
|
TabsTrigger,
|
|
11
|
+
type TabsVariant,
|
|
11
12
|
} from '#uilib/components/ui/Tabs';
|
|
12
13
|
|
|
13
14
|
import S from './PageTabs.styl';
|
|
@@ -20,6 +21,14 @@ function hasTabPanelContent(content: React.ReactNode | undefined): boolean {
|
|
|
20
21
|
return true;
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
export type PageTabsItem = {
|
|
25
|
+
value: string;
|
|
26
|
+
label: React.ReactNode;
|
|
27
|
+
content?: React.ReactNode;
|
|
28
|
+
/** React list key when multiple items may share `value`. */
|
|
29
|
+
key?: string;
|
|
30
|
+
};
|
|
31
|
+
|
|
23
32
|
export function PageTabs({
|
|
24
33
|
className,
|
|
25
34
|
contentClassName,
|
|
@@ -27,20 +36,22 @@ export function PageTabs({
|
|
|
27
36
|
scrollbarClassName,
|
|
28
37
|
items,
|
|
29
38
|
tabsListProps,
|
|
39
|
+
variant = 'link',
|
|
30
40
|
...props
|
|
31
41
|
}: {
|
|
32
|
-
items:
|
|
42
|
+
items: PageTabsItem[];
|
|
33
43
|
tabsListProps?: TabsListProps & {
|
|
34
44
|
fullWidth?: boolean;
|
|
35
45
|
withPaddings?: boolean;
|
|
36
46
|
};
|
|
47
|
+
variant?: TabsVariant;
|
|
37
48
|
} & TabsProps & {
|
|
38
49
|
contentClassName?: string;
|
|
39
50
|
innerClassName?: string;
|
|
40
51
|
scrollbarClassName?: string;
|
|
41
52
|
}) {
|
|
42
53
|
return (
|
|
43
|
-
<Tabs className={cn(S.root, className)} variant=
|
|
54
|
+
<Tabs className={cn(S.root, className)} variant={variant} {...props}>
|
|
44
55
|
<TabsList
|
|
45
56
|
{...tabsListProps}
|
|
46
57
|
className={cn(S.list, tabsListProps?.withPaddings && S.withPaddings)}
|
|
@@ -50,8 +61,11 @@ export function PageTabs({
|
|
|
50
61
|
scrollbarClassName={cn(S.scrollbar, scrollbarClassName)}
|
|
51
62
|
innerClassName={innerClassName}
|
|
52
63
|
>
|
|
53
|
-
{items.map(item => (
|
|
54
|
-
<TabsTrigger
|
|
64
|
+
{items.map((item, index) => (
|
|
65
|
+
<TabsTrigger
|
|
66
|
+
value={item.value}
|
|
67
|
+
key={item.key ?? `${item.value}-${index}`}
|
|
68
|
+
>
|
|
55
69
|
{item.label}
|
|
56
70
|
</TabsTrigger>
|
|
57
71
|
))}
|
|
@@ -15,7 +15,7 @@ export type {
|
|
|
15
15
|
PageFooterLinkItem,
|
|
16
16
|
PageFooterProps,
|
|
17
17
|
} from './PageFooter/PageFooter';
|
|
18
|
-
export { PageTabs } from './PageTabs/PageTabs';
|
|
18
|
+
export { PageTabs, type PageTabsItem } from './PageTabs/PageTabs';
|
|
19
19
|
export { PageColumns } from './PageColumns/PageColumns';
|
|
20
20
|
export { SectionHeader } from './SectionHeader';
|
|
21
21
|
export type { SectionHeaderProps } from './SectionHeader';
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
background-color transparent !important
|
|
20
20
|
|
|
21
21
|
.variant-button &
|
|
22
|
+
.variant-outline &
|
|
22
23
|
// background-color var(--muted-50)
|
|
23
24
|
border-radius 1.5rem // 24px
|
|
24
25
|
// padding 0.25rem // 4px
|
|
@@ -26,6 +27,10 @@
|
|
|
26
27
|
box-shadow none
|
|
27
28
|
height auto
|
|
28
29
|
|
|
30
|
+
.variant-outline &
|
|
31
|
+
gap var(--p-2)
|
|
32
|
+
background-color transparent !important
|
|
33
|
+
|
|
29
34
|
.trigger
|
|
30
35
|
display inline-flex
|
|
31
36
|
flex 1
|
|
@@ -83,6 +88,23 @@
|
|
|
83
88
|
color var(--foreground)
|
|
84
89
|
box-shadow 0 1px 2px 0 rgba(0, 0, 0, 0.05)
|
|
85
90
|
|
|
91
|
+
.variant-outline .list &
|
|
92
|
+
flex-shrink 0
|
|
93
|
+
background-color var(--background)
|
|
94
|
+
padding var(--p-1) var(--p-4)
|
|
95
|
+
border-radius var(--p-6)
|
|
96
|
+
transition box-shadow 0.15s ease-in-out, color 0.15s ease-in-out
|
|
97
|
+
font-weight 600
|
|
98
|
+
color var(--muted-foreground)
|
|
99
|
+
|
|
100
|
+
&:hover
|
|
101
|
+
color var(--foreground)
|
|
102
|
+
|
|
103
|
+
&[data-state="active"]
|
|
104
|
+
box-shadow inset 0 0 0 2px var(--selected-tab-outline-color, var(--brand-color-400))
|
|
105
|
+
background-color var(--background)
|
|
106
|
+
color var(--foreground)
|
|
107
|
+
|
|
86
108
|
.variant-link > .list &
|
|
87
109
|
background-color transparent !important
|
|
88
110
|
border 0 !important
|
|
@@ -92,7 +114,7 @@
|
|
|
92
114
|
font-size 16px
|
|
93
115
|
|
|
94
116
|
&[data-state="active"]
|
|
95
|
-
box-shadow inset 0 -3px 0 -1px var(--
|
|
117
|
+
box-shadow inset 0 -3px 0 -1px var(--selected-tab-outline-color, var(--brand-color-400)) !important
|
|
96
118
|
|
|
97
119
|
|
|
98
120
|
& svg
|
|
@@ -111,6 +133,12 @@
|
|
|
111
133
|
border-color var(--input)
|
|
112
134
|
color var(--foreground)
|
|
113
135
|
|
|
136
|
+
:global(.dark) .variant-outline .list &
|
|
137
|
+
&[data-state="active"]
|
|
138
|
+
background-color var(--background)
|
|
139
|
+
box-shadow inset 0 0 0 2px var(--selected-tab-outline-color, var(--brand-color-400))
|
|
140
|
+
color var(--foreground)
|
|
141
|
+
|
|
114
142
|
.content
|
|
115
143
|
flex 1
|
|
116
144
|
outline none
|
|
@@ -134,6 +162,25 @@
|
|
|
134
162
|
&[data-state="active"]
|
|
135
163
|
border-radius var(--p-8)
|
|
136
164
|
|
|
165
|
+
&.variant-outline
|
|
166
|
+
&.sizeSm
|
|
167
|
+
.list .trigger
|
|
168
|
+
padding var(--p-1) var(--p-3)
|
|
169
|
+
font-size var(--text-xs)
|
|
170
|
+
border-radius var(--p-4)
|
|
171
|
+
|
|
172
|
+
&[data-state="active"]
|
|
173
|
+
border-radius var(--p-4)
|
|
174
|
+
|
|
175
|
+
&.sizeLg
|
|
176
|
+
.list .trigger
|
|
177
|
+
padding var(--p-2) var(--p-5)
|
|
178
|
+
font-size var(--text-base)
|
|
179
|
+
border-radius var(--p-8)
|
|
180
|
+
|
|
181
|
+
&[data-state="active"]
|
|
182
|
+
border-radius var(--p-8)
|
|
183
|
+
|
|
137
184
|
&.variant-link
|
|
138
185
|
&.sizeSm
|
|
139
186
|
> .list
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
TabsListProps,
|
|
9
9
|
TabsProps,
|
|
10
10
|
TabsTriggerProps,
|
|
11
|
+
TabsVariant,
|
|
11
12
|
} from './Tabs.types';
|
|
12
13
|
|
|
13
14
|
function Tabs({
|
|
@@ -17,7 +18,7 @@ function Tabs({
|
|
|
17
18
|
darker = false,
|
|
18
19
|
...props
|
|
19
20
|
}: TabsProps & {
|
|
20
|
-
variant?:
|
|
21
|
+
variant?: TabsVariant;
|
|
21
22
|
size?: 'sm' | 'md' | 'lg';
|
|
22
23
|
darker?: boolean;
|
|
23
24
|
}) {
|
|
@@ -2,6 +2,8 @@ import { ComponentProps } from 'react';
|
|
|
2
2
|
|
|
3
3
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
4
4
|
|
|
5
|
+
export type TabsVariant = 'button' | 'link' | 'outline';
|
|
6
|
+
|
|
5
7
|
export type TabsProps = ComponentProps<typeof TabsPrimitive.Root>;
|
|
6
8
|
export type TabsListProps = ComponentProps<typeof TabsPrimitive.List>;
|
|
7
9
|
export type TabsTriggerProps = ComponentProps<typeof TabsPrimitive.Trigger>;
|
|
@@ -3,6 +3,13 @@ import { PageContentSection, PageTabs } from '#uilib/components/ui/Page';
|
|
|
3
3
|
import { AppPageHeader } from '../components/AppPageHeader/AppPageHeader';
|
|
4
4
|
import { DocsHeaderActions } from '../docsHeaderActions';
|
|
5
5
|
|
|
6
|
+
const OUTLINE_ITEMS = [
|
|
7
|
+
{ value: 'outline-1', label: 'Crude Oil ↘ 15%' },
|
|
8
|
+
{ value: 'outline-2', label: 'Consumer Staples ↘ 12%' },
|
|
9
|
+
{ value: 'outline-3', label: 'Energy ↘ 8%' },
|
|
10
|
+
{ value: 'outline-4', label: 'Metals ↘ 10%' },
|
|
11
|
+
];
|
|
12
|
+
|
|
6
13
|
const SCROLL_TEST_ITEMS = Array.from({ length: 10 }, (_, i) => {
|
|
7
14
|
const n = i + 1;
|
|
8
15
|
return {
|
|
@@ -54,6 +61,33 @@ export default function PageTabsPage() {
|
|
|
54
61
|
/>
|
|
55
62
|
</div>
|
|
56
63
|
</section>
|
|
64
|
+
|
|
65
|
+
<section>
|
|
66
|
+
<h3 style={{ marginBottom: '0.75rem' }}>Outline variant</h3>
|
|
67
|
+
<p
|
|
68
|
+
style={{
|
|
69
|
+
marginBottom: '1rem',
|
|
70
|
+
color: 'var(--muted-foreground)',
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
73
|
+
<code>variant="outline"</code> with horizontal scroll on a
|
|
74
|
+
muted surface.
|
|
75
|
+
</p>
|
|
76
|
+
<div
|
|
77
|
+
style={{
|
|
78
|
+
maxWidth: 500,
|
|
79
|
+
padding: '0.5rem 0',
|
|
80
|
+
borderRadius: 'var(--p-3)',
|
|
81
|
+
backgroundColor: 'var(--muted)',
|
|
82
|
+
}}
|
|
83
|
+
>
|
|
84
|
+
<PageTabs
|
|
85
|
+
variant="outline"
|
|
86
|
+
defaultValue={OUTLINE_ITEMS[0].value}
|
|
87
|
+
items={OUTLINE_ITEMS}
|
|
88
|
+
/>
|
|
89
|
+
</div>
|
|
90
|
+
</section>
|
|
57
91
|
</PageContentSection>
|
|
58
92
|
</>
|
|
59
93
|
);
|
|
@@ -1,22 +1,57 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
|
|
1
3
|
import { PageContentSection } from '#uilib/components/ui/Page';
|
|
2
4
|
import {
|
|
3
5
|
Tabs,
|
|
4
6
|
TabsContent,
|
|
5
7
|
TabsList,
|
|
6
8
|
TabsTrigger,
|
|
9
|
+
type TabsVariant,
|
|
7
10
|
} from '#uilib/components/ui/Tabs';
|
|
8
11
|
|
|
9
12
|
import { AppPageHeader } from '../components/AppPageHeader/AppPageHeader';
|
|
10
13
|
import { DocsHeaderActions } from '../docsHeaderActions';
|
|
11
14
|
|
|
12
|
-
const VARIANTS = ['button', 'link']
|
|
15
|
+
const VARIANTS: TabsVariant[] = ['button', 'link', 'outline'];
|
|
13
16
|
const SIZES = ['sm', 'md', 'lg'] as const;
|
|
14
17
|
|
|
18
|
+
const OUTLINE_DEMO_TABS = [
|
|
19
|
+
{ value: 'crude-oil', label: 'Crude Oil', pct: 15 },
|
|
20
|
+
{ value: 'consumer-staples', label: 'Consumer Staples Euro', pct: 15 },
|
|
21
|
+
{ value: 'energy', label: 'Energy', pct: 8 },
|
|
22
|
+
{ value: 'metals', label: 'Metals', pct: 12 },
|
|
23
|
+
{ value: 'agriculture', label: 'Agriculture', pct: 5 },
|
|
24
|
+
] as const;
|
|
25
|
+
|
|
26
|
+
function OutlineTabLabel({ label, pct }: { label: string; pct: number }) {
|
|
27
|
+
return (
|
|
28
|
+
<span
|
|
29
|
+
style={{
|
|
30
|
+
display: 'inline-flex',
|
|
31
|
+
alignItems: 'center',
|
|
32
|
+
gap: 'var(--p-2)',
|
|
33
|
+
}}
|
|
34
|
+
>
|
|
35
|
+
<span>{label}</span>
|
|
36
|
+
<span
|
|
37
|
+
style={{
|
|
38
|
+
color: 'var(--destructive)',
|
|
39
|
+
fontSize: 'var(--text-xs)',
|
|
40
|
+
fontWeight: 600,
|
|
41
|
+
fontVariantNumeric: 'tabular-nums',
|
|
42
|
+
}}
|
|
43
|
+
>
|
|
44
|
+
↘ {pct}%
|
|
45
|
+
</span>
|
|
46
|
+
</span>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
15
50
|
function TabsDemoCell({
|
|
16
51
|
variant,
|
|
17
52
|
size,
|
|
18
53
|
}: {
|
|
19
|
-
variant:
|
|
54
|
+
variant: TabsVariant;
|
|
20
55
|
size: (typeof SIZES)[number];
|
|
21
56
|
}) {
|
|
22
57
|
const id = `${variant}-${size}`;
|
|
@@ -92,6 +127,55 @@ export default function TabsPage() {
|
|
|
92
127
|
</div>
|
|
93
128
|
</section>
|
|
94
129
|
|
|
130
|
+
<section>
|
|
131
|
+
<h3 style={{ marginBottom: '1rem' }}>Outline</h3>
|
|
132
|
+
<p
|
|
133
|
+
style={{
|
|
134
|
+
marginBottom: '0.75rem',
|
|
135
|
+
color: 'var(--muted-foreground)',
|
|
136
|
+
}}
|
|
137
|
+
>
|
|
138
|
+
White pill triggers; active tab uses a border via{' '}
|
|
139
|
+
<code>--selected-tab-outline-color</code> (defaults to{' '}
|
|
140
|
+
<code>--sb-cyan-400</code>).
|
|
141
|
+
</p>
|
|
142
|
+
<div
|
|
143
|
+
style={{
|
|
144
|
+
display: 'flex',
|
|
145
|
+
flexDirection: 'column',
|
|
146
|
+
gap: '1.5rem',
|
|
147
|
+
padding: '1rem',
|
|
148
|
+
borderRadius: 'var(--p-3)',
|
|
149
|
+
backgroundColor: 'var(--muted)',
|
|
150
|
+
}}
|
|
151
|
+
>
|
|
152
|
+
<Tabs variant="outline" defaultValue={OUTLINE_DEMO_TABS[0].value}>
|
|
153
|
+
<TabsList>
|
|
154
|
+
{OUTLINE_DEMO_TABS.map(tab => (
|
|
155
|
+
<TabsTrigger key={tab.value} value={tab.value}>
|
|
156
|
+
<OutlineTabLabel label={tab.label} pct={tab.pct} />
|
|
157
|
+
</TabsTrigger>
|
|
158
|
+
))}
|
|
159
|
+
</TabsList>
|
|
160
|
+
</Tabs>
|
|
161
|
+
|
|
162
|
+
<Tabs
|
|
163
|
+
variant="outline"
|
|
164
|
+
defaultValue="custom-a"
|
|
165
|
+
style={
|
|
166
|
+
{
|
|
167
|
+
'--selected-tab-outline-color': 'oklch(0.55 0.2 250)',
|
|
168
|
+
} as CSSProperties
|
|
169
|
+
}
|
|
170
|
+
>
|
|
171
|
+
<TabsList>
|
|
172
|
+
<TabsTrigger value="custom-a">Custom outline</TabsTrigger>
|
|
173
|
+
<TabsTrigger value="custom-b">Second tab</TabsTrigger>
|
|
174
|
+
</TabsList>
|
|
175
|
+
</Tabs>
|
|
176
|
+
</div>
|
|
177
|
+
</section>
|
|
178
|
+
|
|
95
179
|
<section>
|
|
96
180
|
<h3 style={{ marginBottom: '1rem' }}>Darker</h3>
|
|
97
181
|
<p
|