@mich8060/unified-design-system 0.2.35 → 0.2.37

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.
Files changed (84) hide show
  1. package/dist/ai/discovery.json +7 -1
  2. package/dist/ai/examples/admin-users-table-uds.jsonl +5 -0
  3. package/dist/ai/examples/calendar-events-layout-uds.jsonl +5 -0
  4. package/dist/ai/examples/dashboard-statistics-uds.jsonl +5 -0
  5. package/dist/ai/examples/dataset.index.json +42 -0
  6. package/dist/ai/examples/kanban-board-uds.jsonl +5 -0
  7. package/dist/ai/examples/settings-preferences-uds.jsonl +5 -0
  8. package/dist/ai/examples/signin-flow-uds.jsonl +9 -0
  9. package/dist/ai/examples/training.examples.cjs +1 -1
  10. package/dist/ai/examples/training.examples.js +1 -1
  11. package/dist/ai/examples/uds-governed-training.jsonl +5 -0
  12. package/dist/ai/figma-make.contract.json +11 -1
  13. package/dist/ai/figma-make.md +53 -7
  14. package/dist/ai/layout/architecture.json +39 -0
  15. package/dist/ai/manifest/composition.manifest.cjs +1 -1
  16. package/dist/ai/manifest/composition.manifest.js +1 -1
  17. package/dist/ai/manifest/intent-mappings.manifest.cjs +1 -1
  18. package/dist/ai/manifest/intent-mappings.manifest.js +1 -1
  19. package/dist/ai/manifest/patterns.manifest.cjs +1 -1
  20. package/dist/ai/manifest/patterns.manifest.js +1 -1
  21. package/dist/ai/manifest.json +538 -66
  22. package/dist/ai/navigation/brand-menus.json +7 -0
  23. package/dist/ai/policies/policy.engine.cjs +1 -1
  24. package/dist/ai/policies/policy.engine.js +1 -1
  25. package/dist/ai/policies/rules/pattern-structure.rules.cjs +1 -0
  26. package/dist/ai/policies/rules/pattern-structure.rules.js +1 -0
  27. package/dist/ai/policies/rules/props.rules.cjs +1 -1
  28. package/dist/ai/policies/rules/props.rules.js +1 -1
  29. package/dist/ai/prompts/figma-make.prompt.md +7 -0
  30. package/dist/ai/prompts/system.prompt.md +4 -1
  31. package/dist/ai/schemas/ai-output.schema.json +1 -0
  32. package/dist/ai/templates/layouts.json +5 -0
  33. package/dist/ai/tokens/catalog.json +72 -0
  34. package/dist/ai/validation/validateAIOutput.cjs +1 -1
  35. package/dist/ai/validation/validateAIOutput.js +1 -1
  36. package/dist/app-shell/AppShell.d.ts +4 -0
  37. package/dist/components/ActionMenu/ActionMenu.cjs +1 -1
  38. package/dist/components/ActionMenu/ActionMenu.js +1 -1
  39. package/dist/components/Dropdown/Dropdown.cjs +1 -1
  40. package/dist/components/Dropdown/Dropdown.js +1 -1
  41. package/dist/components/Layout/Layout.cjs +1 -0
  42. package/dist/components/Layout/Layout.js +1 -0
  43. package/dist/components/Link/Link.cjs +1 -0
  44. package/dist/components/Link/Link.js +1 -0
  45. package/dist/components/Menu/Menu.cjs +1 -1
  46. package/dist/components/Menu/Menu.js +1 -1
  47. package/dist/components/ProvidersCard/ProvidersCard.cjs +1 -1
  48. package/dist/components/ProvidersCard/ProvidersCard.js +1 -1
  49. package/dist/components/SectionHeader/SectionHeader.cjs +1 -1
  50. package/dist/components/SectionHeader/SectionHeader.js +1 -1
  51. package/dist/design-system/ai/examples/training.examples.d.ts +1 -0
  52. package/dist/design-system/ai/manifest/intent-mappings.manifest.d.ts +1 -1
  53. package/dist/design-system/ai/policies/policy.engine.d.ts +3 -1
  54. package/dist/design-system/ai/policies/policy.types.d.ts +1 -0
  55. package/dist/design-system/ai/policies/rules/pattern-structure.rules.d.ts +2 -0
  56. package/dist/design-system/components/ActionMenu/ActionMenu.d.ts +1 -1
  57. package/dist/design-system/components/ActionMenu/ActionMenu.types.d.ts +3 -0
  58. package/dist/design-system/components/Flex/index.d.ts +2 -2
  59. package/dist/design-system/components/Layout/Layout.d.ts +16 -0
  60. package/dist/design-system/components/{Flex/Flex.types.d.ts → Layout/Layout.types.d.ts} +2 -6
  61. package/dist/design-system/components/Layout/index.d.ts +3 -0
  62. package/dist/design-system/components/Link/Link.d.ts +4 -0
  63. package/dist/design-system/components/Link/Link.types.d.ts +8 -0
  64. package/dist/design-system/components/Link/index.d.ts +4 -0
  65. package/dist/design-system/constants.d.ts +1 -1
  66. package/dist/design-system/figma-make/index.d.ts +1 -1
  67. package/dist/design-system/generated/component-api.d.ts +157 -16
  68. package/dist/design-system/index.d.ts +2 -1
  69. package/dist/design-system/version.d.ts +1 -1
  70. package/dist/figma-make/index.cjs +1 -1
  71. package/dist/figma-make/index.js +1 -1
  72. package/dist/generated/component-api.cjs +1 -1
  73. package/dist/generated/component-api.js +1 -1
  74. package/dist/index.cjs +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/src/app-shell/AppShell.cjs +1 -1
  77. package/dist/src/app-shell/AppShell.js +1 -1
  78. package/dist/style.css +1 -1
  79. package/dist/version.cjs +1 -1
  80. package/dist/version.js +1 -1
  81. package/package.json +15 -2
  82. package/dist/components/Flex/Flex.cjs +0 -1
  83. package/dist/components/Flex/Flex.js +0 -1
  84. package/dist/design-system/components/Flex/Flex.d.ts +0 -10
@@ -2,6 +2,13 @@
2
2
  "contractName": "uds.ai.brand-menus",
3
3
  "schemaVersion": "1.0.0",
4
4
  "brands": {
5
+ "default": [
6
+ { "label": "Dashboard", "icon": "Layout" },
7
+ { "label": "Requests", "icon": "Briefcase" },
8
+ { "label": "Providers", "icon": "Users" },
9
+ { "label": "Calendar", "icon": "CalendarBlank" },
10
+ { "label": "Reporting", "icon": "ChartBar" }
11
+ ],
5
12
  "comphealth": [
6
13
  { "label": "Dashboard", "icon": "Layout" },
7
14
  { "label": "Schedule", "icon": "CalendarBlank" },
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../manifest/governance.manifest.cjs"),o=require("./rules/composition.rules.cjs"),c=require("./rules/action.rules.cjs"),l=require("./rules/spacing.rules.cjs"),s=require("./rules/accessibility.rules.cjs"),u=require("./rules/props.rules.cjs"),t=require("./rules/token-variable.rules.cjs"),a=require("./rules/tailwind.rules.cjs"),f=[o.enforceCompositionRule,c.enforcePrimaryActionLimitRule,l.enforceSpacingTokenRule,t.enforceTokenVariableRule,a.enforceTailwindDisallowRule,s.enforceAccessibilityRule,u.enforceCanonicalPropsRule];function p(e,r=i.UDSGovernance){return f.flatMap(n=>n({tree:e,governanceConfig:r}))}exports.runPolicyEngine=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../manifest/governance.manifest.cjs"),t=require("./rules/composition.rules.cjs"),u=require("./rules/action.rules.cjs"),o=require("./rules/spacing.rules.cjs"),l=require("./rules/accessibility.rules.cjs"),s=require("./rules/props.rules.cjs"),a=require("./rules/token-variable.rules.cjs"),f=require("./rules/tailwind.rules.cjs"),_=require("./rules/pattern-structure.rules.cjs"),q=[t.enforceCompositionRule,u.enforcePrimaryActionLimitRule,o.enforceSpacingTokenRule,a.enforceTokenVariableRule,f.enforceTailwindDisallowRule,l.enforceAccessibilityRule,s.enforceCanonicalPropsRule,_.enforcePatternStructureRule];function R(r,n=c.UDSGovernance,e){return q.flatMap(i=>i({tree:r,governanceConfig:n,patternId:e==null?void 0:e.patternId}))}exports.runPolicyEngine=R;
@@ -1 +1 @@
1
- import{UDSGovernance as i}from"../manifest/governance.manifest.js";import{enforceCompositionRule as n}from"./rules/composition.rules.js";import{enforcePrimaryActionLimitRule as m}from"./rules/action.rules.js";import{enforceSpacingTokenRule as f}from"./rules/spacing.rules.js";import{enforceAccessibilityRule as t}from"./rules/accessibility.rules.js";import{enforceCanonicalPropsRule as c}from"./rules/props.rules.js";import{enforceTokenVariableRule as l}from"./rules/token-variable.rules.js";import{enforceTailwindDisallowRule as p}from"./rules/tailwind.rules.js";const a=[n,m,f,l,p,t,c];function T(o,r=i){return a.flatMap(e=>e({tree:o,governanceConfig:r}))}export{T as runPolicyEngine};
1
+ import{UDSGovernance as i}from"../manifest/governance.manifest.js";import{enforceCompositionRule as t}from"./rules/composition.rules.js";import{enforcePrimaryActionLimitRule as m}from"./rules/action.rules.js";import{enforceSpacingTokenRule as f}from"./rules/spacing.rules.js";import{enforceAccessibilityRule as c}from"./rules/accessibility.rules.js";import{enforceCanonicalPropsRule as l}from"./rules/props.rules.js";import{enforceTokenVariableRule as a}from"./rules/token-variable.rules.js";import{enforceTailwindDisallowRule as u}from"./rules/tailwind.rules.js";import{enforcePatternStructureRule as p}from"./rules/pattern-structure.rules.js";const R=[t,m,f,a,u,c,l,p];function g(e,o=i,r){return R.flatMap(n=>n({tree:e,governanceConfig:o,patternId:r==null?void 0:r.patternId}))}export{g as runPolicyEngine};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../manifest/patterns.manifest.cjs");function u(n){const t=[n.type];for(const r of n.children??[])t.push(...u(r));return t}const d=({tree:n,patternId:t})=>{if(!t)return[];const r=f.PatternRegistry[t];if(!r)return[{severity:"error",code:"RULE_UNKNOWN_PATTERN_ID",message:`Pattern "${t}" is not defined in PatternRegistry.`,path:"audit.patternId"}];const o=[],s=u(n),a=new Set(s);for(const e of r.requiredComponents)a.has(e)||o.push({severity:"error",code:"RULE_PATTERN_REQUIRED_COMPONENT_MISSING",message:`Pattern "${t}" requires component "${e}".`,path:"root",component:e});const p=r.structure.map(e=>e.type);let c=0;for(const e of p){const i=s.indexOf(e,c);if(i!==-1){c=i+1;continue}o.push({severity:"error",code:"RULE_PATTERN_STRUCTURE_MISMATCH",message:`Pattern "${t}" expects "${e}" in canonical structure order.`,path:"root",component:e});break}return o};exports.enforcePatternStructureRule=d;
@@ -0,0 +1 @@
1
+ import{PatternRegistry as f}from"../../manifest/patterns.manifest.js";function u(n){const t=[n.type];for(const r of n.children??[])t.push(...u(r));return t}const d=({tree:n,patternId:t})=>{if(!t)return[];const r=f[t];if(!r)return[{severity:"error",code:"RULE_UNKNOWN_PATTERN_ID",message:`Pattern "${t}" is not defined in PatternRegistry.`,path:"audit.patternId"}];const o=[],s=u(n),p=new Set(s);for(const e of r.requiredComponents)p.has(e)||o.push({severity:"error",code:"RULE_PATTERN_REQUIRED_COMPONENT_MISSING",message:`Pattern "${t}" requires component "${e}".`,path:"root",component:e});const a=r.structure.map(e=>e.type);let c=0;for(const e of a){const i=s.indexOf(e,c);if(i!==-1){c=i+1;continue}o.push({severity:"error",code:"RULE_PATTERN_STRUCTURE_MISMATCH",message:`Pattern "${t}" expects "${e}" in canonical structure order.`,path:"root",component:e});break}return o};export{d as enforcePatternStructureRule};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("../../manifest/prop-aliases.manifest.cjs"),g=a=>({...l.PropAliasRules.global??{},...l.PropAliasRules.byComponent[a]??{}}),y={Menu:{items:{replacement:"navItems",reason:"Menu uses navItems contract, not Ant-style items."},selectedKeys:{reason:"Menu selection is route-driven via nav item paths and app state."},mode:{replacement:"activeMode",reason:"Menu mode is governed by activeMode light/dark values."}},Flex:{vertical:{replacement:"direction",reason:"Flex direction is governed by row/column direction prop."},justify:{replacement:"justifyContent",reason:"Flex alignment uses justifyContent canonical prop."},align:{replacement:"alignItems",reason:"Flex alignment uses alignItems canonical prop."}},Text:{type:{replacement:"variant",reason:"Text semantics use UDS typography variant tokens."},strong:{replacement:"weight",reason:"Text weight should be controlled by weight prop."}},Button:{type:{replacement:"appearance",reason:"Button style is governed by appearance variants."}},Badge:{status:{replacement:"variant",reason:"Badge uses variant semantic color names, not status."},color:{replacement:"variant",reason:"Badge color intent is governed through variant values."}},Statistics:{title:{replacement:"label",reason:"Statistics title maps to label in UDS contract."},suffix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},prefix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},valueStyle:{reason:"Styling is token-governed; avoid inline styling props."}}},d=({tree:a})=>{const o=[],r=(e,s)=>{const p=g(e.type),c=y[e.type]??{},u=e.props??{};for(const t of Object.keys(u)){const n=c[t];if(n){const m=n.replacement?` Use "${n.replacement}" instead.`:"";o.push({severity:"error",code:"RULE_FORBIDDEN_PROP",message:`Prop "${t}" is disallowed on ${e.type}. ${n.reason}${m}`,path:`${s}.props.${t}`,component:e.type})}const i=p[t];i&&o.push({severity:"error",code:"RULE_AMBIGUOUS_PROP_ALIAS",message:`Prop "${t}" is ambiguous for ${e.type}. Use canonical prop "${i}".`,path:`${s}.props.${t}`,component:e.type})}(e.children??[]).forEach((t,n)=>r(t,`${s}.children[${n}]`))};return r(a,"root"),o};exports.enforceCanonicalPropsRule=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("../../manifest/prop-aliases.manifest.cjs"),g=a=>({...l.PropAliasRules.global??{},...l.PropAliasRules.byComponent[a]??{}}),y={Menu:{items:{replacement:"navItems",reason:"Menu uses navItems contract, not Ant-style items."},selectedKeys:{reason:"Menu selection is route-driven via nav item paths and app state."},mode:{replacement:"activeMode",reason:"Menu mode is governed by activeMode light/dark values."}},Flex:{vertical:{replacement:"direction",reason:"Flex direction is governed by row/column direction prop."},justify:{replacement:"justifyContent",reason:"Flex alignment uses justifyContent canonical prop."},align:{replacement:"alignItems",reason:"Flex alignment uses alignItems canonical prop."}},Layout:{vertical:{replacement:"direction",reason:"Layout direction is governed by row/column direction prop."},justify:{replacement:"justifyContent",reason:"Layout alignment uses justifyContent canonical prop."},align:{replacement:"alignItems",reason:"Layout alignment uses alignItems canonical prop."}},Text:{type:{replacement:"variant",reason:"Text semantics use UDS typography variant tokens."},strong:{replacement:"weight",reason:"Text weight should be controlled by weight prop."}},Button:{type:{replacement:"appearance",reason:"Button style is governed by appearance variants."}},Badge:{status:{replacement:"variant",reason:"Badge uses variant semantic color names, not status."},color:{replacement:"variant",reason:"Badge color intent is governed through variant values."}},Statistics:{title:{replacement:"label",reason:"Statistics title maps to label in UDS contract."},suffix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},prefix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},valueStyle:{reason:"Styling is token-governed; avoid inline styling props."}}},d=({tree:a})=>{const o=[],r=(e,s)=>{const p=g(e.type),c=y[e.type]??{},u=e.props??{};for(const t of Object.keys(u)){const n=c[t];if(n){const m=n.replacement?` Use "${n.replacement}" instead.`:"";o.push({severity:"error",code:"RULE_FORBIDDEN_PROP",message:`Prop "${t}" is disallowed on ${e.type}. ${n.reason}${m}`,path:`${s}.props.${t}`,component:e.type})}const i=p[t];i&&o.push({severity:"error",code:"RULE_AMBIGUOUS_PROP_ALIAS",message:`Prop "${t}" is ambiguous for ${e.type}. Use canonical prop "${i}".`,path:`${s}.props.${t}`,component:e.type})}(e.children??[]).forEach((t,n)=>r(t,`${s}.children[${n}]`))};return r(a,"root"),o};exports.enforceCanonicalPropsRule=d;
@@ -1 +1 @@
1
- import{PropAliasRules as p}from"../../manifest/prop-aliases.manifest.js";const g=a=>({...p.global??{},...p.byComponent[a]??{}}),y={Menu:{items:{replacement:"navItems",reason:"Menu uses navItems contract, not Ant-style items."},selectedKeys:{reason:"Menu selection is route-driven via nav item paths and app state."},mode:{replacement:"activeMode",reason:"Menu mode is governed by activeMode light/dark values."}},Flex:{vertical:{replacement:"direction",reason:"Flex direction is governed by row/column direction prop."},justify:{replacement:"justifyContent",reason:"Flex alignment uses justifyContent canonical prop."},align:{replacement:"alignItems",reason:"Flex alignment uses alignItems canonical prop."}},Text:{type:{replacement:"variant",reason:"Text semantics use UDS typography variant tokens."},strong:{replacement:"weight",reason:"Text weight should be controlled by weight prop."}},Button:{type:{replacement:"appearance",reason:"Button style is governed by appearance variants."}},Badge:{status:{replacement:"variant",reason:"Badge uses variant semantic color names, not status."},color:{replacement:"variant",reason:"Badge color intent is governed through variant values."}},Statistics:{title:{replacement:"label",reason:"Statistics title maps to label in UDS contract."},suffix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},prefix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},valueStyle:{reason:"Styling is token-governed; avoid inline styling props."}}},v=({tree:a})=>{const o=[],r=(e,s)=>{const l=g(e.type),c=y[e.type]??{},m=e.props??{};for(const t of Object.keys(m)){const n=c[t];if(n){const u=n.replacement?` Use "${n.replacement}" instead.`:"";o.push({severity:"error",code:"RULE_FORBIDDEN_PROP",message:`Prop "${t}" is disallowed on ${e.type}. ${n.reason}${u}`,path:`${s}.props.${t}`,component:e.type})}const i=l[t];i&&o.push({severity:"error",code:"RULE_AMBIGUOUS_PROP_ALIAS",message:`Prop "${t}" is ambiguous for ${e.type}. Use canonical prop "${i}".`,path:`${s}.props.${t}`,component:e.type})}(e.children??[]).forEach((t,n)=>r(t,`${s}.children[${n}]`))};return r(a,"root"),o};export{v as enforceCanonicalPropsRule};
1
+ import{PropAliasRules as p}from"../../manifest/prop-aliases.manifest.js";const g=a=>({...p.global??{},...p.byComponent[a]??{}}),y={Menu:{items:{replacement:"navItems",reason:"Menu uses navItems contract, not Ant-style items."},selectedKeys:{reason:"Menu selection is route-driven via nav item paths and app state."},mode:{replacement:"activeMode",reason:"Menu mode is governed by activeMode light/dark values."}},Flex:{vertical:{replacement:"direction",reason:"Flex direction is governed by row/column direction prop."},justify:{replacement:"justifyContent",reason:"Flex alignment uses justifyContent canonical prop."},align:{replacement:"alignItems",reason:"Flex alignment uses alignItems canonical prop."}},Layout:{vertical:{replacement:"direction",reason:"Layout direction is governed by row/column direction prop."},justify:{replacement:"justifyContent",reason:"Layout alignment uses justifyContent canonical prop."},align:{replacement:"alignItems",reason:"Layout alignment uses alignItems canonical prop."}},Text:{type:{replacement:"variant",reason:"Text semantics use UDS typography variant tokens."},strong:{replacement:"weight",reason:"Text weight should be controlled by weight prop."}},Button:{type:{replacement:"appearance",reason:"Button style is governed by appearance variants."}},Badge:{status:{replacement:"variant",reason:"Badge uses variant semantic color names, not status."},color:{replacement:"variant",reason:"Badge color intent is governed through variant values."}},Statistics:{title:{replacement:"label",reason:"Statistics title maps to label in UDS contract."},suffix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},prefix:{replacement:"helperText",reason:"Use helperText/statusLabel/changeText fields for supporting copy."},valueStyle:{reason:"Styling is token-governed; avoid inline styling props."}}},v=({tree:a})=>{const o=[],r=(e,s)=>{const l=g(e.type),c=y[e.type]??{},m=e.props??{};for(const t of Object.keys(m)){const n=c[t];if(n){const u=n.replacement?` Use "${n.replacement}" instead.`:"";o.push({severity:"error",code:"RULE_FORBIDDEN_PROP",message:`Prop "${t}" is disallowed on ${e.type}. ${n.reason}${u}`,path:`${s}.props.${t}`,component:e.type})}const i=l[t];i&&o.push({severity:"error",code:"RULE_AMBIGUOUS_PROP_ALIAS",message:`Prop "${t}" is ambiguous for ${e.type}. Use canonical prop "${i}".`,path:`${s}.props.${t}`,component:e.type})}(e.children??[]).forEach((t,n)=>r(t,`${s}.children[${n}]`))};return r(a,"root"),o};export{v as enforceCanonicalPropsRule};
@@ -13,10 +13,16 @@ Hard requirements:
13
13
  - Use canonical prop names only (reject Ant-style aliases like `Menu.items`, `Flex.vertical`, `Button.type`).
14
14
  - Default `Container` to `appearance=\"transparent\"` and `padding=\"large\"` (24px) unless a different requirement is explicit.
15
15
  - Default `Menu.showSearch` to `false` unless search is explicitly required.
16
+ - In `Menu` account actions, default `accountMenuItems` to:
17
+ 1. `Contact` with icon `Phone`
18
+ 2. `Feedback` with icon `ChatCenteredText`
19
+ 3. `Sign out` with icon `SignOut` (`destructive: true`)
16
20
  - Return deterministic JSON only.
17
21
 
18
22
  Preferred flow:
19
23
  1. Start from `@mich8060/unified-design-system/ai/templates`.
24
+ 1.0 Load `@mich8060/unified-design-system/ai/token-catalog` and `@mich8060/unified-design-system/ai/layout-architecture`.
25
+ 1.1 Copy the selected template `patternId` into `audit.patternId` in the output.
20
26
  2. Resolve remaining intent decisions using `@mich8060/unified-design-system/ai/manifest.json` -> `intentComponentMappings`.
21
27
  3. Load brand menu definitions from `@mich8060/unified-design-system/ai/navigation`.
22
28
  4. Fill template slots.
@@ -58,6 +64,7 @@ Starter scaffold:
58
64
  },
59
65
  "audit": {
60
66
  "source": "figma-make",
67
+ "patternId": "AuthForm",
61
68
  "notes": "UDS-only generation"
62
69
  }
63
70
  }
@@ -6,6 +6,8 @@ Contract discovery order:
6
6
  - `@mich8060/unified-design-system/ai/schema`
7
7
  - `@mich8060/unified-design-system/ai/icons`
8
8
  - `@mich8060/unified-design-system/ai/icons.json`
9
+ - `@mich8060/unified-design-system/ai/token-catalog`
10
+ - `@mich8060/unified-design-system/ai/layout-architecture`
9
11
  - `@mich8060/unified-design-system/ai/navigation`
10
12
  - `@mich8060/unified-design-system/ai/templates`
11
13
 
@@ -15,6 +17,7 @@ Hard constraints:
15
17
  - Use spacing tokens from `ai/manifest/layout.manifest.ts`.
16
18
  - Use semantic token intents from `ai/manifest/tokens.intent.manifest.ts`.
17
19
  - Resolve UI intents using `ai/manifest/intent-mappings.manifest.ts` before freeform composition.
20
+ - Select a template from `@mich8060/unified-design-system/ai/templates` first and carry its `patternId` into `audit.patternId`.
18
21
  - Respect governance limits from `ai/manifest/governance.manifest.ts`.
19
22
  - Load icon options from `@mich8060/unified-design-system/ai/icons` (or `@mich8060/unified-design-system/ai/icons.json`) before choosing icons.
20
23
  - Use icon names from the icon catalog (`ai/icons/catalog.json`) when adding icons.
@@ -32,5 +35,5 @@ Output contract:
32
35
  "governanceVersion": "...",
33
36
  "policyVersion": "...",
34
37
  "tree": {...},
35
- "audit": {...}
38
+ "audit": { "patternId": "..." }
36
39
  }
@@ -47,6 +47,7 @@
47
47
  "udsVersion": { "type": "string" },
48
48
  "manifestVersion": { "type": "string" },
49
49
  "policyVersion": { "type": "string" },
50
+ "patternId": { "type": "string" },
50
51
  "componentsUsed": { "type": "array", "items": { "type": "string" } },
51
52
  "tokensUsed": { "type": "array", "items": { "type": "string" } },
52
53
  "violationsCount": { "type": "number", "minimum": 0 },
@@ -4,6 +4,7 @@
4
4
  "templates": [
5
5
  {
6
6
  "id": "auth-form-card",
7
+ "patternId": "AuthForm",
7
8
  "intent": "Authentication form with one primary action and optional secondary action.",
8
9
  "tags": [
9
10
  "form",
@@ -97,6 +98,7 @@
97
98
  },
98
99
  {
99
100
  "id": "dashboard-table-summary",
101
+ "patternId": "DataTablePage",
100
102
  "intent": "Summary header with data table and row actions.",
101
103
  "tags": [
102
104
  "dashboard",
@@ -171,6 +173,7 @@
171
173
  },
172
174
  {
173
175
  "id": "settings-two-column",
176
+ "patternId": "SettingsWorkspace",
174
177
  "intent": "Two-column settings page with form area and contextual summary card.",
175
178
  "tags": [
176
179
  "settings",
@@ -267,6 +270,7 @@
267
270
  },
268
271
  {
269
272
  "id": "modal-confirmation",
273
+ "patternId": "ModalConfirmation",
270
274
  "intent": "Confirmation flow in modal with primary and dismissive actions.",
271
275
  "tags": [
272
276
  "modal",
@@ -328,6 +332,7 @@
328
332
  },
329
333
  {
330
334
  "id": "wizard-steps-form",
335
+ "patternId": "WizardChecklist",
331
336
  "intent": "Multi-step form shell with progress indicator and staged actions.",
332
337
  "tags": [
333
338
  "wizard",
@@ -0,0 +1,72 @@
1
+ {
2
+ "contractName": "uds.ai.token-catalog",
3
+ "schemaVersion": "1.0.0",
4
+ "groups": {
5
+ "surface": [
6
+ "--uds-color-neutral-0",
7
+ "--uds-color-neutral-50",
8
+ "--uds-color-neutral-100",
9
+ "--uds-surface-primary",
10
+ "--uds-surface-secondary",
11
+ "--uds-surface-brand-primary"
12
+ ],
13
+ "text": [
14
+ "--uds-color-neutral-900",
15
+ "--uds-color-neutral-700",
16
+ "--uds-color-neutral-600",
17
+ "--uds-text-primary",
18
+ "--uds-text-secondary",
19
+ "--uds-text-on-brand"
20
+ ],
21
+ "border": [
22
+ "--uds-color-neutral-200",
23
+ "--uds-color-neutral-400",
24
+ "--uds-color-blue-600",
25
+ "--uds-color-red-600",
26
+ "--uds-border-primary",
27
+ "--uds-border-secondary"
28
+ ],
29
+ "action": [
30
+ "--uds-color-blue-600",
31
+ "--uds-color-blue-700",
32
+ "--uds-color-red-600",
33
+ "--uds-color-neutral-200"
34
+ ],
35
+ "state": [
36
+ "--uds-color-green-600",
37
+ "--uds-color-amber-600",
38
+ "--uds-color-red-600",
39
+ "--uds-color-blue-600"
40
+ ],
41
+ "spacing": [
42
+ "--uds-spacing-0",
43
+ "--uds-spacing-2",
44
+ "--uds-spacing-4",
45
+ "--uds-spacing-6",
46
+ "--uds-spacing-8",
47
+ "--uds-spacing-10",
48
+ "--uds-spacing-12",
49
+ "--uds-spacing-14",
50
+ "--uds-spacing-16",
51
+ "--uds-spacing-18",
52
+ "--uds-spacing-24",
53
+ "--uds-spacing-32",
54
+ "--uds-spacing-36",
55
+ "--uds-spacing-40",
56
+ "--uds-spacing-48",
57
+ "--uds-spacing-64",
58
+ "--uds-spacing-80"
59
+ ],
60
+ "radius": [
61
+ "--uds-radius-4",
62
+ "--uds-radius-8",
63
+ "--uds-radius-12",
64
+ "--uds-radius-pill"
65
+ ]
66
+ },
67
+ "rules": [
68
+ "Never define custom CSS variables in generated output.",
69
+ "Only use --uds-* variables or hardcoded literals.",
70
+ "Prefer semantic aliases (for example --uds-text-primary) in UI-facing guidance."
71
+ ]
72
+ }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../manifest/governance.manifest.cjs"),k=require("../policies/policy.engine.cjs"),v=require("./driftDetection.cjs"),d=require("./deterministicFeedback.cjs"),S=require("./schemaValidation.cjs"),b=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),g=e=>typeof e=="string"&&e.trim().length>0?e:void 0;function A(e,t){const s=b(e)?e:null;if(!s)return[];const r=[{key:"manifestVersion",expected:t.manifestVersion},{key:"governanceVersion",expected:t.governanceVersion},{key:"policyVersion",expected:t.policyVersion}],n=[];for(const i of r){const o=g(s[i.key]);o&&o!==i.expected&&n.push({severity:"error",code:`RULE_VERSION_MISMATCH_${i.key.toUpperCase()}`,message:`${i.key} "${o}" does not match expected "${i.expected}".`,path:i.key})}return n}function D(e,t=p.UDSGovernance){const s=S.validateSchema(e),r=new Date().toISOString(),n=p.getVersionLineage(),i=[...s.violations],o=[];if(i.push(...A(e,t)),s.tree){const f=k.runPolicyEngine(s.tree,t),h=v.detectDrift(s.tree);for(const a of[...f,...h])a.severity==="error"?i.push(a):o.push(a)}const c=d.sortAndDedupeViolations(i),y=d.sortAndDedupeViolations(o),u=t.enforcement.strictMode,l=c.length>0,V=u&&l?"fail":"pass",m=l?d.buildDeterministicFeedback(c):void 0;return{status:V,violations:c,warnings:y,deterministicFeedback:m,governanceVersionUsed:t.governanceVersion,manifestVersionUsed:t.manifestVersion,policyVersionUsed:t.policyVersion,timestamp:r,versionLineage:n}}exports.validateAIOutput=D;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("../manifest/governance.manifest.cjs"),v=require("../policies/policy.engine.cjs"),S=require("./driftDetection.cjs"),l=require("./deterministicFeedback.cjs"),b=require("./schemaValidation.cjs"),c=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),p=t=>typeof t=="string"&&t.trim().length>0?t:void 0;function g(t){const n=c(t)?t:null;if(!n)return;const i=c(n.audit)?n.audit:null,r=p(i==null?void 0:i.patternId);if(r)return r;const o=c(n.tree)?n.tree:null,e=c(o==null?void 0:o.props)?o==null?void 0:o.props:null;return p((e==null?void 0:e.patternId)??(e==null?void 0:e.pattern)??(e==null?void 0:e.layoutPattern))}function A(t,n){const i=c(t)?t:null;if(!i)return[];const r=[{key:"manifestVersion",expected:n.manifestVersion},{key:"governanceVersion",expected:n.governanceVersion},{key:"policyVersion",expected:n.policyVersion}],o=[];for(const e of r){const s=p(i[e.key]);s&&s!==e.expected&&o.push({severity:"error",code:`RULE_VERSION_MISMATCH_${e.key.toUpperCase()}`,message:`${e.key} "${s}" does not match expected "${e.expected}".`,path:e.key})}return o}function D(t,n=y.UDSGovernance){const i=b.validateSchema(t),r=new Date().toISOString(),o=y.getVersionLineage(),e=[...i.violations],s=[];if(e.push(...A(t,n)),i.tree){const k=v.runPolicyEngine(i.tree,n,{patternId:g(t)}),I=S.detectDrift(i.tree);for(const d of[...k,...I])d.severity==="error"?e.push(d):s.push(d)}const a=l.sortAndDedupeViolations(e),V=l.sortAndDedupeViolations(s),m=n.enforcement.strictMode,u=a.length>0,f=m&&u?"fail":"pass",h=u?l.buildDeterministicFeedback(a):void 0;return{status:f,violations:a,warnings:V,deterministicFeedback:h,governanceVersionUsed:n.governanceVersion,manifestVersionUsed:n.manifestVersion,policyVersionUsed:n.policyVersion,timestamp:r,versionLineage:o}}exports.validateAIOutput=D;
@@ -1 +1 @@
1
- import{UDSGovernance as k,getVersionLineage as u}from"../manifest/governance.manifest.js";import{runPolicyEngine as x}from"../policies/policy.engine.js";import{detectDrift as S}from"./driftDetection.js";import{sortAndDedupeViolations as d,buildDeterministicFeedback as v}from"./deterministicFeedback.js";import{validateSchema as U}from"./schemaValidation.js";const A=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),D=e=>typeof e=="string"&&e.trim().length>0?e:void 0;function b(e,t){const i=A(e)?e:null;if(!i)return[];const r=[{key:"manifestVersion",expected:t.manifestVersion},{key:"governanceVersion",expected:t.governanceVersion},{key:"policyVersion",expected:t.policyVersion}],n=[];for(const o of r){const s=D(i[o.key]);s&&s!==o.expected&&n.push({severity:"error",code:`RULE_VERSION_MISMATCH_${o.key.toUpperCase()}`,message:`${o.key} "${s}" does not match expected "${o.expected}".`,path:o.key})}return n}function L(e,t=k){const i=U(e),r=new Date().toISOString(),n=u(),o=[...i.violations],s=[];if(o.push(...b(e,t)),i.tree){const f=x(i.tree,t),h=S(i.tree);for(const a of[...f,...h])a.severity==="error"?o.push(a):s.push(a)}const c=d(o),l=d(s),m=t.enforcement.strictMode,p=c.length>0,y=m&&p?"fail":"pass",V=p?v(c):void 0;return{status:y,violations:c,warnings:l,deterministicFeedback:V,governanceVersionUsed:t.governanceVersion,manifestVersionUsed:t.manifestVersion,policyVersionUsed:t.policyVersion,timestamp:r,versionLineage:n}}export{L as validateAIOutput};
1
+ import{UDSGovernance as I,getVersionLineage as v}from"../manifest/governance.manifest.js";import{runPolicyEngine as x}from"../policies/policy.engine.js";import{detectDrift as S}from"./driftDetection.js";import{sortAndDedupeViolations as m,buildDeterministicFeedback as P}from"./deterministicFeedback.js";import{validateSchema as U}from"./schemaValidation.js";const c=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),l=e=>typeof e=="string"&&e.trim().length>0?e:void 0;function A(e){const n=c(e)?e:null;if(!n)return;const o=c(n.audit)?n.audit:null,r=l(o==null?void 0:o.patternId);if(r)return r;const i=c(n.tree)?n.tree:null,t=c(i==null?void 0:i.props)?i==null?void 0:i.props:null;return l((t==null?void 0:t.patternId)??(t==null?void 0:t.pattern)??(t==null?void 0:t.layoutPattern))}function D(e,n){const o=c(e)?e:null;if(!o)return[];const r=[{key:"manifestVersion",expected:n.manifestVersion},{key:"governanceVersion",expected:n.governanceVersion},{key:"policyVersion",expected:n.policyVersion}],i=[];for(const t of r){const s=l(o[t.key]);s&&s!==t.expected&&i.push({severity:"error",code:`RULE_VERSION_MISMATCH_${t.key.toUpperCase()}`,message:`${t.key} "${s}" does not match expected "${t.expected}".`,path:t.key})}return i}function L(e,n=I){const o=U(e),r=new Date().toISOString(),i=v(),t=[...o.violations],s=[];if(t.push(...D(e,n)),o.tree){const h=x(o.tree,n,{patternId:A(e)}),k=S(o.tree);for(const d of[...h,...k])d.severity==="error"?t.push(d):s.push(d)}const a=m(t),f=m(s),y=n.enforcement.strictMode,p=a.length>0,V=y&&p?"fail":"pass",u=p?P(a):void 0;return{status:V,violations:a,warnings:f,deterministicFeedback:u,governanceVersionUsed:n.governanceVersion,manifestVersionUsed:n.manifestVersion,policyVersionUsed:n.policyVersion,timestamp:r,versionLineage:i}}export{L as validateAIOutput};
@@ -25,6 +25,8 @@ export interface AppShellProps {
25
25
  layout?: ShellLayoutConfig;
26
26
  slots?: AppShellSlots;
27
27
  children?: React.ReactNode;
28
+ /** Standalone mode: no navigation/menu spacing (desktop/mobile). */
29
+ standalone?: boolean;
28
30
  brand?: string;
29
31
  theme?: "light" | "dark";
30
32
  className?: string;
@@ -45,11 +47,13 @@ declare const AppShellMenuSlot: ({ children }: AppShellSectionProps) => import("
45
47
  declare const AppShellContentSlot: ({ children }: AppShellSectionProps) => import("react/jsx-runtime").JSX.Element;
46
48
  declare const AppShellListviewSlot: ({ children }: AppShellSectionProps) => import("react/jsx-runtime").JSX.Element;
47
49
  declare const AppShellMainSlot: ({ children }: AppShellSectionProps) => import("react/jsx-runtime").JSX.Element;
50
+ declare const AppShellFooterSlot: ({ children }: AppShellSectionProps) => import("react/jsx-runtime").JSX.Element;
48
51
  type AppShellCompound = React.FC<AppShellProps> & {
49
52
  Menu: typeof AppShellMenuSlot;
50
53
  Content: typeof AppShellContentSlot;
51
54
  Listview: typeof AppShellListviewSlot;
52
55
  Main: typeof AppShellMainSlot;
56
+ Footer: typeof AppShellFooterSlot;
53
57
  };
54
58
  export declare const AppShell: AppShellCompound;
55
59
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),c=require("react"),h=require("../Icon/Icon.cjs"),D=require("../Divider/Divider.cjs"),R=require("../Key/Key.cjs"),O=require("../Toggle/Toggle.cjs");;/* empty css */const a="uds-action-menu";function S({item:r,onItemClick:$}){const[v,m]=c.useState(!1),i=c.useRef(null),o=c.useRef(null),j=()=>{clearTimeout(o.current),m(!0)},x=()=>{o.current=setTimeout(()=>{m(!1)},150)},N=()=>{clearTimeout(o.current)},d=()=>{o.current=setTimeout(()=>{m(!1)},150)};return c.useEffect(()=>()=>{clearTimeout(o.current)},[]),n.jsxs("div",{className:`${a}__item-wrapper`,onMouseEnter:j,onMouseLeave:x,children:[n.jsxs("button",{className:`${a}__item ${a}__item--has-submenu ${r.disabled?`${a}__item--disabled`:""}`,role:"menuitem",disabled:r.disabled,"aria-haspopup":"true","aria-expanded":v,"aria-label":r.label,children:[r.icon&&n.jsx(h.default,{name:r.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),n.jsx("span",{className:`${a}__item-label`,children:r.label}),n.jsx(h.default,{name:"CaretRight",size:12,appearance:"regular",className:`${a}__item-arrow`})]}),v&&r.items&&n.jsx("div",{ref:i,className:`${a}__submenu`,role:"menu","aria-orientation":"vertical",onMouseEnter:N,onMouseLeave:d,children:r.items.map((s,u)=>s.divider?n.jsx("div",{className:`${a}__divider`,children:n.jsx(D.default,{})},`divider-${u}`):s.items&&s.items.length>0?n.jsx(S,{item:s,onItemClick:$},s.id||u):n.jsxs("button",{className:`${a}__item ${s.disabled?`${a}__item--disabled`:""} ${s.active?`${a}__item--active`:""} ${s.destructive?`${a}__item--destructive`:""}`,role:"menuitem",disabled:s.disabled,onClick:f=>$(s,f),"aria-label":s.label,children:[s.icon&&n.jsx(h.default,{name:s.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),n.jsx("span",{className:`${a}__item-label`,children:s.label}),s.shortcut&&n.jsx(R.default,{label:s.shortcut,appearance:"light",className:`${a}__item-shortcut`})]},s.id||u))})]})}function B({trigger:r,items:$=[],placement:v="bottom-start",fullWidth:m=!1,disabled:i=!1,onOpenChange:o,className:j="",menuClassName:x="",...N}){const[d,s]=c.useState(!1),u=c.useRef(null),f=c.useRef(null),k=e=>{var t;e.key==="Escape"&&(b(!1),(t=f.current)==null||t.focus())},b=e=>{s(e),o&&o(e)};c.useEffect(()=>{const e=t=>{u.current&&f.current&&!u.current.contains(t.target)&&!f.current.contains(t.target)&&b(!1)};return d&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",k)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",k)}},[d]);const L=e=>{var g,_,w,M,y;const t=(g=u.current)==null?void 0:g.querySelectorAll('[role="menuitem"]:not([disabled])');if(!t||t.length===0)return;const l=Array.from(t).findIndex(p=>p===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const p=l<t.length-1?l+1:0;(_=t[p])==null||_.focus();break}case"ArrowUp":{e.preventDefault();const p=l>0?l-1:t.length-1;(w=t[p])==null||w.focus();break}case"Home":e.preventDefault(),(M=t[0])==null||M.focus();break;case"End":e.preventDefault(),(y=t[t.length-1])==null||y.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},E=()=>{i||b(!d)},C=(e,t)=>{if(e.disabled){t.preventDefault();return}e.onClick&&e.onClick(e,t),b(!1)},T=()=>{var e,t;if(!r)return null;if(c.isValidElement(r)){const l=(e=r.props)==null?void 0:e.onClick,g=c.cloneElement(r,{disabled:i||((t=r.props)==null?void 0:t.disabled),"aria-disabled":i||void 0,onClick:_=>{_.preventDefault(),_.stopPropagation(),!i&&(l&&l(_),E())},"aria-haspopup":"true","aria-expanded":d});return n.jsx("div",{ref:f,className:`${a}__trigger`,children:g})}return n.jsx("div",{ref:f,className:`${a}__trigger`,onClick:E,children:r})},q=()=>({"bottom-start":"bottom-start","bottom-end":"bottom-end","top-start":"top-start","top-end":"top-end","right-start":"right-start","right-end":"right-end","left-start":"left-start","left-end":"left-end"})[v]||"bottom-start",A=[a,d&&`${a}--open`,m&&`${a}--full-width`,i&&`${a}--disabled`,j].filter(Boolean).join(" "),z=[`${a}__menu`,`${a}__menu--${q()}`,m&&`${a}__menu--full-width`,x].filter(Boolean).join(" ");return n.jsxs("div",{className:A,...N,children:[T(),d&&!i&&n.jsx("div",{ref:u,className:z,role:"menu","aria-orientation":"vertical",onKeyDown:L,children:$.map((e,t)=>e.divider?n.jsx("div",{className:`${a}__divider`,children:n.jsx(D.default,{})},`divider-${t}`):e.items&&e.items.length>0?n.jsx(S,{item:e,onItemClick:C},e.id||t):e.type==="toggle"?n.jsxs("div",{className:`${a}__item ${a}__item--toggle ${e.disabled?`${a}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&n.jsx(h.default,{name:e.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),n.jsx("span",{className:`${a}__item-label`,children:e.label}),n.jsx(O.default,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:l=>{e.onChange&&e.onChange(l)},className:`${a}__item-toggle`})]},e.id||t):n.jsxs("button",{className:`${a}__item ${e.disabled?`${a}__item--disabled`:""} ${e.active?`${a}__item--active`:""} ${e.destructive?`${a}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:l=>C(e,l),"aria-label":e.label,children:[e.icon&&n.jsx(h.default,{name:e.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),n.jsx("span",{className:`${a}__item-label`,children:e.label}),e.shortcut&&n.jsx(R.default,{label:e.shortcut,appearance:"light",className:`${a}__item-shortcut`})]},e.id||t))})]})}exports.default=B;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),u=require("react"),Ne=require("react-dom"),F=require("../Icon/Icon.cjs"),me=require("../Divider/Divider.cjs"),pe=require("../Key/Key.cjs"),Le=require("../SearchInput/SearchInput.cjs"),Me=require("../Toggle/Toggle.cjs");;/* empty css */const t="uds-action-menu",ke=new Set(["search","autosuggest"]),W=n=>String(n||"").trim().toLowerCase(),Re=n=>typeof(n==null?void 0:n.label)=="string"?n.label:"",fe=n=>{var p,f;const d=[...n];for(;d.length>0&&((p=d[0])!=null&&p.divider);)d.shift();for(;d.length>0&&((f=d[d.length-1])!=null&&f.divider);)d.pop();return d},ge=(n,d)=>{const p=W(d);if(!p)return n;const f=[];for(const m of n){if(m!=null&&m.divider){f.push(m);continue}const b=W(Re(m)),_=Array.isArray(m==null?void 0:m.items)?ge(m.items,d):null,h=Array.isArray(_)&&_.length>0;(b.includes(p)||h)&&f.push(h?{...m,items:fe(_)}:m)}return fe(f)},he=(n,d,p=!1)=>{const f=W(d);if(!f||!n)return n;const m=W(n),b=p?m.startsWith(f)?0:-1:m.indexOf(f);if(b<0)return n;const _=b+f.length,h=n.slice(0,b),M=n.slice(b,_),q=n.slice(_);return s.jsxs(s.Fragment,{children:[h,s.jsx("span",{className:`${t}__match ${p?`${t}__match--weight`:""}`,children:M}),q]})};function _e({item:n,onItemClick:d}){const[p,f]=u.useState(!1),[m,b]=u.useState(!1),_=u.useRef(null),h=u.useRef(null),M=()=>{clearTimeout(h.current),f(!0)},q=()=>{h.current=setTimeout(()=>{f(!1)},150)},G=()=>{clearTimeout(h.current)},U=()=>{h.current=setTimeout(()=>{f(!1)},150)};return u.useEffect(()=>()=>{clearTimeout(h.current)},[]),u.useLayoutEffect(()=>{if(!p||!_.current)return;const r=_.current.getBoundingClientRect(),E=r.right>window.innerWidth-8,k=r.left<8;if(E&&!k){b(!0);return}if(k&&!E){b(!1);return}E&&k&&b(r.right-window.innerWidth>8)},[p]),s.jsxs("div",{className:`${t}__item-wrapper`,onMouseEnter:M,onMouseLeave:q,children:[s.jsxs("button",{className:`${t}__item ${t}__item--has-submenu ${n.disabled?`${t}__item--disabled`:""}`,role:"menuitem",disabled:n.disabled,"aria-haspopup":"true","aria-expanded":p,"aria-label":n.label,children:[n.icon&&s.jsx(F.default,{name:n.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:n.label}),s.jsx(F.default,{name:"CaretRight",size:12,appearance:"regular",className:`${t}__item-arrow`})]}),p&&n.items&&s.jsx("div",{ref:_,className:`${t}__submenu ${m?`${t}__submenu--left`:""}`,role:"menu","aria-orientation":"vertical",onMouseEnter:G,onMouseLeave:U,children:n.items.map((r,E)=>r.divider?s.jsx("div",{className:`${t}__divider`,children:s.jsx(me.default,{})},`divider-${E}`):r.items&&r.items.length>0?s.jsx(_e,{item:r,onItemClick:d},r.id||E):s.jsxs("button",{className:`${t}__item ${r.disabled?`${t}__item--disabled`:""} ${r.active?`${t}__item--active`:""} ${r.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:k=>d(r,k),"aria-label":r.label,children:[r.icon&&s.jsx(F.default,{name:r.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:r.label}),r.shortcut&&s.jsx(pe.default,{label:r.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},r.id||E))})]})}function Ae({trigger:n,items:d=[],placement:p="bottom-start",variant:f="default",searchPlaceholder:m="Search...",noResultsText:b="No results found",fullWidth:_=!1,disabled:h=!1,onOpenChange:M,className:q="",menuClassName:G="",...U}){const[r,E]=u.useState(!1),[k,ve]=u.useState({}),[I,Y]=u.useState(null),j=u.useRef(null),x=u.useRef(null),D=u.useRef(null),K=u.useRef(null),[Z,ee]=u.useState(""),[$e,be]=u.useState(""),z=f==="search",S=f==="autosuggest",te=ke.has(f),P=z?Z:S?$e:"",ne=u.useMemo(()=>te?ge(d,P):d,[te,d,P]),re=e=>{var i;e.key==="Escape"&&(N(!1),(i=x.current)==null||i.focus())},N=e=>{E(e),e||(K.current=null),M&&M(e)};u.useEffect(()=>{const e=i=>{j.current&&x.current&&!j.current.contains(i.target)&&!x.current.contains(i.target)&&N(!1)};return r&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",re)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",re)}},[r]);const oe=()=>{if(!r||!j.current||!x.current)return;const e=x.current.closest(".uds-modal__overlay"),i=x.current.closest(".app-shell__main-content"),o=e instanceof HTMLElement?e:i instanceof HTMLElement?i:document.body;Y(o);const g=x.current.getBoundingClientRect(),v=j.current.getBoundingClientRect(),C=o===document.body?{top:0,left:0}:o.getBoundingClientRect(),w=o===document.body?0:o.scrollTop,y=o===document.body?0:o.scrollLeft,L=o===document.body?window.innerWidth:o.clientWidth,R=o===document.body?window.innerHeight:o.clientHeight,a=8,l=8,[A="bottom",Ee="start"]=String(p).split("-"),H=(c,ie)=>{let V=0,Q=0;const ce=g.top-C.top+w,le=g.bottom-C.top+w,ue=g.left-C.left+y,de=g.right-C.left+y;return c==="bottom"&&(V=le+l),c==="top"&&(V=ce-v.height-l),c==="right"&&(Q=de+l),c==="left"&&(Q=ue-v.width-l),(c==="bottom"||c==="top")&&(ie==="end"?Q=de-v.width:Q=ue),(c==="left"||c==="right")&&(ie==="end"?V=le-v.height:V=ce),{top:V,left:Q}},Se=c=>({top:c.top<w+a,bottom:c.top+v.height>w+R-a,left:c.left<y+a,right:c.left+v.width>y+L-a});let $=K.current??A;const O=Ee;let T=H($,O);if(!K.current){const c=Se(T);$==="bottom"&&c.bottom?($="top",T=H($,O)):$==="top"&&c.top?($="bottom",T=H($,O)):$==="right"&&c.right?($="left",T=H($,O)):$==="left"&&c.left&&($="right",T=H($,O)),K.current=$}let J=T.top,X=T.left;J=Math.max(w+a,Math.min(J,w+R-v.height-a)),X=Math.max(y+a,Math.min(X,y+L-v.width-a));const B={position:o===document.body?"fixed":"absolute",top:`${J}px`,left:`${X}px`,width:_?`${g.width}px`:void 0,zIndex:o===e?"calc(var(--uds-elevation-modal) + 1)":void 0};ve(c=>c.top===B.top&&c.left===B.left&&c.width===B.width&&c.position===B.position?c:B)};u.useLayoutEffect(()=>{var e,i;if(r){if(I===null){const o=(e=x.current)==null?void 0:e.closest(".uds-modal__overlay"),g=(i=x.current)==null?void 0:i.closest(".app-shell__main-content");Y(o instanceof HTMLElement?o:g instanceof HTMLElement?g:document.body)}oe()}},[r,p,_,I]),u.useEffect(()=>{if(!r)return;const e=()=>{D.current==null&&(D.current=requestAnimationFrame(()=>{D.current=null,oe()}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),D.current!=null&&(cancelAnimationFrame(D.current),D.current=null)}},[r]),u.useEffect(()=>{if(!r){ee("");return}z&&requestAnimationFrame(()=>{var i;const e=(i=j.current)==null?void 0:i.querySelector('input[type="search"]');e==null||e.focus()})},[r,z]);const we=e=>{var v,C,w,y,L,R,a;if(z&&e.target instanceof HTMLInputElement&&e.target.type==="search"&&((v=j.current)==null?void 0:v.contains(e.target))){if(e.key==="ArrowDown"){e.preventDefault();const l=(C=j.current)==null?void 0:C.querySelector('[role="menuitem"]:not([disabled])');l==null||l.focus()}return}const o=(w=j.current)==null?void 0:w.querySelectorAll('[role="menuitem"]:not([disabled])');if(!o||o.length===0)return;const g=Array.from(o).findIndex(l=>l===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const l=g<o.length-1?g+1:0;(y=o[l])==null||y.focus();break}case"ArrowUp":{e.preventDefault();const l=g>0?g-1:o.length-1;(L=o[l])==null||L.focus();break}case"Home":e.preventDefault(),(R=o[0])==null||R.focus();break;case"End":e.preventDefault(),(a=o[o.length-1])==null||a.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},se=()=>{h||N(!r)},ae=(e,i)=>{if(e.disabled){i.preventDefault();return}e.onClick&&e.onClick(e,i),N(!1)},ye=()=>z?s.jsx("div",{className:`${t}__search`,children:s.jsx(Le.SearchInput,{size:"compact",value:Z,onChange:e=>ee(e.target.value),className:`${t}__search-input`,placeholder:m,"aria-label":m})}):null,xe=()=>{var e,i,o,g,v;if(!n)return null;if(u.isValidElement(n)){const C=(e=n.props)==null?void 0:e.onClick,w=(i=n.props)==null?void 0:i.onChange,y=(o=n.props)==null?void 0:o.onFocus,L=(g=n.props)==null?void 0:g.onKeyDown,R=u.cloneElement(n,{disabled:h||((v=n.props)==null?void 0:v.disabled),"aria-disabled":h||void 0,onClick:a=>{h||(S||(a.preventDefault(),a.stopPropagation()),C&&C(a),S?N(!0):se())},onFocus:a=>{y&&y(a),!(h||!S)&&N(!0)},onChange:a=>{if(w&&w(a),h||!S)return;const l=a==null?void 0:a.target,A=l&&typeof l=="object"&&"value"in l?String(l.value??""):"";be(A),N(!0)},onKeyDown:a=>{var l;if(L&&L(a),!(h||!S)){if(a.key==="Escape"){N(!1);return}if(a.key==="ArrowDown"){a.preventDefault();const A=(l=j.current)==null?void 0:l.querySelector('[role="menuitem"]:not([disabled])');A==null||A.focus()}}},"aria-haspopup":"true","aria-expanded":r});return s.jsx("div",{ref:x,className:`${t}__trigger`,children:R})}return s.jsx("div",{ref:x,className:`${t}__trigger`,onClick:se,children:n})},je=[t,r&&`${t}--open`,_&&`${t}--full-width`,h&&`${t}--disabled`,q].filter(Boolean).join(" "),Ce=[`${t}__menu`,`${t}__menu--portal`,f==="search"&&`${t}__menu--search`,_&&`${t}__menu--full-width`,G].filter(Boolean).join(" ");return s.jsxs("div",{className:je,...U,children:[xe(),r&&!h&&I?Ne.createPortal(s.jsxs("div",{ref:j,className:Ce,style:k,role:"menu","aria-orientation":"vertical",onKeyDown:we,children:[ye(),ne.length===0?s.jsx("div",{className:`${t}__empty`,children:b}):null,ne.map((e,i)=>e.divider?s.jsx("div",{className:`${t}__divider`,children:s.jsx(me.default,{})},`divider-${i}`):e.items&&e.items.length>0?s.jsx(_e,{item:e,onItemClick:ae},e.id||i):e.type==="toggle"?s.jsxs("div",{className:`${t}__item ${t}__item--toggle ${e.disabled?`${t}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&s.jsx(F.default,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:he(e.label,P,S)}),s.jsx(Me.default,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:o=>{e.onChange&&e.onChange(o)},className:`${t}__item-toggle`})]},e.id||i):s.jsxs("button",{className:`${t}__item ${e.disabled?`${t}__item--disabled`:""} ${e.active?`${t}__item--active`:""} ${e.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:o=>ae(e,o),"aria-label":e.label,children:[e.icon&&s.jsx(F.default,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:he(e.label,P,S)}),e.shortcut&&s.jsx(pe.default,{label:e.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},e.id||i))]}),I):null]})}exports.default=Ae;
@@ -1 +1 @@
1
- import{jsxs as f,jsx as t}from"react/jsx-runtime";import T,{useState as A,useRef as N,useEffect as R}from"react";import h from"../Icon/Icon.js";import z from"../Divider/Divider.js";import x from"../Key/Key.js";import H from"../Toggle/Toggle.js";/* empty css */const a="uds-action-menu";function O({item:l,onItemClick:$}){const[v,m]=A(!1),i=N(null),c=N(null),k=()=>{clearTimeout(c.current),m(!0)},E=()=>{c.current=setTimeout(()=>{m(!1)},150)},C=()=>{clearTimeout(c.current)},o=()=>{c.current=setTimeout(()=>{m(!1)},150)};return R(()=>()=>{clearTimeout(c.current)},[]),f("div",{className:`${a}__item-wrapper`,onMouseEnter:k,onMouseLeave:E,children:[f("button",{className:`${a}__item ${a}__item--has-submenu ${l.disabled?`${a}__item--disabled`:""}`,role:"menuitem",disabled:l.disabled,"aria-haspopup":"true","aria-expanded":v,"aria-label":l.label,children:[l.icon&&t(h,{name:l.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),t("span",{className:`${a}__item-label`,children:l.label}),t(h,{name:"CaretRight",size:12,appearance:"regular",className:`${a}__item-arrow`})]}),v&&l.items&&t("div",{ref:i,className:`${a}__submenu`,role:"menu","aria-orientation":"vertical",onMouseEnter:C,onMouseLeave:o,children:l.items.map((r,d)=>r.divider?t("div",{className:`${a}__divider`,children:t(z,{})},`divider-${d}`):r.items&&r.items.length>0?t(O,{item:r,onItemClick:$},r.id||d):f("button",{className:`${a}__item ${r.disabled?`${a}__item--disabled`:""} ${r.active?`${a}__item--active`:""} ${r.destructive?`${a}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:u=>$(r,u),"aria-label":r.label,children:[r.icon&&t(h,{name:r.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),t("span",{className:`${a}__item-label`,children:r.label}),r.shortcut&&t(x,{label:r.shortcut,appearance:"light",className:`${a}__item-shortcut`})]},r.id||d))})]})}function Y({trigger:l,items:$=[],placement:v="bottom-start",fullWidth:m=!1,disabled:i=!1,onOpenChange:c,className:k="",menuClassName:E="",...C}){const[o,r]=A(!1),d=N(null),u=N(null),w=e=>{var n;e.key==="Escape"&&(b(!1),(n=u.current)==null||n.focus())},b=e=>{r(e),c&&c(e)};R(()=>{const e=n=>{d.current&&u.current&&!d.current.contains(n.target)&&!u.current.contains(n.target)&&b(!1)};return o&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",w)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",w)}},[o]);const j=e=>{var g,_,y,L,S;const n=(g=d.current)==null?void 0:g.querySelectorAll('[role="menuitem"]:not([disabled])');if(!n||n.length===0)return;const s=Array.from(n).findIndex(p=>p===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const p=s<n.length-1?s+1:0;(_=n[p])==null||_.focus();break}case"ArrowUp":{e.preventDefault();const p=s>0?s-1:n.length-1;(y=n[p])==null||y.focus();break}case"Home":e.preventDefault(),(L=n[0])==null||L.focus();break;case"End":e.preventDefault(),(S=n[n.length-1])==null||S.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},M=()=>{i||b(!o)},D=(e,n)=>{if(e.disabled){n.preventDefault();return}e.onClick&&e.onClick(e,n),b(!1)},B=()=>{var e,n;if(!l)return null;if(T.isValidElement(l)){const s=(e=l.props)==null?void 0:e.onClick,g=T.cloneElement(l,{disabled:i||((n=l.props)==null?void 0:n.disabled),"aria-disabled":i||void 0,onClick:_=>{_.preventDefault(),_.stopPropagation(),!i&&(s&&s(_),M())},"aria-haspopup":"true","aria-expanded":o});return t("div",{ref:u,className:`${a}__trigger`,children:g})}return t("div",{ref:u,className:`${a}__trigger`,onClick:M,children:l})},K=()=>({"bottom-start":"bottom-start","bottom-end":"bottom-end","top-start":"top-start","top-end":"top-end","right-start":"right-start","right-end":"right-end","left-start":"left-start","left-end":"left-end"})[v]||"bottom-start",P=[a,o&&`${a}--open`,m&&`${a}--full-width`,i&&`${a}--disabled`,k].filter(Boolean).join(" "),q=[`${a}__menu`,`${a}__menu--${K()}`,m&&`${a}__menu--full-width`,E].filter(Boolean).join(" ");return f("div",{className:P,...C,children:[B(),o&&!i&&t("div",{ref:d,className:q,role:"menu","aria-orientation":"vertical",onKeyDown:j,children:$.map((e,n)=>e.divider?t("div",{className:`${a}__divider`,children:t(z,{})},`divider-${n}`):e.items&&e.items.length>0?t(O,{item:e,onItemClick:D},e.id||n):e.type==="toggle"?f("div",{className:`${a}__item ${a}__item--toggle ${e.disabled?`${a}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&t(h,{name:e.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),t("span",{className:`${a}__item-label`,children:e.label}),t(H,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:s=>{e.onChange&&e.onChange(s)},className:`${a}__item-toggle`})]},e.id||n):f("button",{className:`${a}__item ${e.disabled?`${a}__item--disabled`:""} ${e.active?`${a}__item--active`:""} ${e.destructive?`${a}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:s=>D(e,s),"aria-label":e.label,children:[e.icon&&t(h,{name:e.icon,size:16,appearance:"regular",className:`${a}__item-icon`}),t("span",{className:`${a}__item-label`,children:e.label}),e.shortcut&&t(x,{label:e.shortcut,appearance:"light",className:`${a}__item-shortcut`})]},e.id||n))})]})}export{Y as default};
1
+ import{jsxs as S,jsx as c,Fragment as De}from"react/jsx-runtime";import pe,{useState as z,useRef as B,useMemo as xe,useEffect as U,useLayoutEffect as $e}from"react";import{createPortal as ze}from"react-dom";import j from"../Icon/Icon.js";import ve from"../Divider/Divider.js";import we from"../Key/Key.js";import{SearchInput as He}from"../SearchInput/SearchInput.js";import Be from"../Toggle/Toggle.js";/* empty css */const t="uds-action-menu",Oe=new Set(["search","autosuggest"]),J=n=>String(n||"").trim().toLowerCase(),Ve=n=>typeof(n==null?void 0:n.label)=="string"?n.label:"",ge=n=>{var h,d;const u=[...n];for(;u.length>0&&((h=u[0])!=null&&h.divider);)u.shift();for(;u.length>0&&((d=u[u.length-1])!=null&&d.divider);)u.pop();return u},be=(n,u)=>{const h=J(u);if(!h)return n;const d=[];for(const m of n){if(m!=null&&m.divider){d.push(m);continue}const v=J(Ve(m)),g=Array.isArray(m==null?void 0:m.items)?be(m.items,u):null,f=Array.isArray(g)&&g.length>0;(v.includes(h)||f)&&d.push(f?{...m,items:ge(g)}:m)}return ge(d)},_e=(n,u,h=!1)=>{const d=J(u);if(!d||!n)return n;const m=J(n),v=h?m.startsWith(d)?0:-1:m.indexOf(d);if(v<0)return n;const g=v+d.length,f=n.slice(0,v),A=n.slice(v,g),O=n.slice(g);return S(De,{children:[f,c("span",{className:`${t}__match ${h?`${t}__match--weight`:""}`,children:A}),O]})};function ye({item:n,onItemClick:u}){const[h,d]=z(!1),[m,v]=z(!1),g=B(null),f=B(null),A=()=>{clearTimeout(f.current),d(!0)},O=()=>{f.current=setTimeout(()=>{d(!1)},150)},X=()=>{clearTimeout(f.current)},Y=()=>{f.current=setTimeout(()=>{d(!1)},150)};return U(()=>()=>{clearTimeout(f.current)},[]),$e(()=>{if(!h||!g.current)return;const r=g.current.getBoundingClientRect(),N=r.right>window.innerWidth-8,R=r.left<8;if(N&&!R){v(!0);return}if(R&&!N){v(!1);return}N&&R&&v(r.right-window.innerWidth>8)},[h]),S("div",{className:`${t}__item-wrapper`,onMouseEnter:A,onMouseLeave:O,children:[S("button",{className:`${t}__item ${t}__item--has-submenu ${n.disabled?`${t}__item--disabled`:""}`,role:"menuitem",disabled:n.disabled,"aria-haspopup":"true","aria-expanded":h,"aria-label":n.label,children:[n.icon&&c(j,{name:n.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:n.label}),c(j,{name:"CaretRight",size:12,appearance:"regular",className:`${t}__item-arrow`})]}),h&&n.items&&c("div",{ref:g,className:`${t}__submenu ${m?`${t}__submenu--left`:""}`,role:"menu","aria-orientation":"vertical",onMouseEnter:X,onMouseLeave:Y,children:n.items.map((r,N)=>r.divider?c("div",{className:`${t}__divider`,children:c(ve,{})},`divider-${N}`):r.items&&r.items.length>0?c(ye,{item:r,onItemClick:u},r.id||N):S("button",{className:`${t}__item ${r.disabled?`${t}__item--disabled`:""} ${r.active?`${t}__item--active`:""} ${r.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:R=>u(r,R),"aria-label":r.label,children:[r.icon&&c(j,{name:r.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:r.label}),r.shortcut&&c(we,{label:r.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},r.id||N))})]})}function Ue({trigger:n,items:u=[],placement:h="bottom-start",variant:d="default",searchPlaceholder:m="Search...",noResultsText:v="No results found",fullWidth:g=!1,disabled:f=!1,onOpenChange:A,className:O="",menuClassName:X="",...Y}){const[r,N]=z(!1),[R,Ce]=z({}),[P,te]=z(null),C=B(null),y=B(null),H=B(null),W=B(null),[ne,re]=z(""),[Ee,Ne]=z(""),V=d==="search",L=d==="autosuggest",oe=Oe.has(d),G=V?ne:L?Ee:"",ie=xe(()=>oe?be(u,G):u,[oe,u,G]),ae=e=>{var a;e.key==="Escape"&&(k(!1),(a=y.current)==null||a.focus())},k=e=>{N(e),e||(W.current=null),A&&A(e)};U(()=>{const e=a=>{C.current&&y.current&&!C.current.contains(a.target)&&!y.current.contains(a.target)&&k(!1)};return r&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",ae)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",ae)}},[r]);const ce=()=>{if(!r||!C.current||!y.current)return;const e=y.current.closest(".uds-modal__overlay"),a=y.current.closest(".app-shell__main-content"),o=e instanceof HTMLElement?e:a instanceof HTMLElement?a:document.body;te(o);const p=y.current.getBoundingClientRect(),_=C.current.getBoundingClientRect(),E=o===document.body?{top:0,left:0}:o.getBoundingClientRect(),w=o===document.body?0:o.scrollTop,b=o===document.body?0:o.scrollLeft,M=o===document.body?window.innerWidth:o.clientWidth,T=o===document.body?window.innerHeight:o.clientHeight,i=8,l=8,[D="bottom",Re="start"]=String(h).split("-"),Q=(s,ue)=>{let I=0,K=0;const de=p.top-E.top+w,fe=p.bottom-E.top+w,me=p.left-E.left+b,he=p.right-E.left+b;return s==="bottom"&&(I=fe+l),s==="top"&&(I=de-_.height-l),s==="right"&&(K=he+l),s==="left"&&(K=me-_.width-l),(s==="bottom"||s==="top")&&(ue==="end"?K=he-_.width:K=me),(s==="left"||s==="right")&&(ue==="end"?I=fe-_.height:I=de),{top:I,left:K}},Te=s=>({top:s.top<w+i,bottom:s.top+_.height>w+T-i,left:s.left<b+i,right:s.left+_.width>b+M-i});let $=W.current??D;const q=Re;let x=Q($,q);if(!W.current){const s=Te(x);$==="bottom"&&s.bottom?($="top",x=Q($,q)):$==="top"&&s.top?($="bottom",x=Q($,q)):$==="right"&&s.right?($="left",x=Q($,q)):$==="left"&&s.left&&($="right",x=Q($,q)),W.current=$}let Z=x.top,ee=x.left;Z=Math.max(w+i,Math.min(Z,w+T-_.height-i)),ee=Math.max(b+i,Math.min(ee,b+M-_.width-i));const F={position:o===document.body?"fixed":"absolute",top:`${Z}px`,left:`${ee}px`,width:g?`${p.width}px`:void 0,zIndex:o===e?"calc(var(--uds-elevation-modal) + 1)":void 0};Ce(s=>s.top===F.top&&s.left===F.left&&s.width===F.width&&s.position===F.position?s:F)};$e(()=>{var e,a;if(r){if(P===null){const o=(e=y.current)==null?void 0:e.closest(".uds-modal__overlay"),p=(a=y.current)==null?void 0:a.closest(".app-shell__main-content");te(o instanceof HTMLElement?o:p instanceof HTMLElement?p:document.body)}ce()}},[r,h,g,P]),U(()=>{if(!r)return;const e=()=>{H.current==null&&(H.current=requestAnimationFrame(()=>{H.current=null,ce()}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),H.current!=null&&(cancelAnimationFrame(H.current),H.current=null)}},[r]),U(()=>{if(!r){re("");return}V&&requestAnimationFrame(()=>{var a;const e=(a=C.current)==null?void 0:a.querySelector('input[type="search"]');e==null||e.focus()})},[r,V]);const Le=e=>{var _,E,w,b,M,T,i;if(V&&e.target instanceof HTMLInputElement&&e.target.type==="search"&&((_=C.current)==null?void 0:_.contains(e.target))){if(e.key==="ArrowDown"){e.preventDefault();const l=(E=C.current)==null?void 0:E.querySelector('[role="menuitem"]:not([disabled])');l==null||l.focus()}return}const o=(w=C.current)==null?void 0:w.querySelectorAll('[role="menuitem"]:not([disabled])');if(!o||o.length===0)return;const p=Array.from(o).findIndex(l=>l===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const l=p<o.length-1?p+1:0;(b=o[l])==null||b.focus();break}case"ArrowUp":{e.preventDefault();const l=p>0?p-1:o.length-1;(M=o[l])==null||M.focus();break}case"Home":e.preventDefault(),(T=o[0])==null||T.focus();break;case"End":e.preventDefault(),(i=o[o.length-1])==null||i.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},se=()=>{f||k(!r)},le=(e,a)=>{if(e.disabled){a.preventDefault();return}e.onClick&&e.onClick(e,a),k(!1)},ke=()=>V?c("div",{className:`${t}__search`,children:c(He,{size:"compact",value:ne,onChange:e=>re(e.target.value),className:`${t}__search-input`,placeholder:m,"aria-label":m})}):null,Me=()=>{var e,a,o,p,_;if(!n)return null;if(pe.isValidElement(n)){const E=(e=n.props)==null?void 0:e.onClick,w=(a=n.props)==null?void 0:a.onChange,b=(o=n.props)==null?void 0:o.onFocus,M=(p=n.props)==null?void 0:p.onKeyDown,T=pe.cloneElement(n,{disabled:f||((_=n.props)==null?void 0:_.disabled),"aria-disabled":f||void 0,onClick:i=>{f||(L||(i.preventDefault(),i.stopPropagation()),E&&E(i),L?k(!0):se())},onFocus:i=>{b&&b(i),!(f||!L)&&k(!0)},onChange:i=>{if(w&&w(i),f||!L)return;const l=i==null?void 0:i.target,D=l&&typeof l=="object"&&"value"in l?String(l.value??""):"";Ne(D),k(!0)},onKeyDown:i=>{var l;if(M&&M(i),!(f||!L)){if(i.key==="Escape"){k(!1);return}if(i.key==="ArrowDown"){i.preventDefault();const D=(l=C.current)==null?void 0:l.querySelector('[role="menuitem"]:not([disabled])');D==null||D.focus()}}},"aria-haspopup":"true","aria-expanded":r});return c("div",{ref:y,className:`${t}__trigger`,children:T})}return c("div",{ref:y,className:`${t}__trigger`,onClick:se,children:n})},Se=[t,r&&`${t}--open`,g&&`${t}--full-width`,f&&`${t}--disabled`,O].filter(Boolean).join(" "),Ae=[`${t}__menu`,`${t}__menu--portal`,d==="search"&&`${t}__menu--search`,g&&`${t}__menu--full-width`,X].filter(Boolean).join(" ");return S("div",{className:Se,...Y,children:[Me(),r&&!f&&P?ze(S("div",{ref:C,className:Ae,style:R,role:"menu","aria-orientation":"vertical",onKeyDown:Le,children:[ke(),ie.length===0?c("div",{className:`${t}__empty`,children:v}):null,ie.map((e,a)=>e.divider?c("div",{className:`${t}__divider`,children:c(ve,{})},`divider-${a}`):e.items&&e.items.length>0?c(ye,{item:e,onItemClick:le},e.id||a):e.type==="toggle"?S("div",{className:`${t}__item ${t}__item--toggle ${e.disabled?`${t}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&c(j,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:_e(e.label,G,L)}),c(Be,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:o=>{e.onChange&&e.onChange(o)},className:`${t}__item-toggle`})]},e.id||a):S("button",{className:`${t}__item ${e.disabled?`${t}__item--disabled`:""} ${e.active?`${t}__item--active`:""} ${e.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:o=>le(e,o),"aria-label":e.label,children:[e.icon&&c(j,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:_e(e.label,G,L)}),e.shortcut&&c(we,{label:e.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},e.id||a))]}),P):null]})}export{Ue as default};
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),l=require("react"),y=require("../Icon/Icon.cjs"),h=require("../ActionMenu/ActionMenu.cjs");;/* empty css */const t="uds-dropdown",b={compact:"compact",default:null},g={default:null,focused:"focused",error:"error",disabled:"disabled"};function k({options:d=[],value:n,onChange:o,placeholder:r,size:m="default",state:f="default",placement:v="bottom-start",id:j,className:S="",disabled:s=!1,...w}){const[c,x]=l.useState(!1),M=l.useId(),N=j||`dropdown-${M}`,u=l.useMemo(()=>d.map(e=>typeof e=="string"?{value:e,label:e}:e),[d]),p=s?"disabled":f==="default"&&c?"focused":f,i=u.find(e=>e.value===n),$=typeof r=="string"&&r.trim().length>0?r.trim():"Select an option",C=i?i.label:$,I=l.useMemo(()=>u.map(e=>({id:e.value,label:e.label,active:e.value===n,onClick:()=>{o&&!s&&o(e.value)}})),[u,n,o,s]),O=[t,b[m]&&`${t}--${b[m]}`,g[p]&&`${t}--${g[p]}`,c&&`${t}--open`,S].filter(Boolean).join(" "),_={...w};delete _.label;const q=a.jsxs("button",{type:"button",id:N,className:`${t}__trigger`,disabled:s,"aria-label":$,..._,children:[a.jsx("span",{className:`${t}__value ${i?"":`${t}__value--placeholder`}`,children:C}),a.jsx(y.default,{name:"CaretDown",size:16,appearance:"regular",className:`${t}__icon ${c?`${t}__icon--open`:""}`})]});return a.jsx("div",{className:`${t}-outer`,children:a.jsx(h.default,{trigger:q,items:I,placement:v,fullWidth:!0,disabled:s,onOpenChange:x,className:O,menuClassName:`${t}__menu`})})}const A=l.memo(k);exports.default=A;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),l=require("react"),q=require("../Icon/Icon.cjs"),y=require("../ActionMenu/ActionMenu.cjs");;/* empty css */const t="uds-dropdown",b={compact:"compact",default:null},g={default:null,focused:"focused",error:"error",disabled:"disabled"};function L({options:m=[],value:n,onChange:r,placeholder:o,size:f="default",state:p="default",placement:v="bottom-start",id:S,className:h="",disabled:a=!1,...j}){const[c,w]=l.useState(!1),x=l.useId(),C=S||`dropdown-${x}`,u=l.useMemo(()=>m.map(e=>typeof e=="string"?{value:e,label:e}:e),[m]),$=a?"disabled":p==="default"&&c?"focused":p,i=u.find(e=>e.value===n),d=typeof o=="string"&&o.trim().length>0?o.trim():"Select an option",M=i?i.label:d,N=l.useMemo(()=>u.map(e=>({id:e.value,label:e.label,active:e.value===n,onClick:()=>{r&&!a&&r(e.value)}})),[u,n,r,a]),I=[t,b[f]&&`${t}--${b[f]}`,g[$]&&`${t}--${g[$]}`,c&&`${t}--open`,h].filter(Boolean).join(" "),_={...j};delete _.label;const O=s.jsxs("button",{type:"button",id:C,className:`${t}__trigger`,disabled:a,"aria-label":d,..._,children:[s.jsx("span",{className:`${t}__value ${i?"":`${t}__value--placeholder`}`,children:M}),s.jsx(q.default,{name:"CaretDown",size:16,appearance:"regular",className:`${t}__icon ${c?`${t}__icon--open`:""}`})]});return s.jsx("div",{className:`${t}-outer`,children:s.jsx(y.default,{trigger:O,items:N,variant:"search",searchPlaceholder:`Search ${d.toLowerCase()}`,placement:v,fullWidth:!0,disabled:a,onOpenChange:w,className:I,menuClassName:`${t}__menu`})})}const k=l.memo(L);exports.default=k;
@@ -1 +1 @@
1
- import{jsx as s,jsxs as j}from"react/jsx-runtime";import k,{useState as A,useId as B,useMemo as _}from"react";import D from"../Icon/Icon.js";import L from"../ActionMenu/ActionMenu.js";/* empty css */const t="uds-dropdown",b={compact:"compact",default:null},g={default:null,focused:"focused",error:"error",disabled:"disabled"};function z({options:i=[],value:o,onChange:l,placeholder:n,size:m="default",state:d="default",placement:v="bottom-start",id:w,className:N="",disabled:a=!1,...C}){const[r,I]=A(!1),S=B(),O=w||`dropdown-${S}`,c=_(()=>i.map(e=>typeof e=="string"?{value:e,label:e}:e),[i]),p=a?"disabled":d==="default"&&r?"focused":d,u=c.find(e=>e.value===o),f=typeof n=="string"&&n.trim().length>0?n.trim():"Select an option",h=u?u.label:f,x=_(()=>c.map(e=>({id:e.value,label:e.label,active:e.value===o,onClick:()=>{l&&!a&&l(e.value)}})),[c,o,l,a]),y=[t,b[m]&&`${t}--${b[m]}`,g[p]&&`${t}--${g[p]}`,r&&`${t}--open`,N].filter(Boolean).join(" "),$={...C};delete $.label;const M=j("button",{type:"button",id:O,className:`${t}__trigger`,disabled:a,"aria-label":f,...$,children:[s("span",{className:`${t}__value ${u?"":`${t}__value--placeholder`}`,children:h}),s(D,{name:"CaretDown",size:16,appearance:"regular",className:`${t}__icon ${r?`${t}__icon--open`:""}`})]});return s("div",{className:`${t}-outer`,children:s(L,{trigger:M,items:x,placement:v,fullWidth:!0,disabled:a,onOpenChange:I,className:y,menuClassName:`${t}__menu`})})}const q=k.memo(z);export{q as default};
1
+ import{jsx as s,jsxs as M}from"react/jsx-runtime";import j,{useState as k,useId as A,useMemo as _}from"react";import B from"../Icon/Icon.js";import D from"../ActionMenu/ActionMenu.js";/* empty css */const a="uds-dropdown",b={compact:"compact",default:null},g={default:null,focused:"focused",error:"error",disabled:"disabled"};function z({options:d=[],value:o,onChange:l,placeholder:r,size:m="default",state:p="default",placement:h="bottom-start",id:v,className:w="",disabled:t=!1,...C}){const[n,N]=k(!1),S=A(),I=v||`dropdown-${S}`,c=_(()=>d.map(e=>typeof e=="string"?{value:e,label:e}:e),[d]),f=t?"disabled":p==="default"&&n?"focused":p,i=c.find(e=>e.value===o),u=typeof r=="string"&&r.trim().length>0?r.trim():"Select an option",O=i?i.label:u,x=_(()=>c.map(e=>({id:e.value,label:e.label,active:e.value===o,onClick:()=>{l&&!t&&l(e.value)}})),[c,o,l,t]),y=[a,b[m]&&`${a}--${b[m]}`,g[f]&&`${a}--${g[f]}`,n&&`${a}--open`,w].filter(Boolean).join(" "),$={...C};delete $.label;const L=M("button",{type:"button",id:I,className:`${a}__trigger`,disabled:t,"aria-label":u,...$,children:[s("span",{className:`${a}__value ${i?"":`${a}__value--placeholder`}`,children:O}),s(B,{name:"CaretDown",size:16,appearance:"regular",className:`${a}__icon ${n?`${a}__icon--open`:""}`})]});return s("div",{className:`${a}-outer`,children:s(D,{trigger:L,items:x,variant:"search",searchPlaceholder:`Search ${u.toLowerCase()}`,placement:h,fullWidth:!0,disabled:t,onOpenChange:N,className:y,menuClassName:`${a}__menu`})})}const q=j.memo(z);export{q as default};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("react/jsx-runtime"),g=require("react");;/* empty css */const P=new Set(["0","2","4","6","8","10","12","14","16","18","24","32","48","64","80"]);function N(e){return e===!0?"wrap":e===!1||e==null?"nowrap":e}function i(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function _(e){return e==="equal"||e==="right"||e==="left"?e:e==="2 Equal Column"?"equal":e==="Content Right"?"right":e==="Content Left"?"left":"full"}function B(e){var n;if(e==null)return;const t=String(e).trim();if(t==="auto")return;const r=((n=t.match(/^spacing-(\d+)$/))==null?void 0:n[1])??t;return P.has(r)?`var(--uds-spacing-${r})`:e}function C(e){if(typeof e!="number"||!Number.isFinite(e))return;const t=Math.floor(e);return t>0?t:void 0}const E=g.forwardRef(function({as:t="div",direction:r="row",justifyContent:n,alignItems:u,appearance:a="full",itemsPerRow:c,wrap:h=!1,gap:d,fullWidth:m=!1,inline:S=!1,className:v,style:o,children:R,...L},$){const p=C(c),x=r==="row"&&p!==void 0,b=N(x?!0:h),j=String(d).trim()==="auto",q=_(a),z=["uds-flex",`uds-flex--direction-${r}`,`uds-flex--appearance-${i(q)}`,n&&`uds-flex--justify-${i(n)}`,u&&`uds-flex--align-${i(u)}`,`uds-flex--wrap-${i(b)}`,S&&"uds-flex--inline",m&&"uds-flex--full-width",m&&"uds-flex--span",x&&"uds-flex--items-per-row",j&&"uds-flex--gap-auto",v].filter(Boolean).join(" "),l={},A=B(d),G=(o==null?void 0:o.gap)!=null;return d!=null&&!G&&(l.gap=A),x&&(l["--uds-flex-items-per-row"]=String(p)),m&&(o==null?void 0:o.width)==null&&(l.width="100%"),F.jsx(t,{ref:$,className:z,style:{...l,...o},...L,children:R})}),s=g.forwardRef(function({as:t="div",className:r,children:n,...u},a){const c=["uds-flex__full",r].filter(Boolean).join(" ");return F.jsx(t,{ref:a,className:c,...u,children:n})}),f=E;f.Fill=s;f.Full=s;const w=f;w.Fill=s;w.Full=s;exports.Flex=w;exports.Layout=f;
@@ -0,0 +1 @@
1
+ import{jsx as p}from"react/jsx-runtime";import h from"react";/* empty css */const _=new Set(["0","2","4","6","8","10","12","14","16","18","24","32","48","64","80"]);function j(r){return r===!0?"wrap":r===!1||r==null?"nowrap":r}function u(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function q(r){return r==="equal"||r==="right"||r==="left"?r:r==="2 Equal Column"?"equal":r==="Content Right"?"right":r==="Content Left"?"left":"full"}function B(r){var e;if(r==null)return;const t=String(r).trim();if(t==="auto")return;const o=((e=t.match(/^spacing-(\d+)$/))==null?void 0:e[1])??t;return _.has(o)?`var(--uds-spacing-${o})`:r}function C(r){if(typeof r!="number"||!Number.isFinite(r))return;const t=Math.floor(r);return t>0?t:void 0}const E=h.forwardRef(function({as:t="div",direction:o="row",justifyContent:e,alignItems:l,appearance:f="full",itemsPerRow:a,wrap:g=!1,gap:c,fullWidth:d=!1,inline:v=!1,className:S,style:n,children:R,...$},z){const w=C(a),m=o==="row"&&w!==void 0,A=j(m?!0:g),G=String(c).trim()==="auto",L=q(f),b=["uds-flex",`uds-flex--direction-${o}`,`uds-flex--appearance-${u(L)}`,e&&`uds-flex--justify-${u(e)}`,l&&`uds-flex--align-${u(l)}`,`uds-flex--wrap-${u(A)}`,v&&"uds-flex--inline",d&&"uds-flex--full-width",d&&"uds-flex--span",m&&"uds-flex--items-per-row",G&&"uds-flex--gap-auto",S].filter(Boolean).join(" "),i={},N=B(c),P=(n==null?void 0:n.gap)!=null;return c!=null&&!P&&(i.gap=N),m&&(i["--uds-flex-items-per-row"]=String(w)),d&&(n==null?void 0:n.width)==null&&(i.width="100%"),p(t,{ref:z,className:b,style:{...i,...n},...$,children:R})}),s=h.forwardRef(function({as:t="div",className:o,children:e,...l},f){const a=["uds-flex__full",o].filter(Boolean).join(" ");return p(t,{ref:f,className:a,...l,children:e})}),x=E;x.Fill=s;x.Full=s;const F=x;F.Fill=s;F.Full=s;export{F as Flex,x as Layout};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react/jsx-runtime");;/* empty css */const r="uds-link";function $({appearance:i="primary",underline:s="always",disabled:e=!1,className:l="",target:t,rel:a,href:u,onClick:n,tabIndex:c,children:f,...p}){const d=[r,`${r}--${i}`,`${r}--underline-${s}`,e&&`${r}--disabled`,l].filter(Boolean).join(" "),m=t==="_blank"?[a,"noopener","noreferrer"].filter(Boolean).join(" "):a,j=o=>{if(e){o.preventDefault(),o.stopPropagation();return}n==null||n(o)};return S.jsx("a",{className:d,href:e?void 0:u,target:t,rel:m||void 0,"aria-disabled":e||void 0,tabIndex:e?-1:c,onClick:j,...p,children:f})}exports.Link=$;
@@ -0,0 +1 @@
1
+ import{jsx as $}from"react/jsx-runtime";/* empty css */const r="uds-link";function B({appearance:t="primary",underline:l="always",disabled:o=!1,className:s="",target:a,rel:i,href:f,onClick:n,tabIndex:p,children:c,...m}){const u=[r,`${r}--${t}`,`${r}--underline-${l}`,o&&`${r}--disabled`,s].filter(Boolean).join(" "),d=a==="_blank"?[i,"noopener","noreferrer"].filter(Boolean).join(" "):i;return $("a",{className:u,href:o?void 0:f,target:a,rel:d||void 0,"aria-disabled":o||void 0,tabIndex:o?-1:p,onClick:e=>{if(o){e.preventDefault(),e.stopPropagation();return}n==null||n(e)},...m,children:c})}export{B as Link};
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),n=require("react");;/* empty css */const A=require("react-router-dom"),p=require("../Icon/Icon.cjs"),te=require("../Avatar/Avatar.cjs"),b=require("../Button/Button.cjs"),le=require("../TextInput/TextInput.cjs"),P=require("../Branding/Branding.cjs"),ie=require("../Dropdown/Dropdown.cjs"),ce=require("../Toggle/Toggle.cjs"),re=require("../ActionMenu/ActionMenu.cjs"),ue=require("../Text/Text.cjs"),oe=t=>{if(typeof t!="object"||t===null)return!1;const l=t;return typeof l.label=="string"&&typeof l.path=="string"},de=t=>{if(typeof t!="object"||t===null)return!1;const l=t;return!(typeof l.label!="string"||typeof l.icon!="string"||l.path!==void 0&&typeof l.path!="string"||l.children!==void 0&&(!Array.isArray(l.children)||!l.children.every(oe)))},me=t=>t==="dark"?"dark":"light";function B({title:t,className:l="",navItems:q=[],brands:w=[],activeBrand:z,onBrandChange:S,activeMode:R,onModeChange:h,showBrand:F=!0,showSearch:G=!1,showBrandSwitcher:J=!0,showNav:U=!0,showModeToggle:V=!0,showUser:H=!0,userName:g="Jane Doe",userInitials:K="JD",userAvatarSrc:Q,accountMenuItems:y=[],identity:W="design-system",defaultExpanded:X=!0}){var O;const x=n.useContext(A.UNSAFE_LocationContext),N=!!x,d=((O=x==null?void 0:x.location)==null?void 0:O.pathname)??(typeof window<"u"?window.location.pathname:"/"),[I,k]=n.useState({}),[i,T]=n.useState(X),[v,Y]=n.useState(24),u=n.useMemo(()=>q.filter(de),[q]),C=n.useMemo(()=>w.filter(a=>typeof a=="string"),[w]),Z=typeof t=="string"?t:"Menu",M=typeof z=="string"?z:C[0],D=M==="default"?"design-system":M??W,m=me(R),ee=n.useMemo(()=>Array.isArray(y)?y:[],[y]);n.useEffect(()=>{if(u.length<=v)return;const a=()=>Y(u.length);if(typeof requestIdleCallback=="function"){const r=requestIdleCallback(a);return()=>cancelIdleCallback(r)}const s=window.setTimeout(a,50);return()=>window.clearTimeout(s)},[u.length,v]),n.useEffect(()=>{const a=u.filter(s=>Array.isArray(s.children)&&s.children.some(r=>d===r.path)).map(s=>s.label);a.length!==0&&k(s=>{let r=!1;const o={...s};return a.forEach(j=>{o[j]||(o[j]=!0,r=!0)}),r?o:s})},[u,d]);const $=n.useCallback(a=>{k(s=>({...s,[a]:!s[a]}))},[]),ae=n.useCallback(()=>T(a=>!a),[]),_=n.useCallback(()=>T(!0),[]),ne=n.useCallback(a=>{i||(a.preventDefault(),a.stopPropagation(),_())},[_,i]),E=n.useCallback(a=>{if(!i){_(),k(s=>({...s,[a]:!0}));return}$(a)},[_,i,$]),f=n.useCallback(()=>{i||_()},[_,i]),L=n.useCallback(a=>h==null?void 0:h(a),[h]),se=n.useMemo(()=>u.slice(0,v).map(a=>{const s=a.children??[],r=s.length>0,o=I[a.label],j=i&&o;return r?e.jsxs("div",{className:`uds-menu_nav__item uds-menu_nav__item--accordion${o?" uds-menu_nav__item--open":""}`,children:[e.jsxs("button",{type:"button",className:"uds-menu_nav__item-link",onClick:()=>E(a.label),title:a.label,children:[e.jsx("span",{className:"uds-menu_nav__item-icon",children:e.jsx(p.default,{name:a.icon,size:24,appearance:"duotone"})}),e.jsx("div",{className:"uds-menu_nav__item-label",children:a.label}),e.jsx("span",{className:`uds-menu_nav__item-caret${o?" uds-menu_nav__item-caret--open":""}`,children:e.jsx(p.default,{name:"CaretDown",size:16})})]}),j?e.jsx("div",{className:"uds-menu_nav__children uds-menu_nav__children--open",children:s.map(c=>N?e.jsx(A.Link,{className:`uds-menu_nav__child-link${d===c.path?" uds-menu_nav__child-link--active":""}`,to:c.path,onClick:f,title:c.label,children:c.label},c.path):e.jsx("a",{className:`uds-menu_nav__child-link${d===c.path?" uds-menu_nav__child-link--active":""}`,href:c.path,onClick:f,title:c.label,children:c.label},c.path))}):null]},a.label):e.jsx("div",{className:`uds-menu_nav__item${d===a.path?" uds-menu_nav__item--active":""}`,children:N?e.jsxs(A.Link,{className:"uds-menu_nav__item-link",to:a.path??"/",onClick:f,title:a.label,children:[e.jsx("span",{className:"uds-menu_nav__item-icon",children:e.jsx(p.default,{name:a.icon,size:24,appearance:"duotone"})}),e.jsx("div",{className:"uds-menu_nav__item-label",children:a.label})]}):e.jsxs("a",{className:"uds-menu_nav__item-link",href:a.path??"/",onClick:f,title:a.label,children:[e.jsx("span",{className:"uds-menu_nav__item-icon",children:e.jsx(p.default,{name:a.icon,size:24,appearance:"duotone"})}),e.jsx("div",{className:"uds-menu_nav__item-label",children:a.label})]})},a.path??a.label)}),[u,v,I,i,E,f,N,d]);return e.jsxs("aside",{className:`uds-menu${i?" uds-menu--expanded":""} ${l}`,"aria-label":Z,onClickCapture:ne,children:[F&&e.jsxs("div",{className:"uds-menu_brand",children:[e.jsx(b.default,{appearance:"text",icon:"List",size:"default",label:i?"Collapse menu":"Expand menu",layout:"icon-only","aria-label":i?"Collapse menu":"Expand menu",className:"uds-menu_brand__toggle",onClick:ae}),e.jsx("div",{className:"uds-menu_brand__symbol",children:e.jsx(P.default,{brand:D,symbol:!0})}),e.jsx("div",{className:"uds-menu_brand__full",children:e.jsx(P.default,{brand:D})})]}),G&&e.jsxs("div",{className:"uds-menu_search",children:[e.jsx(b.default,{appearance:"text",icon:"MagnifyingGlass",label:"Search",layout:"icon-only","aria-label":"Search",className:"uds-menu_search__button"}),e.jsx("div",{className:"uds-menu_search__field",children:e.jsx(le.default,{type:"text",placeholder:"Search",icon:"MagnifyingGlass",iconPosition:"right",className:"uds-menu_search__input",size:"compact"})})]}),J&&C.length>0&&S&&e.jsxs("div",{className:"uds-menu_brands",children:[e.jsx(b.default,{appearance:"text",icon:"PlusCircle",label:"Brand",layout:"icon-only","aria-label":"Switch brand",className:"uds-menu_brands__button"}),e.jsx("div",{className:"uds-menu_brands__dropdown",children:e.jsx(ie.default,{options:C.map(a=>({value:a,label:a})),value:M,onChange:a=>{typeof a=="string"&&S(a)},placeholder:"Select brand",placement:"bottom-start",size:"compact"})})]}),U&&e.jsx("nav",{className:"uds-menu_nav",children:se}),V&&h&&e.jsx("div",{className:"uds-menu_footer",children:e.jsxs("div",{className:"uds-menu_mode",children:[e.jsx(b.default,{appearance:"text",icon:m==="light"?"Sun":"Moon",label:m==="light"?"Light mode":"Dark mode",layout:"icon-only",size:"default","aria-label":"Toggle light/dark mode",className:"uds-menu_mode__button",onClick:()=>L(m==="light"?"dark":"light")}),e.jsxs("div",{className:"uds-menu_mode__controls",children:[e.jsx(p.default,{name:m==="light"?"Sun":"Moon",size:20,appearance:"duotone"}),e.jsx("span",{className:"uds-menu_mode__label",children:m==="light"?"Light":"Dark"}),e.jsx(ce.default,{checked:m==="dark",onChange:a=>L(a?"dark":"light"),className:"uds-menu_mode__toggle"})]})]})}),H&&e.jsxs("div",{className:"uds-menu_account",children:[e.jsx(te.default,{src:Q,initials:K,alt:g?`${g} avatar`:"User avatar",size:"default"}),i&&e.jsxs(e.Fragment,{children:[e.jsx(ue.Text,{as:"p",variant:"body-16",weight:"semibold",leading:"regular",className:"uds-menu_account__name",children:g}),e.jsx(re.default,{placement:"top-start",items:ee,trigger:e.jsx(b.default,{appearance:"text",icon:e.jsx(p.default,{name:"DotsThreeVertical",appearance:"bold"}),label:"Account Menu",layout:"icon-only","aria-label":"Account menu"})})]})]})]})}B.defaultProps={title:"Menu"};const _e=n.memo(B);exports.default=_e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react/jsx-runtime"),t=require("react");;/* empty css */const I=require("react-router-dom"),h=require("../Icon/Icon.cjs"),ce=require("../Avatar/Avatar.cjs"),j=require("../Button/Button.cjs"),oe=require("../TextInput/TextInput.cjs"),B=require("../Branding/Branding.cjs"),ue=require("../Dropdown/Dropdown.cjs"),de=require("../Toggle/Toggle.cjs"),me=require("../ActionMenu/ActionMenu.cjs"),_e=require("../Text/Text.cjs"),F=n=>{if(!n)return"/";const l=n.replace(/\/+$/,"");return l.length===0?"/":l},u=(n,l)=>{const f=F(n),b=F(l);return f===b||f.startsWith(`${b}/`)},pe=n=>n.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),he=n=>{if(typeof n!="object"||n===null)return!1;const l=n;return typeof l.label=="string"&&typeof l.path=="string"},fe=n=>{if(typeof n!="object"||n===null)return!1;const l=n;return!(typeof l.label!="string"||typeof l.icon!="string"||l.path!==void 0&&typeof l.path!="string"||l.children!==void 0&&(!Array.isArray(l.children)||!l.children.every(he)))},be=n=>n==="dark"?"dark":"light";function G({title:n,className:l="",navItems:f=[],brands:b=[],activeBrand:S,onBrandChange:$,activeMode:J,onModeChange:v,showBrand:U=!0,showSearch:V=!1,showBrandSwitcher:W=!0,showNav:H=!0,showModeToggle:K=!0,showUser:Q=!0,userName:C="Jane Doe",userInitials:X="JD",userAvatarSrc:Y,accountMenuItems:A=[],identity:Z="design-system",defaultExpanded:ee=!0}){var R;const y=t.useContext(I.UNSAFE_LocationContext),M=!!y,c=((R=y==null?void 0:y.location)==null?void 0:R.pathname)??(typeof window<"u"?window.location.pathname:"/"),[D,q]=t.useState({}),[r,T]=t.useState(ee),[N,ae]=t.useState(24),d=t.useMemo(()=>f.filter(fe),[f]),z=t.useMemo(()=>b.filter(e=>typeof e=="string"),[b]),ne=typeof n=="string"?n:"Menu",w=typeof S=="string"?S:z[0],L=w==="default"?"design-system":w??Z,_=be(J),se=t.useMemo(()=>Array.isArray(A)?A:[],[A]);t.useEffect(()=>{if(d.length<=N)return;const e=()=>ae(d.length);if(typeof requestIdleCallback=="function"){const o=requestIdleCallback(e);return()=>cancelIdleCallback(o)}const s=window.setTimeout(e,50);return()=>window.clearTimeout(s)},[d.length,N]),t.useEffect(()=>{const e=d.filter(s=>Array.isArray(s.children)&&s.children.some(o=>c===o.path)).map(s=>s.label);e.length!==0&&q(s=>{let o=!1;const m={...s};return e.forEach(g=>{m[g]||(m[g]=!0,o=!0)}),o?m:s})},[d,c]);const P=t.useCallback(e=>{q(s=>({...s,[e]:!s[e]}))},[]),te=t.useCallback(()=>T(e=>!e),[]),p=t.useCallback(()=>T(!0),[]),le=t.useCallback(e=>{r||(e.preventDefault(),e.stopPropagation(),p())},[p,r]),E=t.useCallback(e=>{if(!r){p(),q(s=>({...s,[e]:!0}));return}P(e)},[p,r,P]),x=t.useCallback(()=>{r||p()},[p,r]),O=t.useCallback(e=>v==null?void 0:v(e),[v]),re=t.useMemo(()=>d.slice(0,N).map(e=>{const s=e.children??[],o=s.length>0,m=D[e.label],g=r&&m,ie=o&&s.some(k=>u(c,k.path));if(o){const k=`uds-menu-accordion-${pe(e.label)}`;return a.jsxs("div",{className:`uds-menu_nav__item uds-menu_nav__item--accordion${m?" uds-menu_nav__item--open":""}${ie?" uds-menu_nav__item--active":""}`,children:[a.jsxs("button",{type:"button",className:"uds-menu_nav__item-link",onClick:()=>E(e.label),title:e.label,"aria-expanded":g,"aria-controls":k,children:[a.jsx("span",{className:"uds-menu_nav__item-icon",children:a.jsx(h.default,{name:e.icon,size:24,appearance:"duotone"})}),a.jsx("div",{className:"uds-menu_nav__item-label",children:e.label}),a.jsx("span",{className:`uds-menu_nav__item-caret${m?" uds-menu_nav__item-caret--open":""}`,children:a.jsx(h.default,{name:"CaretDown",size:16})})]}),g?a.jsx("div",{id:k,className:"uds-menu_nav__children uds-menu_nav__children--open",children:s.map(i=>M?a.jsx(I.Link,{className:`uds-menu_nav__child-link${u(c,i.path)?" uds-menu_nav__child-link--active":""}`,to:i.path,onClick:x,title:i.label,"aria-current":u(c,i.path)?"page":void 0,children:i.label},i.path):a.jsx("a",{className:`uds-menu_nav__child-link${u(c,i.path)?" uds-menu_nav__child-link--active":""}`,href:i.path,onClick:x,title:i.label,"aria-current":u(c,i.path)?"page":void 0,children:i.label},i.path))}):null]},e.label)}return a.jsx("div",{className:`uds-menu_nav__item${typeof e.path=="string"&&u(c,e.path)?" uds-menu_nav__item--active":""}`,children:M?a.jsxs(I.Link,{className:"uds-menu_nav__item-link",to:e.path??"/",onClick:x,title:e.label,"aria-current":typeof e.path=="string"&&u(c,e.path)?"page":void 0,children:[a.jsx("span",{className:"uds-menu_nav__item-icon",children:a.jsx(h.default,{name:e.icon,size:24,appearance:"duotone"})}),a.jsx("div",{className:"uds-menu_nav__item-label",children:e.label})]}):a.jsxs("a",{className:"uds-menu_nav__item-link",href:e.path??"/",onClick:x,title:e.label,"aria-current":typeof e.path=="string"&&u(c,e.path)?"page":void 0,children:[a.jsx("span",{className:"uds-menu_nav__item-icon",children:a.jsx(h.default,{name:e.icon,size:24,appearance:"duotone"})}),a.jsx("div",{className:"uds-menu_nav__item-label",children:e.label})]})},e.path??e.label)}),[d,N,D,r,E,x,M,c]);return a.jsxs("aside",{className:`uds-menu${r?" uds-menu--expanded":""} ${l}`,"aria-label":ne,onClickCapture:le,children:[U&&a.jsxs("div",{className:"uds-menu_brand",children:[a.jsx(j.default,{appearance:"text",icon:"List",size:"default",label:r?"Collapse menu":"Expand menu",layout:"icon-only","aria-label":r?"Collapse menu":"Expand menu",className:"uds-menu_brand__toggle",onClick:te}),a.jsx("div",{className:"uds-menu_brand__symbol",children:a.jsx(B.default,{brand:L,symbol:!0})}),a.jsx("div",{className:"uds-menu_brand__full",children:a.jsx(B.default,{brand:L})})]}),V&&a.jsxs("div",{className:"uds-menu_search",children:[a.jsx(j.default,{appearance:"text",icon:"MagnifyingGlass",label:"Search",layout:"icon-only","aria-label":"Search",className:"uds-menu_search__button"}),a.jsx("div",{className:"uds-menu_search__field",children:a.jsx(oe.default,{type:"text",placeholder:"Search",icon:"MagnifyingGlass",iconPosition:"right",className:"uds-menu_search__input",size:"compact"})})]}),W&&z.length>0&&$&&a.jsxs("div",{className:"uds-menu_brands",children:[a.jsx(j.default,{appearance:"text",icon:"PlusCircle",label:"Brand",layout:"icon-only","aria-label":"Switch brand",className:"uds-menu_brands__button"}),a.jsx("div",{className:"uds-menu_brands__dropdown",children:a.jsx(ue.default,{options:z.map(e=>({value:e,label:e})),value:w,onChange:e=>{typeof e=="string"&&$(e)},placeholder:"Select brand",placement:"bottom-start",size:"compact"})})]}),H&&a.jsx("nav",{className:"uds-menu_nav",children:re}),K&&v&&a.jsx("div",{className:"uds-menu_footer",children:a.jsxs("div",{className:"uds-menu_mode",children:[a.jsx(j.default,{appearance:"text",icon:_==="light"?"Sun":"Moon",label:_==="light"?"Light mode":"Dark mode",layout:"icon-only",size:"default","aria-label":"Toggle light/dark mode",className:"uds-menu_mode__button",onClick:()=>O(_==="light"?"dark":"light")}),a.jsxs("div",{className:"uds-menu_mode__controls",children:[a.jsx(h.default,{name:_==="light"?"Sun":"Moon",size:20,appearance:"duotone"}),a.jsx("span",{className:"uds-menu_mode__label",children:_==="light"?"Light":"Dark"}),a.jsx(de.default,{checked:_==="dark",onChange:e=>O(e?"dark":"light"),className:"uds-menu_mode__toggle"})]})]})}),Q&&a.jsxs("div",{className:"uds-menu_account",children:[a.jsx(ce.default,{src:Y,initials:X,alt:C?`${C} avatar`:"User avatar",size:"default"}),r&&a.jsxs(a.Fragment,{children:[a.jsx(_e.Text,{as:"p",variant:"body-16",weight:"semibold",leading:"regular",className:"uds-menu_account__name",children:C}),a.jsx(me.default,{placement:"top-start",items:se,trigger:a.jsx(j.default,{appearance:"text",icon:a.jsx(h.default,{name:"DotsThreeVertical",appearance:"bold"}),label:"Account Menu",layout:"icon-only","aria-label":"Account menu"})})]})]})]})}G.defaultProps={title:"Menu"};const ve=t.memo(G);exports.default=ve;
@@ -1 +1 @@
1
- import{jsxs as i,jsx as n,Fragment as ce}from"react/jsx-runtime";import R,{useState as I,useMemo as k,useEffect as F,useCallback as u}from"react";/* empty css */import{UNSAFE_LocationContext as de,Link as G}from"react-router-dom";import h from"../Icon/Icon.js";import ue from"../Avatar/Avatar.js";import v from"../Button/Button.js";import me from"../TextInput/TextInput.js";import J from"../Branding/Branding.js";import _e from"../Dropdown/Dropdown.js";import pe from"../Toggle/Toggle.js";import he from"../ActionMenu/ActionMenu.js";import{Text as fe}from"../Text/Text.js";const be=t=>{if(typeof t!="object"||t===null)return!1;const l=t;return typeof l.label=="string"&&typeof l.path=="string"},ve=t=>{if(typeof t!="object"||t===null)return!1;const l=t;return!(typeof l.label!="string"||typeof l.icon!="string"||l.path!==void 0&&typeof l.path!="string"||l.children!==void 0&&(!Array.isArray(l.children)||!l.children.every(be)))},ge=t=>t==="dark"?"dark":"light";function U({title:t,className:l="",navItems:S=[],brands:D=[],activeBrand:$,onBrandChange:T,activeMode:V,onModeChange:f,showBrand:H=!0,showSearch:K=!1,showBrandSwitcher:Q=!0,showNav:W=!0,showModeToggle:X=!0,showUser:Y=!0,userName:C="Jane Doe",userInitials:Z="JD",userAvatarSrc:ee,accountMenuItems:A=[],identity:ne="design-system",defaultExpanded:ae=!0}){var q;const g=R.useContext(de),x=!!g,m=((q=g==null?void 0:g.location)==null?void 0:q.pathname)??(typeof window<"u"?window.location.pathname:"/"),[E,M]=I({}),[s,L]=I(ae),[N,te]=I(24),c=k(()=>S.filter(ve),[S]),w=k(()=>D.filter(e=>typeof e=="string"),[D]),le=typeof t=="string"?t:"Menu",z=typeof $=="string"?$:w[0],j=z==="default"?"design-system":z??ne,_=ge(V),se=k(()=>Array.isArray(A)?A:[],[A]);F(()=>{if(c.length<=N)return;const e=()=>te(c.length);if(typeof requestIdleCallback=="function"){const o=requestIdleCallback(e);return()=>cancelIdleCallback(o)}const a=window.setTimeout(e,50);return()=>window.clearTimeout(a)},[c.length,N]),F(()=>{const e=c.filter(a=>Array.isArray(a.children)&&a.children.some(o=>m===o.path)).map(a=>a.label);e.length!==0&&M(a=>{let o=!1;const d={...a};return e.forEach(y=>{d[y]||(d[y]=!0,o=!0)}),o?d:a})},[c,m]);const B=u(e=>{M(a=>({...a,[e]:!a[e]}))},[]),ie=u(()=>L(e=>!e),[]),p=u(()=>L(!0),[]),re=u(e=>{s||(e.preventDefault(),e.stopPropagation(),p())},[p,s]),O=u(e=>{if(!s){p(),M(a=>({...a,[e]:!0}));return}B(e)},[p,s,B]),b=u(()=>{s||p()},[p,s]),P=u(e=>f==null?void 0:f(e),[f]),oe=k(()=>c.slice(0,N).map(e=>{const a=e.children??[],o=a.length>0,d=E[e.label],y=s&&d;return o?i("div",{className:`uds-menu_nav__item uds-menu_nav__item--accordion${d?" uds-menu_nav__item--open":""}`,children:[i("button",{type:"button",className:"uds-menu_nav__item-link",onClick:()=>O(e.label),title:e.label,children:[n("span",{className:"uds-menu_nav__item-icon",children:n(h,{name:e.icon,size:24,appearance:"duotone"})}),n("div",{className:"uds-menu_nav__item-label",children:e.label}),n("span",{className:`uds-menu_nav__item-caret${d?" uds-menu_nav__item-caret--open":""}`,children:n(h,{name:"CaretDown",size:16})})]}),y?n("div",{className:"uds-menu_nav__children uds-menu_nav__children--open",children:a.map(r=>x?n(G,{className:`uds-menu_nav__child-link${m===r.path?" uds-menu_nav__child-link--active":""}`,to:r.path,onClick:b,title:r.label,children:r.label},r.path):n("a",{className:`uds-menu_nav__child-link${m===r.path?" uds-menu_nav__child-link--active":""}`,href:r.path,onClick:b,title:r.label,children:r.label},r.path))}):null]},e.label):n("div",{className:`uds-menu_nav__item${m===e.path?" uds-menu_nav__item--active":""}`,children:x?i(G,{className:"uds-menu_nav__item-link",to:e.path??"/",onClick:b,title:e.label,children:[n("span",{className:"uds-menu_nav__item-icon",children:n(h,{name:e.icon,size:24,appearance:"duotone"})}),n("div",{className:"uds-menu_nav__item-label",children:e.label})]}):i("a",{className:"uds-menu_nav__item-link",href:e.path??"/",onClick:b,title:e.label,children:[n("span",{className:"uds-menu_nav__item-icon",children:n(h,{name:e.icon,size:24,appearance:"duotone"})}),n("div",{className:"uds-menu_nav__item-label",children:e.label})]})},e.path??e.label)}),[c,N,E,s,O,b,x,m]);return i("aside",{className:`uds-menu${s?" uds-menu--expanded":""} ${l}`,"aria-label":le,onClickCapture:re,children:[H&&i("div",{className:"uds-menu_brand",children:[n(v,{appearance:"text",icon:"List",size:"default",label:s?"Collapse menu":"Expand menu",layout:"icon-only","aria-label":s?"Collapse menu":"Expand menu",className:"uds-menu_brand__toggle",onClick:ie}),n("div",{className:"uds-menu_brand__symbol",children:n(J,{brand:j,symbol:!0})}),n("div",{className:"uds-menu_brand__full",children:n(J,{brand:j})})]}),K&&i("div",{className:"uds-menu_search",children:[n(v,{appearance:"text",icon:"MagnifyingGlass",label:"Search",layout:"icon-only","aria-label":"Search",className:"uds-menu_search__button"}),n("div",{className:"uds-menu_search__field",children:n(me,{type:"text",placeholder:"Search",icon:"MagnifyingGlass",iconPosition:"right",className:"uds-menu_search__input",size:"compact"})})]}),Q&&w.length>0&&T&&i("div",{className:"uds-menu_brands",children:[n(v,{appearance:"text",icon:"PlusCircle",label:"Brand",layout:"icon-only","aria-label":"Switch brand",className:"uds-menu_brands__button"}),n("div",{className:"uds-menu_brands__dropdown",children:n(_e,{options:w.map(e=>({value:e,label:e})),value:z,onChange:e=>{typeof e=="string"&&T(e)},placeholder:"Select brand",placement:"bottom-start",size:"compact"})})]}),W&&n("nav",{className:"uds-menu_nav",children:oe}),X&&f&&n("div",{className:"uds-menu_footer",children:i("div",{className:"uds-menu_mode",children:[n(v,{appearance:"text",icon:_==="light"?"Sun":"Moon",label:_==="light"?"Light mode":"Dark mode",layout:"icon-only",size:"default","aria-label":"Toggle light/dark mode",className:"uds-menu_mode__button",onClick:()=>P(_==="light"?"dark":"light")}),i("div",{className:"uds-menu_mode__controls",children:[n(h,{name:_==="light"?"Sun":"Moon",size:20,appearance:"duotone"}),n("span",{className:"uds-menu_mode__label",children:_==="light"?"Light":"Dark"}),n(pe,{checked:_==="dark",onChange:e=>P(e?"dark":"light"),className:"uds-menu_mode__toggle"})]})]})}),Y&&i("div",{className:"uds-menu_account",children:[n(ue,{src:ee,initials:Z,alt:C?`${C} avatar`:"User avatar",size:"default"}),s&&i(ce,{children:[n(fe,{as:"p",variant:"body-16",weight:"semibold",leading:"regular",className:"uds-menu_account__name",children:C}),n(he,{placement:"top-start",items:se,trigger:n(v,{appearance:"text",icon:n(h,{name:"DotsThreeVertical",appearance:"bold"}),label:"Account Menu",layout:"icon-only","aria-label":"Account menu"})})]})]})]})}U.defaultProps={title:"Menu"};const Te=R.memo(U);export{Te as default};
1
+ import{jsxs as i,jsx as n,Fragment as pe}from"react/jsx-runtime";import W,{useState as L,useMemo as M,useEffect as G,useCallback as p}from"react";/* empty css */import{UNSAFE_LocationContext as _e,Link as J}from"react-router-dom";import f from"../Icon/Icon.js";import he from"../Avatar/Avatar.js";import k from"../Button/Button.js";import fe from"../TextInput/TextInput.js";import U from"../Branding/Branding.js";import ve from"../Dropdown/Dropdown.js";import be from"../Toggle/Toggle.js";import ge from"../ActionMenu/ActionMenu.js";import{Text as ye}from"../Text/Text.js";const V=a=>{if(!a)return"/";const s=a.replace(/\/+$/,"");return s.length===0?"/":s},d=(a,s)=>{const v=V(a),b=V(s);return v===b||v.startsWith(`${b}/`)},Ne=a=>a.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),ke=a=>{if(typeof a!="object"||a===null)return!1;const s=a;return typeof s.label=="string"&&typeof s.path=="string"},Ce=a=>{if(typeof a!="object"||a===null)return!1;const s=a;return!(typeof s.label!="string"||typeof s.icon!="string"||s.path!==void 0&&typeof s.path!="string"||s.children!==void 0&&(!Array.isArray(s.children)||!s.children.every(ke)))},Ae=a=>a==="dark"?"dark":"light";function H({title:a,className:s="",navItems:v=[],brands:b=[],activeBrand:P,onBrandChange:T,activeMode:K,onModeChange:g,showBrand:Q=!0,showSearch:X=!1,showBrandSwitcher:Y=!0,showNav:Z=!0,showModeToggle:ee=!0,showUser:ne=!0,userName:z="Jane Doe",userInitials:ae="JD",userAvatarSrc:te,accountMenuItems:w=[],identity:se="design-system",defaultExpanded:le=!0}){var F;const C=W.useContext(_e),I=!!C,o=((F=C==null?void 0:C.location)==null?void 0:F.pathname)??(typeof window<"u"?window.location.pathname:"/"),[E,$]=L({}),[l,j]=L(le),[A,re]=L(24),u=M(()=>v.filter(Ce),[v]),D=M(()=>b.filter(e=>typeof e=="string"),[b]),ie=typeof a=="string"?a:"Menu",S=typeof P=="string"?P:D[0],B=S==="default"?"design-system":S??se,_=Ae(K),oe=M(()=>Array.isArray(w)?w:[],[w]);G(()=>{if(u.length<=A)return;const e=()=>re(u.length);if(typeof requestIdleCallback=="function"){const c=requestIdleCallback(e);return()=>cancelIdleCallback(c)}const t=window.setTimeout(e,50);return()=>window.clearTimeout(t)},[u.length,A]),G(()=>{const e=u.filter(t=>Array.isArray(t.children)&&t.children.some(c=>o===c.path)).map(t=>t.label);e.length!==0&&$(t=>{let c=!1;const m={...t};return e.forEach(N=>{m[N]||(m[N]=!0,c=!0)}),c?m:t})},[u,o]);const O=p(e=>{$(t=>({...t,[e]:!t[e]}))},[]),ce=p(()=>j(e=>!e),[]),h=p(()=>j(!0),[]),de=p(e=>{l||(e.preventDefault(),e.stopPropagation(),h())},[h,l]),R=p(e=>{if(!l){h(),$(t=>({...t,[e]:!0}));return}O(e)},[h,l,O]),y=p(()=>{l||h()},[h,l]),q=p(e=>g==null?void 0:g(e),[g]),ue=M(()=>u.slice(0,A).map(e=>{const t=e.children??[],c=t.length>0,m=E[e.label],N=l&&m,me=c&&t.some(x=>d(o,x.path));if(c){const x=`uds-menu-accordion-${Ne(e.label)}`;return i("div",{className:`uds-menu_nav__item uds-menu_nav__item--accordion${m?" uds-menu_nav__item--open":""}${me?" uds-menu_nav__item--active":""}`,children:[i("button",{type:"button",className:"uds-menu_nav__item-link",onClick:()=>R(e.label),title:e.label,"aria-expanded":N,"aria-controls":x,children:[n("span",{className:"uds-menu_nav__item-icon",children:n(f,{name:e.icon,size:24,appearance:"duotone"})}),n("div",{className:"uds-menu_nav__item-label",children:e.label}),n("span",{className:`uds-menu_nav__item-caret${m?" uds-menu_nav__item-caret--open":""}`,children:n(f,{name:"CaretDown",size:16})})]}),N?n("div",{id:x,className:"uds-menu_nav__children uds-menu_nav__children--open",children:t.map(r=>I?n(J,{className:`uds-menu_nav__child-link${d(o,r.path)?" uds-menu_nav__child-link--active":""}`,to:r.path,onClick:y,title:r.label,"aria-current":d(o,r.path)?"page":void 0,children:r.label},r.path):n("a",{className:`uds-menu_nav__child-link${d(o,r.path)?" uds-menu_nav__child-link--active":""}`,href:r.path,onClick:y,title:r.label,"aria-current":d(o,r.path)?"page":void 0,children:r.label},r.path))}):null]},e.label)}return n("div",{className:`uds-menu_nav__item${typeof e.path=="string"&&d(o,e.path)?" uds-menu_nav__item--active":""}`,children:I?i(J,{className:"uds-menu_nav__item-link",to:e.path??"/",onClick:y,title:e.label,"aria-current":typeof e.path=="string"&&d(o,e.path)?"page":void 0,children:[n("span",{className:"uds-menu_nav__item-icon",children:n(f,{name:e.icon,size:24,appearance:"duotone"})}),n("div",{className:"uds-menu_nav__item-label",children:e.label})]}):i("a",{className:"uds-menu_nav__item-link",href:e.path??"/",onClick:y,title:e.label,"aria-current":typeof e.path=="string"&&d(o,e.path)?"page":void 0,children:[n("span",{className:"uds-menu_nav__item-icon",children:n(f,{name:e.icon,size:24,appearance:"duotone"})}),n("div",{className:"uds-menu_nav__item-label",children:e.label})]})},e.path??e.label)}),[u,A,E,l,R,y,I,o]);return i("aside",{className:`uds-menu${l?" uds-menu--expanded":""} ${s}`,"aria-label":ie,onClickCapture:de,children:[Q&&i("div",{className:"uds-menu_brand",children:[n(k,{appearance:"text",icon:"List",size:"default",label:l?"Collapse menu":"Expand menu",layout:"icon-only","aria-label":l?"Collapse menu":"Expand menu",className:"uds-menu_brand__toggle",onClick:ce}),n("div",{className:"uds-menu_brand__symbol",children:n(U,{brand:B,symbol:!0})}),n("div",{className:"uds-menu_brand__full",children:n(U,{brand:B})})]}),X&&i("div",{className:"uds-menu_search",children:[n(k,{appearance:"text",icon:"MagnifyingGlass",label:"Search",layout:"icon-only","aria-label":"Search",className:"uds-menu_search__button"}),n("div",{className:"uds-menu_search__field",children:n(fe,{type:"text",placeholder:"Search",icon:"MagnifyingGlass",iconPosition:"right",className:"uds-menu_search__input",size:"compact"})})]}),Y&&D.length>0&&T&&i("div",{className:"uds-menu_brands",children:[n(k,{appearance:"text",icon:"PlusCircle",label:"Brand",layout:"icon-only","aria-label":"Switch brand",className:"uds-menu_brands__button"}),n("div",{className:"uds-menu_brands__dropdown",children:n(ve,{options:D.map(e=>({value:e,label:e})),value:S,onChange:e=>{typeof e=="string"&&T(e)},placeholder:"Select brand",placement:"bottom-start",size:"compact"})})]}),Z&&n("nav",{className:"uds-menu_nav",children:ue}),ee&&g&&n("div",{className:"uds-menu_footer",children:i("div",{className:"uds-menu_mode",children:[n(k,{appearance:"text",icon:_==="light"?"Sun":"Moon",label:_==="light"?"Light mode":"Dark mode",layout:"icon-only",size:"default","aria-label":"Toggle light/dark mode",className:"uds-menu_mode__button",onClick:()=>q(_==="light"?"dark":"light")}),i("div",{className:"uds-menu_mode__controls",children:[n(f,{name:_==="light"?"Sun":"Moon",size:20,appearance:"duotone"}),n("span",{className:"uds-menu_mode__label",children:_==="light"?"Light":"Dark"}),n(be,{checked:_==="dark",onChange:e=>q(e?"dark":"light"),className:"uds-menu_mode__toggle"})]})]})}),ne&&i("div",{className:"uds-menu_account",children:[n(he,{src:te,initials:ae,alt:z?`${z} avatar`:"User avatar",size:"default"}),l&&i(pe,{children:[n(ye,{as:"p",variant:"body-16",weight:"semibold",leading:"regular",className:"uds-menu_account__name",children:z}),n(ge,{placement:"top-start",items:oe,trigger:n(k,{appearance:"text",icon:n(f,{name:"DotsThreeVertical",appearance:"bold"}),label:"Account Menu",layout:"icon-only","aria-label":"Account menu"})})]})]})]})}H.defaultProps={title:"Menu"};const Be=W.memo(H);export{Be as default};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */const r=require("../Flex/Flex.cjs"),l=require("../Text/Text.cjs"),m=require("../Status/Status.cjs"),f=require("../Tag/Tag.cjs"),b=require("../Divider/Divider.cjs"),y=require("../Button/Button.cjs"),s=a=>a!=null&&a!==!1&&a!=="";function q({name:a,specialty:i,location:t,availability:F,startDate:d,statusLabel:o,statusVariant:x="green",avatarSrc:w,avatarInitials:T,tags:c=[],primaryAction:g,secondaryAction:u,className:p="",...j}){const h=g??e.jsx(y.default,{label:"Request Assignment",appearance:"ghost"}),v=["uds-providers-card",p].filter(Boolean).join(" ");return e.jsx("div",{className:v,...j,children:e.jsxs(r.Flex,{direction:"column",gap:"16",children:[e.jsxs(r.Flex,{className:"uds-providers-card__header",alignItems:"flex-start",justifyContent:"space-between",gap:"12",wrap:!0,children:[e.jsx(r.Flex,{className:"uds-providers-card__identity",alignItems:"flex-start",justifyContent:"flex-start",gap:"10",children:e.jsxs(r.Flex,{direction:"column",gap:"2",children:[e.jsx(l.Text,{as:"h3",variant:"body-16",weight:"bold",leading:"regular",children:a}),s(i)?e.jsx(l.Text,{as:"p",variant:"body-14",leading:"regular",style:{color:"var(--uds-text-secondary)"},children:i}):null,s(t)?e.jsx(l.Text,{as:"p",variant:"body-14",leading:"regular",children:t}):null,s(d)?e.jsxs(l.Text,{as:"p",variant:"body-14",leading:"regular",children:[e.jsx("strong",{children:"Start Date:"})," ",d]}):null]})}),s(o)?e.jsx(m.default,{label:o,variant:x}):null]}),c.length>0?e.jsxs(r.Flex,{className:"uds-providers-card__tags",direction:"column",gap:"8",wrap:!0,children:[e.jsx(l.Text,{as:"p",variant:"body-14",weight:"bold",leading:"regular",children:"Provider progress:"}),e.jsx(r.Flex,{direction:"row",gap:"8",wrap:!0,children:c.map(n=>e.jsx(f.default,{label:n.label,color:"neutral",solid:!0,appearance:"icon-left",icon:"CircleDashed"},`${n.label}-${n.color??"default"}`))})]}):null,e.jsxs(r.Flex,{direction:"column",gap:"8",children:[e.jsx(b.default,{}),e.jsxs(r.Flex,{className:"uds-providers-card__actions",alignItems:"center",gap:"8",wrap:!0,children:[h,u||null]})]})]})})}exports.ProvidersCard=q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");;/* empty css */const r=require("../Layout/Layout.cjs"),l=require("../Text/Text.cjs"),m=require("../Status/Status.cjs"),f=require("../Tag/Tag.cjs"),b=require("../Divider/Divider.cjs"),y=require("../Button/Button.cjs"),s=a=>a!=null&&a!==!1&&a!=="";function q({name:a,specialty:t,location:i,availability:w,startDate:d,statusLabel:o,statusVariant:x="green",avatarSrc:F,avatarInitials:T,tags:c=[],primaryAction:g,secondaryAction:u,className:p="",...j}){const h=g??e.jsx(y.default,{label:"Request Assignment",appearance:"ghost"}),v=["uds-providers-card",p].filter(Boolean).join(" ");return e.jsx("div",{className:v,...j,children:e.jsxs(r.Flex,{direction:"column",gap:"16",children:[e.jsxs(r.Flex,{className:"uds-providers-card__header",alignItems:"flex-start",justifyContent:"space-between",gap:"12",wrap:!0,children:[e.jsx(r.Flex,{className:"uds-providers-card__identity",alignItems:"flex-start",justifyContent:"flex-start",gap:"10",children:e.jsxs(r.Flex,{direction:"column",gap:"2",children:[e.jsx(l.Text,{as:"h3",variant:"body-16",weight:"bold",leading:"regular",children:a}),s(t)?e.jsx(l.Text,{as:"p",variant:"body-14",leading:"regular",style:{color:"var(--uds-text-secondary)"},children:t}):null,s(i)?e.jsx(l.Text,{as:"p",variant:"body-14",leading:"regular",children:i}):null,s(d)?e.jsxs(l.Text,{as:"p",variant:"body-14",leading:"regular",children:[e.jsx("strong",{children:"Start Date:"})," ",d]}):null]})}),s(o)?e.jsx(m.default,{label:o,variant:x}):null]}),c.length>0?e.jsxs(r.Flex,{className:"uds-providers-card__tags",direction:"column",gap:"8",wrap:!0,children:[e.jsx(l.Text,{as:"p",variant:"body-14",weight:"bold",leading:"regular",children:"Provider progress:"}),e.jsx(r.Flex,{direction:"row",gap:"8",wrap:!0,children:c.map(n=>e.jsx(f.default,{label:n.label,color:"neutral",solid:!0,appearance:"icon-left",icon:"CircleDashed"},`${n.label}-${n.color??"default"}`))})]}):null,e.jsxs(r.Flex,{direction:"column",gap:"8",children:[e.jsx(b.default,{}),e.jsxs(r.Flex,{className:"uds-providers-card__actions",alignItems:"center",gap:"8",wrap:!0,children:[h,u||null]})]})]})})}exports.ProvidersCard=q;