@seedgrid/fe-components 2026.3.20 → 2026.3.27
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/buttons/SgFloatActionButton.d.ts.map +1 -1
- package/dist/buttons/SgFloatActionButton.js +5 -26
- package/dist/buttons/SgSplitButton.d.ts.map +1 -1
- package/dist/buttons/SgSplitButton.js +3 -1
- package/dist/buttons/fab-helpers.d.ts +6 -0
- package/dist/buttons/fab-helpers.d.ts.map +1 -0
- package/dist/buttons/fab-helpers.js +29 -0
- package/dist/commons/SgAvatar.d.ts.map +1 -1
- package/dist/commons/SgAvatar.js +6 -3
- package/dist/commons/SgBadge.d.ts.map +1 -1
- package/dist/commons/SgBadge.js +5 -2
- package/dist/commons/SgToast.d.ts.map +1 -1
- package/dist/commons/SgToast.js +3 -1
- package/dist/commons/SgToaster.d.ts.map +1 -1
- package/dist/commons/SgToaster.js +3 -1
- package/dist/environment/SgEnvironmentProvider.d.ts.map +1 -1
- package/dist/environment/SgEnvironmentProvider.js +10 -15
- package/dist/environment/persistent-state.d.ts +22 -0
- package/dist/environment/persistent-state.d.ts.map +1 -0
- package/dist/environment/persistent-state.js +33 -0
- package/dist/gadgets/calendar/SgCalendar.d.ts.map +1 -1
- package/dist/gadgets/calendar/SgCalendar.js +5 -23
- package/dist/gadgets/clock/SgClock.d.ts.map +1 -1
- package/dist/gadgets/clock/SgClock.js +12 -10
- package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts +2 -1
- package/dist/gadgets/clock/themes/SgClockThemePicker.d.ts.map +1 -1
- package/dist/gadgets/clock/themes/SgClockThemePicker.js +23 -28
- package/dist/gadgets/clock/themes/search.d.ts +9 -0
- package/dist/gadgets/clock/themes/search.d.ts.map +1 -0
- package/dist/gadgets/clock/themes/search.js +15 -0
- package/dist/gadgets/gauge/SgLinearGauge.d.ts.map +1 -1
- package/dist/gadgets/gauge/SgLinearGauge.js +39 -28
- package/dist/gadgets/gauge/SgRadialGauge.d.ts.map +1 -1
- package/dist/gadgets/gauge/SgRadialGauge.js +44 -37
- package/dist/gadgets/gauge/math.d.ts +90 -0
- package/dist/gadgets/gauge/math.d.ts.map +1 -0
- package/dist/gadgets/gauge/math.js +81 -0
- package/dist/gadgets/qr-code/SgQRCode.d.ts.map +1 -1
- package/dist/gadgets/qr-code/SgQRCode.js +3 -1
- package/dist/i18n/en-US.d.ts.map +1 -1
- package/dist/i18n/en-US.js +99 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +155 -57
- package/dist/i18n/fr.d.ts +3 -0
- package/dist/i18n/fr.d.ts.map +1 -0
- package/dist/i18n/fr.js +208 -0
- package/dist/i18n/index.d.ts +5 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +50 -14
- package/dist/i18n/pt-BR.d.ts.map +1 -1
- package/dist/i18n/pt-BR.js +99 -1
- package/dist/i18n/pt-PT.d.ts.map +1 -1
- package/dist/i18n/pt-PT.js +99 -1
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/inputs/SgAutocomplete.d.ts +1 -1
- package/dist/inputs/SgAutocomplete.d.ts.map +1 -1
- package/dist/inputs/SgAutocomplete.js +7 -4
- package/dist/inputs/SgCheckboxGroup.d.ts +2 -6
- package/dist/inputs/SgCheckboxGroup.d.ts.map +1 -1
- package/dist/inputs/SgCheckboxGroup.js +6 -6
- package/dist/inputs/SgCombobox.d.ts.map +1 -1
- package/dist/inputs/SgCombobox.js +11 -2
- package/dist/inputs/SgDatatable.d.ts.map +1 -1
- package/dist/inputs/SgDatatable.js +10 -10
- package/dist/inputs/SgInputBirthDate.d.ts.map +1 -1
- package/dist/inputs/SgInputBirthDate.js +6 -1
- package/dist/inputs/SgInputCNPJ.d.ts +3 -1
- package/dist/inputs/SgInputCNPJ.d.ts.map +1 -1
- package/dist/inputs/SgInputCNPJ.js +4 -3
- package/dist/inputs/SgInputCPF.d.ts +3 -1
- package/dist/inputs/SgInputCPF.d.ts.map +1 -1
- package/dist/inputs/SgInputCPF.js +8 -3
- package/dist/inputs/SgInputCPFCNPJ.d.ts +3 -1
- package/dist/inputs/SgInputCPFCNPJ.d.ts.map +1 -1
- package/dist/inputs/SgInputCPFCNPJ.js +8 -3
- package/dist/inputs/SgInputCurrency.d.ts +3 -7
- package/dist/inputs/SgInputCurrency.d.ts.map +1 -1
- package/dist/inputs/SgInputCurrency.js +5 -2
- package/dist/inputs/SgInputDate.d.ts.map +1 -1
- package/dist/inputs/SgInputDate.js +6 -1
- package/dist/inputs/SgInputEmail.d.ts.map +1 -1
- package/dist/inputs/SgInputEmail.js +1 -1
- package/dist/inputs/SgInputNumber.d.ts +3 -7
- package/dist/inputs/SgInputNumber.d.ts.map +1 -1
- package/dist/inputs/SgInputNumber.js +5 -2
- package/dist/inputs/SgInputOTP.d.ts +5 -12
- package/dist/inputs/SgInputOTP.d.ts.map +1 -1
- package/dist/inputs/SgInputOTP.js +7 -4
- package/dist/inputs/SgInputPassword.d.ts.map +1 -1
- package/dist/inputs/SgInputPassword.js +1 -1
- package/dist/inputs/SgInputPhone.d.ts +3 -1
- package/dist/inputs/SgInputPhone.d.ts.map +1 -1
- package/dist/inputs/SgInputPhone.js +2 -1
- package/dist/inputs/SgInputPostalCode.d.ts.map +1 -1
- package/dist/inputs/SgInputPostalCode.js +2 -1
- package/dist/inputs/SgInputSelect.d.ts +4 -2
- package/dist/inputs/SgInputSelect.d.ts.map +1 -1
- package/dist/inputs/SgInputSelect.js +38 -3
- package/dist/inputs/SgInputText.d.ts +3 -7
- package/dist/inputs/SgInputText.d.ts.map +1 -1
- package/dist/inputs/SgInputText.js +5 -2
- package/dist/inputs/SgInputTextArea.d.ts +4 -2
- package/dist/inputs/SgInputTextArea.d.ts.map +1 -1
- package/dist/inputs/SgInputTextArea.js +37 -2
- package/dist/inputs/SgOrderList.d.ts +3 -1
- package/dist/inputs/SgOrderList.d.ts.map +1 -1
- package/dist/inputs/SgOrderList.js +24 -8
- package/dist/inputs/SgPickList.d.ts +3 -1
- package/dist/inputs/SgPickList.d.ts.map +1 -1
- package/dist/inputs/SgPickList.js +33 -17
- package/dist/inputs/SgRadioGroup.d.ts +2 -6
- package/dist/inputs/SgRadioGroup.d.ts.map +1 -1
- package/dist/inputs/SgRadioGroup.js +6 -6
- package/dist/inputs/SgRating.d.ts +2 -10
- package/dist/inputs/SgRating.d.ts.map +1 -1
- package/dist/inputs/SgRating.js +6 -3
- package/dist/inputs/SgSlider.d.ts +8 -2
- package/dist/inputs/SgSlider.d.ts.map +1 -1
- package/dist/inputs/SgSlider.js +62 -10
- package/dist/inputs/SgStepperInput.d.ts +8 -2
- package/dist/inputs/SgStepperInput.d.ts.map +1 -1
- package/dist/inputs/SgStepperInput.js +62 -8
- package/dist/inputs/SgTextEditor.d.ts +3 -1
- package/dist/inputs/SgTextEditor.d.ts.map +1 -1
- package/dist/inputs/SgTextEditor.js +30 -16
- package/dist/inputs/SgToggleSwitch.d.ts +3 -7
- package/dist/inputs/SgToggleSwitch.d.ts.map +1 -1
- package/dist/inputs/SgToggleSwitch.js +6 -3
- package/dist/layout/SgBreadcrumb.d.ts.map +1 -1
- package/dist/layout/SgBreadcrumb.js +7 -3
- package/dist/layout/SgCard.d.ts.map +1 -1
- package/dist/layout/SgCard.js +3 -1
- package/dist/layout/SgCarousel.d.ts.map +1 -1
- package/dist/layout/SgCarousel.js +3 -1
- package/dist/layout/SgExpandablePanel.d.ts.map +1 -1
- package/dist/layout/SgExpandablePanel.js +3 -1
- package/dist/layout/SgMenu.d.ts.map +1 -1
- package/dist/layout/SgMenu.js +174 -298
- package/dist/layout/SgPageControl.d.ts.map +1 -1
- package/dist/layout/SgPageControl.js +7 -3
- package/dist/layout/SgToolBar.d.ts.map +1 -1
- package/dist/layout/SgToolBar.js +19 -55
- package/dist/layout/SgTreeView.d.ts.map +1 -1
- package/dist/layout/SgTreeView.js +7 -3
- package/dist/layout/drag-position.d.ts +7 -0
- package/dist/layout/drag-position.d.ts.map +1 -0
- package/dist/layout/drag-position.js +30 -0
- package/dist/layout/menu-logic.d.ts +187 -0
- package/dist/layout/menu-logic.d.ts.map +1 -0
- package/dist/layout/menu-logic.js +349 -0
- package/dist/layout/toolbar-logic.d.ts +26 -0
- package/dist/layout/toolbar-logic.d.ts.map +1 -0
- package/dist/layout/toolbar-logic.js +38 -0
- package/dist/menus/SgDockMenu.d.ts.map +1 -1
- package/dist/menus/SgDockMenu.js +44 -120
- package/dist/menus/dock-menu-logic.d.ts +50 -0
- package/dist/menus/dock-menu-logic.d.ts.map +1 -0
- package/dist/menus/dock-menu-logic.js +113 -0
- package/dist/overlay/SgDialog.d.ts.map +1 -1
- package/dist/overlay/SgDialog.js +4 -2
- package/dist/overlay/SgPopup.d.ts.map +1 -1
- package/dist/overlay/SgPopup.js +4 -1
- package/dist/rhf.d.ts +8 -3
- package/dist/rhf.d.ts.map +1 -1
- package/dist/rhf.js +18 -1
- package/dist/sandbox.cjs +64 -64
- package/dist/wizard/SgWizard.d.ts.map +1 -1
- package/dist/wizard/SgWizard.js +20 -32
- package/dist/wizard/logic.d.ts +9 -0
- package/dist/wizard/logic.d.ts.map +1 -0
- package/dist/wizard/logic.js +20 -0
- package/package.json +8 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgPageControl.d.ts","sourceRoot":"","sources":["../../src/layout/SgPageControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SgPageControl.d.ts","sourceRoot":"","sources":["../../src/layout/SgPageControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,sBAAsB,CAAA;KAAE,KACrD,IAAI,CAAC;IACV,mBAAmB,CAAC,EAAE,CACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,sBAAsB,CAAA;KAAE,KACtD,IAAI,CAAC;IAEV,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACzC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAiCF,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,2CAuQhE;yBAvQe,aAAa;;;AA2Q7B,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,2CAExE;yBAFe,iBAAiB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
|
+
import { t, useComponentsI18n } from "../i18n";
|
|
4
5
|
function cn(...parts) {
|
|
5
6
|
return parts.filter(Boolean).join(" ");
|
|
6
7
|
}
|
|
@@ -22,7 +23,10 @@ function clampIndex(index, length) {
|
|
|
22
23
|
return Math.max(0, Math.min(length - 1, Math.floor(index)));
|
|
23
24
|
}
|
|
24
25
|
export function SgPageControl(props) {
|
|
25
|
-
const { children, activePageId, activeIndex, defaultActivePageId, defaultActiveIndex = 0, onActivePageIdChange, onActiveIndexChange, hiddenPageIds, keepMounted = false, pageControlStyle = "underline", size = "md", fullWidthTabs = false, keyboardNavigation = true, ariaLabel
|
|
26
|
+
const { children, activePageId, activeIndex, defaultActivePageId, defaultActiveIndex = 0, onActivePageIdChange, onActiveIndexChange, hiddenPageIds, keepMounted = false, pageControlStyle = "underline", size = "md", fullWidthTabs = false, keyboardNavigation = true, ariaLabel, emptyMessage, className, tabListClassName, tabClassName, panelClassName, style } = props;
|
|
27
|
+
const i18n = useComponentsI18n();
|
|
28
|
+
const resolvedAriaLabel = ariaLabel ?? t(i18n, "components.pageControl.ariaLabel");
|
|
29
|
+
const resolvedEmptyMessage = emptyMessage ?? t(i18n, "components.pageControl.empty");
|
|
26
30
|
const records = React.useMemo(() => resolveRecords(children, hiddenPageIds), [children, hiddenPageIds]);
|
|
27
31
|
const visiblePages = React.useMemo(() => records.filter((record) => !record.hidden), [records]);
|
|
28
32
|
const isControlled = activePageId !== undefined || activeIndex !== undefined;
|
|
@@ -96,7 +100,7 @@ export function SgPageControl(props) {
|
|
|
96
100
|
active: "border-primary text-primary bg-muted/30",
|
|
97
101
|
inactive: ""
|
|
98
102
|
};
|
|
99
|
-
return (_jsxs("div", { className: cn("w-full", className), style: style, children: [_jsx("div", { role: "tablist", "aria-label":
|
|
103
|
+
return (_jsxs("div", { className: cn("w-full", className), style: style, children: [_jsx("div", { role: "tablist", "aria-label": resolvedAriaLabel, className: cn("flex min-h-0 items-end gap-1 overflow-x-auto border-b border-border pb-0.5", fullWidthTabs ? "grid auto-cols-fr grid-flow-col" : "", tabListClassName), onKeyDown: (event) => {
|
|
100
104
|
if (!keyboardNavigation || visiblePages.length === 0)
|
|
101
105
|
return;
|
|
102
106
|
const focused = document.activeElement;
|
|
@@ -138,7 +142,7 @@ export function SgPageControl(props) {
|
|
|
138
142
|
return (_jsxs("button", { ref: (el) => {
|
|
139
143
|
tabsRef.current[index] = el;
|
|
140
144
|
}, type: "button", id: tabId, role: "tab", "aria-controls": panelId, "aria-selected": isActive, tabIndex: isActive ? 0 : -1, title: record.props.hint, disabled: record.props.disabled, onClick: () => selectPage(record.id), className: cn("inline-flex shrink-0 items-center justify-center whitespace-nowrap font-medium transition-colors", sizeClasses.tab, tabStyle.base, isActive ? tabStyle.active : tabStyle.inactive, fullWidthTabs ? "w-full" : "", record.props.disabled ? "cursor-not-allowed opacity-45" : "", tabClassName, record.props.tabClassName), children: [record.props.icon ? (_jsx("span", { className: cn("inline-flex items-center justify-center", sizeClasses.icon), children: record.props.icon })) : null, _jsx("span", { className: "truncate", children: record.props.title })] }, record.id));
|
|
141
|
-
}) }), _jsx("div", { className: cn("rounded-b-md border border-t-0 border-border bg-background", panelClassName), children: visiblePages.length === 0 ? (_jsx("div", { className: cn(sizeClasses.panel, "text-sm text-muted-foreground"), children:
|
|
145
|
+
}) }), _jsx("div", { className: cn("rounded-b-md border border-t-0 border-border bg-background", panelClassName), children: visiblePages.length === 0 ? (_jsx("div", { className: cn(sizeClasses.panel, "text-sm text-muted-foreground"), children: resolvedEmptyMessage })) : keepMounted ? (visiblePages.map((record) => {
|
|
142
146
|
const isActive = record.id === resolvedActiveId;
|
|
143
147
|
const tabId = `${rootId}-tab-${record.id}`;
|
|
144
148
|
const panelId = `${rootId}-panel-${record.id}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgToolBar.d.ts","sourceRoot":"","sources":["../../src/layout/SgToolBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SgToolBar.d.ts","sourceRoot":"","sources":["../../src/layout/SgToolBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,6BAA6B,GACrC,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,kBAAkB,CAAC;AACvB,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,WAAW,GACX,SAAS,GACT,MAAM,GACN,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAExD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAgFF,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,2CAsjBxD;yBAtjBe,SAAS;;;AAwjBzB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,CAAC,wBAAwB,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,2CAiJpE;yBAlJe,mBAAmB"}
|
package/dist/layout/SgToolBar.js
CHANGED
|
@@ -4,6 +4,9 @@ import * as React from "react";
|
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
5
|
import { useSgDockLayout } from "./SgDockLayout";
|
|
6
6
|
import { useHasSgEnvironmentProvider, useSgPersistence } from "../environment/SgEnvironmentProvider";
|
|
7
|
+
import { t, useComponentsI18n } from "../i18n";
|
|
8
|
+
import { buildToolbarStorageKey, parseStoredPanelDragPosition } from "./drag-position";
|
|
9
|
+
import { buildToolbarLayoutState } from "./toolbar-logic";
|
|
7
10
|
function cn(...parts) {
|
|
8
11
|
return parts.filter(Boolean).join(" ");
|
|
9
12
|
}
|
|
@@ -52,49 +55,6 @@ const BTN_COLORS = {
|
|
|
52
55
|
function clamp(n, min, max) {
|
|
53
56
|
return Math.max(min, Math.min(max, n));
|
|
54
57
|
}
|
|
55
|
-
function parseStoredDragPosition(raw) {
|
|
56
|
-
const value = typeof raw === "string" ? (() => {
|
|
57
|
-
try {
|
|
58
|
-
return JSON.parse(raw);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
})() : raw;
|
|
64
|
-
if (!value ||
|
|
65
|
-
typeof value !== "object" ||
|
|
66
|
-
typeof value.x !== "number" ||
|
|
67
|
-
typeof value.y !== "number" ||
|
|
68
|
-
!Number.isFinite(value.x) ||
|
|
69
|
-
!Number.isFinite(value.y)) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
x: value.x,
|
|
74
|
-
y: value.y
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function resolveOrientationDirection(orientationDirection) {
|
|
78
|
-
switch (orientationDirection) {
|
|
79
|
-
case "horizontal-right":
|
|
80
|
-
return { orientation: "horizontal", direction: "left" };
|
|
81
|
-
case "horizontal-left":
|
|
82
|
-
return { orientation: "horizontal", direction: "right" };
|
|
83
|
-
case "vertical-up":
|
|
84
|
-
return { orientation: "vertical", direction: "up" };
|
|
85
|
-
case "vertical-down":
|
|
86
|
-
default:
|
|
87
|
-
return { orientation: "vertical", direction: "down" };
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
function resolveDockOrientationDirection(orientationDirection, inDock, zone) {
|
|
91
|
-
if (!inDock || zone === "free")
|
|
92
|
-
return orientationDirection;
|
|
93
|
-
if (zone === "top" || zone === "bottom") {
|
|
94
|
-
return orientationDirection.startsWith("horizontal") ? orientationDirection : "horizontal-left";
|
|
95
|
-
}
|
|
96
|
-
return orientationDirection.startsWith("vertical") ? orientationDirection : "vertical-down";
|
|
97
|
-
}
|
|
98
58
|
const SgToolbarOrientationContext = React.createContext("vertical");
|
|
99
59
|
function useControlledState(args) {
|
|
100
60
|
const { value, defaultValue, onChange } = args;
|
|
@@ -110,6 +70,7 @@ function useControlledState(args) {
|
|
|
110
70
|
}
|
|
111
71
|
export function SgToolBar(props) {
|
|
112
72
|
const hasEnvironmentProvider = useHasSgEnvironmentProvider();
|
|
73
|
+
const i18n = useComponentsI18n();
|
|
113
74
|
const { load: loadPersistedState, save: savePersistedState, clear: clearPersistedState } = useSgPersistence();
|
|
114
75
|
const { id, title, orientationDirection, buttonsPerDirection, bgColorTitle, bgColor, size, className, style, dockZone, draggable = false, freeDrag = false, defaultPosition, collapsible = true, collapsed, defaultCollapsed = false, onCollapsedChange, children } = props;
|
|
115
76
|
const dock = useSgDockLayout();
|
|
@@ -121,9 +82,6 @@ export function SgToolBar(props) {
|
|
|
121
82
|
const [dragHoverZone, setDragHoverZone] = React.useState(null);
|
|
122
83
|
const dragHoverZoneRef = React.useRef(null);
|
|
123
84
|
const dragPlacementRef = React.useRef(null);
|
|
124
|
-
const zoneForOrientation = inDock && !freeDrag && dragHoverZone ? dragHoverZone : effectiveZone;
|
|
125
|
-
const resolvedOrientationDirection = resolveDockOrientationDirection(orientationDirection ?? "vertical-down", inDock, zoneForOrientation);
|
|
126
|
-
const { orientation, direction } = resolveOrientationDirection(resolvedOrientationDirection);
|
|
127
85
|
const portalTarget = inDock ? dock.getZoneElement(effectiveZone) : null;
|
|
128
86
|
const [isCollapsed, setIsCollapsed] = useControlledState({
|
|
129
87
|
value: collapsed ?? (inDock ? dock.getToolbarCollapsed(id) : undefined),
|
|
@@ -134,13 +92,24 @@ export function SgToolBar(props) {
|
|
|
134
92
|
dock.setToolbarCollapsed(id, next);
|
|
135
93
|
}
|
|
136
94
|
});
|
|
95
|
+
const showContent = !isCollapsed;
|
|
96
|
+
const toolbarLayoutState = buildToolbarLayoutState({
|
|
97
|
+
orientationDirection: orientationDirection ?? "vertical-down",
|
|
98
|
+
inDock,
|
|
99
|
+
zone: effectiveZone,
|
|
100
|
+
freeDrag,
|
|
101
|
+
dragHoverZone,
|
|
102
|
+
effectiveZone,
|
|
103
|
+
showContent
|
|
104
|
+
});
|
|
105
|
+
const { zoneForOrientation, resolvedOrientationDirection, orientation, direction, openUp, openLeft, showLeadingCollapseButton, collapseIconDirection } = toolbarLayoutState;
|
|
137
106
|
const [dragPos, setDragPos] = React.useState(null);
|
|
138
107
|
const dragPosRef = React.useRef(null);
|
|
139
108
|
const [dragActive, setDragActive] = React.useState(false);
|
|
140
109
|
const dragStart = React.useRef(null);
|
|
141
110
|
const dragMoved = React.useRef(false);
|
|
142
111
|
const containerRef = React.useRef(null);
|
|
143
|
-
const storageKey = React.useMemo(() =>
|
|
112
|
+
const storageKey = React.useMemo(() => buildToolbarStorageKey(id), [id]);
|
|
144
113
|
const setDragHoverZoneSafe = React.useCallback((next) => {
|
|
145
114
|
if (dragHoverZoneRef.current === next)
|
|
146
115
|
return;
|
|
@@ -155,7 +124,7 @@ export function SgToolBar(props) {
|
|
|
155
124
|
const loaded = await loadPersistedState(storageKey);
|
|
156
125
|
if (loaded === null || loaded === undefined)
|
|
157
126
|
return null;
|
|
158
|
-
const parsed =
|
|
127
|
+
const parsed = parseStoredPanelDragPosition(loaded);
|
|
159
128
|
if (!parsed) {
|
|
160
129
|
await clearPersistedState(storageKey);
|
|
161
130
|
return null;
|
|
@@ -170,7 +139,7 @@ export function SgToolBar(props) {
|
|
|
170
139
|
const raw = localStorage.getItem(storageKey);
|
|
171
140
|
if (!raw)
|
|
172
141
|
return null;
|
|
173
|
-
const parsed =
|
|
142
|
+
const parsed = parseStoredPanelDragPosition(raw);
|
|
174
143
|
if (!parsed) {
|
|
175
144
|
localStorage.removeItem(storageKey);
|
|
176
145
|
return null;
|
|
@@ -468,15 +437,10 @@ export function SgToolBar(props) {
|
|
|
468
437
|
saveStoredPosition,
|
|
469
438
|
setDragHoverZoneSafe
|
|
470
439
|
]);
|
|
471
|
-
const showContent = !isCollapsed;
|
|
472
|
-
const openUp = orientation === "vertical" && direction === "up";
|
|
473
|
-
const openLeft = orientation === "horizontal" && direction === "left";
|
|
474
440
|
const detachFromDockFlow = dragActive && inDock && !freeDrag;
|
|
475
441
|
const normalizedButtonsPerDirection = Number.isFinite(buttonsPerDirection) && typeof buttonsPerDirection === "number" && buttonsPerDirection > 0
|
|
476
442
|
? Math.floor(buttonsPerDirection)
|
|
477
443
|
: undefined;
|
|
478
|
-
const showLeadingCollapseButton = orientation === "horizontal" && openLeft && showContent;
|
|
479
|
-
const collapseIconDirection = resolvedOrientationDirection === "horizontal-right" ? "right" : direction;
|
|
480
444
|
const content = showContent ? (_jsx("div", { className: cn("gap-2 p-2", normalizedButtonsPerDirection
|
|
481
445
|
? "grid"
|
|
482
446
|
: orientation === "horizontal"
|
|
@@ -506,7 +470,7 @@ export function SgToolBar(props) {
|
|
|
506
470
|
: ""
|
|
507
471
|
: showContent
|
|
508
472
|
? (openUp ? "border-t border-border" : "border-b border-border")
|
|
509
|
-
: ""), style: { backgroundColor: bgColorTitle }, children: [collapsible && showLeadingCollapseButton ? (_jsx("button", { type: "button", className: "inline-flex size-6 items-center justify-center rounded-md hover:bg-muted", onClick: () => setIsCollapsed(!isCollapsed), onPointerDown: (e) => e.stopPropagation(), "aria-label": "
|
|
473
|
+
: ""), style: { backgroundColor: bgColorTitle }, children: [collapsible && showLeadingCollapseButton ? (_jsx("button", { type: "button", className: "inline-flex size-6 items-center justify-center rounded-md hover:bg-muted", onClick: () => setIsCollapsed(!isCollapsed), onPointerDown: (e) => e.stopPropagation(), "aria-label": t(i18n, "components.toolbar.toggle"), children: _jsx(CollapseIcon, { direction: collapseIconDirection, collapsed: isCollapsed }) })) : null, title ? (_jsx("span", { className: "text-xs font-semibold text-foreground truncate", children: title })) : null, collapsible && !showLeadingCollapseButton ? (_jsx("button", { type: "button", className: "ml-auto inline-flex size-6 items-center justify-center rounded-md hover:bg-muted", onClick: () => setIsCollapsed(!isCollapsed), onPointerDown: (e) => e.stopPropagation(), "aria-label": t(i18n, "components.toolbar.toggle"), children: _jsx(CollapseIcon, { direction: collapseIconDirection, collapsed: isCollapsed }) })) : null] })), openUp || openLeft ? null : content] }) }));
|
|
510
474
|
const needsCenterWrapper = inDock && (effectiveZone === "right" || effectiveZone === "left");
|
|
511
475
|
const toolbarForRender = needsCenterWrapper && !detachFromDockFlow ? (_jsx("div", { style: { width: "100%", display: "flex", justifyContent: "center", order: toolbarRenderOrder }, children: toolbar })) : toolbar;
|
|
512
476
|
if (portalTarget) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgTreeView.d.ts","sourceRoot":"","sources":["../../src/layout/SgTreeView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SgTreeView.d.ts","sourceRoot":"","sources":["../../src/layout/SgTreeView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import * as React from "react";
|
|
|
4
4
|
import { ChevronDown, ChevronUp, Search } from "lucide-react";
|
|
5
5
|
import { SgInputText } from "../inputs/SgInputText";
|
|
6
6
|
import { SgButton } from "../buttons/SgButton";
|
|
7
|
+
import { t, useComponentsI18n } from "../i18n";
|
|
7
8
|
function cn(...parts) {
|
|
8
9
|
return parts.filter(Boolean).join(" ");
|
|
9
10
|
}
|
|
@@ -190,7 +191,10 @@ function toneClasses(tone) {
|
|
|
190
191
|
};
|
|
191
192
|
}
|
|
192
193
|
export const SgTreeView = React.forwardRef(function SgTreeView(props, ref) {
|
|
193
|
-
const
|
|
194
|
+
const i18n = useComponentsI18n();
|
|
195
|
+
const { nodes, className, style, size = "md", density = "normal", tone = "default", iconTone = "default", checkable = false, checkMode = "live", confirmSelection = "leafOnly", searchable = false, searchPlaceholder: searchPlaceholderProp, expandMatchesOnSearch = true, branchLabelBehavior = "toggle", emptyText: emptyTextProp, maxHeightClassName = "max-h-[60vh]" } = props;
|
|
196
|
+
const searchPlaceholder = searchPlaceholderProp ?? `${t(i18n, "components.actions.search")}...`;
|
|
197
|
+
const emptyText = emptyTextProp ?? t(i18n, "components.tree.empty");
|
|
194
198
|
const SZ = sizeMap[size];
|
|
195
199
|
const DY = densityMap[density];
|
|
196
200
|
const T = toneClasses(tone);
|
|
@@ -317,7 +321,7 @@ export const SgTreeView = React.forwardRef(function SgTreeView(props, ref) {
|
|
|
317
321
|
const isOpen = expandedSet.has(node.id);
|
|
318
322
|
const isDisabled = !!node.disabled;
|
|
319
323
|
const checkedState = checkable ? computeCheckedState(node.id, maps.childrenById, checkedSet) : "unchecked";
|
|
320
|
-
return (_jsxs("div", { children: [_jsxs("div", { className: cn("flex items-center rounded-md", DY.rowPx, DY.rowPy, DY.gap, T.rowHover, isDisabled && "opacity-60"), style: { paddingLeft: 8 + depth * DY.indent }, children: [_jsx("button", { type: "button", className: cn(DY.caret, "shrink-0 rounded-md flex items-center justify-center", "hover:bg-sg-hover2 hover:bg-foreground/10", "focus:outline-none focus:ring-2 focus:ring-sg-focus/30", !hasChildren && "opacity-0 pointer-events-none"), onClick: () => hasChildren && !isDisabled && toggleExpand(node), "aria-label": isOpen ? "
|
|
324
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: cn("flex items-center rounded-md", DY.rowPx, DY.rowPy, DY.gap, T.rowHover, isDisabled && "opacity-60"), style: { paddingLeft: 8 + depth * DY.indent }, children: [_jsx("button", { type: "button", className: cn(DY.caret, "shrink-0 rounded-md flex items-center justify-center", "hover:bg-sg-hover2 hover:bg-foreground/10", "focus:outline-none focus:ring-2 focus:ring-sg-focus/30", !hasChildren && "opacity-0 pointer-events-none"), onClick: () => hasChildren && !isDisabled && toggleExpand(node), "aria-label": isOpen ? t(i18n, "components.actions.collapse") : t(i18n, "components.actions.expand"), disabled: isDisabled, children: _jsx("span", { className: cn("transition-transform", isOpen && "rotate-90"), children: ">" }) }), checkable && (_jsx("input", { type: "checkbox", className: cn(SZ.checkbox, "rounded border border-sg-border bg-sg-surface", "focus:outline-none focus:ring-2 focus:ring-sg-focus/30"), disabled: isDisabled, checked: checkedState === "checked", ref: (el) => {
|
|
321
325
|
if (el)
|
|
322
326
|
el.indeterminate = checkedState === "indeterminate";
|
|
323
327
|
}, onChange: () => toggleCheck(node) })), node.icon && (_jsx("div", { className: cn("shrink-0", SZ.icon, iconTone === "primary" ? "text-[rgb(var(--sg-primary-600))]" : ""), children: node.icon })), _jsx("button", { type: "button", className: cn("flex-1 text-left rounded-md", SZ.text, isDisabled ? "cursor-not-allowed" : "cursor-pointer", "focus:outline-none focus:ring-2 focus:ring-sg-focus/30"), onClick: () => {
|
|
@@ -333,6 +337,6 @@ export const SgTreeView = React.forwardRef(function SgTreeView(props, ref) {
|
|
|
333
337
|
}, disabled: isDisabled, children: node.label })] }), hasChildren && isOpen && _jsx("div", { children: node.children.map((c) => renderNode(c, depth + 1)) })] }, node.id));
|
|
334
338
|
};
|
|
335
339
|
const hasAny = filtered.length > 0;
|
|
336
|
-
return (_jsxs("div", { className: cn("w-full", className), style: style, children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [searchable && (_jsx(SgInputText, { id: searchId, labelText: searchPlaceholder, placeholder: searchPlaceholder, prefixIcon: _jsx(Search, { size: 16 }), clearButton: true, filled: true, inputProps: { value: search }, onChange: (value) => setSearch(value) })), _jsx(SgButton, { severity: "secondary", appearance: "ghost", size: "sm", shape: "rounded", onClick: expandAll, leftIcon: _jsx(ChevronDown, { className: "size-4" }), children:
|
|
340
|
+
return (_jsxs("div", { className: cn("w-full", className), style: style, children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [searchable && (_jsx(SgInputText, { id: searchId, labelText: searchPlaceholder, placeholder: searchPlaceholder, prefixIcon: _jsx(Search, { size: 16 }), clearButton: true, filled: true, inputProps: { value: search }, onChange: (value) => setSearch(value) })), _jsx(SgButton, { severity: "secondary", appearance: "ghost", size: "sm", shape: "rounded", onClick: expandAll, leftIcon: _jsx(ChevronDown, { className: "size-4" }), children: t(i18n, "components.actions.expandAll") }), _jsx(SgButton, { severity: "secondary", appearance: "ghost", size: "sm", shape: "rounded", onClick: collapseAll, leftIcon: _jsx(ChevronUp, { className: "size-4" }), children: t(i18n, "components.actions.collapseAll") }), checkable && (_jsx(SgButton, { severity: "danger", appearance: "outline", size: "sm", shape: "rounded", onClick: clearChecked, title: t(i18n, "components.actions.clearSelection"), children: t(i18n, "components.actions.clear") }))] }), _jsxs("div", { className: cn("rounded-sg border border-sg-border", T.panelBg, "text-sg-text"), children: [_jsx("div", { className: cn("overflow-auto", maxHeightClassName), children: _jsx("div", { className: "p-2", children: !hasAny ? (_jsx("div", { className: cn("p-6 text-center", SZ.text, T.subtle), children: emptyText })) : (filtered.map((n) => renderNode(n, 0))) }) }), confirmEnabled && confirmCfg && (_jsx("div", { className: cn("border-t border-sg-border px-3 py-2", (confirmCfg.sticky ?? true) && "sticky bottom-0 bg-sg-surface/95 bg-background/95 backdrop-blur"), children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("div", { className: cn("text-xs", T.subtle), children: confirmCfg.hint ?? (_jsxs(_Fragment, { children: [t(i18n, "components.tree.selected", { count: confirmSelectedIds.length }), confirmSelection === "leafOnly" ? t(i18n, "components.tree.selectedLeafs") : ""] })) }), _jsxs("div", { className: "flex items-center gap-2", children: [(confirmCfg.showCancel ?? false) && (_jsx("button", { type: "button", onClick: onCancel, className: cn("rounded-md border border-sg-border", T.panelBg, "text-sg-text hover:bg-sg-hover", "focus:outline-none focus:ring-2 focus:ring-sg-focus/30", SZ.btn), children: confirmCfg.cancelLabel ?? t(i18n, "components.actions.cancel") })), _jsx(SgButton, { severity: "secondary", appearance: "outline", size: "md", shape: "rounded", onClick: clearChecked, disabled: !!confirmDisabled, children: t(i18n, "components.actions.clear") }), _jsx(SgButton, { severity: "primary", appearance: "solid", elevation: "sm", size: "md", shape: "rounded", disabled: !!confirmDisabled, onClick: onConfirm, children: confirmCfg.label ?? t(i18n, "components.actions.confirm") })] })] }) }))] })] }));
|
|
337
341
|
});
|
|
338
342
|
SgTreeView.displayName = "SgTreeView";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function parseStoredPanelDragPosition(raw: unknown): {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
} | null;
|
|
5
|
+
export declare function buildToolbarStorageKey(id: string): string;
|
|
6
|
+
export declare function buildDockMenuStorageKey(dragId?: string | null, isAbsolutePosition?: boolean): string | null;
|
|
7
|
+
//# sourceMappingURL=drag-position.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-position.d.ts","sourceRoot":"","sources":["../../src/layout/drag-position.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwB1F;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,kBAAkB,UAAQ,GAAG,MAAM,GAAG,IAAI,CAGzG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function parseStoredPanelDragPosition(raw) {
|
|
2
|
+
const value = typeof raw === "string" ? (() => {
|
|
3
|
+
try {
|
|
4
|
+
return JSON.parse(raw);
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
})() : raw;
|
|
10
|
+
if (!value ||
|
|
11
|
+
typeof value !== "object" ||
|
|
12
|
+
typeof value.x !== "number" ||
|
|
13
|
+
typeof value.y !== "number" ||
|
|
14
|
+
!Number.isFinite(value.x) ||
|
|
15
|
+
!Number.isFinite(value.y)) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
x: value.x,
|
|
20
|
+
y: value.y
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function buildToolbarStorageKey(id) {
|
|
24
|
+
return `sg-toolbar-pos:${id}`;
|
|
25
|
+
}
|
|
26
|
+
export function buildDockMenuStorageKey(dragId, isAbsolutePosition = false) {
|
|
27
|
+
if (!dragId)
|
|
28
|
+
return null;
|
|
29
|
+
return `sg-dockmenu-pos:${dragId}:${isAbsolutePosition ? "parent" : "viewport"}`;
|
|
30
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
export type MenuLogicNode = {
|
|
2
|
+
id: string;
|
|
3
|
+
label?: string;
|
|
4
|
+
children?: MenuLogicNode[];
|
|
5
|
+
url?: string;
|
|
6
|
+
onClick?: (() => void) | undefined;
|
|
7
|
+
};
|
|
8
|
+
export type MenuVisibleNode<T extends MenuLogicNode = MenuLogicNode> = {
|
|
9
|
+
node: T;
|
|
10
|
+
depth: number;
|
|
11
|
+
parentId?: string;
|
|
12
|
+
};
|
|
13
|
+
export type MenuSearchEntry = {
|
|
14
|
+
id: string;
|
|
15
|
+
label: string;
|
|
16
|
+
path: string;
|
|
17
|
+
group: string;
|
|
18
|
+
};
|
|
19
|
+
export type MenuMaps<T extends MenuLogicNode = MenuLogicNode> = {
|
|
20
|
+
parentById: Map<string, string>;
|
|
21
|
+
nodeById: Map<string, T>;
|
|
22
|
+
childrenByParent: Map<string, string[]>;
|
|
23
|
+
firstByUrl: Map<string, string>;
|
|
24
|
+
};
|
|
25
|
+
export type MenuActiveSets = {
|
|
26
|
+
exact: Set<string>;
|
|
27
|
+
branch: Set<string>;
|
|
28
|
+
};
|
|
29
|
+
export type MenuKeyboardAction = {
|
|
30
|
+
type: "focus";
|
|
31
|
+
id: string;
|
|
32
|
+
} | {
|
|
33
|
+
type: "toggle";
|
|
34
|
+
id: string;
|
|
35
|
+
} | {
|
|
36
|
+
type: "activate";
|
|
37
|
+
id: string;
|
|
38
|
+
} | {
|
|
39
|
+
type: "noop";
|
|
40
|
+
};
|
|
41
|
+
export declare function buildMenuMaps<T extends MenuLogicNode>(menu: T[], rootParentId?: string): MenuMaps<T>;
|
|
42
|
+
export declare function collectParentChain(parentById: Map<string, string>, id: string, rootParentId?: string): string[];
|
|
43
|
+
export declare function computeActiveSets<T extends MenuLogicNode>(nodes: T[], activeId: string | undefined, activeUrl: string | undefined): MenuActiveSets;
|
|
44
|
+
export declare function resolveEffectiveActiveId(args: {
|
|
45
|
+
activeId?: string;
|
|
46
|
+
activeUrl?: string;
|
|
47
|
+
localActiveId?: string;
|
|
48
|
+
firstByUrl: Map<string, string>;
|
|
49
|
+
}): string | undefined;
|
|
50
|
+
export declare function mergeExpandedIdsForActivePath(currentIds: string[], parentChain: string[]): string[];
|
|
51
|
+
export declare function resolveTieredActiveState<T extends MenuLogicNode>(args: {
|
|
52
|
+
effectiveActiveId?: string;
|
|
53
|
+
maps: MenuMaps<T>;
|
|
54
|
+
menu: T[];
|
|
55
|
+
rootParentId?: string;
|
|
56
|
+
}): {
|
|
57
|
+
tieredPath: string[];
|
|
58
|
+
megaActiveId?: string;
|
|
59
|
+
};
|
|
60
|
+
export declare function resolveMenuLayoutState(args: {
|
|
61
|
+
dockMode: boolean;
|
|
62
|
+
effectiveDockZone: string | null;
|
|
63
|
+
orientationDirection?: "horizontal-left" | "horizontal-right" | "vertical-up" | "vertical-top" | "vertical-down";
|
|
64
|
+
position: "left" | "right";
|
|
65
|
+
horizontalDockAlign: "left" | "right" | null;
|
|
66
|
+
isCollapsed: boolean;
|
|
67
|
+
menuStyle: "sidebar" | "drawer" | "inline" | "hybrid";
|
|
68
|
+
effectiveMenuStyle: "panel" | "tiered" | "mega-horizontal" | "mega-vertical";
|
|
69
|
+
pinnedState: boolean;
|
|
70
|
+
expandedWidthCss: string;
|
|
71
|
+
collapsedWidthCss: string;
|
|
72
|
+
}): {
|
|
73
|
+
resolvedPosition: "left" | "right";
|
|
74
|
+
isHorizontalDockZone: boolean;
|
|
75
|
+
isVerticalDockZone: boolean;
|
|
76
|
+
tieredOpenToLeft: boolean;
|
|
77
|
+
isMegaMenuStyle: boolean;
|
|
78
|
+
dockAlign: "start" | "end" | null;
|
|
79
|
+
sidebarWidthCss: string;
|
|
80
|
+
};
|
|
81
|
+
export type MenuHintPlacement = "top" | "right";
|
|
82
|
+
export declare function resolveMenuNodeActionIntent(args: {
|
|
83
|
+
variant: "panel" | "flat";
|
|
84
|
+
hasChildren: boolean;
|
|
85
|
+
hasActionTarget: boolean;
|
|
86
|
+
isCollapsed?: boolean;
|
|
87
|
+
}): "toggle" | "activate" | "noop";
|
|
88
|
+
export declare function resolveExpandedIdsToggle(args: {
|
|
89
|
+
currentIds: string[];
|
|
90
|
+
nodeId: string;
|
|
91
|
+
mode: "accordion" | "multiple";
|
|
92
|
+
parentById: Map<string, string>;
|
|
93
|
+
childrenByParent: Map<string, string[]>;
|
|
94
|
+
rootParentId?: string;
|
|
95
|
+
}): string[];
|
|
96
|
+
export declare function resolveMenuHintPosition(args: {
|
|
97
|
+
isConnected: boolean;
|
|
98
|
+
rect: {
|
|
99
|
+
left: number;
|
|
100
|
+
right: number;
|
|
101
|
+
top: number;
|
|
102
|
+
width: number;
|
|
103
|
+
height: number;
|
|
104
|
+
};
|
|
105
|
+
placement: MenuHintPlacement;
|
|
106
|
+
}): {
|
|
107
|
+
x: number;
|
|
108
|
+
y: number;
|
|
109
|
+
} | null;
|
|
110
|
+
export declare function resolveHorizontalDockAlign(clientX: number, zoneRect: {
|
|
111
|
+
left: number;
|
|
112
|
+
width: number;
|
|
113
|
+
}): "left" | "right";
|
|
114
|
+
export declare function resolveTieredHoverPath(currentPath: string[], depth: number, nodeId: string, hasChildren: boolean): string[];
|
|
115
|
+
export declare function resolveTieredHoverIntent(args: {
|
|
116
|
+
currentPath: string[];
|
|
117
|
+
depth: number;
|
|
118
|
+
nodeId: string;
|
|
119
|
+
hasChildren: boolean;
|
|
120
|
+
openSubmenuOnHover: boolean;
|
|
121
|
+
}): string[] | undefined;
|
|
122
|
+
export declare function resolveTieredClickState(currentPath: string[], depth: number, nodeId: string): {
|
|
123
|
+
nextPath: string[];
|
|
124
|
+
isOpenAtDepth: boolean;
|
|
125
|
+
};
|
|
126
|
+
export declare function resolveMenuSearchSelectionState(args: {
|
|
127
|
+
currentExpandedIds: string[];
|
|
128
|
+
parentChain: string[];
|
|
129
|
+
rootToParent: string[];
|
|
130
|
+
nodeId: string;
|
|
131
|
+
hasChildren: boolean;
|
|
132
|
+
hasActionTarget: boolean;
|
|
133
|
+
}): {
|
|
134
|
+
expandedIds: string[];
|
|
135
|
+
tieredPath: string[];
|
|
136
|
+
megaActiveId?: string;
|
|
137
|
+
localActiveId?: string;
|
|
138
|
+
shouldActivateNode: boolean;
|
|
139
|
+
};
|
|
140
|
+
export declare function resolveTieredNodeClickIntent(args: {
|
|
141
|
+
currentPath: string[];
|
|
142
|
+
depth: number;
|
|
143
|
+
nodeId: string;
|
|
144
|
+
hasChildren: boolean;
|
|
145
|
+
hasActionTarget: boolean;
|
|
146
|
+
}): {
|
|
147
|
+
nextPath: string[];
|
|
148
|
+
shouldActivateNode: boolean;
|
|
149
|
+
isOpenAtDepth: boolean;
|
|
150
|
+
};
|
|
151
|
+
export declare function resolveMegaMenuActiveNode<T extends MenuLogicNode>(items: T[], megaActiveId?: string): T | undefined;
|
|
152
|
+
export declare function resolveMegaMenuInteraction(args: {
|
|
153
|
+
nodeId: string;
|
|
154
|
+
hasChildren: boolean;
|
|
155
|
+
}): {
|
|
156
|
+
nextMegaActiveId?: string;
|
|
157
|
+
shouldActivateNode: boolean;
|
|
158
|
+
};
|
|
159
|
+
export declare function resolveMegaMenuHoverActiveId(args: {
|
|
160
|
+
nodeId: string;
|
|
161
|
+
hasChildren: boolean;
|
|
162
|
+
}): string | undefined;
|
|
163
|
+
export type MenuAutocompleteItem = {
|
|
164
|
+
id: string;
|
|
165
|
+
label: string;
|
|
166
|
+
value: string;
|
|
167
|
+
group: string;
|
|
168
|
+
data: {
|
|
169
|
+
nodeId: string;
|
|
170
|
+
path: string;
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
export declare function resolveMenuAutocompleteItems(searchEntries: MenuSearchEntry[], query: string, limit?: number): MenuAutocompleteItem[];
|
|
174
|
+
export declare function filterMenuNodes<T extends MenuLogicNode>(nodes: T[], query: string): T[];
|
|
175
|
+
export declare function collectMenuSearchEntries<T extends MenuLogicNode>(nodes: T[], trail?: string[], out?: MenuSearchEntry[]): MenuSearchEntry[];
|
|
176
|
+
export declare function flattenVisibleNodes<T extends MenuLogicNode>(nodes: T[], expandedSet: Set<string>, collapsed: boolean, forceExpand: boolean, depth?: number, parentId?: string, out?: MenuVisibleNode<T>[]): MenuVisibleNode<T>[];
|
|
177
|
+
export declare function resolveMenuKeyboardAction(args: {
|
|
178
|
+
key: string;
|
|
179
|
+
visibleNodes: MenuVisibleNode[];
|
|
180
|
+
focusedId?: string;
|
|
181
|
+
expandedIds: Set<string>;
|
|
182
|
+
hasSearch: boolean;
|
|
183
|
+
isCollapsed: boolean;
|
|
184
|
+
parentById: Map<string, string>;
|
|
185
|
+
rootParentId: string;
|
|
186
|
+
}): MenuKeyboardAction;
|
|
187
|
+
//# sourceMappingURL=menu-logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-logic.d.ts","sourceRoot":"","sources":["../../src/layout/menu-logic.ts"],"names":[],"mappings":"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"}
|