@geotab/zenith 3.15.0-beta.3 → 3.15.0-nightly.20260901.415ef01
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/absolute/absolute.js +1 -1
- package/dist/betaPill/betaPill.js +9 -9
- package/dist/commonHelpers/arrowNavigation/arrowNavigationHelper.d.ts +1 -0
- package/dist/commonHelpers/arrowNavigation/arrowNavigationHelper.js +5 -1
- package/dist/commonHelpers/hooks/useTrapFocus.d.ts +9 -0
- package/dist/commonHelpers/hooks/useTrapFocus.js +66 -14
- package/dist/controlledPopup/controlledPopup.d.ts +1 -1
- package/dist/controlledPopup/controlledPopup.js +1 -1
- package/dist/dropdownRaw/dropdownSearchableTrigger.js +1 -1
- package/dist/filtersBar/components/filtersBarRange/filtersBarRange.d.ts +1 -1
- package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.d.ts +1 -1
- package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +8 -5
- package/dist/filtersBar/filtersContainer/filtersContainer.js +7 -4
- package/dist/index.css +134 -4
- package/dist/index.d.ts +6 -1
- package/dist/index.js +12 -3
- package/dist/modal/modal.d.ts +48 -0
- package/dist/modal/modal.js +37 -7
- package/dist/nav/navHeader/navHeaderSearch/navHeaderSearch.js +1 -1
- package/dist/pillExpandable/pillExpandable.js +6 -3
- package/dist/rangeRaw/components/rangeField.d.ts +2 -1
- package/dist/rangeRaw/components/rangeField.js +4 -3
- package/dist/rangeRaw/rangeRaw.js +8 -5
- package/dist/rangeRaw/types.d.ts +1 -0
- package/dist/sidePanel/sidePanel.js +3 -2
- package/dist/table/selectable/interfaces.d.ts +13 -0
- package/dist/table/selectable/useSelectableRows.js +46 -12
- package/dist/table/selectable/utils/calculateSelectionState.js +35 -0
- package/dist/table/selectable/utils/isRowChecked.js +12 -1
- package/dist/table/table.d.ts +2 -0
- package/dist/table/table.js +3 -1
- package/dist/tabs/tabs.js +14 -5
- package/dist/textInputRaw/textInputRaw.js +1 -1
- package/dist/textInputRaw/types.d.ts +1 -0
- package/dist/tooltip/components/inlineTrigger.d.ts +43 -0
- package/dist/tooltip/components/inlineTrigger.js +42 -0
- package/dist/tooltip/tooltip.d.ts +5 -2
- package/dist/tooltip/tooltip.js +15 -4
- package/dist/trendIndicator/trendIndicator.d.ts +47 -0
- package/dist/trendIndicator/trendIndicator.js +47 -0
- package/dist/trendIndicator/trendIndicatorUtils.d.ts +9 -0
- package/dist/trendIndicator/trendIndicatorUtils.js +18 -0
- package/dist/utils/experimentalFeatures/experimentalContext.d.ts +17 -0
- package/dist/utils/experimentalFeatures/experimentalContext.js +29 -0
- package/dist/utils/experimentalFeatures/index.d.ts +4 -0
- package/dist/utils/experimentalFeatures/index.js +9 -0
- package/dist/utils/experimentalFeatures/registry.d.ts +13 -0
- package/dist/utils/experimentalFeatures/registry.js +11 -0
- package/dist/utils/experimentalFeatures/useExperimentalFeature.d.ts +3 -0
- package/dist/utils/experimentalFeatures/useExperimentalFeature.js +25 -0
- package/dist/utils/localization/translations/ar.json +1 -1
- package/dist/utils/localization/translations/bg-BG.json +1 -1
- package/dist/utils/localization/translations/cs.json +1 -1
- package/dist/utils/localization/translations/da-DK.json +1 -1
- package/dist/utils/localization/translations/de.json +1 -1
- package/dist/utils/localization/translations/el-GR.json +1 -1
- package/dist/utils/localization/translations/en.json +1 -1
- package/dist/utils/localization/translations/es.json +1 -1
- package/dist/utils/localization/translations/et-EE.json +1 -1
- package/dist/utils/localization/translations/fi-FI.json +1 -1
- package/dist/utils/localization/translations/fr-FR.json +1 -1
- package/dist/utils/localization/translations/fr.json +1 -1
- package/dist/utils/localization/translations/hu-HU.json +1 -1
- package/dist/utils/localization/translations/id.json +1 -1
- package/dist/utils/localization/translations/it.json +1 -1
- package/dist/utils/localization/translations/ja.json +1 -1
- package/dist/utils/localization/translations/ka-GE.json +1 -1
- package/dist/utils/localization/translations/ko-KR.json +1 -1
- package/dist/utils/localization/translations/lt-LT.json +1 -1
- package/dist/utils/localization/translations/lv-LV.json +1 -1
- package/dist/utils/localization/translations/ms.json +1 -1
- package/dist/utils/localization/translations/nb-NO.json +1 -1
- package/dist/utils/localization/translations/nl.json +1 -1
- package/dist/utils/localization/translations/pl.json +1 -1
- package/dist/utils/localization/translations/pt-BR.json +1 -1
- package/dist/utils/localization/translations/pt-PT.json +1 -1
- package/dist/utils/localization/translations/ro-RO.json +1 -1
- package/dist/utils/localization/translations/sk-SK.json +1 -1
- package/dist/utils/localization/translations/sv.json +1 -1
- package/dist/utils/localization/translations/th.json +1 -1
- package/dist/utils/localization/translations/tr.json +1 -1
- package/dist/utils/localization/translations/zh-Hans.json +1 -1
- package/dist/utils/localization/translations/zh-TW.json +1 -1
- package/esm/absolute/absolute.js +1 -1
- package/esm/betaPill/betaPill.js +9 -9
- package/esm/commonHelpers/arrowNavigation/arrowNavigationHelper.d.ts +1 -0
- package/esm/commonHelpers/arrowNavigation/arrowNavigationHelper.js +3 -0
- package/esm/commonHelpers/hooks/useTrapFocus.d.ts +9 -0
- package/esm/commonHelpers/hooks/useTrapFocus.js +67 -15
- package/esm/controlledPopup/controlledPopup.d.ts +1 -1
- package/esm/controlledPopup/controlledPopup.js +1 -1
- package/esm/dropdownRaw/dropdownSearchableTrigger.js +1 -1
- package/esm/filtersBar/components/filtersBarRange/filtersBarRange.d.ts +1 -1
- package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.d.ts +1 -1
- package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +8 -5
- package/esm/filtersBar/filtersContainer/filtersContainer.js +7 -4
- package/esm/index.d.ts +6 -1
- package/esm/index.js +5 -1
- package/esm/modal/modal.d.ts +48 -0
- package/esm/modal/modal.js +37 -7
- package/esm/nav/navHeader/navHeaderSearch/navHeaderSearch.js +1 -1
- package/esm/pillExpandable/pillExpandable.js +6 -3
- package/esm/rangeRaw/components/rangeField.d.ts +2 -1
- package/esm/rangeRaw/components/rangeField.js +4 -3
- package/esm/rangeRaw/rangeRaw.js +8 -5
- package/esm/rangeRaw/types.d.ts +1 -0
- package/esm/sidePanel/sidePanel.js +3 -2
- package/esm/table/selectable/interfaces.d.ts +13 -0
- package/esm/table/selectable/useSelectableRows.js +46 -12
- package/esm/table/selectable/utils/calculateSelectionState.js +35 -0
- package/esm/table/selectable/utils/isRowChecked.js +12 -1
- package/esm/table/table.d.ts +2 -0
- package/esm/table/table.js +2 -0
- package/esm/tabs/tabs.js +14 -5
- package/esm/testHelpers/renderWithFeatures.d.ts +4 -0
- package/esm/testHelpers/renderWithFeatures.js +6 -0
- package/esm/textInputRaw/textInputRaw.js +1 -1
- package/esm/textInputRaw/types.d.ts +1 -0
- package/esm/tooltip/components/inlineTrigger.d.ts +43 -0
- package/esm/tooltip/components/inlineTrigger.js +38 -0
- package/esm/tooltip/tooltip.d.ts +5 -2
- package/esm/tooltip/tooltip.js +15 -4
- package/esm/trendIndicator/trendIndicator.d.ts +47 -0
- package/esm/trendIndicator/trendIndicator.js +43 -0
- package/esm/trendIndicator/trendIndicatorUtils.d.ts +9 -0
- package/esm/trendIndicator/trendIndicatorUtils.js +14 -0
- package/esm/utils/experimentalFeatures/experimentalContext.d.ts +17 -0
- package/esm/utils/experimentalFeatures/experimentalContext.js +25 -0
- package/esm/utils/experimentalFeatures/index.d.ts +4 -0
- package/esm/utils/experimentalFeatures/index.js +3 -0
- package/esm/utils/experimentalFeatures/registry.d.ts +13 -0
- package/esm/utils/experimentalFeatures/registry.js +8 -0
- package/esm/utils/experimentalFeatures/useExperimentalFeature.d.ts +3 -0
- package/esm/utils/experimentalFeatures/useExperimentalFeature.js +21 -0
- package/esm/utils/localization/translations/ar.json +1 -1
- package/esm/utils/localization/translations/bg-BG.json +1 -1
- package/esm/utils/localization/translations/cs.json +1 -1
- package/esm/utils/localization/translations/da-DK.json +1 -1
- package/esm/utils/localization/translations/de.json +1 -1
- package/esm/utils/localization/translations/el-GR.json +1 -1
- package/esm/utils/localization/translations/en.json +1 -1
- package/esm/utils/localization/translations/es.json +1 -1
- package/esm/utils/localization/translations/et-EE.json +1 -1
- package/esm/utils/localization/translations/fi-FI.json +1 -1
- package/esm/utils/localization/translations/fr-FR.json +1 -1
- package/esm/utils/localization/translations/fr.json +1 -1
- package/esm/utils/localization/translations/hu-HU.json +1 -1
- package/esm/utils/localization/translations/id.json +1 -1
- package/esm/utils/localization/translations/it.json +1 -1
- package/esm/utils/localization/translations/ja.json +1 -1
- package/esm/utils/localization/translations/ka-GE.json +1 -1
- package/esm/utils/localization/translations/ko-KR.json +1 -1
- package/esm/utils/localization/translations/lt-LT.json +1 -1
- package/esm/utils/localization/translations/lv-LV.json +1 -1
- package/esm/utils/localization/translations/ms.json +1 -1
- package/esm/utils/localization/translations/nb-NO.json +1 -1
- package/esm/utils/localization/translations/nl.json +1 -1
- package/esm/utils/localization/translations/pl.json +1 -1
- package/esm/utils/localization/translations/pt-BR.json +1 -1
- package/esm/utils/localization/translations/pt-PT.json +1 -1
- package/esm/utils/localization/translations/ro-RO.json +1 -1
- package/esm/utils/localization/translations/sk-SK.json +1 -1
- package/esm/utils/localization/translations/sv.json +1 -1
- package/esm/utils/localization/translations/th.json +1 -1
- package/esm/utils/localization/translations/tr.json +1 -1
- package/esm/utils/localization/translations/zh-Hans.json +1 -1
- package/esm/utils/localization/translations/zh-TW.json +1 -1
- package/package.json +36 -16
- package/dist/banner/utils/isBannerTarget.d.ts +0 -1
- package/dist/banner/utils/isBannerTarget.js +0 -11
- package/esm/banner/utils/isBannerTarget.d.ts +0 -1
- package/esm/banner/utils/isBannerTarget.js +0 -7
|
@@ -111,7 +111,7 @@ const Absolute = ({ isOpen, id, paddingX, paddingY, className, children, trigger
|
|
|
111
111
|
returnFocusToTrigger();
|
|
112
112
|
}
|
|
113
113
|
}, [isOpen, returnFocusToTrigger]);
|
|
114
|
-
const condition = (0, react_1.useCallback)(() =>
|
|
114
|
+
const condition = (0, react_1.useCallback)((subscriptionTrigger) => useTrapFocusWithTrigger !== "off" && !!subscriptionTrigger, [useTrapFocusWithTrigger]);
|
|
115
115
|
(0, useTrapFocus_1.useTrapFocus)(popupRef, useTrapFocusWithTrigger === "withTrigger" ? triggerRef : undefined, isOpen, condition);
|
|
116
116
|
(0, useEscape_1.useEscape)(popupRef, handleEscape, isOpen);
|
|
117
117
|
(0, useArrowKey_1.useArrowKey)(popupRef, handleEscape, isOpen);
|
|
@@ -162,15 +162,15 @@ const BetaPill = props => {
|
|
|
162
162
|
const isMobile = (0, useMobile_1.useMobile)();
|
|
163
163
|
const pillClasses = (0, react_1.useMemo)(() => (0, classNames_1.classNames)(["zen-caption", "zen-beta-pill", isMobile ? "zen-beta-pill--mobile" : "", className !== null && className !== void 0 ? className : ""]), [isMobile, className]);
|
|
164
164
|
const contextActions = (0, betaPillContext_1.useBetaPillActions)();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (
|
|
168
|
-
resolvedMainAction = Object.assign(Object.assign({},
|
|
169
|
-
text:
|
|
170
|
-
});
|
|
171
|
-
resolvedSecondaryAction = Object.assign(Object.assign({},
|
|
172
|
-
text:
|
|
173
|
-
});
|
|
165
|
+
const rawMainAction = feedbackAction || (contextActions === null || contextActions === void 0 ? void 0 : contextActions.feedbackAction);
|
|
166
|
+
const rawSecondaryAction = betaOptionAction || (contextActions === null || contextActions === void 0 ? void 0 : contextActions.betaOptionAction);
|
|
167
|
+
if (rawMainAction || rawSecondaryAction) {
|
|
168
|
+
const resolvedMainAction = rawMainAction ? Object.assign(Object.assign({}, rawMainAction), {
|
|
169
|
+
text: rawMainAction.text || translate("Send feedback")
|
|
170
|
+
}) : undefined;
|
|
171
|
+
const resolvedSecondaryAction = rawSecondaryAction ? Object.assign(Object.assign({}, rawSecondaryAction), {
|
|
172
|
+
text: rawSecondaryAction.text || translate("Manage beta option")
|
|
173
|
+
}) : undefined;
|
|
174
174
|
return (0, jsx_runtime_1.jsx)(pillExpandable_1.PillExpandable, {
|
|
175
175
|
isBeta: true,
|
|
176
176
|
icon: iconLab_1.IconLab,
|
|
@@ -5,6 +5,7 @@ interface IScrollOptions {
|
|
|
5
5
|
top: number;
|
|
6
6
|
left: number;
|
|
7
7
|
}
|
|
8
|
+
export declare const getDirectionalScrollDelta: (delta: number, isRTL: boolean) => number;
|
|
8
9
|
export declare const getScrollOptions: (action: string, element: HTMLElement | null, isRTL?: boolean) => IScrollOptions;
|
|
9
10
|
export declare const extractButtonAction: (event: React.MouseEvent<HTMLElement>) => TArrowsNavValue | null;
|
|
10
11
|
export declare const scrollElement: (element: HTMLElement, options: IScrollOptions) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.scrollElement = exports.extractButtonAction = exports.getScrollOptions = exports.clearTimerTimeout = exports.clearTimerInterval = void 0;
|
|
3
|
+
exports.scrollElement = exports.extractButtonAction = exports.getScrollOptions = exports.getDirectionalScrollDelta = exports.clearTimerTimeout = exports.clearTimerInterval = void 0;
|
|
4
4
|
const zen_1 = require("../../utils/zen");
|
|
5
5
|
const clearTimerInterval = (timerId) => {
|
|
6
6
|
var _a;
|
|
@@ -38,6 +38,10 @@ const getLTRScrollLeft = (action, scrollLeft, step, element) => {
|
|
|
38
38
|
}
|
|
39
39
|
return scrollLeft;
|
|
40
40
|
};
|
|
41
|
+
// In RTL the horizontal scroll axis is inverted: scrollLeft is 0 at the right edge and goes negative
|
|
42
|
+
// toward the left edge, so a delta meant to move the viewport toward the arrow must flip sign.
|
|
43
|
+
const getDirectionalScrollDelta = (delta, isRTL) => (isRTL ? -delta : delta);
|
|
44
|
+
exports.getDirectionalScrollDelta = getDirectionalScrollDelta;
|
|
41
45
|
const getScrollOptions = (action, element, isRTL = false) => {
|
|
42
46
|
const step = (element === null || element === void 0 ? void 0 : element.offsetWidth) ? element.offsetWidth : 100;
|
|
43
47
|
const scrollTop = (element === null || element === void 0 ? void 0 : element.scrollTop) || 0;
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { RefObject } from "react";
|
|
2
2
|
type TElementToBool = (element: HTMLElement) => boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Traps keyboard (Tab) focus within `containerRef` (and optionally its `triggerRef`).
|
|
5
|
+
*
|
|
6
|
+
* Nested-popup contract: for correct nested-popup behaviour, a focused element that triggers an
|
|
7
|
+
* open child popup must expose a `data-popup-id` attribute whose value is the `id` of the child
|
|
8
|
+
* popup element rendered in the DOM. When present, focus is deferred to that child popup's trap.
|
|
9
|
+
* This contract is fulfilled automatically by `ControlledPopup`; callers using `useTrapFocus`
|
|
10
|
+
* directly must set `data-popup-id` themselves or nested popups will silently lose focus handling.
|
|
11
|
+
*/
|
|
3
12
|
export declare const useTrapFocus: (containerRef: RefObject<HTMLElement | null>, triggerRef: RefObject<HTMLElement | null> | undefined, subscriptionTrigger: unknown, condition?: (t: unknown) => boolean, isElementVisible?: TElementToBool) => void;
|
|
4
13
|
export {};
|
|
@@ -9,18 +9,38 @@ const isChildOf_1 = require("../../utils/isChildOf");
|
|
|
9
9
|
const isElementHidden_1 = require("../../utils/isElementHidden");
|
|
10
10
|
const zen_1 = require("../../utils/zen");
|
|
11
11
|
const findFirstVisible = (elems, isElementVisible) => elems.find(elem => isElementVisible(elem));
|
|
12
|
+
/**
|
|
13
|
+
* Traps keyboard (Tab) focus within `containerRef` (and optionally its `triggerRef`).
|
|
14
|
+
*
|
|
15
|
+
* Nested-popup contract: for correct nested-popup behaviour, a focused element that triggers an
|
|
16
|
+
* open child popup must expose a `data-popup-id` attribute whose value is the `id` of the child
|
|
17
|
+
* popup element rendered in the DOM. When present, focus is deferred to that child popup's trap.
|
|
18
|
+
* This contract is fulfilled automatically by `ControlledPopup`; callers using `useTrapFocus`
|
|
19
|
+
* directly must set `data-popup-id` themselves or nested popups will silently lose focus handling.
|
|
20
|
+
*/
|
|
12
21
|
const useTrapFocus = (containerRef, triggerRef, subscriptionTrigger, condition, isElementVisible) => {
|
|
13
22
|
/* eslint-disable complexity */
|
|
14
23
|
const handleKeyDown = (0, react_1.useCallback)(e => {
|
|
15
|
-
var _a, _b, _c, _d, _e, _f;
|
|
24
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
16
25
|
/* eslint-enable complexity */
|
|
17
26
|
const getChildCondition = () => {
|
|
18
|
-
var _a, _b;
|
|
27
|
+
var _a, _b, _c;
|
|
28
|
+
const targetEl = e.target;
|
|
29
|
+
// If the target is a trigger for an open child popup, defer to that popup's
|
|
30
|
+
// focus trap. Key on data-popup-id + DOM presence so this works even when
|
|
31
|
+
// preventAttributesAutoSet suppresses aria-expanded.
|
|
32
|
+
const dataPopupId = targetEl.getAttribute("data-popup-id");
|
|
33
|
+
if (dataPopupId &&
|
|
34
|
+
((_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.getElementById(dataPopupId)) &&
|
|
35
|
+
(0, isChildOf_1.isChildOf)(targetEl, containerRef.current) &&
|
|
36
|
+
targetEl !== (triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current)) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
19
39
|
return triggerRef
|
|
20
|
-
? !(0, isChildOf_1.isChildOf)(
|
|
21
|
-
|
|
22
|
-
!(0, isChildOf_1.isChildOf)(
|
|
23
|
-
: !(0, isChildOf_1.isChildOf)(
|
|
40
|
+
? !(0, isChildOf_1.isChildOf)(targetEl, containerRef.current) &&
|
|
41
|
+
targetEl !== ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.body) &&
|
|
42
|
+
!(0, isChildOf_1.isChildOf)(targetEl, triggerRef.current)
|
|
43
|
+
: !(0, isChildOf_1.isChildOf)(targetEl, containerRef.current) && targetEl !== ((_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.body);
|
|
24
44
|
};
|
|
25
45
|
if (!containerRef.current || getChildCondition()) {
|
|
26
46
|
return;
|
|
@@ -30,9 +50,14 @@ const useTrapFocus = (containerRef, triggerRef, subscriptionTrigger, condition,
|
|
|
30
50
|
: !(0, dialogHelpers_1.isElementInsideContainer)(target, containerEl.current) &&
|
|
31
51
|
!(0, dialogHelpers_1.isElementInsideContainer)(target, triggerEl.current);
|
|
32
52
|
const isTargetOutside = e.target ? checkIsElementOutside(e.target, containerRef, triggerRef) : undefined;
|
|
33
|
-
const
|
|
53
|
+
const triggerElement = (_a = triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current) !== null && _a !== void 0 ? _a : null;
|
|
54
|
+
const triggerSelf = (triggerElement === null || triggerElement === void 0 ? void 0 : triggerElement.matches(focusableSelector_1.FOCUSABLE_SELECTOR)) ? [triggerElement] : [];
|
|
55
|
+
const triggerChildren = Array.from((_b = triggerElement === null || triggerElement === void 0 ? void 0 : triggerElement.querySelectorAll(focusableSelector_1.FOCUSABLE_SELECTOR)) !== null && _b !== void 0 ? _b : []);
|
|
56
|
+
// querySelectorAll only returns descendants (never the element itself), so triggerSelf
|
|
57
|
+
// and triggerChildren are disjoint by definition and need no deduplication.
|
|
58
|
+
const triggerSelectors = [...triggerSelf, ...triggerChildren];
|
|
34
59
|
const containerSelectors = containerRef.current.querySelectorAll(focusableSelector_1.FOCUSABLE_SELECTOR);
|
|
35
|
-
const focusable = triggerRef ? [...
|
|
60
|
+
const focusable = triggerRef ? [...triggerSelectors, ...Array.from(containerSelectors)] : [...Array.from(containerSelectors)];
|
|
36
61
|
if (!focusable.length) {
|
|
37
62
|
return;
|
|
38
63
|
}
|
|
@@ -49,32 +74,59 @@ const useTrapFocus = (containerRef, triggerRef, subscriptionTrigger, condition,
|
|
|
49
74
|
return;
|
|
50
75
|
}
|
|
51
76
|
if (e.shiftKey) {
|
|
52
|
-
if (((
|
|
77
|
+
if (((_c = zen_1.zen.document) === null || _c === void 0 ? void 0 : _c.activeElement) === first) {
|
|
53
78
|
e.preventDefault();
|
|
54
79
|
last === null || last === void 0 ? void 0 : last.focus();
|
|
55
80
|
return;
|
|
56
81
|
}
|
|
57
|
-
if (firstContainerFocusable && ((
|
|
82
|
+
if (firstContainerFocusable && ((_d = zen_1.zen.document) === null || _d === void 0 ? void 0 : _d.activeElement) === firstContainerFocusable) {
|
|
58
83
|
e.preventDefault();
|
|
59
84
|
lastTriggerFocusable === null || lastTriggerFocusable === void 0 ? void 0 : lastTriggerFocusable.focus();
|
|
60
85
|
}
|
|
61
86
|
return;
|
|
62
87
|
}
|
|
63
|
-
if (((
|
|
88
|
+
if (((_e = zen_1.zen.document) === null || _e === void 0 ? void 0 : _e.activeElement) === last) {
|
|
64
89
|
e.preventDefault();
|
|
65
90
|
first === null || first === void 0 ? void 0 : first.focus();
|
|
66
91
|
return;
|
|
67
92
|
}
|
|
68
|
-
if (lastTriggerFocusable && ((
|
|
93
|
+
if (lastTriggerFocusable && ((_f = zen_1.zen.document) === null || _f === void 0 ? void 0 : _f.activeElement) === lastTriggerFocusable) {
|
|
69
94
|
e.preventDefault();
|
|
70
95
|
firstContainerFocusable === null || firstContainerFocusable === void 0 ? void 0 : firstContainerFocusable.focus();
|
|
71
96
|
}
|
|
72
|
-
else if (isLastChildOfFirst && first && (0, isChildOf_1.isChildOf)((
|
|
97
|
+
else if (isLastChildOfFirst && first && (0, isChildOf_1.isChildOf)((_g = zen_1.zen.document) === null || _g === void 0 ? void 0 : _g.activeElement, first)) {
|
|
73
98
|
e.preventDefault();
|
|
74
99
|
}
|
|
75
100
|
return;
|
|
76
101
|
}
|
|
77
|
-
},
|
|
102
|
+
},
|
|
103
|
+
// condition is consumed by useKeydown below, not read by handleKeyDown directly; its absence from deps is intentional.
|
|
104
|
+
[containerRef, triggerRef, isElementVisible]);
|
|
78
105
|
(0, useKeydown_1.useKeydown)(handleKeyDown, subscriptionTrigger, condition);
|
|
106
|
+
// When withTrigger mode closes (condition goes false), restore focus to the trigger
|
|
107
|
+
// if focus landed on body (which happens when the popup's focused element is unmounted).
|
|
108
|
+
// This restoration is intentionally scoped to the "focused element unmounted → body" case;
|
|
109
|
+
// the general close case (e.g. click-outside, item selection) is handled separately by the
|
|
110
|
+
// returnFocusToTrigger effect in absolute.tsx. Both are idempotent, so overlap is harmless.
|
|
111
|
+
// Initialized to false because popups mount closed; the guard below reconciles the first
|
|
112
|
+
// active/inactive edge, so a popup that mounts already open still resolves correctly.
|
|
113
|
+
const isActiveRef = (0, react_1.useRef)(false);
|
|
114
|
+
(0, react_1.useEffect)(() => {
|
|
115
|
+
var _a, _b;
|
|
116
|
+
const isActive = condition ? condition(subscriptionTrigger) : !!subscriptionTrigger;
|
|
117
|
+
// Guard: short-circuit when the raw open/close state is unchanged to avoid spurious
|
|
118
|
+
// focus restoration if an unstable condition reference re-fires this effect.
|
|
119
|
+
if (!!subscriptionTrigger === isActiveRef.current) {
|
|
120
|
+
isActiveRef.current = isActive;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!isActive && isActiveRef.current && (triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current)) {
|
|
124
|
+
const active = (_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.activeElement;
|
|
125
|
+
if (!active || active === ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.body)) {
|
|
126
|
+
triggerRef.current.focus();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
isActiveRef.current = isActive;
|
|
130
|
+
}, [condition, subscriptionTrigger, triggerRef]);
|
|
79
131
|
};
|
|
80
132
|
exports.useTrapFocus = useTrapFocus;
|
|
@@ -10,7 +10,7 @@ import { IAlignment } from "../utils/positioningUtils/alignments";
|
|
|
10
10
|
export type TAlignment = "top" | "top-left" | "top-right" | "left" | "left-top" | "left-bottom" | "right" | "right-top" | "right-bottom" | "bottom" | "bottom-left" | "bottom-right";
|
|
11
11
|
export interface IControlledPopup extends IZenComponentProps {
|
|
12
12
|
triggerRef: RefObject<HTMLElement | null>;
|
|
13
|
-
/** Alignment of the popup relative to its trigger. Defaults to `"bottom-
|
|
13
|
+
/** Alignment of the popup relative to its trigger. Defaults to `"bottom-start"`. */
|
|
14
14
|
alignment?: TAlignmentAbsolute;
|
|
15
15
|
id?: string;
|
|
16
16
|
className?: string;
|
|
@@ -11,7 +11,7 @@ const ControlledPopup = ({ isOpen, id, paddingX, paddingY, triggerRef, className
|
|
|
11
11
|
const autoId = (0, react_1.useId)();
|
|
12
12
|
const popupId = id || autoId;
|
|
13
13
|
const isClientReady = (0, useClientReady_1.useClientReady)();
|
|
14
|
-
const rtlAlignment = (0, useRTLAlignment_1.useRTLAlignment)(alignment !== null && alignment !== void 0 ? alignment : "bottom-
|
|
14
|
+
const rtlAlignment = (0, useRTLAlignment_1.useRTLAlignment)(alignment !== null && alignment !== void 0 ? alignment : "bottom-start");
|
|
15
15
|
(0, react_1.useEffect)(() => {
|
|
16
16
|
if (!triggerRef.current || !isClientReady) {
|
|
17
17
|
return;
|
|
@@ -183,7 +183,7 @@ const DropdownSearchableTrigger = _a => {
|
|
|
183
183
|
} = _a,
|
|
184
184
|
otherProps = __rest(_a, ["value", "className", "onChange", "placeholder", "isOpenPopup", "inputRef", "handleClick", "width", "title", "id", "disabled", "count", "currentSelection", "isError", "fullWidth", "ref", "name", "onBlur", "popupId", "handleFocusOnPopup", "dataAnalyticsId"])
|
|
185
185
|
// eslint-disable-next-line complexity
|
|
186
|
-
|
|
186
|
+
;
|
|
187
187
|
const {
|
|
188
188
|
isFormSection
|
|
189
189
|
} = (0, react_1.useContext)(formSectionProvider_1.FormSectionContext);
|
|
@@ -3,7 +3,7 @@ import { IRange, IRangeValues } from "../../../range/range";
|
|
|
3
3
|
export interface IFiltersBarRangeState {
|
|
4
4
|
value: IRangeValues;
|
|
5
5
|
}
|
|
6
|
-
interface IFiltersBarRangeProps extends Pick<IRange, "id" | "defaultValue" | "unit" | "labelMin" | "labelMax" | "disabled" | "label" | "triggerAriaLabel" | "min" | "max" | "fullWidthTriggerButton" | "fullBounded" | "className" | "allowEqualMinMax"> {
|
|
6
|
+
interface IFiltersBarRangeProps extends Pick<IRange, "id" | "defaultValue" | "unit" | "labelMin" | "labelMax" | "disabled" | "label" | "triggerAriaLabel" | "min" | "max" | "fullWidthTriggerButton" | "fullBounded" | "className" | "allowEqualMinMax" | "integer"> {
|
|
7
7
|
}
|
|
8
8
|
export interface IFiltersBarRange extends IFiltersBarItem<IFiltersBarRangeState, IFiltersBarRangeProps> {
|
|
9
9
|
className?: string;
|
|
@@ -2,4 +2,4 @@ import "./filtersBarSidePanelRange.less";
|
|
|
2
2
|
import { IRange } from "../../../../range/range";
|
|
3
3
|
export interface IFiltersBarSidePanelRange extends Omit<IRange, "label" | "fullWidthTriggerButton" | "defaultValue"> {
|
|
4
4
|
}
|
|
5
|
-
export declare const FiltersBarSidePanelRange: ({ className, id, onChange, value, unit, min, max, fullBounded, allowEqualMinMax, labelMin, labelMax, disabled }: IFiltersBarSidePanelRange) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare const FiltersBarSidePanelRange: ({ className, id, onChange, value, unit, min, max, fullBounded, allowEqualMinMax, labelMin, labelMax, disabled, integer }: IFiltersBarSidePanelRange) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -94,7 +94,8 @@ const FiltersBarSidePanelRange = ({
|
|
|
94
94
|
allowEqualMinMax,
|
|
95
95
|
labelMin,
|
|
96
96
|
labelMax,
|
|
97
|
-
disabled
|
|
97
|
+
disabled,
|
|
98
|
+
integer
|
|
98
99
|
}) => {
|
|
99
100
|
const generatedId = (0, react_1.useId)();
|
|
100
101
|
const intId = id || generatedId;
|
|
@@ -153,8 +154,9 @@ const FiltersBarSidePanelRange = ({
|
|
|
153
154
|
min: min,
|
|
154
155
|
isMinField: true,
|
|
155
156
|
direction: directionState,
|
|
156
|
-
disabled: disabled
|
|
157
|
-
|
|
157
|
+
disabled: disabled,
|
|
158
|
+
integer: integer
|
|
159
|
+
}), [rangeFieldClasses, labelMin, translate, unit, currentValue.min, errorType, min, max, handleChange, directionState, disabled, integer]);
|
|
158
160
|
const memoizedMaxRangeField = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(rangeField_1.RangeField, {
|
|
159
161
|
className: (0, classNames_1.classNames)([rangeFieldClasses, "zen-filters-bar-side-panel-range__max-field"]),
|
|
160
162
|
label: labelMax || translate("Max"),
|
|
@@ -168,8 +170,9 @@ const FiltersBarSidePanelRange = ({
|
|
|
168
170
|
min: min,
|
|
169
171
|
isMinField: false,
|
|
170
172
|
direction: directionState,
|
|
171
|
-
disabled: disabled
|
|
172
|
-
|
|
173
|
+
disabled: disabled,
|
|
174
|
+
integer: integer
|
|
175
|
+
}), [rangeFieldClasses, labelMax, translate, unit, currentValue.max, errorType, min, max, handleChange, directionState, disabled, integer]);
|
|
173
176
|
return (0, jsx_runtime_1.jsxs)("div", {
|
|
174
177
|
ref: setFieldsContainerRef,
|
|
175
178
|
id: intId,
|
|
@@ -17,6 +17,7 @@ const useDirectionalIcon_1 = require("../../utils/localization/useDirectionalIco
|
|
|
17
17
|
const useLanguage_1 = require("../../utils/localization/useLanguage");
|
|
18
18
|
const useDriveClassName_1 = require("../../utils/theme/useDriveClassName");
|
|
19
19
|
const useIsRTL_1 = require("../../utils/localization/useIsRTL");
|
|
20
|
+
const arrowNavigationHelper_1 = require("../../commonHelpers/arrowNavigation/arrowNavigationHelper");
|
|
20
21
|
const zen_1 = require("../../utils/zen");
|
|
21
22
|
injectString("cs", "Scroll to start", "P\u0159ej\xEDt na za\u010D\xE1tek");
|
|
22
23
|
injectString("da-DK", "Scroll to start", "Rul til start");
|
|
@@ -92,13 +93,15 @@ const getScrollButtonType = (element, isRTL) => {
|
|
|
92
93
|
return "";
|
|
93
94
|
}
|
|
94
95
|
if (isRTL) {
|
|
96
|
+
// scrollLeft is 0 at the start (right edge) and negative toward the end (left edge),
|
|
97
|
+
// so the button to offer is the mirror of the LTR case below.
|
|
95
98
|
if (scrollLeft < -1 && scrollLeft > clientWidth - scrollWidth + 1) {
|
|
96
99
|
return "both";
|
|
97
100
|
}
|
|
98
101
|
if (scrollLeft >= -1) {
|
|
99
|
-
return "
|
|
102
|
+
return "end";
|
|
100
103
|
}
|
|
101
|
-
return "
|
|
104
|
+
return "start";
|
|
102
105
|
}
|
|
103
106
|
if (scrollLeft > 0 && scrollWidth > clientWidth + scrollLeft + 1) {
|
|
104
107
|
return "both";
|
|
@@ -234,7 +237,7 @@ const FiltersContainer = ({
|
|
|
234
237
|
className: (0, classNames_1.classNames)(["zen-filters-toolbar__scroller", driveClassNameScroller || "", "zen-filters-toolbar__start", showLeft ? `${scrollerClass}--visible` : "", isHiddenDisplay.left ? `${scrollerClass}--hidden` : ""]),
|
|
235
238
|
icon: ScrollStartIcon,
|
|
236
239
|
iconPosition: textIconButton_1.ButtonIconPosition.Start,
|
|
237
|
-
onClick: handleScrollButtonClick(-scrollableStep)
|
|
240
|
+
onClick: handleScrollButtonClick((0, arrowNavigationHelper_1.getDirectionalScrollDelta)(-scrollableStep, isRTL))
|
|
238
241
|
}), (0, jsx_runtime_1.jsx)("div", {
|
|
239
242
|
ref: scrollableRef,
|
|
240
243
|
className: (0, classNames_1.classNames)(["zen-filters-toolbar__scrollable", !isHiddenDisplay.left ? "has-left-scroller" : "", !isHiddenDisplay.right ? "has-right-scroller" : ""]),
|
|
@@ -248,7 +251,7 @@ const FiltersContainer = ({
|
|
|
248
251
|
title: translate("Scroll to end"),
|
|
249
252
|
className: (0, classNames_1.classNames)([scrollerClass, driveClassNameScroller || "", "zen-filters-toolbar__end", showRight ? `${scrollerClass}--visible` : "", isHiddenDisplay.right ? `${scrollerClass}--hidden` : ""]),
|
|
250
253
|
icon: ScrollEndIcon,
|
|
251
|
-
onClick: handleScrollButtonClick(scrollableStep),
|
|
254
|
+
onClick: handleScrollButtonClick((0, arrowNavigationHelper_1.getDirectionalScrollDelta)(scrollableStep, isRTL)),
|
|
252
255
|
iconPosition: textIconButton_1.ButtonIconPosition.End
|
|
253
256
|
})]
|
|
254
257
|
}) : null;
|
package/dist/index.css
CHANGED
|
@@ -3403,6 +3403,29 @@ html:lang(ar) .zen-tooltip__title {
|
|
|
3403
3403
|
.zen-shield-faded--visible {
|
|
3404
3404
|
opacity: 0.1;
|
|
3405
3405
|
}
|
|
3406
|
+
:where(.zen-tooltip-inline-trigger) {
|
|
3407
|
+
font: inherit;
|
|
3408
|
+
}
|
|
3409
|
+
.zen-tooltip-inline-trigger {
|
|
3410
|
+
display: inline;
|
|
3411
|
+
cursor: pointer;
|
|
3412
|
+
padding: 0;
|
|
3413
|
+
margin: 0;
|
|
3414
|
+
border: none;
|
|
3415
|
+
background: none;
|
|
3416
|
+
color: inherit;
|
|
3417
|
+
text-decoration: underline dotted;
|
|
3418
|
+
text-decoration-thickness: 15%;
|
|
3419
|
+
text-underline-offset: 0.25rem;
|
|
3420
|
+
border-radius: 0.125rem;
|
|
3421
|
+
outline-offset: 0.125rem;
|
|
3422
|
+
}
|
|
3423
|
+
.zen-tooltip-inline-trigger:focus-visible {
|
|
3424
|
+
outline: 0.125rem solid currentColor;
|
|
3425
|
+
}
|
|
3426
|
+
.zen-tooltip-inline-trigger:focus:not(:focus-visible) {
|
|
3427
|
+
outline: none;
|
|
3428
|
+
}
|
|
3406
3429
|
.zen-tooltip-info {
|
|
3407
3430
|
align-items: center;
|
|
3408
3431
|
cursor: pointer;
|
|
@@ -4145,6 +4168,15 @@ html:lang(ar) .zen-side-panel {
|
|
|
4145
4168
|
.zen-side-panel--shown .zen-form-field--new-component {
|
|
4146
4169
|
display: flex;
|
|
4147
4170
|
}
|
|
4171
|
+
.zen-side-panel--right-positioned {
|
|
4172
|
+
transform: translateX(100%);
|
|
4173
|
+
}
|
|
4174
|
+
[dir="rtl"] .zen-side-panel--right-positioned {
|
|
4175
|
+
transform: translateX(-100%);
|
|
4176
|
+
}
|
|
4177
|
+
.zen-side-panel.zen-side-panel--right-positioned.zen-side-panel--shown {
|
|
4178
|
+
transform: translateX(0);
|
|
4179
|
+
}
|
|
4148
4180
|
.zen-side-panel--left-positioned {
|
|
4149
4181
|
inset-inline-start: 0;
|
|
4150
4182
|
inset-inline-end: auto;
|
|
@@ -4154,6 +4186,9 @@ html:lang(ar) .zen-side-panel {
|
|
|
4154
4186
|
border-start-end-radius: var(--border-radius-default);
|
|
4155
4187
|
border-end-end-radius: var(--border-radius-default);
|
|
4156
4188
|
}
|
|
4189
|
+
[dir="rtl"] .zen-side-panel--left-positioned {
|
|
4190
|
+
transform: translateX(100%);
|
|
4191
|
+
}
|
|
4157
4192
|
.zen-side-panel.zen-side-panel--left-positioned.zen-side-panel--shown {
|
|
4158
4193
|
transform: translateX(0);
|
|
4159
4194
|
}
|
|
@@ -6741,6 +6776,66 @@ html:lang(ar) .zen-table-number {
|
|
|
6741
6776
|
.zen-feedExpandControl * {
|
|
6742
6777
|
box-sizing: border-box;
|
|
6743
6778
|
}
|
|
6779
|
+
.zen-trend-indicator {
|
|
6780
|
+
box-sizing: border-box;
|
|
6781
|
+
display: inline-flex;
|
|
6782
|
+
align-items: center;
|
|
6783
|
+
padding: 0.25rem 0;
|
|
6784
|
+
min-width: 0;
|
|
6785
|
+
max-width: 100%;
|
|
6786
|
+
}
|
|
6787
|
+
.zen-trend-indicator * {
|
|
6788
|
+
box-sizing: border-box;
|
|
6789
|
+
}
|
|
6790
|
+
.zen-trend-indicator__icon {
|
|
6791
|
+
flex-shrink: 0;
|
|
6792
|
+
}
|
|
6793
|
+
.zen-trend-indicator__value {
|
|
6794
|
+
font-family: Roboto, "Segoe UI", Segoe, "Helvetica Neue", Helvetica, sans-serif;
|
|
6795
|
+
font-size: 0.75rem;
|
|
6796
|
+
font-style: normal;
|
|
6797
|
+
font-weight: 400;
|
|
6798
|
+
letter-spacing: 0.02rem;
|
|
6799
|
+
line-height: 1rem;
|
|
6800
|
+
text-transform: none;
|
|
6801
|
+
text-decoration: none;
|
|
6802
|
+
overflow: hidden;
|
|
6803
|
+
text-overflow: ellipsis;
|
|
6804
|
+
white-space: nowrap;
|
|
6805
|
+
word-wrap: normal;
|
|
6806
|
+
color: var(--text-primary);
|
|
6807
|
+
min-width: 0;
|
|
6808
|
+
}
|
|
6809
|
+
html:lang(ar) .zen-trend-indicator__value {
|
|
6810
|
+
font-family: "Noto Sans Arabic", Roboto, "Segoe UI", Segoe, "Helvetica Neue", Helvetica, sans-serif;
|
|
6811
|
+
}
|
|
6812
|
+
.zen-trend-indicator__delta {
|
|
6813
|
+
font-family: Roboto, "Segoe UI", Segoe, "Helvetica Neue", Helvetica, sans-serif;
|
|
6814
|
+
font-size: 0.75rem;
|
|
6815
|
+
font-style: normal;
|
|
6816
|
+
font-weight: 400;
|
|
6817
|
+
letter-spacing: 0.02rem;
|
|
6818
|
+
line-height: 1rem;
|
|
6819
|
+
text-transform: none;
|
|
6820
|
+
text-decoration: none;
|
|
6821
|
+
flex-shrink: 0;
|
|
6822
|
+
margin-inline-start: 0.25rem;
|
|
6823
|
+
}
|
|
6824
|
+
html:lang(ar) .zen-trend-indicator__delta {
|
|
6825
|
+
font-family: "Noto Sans Arabic", Roboto, "Segoe UI", Segoe, "Helvetica Neue", Helvetica, sans-serif;
|
|
6826
|
+
}
|
|
6827
|
+
.zen-trend-indicator--positive .zen-trend-indicator__icon,
|
|
6828
|
+
.zen-trend-indicator--positive .zen-trend-indicator__delta {
|
|
6829
|
+
color: var(--accents-success--detail);
|
|
6830
|
+
}
|
|
6831
|
+
.zen-trend-indicator--negative .zen-trend-indicator__icon,
|
|
6832
|
+
.zen-trend-indicator--negative .zen-trend-indicator__delta {
|
|
6833
|
+
color: var(--accents-error--detail);
|
|
6834
|
+
}
|
|
6835
|
+
.zen-trend-indicator--neutral .zen-trend-indicator__icon,
|
|
6836
|
+
.zen-trend-indicator--neutral .zen-trend-indicator__delta {
|
|
6837
|
+
color: var(--text-secondary);
|
|
6838
|
+
}
|
|
6744
6839
|
.zen-summary-tile {
|
|
6745
6840
|
box-sizing: border-box;
|
|
6746
6841
|
font-family: Roboto, "Segoe UI", Segoe, "Helvetica Neue", Helvetica, sans-serif;
|
|
@@ -7594,8 +7689,13 @@ html:lang(ar) .zen-pill-content {
|
|
|
7594
7689
|
outline-offset: 2px;
|
|
7595
7690
|
}
|
|
7596
7691
|
.zen-pill-actionable__input {
|
|
7692
|
+
clip: rect(0 0 0 0);
|
|
7693
|
+
clip-path: inset(50%);
|
|
7694
|
+
height: 1px;
|
|
7695
|
+
overflow: hidden;
|
|
7597
7696
|
position: absolute;
|
|
7598
|
-
|
|
7697
|
+
white-space: nowrap;
|
|
7698
|
+
width: 1px;
|
|
7599
7699
|
}
|
|
7600
7700
|
.zen-pill-actionable__content-wrapper {
|
|
7601
7701
|
margin: 0;
|
|
@@ -8650,8 +8750,13 @@ html:lang(ar) .zen-chip {
|
|
|
8650
8750
|
cursor: pointer;
|
|
8651
8751
|
}
|
|
8652
8752
|
.zen-chip__input {
|
|
8753
|
+
clip: rect(0 0 0 0);
|
|
8754
|
+
clip-path: inset(50%);
|
|
8755
|
+
height: 1px;
|
|
8756
|
+
overflow: hidden;
|
|
8653
8757
|
position: absolute;
|
|
8654
|
-
|
|
8758
|
+
white-space: nowrap;
|
|
8759
|
+
width: 1px;
|
|
8655
8760
|
}
|
|
8656
8761
|
.zen-chip__content-wrapper {
|
|
8657
8762
|
margin: 0;
|
|
@@ -15268,6 +15373,9 @@ html:lang(ar) .zen-page-header--mobile .zen-page-header__page-name {
|
|
|
15268
15373
|
inset-inline-end: calc(2.25rem - 0.375rem);
|
|
15269
15374
|
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15270
15375
|
}
|
|
15376
|
+
[dir="rtl"] .zen-tabs__gradient--right::before {
|
|
15377
|
+
background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15378
|
+
}
|
|
15271
15379
|
.zen-tabs__gradient--right::after {
|
|
15272
15380
|
position: absolute;
|
|
15273
15381
|
content: "";
|
|
@@ -15295,6 +15403,9 @@ html:lang(ar) .zen-page-header--mobile .zen-page-header__page-name {
|
|
|
15295
15403
|
inset-inline-start: calc(2.25rem - 0.375rem);
|
|
15296
15404
|
background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15297
15405
|
}
|
|
15406
|
+
[dir="rtl"] .zen-tabs__gradient--left::after {
|
|
15407
|
+
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15408
|
+
}
|
|
15298
15409
|
.zen-tabs__start {
|
|
15299
15410
|
margin-inline-end: 0.5rem;
|
|
15300
15411
|
inset-block-end: 0;
|
|
@@ -15338,6 +15449,9 @@ html:lang(ar) .zen-page-header--mobile .zen-page-header__page-name {
|
|
|
15338
15449
|
inset-inline-start: calc(2.875rem - 0.5rem);
|
|
15339
15450
|
background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15340
15451
|
}
|
|
15452
|
+
[dir="rtl"] .zen-tabs .zen-tabs__gradient.zen-tabs__gradient--mobile.zen-tabs__gradient--left::after {
|
|
15453
|
+
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15454
|
+
}
|
|
15341
15455
|
.zen-tabs .zen-tabs__gradient.zen-tabs__gradient--mobile.zen-tabs__gradient--right::before {
|
|
15342
15456
|
position: absolute;
|
|
15343
15457
|
content: "";
|
|
@@ -15347,6 +15461,9 @@ html:lang(ar) .zen-page-header--mobile .zen-page-header__page-name {
|
|
|
15347
15461
|
inset-inline-end: calc(2.875rem - 0.5rem);
|
|
15348
15462
|
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15349
15463
|
}
|
|
15464
|
+
[dir="rtl"] .zen-tabs .zen-tabs__gradient.zen-tabs__gradient--mobile.zen-tabs__gradient--right::before {
|
|
15465
|
+
background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15466
|
+
}
|
|
15350
15467
|
.zen-tabs.zen-tabs--drive,
|
|
15351
15468
|
.zen-tabs.zen-tabs--drive-tablet {
|
|
15352
15469
|
height: 3rem;
|
|
@@ -15366,6 +15483,10 @@ html:lang(ar) .zen-page-header--mobile .zen-page-header__page-name {
|
|
|
15366
15483
|
inset-inline-start: calc(3rem - 0.5rem);
|
|
15367
15484
|
background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15368
15485
|
}
|
|
15486
|
+
[dir="rtl"] .zen-tabs .zen-tabs__gradient.zen-tabs__gradient--drive.zen-tabs__gradient--left::after,
|
|
15487
|
+
[dir="rtl"] .zen-tabs .zen-tabs__gradient.zen-tabs__gradient--drive-tablet.zen-tabs__gradient--left::after {
|
|
15488
|
+
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15489
|
+
}
|
|
15369
15490
|
.zen-tabs .zen-tabs__gradient.zen-tabs__gradient--drive.zen-tabs__gradient--right::before,
|
|
15370
15491
|
.zen-tabs .zen-tabs__gradient.zen-tabs__gradient--drive-tablet.zen-tabs__gradient--right::before {
|
|
15371
15492
|
position: absolute;
|
|
@@ -15376,6 +15497,10 @@ html:lang(ar) .zen-page-header--mobile .zen-page-header__page-name {
|
|
|
15376
15497
|
inset-inline-end: calc(3rem - 0.5rem);
|
|
15377
15498
|
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15378
15499
|
}
|
|
15500
|
+
[dir="rtl"] .zen-tabs .zen-tabs__gradient.zen-tabs__gradient--drive.zen-tabs__gradient--right::before,
|
|
15501
|
+
[dir="rtl"] .zen-tabs .zen-tabs__gradient.zen-tabs__gradient--drive-tablet.zen-tabs__gradient--right::before {
|
|
15502
|
+
background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, var(--backgrounds-content-0) 100%);
|
|
15503
|
+
}
|
|
15379
15504
|
.zen-tab-item {
|
|
15380
15505
|
box-sizing: border-box;
|
|
15381
15506
|
font-family: Roboto, "Segoe UI", Segoe, "Helvetica Neue", Helvetica, sans-serif;
|
|
@@ -15564,7 +15689,7 @@ html:lang(ar) .zen-tab-item.zen-tab-item--mobile .zen-tab-item__content-text {
|
|
|
15564
15689
|
text-decoration: none;
|
|
15565
15690
|
}
|
|
15566
15691
|
.zen-tab-item:focus-visible {
|
|
15567
|
-
outline: 1px solid var(--borders-
|
|
15692
|
+
outline: 1px solid var(--borders-secondary);
|
|
15568
15693
|
outline-offset: -1px;
|
|
15569
15694
|
}
|
|
15570
15695
|
.zen-filters-toolbar {
|
|
@@ -19045,8 +19170,13 @@ html:lang(ar) .zen-pill-actionable__block {
|
|
|
19045
19170
|
margin-right: 8px;
|
|
19046
19171
|
}
|
|
19047
19172
|
.zen-pill-actionable__input {
|
|
19173
|
+
clip: rect(0 0 0 0);
|
|
19174
|
+
clip-path: inset(50%);
|
|
19175
|
+
height: 1px;
|
|
19176
|
+
overflow: hidden;
|
|
19048
19177
|
position: absolute;
|
|
19049
|
-
|
|
19178
|
+
white-space: nowrap;
|
|
19179
|
+
width: 1px;
|
|
19050
19180
|
}
|
|
19051
19181
|
.zen-pill-actionable__input:hover + .zen-pill-actionable__block--actionable {
|
|
19052
19182
|
background-color: var(--backgrounds-content-2);
|
package/dist/index.d.ts
CHANGED
|
@@ -725,7 +725,7 @@ export { isButton } from "./menu/utils/isButton";
|
|
|
725
725
|
export { isLink } from "./menu/utils/isLink";
|
|
726
726
|
export { type IMiniTabElement, MiniTabsSize, type IMiniTabs, MiniTabs } from "./miniTabs/miniTabs";
|
|
727
727
|
export { type IMobileSheet, MobileSheet } from "./mobileSheet/mobileSheet";
|
|
728
|
-
export { type TFocusElement, type IModal, Modal, type IDialogContent, DialogContentNew } from "./modal/modal";
|
|
728
|
+
export { MODAL_SCROLL_LOCK_CLASS, type TFocusElement, type IModal, Modal, type IDialogContent, DialogContentNew } from "./modal/modal";
|
|
729
729
|
export { getPredefinedFocusableItem } from "./modal/modalHelpers";
|
|
730
730
|
export { type INotificationProps, Notification } from "./notification/notification";
|
|
731
731
|
export { type IPageHeader, PageHeaderDisplayName, PageHeader } from "./pageHeader/pageHeader";
|
|
@@ -778,7 +778,12 @@ export { type IToggleButtonDefaultRaw, type IToggleButtonRaw, type IToggleButton
|
|
|
778
778
|
export { calculateArrowPosition } from "./tooltip/helpers/calculateArrowPosition";
|
|
779
779
|
export { removeArrowClasses } from "./tooltip/helpers/removeArrowClasses";
|
|
780
780
|
export { type TooltipSize, type TMobileView, Tooltip } from "./tooltip/tooltip";
|
|
781
|
+
export { type TTrendIndicatorDirection, type TTrendIndicatorTone, type ITrendIndicator } from "./trendIndicator/trendIndicator";
|
|
782
|
+
export { getTrendIndicatorDirection } from "./trendIndicator/trendIndicatorUtils";
|
|
781
783
|
export { type IAbortablePromiseOptions, type IAbortablePromiseConstructor, AbortablePromise } from "./utils/abortablePromise";
|
|
784
|
+
export { ZenithExperimentalProvider } from "./utils/experimentalFeatures/experimentalContext";
|
|
785
|
+
export { type ExperimentalFeatureId, EXPERIMENTAL_FLAGS } from "./utils/experimentalFeatures/registry";
|
|
786
|
+
export { useExperimentalFeature } from "./utils/experimentalFeatures/useExperimentalFeature";
|
|
782
787
|
export { HeaderButtonsProvider } from "./utils/headerButtons/headerButtonsProvider";
|
|
783
788
|
export { getNewFocusableItem, getFirstFocusableItem } from "./utils/keyboardHelpers";
|
|
784
789
|
export { LanguageProvider } from "./utils/localization/languageProvider";
|