@kushagradhawan/kookie-ui 0.1.126 → 0.1.128
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/components.css +45 -2
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.d.ts +4 -1
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.d.ts.map +1 -1
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.js +1 -1
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +2 -2
- package/dist/esm/components/_internal/dropdown-menu-drill-down.d.ts +4 -1
- package/dist/esm/components/_internal/dropdown-menu-drill-down.d.ts.map +1 -1
- package/dist/esm/components/_internal/dropdown-menu-drill-down.js +1 -1
- package/dist/esm/components/_internal/dropdown-menu-drill-down.js.map +3 -3
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/dropdown-menu.js.map +2 -2
- package/package.json +2 -2
- package/schemas/base-button.json +1 -1
- package/schemas/button.json +1 -1
- package/schemas/icon-button.json +1 -1
- package/schemas/index.json +6 -6
- package/schemas/toggle-button.json +1 -1
- package/schemas/toggle-icon-button.json +1 -1
- package/src/components/_internal/dropdown-menu-drill-down.tsx +12 -2
- package/src/components/animations.css +11 -0
- package/src/components/dropdown-menu.css +46 -4
- package/src/components/dropdown-menu.tsx +2 -0
- package/styles.css +45 -2
package/components.css
CHANGED
|
@@ -351,6 +351,26 @@
|
|
|
351
351
|
animation: rt-tab-indicator-appear var(--motion-duration-small) var(--motion-spring-snappy);
|
|
352
352
|
}
|
|
353
353
|
}
|
|
354
|
+
@keyframes rt-drill-down-enter-from-right {
|
|
355
|
+
from {
|
|
356
|
+
opacity: 0;
|
|
357
|
+
transform: translateX(30%);
|
|
358
|
+
}
|
|
359
|
+
to {
|
|
360
|
+
opacity: 1;
|
|
361
|
+
transform: translateX(0);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
@keyframes rt-drill-down-enter-from-left {
|
|
365
|
+
from {
|
|
366
|
+
opacity: 0;
|
|
367
|
+
transform: translateX(-30%);
|
|
368
|
+
}
|
|
369
|
+
to {
|
|
370
|
+
opacity: 1;
|
|
371
|
+
transform: translateX(0);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
354
374
|
@keyframes rt-dialog-overlay-no-op {
|
|
355
375
|
from {
|
|
356
376
|
opacity: 1;
|
|
@@ -8654,18 +8674,30 @@
|
|
|
8654
8674
|
.rt-DropdownMenuDrillDownRoot:where([data-drill-down-active]) > * {
|
|
8655
8675
|
display: none !important;
|
|
8656
8676
|
}
|
|
8657
|
-
.rt-DropdownMenuDrillDownRoot:where([data-drill-down-active])
|
|
8677
|
+
.rt-DropdownMenuDrillDownRoot:where([data-drill-down-active]) :where(.rt-DropdownMenuDrillDownPanel) {
|
|
8658
8678
|
display: contents !important;
|
|
8659
8679
|
}
|
|
8680
|
+
.rt-DropdownMenuDrillDownRoot:where([data-drill-down-active]) > :where(.rt-BaseMenuGroup) {
|
|
8681
|
+
display: contents !important;
|
|
8682
|
+
}
|
|
8683
|
+
.rt-DropdownMenuDrillDownRoot:where([data-drill-down-active]) > :where(.rt-BaseMenuGroup) > :where(*:not(.rt-DropdownMenuDrillDownPanel)) {
|
|
8684
|
+
display: none !important;
|
|
8685
|
+
}
|
|
8660
8686
|
.rt-DropdownMenuDrillDownPanel {
|
|
8661
8687
|
display: contents;
|
|
8662
8688
|
}
|
|
8663
8689
|
.rt-DropdownMenuDrillDownPanel:where(:not([data-drill-down-active])) > * {
|
|
8664
8690
|
display: none !important;
|
|
8665
8691
|
}
|
|
8666
|
-
.rt-DropdownMenuDrillDownPanel:where(:not([data-drill-down-active]))
|
|
8692
|
+
.rt-DropdownMenuDrillDownPanel:where(:not([data-drill-down-active])) :where(.rt-DropdownMenuDrillDownPanel) {
|
|
8667
8693
|
display: contents !important;
|
|
8668
8694
|
}
|
|
8695
|
+
.rt-DropdownMenuDrillDownPanel:where(:not([data-drill-down-active])) > :where(.rt-BaseMenuGroup) {
|
|
8696
|
+
display: contents !important;
|
|
8697
|
+
}
|
|
8698
|
+
.rt-DropdownMenuDrillDownPanel:where(:not([data-drill-down-active])) > :where(.rt-BaseMenuGroup) > :where(*:not(.rt-DropdownMenuDrillDownPanel)) {
|
|
8699
|
+
display: none !important;
|
|
8700
|
+
}
|
|
8669
8701
|
.rt-DropdownMenuDrillDownBackItem {
|
|
8670
8702
|
display: flex;
|
|
8671
8703
|
align-items: center;
|
|
@@ -8741,6 +8773,17 @@
|
|
|
8741
8773
|
outline-offset: 2px;
|
|
8742
8774
|
}
|
|
8743
8775
|
}
|
|
8776
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
8777
|
+
.rt-DropdownMenuDrillDownPanel:where([data-drill-down-active][data-animation-direction='forward']) > :where(*:not(.rt-DropdownMenuDrillDownPanel)) {
|
|
8778
|
+
animation: rt-drill-down-enter-from-right var(--motion-duration-small) var(--motion-ease-smooth);
|
|
8779
|
+
}
|
|
8780
|
+
.rt-DropdownMenuDrillDownPanel:where([data-drill-down-active][data-animation-direction='backward']) > :where(*:not(.rt-DropdownMenuDrillDownPanel)) {
|
|
8781
|
+
animation: rt-drill-down-enter-from-left var(--motion-duration-small) var(--motion-ease-smooth);
|
|
8782
|
+
}
|
|
8783
|
+
.rt-DropdownMenuDrillDownRoot:where(:not([data-drill-down-active])[data-animation-direction='backward']) > :where(*:not(.rt-DropdownMenuDrillDownPanel)) {
|
|
8784
|
+
animation: rt-drill-down-enter-from-left var(--motion-duration-small) var(--motion-ease-smooth);
|
|
8785
|
+
}
|
|
8786
|
+
}
|
|
8744
8787
|
:where([data-panel-background='translucent'], [data-material='translucent']) .rt-TextFieldRoot {
|
|
8745
8788
|
-webkit-backdrop-filter: var(--backdrop-filter-components);
|
|
8746
8789
|
backdrop-filter: var(--backdrop-filter-components);
|
|
@@ -16,6 +16,7 @@ declare function useBreakpoint(): {
|
|
|
16
16
|
* Falls back through smaller breakpoints if the current one isn't defined.
|
|
17
17
|
*/
|
|
18
18
|
declare function resolveResponsiveValue<T>(value: T | Partial<Record<Breakpoint, T>> | undefined, currentBreakpoint: Breakpoint, defaultValue: T): T;
|
|
19
|
+
type AnimationDirection = 'forward' | 'backward' | null;
|
|
19
20
|
interface DrillDownContextValue {
|
|
20
21
|
/** Current submenu behavior mode */
|
|
21
22
|
behavior: SubmenuBehavior;
|
|
@@ -35,6 +36,8 @@ interface DrillDownContextValue {
|
|
|
35
36
|
isRoot: boolean;
|
|
36
37
|
/** The currently active submenu ID (or null if at root) */
|
|
37
38
|
currentId: string | null;
|
|
39
|
+
/** Current animation direction for transitions */
|
|
40
|
+
animationDirection: AnimationDirection;
|
|
38
41
|
}
|
|
39
42
|
declare const DrillDownContext: React.Context<DrillDownContextValue | null>;
|
|
40
43
|
interface DrillDownProviderProps {
|
|
@@ -56,5 +59,5 @@ interface SubContextValue {
|
|
|
56
59
|
declare const SubContext: React.Context<SubContextValue | null>;
|
|
57
60
|
declare function useSubContext(): SubContextValue | null;
|
|
58
61
|
export { DrillDownProvider, DrillDownContext, SubContext, useDrillDown, useDrillDownOptional, useSubContext, useBreakpoint, resolveResponsiveValue, };
|
|
59
|
-
export type { SubmenuBehavior, DrillDownContextValue, SubContextValue };
|
|
62
|
+
export type { SubmenuBehavior, DrillDownContextValue, SubContextValue, AnimationDirection };
|
|
60
63
|
//# sourceMappingURL=dropdown-menu-drill-down.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-drill-down.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/dropdown-menu-drill-down.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,KAAK,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,iBAAS,aAAa,IAAI;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAsDnE;AAED;;;GAGG;AACH,iBAAS,sBAAsB,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EACrD,iBAAiB,EAAE,UAAU,EAC7B,YAAY,EAAE,CAAC,GACd,CAAC,CA6BH;AAMD,UAAU,qBAAqB;IAC7B,oCAAoC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,kEAAkE;IAClE,KAAK,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,mCAAmC;IACnC,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dropdown-menu-drill-down.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/dropdown-menu-drill-down.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,KAAK,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,iBAAS,aAAa,IAAI;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAsDnE;AAED;;;GAGG;AACH,iBAAS,sBAAsB,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EACrD,iBAAiB,EAAE,UAAU,EAC7B,YAAY,EAAE,CAAC,GACd,CAAC,CA6BH;AAMD,KAAK,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;AAExD,UAAU,qBAAqB;IAC7B,oCAAoC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,kEAAkE;IAClE,KAAK,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,mCAAmC;IACnC,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,QAAA,MAAM,gBAAgB,6CAA0D,CAAC;AAEjF,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;CAC1D;AAED,iBAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,sBAAsB,qBA6D/E;AAED,iBAAS,YAAY,0BAMpB;AAED;;GAEG;AACH,iBAAS,oBAAoB,iCAE5B;AAMD,UAAU,eAAe;IACvB,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,UAAU,uCAAoD,CAAC;AAErE,iBAAS,aAAa,2BAErB;AAED,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
1
|
+
"use strict";"use client";var L=Object.create;var m=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var M=(e,t)=>{for(var r in t)m(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of A(t))!V.call(e,n)&&n!==r&&m(e,n,{get:()=>t[n],enumerable:!(a=P(t,n))||a.enumerable});return e};var O=(e,t,r)=>(r=e!=null?L(T(e)):{},y(t||!e||!e.__esModule?m(r,"default",{value:e,enumerable:!0}):r,e)),N=e=>y(m({},"__esModule",{value:!0}),e);var I={};M(I,{DrillDownContext:()=>f,DrillDownProvider:()=>C,SubContext:()=>D,resolveResponsiveValue:()=>b,useBreakpoint:()=>v,useDrillDown:()=>k,useDrillDownOptional:()=>B,useSubContext:()=>R});module.exports=N(I);var o=O(require("react")),g=require("../shell.types.js");function v(){const[e,t]=o.useState("initial"),[r,a]=o.useState(!1);return o.useEffect(()=>{if(typeof window>"u")return;const c=Object.entries(g._BREAKPOINTS).map(([i,s])=>[i,window.matchMedia(s)]),u=()=>{const i=c.filter(([,d])=>d.matches).map(([d])=>d),s=i[i.length-1]??"initial";t(s),a(!0)};u();const l=[];return c.forEach(([,i])=>{const s=i;typeof s.addEventListener=="function"?(s.addEventListener("change",u),l.push(()=>s.removeEventListener?.("change",u))):typeof s.addListener=="function"&&(s.addListener(u),l.push(()=>s.removeListener?.(u)))}),()=>{l.forEach(i=>{try{i()}catch{}})}},[]),{breakpoint:e,ready:r}}function b(e,t,r){if(e==null)return r;if(typeof e!="object")return e;const a=e;if(a[t]!==void 0)return a[t];const n=["xl","lg","md","sm","xs","initial"],c=n.indexOf(t);for(let u=c+1;u<n.length;u++){const l=n[u];if(a[l]!==void 0)return a[l]}return r}const f=o.createContext(null);function C({children:e,submenuBehavior:t}){const{breakpoint:r,ready:a}=v(),[n,c]=o.useState([]),[u,l]=o.useState(null),i=o.useMemo(()=>b(t,r,"cascade"),[t,r]),s=o.useRef(i);o.useEffect(()=>{s.current==="drill-down"&&i==="cascade"&&(c([]),l(null)),s.current=i},[i]);const d=o.useCallback(p=>{l("forward"),c(E=>[...E,p])},[]),h=o.useCallback(()=>{l("backward"),c(p=>p.slice(0,-1))},[]),w=o.useCallback(()=>{c([]),l(null)},[]),x=o.useCallback(p=>n.length===0?!1:n[n.length-1]===p,[n]),S=o.useMemo(()=>({behavior:i,ready:a,stack:n,push:d,pop:h,reset:w,isActive:x,isRoot:n.length===0,currentId:n.length>0?n[n.length-1]:null,animationDirection:u}),[i,a,n,d,h,w,x,u]);return o.createElement(f.Provider,{value:S},e)}function k(){const e=o.useContext(f);if(!e)throw new Error("useDrillDown must be used within a DropdownMenu.Content");return e}function B(){return o.useContext(f)}const D=o.createContext(null);function R(){return o.useContext(D)}
|
|
2
2
|
//# sourceMappingURL=dropdown-menu-drill-down.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/_internal/dropdown-menu-drill-down.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport type { Breakpoint, Responsive } from '../../props/prop-def.js';\nimport type { submenuBehaviors } from './base-menu.props.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\n\ntype SubmenuBehavior = (typeof submenuBehaviors)[number];\n\n/**\n * Hook to get the current breakpoint based on window width.\n * Returns 'initial' on the server and during initial hydration.\n * Uses shared breakpoint values from shell.types.js.\n */\nfunction useBreakpoint(): { breakpoint: Breakpoint; ready: boolean } {\n const [currentBp, setCurrentBp] = React.useState<Breakpoint>('initial');\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Use shared breakpoint media queries from shell.types\n const queries = Object.entries(_BREAKPOINTS) as [keyof typeof _BREAKPOINTS, string][];\n const mqls = queries.map(([k, q]) => [k, window.matchMedia(q)] as const);\n\n const compute = () => {\n // Highest matched breakpoint wins\n const matched = mqls.filter(([, m]) => m.matches).map(([k]) => k);\n const next = (matched[matched.length - 1] as Breakpoint | undefined) ?? 'initial';\n setCurrentBp(next);\n setReady(true);\n };\n\n compute();\n\n const cleanups: Array<() => void> = [];\n mqls.forEach(([, m]) => {\n const mm = m as MediaQueryList & {\n addEventListener?: (type: 'change', listener: () => void) => void;\n removeEventListener?: (type: 'change', listener: () => void) => void;\n addListener?: (listener: () => void) => void;\n removeListener?: (listener: () => void) => void;\n };\n if (typeof mm.addEventListener === 'function') {\n mm.addEventListener('change', compute);\n cleanups.push(() => mm.removeEventListener?.('change', compute));\n } else if (typeof mm.addListener === 'function') {\n mm.addListener(compute);\n cleanups.push(() => mm.removeListener?.(compute));\n }\n });\n\n return () => {\n cleanups.forEach((fn) => {\n try {\n fn();\n } catch (e) {\n // MediaQueryList cleanup can fail in edge cases (e.g., already removed)\n // Log in development to aid debugging\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[DropdownMenu] MediaQueryList cleanup warning:', e);\n }\n }\n });\n };\n }, []);\n\n return { breakpoint: currentBp, ready };\n}\n\n/**\n * Resolves a responsive value to its current value based on the breakpoint.\n * Falls back through smaller breakpoints if the current one isn't defined.\n */\nfunction resolveResponsiveValue<T>(\n value: T | Partial<Record<Breakpoint, T>> | undefined,\n currentBreakpoint: Breakpoint,\n defaultValue: T\n): T {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n\n // Non-object values are returned directly\n if (typeof value !== 'object') {\n return value;\n }\n\n const map = value as Partial<Record<Breakpoint, T>>;\n\n // Check if current breakpoint has a value\n if (map[currentBreakpoint] !== undefined) {\n return map[currentBreakpoint] as T;\n }\n\n // Fall back through smaller breakpoints\n const bpOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = bpOrder.indexOf(currentBreakpoint);\n\n for (let i = startIdx + 1; i < bpOrder.length; i++) {\n const bp = bpOrder[i];\n if (map[bp] !== undefined) {\n return map[bp] as T;\n }\n }\n\n return defaultValue;\n}\n\n// ============================================================================\n// DrillDown Context\n// ============================================================================\n\ninterface DrillDownContextValue {\n /** Current submenu behavior mode */\n behavior: SubmenuBehavior;\n /** Whether the breakpoint has been resolved (client-side only) */\n ready: boolean;\n /** Stack of active submenu IDs. Empty means root menu is shown. */\n stack: string[];\n /** Navigate into a submenu */\n push: (id: string) => void;\n /** Navigate back to parent menu */\n pop: () => void;\n /** Reset to root menu */\n reset: () => void;\n /** Check if a specific submenu is the currently active one */\n isActive: (id: string) => boolean;\n /** Check if we're at root level (no submenus open) */\n isRoot: boolean;\n /** The currently active submenu ID (or null if at root) */\n currentId: string | null;\n}\n\nconst DrillDownContext = React.createContext<DrillDownContextValue | null>(null);\n\ninterface DrillDownProviderProps {\n children: React.ReactNode;\n submenuBehavior: Responsive<SubmenuBehavior> | undefined;\n}\n\nfunction DrillDownProvider({ children, submenuBehavior }: DrillDownProviderProps) {\n const { breakpoint, ready } = useBreakpoint();\n const [stack, setStack] = React.useState<string[]>([]);\n\n // Resolve the current behavior based on breakpoint\n const behavior = React.useMemo(\n () => resolveResponsiveValue(submenuBehavior, breakpoint, 'cascade'),\n [submenuBehavior, breakpoint]\n );\n\n // Reset stack when behavior changes from drill-down to cascade\n const prevBehaviorRef = React.useRef(behavior);\n React.useEffect(() => {\n if (prevBehaviorRef.current === 'drill-down' && behavior === 'cascade') {\n setStack([]);\n }\n prevBehaviorRef.current = behavior;\n }, [behavior]);\n\n const push = React.useCallback((id: string) => {\n setStack((prev) => [...prev, id]);\n }, []);\n\n const pop = React.useCallback(() => {\n setStack((prev) => prev.slice(0, -1));\n }, []);\n\n const reset = React.useCallback(() => {\n setStack([]);\n }, []);\n\n const isActive = React.useCallback(\n (id: string) => {\n if (stack.length === 0) return false;\n return stack[stack.length - 1] === id;\n },\n [stack]\n );\n\n const value = React.useMemo(\n (): DrillDownContextValue => ({\n behavior,\n ready,\n stack,\n push,\n pop,\n reset,\n isActive,\n isRoot: stack.length === 0,\n currentId: stack.length > 0 ? stack[stack.length - 1] : null,\n }),\n [behavior, ready, stack, push, pop, reset, isActive]\n );\n\n return <DrillDownContext.Provider value={value}>{children}</DrillDownContext.Provider>;\n}\n\nfunction useDrillDown() {\n const ctx = React.useContext(DrillDownContext);\n if (!ctx) {\n throw new Error('useDrillDown must be used within a DropdownMenu.Content');\n }\n return ctx;\n}\n\n/**\n * Hook to check if drill-down context is available (i.e., we're inside Content)\n */\nfunction useDrillDownOptional() {\n return React.useContext(DrillDownContext);\n}\n\n// ============================================================================\n// Sub Context (for individual submenu instances)\n// ============================================================================\n\ninterface SubContextValue {\n /** Unique ID for this submenu */\n id: string;\n /** Label for the back button */\n label: React.ReactNode;\n}\n\nconst SubContext = React.createContext<SubContextValue | null>(null);\n\nfunction useSubContext() {\n return React.useContext(SubContext);\n}\n\nexport {\n DrillDownProvider,\n DrillDownContext,\n SubContext,\n useDrillDown,\n useDrillDownOptional,\n useSubContext,\n useBreakpoint,\n resolveResponsiveValue,\n};\n\nexport type { SubmenuBehavior, DrillDownContextValue, SubContextValue };\n"],
|
|
5
|
-
"mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,sBAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,kBAAAC,EAAA,iBAAAC,EAAA,yBAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAV,GAEA,IAAAW,EAAuB,oBAGvBC,EAA6B,6BAS7B,SAASN,GAA4D,CACnE,KAAM,CAACO,EAAWC,CAAY,EAAIH,EAAM,SAAqB,SAAS,EAChE,CAACI,EAAOC,CAAQ,EAAIL,EAAM,SAAS,EAAK,EAE9C,OAAAA,EAAM,UAAU,IAAM,CACpB,GAAI,OAAO,OAAW,IAAa,OAInC,MAAMM,EADU,OAAO,QAAQ,cAAY,EACtB,IAAI,CAAC,CAACC,EAAGC,CAAC,IAAM,CAACD,EAAG,OAAO,WAAWC,CAAC,CAAC,CAAU,EAEjEC,EAAU,IAAM,CAEpB,MAAMC,EAAUJ,EAAK,OAAO,CAAC,CAAC,CAAEK,CAAC,IAAMA,EAAE,OAAO,EAAE,IAAI,CAAC,CAACJ,CAAC,IAAMA,CAAC,EAC1DK,EAAQF,EAAQA,EAAQ,OAAS,CAAC,GAAgC,UACxEP,EAAaS,CAAI,EACjBP,EAAS,EAAI,CACf,EAEAI,EAAQ,EAER,MAAMI,EAA8B,CAAC,EACrC,OAAAP,EAAK,QAAQ,CAAC,CAAC,CAAEK,CAAC,IAAM,CACtB,MAAMG,EAAKH,EAMP,OAAOG,EAAG,kBAAqB,YACjCA,EAAG,iBAAiB,SAAUL,CAAO,EACrCI,EAAS,KAAK,IAAMC,EAAG,sBAAsB,SAAUL,CAAO,CAAC,GACtD,OAAOK,EAAG,aAAgB,aACnCA,EAAG,YAAYL,CAAO,EACtBI,EAAS,KAAK,IAAMC,EAAG,iBAAiBL,CAAO,CAAC,EAEpD,CAAC,EAEM,IAAM,CACXI,EAAS,QAASE,GAAO,CACvB,GAAI,CACFA,EAAG,CACL,MAAY,CAMZ,CACF,CAAC,CACH,CACF,EAAG,CAAC,CAAC,EAEE,CAAE,WAAYb,EAAW,MAAAE,CAAM,CACxC,CAMA,SAASV,EACPsB,EACAC,EACAC,EACG,CACH,GAA2BF,GAAU,KACnC,OAAOE,EAIT,GAAI,OAAOF,GAAU,SACnB,OAAOA,EAGT,MAAMG,EAAMH,EAGZ,GAAIG,EAAIF,CAAiB,IAAM,OAC7B,OAAOE,EAAIF,CAAiB,EAI9B,MAAMG,EAAwB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,SAAS,EAChEC,EAAWD,EAAQ,QAAQH,CAAiB,EAElD,
|
|
6
|
-
"names": ["dropdown_menu_drill_down_exports", "__export", "DrillDownContext", "DrillDownProvider", "SubContext", "resolveResponsiveValue", "useBreakpoint", "useDrillDown", "useDrillDownOptional", "useSubContext", "__toCommonJS", "React", "import_shell_types", "currentBp", "setCurrentBp", "ready", "setReady", "mqls", "k", "q", "compute", "matched", "m", "next", "cleanups", "mm", "fn", "value", "currentBreakpoint", "defaultValue", "map", "bpOrder", "startIdx", "bp", "children", "submenuBehavior", "breakpoint", "stack", "setStack", "behavior", "prevBehaviorRef", "push", "id", "prev", "pop", "reset", "isActive", "ctx"]
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport type { Breakpoint, Responsive } from '../../props/prop-def.js';\nimport type { submenuBehaviors } from './base-menu.props.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\n\ntype SubmenuBehavior = (typeof submenuBehaviors)[number];\n\n/**\n * Hook to get the current breakpoint based on window width.\n * Returns 'initial' on the server and during initial hydration.\n * Uses shared breakpoint values from shell.types.js.\n */\nfunction useBreakpoint(): { breakpoint: Breakpoint; ready: boolean } {\n const [currentBp, setCurrentBp] = React.useState<Breakpoint>('initial');\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Use shared breakpoint media queries from shell.types\n const queries = Object.entries(_BREAKPOINTS) as [keyof typeof _BREAKPOINTS, string][];\n const mqls = queries.map(([k, q]) => [k, window.matchMedia(q)] as const);\n\n const compute = () => {\n // Highest matched breakpoint wins\n const matched = mqls.filter(([, m]) => m.matches).map(([k]) => k);\n const next = (matched[matched.length - 1] as Breakpoint | undefined) ?? 'initial';\n setCurrentBp(next);\n setReady(true);\n };\n\n compute();\n\n const cleanups: Array<() => void> = [];\n mqls.forEach(([, m]) => {\n const mm = m as MediaQueryList & {\n addEventListener?: (type: 'change', listener: () => void) => void;\n removeEventListener?: (type: 'change', listener: () => void) => void;\n addListener?: (listener: () => void) => void;\n removeListener?: (listener: () => void) => void;\n };\n if (typeof mm.addEventListener === 'function') {\n mm.addEventListener('change', compute);\n cleanups.push(() => mm.removeEventListener?.('change', compute));\n } else if (typeof mm.addListener === 'function') {\n mm.addListener(compute);\n cleanups.push(() => mm.removeListener?.(compute));\n }\n });\n\n return () => {\n cleanups.forEach((fn) => {\n try {\n fn();\n } catch (e) {\n // MediaQueryList cleanup can fail in edge cases (e.g., already removed)\n // Log in development to aid debugging\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[DropdownMenu] MediaQueryList cleanup warning:', e);\n }\n }\n });\n };\n }, []);\n\n return { breakpoint: currentBp, ready };\n}\n\n/**\n * Resolves a responsive value to its current value based on the breakpoint.\n * Falls back through smaller breakpoints if the current one isn't defined.\n */\nfunction resolveResponsiveValue<T>(\n value: T | Partial<Record<Breakpoint, T>> | undefined,\n currentBreakpoint: Breakpoint,\n defaultValue: T\n): T {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n\n // Non-object values are returned directly\n if (typeof value !== 'object') {\n return value;\n }\n\n const map = value as Partial<Record<Breakpoint, T>>;\n\n // Check if current breakpoint has a value\n if (map[currentBreakpoint] !== undefined) {\n return map[currentBreakpoint] as T;\n }\n\n // Fall back through smaller breakpoints\n const bpOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = bpOrder.indexOf(currentBreakpoint);\n\n for (let i = startIdx + 1; i < bpOrder.length; i++) {\n const bp = bpOrder[i];\n if (map[bp] !== undefined) {\n return map[bp] as T;\n }\n }\n\n return defaultValue;\n}\n\n// ============================================================================\n// DrillDown Context\n// ============================================================================\n\ntype AnimationDirection = 'forward' | 'backward' | null;\n\ninterface DrillDownContextValue {\n /** Current submenu behavior mode */\n behavior: SubmenuBehavior;\n /** Whether the breakpoint has been resolved (client-side only) */\n ready: boolean;\n /** Stack of active submenu IDs. Empty means root menu is shown. */\n stack: string[];\n /** Navigate into a submenu */\n push: (id: string) => void;\n /** Navigate back to parent menu */\n pop: () => void;\n /** Reset to root menu */\n reset: () => void;\n /** Check if a specific submenu is the currently active one */\n isActive: (id: string) => boolean;\n /** Check if we're at root level (no submenus open) */\n isRoot: boolean;\n /** The currently active submenu ID (or null if at root) */\n currentId: string | null;\n /** Current animation direction for transitions */\n animationDirection: AnimationDirection;\n}\n\nconst DrillDownContext = React.createContext<DrillDownContextValue | null>(null);\n\ninterface DrillDownProviderProps {\n children: React.ReactNode;\n submenuBehavior: Responsive<SubmenuBehavior> | undefined;\n}\n\nfunction DrillDownProvider({ children, submenuBehavior }: DrillDownProviderProps) {\n const { breakpoint, ready } = useBreakpoint();\n const [stack, setStack] = React.useState<string[]>([]);\n const [animationDirection, setAnimationDirection] = React.useState<AnimationDirection>(null);\n\n // Resolve the current behavior based on breakpoint\n const behavior = React.useMemo(\n () => resolveResponsiveValue(submenuBehavior, breakpoint, 'cascade'),\n [submenuBehavior, breakpoint]\n );\n\n // Reset stack when behavior changes from drill-down to cascade\n const prevBehaviorRef = React.useRef(behavior);\n React.useEffect(() => {\n if (prevBehaviorRef.current === 'drill-down' && behavior === 'cascade') {\n setStack([]);\n setAnimationDirection(null);\n }\n prevBehaviorRef.current = behavior;\n }, [behavior]);\n\n const push = React.useCallback((id: string) => {\n setAnimationDirection('forward');\n setStack((prev) => [...prev, id]);\n }, []);\n\n const pop = React.useCallback(() => {\n setAnimationDirection('backward');\n setStack((prev) => prev.slice(0, -1));\n }, []);\n\n const reset = React.useCallback(() => {\n setStack([]);\n setAnimationDirection(null);\n }, []);\n\n const isActive = React.useCallback(\n (id: string) => {\n if (stack.length === 0) return false;\n return stack[stack.length - 1] === id;\n },\n [stack]\n );\n\n const value = React.useMemo(\n (): DrillDownContextValue => ({\n behavior,\n ready,\n stack,\n push,\n pop,\n reset,\n isActive,\n isRoot: stack.length === 0,\n currentId: stack.length > 0 ? stack[stack.length - 1] : null,\n animationDirection,\n }),\n [behavior, ready, stack, push, pop, reset, isActive, animationDirection]\n );\n\n return <DrillDownContext.Provider value={value}>{children}</DrillDownContext.Provider>;\n}\n\nfunction useDrillDown() {\n const ctx = React.useContext(DrillDownContext);\n if (!ctx) {\n throw new Error('useDrillDown must be used within a DropdownMenu.Content');\n }\n return ctx;\n}\n\n/**\n * Hook to check if drill-down context is available (i.e., we're inside Content)\n */\nfunction useDrillDownOptional() {\n return React.useContext(DrillDownContext);\n}\n\n// ============================================================================\n// Sub Context (for individual submenu instances)\n// ============================================================================\n\ninterface SubContextValue {\n /** Unique ID for this submenu */\n id: string;\n /** Label for the back button */\n label: React.ReactNode;\n}\n\nconst SubContext = React.createContext<SubContextValue | null>(null);\n\nfunction useSubContext() {\n return React.useContext(SubContext);\n}\n\nexport {\n DrillDownProvider,\n DrillDownContext,\n SubContext,\n useDrillDown,\n useDrillDownOptional,\n useSubContext,\n useBreakpoint,\n resolveResponsiveValue,\n};\n\nexport type { SubmenuBehavior, DrillDownContextValue, SubContextValue, AnimationDirection };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["dropdown_menu_drill_down_exports", "__export", "DrillDownContext", "DrillDownProvider", "SubContext", "resolveResponsiveValue", "useBreakpoint", "useDrillDown", "useDrillDownOptional", "useSubContext", "__toCommonJS", "React", "import_shell_types", "currentBp", "setCurrentBp", "ready", "setReady", "mqls", "k", "q", "compute", "matched", "m", "next", "cleanups", "mm", "fn", "value", "currentBreakpoint", "defaultValue", "map", "bpOrder", "startIdx", "i", "bp", "children", "submenuBehavior", "breakpoint", "stack", "setStack", "animationDirection", "setAnimationDirection", "behavior", "prevBehaviorRef", "push", "id", "prev", "pop", "reset", "isActive", "ctx"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,IAAI,qBAAqB,EAAQ,MAAM,UAAU,CAAC;AAGvE,OAAO,EACL,2BAA2B,EAE3B,wBAAwB,EACxB,gCAAgC,EAChC,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAWlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAI/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAAC;CAAG;AAC9E,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAErD,CAAC;AAIF,UAAU,wBACR,SAAQ,qBAAqB,CAAC,OAAO,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC;CAAG;AACtF,QAAA,MAAM,mBAAmB,oGAMxB,CAAC;
|
|
1
|
+
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var Q=Object.create;var v=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var ee=(o,n)=>{for(var r in n)v(o,r,{get:n[r],enumerable:!0})},K=(o,n,r,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Y(n))!$.call(o,t)&&t!==r&&v(o,t,{get:()=>n[t],enumerable:!(p=X(n,t))||p.enumerable});return o};var j=(o,n,r)=>(r=o!=null?Q(Z(o)):{},K(n||!o||!o.__esModule?v(r,"default",{value:o,enumerable:!0}):r,o)),oe=o=>K(v({},"__esModule",{value:!0}),o);var pe={};ee(pe,{CheckboxItem:()=>L,Content:()=>x,Group:()=>k,Item:()=>B,Label:()=>N,RadioGroup:()=>E,RadioItem:()=>G,Root:()=>R,Separator:()=>b,Sub:()=>W,SubContent:()=>V,SubTrigger:()=>O,Trigger:()=>T,TriggerIcon:()=>_});module.exports=oe(pe);var e=j(require("react")),a=j(require("classnames")),i=require("radix-ui"),h=require("./scroll-area.js"),m=require("./dropdown-menu.props.js"),M=require("./theme.js"),
|
|
1
|
+
"use strict";"use client";var Q=Object.create;var v=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var ee=(o,n)=>{for(var r in n)v(o,r,{get:n[r],enumerable:!0})},K=(o,n,r,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Y(n))!$.call(o,t)&&t!==r&&v(o,t,{get:()=>n[t],enumerable:!(p=X(n,t))||p.enumerable});return o};var j=(o,n,r)=>(r=o!=null?Q(Z(o)):{},K(n||!o||!o.__esModule?v(r,"default",{value:o,enumerable:!0}):r,o)),oe=o=>K(v({},"__esModule",{value:!0}),o);var pe={};ee(pe,{CheckboxItem:()=>L,Content:()=>x,Group:()=>k,Item:()=>B,Label:()=>N,RadioGroup:()=>E,RadioItem:()=>G,Root:()=>R,Separator:()=>b,Sub:()=>W,SubContent:()=>V,SubTrigger:()=>O,Trigger:()=>T,TriggerIcon:()=>_});module.exports=oe(pe);var e=j(require("react")),a=j(require("classnames")),i=require("radix-ui"),h=require("./scroll-area.js"),m=require("./dropdown-menu.props.js"),M=require("./theme.js"),c=require("./icons.js"),S=require("../helpers/extract-props.js"),u=require("./_internal/dropdown-menu-drill-down.js"),q=require("../helpers/require-react-element.js"),y=require("./kbd.js");const R=o=>e.createElement(i.DropdownMenu.Root,{...o});R.displayName="DropdownMenu.Root";const T=e.forwardRef(({children:o,...n},r)=>e.createElement(i.DropdownMenu.Trigger,{...n,ref:r,asChild:!0},(0,q.requireReactElement)(o)));T.displayName="DropdownMenu.Trigger";function ne({children:o}){const n=(0,u.useDrillDownOptional)();return!n||n.behavior==="cascade"?e.createElement(e.Fragment,null,o):e.createElement("div",{className:"rt-DropdownMenuDrillDownRoot","data-drill-down-active":n.isRoot?void 0:!0,"data-animation-direction":n.animationDirection??void 0},o)}const F=e.createContext({}),x=e.forwardRef((o,n)=>{const r=(0,M.useThemeContext)();e.useEffect(()=>{o.panelBackground!==void 0&&console.warn("Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.")},[o.panelBackground]);const p=o.material??o.panelBackground??r.panelBackground,t=e.useMemo(()=>({material:p,accentColor:r.accentColor}),[p,r.accentColor]),{size:d=m.dropdownMenuContentPropDefs.size.default,variant:l=m.dropdownMenuContentPropDefs.variant.default,highContrast:w=m.dropdownMenuContentPropDefs.highContrast.default,material:D=t.material,submenuBehavior:s}=o,{className:f,children:P,color:C,container:I,forceMount:H,material:U,panelBackground:z,submenuBehavior:A,...J}=(0,S.extractProps)(o,m.dropdownMenuContentPropDefs),g=e.useMemo(()=>C||t.accentColor,[C,t.accentColor]);return e.createElement(i.DropdownMenu.Portal,{container:I,forceMount:H},e.createElement(M.Theme,{asChild:!0},e.createElement(i.DropdownMenu.Content,{"data-accent-color":g,"data-material":D,"data-panel-background":D,align:"start",sideOffset:4,collisionPadding:10,...J,asChild:!1,ref:n,className:(0,a.default)("rt-PopperContent","rt-BaseMenuContent","rt-DropdownMenuContent",f)},e.createElement(h.ScrollArea,{type:"auto"},e.createElement("div",{className:(0,a.default)("rt-BaseMenuViewport","rt-DropdownMenuViewport")},e.createElement(F.Provider,{value:e.useMemo(()=>({size:d,variant:l,color:g,highContrast:w,material:D}),[d,l,g,w,D])},e.createElement(u.DrillDownProvider,{submenuBehavior:s},e.createElement(ne,null,P))))))))});x.displayName="DropdownMenu.Content";const N=e.forwardRef(({className:o,...n},r)=>e.createElement(i.DropdownMenu.Label,{...n,asChild:!1,ref:r,className:(0,a.default)("rt-BaseMenuLabel","rt-DropdownMenuLabel",o)}));N.displayName="DropdownMenu.Label";const B=e.forwardRef((o,n)=>{const{className:r,children:p,color:t=m.dropdownMenuItemPropDefs.color.default,shortcut:d,...l}=o;return e.createElement(i.DropdownMenu.Item,{"data-accent-color":t,...l,ref:n,className:(0,a.default)("rt-reset","rt-BaseMenuItem","rt-DropdownMenuItem",r)},e.createElement(i.Slot.Slottable,null,p),d&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-DropdownMenuShortcut"},e.createElement(y.Kbd,{size:"1"},d)))});B.displayName="DropdownMenu.Item";const k=e.forwardRef(({className:o,...n},r)=>e.createElement(i.DropdownMenu.Group,{...n,asChild:!1,ref:r,className:(0,a.default)("rt-BaseMenuGroup","rt-DropdownMenuGroup",o)}));k.displayName="DropdownMenu.Group";const E=e.forwardRef(({className:o,...n},r)=>e.createElement(i.DropdownMenu.RadioGroup,{...n,asChild:!1,ref:r,className:(0,a.default)("rt-BaseMenuRadioGroup","rt-DropdownMenuRadioGroup",o)}));E.displayName="DropdownMenu.RadioGroup";const G=e.forwardRef((o,n)=>{const{children:r,className:p,color:t=m.dropdownMenuRadioItemPropDefs.color.default,...d}=o;return e.createElement(i.DropdownMenu.RadioItem,{...d,asChild:!1,ref:n,"data-accent-color":t,className:(0,a.default)("rt-BaseMenuItem","rt-BaseMenuRadioItem","rt-DropdownMenuItem","rt-DropdownMenuRadioItem",p)},r,e.createElement(i.DropdownMenu.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator"},e.createElement(c.ThickDotIcon,{className:"rt-BaseMenuItemIndicatorIcon rt-DropdownMenuItemIndicatorIcon"})))});G.displayName="DropdownMenu.RadioItem";const L=e.forwardRef((o,n)=>{const{children:r,className:p,shortcut:t,color:d=m.dropdownMenuCheckboxItemPropDefs.color.default,...l}=o;return e.createElement(i.DropdownMenu.CheckboxItem,{...l,asChild:!1,ref:n,"data-accent-color":d,className:(0,a.default)("rt-BaseMenuItem","rt-BaseMenuCheckboxItem","rt-DropdownMenuItem","rt-DropdownMenuCheckboxItem",p)},r,e.createElement(i.DropdownMenu.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator"},e.createElement(c.ThickCheckIcon,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})),t&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-DropdownMenuShortcut"},e.createElement(y.Kbd,{size:"1"},t)))});L.displayName="DropdownMenu.CheckboxItem";function re(){return e.useId()}const W=({label:o="Back",...n})=>{const r=(0,u.useDrillDownOptional)(),p=re(),t=e.useMemo(()=>({id:p,label:o}),[p,o]);return r?.behavior==="drill-down"?e.createElement(u.SubContext.Provider,{value:t},n.children):e.createElement(u.SubContext.Provider,{value:t},e.createElement(i.DropdownMenu.Sub,{...n}))};W.displayName="DropdownMenu.Sub";const O=e.forwardRef((o,n)=>{const{className:r,children:p,onClick:t,...d}=o,l=(0,u.useDrillDownOptional)(),w=(0,u.useSubContext)();return l?.behavior==="drill-down"&&w?e.createElement("div",{role:"menuitem",tabIndex:0,ref:n,onClick:s=>{s.preventDefault(),l.push(w.id),t?.(s)},onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),l.push(w.id))},className:(0,a.default)("rt-reset","rt-BaseMenuItem","rt-BaseMenuSubTrigger","rt-DropdownMenuItem","rt-DropdownMenuSubTrigger","rt-DropdownMenuDrillDownSubTrigger",r)},p,e.createElement("div",{className:"rt-BaseMenuShortcut rt-DropdownMenuShortcut"},e.createElement(c.ThickChevronRightIcon,{className:"rt-BaseMenuSubTriggerIcon rt-DropdownMenuSubtriggerIcon"}))):e.createElement(i.DropdownMenu.SubTrigger,{...d,onClick:t,asChild:!1,ref:n,className:(0,a.default)("rt-BaseMenuItem","rt-BaseMenuSubTrigger","rt-DropdownMenuItem","rt-DropdownMenuSubTrigger",r)},p,e.createElement("div",{className:"rt-BaseMenuShortcut rt-DropdownMenuShortcut"},e.createElement(c.ThickChevronRightIcon,{className:"rt-BaseMenuSubTriggerIcon rt-DropdownMenuSubtriggerIcon"})))});O.displayName="DropdownMenu.SubTrigger";const b=e.forwardRef(({className:o,...n},r)=>e.createElement(i.DropdownMenu.Separator,{...n,asChild:!1,ref:r,className:(0,a.default)("rt-BaseMenuSeparator","rt-DropdownMenuSeparator",o)}));b.displayName="DropdownMenu.Separator";function te({label:o}){const n=(0,u.useDrillDown)();return e.createElement("div",{role:"menuitem",tabIndex:0,onClick:r=>{r.preventDefault(),n.pop()},onKeyDown:r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),n.pop())},className:(0,a.default)("rt-reset","rt-BaseMenuItem","rt-DropdownMenuItem","rt-DropdownMenuDrillDownBackItem")},e.createElement(c.ThickChevronLeftIcon,{className:"rt-DropdownMenuDrillDownBackIcon"}),e.createElement("span",{className:"rt-DropdownMenuDrillDownBackLabel"},o))}const V=e.forwardRef((o,n)=>{const r=e.useContext(F),{size:p,variant:t,color:d,highContrast:l,material:w}=e.useMemo(()=>r,[r]),D=(0,u.useDrillDownOptional)(),s=(0,u.useSubContext)(),{className:f,children:P,container:C,forceMount:I,material:H,panelBackground:U,...z}=(0,S.extractProps)({size:p,variant:t,color:d,highContrast:l,material:w,...o},m.dropdownMenuSubContentPropDefs);if(D?.behavior==="drill-down"&&s){const A=D.isActive(s.id);return e.createElement("div",{ref:n,role:"menu","aria-label":typeof s.label=="string"?s.label:void 0,"data-drill-down-active":A?!0:void 0,"data-animation-direction":D.animationDirection??void 0,className:(0,a.default)("rt-DropdownMenuDrillDownPanel",f)},e.createElement(te,{label:s.label}),e.createElement(b,null),P)}return e.createElement(i.DropdownMenu.Portal,{container:C,forceMount:I},e.createElement(M.Theme,{asChild:!0},e.createElement(i.DropdownMenu.SubContent,{"data-accent-color":d,"data-material":w,"data-panel-background":w,alignOffset:-Number(p)*4,sideOffset:1,collisionPadding:10,...z,asChild:!1,ref:n,className:(0,a.default)("rt-PopperContent","rt-BaseMenuContent","rt-BaseMenuSubContent","rt-DropdownMenuContent","rt-DropdownMenuSubContent",f)},e.createElement(h.ScrollArea,{type:"auto"},e.createElement("div",{className:(0,a.default)("rt-BaseMenuViewport","rt-DropdownMenuViewport")},P)))))});V.displayName="DropdownMenu.SubContent";const _=e.forwardRef((o,n)=>e.createElement(c.ChevronDownIcon,{...o,ref:n,className:"rt-DropdownMenuTriggerIcon"}));_.displayName="DropdownMenu.TriggerIcon";
|
|
2
2
|
//# sourceMappingURL=dropdown-menu.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/dropdown-menu.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { DropdownMenu as DropdownMenuPrimitive, Slot } from 'radix-ui';\n\nimport { ScrollArea } from './scroll-area.js';\nimport {\n dropdownMenuContentPropDefs,\n dropdownMenuSubContentPropDefs,\n dropdownMenuItemPropDefs,\n dropdownMenuCheckboxItemPropDefs,\n dropdownMenuRadioItemPropDefs,\n} from './dropdown-menu.props.js';\nimport { Theme, useThemeContext } from './theme.js';\nimport { ChevronDownIcon, ThickCheckIcon, ThickChevronLeftIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport {\n DrillDownProvider,\n SubContext,\n useDrillDown,\n useDrillDownOptional,\n useSubContext,\n} from './_internal/dropdown-menu-drill-down.js';\nimport type { SubmenuBehavior } from './_internal/dropdown-menu-drill-down.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport { Kbd } from './kbd.js';\n\nimport type { IconProps } from './icons.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes, Responsive } from '../props/prop-def.js';\n\ninterface DropdownMenuRootProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root> {}\nconst DropdownMenuRoot: React.FC<DropdownMenuRootProps> = (props) => (\n <DropdownMenuPrimitive.Root {...props} />\n);\nDropdownMenuRoot.displayName = 'DropdownMenu.Root';\n\ntype DropdownMenuTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.Trigger>;\ninterface DropdownMenuTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Trigger, RemovedProps> {}\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </DropdownMenuPrimitive.Trigger>\n ),\n);\nDropdownMenuTrigger.displayName = 'DropdownMenu.Trigger';\n\n/**\n * Internal component that wraps root menu items and handles visibility in drill-down mode.\n * In drill-down mode, this hides when a submenu is active.\n */\nfunction DrillDownRoot({ children }: { children: React.ReactNode }) {\n const drillDown = useDrillDownOptional();\n\n // In cascade mode or when no drill-down context, always show\n if (!drillDown || drillDown.behavior === 'cascade') {\n return <>{children}</>;\n }\n\n // In drill-down mode, hide root when a submenu is active\n return (\n <div\n className=\"rt-DropdownMenuDrillDownRoot\"\n data-drill-down-active={drillDown.isRoot ? undefined : true}\n >\n {children}\n </div>\n );\n}\n\ntype DropdownMenuContentOwnProps = GetPropDefTypes<typeof dropdownMenuContentPropDefs> & {\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior?: Responsive<SubmenuBehavior>;\n};\ntype DropdownMenuContentContextValue = Omit<DropdownMenuContentOwnProps, 'submenuBehavior'>;\nconst DropdownMenuContentContext = React.createContext<DropdownMenuContentContextValue>({});\ntype DropdownMenuContentElement = React.ElementRef<typeof DropdownMenuPrimitive.Content>;\ninterface DropdownMenuContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Content, RemovedProps>,\n DropdownMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior?: Responsive<SubmenuBehavior>;\n}\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n // Show deprecation warning for panelBackground when used\n React.useEffect(() => {\n if (props.panelBackground !== undefined) {\n console.warn(\n 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',\n );\n }\n }, [props.panelBackground]);\n\n // Material takes precedence over panelBackground\n const effectiveMaterial =\n props.material ?? props.panelBackground ?? themeContext.panelBackground;\n\n // Memoize theme context values to prevent unnecessary re-renders\n const memoizedThemeContext = React.useMemo(\n () => ({\n material: effectiveMaterial,\n accentColor: themeContext.accentColor,\n }),\n [effectiveMaterial, themeContext.accentColor],\n );\n\n const {\n size = dropdownMenuContentPropDefs.size.default,\n variant = dropdownMenuContentPropDefs.variant.default,\n highContrast = dropdownMenuContentPropDefs.highContrast.default,\n material = memoizedThemeContext.material,\n submenuBehavior,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n submenuBehavior: ___,\n ...contentProps\n } = extractProps(props, dropdownMenuContentPropDefs);\n\n // Memoize color resolution to prevent unnecessary re-renders\n const resolvedColor = React.useMemo(\n () => color || memoizedThemeContext.accentColor,\n [color, memoizedThemeContext.accentColor],\n );\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <DropdownMenuPrimitive.Content\n data-accent-color={resolvedColor}\n data-material={material}\n data-panel-background={material}\n align=\"start\"\n sideOffset={4}\n collisionPadding={10}\n {...contentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-DropdownMenuContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>\n <DropdownMenuContentContext.Provider\n value={React.useMemo(\n () => ({ size, variant, color: resolvedColor, highContrast, material }),\n [size, variant, resolvedColor, highContrast, material],\n )}\n >\n <DrillDownProvider submenuBehavior={submenuBehavior}>\n <DrillDownRoot>{children}</DrillDownRoot>\n </DrillDownProvider>\n </DropdownMenuContentContext.Provider>\n </div>\n </ScrollArea>\n </DropdownMenuPrimitive.Content>\n </Theme>\n </DropdownMenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuContent.displayName = 'DropdownMenu.Content';\n\ntype DropdownMenuLabelElement = React.ElementRef<typeof DropdownMenuPrimitive.Label>;\ninterface DropdownMenuLabelProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Label, RemovedProps> {}\nconst DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(\n ({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Label\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuLabel', 'rt-DropdownMenuLabel', className)}\n />\n ),\n);\nDropdownMenuLabel.displayName = 'DropdownMenu.Label';\n\ntype DropdownMenuItemElement = React.ElementRef<typeof DropdownMenuPrimitive.Item>;\ntype DropdownMenuItemOwnProps = GetPropDefTypes<typeof dropdownMenuItemPropDefs>;\ninterface DropdownMenuItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Item, RemovedProps>,\n DropdownMenuItemOwnProps {}\nconst DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(\n (props, forwardedRef) => {\n const {\n className,\n children,\n color = dropdownMenuItemPropDefs.color.default,\n shortcut,\n ...itemProps\n } = props;\n return (\n <DropdownMenuPrimitive.Item\n data-accent-color={color}\n {...itemProps}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-DropdownMenuItem', className)}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </DropdownMenuPrimitive.Item>\n );\n },\n);\nDropdownMenuItem.displayName = 'DropdownMenu.Item';\n\ntype DropdownMenuGroupElement = React.ElementRef<typeof DropdownMenuPrimitive.Group>;\ninterface DropdownMenuGroupProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Group, RemovedProps> {}\nconst DropdownMenuGroup = React.forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Group\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuGroup', 'rt-DropdownMenuGroup', className)}\n />\n ),\n);\nDropdownMenuGroup.displayName = 'DropdownMenu.Group';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioGroup>;\ninterface DropdownMenuRadioGroupProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.RadioGroup, RemovedProps> {}\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>(({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.RadioGroup\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuRadioGroup', 'rt-DropdownMenuRadioGroup', className)}\n />\n));\nDropdownMenuRadioGroup.displayName = 'DropdownMenu.RadioGroup';\n\ntype DropdownMenuRadioItemElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>;\ntype DropdownMenuRadioItemOwnProps = GetPropDefTypes<typeof dropdownMenuRadioItemPropDefs>;\ninterface DropdownMenuRadioItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.RadioItem, RemovedProps>,\n DropdownMenuRadioItemOwnProps {}\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n color = dropdownMenuRadioItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <DropdownMenuPrimitive.RadioItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuRadioItem',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuRadioItem',\n className,\n )}\n >\n {children}\n <DropdownMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator\">\n <ThickDotIcon className=\"rt-BaseMenuItemIndicatorIcon rt-DropdownMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </DropdownMenuPrimitive.RadioItem>\n );\n});\nDropdownMenuRadioItem.displayName = 'DropdownMenu.RadioItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>;\ntype DropdownMenuCheckboxItemOwnProps = GetPropDefTypes<typeof dropdownMenuCheckboxItemPropDefs>;\ninterface DropdownMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.CheckboxItem, RemovedProps>,\n DropdownMenuCheckboxItemOwnProps {}\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = dropdownMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <DropdownMenuPrimitive.CheckboxItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuCheckboxItem',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuCheckboxItem',\n className,\n )}\n >\n {children}\n <DropdownMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator\">\n <ThickCheckIcon className=\"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\nDropdownMenuCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n// Generate unique submenu IDs using React 18's useId for SSR safety\nfunction useSubId() {\n return React.useId();\n}\n\ninterface DropdownMenuSubProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Sub> {\n /**\n * Label displayed in the back button when using drill-down mode.\n * If not provided, defaults to \"Back\".\n */\n label?: React.ReactNode;\n}\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = ({ label = 'Back', ...props }) => {\n const drillDown = useDrillDownOptional();\n const subId = useSubId();\n\n // Create context value for SubContent and SubTrigger\n const subContextValue = React.useMemo(\n () => ({ id: subId, label }),\n [subId, label]\n );\n\n // In drill-down mode, we don't use Radix's Sub component\n // We just provide the SubContext and render children\n if (drillDown?.behavior === 'drill-down') {\n return (\n <SubContext.Provider value={subContextValue}>\n {props.children}\n </SubContext.Provider>\n );\n }\n\n // In cascade mode, use Radix's Sub component normally\n return (\n <SubContext.Provider value={subContextValue}>\n <DropdownMenuPrimitive.Sub {...props} />\n </SubContext.Provider>\n );\n};\nDropdownMenuSub.displayName = 'DropdownMenu.Sub';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>;\ninterface DropdownMenuSubTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubTrigger, RemovedProps> {}\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props, forwardedRef) => {\n const { className, children, onClick, ...subTriggerProps } = props;\n const drillDown = useDrillDownOptional();\n const subContext = useSubContext();\n\n // In drill-down mode, render a button that navigates to the submenu\n if (drillDown?.behavior === 'drill-down' && subContext) {\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n drillDown.push(subContext.id);\n (onClick as React.MouseEventHandler<HTMLDivElement> | undefined)?.(e);\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={0}\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n drillDown.push(subContext.id);\n }\n }}\n className={classNames(\n 'rt-reset',\n 'rt-BaseMenuItem',\n 'rt-BaseMenuSubTrigger',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuSubTrigger',\n 'rt-DropdownMenuDrillDownSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <ThickChevronRightIcon className=\"rt-BaseMenuSubTriggerIcon rt-DropdownMenuSubtriggerIcon\" />\n </div>\n </div>\n );\n }\n\n // In cascade mode, use Radix's SubTrigger\n return (\n <DropdownMenuPrimitive.SubTrigger\n {...subTriggerProps}\n onClick={onClick as React.MouseEventHandler<HTMLDivElement> | undefined}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuSubTrigger',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <ThickChevronRightIcon className=\"rt-BaseMenuSubTriggerIcon rt-DropdownMenuSubtriggerIcon\" />\n </div>\n </DropdownMenuPrimitive.SubTrigger>\n );\n});\nDropdownMenuSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\n// Separator is defined here (before SubContent) because it's used in drill-down mode\ntype DropdownMenuSeparatorElement = React.ElementRef<typeof DropdownMenuPrimitive.Separator>;\ninterface DropdownMenuSeparatorProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Separator, RemovedProps> {}\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Separator\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuSeparator', 'rt-DropdownMenuSeparator', className)}\n />\n));\nDropdownMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/**\n * Internal component for the drill-down back button.\n */\nfunction DrillDownBackItem({ label }: { label: React.ReactNode }) {\n const drillDown = useDrillDown();\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={0}\n onClick={(e) => {\n e.preventDefault();\n drillDown.pop();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n drillDown.pop();\n }\n }}\n className={classNames(\n 'rt-reset',\n 'rt-BaseMenuItem',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuDrillDownBackItem',\n )}\n >\n <ThickChevronLeftIcon className=\"rt-DropdownMenuDrillDownBackIcon\" />\n <span className=\"rt-DropdownMenuDrillDownBackLabel\">{label}</span>\n </div>\n );\n}\n\ntype DropdownMenuSubContentElement = React.ElementRef<typeof DropdownMenuPrimitive.SubContent>;\ninterface DropdownMenuSubContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps>,\n DropdownMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n}\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props, forwardedRef) => {\n // Memoize context consumption to prevent unnecessary re-renders\n const contextValue = React.useContext(DropdownMenuContentContext);\n const { size, variant, color, highContrast, material } = React.useMemo(\n () => contextValue,\n [contextValue],\n );\n const drillDown = useDrillDownOptional();\n const subContext = useSubContext();\n\n const {\n className,\n children,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n ...subContentProps\n } = extractProps(\n { size, variant, color, highContrast, material, ...props },\n dropdownMenuSubContentPropDefs,\n );\n\n // In drill-down mode, render inline instead of in a portal\n if (drillDown?.behavior === 'drill-down' && subContext) {\n const isActive = drillDown.isActive(subContext.id);\n\n return (\n <div\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n role=\"menu\"\n aria-label={typeof subContext.label === 'string' ? subContext.label : undefined}\n data-drill-down-active={isActive ? true : undefined}\n className={classNames(\n 'rt-DropdownMenuDrillDownPanel',\n className,\n )}\n >\n <DrillDownBackItem label={subContext.label} />\n <DropdownMenuSeparator />\n {children}\n </div>\n );\n }\n\n // In cascade mode, use Portal and Radix's SubContent\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <DropdownMenuPrimitive.SubContent\n data-accent-color={color}\n data-material={material}\n data-panel-background={material}\n alignOffset={-Number(size) * 4}\n // Side offset accounts for the outer solid box-shadow\n sideOffset={1}\n collisionPadding={10}\n {...subContentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-BaseMenuSubContent',\n 'rt-DropdownMenuContent',\n 'rt-DropdownMenuSubContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>\n {children}\n </div>\n </ScrollArea>\n </DropdownMenuPrimitive.SubContent>\n </Theme>\n </DropdownMenuPrimitive.Portal>\n );\n});\nDropdownMenuSubContent.displayName = 'DropdownMenu.SubContent';\n\ntype DropdownMenuTriggerIconElement = React.ElementRef<'svg'>;\ninterface DropdownMenuTriggerIconProps extends IconProps {}\nconst DropdownMenuTriggerIcon = React.forwardRef<\n DropdownMenuTriggerIconElement,\n DropdownMenuTriggerIconProps\n>((props, forwardedRef) => (\n <ChevronDownIcon {...props} ref={forwardedRef} className=\"rt-DropdownMenuTriggerIcon\" />\n));\nDropdownMenuTriggerIcon.displayName = 'DropdownMenu.TriggerIcon';\n\nexport {\n DropdownMenuRoot as Root,\n DropdownMenuTrigger as Trigger,\n DropdownMenuTriggerIcon as TriggerIcon,\n DropdownMenuContent as Content,\n DropdownMenuLabel as Label,\n DropdownMenuItem as Item,\n DropdownMenuGroup as Group,\n DropdownMenuRadioGroup as RadioGroup,\n DropdownMenuRadioItem as RadioItem,\n DropdownMenuCheckboxItem as CheckboxItem,\n DropdownMenuSub as Sub,\n DropdownMenuSubTrigger as SubTrigger,\n DropdownMenuSubContent as SubContent,\n DropdownMenuSeparator as Separator,\n};\n\nexport type {\n DropdownMenuRootProps as RootProps,\n DropdownMenuTriggerProps as TriggerProps,\n DropdownMenuTriggerIconProps as TriggerIconProps,\n DropdownMenuContentProps as ContentProps,\n DropdownMenuLabelProps as LabelProps,\n DropdownMenuItemProps as ItemProps,\n DropdownMenuGroupProps as GroupProps,\n DropdownMenuRadioGroupProps as RadioGroupProps,\n DropdownMenuRadioItemProps as RadioItemProps,\n DropdownMenuCheckboxItemProps as CheckboxItemProps,\n DropdownMenuSubProps as SubProps,\n DropdownMenuSubTriggerProps as SubTriggerProps,\n DropdownMenuSubContentProps as SubContentProps,\n DropdownMenuSeparatorProps as SeparatorProps,\n SubmenuBehavior,\n};\n"],
|
|
5
|
-
"mappings": "ykBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,EAAA,YAAAC,EAAA,UAAAC,EAAA,SAAAC,EAAA,UAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,SAAAC,EAAA,cAAAC,EAAA,QAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,YAAAC,EAAA,gBAAAC,IAAA,eAAAC,GAAAhB,IAEA,IAAAiB,EAAuB,oBACvBC,EAAuB,yBACvBC,EAA4D,oBAE5DC,EAA2B,4BAC3BC,EAMO,oCACPC,EAAuC,sBACvCC,EAA2G,sBAC3GC,EAA6B,uCAC7BC,EAMO,mDAEPC,EAAoC,+CACpCC,EAAoB,oBAQpB,MAAMlB,EAAqDmB,GACzDX,EAAA,cAAC,EAAAY,aAAsB,KAAtB,CAA4B,GAAGD,EAAO,EAEzCnB,EAAiB,YAAc,oBAK/B,MAAMK,EAAsBG,EAAM,WAChC,CAAC,CAAE,SAAAa,EAAU,GAAGF,CAAM,EAAGG,IACvBd,EAAA,cAAC,EAAAY,aAAsB,QAAtB,CAA+B,GAAGD,EAAO,IAAKG,EAAc,QAAO,OACjE,uBAAoBD,CAAQ,CAC/B,CAEJ,EACAhB,EAAoB,YAAc,uBAMlC,SAASkB,GAAc,CAAE,SAAAF,CAAS,EAAkC,CAClE,MAAMG,KAAY,wBAAqB,EAGvC,MAAI,CAACA,GAAaA,EAAU,WAAa,UAChChB,EAAA,cAAAA,EAAA,cAAGa,CAAS,EAKnBb,EAAA,cAAC,OACC,UAAU,+BACV,yBAAwBgB,EAAU,OAAS,OAAY,
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { DropdownMenu as DropdownMenuPrimitive, Slot } from 'radix-ui';\n\nimport { ScrollArea } from './scroll-area.js';\nimport {\n dropdownMenuContentPropDefs,\n dropdownMenuSubContentPropDefs,\n dropdownMenuItemPropDefs,\n dropdownMenuCheckboxItemPropDefs,\n dropdownMenuRadioItemPropDefs,\n} from './dropdown-menu.props.js';\nimport { Theme, useThemeContext } from './theme.js';\nimport { ChevronDownIcon, ThickCheckIcon, ThickChevronLeftIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport {\n DrillDownProvider,\n SubContext,\n useDrillDown,\n useDrillDownOptional,\n useSubContext,\n} from './_internal/dropdown-menu-drill-down.js';\nimport type { SubmenuBehavior } from './_internal/dropdown-menu-drill-down.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport { Kbd } from './kbd.js';\n\nimport type { IconProps } from './icons.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes, Responsive } from '../props/prop-def.js';\n\ninterface DropdownMenuRootProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root> {}\nconst DropdownMenuRoot: React.FC<DropdownMenuRootProps> = (props) => (\n <DropdownMenuPrimitive.Root {...props} />\n);\nDropdownMenuRoot.displayName = 'DropdownMenu.Root';\n\ntype DropdownMenuTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.Trigger>;\ninterface DropdownMenuTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Trigger, RemovedProps> {}\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </DropdownMenuPrimitive.Trigger>\n ),\n);\nDropdownMenuTrigger.displayName = 'DropdownMenu.Trigger';\n\n/**\n * Internal component that wraps root menu items and handles visibility in drill-down mode.\n * In drill-down mode, this hides when a submenu is active.\n */\nfunction DrillDownRoot({ children }: { children: React.ReactNode }) {\n const drillDown = useDrillDownOptional();\n\n // In cascade mode or when no drill-down context, always show\n if (!drillDown || drillDown.behavior === 'cascade') {\n return <>{children}</>;\n }\n\n // In drill-down mode, hide root when a submenu is active\n return (\n <div\n className=\"rt-DropdownMenuDrillDownRoot\"\n data-drill-down-active={drillDown.isRoot ? undefined : true}\n data-animation-direction={drillDown.animationDirection ?? undefined}\n >\n {children}\n </div>\n );\n}\n\ntype DropdownMenuContentOwnProps = GetPropDefTypes<typeof dropdownMenuContentPropDefs> & {\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior?: Responsive<SubmenuBehavior>;\n};\ntype DropdownMenuContentContextValue = Omit<DropdownMenuContentOwnProps, 'submenuBehavior'>;\nconst DropdownMenuContentContext = React.createContext<DropdownMenuContentContextValue>({});\ntype DropdownMenuContentElement = React.ElementRef<typeof DropdownMenuPrimitive.Content>;\ninterface DropdownMenuContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Content, RemovedProps>,\n DropdownMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior?: Responsive<SubmenuBehavior>;\n}\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n // Show deprecation warning for panelBackground when used\n React.useEffect(() => {\n if (props.panelBackground !== undefined) {\n console.warn(\n 'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',\n );\n }\n }, [props.panelBackground]);\n\n // Material takes precedence over panelBackground\n const effectiveMaterial =\n props.material ?? props.panelBackground ?? themeContext.panelBackground;\n\n // Memoize theme context values to prevent unnecessary re-renders\n const memoizedThemeContext = React.useMemo(\n () => ({\n material: effectiveMaterial,\n accentColor: themeContext.accentColor,\n }),\n [effectiveMaterial, themeContext.accentColor],\n );\n\n const {\n size = dropdownMenuContentPropDefs.size.default,\n variant = dropdownMenuContentPropDefs.variant.default,\n highContrast = dropdownMenuContentPropDefs.highContrast.default,\n material = memoizedThemeContext.material,\n submenuBehavior,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n submenuBehavior: ___,\n ...contentProps\n } = extractProps(props, dropdownMenuContentPropDefs);\n\n // Memoize color resolution to prevent unnecessary re-renders\n const resolvedColor = React.useMemo(\n () => color || memoizedThemeContext.accentColor,\n [color, memoizedThemeContext.accentColor],\n );\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <DropdownMenuPrimitive.Content\n data-accent-color={resolvedColor}\n data-material={material}\n data-panel-background={material}\n align=\"start\"\n sideOffset={4}\n collisionPadding={10}\n {...contentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-DropdownMenuContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>\n <DropdownMenuContentContext.Provider\n value={React.useMemo(\n () => ({ size, variant, color: resolvedColor, highContrast, material }),\n [size, variant, resolvedColor, highContrast, material],\n )}\n >\n <DrillDownProvider submenuBehavior={submenuBehavior}>\n <DrillDownRoot>{children}</DrillDownRoot>\n </DrillDownProvider>\n </DropdownMenuContentContext.Provider>\n </div>\n </ScrollArea>\n </DropdownMenuPrimitive.Content>\n </Theme>\n </DropdownMenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuContent.displayName = 'DropdownMenu.Content';\n\ntype DropdownMenuLabelElement = React.ElementRef<typeof DropdownMenuPrimitive.Label>;\ninterface DropdownMenuLabelProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Label, RemovedProps> {}\nconst DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(\n ({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Label\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuLabel', 'rt-DropdownMenuLabel', className)}\n />\n ),\n);\nDropdownMenuLabel.displayName = 'DropdownMenu.Label';\n\ntype DropdownMenuItemElement = React.ElementRef<typeof DropdownMenuPrimitive.Item>;\ntype DropdownMenuItemOwnProps = GetPropDefTypes<typeof dropdownMenuItemPropDefs>;\ninterface DropdownMenuItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Item, RemovedProps>,\n DropdownMenuItemOwnProps {}\nconst DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(\n (props, forwardedRef) => {\n const {\n className,\n children,\n color = dropdownMenuItemPropDefs.color.default,\n shortcut,\n ...itemProps\n } = props;\n return (\n <DropdownMenuPrimitive.Item\n data-accent-color={color}\n {...itemProps}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-DropdownMenuItem', className)}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </DropdownMenuPrimitive.Item>\n );\n },\n);\nDropdownMenuItem.displayName = 'DropdownMenu.Item';\n\ntype DropdownMenuGroupElement = React.ElementRef<typeof DropdownMenuPrimitive.Group>;\ninterface DropdownMenuGroupProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Group, RemovedProps> {}\nconst DropdownMenuGroup = React.forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Group\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuGroup', 'rt-DropdownMenuGroup', className)}\n />\n ),\n);\nDropdownMenuGroup.displayName = 'DropdownMenu.Group';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioGroup>;\ninterface DropdownMenuRadioGroupProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.RadioGroup, RemovedProps> {}\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>(({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.RadioGroup\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuRadioGroup', 'rt-DropdownMenuRadioGroup', className)}\n />\n));\nDropdownMenuRadioGroup.displayName = 'DropdownMenu.RadioGroup';\n\ntype DropdownMenuRadioItemElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>;\ntype DropdownMenuRadioItemOwnProps = GetPropDefTypes<typeof dropdownMenuRadioItemPropDefs>;\ninterface DropdownMenuRadioItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.RadioItem, RemovedProps>,\n DropdownMenuRadioItemOwnProps {}\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n color = dropdownMenuRadioItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <DropdownMenuPrimitive.RadioItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuRadioItem',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuRadioItem',\n className,\n )}\n >\n {children}\n <DropdownMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator\">\n <ThickDotIcon className=\"rt-BaseMenuItemIndicatorIcon rt-DropdownMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </DropdownMenuPrimitive.RadioItem>\n );\n});\nDropdownMenuRadioItem.displayName = 'DropdownMenu.RadioItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>;\ntype DropdownMenuCheckboxItemOwnProps = GetPropDefTypes<typeof dropdownMenuCheckboxItemPropDefs>;\ninterface DropdownMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.CheckboxItem, RemovedProps>,\n DropdownMenuCheckboxItemOwnProps {}\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = dropdownMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <DropdownMenuPrimitive.CheckboxItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuCheckboxItem',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuCheckboxItem',\n className,\n )}\n >\n {children}\n <DropdownMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-DropdownMenuItemIndicator\">\n <ThickCheckIcon className=\"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\nDropdownMenuCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n// Generate unique submenu IDs using React 18's useId for SSR safety\nfunction useSubId() {\n return React.useId();\n}\n\ninterface DropdownMenuSubProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Sub> {\n /**\n * Label displayed in the back button when using drill-down mode.\n * If not provided, defaults to \"Back\".\n */\n label?: React.ReactNode;\n}\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = ({ label = 'Back', ...props }) => {\n const drillDown = useDrillDownOptional();\n const subId = useSubId();\n\n // Create context value for SubContent and SubTrigger\n const subContextValue = React.useMemo(\n () => ({ id: subId, label }),\n [subId, label]\n );\n\n // In drill-down mode, we don't use Radix's Sub component\n // We just provide the SubContext and render children\n if (drillDown?.behavior === 'drill-down') {\n return (\n <SubContext.Provider value={subContextValue}>\n {props.children}\n </SubContext.Provider>\n );\n }\n\n // In cascade mode, use Radix's Sub component normally\n return (\n <SubContext.Provider value={subContextValue}>\n <DropdownMenuPrimitive.Sub {...props} />\n </SubContext.Provider>\n );\n};\nDropdownMenuSub.displayName = 'DropdownMenu.Sub';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>;\ninterface DropdownMenuSubTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubTrigger, RemovedProps> {}\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props, forwardedRef) => {\n const { className, children, onClick, ...subTriggerProps } = props;\n const drillDown = useDrillDownOptional();\n const subContext = useSubContext();\n\n // In drill-down mode, render a button that navigates to the submenu\n if (drillDown?.behavior === 'drill-down' && subContext) {\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n drillDown.push(subContext.id);\n (onClick as React.MouseEventHandler<HTMLDivElement> | undefined)?.(e);\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={0}\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n drillDown.push(subContext.id);\n }\n }}\n className={classNames(\n 'rt-reset',\n 'rt-BaseMenuItem',\n 'rt-BaseMenuSubTrigger',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuSubTrigger',\n 'rt-DropdownMenuDrillDownSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <ThickChevronRightIcon className=\"rt-BaseMenuSubTriggerIcon rt-DropdownMenuSubtriggerIcon\" />\n </div>\n </div>\n );\n }\n\n // In cascade mode, use Radix's SubTrigger\n return (\n <DropdownMenuPrimitive.SubTrigger\n {...subTriggerProps}\n onClick={onClick as React.MouseEventHandler<HTMLDivElement> | undefined}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuSubTrigger',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"rt-BaseMenuShortcut rt-DropdownMenuShortcut\">\n <ThickChevronRightIcon className=\"rt-BaseMenuSubTriggerIcon rt-DropdownMenuSubtriggerIcon\" />\n </div>\n </DropdownMenuPrimitive.SubTrigger>\n );\n});\nDropdownMenuSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\n// Separator is defined here (before SubContent) because it's used in drill-down mode\ntype DropdownMenuSeparatorElement = React.ElementRef<typeof DropdownMenuPrimitive.Separator>;\ninterface DropdownMenuSeparatorProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Separator, RemovedProps> {}\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Separator\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuSeparator', 'rt-DropdownMenuSeparator', className)}\n />\n));\nDropdownMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/**\n * Internal component for the drill-down back button.\n */\nfunction DrillDownBackItem({ label }: { label: React.ReactNode }) {\n const drillDown = useDrillDown();\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={0}\n onClick={(e) => {\n e.preventDefault();\n drillDown.pop();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n drillDown.pop();\n }\n }}\n className={classNames(\n 'rt-reset',\n 'rt-BaseMenuItem',\n 'rt-DropdownMenuItem',\n 'rt-DropdownMenuDrillDownBackItem',\n )}\n >\n <ThickChevronLeftIcon className=\"rt-DropdownMenuDrillDownBackIcon\" />\n <span className=\"rt-DropdownMenuDrillDownBackLabel\">{label}</span>\n </div>\n );\n}\n\ntype DropdownMenuSubContentElement = React.ElementRef<typeof DropdownMenuPrimitive.SubContent>;\ninterface DropdownMenuSubContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps>,\n DropdownMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n}\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props, forwardedRef) => {\n // Memoize context consumption to prevent unnecessary re-renders\n const contextValue = React.useContext(DropdownMenuContentContext);\n const { size, variant, color, highContrast, material } = React.useMemo(\n () => contextValue,\n [contextValue],\n );\n const drillDown = useDrillDownOptional();\n const subContext = useSubContext();\n\n const {\n className,\n children,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n ...subContentProps\n } = extractProps(\n { size, variant, color, highContrast, material, ...props },\n dropdownMenuSubContentPropDefs,\n );\n\n // In drill-down mode, render inline instead of in a portal\n if (drillDown?.behavior === 'drill-down' && subContext) {\n const isActive = drillDown.isActive(subContext.id);\n\n return (\n <div\n ref={forwardedRef as React.Ref<HTMLDivElement>}\n role=\"menu\"\n aria-label={typeof subContext.label === 'string' ? subContext.label : undefined}\n data-drill-down-active={isActive ? true : undefined}\n data-animation-direction={drillDown.animationDirection ?? undefined}\n className={classNames(\n 'rt-DropdownMenuDrillDownPanel',\n className,\n )}\n >\n <DrillDownBackItem label={subContext.label} />\n <DropdownMenuSeparator />\n {children}\n </div>\n );\n }\n\n // In cascade mode, use Portal and Radix's SubContent\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <DropdownMenuPrimitive.SubContent\n data-accent-color={color}\n data-material={material}\n data-panel-background={material}\n alignOffset={-Number(size) * 4}\n // Side offset accounts for the outer solid box-shadow\n sideOffset={1}\n collisionPadding={10}\n {...subContentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-BaseMenuSubContent',\n 'rt-DropdownMenuContent',\n 'rt-DropdownMenuSubContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-DropdownMenuViewport')}>\n {children}\n </div>\n </ScrollArea>\n </DropdownMenuPrimitive.SubContent>\n </Theme>\n </DropdownMenuPrimitive.Portal>\n );\n});\nDropdownMenuSubContent.displayName = 'DropdownMenu.SubContent';\n\ntype DropdownMenuTriggerIconElement = React.ElementRef<'svg'>;\ninterface DropdownMenuTriggerIconProps extends IconProps {}\nconst DropdownMenuTriggerIcon = React.forwardRef<\n DropdownMenuTriggerIconElement,\n DropdownMenuTriggerIconProps\n>((props, forwardedRef) => (\n <ChevronDownIcon {...props} ref={forwardedRef} className=\"rt-DropdownMenuTriggerIcon\" />\n));\nDropdownMenuTriggerIcon.displayName = 'DropdownMenu.TriggerIcon';\n\nexport {\n DropdownMenuRoot as Root,\n DropdownMenuTrigger as Trigger,\n DropdownMenuTriggerIcon as TriggerIcon,\n DropdownMenuContent as Content,\n DropdownMenuLabel as Label,\n DropdownMenuItem as Item,\n DropdownMenuGroup as Group,\n DropdownMenuRadioGroup as RadioGroup,\n DropdownMenuRadioItem as RadioItem,\n DropdownMenuCheckboxItem as CheckboxItem,\n DropdownMenuSub as Sub,\n DropdownMenuSubTrigger as SubTrigger,\n DropdownMenuSubContent as SubContent,\n DropdownMenuSeparator as Separator,\n};\n\nexport type {\n DropdownMenuRootProps as RootProps,\n DropdownMenuTriggerProps as TriggerProps,\n DropdownMenuTriggerIconProps as TriggerIconProps,\n DropdownMenuContentProps as ContentProps,\n DropdownMenuLabelProps as LabelProps,\n DropdownMenuItemProps as ItemProps,\n DropdownMenuGroupProps as GroupProps,\n DropdownMenuRadioGroupProps as RadioGroupProps,\n DropdownMenuRadioItemProps as RadioItemProps,\n DropdownMenuCheckboxItemProps as CheckboxItemProps,\n DropdownMenuSubProps as SubProps,\n DropdownMenuSubTriggerProps as SubTriggerProps,\n DropdownMenuSubContentProps as SubContentProps,\n DropdownMenuSeparatorProps as SeparatorProps,\n SubmenuBehavior,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["dropdown_menu_exports", "__export", "DropdownMenuCheckboxItem", "DropdownMenuContent", "DropdownMenuGroup", "DropdownMenuItem", "DropdownMenuLabel", "DropdownMenuRadioGroup", "DropdownMenuRadioItem", "DropdownMenuRoot", "DropdownMenuSeparator", "DropdownMenuSub", "DropdownMenuSubContent", "DropdownMenuSubTrigger", "DropdownMenuTrigger", "DropdownMenuTriggerIcon", "__toCommonJS", "React", "import_classnames", "import_radix_ui", "import_scroll_area", "import_dropdown_menu_props", "import_theme", "import_icons", "import_extract_props", "import_dropdown_menu_drill_down", "import_require_react_element", "import_kbd", "props", "DropdownMenuPrimitive", "children", "forwardedRef", "DrillDownRoot", "drillDown", "DropdownMenuContentContext", "themeContext", "effectiveMaterial", "memoizedThemeContext", "size", "variant", "highContrast", "material", "submenuBehavior", "className", "color", "container", "forceMount", "_", "__", "___", "contentProps", "resolvedColor", "classNames", "shortcut", "itemProps", "useSubId", "label", "subId", "subContextValue", "onClick", "subTriggerProps", "subContext", "e", "DrillDownBackItem", "contextValue", "subContentProps", "isActive"]
|
|
7
7
|
}
|
|
@@ -16,6 +16,7 @@ declare function useBreakpoint(): {
|
|
|
16
16
|
* Falls back through smaller breakpoints if the current one isn't defined.
|
|
17
17
|
*/
|
|
18
18
|
declare function resolveResponsiveValue<T>(value: T | Partial<Record<Breakpoint, T>> | undefined, currentBreakpoint: Breakpoint, defaultValue: T): T;
|
|
19
|
+
type AnimationDirection = 'forward' | 'backward' | null;
|
|
19
20
|
interface DrillDownContextValue {
|
|
20
21
|
/** Current submenu behavior mode */
|
|
21
22
|
behavior: SubmenuBehavior;
|
|
@@ -35,6 +36,8 @@ interface DrillDownContextValue {
|
|
|
35
36
|
isRoot: boolean;
|
|
36
37
|
/** The currently active submenu ID (or null if at root) */
|
|
37
38
|
currentId: string | null;
|
|
39
|
+
/** Current animation direction for transitions */
|
|
40
|
+
animationDirection: AnimationDirection;
|
|
38
41
|
}
|
|
39
42
|
declare const DrillDownContext: React.Context<DrillDownContextValue | null>;
|
|
40
43
|
interface DrillDownProviderProps {
|
|
@@ -56,5 +59,5 @@ interface SubContextValue {
|
|
|
56
59
|
declare const SubContext: React.Context<SubContextValue | null>;
|
|
57
60
|
declare function useSubContext(): SubContextValue | null;
|
|
58
61
|
export { DrillDownProvider, DrillDownContext, SubContext, useDrillDown, useDrillDownOptional, useSubContext, useBreakpoint, resolveResponsiveValue, };
|
|
59
|
-
export type { SubmenuBehavior, DrillDownContextValue, SubContextValue };
|
|
62
|
+
export type { SubmenuBehavior, DrillDownContextValue, SubContextValue, AnimationDirection };
|
|
60
63
|
//# sourceMappingURL=dropdown-menu-drill-down.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-drill-down.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/dropdown-menu-drill-down.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,KAAK,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,iBAAS,aAAa,IAAI;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAsDnE;AAED;;;GAGG;AACH,iBAAS,sBAAsB,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EACrD,iBAAiB,EAAE,UAAU,EAC7B,YAAY,EAAE,CAAC,GACd,CAAC,CA6BH;AAMD,UAAU,qBAAqB;IAC7B,oCAAoC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,kEAAkE;IAClE,KAAK,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,mCAAmC;IACnC,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dropdown-menu-drill-down.d.ts","sourceRoot":"","sources":["../../../../src/components/_internal/dropdown-menu-drill-down.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,KAAK,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;GAIG;AACH,iBAAS,aAAa,IAAI;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAsDnE;AAED;;;GAGG;AACH,iBAAS,sBAAsB,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EACrD,iBAAiB,EAAE,UAAU,EAC7B,YAAY,EAAE,CAAC,GACd,CAAC,CA6BH;AAMD,KAAK,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;AAExD,UAAU,qBAAqB;IAC7B,oCAAoC;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,kEAAkE;IAClE,KAAK,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,mCAAmC;IACnC,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,QAAA,MAAM,gBAAgB,6CAA0D,CAAC;AAEjF,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;CAC1D;AAED,iBAAS,iBAAiB,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,sBAAsB,qBA6D/E;AAED,iBAAS,YAAY,0BAMpB;AAED;;GAEG;AACH,iBAAS,oBAAoB,iCAE5B;AAMD,UAAU,eAAe;IACvB,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,UAAU,uCAAoD,CAAC;AAErE,iBAAS,aAAa,2BAErB;AAED,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import*as e from"react";import{_BREAKPOINTS as
|
|
1
|
+
"use client";import*as e from"react";import{_BREAKPOINTS as g}from"../shell.types.js";function D(){const[r,l]=e.useState("initial"),[c,a]=e.useState(!1);return e.useEffect(()=>{if(typeof window>"u")return;const u=Object.entries(g).map(([t,o])=>[t,window.matchMedia(o)]),i=()=>{const t=u.filter(([,d])=>d.matches).map(([d])=>d),o=t[t.length-1]??"initial";l(o),a(!0)};i();const s=[];return u.forEach(([,t])=>{const o=t;typeof o.addEventListener=="function"?(o.addEventListener("change",i),s.push(()=>o.removeEventListener?.("change",i))):typeof o.addListener=="function"&&(o.addListener(i),s.push(()=>o.removeListener?.(i)))}),()=>{s.forEach(t=>{try{t()}catch{}})}},[]),{breakpoint:r,ready:c}}function h(r,l,c){if(r==null)return c;if(typeof r!="object")return r;const a=r;if(a[l]!==void 0)return a[l];const n=["xl","lg","md","sm","xs","initial"],u=n.indexOf(l);for(let i=u+1;i<n.length;i++){const s=n[i];if(a[s]!==void 0)return a[s]}return c}const f=e.createContext(null);function C({children:r,submenuBehavior:l}){const{breakpoint:c,ready:a}=D(),[n,u]=e.useState([]),[i,s]=e.useState(null),t=e.useMemo(()=>h(l,c,"cascade"),[l,c]),o=e.useRef(t);e.useEffect(()=>{o.current==="drill-down"&&t==="cascade"&&(u([]),s(null)),o.current=t},[t]);const d=e.useCallback(p=>{s("forward"),u(y=>[...y,p])},[]),m=e.useCallback(()=>{s("backward"),u(p=>p.slice(0,-1))},[]),v=e.useCallback(()=>{u([]),s(null)},[]),b=e.useCallback(p=>n.length===0?!1:n[n.length-1]===p,[n]),x=e.useMemo(()=>({behavior:t,ready:a,stack:n,push:d,pop:m,reset:v,isActive:b,isRoot:n.length===0,currentId:n.length>0?n[n.length-1]:null,animationDirection:i}),[t,a,n,d,m,v,b,i]);return e.createElement(f.Provider,{value:x},r)}function k(){const r=e.useContext(f);if(!r)throw new Error("useDrillDown must be used within a DropdownMenu.Content");return r}function B(){return e.useContext(f)}const w=e.createContext(null);function R(){return e.useContext(w)}export{f as DrillDownContext,C as DrillDownProvider,w as SubContext,h as resolveResponsiveValue,D as useBreakpoint,k as useDrillDown,B as useDrillDownOptional,R as useSubContext};
|
|
2
2
|
//# sourceMappingURL=dropdown-menu-drill-down.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/_internal/dropdown-menu-drill-down.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport type { Breakpoint, Responsive } from '../../props/prop-def.js';\nimport type { submenuBehaviors } from './base-menu.props.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\n\ntype SubmenuBehavior = (typeof submenuBehaviors)[number];\n\n/**\n * Hook to get the current breakpoint based on window width.\n * Returns 'initial' on the server and during initial hydration.\n * Uses shared breakpoint values from shell.types.js.\n */\nfunction useBreakpoint(): { breakpoint: Breakpoint; ready: boolean } {\n const [currentBp, setCurrentBp] = React.useState<Breakpoint>('initial');\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Use shared breakpoint media queries from shell.types\n const queries = Object.entries(_BREAKPOINTS) as [keyof typeof _BREAKPOINTS, string][];\n const mqls = queries.map(([k, q]) => [k, window.matchMedia(q)] as const);\n\n const compute = () => {\n // Highest matched breakpoint wins\n const matched = mqls.filter(([, m]) => m.matches).map(([k]) => k);\n const next = (matched[matched.length - 1] as Breakpoint | undefined) ?? 'initial';\n setCurrentBp(next);\n setReady(true);\n };\n\n compute();\n\n const cleanups: Array<() => void> = [];\n mqls.forEach(([, m]) => {\n const mm = m as MediaQueryList & {\n addEventListener?: (type: 'change', listener: () => void) => void;\n removeEventListener?: (type: 'change', listener: () => void) => void;\n addListener?: (listener: () => void) => void;\n removeListener?: (listener: () => void) => void;\n };\n if (typeof mm.addEventListener === 'function') {\n mm.addEventListener('change', compute);\n cleanups.push(() => mm.removeEventListener?.('change', compute));\n } else if (typeof mm.addListener === 'function') {\n mm.addListener(compute);\n cleanups.push(() => mm.removeListener?.(compute));\n }\n });\n\n return () => {\n cleanups.forEach((fn) => {\n try {\n fn();\n } catch (e) {\n // MediaQueryList cleanup can fail in edge cases (e.g., already removed)\n // Log in development to aid debugging\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[DropdownMenu] MediaQueryList cleanup warning:', e);\n }\n }\n });\n };\n }, []);\n\n return { breakpoint: currentBp, ready };\n}\n\n/**\n * Resolves a responsive value to its current value based on the breakpoint.\n * Falls back through smaller breakpoints if the current one isn't defined.\n */\nfunction resolveResponsiveValue<T>(\n value: T | Partial<Record<Breakpoint, T>> | undefined,\n currentBreakpoint: Breakpoint,\n defaultValue: T\n): T {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n\n // Non-object values are returned directly\n if (typeof value !== 'object') {\n return value;\n }\n\n const map = value as Partial<Record<Breakpoint, T>>;\n\n // Check if current breakpoint has a value\n if (map[currentBreakpoint] !== undefined) {\n return map[currentBreakpoint] as T;\n }\n\n // Fall back through smaller breakpoints\n const bpOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = bpOrder.indexOf(currentBreakpoint);\n\n for (let i = startIdx + 1; i < bpOrder.length; i++) {\n const bp = bpOrder[i];\n if (map[bp] !== undefined) {\n return map[bp] as T;\n }\n }\n\n return defaultValue;\n}\n\n// ============================================================================\n// DrillDown Context\n// ============================================================================\n\ninterface DrillDownContextValue {\n /** Current submenu behavior mode */\n behavior: SubmenuBehavior;\n /** Whether the breakpoint has been resolved (client-side only) */\n ready: boolean;\n /** Stack of active submenu IDs. Empty means root menu is shown. */\n stack: string[];\n /** Navigate into a submenu */\n push: (id: string) => void;\n /** Navigate back to parent menu */\n pop: () => void;\n /** Reset to root menu */\n reset: () => void;\n /** Check if a specific submenu is the currently active one */\n isActive: (id: string) => boolean;\n /** Check if we're at root level (no submenus open) */\n isRoot: boolean;\n /** The currently active submenu ID (or null if at root) */\n currentId: string | null;\n}\n\nconst DrillDownContext = React.createContext<DrillDownContextValue | null>(null);\n\ninterface DrillDownProviderProps {\n children: React.ReactNode;\n submenuBehavior: Responsive<SubmenuBehavior> | undefined;\n}\n\nfunction DrillDownProvider({ children, submenuBehavior }: DrillDownProviderProps) {\n const { breakpoint, ready } = useBreakpoint();\n const [stack, setStack] = React.useState<string[]>([]);\n\n // Resolve the current behavior based on breakpoint\n const behavior = React.useMemo(\n () => resolveResponsiveValue(submenuBehavior, breakpoint, 'cascade'),\n [submenuBehavior, breakpoint]\n );\n\n // Reset stack when behavior changes from drill-down to cascade\n const prevBehaviorRef = React.useRef(behavior);\n React.useEffect(() => {\n if (prevBehaviorRef.current === 'drill-down' && behavior === 'cascade') {\n setStack([]);\n }\n prevBehaviorRef.current = behavior;\n }, [behavior]);\n\n const push = React.useCallback((id: string) => {\n setStack((prev) => [...prev, id]);\n }, []);\n\n const pop = React.useCallback(() => {\n setStack((prev) => prev.slice(0, -1));\n }, []);\n\n const reset = React.useCallback(() => {\n setStack([]);\n }, []);\n\n const isActive = React.useCallback(\n (id: string) => {\n if (stack.length === 0) return false;\n return stack[stack.length - 1] === id;\n },\n [stack]\n );\n\n const value = React.useMemo(\n (): DrillDownContextValue => ({\n behavior,\n ready,\n stack,\n push,\n pop,\n reset,\n isActive,\n isRoot: stack.length === 0,\n currentId: stack.length > 0 ? stack[stack.length - 1] : null,\n }),\n [behavior, ready, stack, push, pop, reset, isActive]\n );\n\n return <DrillDownContext.Provider value={value}>{children}</DrillDownContext.Provider>;\n}\n\nfunction useDrillDown() {\n const ctx = React.useContext(DrillDownContext);\n if (!ctx) {\n throw new Error('useDrillDown must be used within a DropdownMenu.Content');\n }\n return ctx;\n}\n\n/**\n * Hook to check if drill-down context is available (i.e., we're inside Content)\n */\nfunction useDrillDownOptional() {\n return React.useContext(DrillDownContext);\n}\n\n// ============================================================================\n// Sub Context (for individual submenu instances)\n// ============================================================================\n\ninterface SubContextValue {\n /** Unique ID for this submenu */\n id: string;\n /** Label for the back button */\n label: React.ReactNode;\n}\n\nconst SubContext = React.createContext<SubContextValue | null>(null);\n\nfunction useSubContext() {\n return React.useContext(SubContext);\n}\n\nexport {\n DrillDownProvider,\n DrillDownContext,\n SubContext,\n useDrillDown,\n useDrillDownOptional,\n useSubContext,\n useBreakpoint,\n resolveResponsiveValue,\n};\n\nexport type { SubmenuBehavior, DrillDownContextValue, SubContextValue };\n"],
|
|
5
|
-
"mappings": "aAEA,UAAYA,MAAW,QAGvB,OAAS,gBAAAC,MAAoB,oBAS7B,SAASC,GAA4D,CACnE,KAAM,CAACC,EAAWC,CAAY,EAAIJ,EAAM,SAAqB,SAAS,EAChE,CAACK,EAAOC,CAAQ,EAAIN,EAAM,SAAS,EAAK,EAE9C,OAAAA,EAAM,UAAU,IAAM,CACpB,GAAI,OAAO,OAAW,IAAa,OAInC,MAAMO,EADU,OAAO,QAAQN,CAAY,EACtB,IAAI,CAAC,CAACO,EAAGC,CAAC,IAAM,CAACD,EAAG,OAAO,WAAWC,CAAC,CAAC,CAAU,EAEjEC,EAAU,IAAM,CAEpB,MAAMC,EAAUJ,EAAK,OAAO,CAAC,CAAC,CAAEK,CAAC,IAAMA,EAAE,OAAO,EAAE,IAAI,CAAC,CAACJ,CAAC,IAAMA,CAAC,EAC1DK,EAAQF,EAAQA,EAAQ,OAAS,CAAC,GAAgC,UACxEP,EAAaS,CAAI,EACjBP,EAAS,EAAI,CACf,EAEAI,EAAQ,EAER,MAAMI,EAA8B,CAAC,EACrC,OAAAP,EAAK,QAAQ,CAAC,CAAC,CAAEK,CAAC,IAAM,CACtB,MAAMG,EAAKH,EAMP,OAAOG,EAAG,kBAAqB,YACjCA,EAAG,iBAAiB,SAAUL,CAAO,EACrCI,EAAS,KAAK,IAAMC,EAAG,sBAAsB,SAAUL,CAAO,CAAC,GACtD,OAAOK,EAAG,aAAgB,aACnCA,EAAG,YAAYL,CAAO,EACtBI,EAAS,KAAK,IAAMC,EAAG,iBAAiBL,CAAO,CAAC,EAEpD,CAAC,EAEM,IAAM,CACXI,EAAS,QAASE,GAAO,CACvB,GAAI,CACFA,EAAG,CACL,MAAY,CAMZ,CACF,CAAC,CACH,CACF,EAAG,CAAC,CAAC,EAEE,CAAE,WAAYb,EAAW,MAAAE,CAAM,CACxC,CAMA,SAASY,EACPC,EACAC,EACAC,EACG,CACH,GAA2BF,GAAU,KACnC,OAAOE,EAIT,GAAI,OAAOF,GAAU,SACnB,OAAOA,EAGT,MAAMG,EAAMH,EAGZ,GAAIG,EAAIF,CAAiB,IAAM,OAC7B,OAAOE,EAAIF,CAAiB,EAI9B,MAAMG,EAAwB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,SAAS,EAChEC,EAAWD,EAAQ,QAAQH,CAAiB,EAElD,
|
|
6
|
-
"names": ["React", "_BREAKPOINTS", "useBreakpoint", "currentBp", "setCurrentBp", "ready", "setReady", "mqls", "k", "q", "compute", "matched", "m", "next", "cleanups", "mm", "fn", "resolveResponsiveValue", "value", "currentBreakpoint", "defaultValue", "map", "bpOrder", "startIdx", "
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport type { Breakpoint, Responsive } from '../../props/prop-def.js';\nimport type { submenuBehaviors } from './base-menu.props.js';\nimport { _BREAKPOINTS } from '../shell.types.js';\n\ntype SubmenuBehavior = (typeof submenuBehaviors)[number];\n\n/**\n * Hook to get the current breakpoint based on window width.\n * Returns 'initial' on the server and during initial hydration.\n * Uses shared breakpoint values from shell.types.js.\n */\nfunction useBreakpoint(): { breakpoint: Breakpoint; ready: boolean } {\n const [currentBp, setCurrentBp] = React.useState<Breakpoint>('initial');\n const [ready, setReady] = React.useState(false);\n\n React.useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Use shared breakpoint media queries from shell.types\n const queries = Object.entries(_BREAKPOINTS) as [keyof typeof _BREAKPOINTS, string][];\n const mqls = queries.map(([k, q]) => [k, window.matchMedia(q)] as const);\n\n const compute = () => {\n // Highest matched breakpoint wins\n const matched = mqls.filter(([, m]) => m.matches).map(([k]) => k);\n const next = (matched[matched.length - 1] as Breakpoint | undefined) ?? 'initial';\n setCurrentBp(next);\n setReady(true);\n };\n\n compute();\n\n const cleanups: Array<() => void> = [];\n mqls.forEach(([, m]) => {\n const mm = m as MediaQueryList & {\n addEventListener?: (type: 'change', listener: () => void) => void;\n removeEventListener?: (type: 'change', listener: () => void) => void;\n addListener?: (listener: () => void) => void;\n removeListener?: (listener: () => void) => void;\n };\n if (typeof mm.addEventListener === 'function') {\n mm.addEventListener('change', compute);\n cleanups.push(() => mm.removeEventListener?.('change', compute));\n } else if (typeof mm.addListener === 'function') {\n mm.addListener(compute);\n cleanups.push(() => mm.removeListener?.(compute));\n }\n });\n\n return () => {\n cleanups.forEach((fn) => {\n try {\n fn();\n } catch (e) {\n // MediaQueryList cleanup can fail in edge cases (e.g., already removed)\n // Log in development to aid debugging\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[DropdownMenu] MediaQueryList cleanup warning:', e);\n }\n }\n });\n };\n }, []);\n\n return { breakpoint: currentBp, ready };\n}\n\n/**\n * Resolves a responsive value to its current value based on the breakpoint.\n * Falls back through smaller breakpoints if the current one isn't defined.\n */\nfunction resolveResponsiveValue<T>(\n value: T | Partial<Record<Breakpoint, T>> | undefined,\n currentBreakpoint: Breakpoint,\n defaultValue: T\n): T {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n\n // Non-object values are returned directly\n if (typeof value !== 'object') {\n return value;\n }\n\n const map = value as Partial<Record<Breakpoint, T>>;\n\n // Check if current breakpoint has a value\n if (map[currentBreakpoint] !== undefined) {\n return map[currentBreakpoint] as T;\n }\n\n // Fall back through smaller breakpoints\n const bpOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = bpOrder.indexOf(currentBreakpoint);\n\n for (let i = startIdx + 1; i < bpOrder.length; i++) {\n const bp = bpOrder[i];\n if (map[bp] !== undefined) {\n return map[bp] as T;\n }\n }\n\n return defaultValue;\n}\n\n// ============================================================================\n// DrillDown Context\n// ============================================================================\n\ntype AnimationDirection = 'forward' | 'backward' | null;\n\ninterface DrillDownContextValue {\n /** Current submenu behavior mode */\n behavior: SubmenuBehavior;\n /** Whether the breakpoint has been resolved (client-side only) */\n ready: boolean;\n /** Stack of active submenu IDs. Empty means root menu is shown. */\n stack: string[];\n /** Navigate into a submenu */\n push: (id: string) => void;\n /** Navigate back to parent menu */\n pop: () => void;\n /** Reset to root menu */\n reset: () => void;\n /** Check if a specific submenu is the currently active one */\n isActive: (id: string) => boolean;\n /** Check if we're at root level (no submenus open) */\n isRoot: boolean;\n /** The currently active submenu ID (or null if at root) */\n currentId: string | null;\n /** Current animation direction for transitions */\n animationDirection: AnimationDirection;\n}\n\nconst DrillDownContext = React.createContext<DrillDownContextValue | null>(null);\n\ninterface DrillDownProviderProps {\n children: React.ReactNode;\n submenuBehavior: Responsive<SubmenuBehavior> | undefined;\n}\n\nfunction DrillDownProvider({ children, submenuBehavior }: DrillDownProviderProps) {\n const { breakpoint, ready } = useBreakpoint();\n const [stack, setStack] = React.useState<string[]>([]);\n const [animationDirection, setAnimationDirection] = React.useState<AnimationDirection>(null);\n\n // Resolve the current behavior based on breakpoint\n const behavior = React.useMemo(\n () => resolveResponsiveValue(submenuBehavior, breakpoint, 'cascade'),\n [submenuBehavior, breakpoint]\n );\n\n // Reset stack when behavior changes from drill-down to cascade\n const prevBehaviorRef = React.useRef(behavior);\n React.useEffect(() => {\n if (prevBehaviorRef.current === 'drill-down' && behavior === 'cascade') {\n setStack([]);\n setAnimationDirection(null);\n }\n prevBehaviorRef.current = behavior;\n }, [behavior]);\n\n const push = React.useCallback((id: string) => {\n setAnimationDirection('forward');\n setStack((prev) => [...prev, id]);\n }, []);\n\n const pop = React.useCallback(() => {\n setAnimationDirection('backward');\n setStack((prev) => prev.slice(0, -1));\n }, []);\n\n const reset = React.useCallback(() => {\n setStack([]);\n setAnimationDirection(null);\n }, []);\n\n const isActive = React.useCallback(\n (id: string) => {\n if (stack.length === 0) return false;\n return stack[stack.length - 1] === id;\n },\n [stack]\n );\n\n const value = React.useMemo(\n (): DrillDownContextValue => ({\n behavior,\n ready,\n stack,\n push,\n pop,\n reset,\n isActive,\n isRoot: stack.length === 0,\n currentId: stack.length > 0 ? stack[stack.length - 1] : null,\n animationDirection,\n }),\n [behavior, ready, stack, push, pop, reset, isActive, animationDirection]\n );\n\n return <DrillDownContext.Provider value={value}>{children}</DrillDownContext.Provider>;\n}\n\nfunction useDrillDown() {\n const ctx = React.useContext(DrillDownContext);\n if (!ctx) {\n throw new Error('useDrillDown must be used within a DropdownMenu.Content');\n }\n return ctx;\n}\n\n/**\n * Hook to check if drill-down context is available (i.e., we're inside Content)\n */\nfunction useDrillDownOptional() {\n return React.useContext(DrillDownContext);\n}\n\n// ============================================================================\n// Sub Context (for individual submenu instances)\n// ============================================================================\n\ninterface SubContextValue {\n /** Unique ID for this submenu */\n id: string;\n /** Label for the back button */\n label: React.ReactNode;\n}\n\nconst SubContext = React.createContext<SubContextValue | null>(null);\n\nfunction useSubContext() {\n return React.useContext(SubContext);\n}\n\nexport {\n DrillDownProvider,\n DrillDownContext,\n SubContext,\n useDrillDown,\n useDrillDownOptional,\n useSubContext,\n useBreakpoint,\n resolveResponsiveValue,\n};\n\nexport type { SubmenuBehavior, DrillDownContextValue, SubContextValue, AnimationDirection };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "_BREAKPOINTS", "useBreakpoint", "currentBp", "setCurrentBp", "ready", "setReady", "mqls", "k", "q", "compute", "matched", "m", "next", "cleanups", "mm", "fn", "resolveResponsiveValue", "value", "currentBreakpoint", "defaultValue", "map", "bpOrder", "startIdx", "bp", "DrillDownContext", "DrillDownProvider", "children", "submenuBehavior", "breakpoint", "stack", "setStack", "animationDirection", "setAnimationDirection", "behavior", "prevBehaviorRef", "push", "id", "prev", "pop", "reset", "isActive", "useDrillDown", "ctx", "useDrillDownOptional", "SubContext", "useSubContext"]
|
|
7
7
|
}
|