@bizapps/design-system-testing 1.12.0 → 1.12.2
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/main.cjs +61 -11
- package/dist/main.cjs.map +1 -1
- package/dist/main.d.cts +4 -1
- package/dist/main.d.ts +4 -1
- package/dist/main.js +61 -11
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
package/dist/main.d.cts
CHANGED
|
@@ -2455,7 +2455,10 @@ interface FloatingSidebarProps extends Omit<ComponentProps<'nav'>, 'children'> {
|
|
|
2455
2455
|
type?: 'single' | 'multiple';
|
|
2456
2456
|
/** Open module cards (controlled). In `single` mode only the first id is used. */
|
|
2457
2457
|
openModuleIds?: string[];
|
|
2458
|
-
/**
|
|
2458
|
+
/**
|
|
2459
|
+
* Initially open module cards when uncontrolled. Read once on mount. Defaults to the module
|
|
2460
|
+
* of the current page (`activeItemId` or `defaultActiveItemId`), or none without one.
|
|
2461
|
+
*/
|
|
2459
2462
|
defaultOpenModuleIds?: string[];
|
|
2460
2463
|
/** Fires with the new list of open module cards. */
|
|
2461
2464
|
onOpenModulesChange?: (moduleIds: string[]) => void;
|
package/dist/main.d.ts
CHANGED
|
@@ -2455,7 +2455,10 @@ interface FloatingSidebarProps extends Omit<ComponentProps<'nav'>, 'children'> {
|
|
|
2455
2455
|
type?: 'single' | 'multiple';
|
|
2456
2456
|
/** Open module cards (controlled). In `single` mode only the first id is used. */
|
|
2457
2457
|
openModuleIds?: string[];
|
|
2458
|
-
/**
|
|
2458
|
+
/**
|
|
2459
|
+
* Initially open module cards when uncontrolled. Read once on mount. Defaults to the module
|
|
2460
|
+
* of the current page (`activeItemId` or `defaultActiveItemId`), or none without one.
|
|
2461
|
+
*/
|
|
2459
2462
|
defaultOpenModuleIds?: string[];
|
|
2460
2463
|
/** Fires with the new list of open module cards. */
|
|
2461
2464
|
onOpenModulesChange?: (moduleIds: string[]) => void;
|
package/dist/main.js
CHANGED
|
@@ -9198,6 +9198,13 @@ var DEFAULT_LABELS = {
|
|
|
9198
9198
|
var EASE = "cubic-bezier(.2,.8,.2,1)";
|
|
9199
9199
|
var MOTION_MS = 240;
|
|
9200
9200
|
var FADE_MS = MOTION_MS / 2;
|
|
9201
|
+
var RAIL_STAGGER_MS = 20;
|
|
9202
|
+
var ACCORDION_EASE = "cubic-bezier(.4,0,.2,1)";
|
|
9203
|
+
var ACCORDION_ITEM_FADE_MS = 260;
|
|
9204
|
+
var ACCORDION_OPEN_DELAY_MS = 120;
|
|
9205
|
+
var ACCORDION_OPEN_STAGGER_MS = 50;
|
|
9206
|
+
var ACCORDION_CLOSE_FADE_MS = 160;
|
|
9207
|
+
var ACCORDION_STAGGER_CAP = 8;
|
|
9201
9208
|
var MORPH_MS = 360;
|
|
9202
9209
|
var MORPH_EASE = "cubic-bezier(.65,0,.35,1)";
|
|
9203
9210
|
var BOUNCE_KEYFRAMES = [
|
|
@@ -9335,7 +9342,7 @@ var DEFAULT_WIDTH = 305;
|
|
|
9335
9342
|
var DEFAULT_COLLAPSED_WIDTH = 48;
|
|
9336
9343
|
var TILE_ICON_SIZE = 22;
|
|
9337
9344
|
var MIN_COLLAPSED_WIDTH = 40;
|
|
9338
|
-
var t = (prop, ms = 300, delay = 0) => `${prop} ${ms}ms ${
|
|
9345
|
+
var t = (prop, ms = 300, delay = 0, ease2 = EASE) => `${prop} ${ms}ms ${ease2} ${delay}ms`;
|
|
9339
9346
|
function transition2(reduced, ...parts) {
|
|
9340
9347
|
const kept = reduced ? parts.filter((part) => /^(opacity|visibility|background|color|box-shadow)/.test(part)) : parts;
|
|
9341
9348
|
return kept.join(", ") || "none";
|
|
@@ -9404,7 +9411,7 @@ function FloatingSidebar({
|
|
|
9404
9411
|
collapsedWidth = DEFAULT_COLLAPSED_WIDTH,
|
|
9405
9412
|
type = "single",
|
|
9406
9413
|
openModuleIds: openModulesProp,
|
|
9407
|
-
defaultOpenModuleIds
|
|
9414
|
+
defaultOpenModuleIds,
|
|
9408
9415
|
onOpenModulesChange,
|
|
9409
9416
|
hideEmptyModules = true,
|
|
9410
9417
|
activeItemId: activeItemProp,
|
|
@@ -9433,9 +9440,16 @@ function FloatingSidebar({
|
|
|
9433
9440
|
const isMobile = useIsMobile();
|
|
9434
9441
|
const baseId = useId();
|
|
9435
9442
|
const [open, setOpen] = useControllableState2(openProp, defaultOpen, onOpenChange);
|
|
9443
|
+
const moduleIdByItemId = useMemo(
|
|
9444
|
+
() => new Map(modules.flatMap((module) => module.items.map((item) => [item.id, module.id]))),
|
|
9445
|
+
[modules]
|
|
9446
|
+
);
|
|
9447
|
+
const moduleIdOf = (itemId) => itemId ? moduleIdByItemId.get(itemId) : void 0;
|
|
9448
|
+
const initialActiveModuleId = moduleIdOf(activeItemProp ?? defaultActiveItemId);
|
|
9436
9449
|
const [rawOpenModuleIds, setOpenModuleIds] = useControllableState2(
|
|
9437
9450
|
openModulesProp,
|
|
9438
|
-
|
|
9451
|
+
// Without an explicit default, the module of the current page starts open.
|
|
9452
|
+
defaultOpenModuleIds ?? (initialActiveModuleId ? [initialActiveModuleId] : []),
|
|
9439
9453
|
onOpenModulesChange
|
|
9440
9454
|
);
|
|
9441
9455
|
const railWidth = Math.max(MIN_COLLAPSED_WIDTH, collapsedWidth);
|
|
@@ -9537,8 +9551,31 @@ function FloatingSidebar({
|
|
|
9537
9551
|
document.addEventListener("keydown", onKeyDown);
|
|
9538
9552
|
return () => document.removeEventListener("keydown", onKeyDown);
|
|
9539
9553
|
}, [shortcut, toggle, isMobile, mobileOpen, setMobileOpen]);
|
|
9554
|
+
const openModule = (moduleId) => {
|
|
9555
|
+
const opened = rawOpenModuleIds.includes(moduleId);
|
|
9556
|
+
if (type === "multiple") {
|
|
9557
|
+
if (!opened) setOpenModuleIds([...rawOpenModuleIds, moduleId]);
|
|
9558
|
+
} else if (!opened || rawOpenModuleIds.length > 1) {
|
|
9559
|
+
setOpenModuleIds([moduleId]);
|
|
9560
|
+
}
|
|
9561
|
+
};
|
|
9562
|
+
const activeModuleId = moduleIdOf(activeItemId);
|
|
9563
|
+
const syncedActive = useRef(`${activeItemId}|${activeModuleId}`);
|
|
9564
|
+
useEffect(() => {
|
|
9565
|
+
const key = `${activeItemId}|${activeModuleId}`;
|
|
9566
|
+
if (syncedActive.current === key) return;
|
|
9567
|
+
syncedActive.current = key;
|
|
9568
|
+
if (activeModuleId) openModule(activeModuleId);
|
|
9569
|
+
});
|
|
9540
9570
|
const selectItem = (item, module, navigates) => {
|
|
9541
|
-
if (navigates)
|
|
9571
|
+
if (navigates) {
|
|
9572
|
+
setActiveItemId(item.id);
|
|
9573
|
+
openModule(module.id);
|
|
9574
|
+
if (activeItemProp === void 0) {
|
|
9575
|
+
syncedActive.current = `${item.id}|${moduleIdOf(item.id)}`;
|
|
9576
|
+
}
|
|
9577
|
+
if (queries[module.id]) setQueries((current) => ({ ...current, [module.id]: "" }));
|
|
9578
|
+
}
|
|
9542
9579
|
setFlyoutId(null);
|
|
9543
9580
|
if (isMobile) setMobileOpen(false);
|
|
9544
9581
|
onItemSelect?.(item, module);
|
|
@@ -9953,6 +9990,11 @@ function ModuleCard({
|
|
|
9953
9990
|
});
|
|
9954
9991
|
return () => animation2?.cancel();
|
|
9955
9992
|
}, [collapsed, hasActive, reduced]);
|
|
9993
|
+
const [toggle, setToggle] = useState({ collapsed, open, accordion: false });
|
|
9994
|
+
if (toggle.collapsed !== collapsed || toggle.open !== open) {
|
|
9995
|
+
setToggle({ collapsed, open, accordion: toggle.collapsed === collapsed });
|
|
9996
|
+
}
|
|
9997
|
+
const accordion = toggle.accordion && !reduced;
|
|
9956
9998
|
const items = filterItems(module.items, query);
|
|
9957
9999
|
const isEmpty = module.items.length === 0;
|
|
9958
10000
|
const emptyMessage = /* @__PURE__ */ jsx(
|
|
@@ -10171,6 +10213,7 @@ function ModuleCard({
|
|
|
10171
10213
|
list,
|
|
10172
10214
|
visible: open,
|
|
10173
10215
|
staggerIndex: index,
|
|
10216
|
+
accordion,
|
|
10174
10217
|
onSelect: (navigates) => onSelect(item, navigates)
|
|
10175
10218
|
},
|
|
10176
10219
|
item.id
|
|
@@ -10295,20 +10338,27 @@ function ModuleCard({
|
|
|
10295
10338
|
}
|
|
10296
10339
|
) });
|
|
10297
10340
|
}
|
|
10298
|
-
function ItemRow({ item, list, visible, staggerIndex, onSelect }) {
|
|
10341
|
+
function ItemRow({ item, list, visible, staggerIndex, accordion, onSelect }) {
|
|
10299
10342
|
const { activeItemId, favoriteIds, reduced, labels, resolveIcon, renderLink } = list;
|
|
10300
10343
|
const active = item.id === activeItemId;
|
|
10301
10344
|
const favorite = favoriteIds?.includes(item.id) ?? false;
|
|
10302
10345
|
const tabIndex = visible ? 0 : -1;
|
|
10303
10346
|
const staggered = staggerIndex !== void 0;
|
|
10304
|
-
|
|
10347
|
+
let fade = t("opacity", FADE_MS, 0);
|
|
10348
|
+
if (staggered && accordion) {
|
|
10349
|
+
const step = Math.min(staggerIndex, ACCORDION_STAGGER_CAP);
|
|
10350
|
+
fade = visible ? t(
|
|
10351
|
+
"opacity",
|
|
10352
|
+
ACCORDION_ITEM_FADE_MS,
|
|
10353
|
+
ACCORDION_OPEN_DELAY_MS + step * ACCORDION_OPEN_STAGGER_MS,
|
|
10354
|
+
ACCORDION_EASE
|
|
10355
|
+
) : t("opacity", ACCORDION_CLOSE_FADE_MS, 0, ACCORDION_EASE);
|
|
10356
|
+
} else if (staggered && visible) {
|
|
10357
|
+
fade = t("opacity", FADE_MS, Math.min(staggerIndex * RAIL_STAGGER_MS, FADE_MS));
|
|
10358
|
+
}
|
|
10305
10359
|
const rowStyle = staggered ? {
|
|
10306
10360
|
opacity: visible ? 1 : 0,
|
|
10307
|
-
transition: transition2(
|
|
10308
|
-
reduced,
|
|
10309
|
-
t("opacity", FADE_MS, delay),
|
|
10310
|
-
"background-color 180ms ease-out"
|
|
10311
|
-
)
|
|
10361
|
+
transition: transition2(reduced, fade, "background-color 180ms ease-out")
|
|
10312
10362
|
} : { transition: "background-color 180ms ease-out" };
|
|
10313
10363
|
const className = cn(
|
|
10314
10364
|
"focus-visible:ring-primary flex min-h-[46px] min-w-0 flex-1 cursor-pointer items-start gap-3 rounded-[10px] border-0 bg-transparent py-[13px] pr-1 pl-3 text-left text-[13px] leading-5 transition-transform duration-180 ease-[cubic-bezier(.2,.8,.2,1)] outline-none hover:text-primary focus-visible:ring-2 focus-visible:ring-inset disabled:cursor-not-allowed disabled:opacity-50",
|