@flipdish/portal-library 7.1.0 → 7.2.0

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 (30) hide show
  1. package/dist/components/atoms/Badge/index.cjs.js +1 -1
  2. package/dist/components/atoms/Badge/index.cjs.js.map +1 -1
  3. package/dist/components/atoms/Badge/index.d.ts +7 -11
  4. package/dist/components/atoms/Badge/index.js +1 -1
  5. package/dist/components/atoms/Badge/index.js.map +1 -1
  6. package/dist/components/atoms/Tag/index.cjs.js +2 -0
  7. package/dist/components/atoms/Tag/index.cjs.js.map +1 -0
  8. package/dist/components/atoms/Tag/index.d.ts +47 -0
  9. package/dist/components/atoms/Tag/index.js +2 -0
  10. package/dist/components/atoms/Tag/index.js.map +1 -0
  11. package/dist/components/molecules/Autocomplete/index.cjs.js +1 -1
  12. package/dist/components/molecules/Autocomplete/index.cjs.js.map +1 -1
  13. package/dist/components/molecules/Autocomplete/index.d.ts +3 -1
  14. package/dist/components/molecules/Autocomplete/index.js +1 -1
  15. package/dist/components/molecules/Autocomplete/index.js.map +1 -1
  16. package/dist/themes/flipdishPublicTheme.cjs.js +1 -1
  17. package/dist/themes/flipdishPublicTheme.cjs.js.map +1 -1
  18. package/dist/themes/flipdishPublicTheme.js +1 -1
  19. package/dist/themes/flipdishPublicTheme.js.map +1 -1
  20. package/dist/themes/overrides/buttonBaseOverrides.cjs.js +2 -0
  21. package/dist/themes/overrides/buttonBaseOverrides.cjs.js.map +1 -0
  22. package/dist/themes/overrides/buttonBaseOverrides.d.ts +5 -0
  23. package/dist/themes/overrides/buttonBaseOverrides.js +2 -0
  24. package/dist/themes/overrides/buttonBaseOverrides.js.map +1 -0
  25. package/dist/themes/overrides/chipOverrides.cjs.js +2 -0
  26. package/dist/themes/overrides/chipOverrides.cjs.js.map +1 -0
  27. package/dist/themes/overrides/chipOverrides.d.ts +5 -0
  28. package/dist/themes/overrides/chipOverrides.js +2 -0
  29. package/dist/themes/overrides/chipOverrides.js.map +1 -0
  30. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("@mui/material/Chip"),o=require("@mui/material/styles"),a=require("../../../icons/Cancel/index.cjs.js");function i(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var n=i(t);const l=(e,t)=>({neutral:{backgroundColor:t.palette.semantic.fill["fill-weak"],borderColor:t.palette.semantic.stroke["stroke-weak"],color:t.palette.semantic.text["text-strong"]},error:{backgroundColor:t.palette.semantic.fill["fill-error-weak"],borderColor:t.palette.semantic.stroke["stroke-error-weak"],color:t.palette.semantic.text["text-error"]},warning:{backgroundColor:t.palette.semantic.fill["fill-warning-weak"],borderColor:t.palette.semantic.stroke["stroke-warning-weak"],color:t.palette.semantic.text["text-warning"]},success:{backgroundColor:t.palette.semantic.fill["fill-success-weak"],borderColor:t.palette.semantic.stroke["stroke-success-weak"],color:t.palette.semantic.text["text-success"]},information:{backgroundColor:t.palette.semantic.fill["fill-information-weak"],borderColor:t.palette.semantic.stroke["stroke-information-weak"],color:t.palette.semantic.text["text-information"]},brand:{backgroundColor:t.palette.semantic.fill["fill-primary-weak"],borderColor:t.palette.semantic.stroke["stroke-primary-weak"],color:t.palette.semantic.text["text-primary"]}}[e]),s=o.styled(r,{shouldForwardProp:e=>!["tone"].includes(e)})((({theme:e,tone:t,size:r})=>({fontSize:"small"===r?e.typography.caption.fontSize:e.typography.body1.fontSize,lineHeight:"small"===r?e.typography.caption.lineHeight:e.typography.body1.lineHeight,fontWeight:400,padding:e.spacing(0,1),borderRadius:e.radius["radius-16"],borderWidth:"1px",borderStyle:"solid","& .MuiChip-label":{padding:e.spacing(0,.5)},"& .MuiChip-icon":{paddingRight:e.spacing(.5),color:"neutral"===t?e.palette.semantic.icon["icon-strong"]:"inherit",fontSize:"inherit"},"& .MuiChip-deleteIcon":{color:e.palette.semantic.icon["icon-strong"],margin:0},...l(t,e)}))),c=n.memo((({className:t,icon:r,label:o,onDismiss:i,size:n="medium",tone:l="neutral","data-testid":c})=>e.jsx(s,{className:t,"data-testid":c,deleteIcon:e.jsx(a,{size:"sm"}),icon:r,label:o,onDelete:i,size:n,tone:l})));c.displayName="Badge",exports.BADGE_TONES=["neutral","error","warning","success","information","brand"],exports.Badge=c,exports.default=c;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("@mui/material/Chip"),r=require("@mui/material/styles");const a=(e,t)=>({neutral:{backgroundColor:t.palette.semantic.fill["fill-weak"],borderColor:t.palette.semantic.stroke["stroke-weak"],color:t.palette.semantic.text["text-strong"]},error:{backgroundColor:t.palette.semantic.fill["fill-error-weak"],borderColor:t.palette.semantic.stroke["stroke-error-weak"],color:t.palette.semantic.text["text-error"]},warning:{backgroundColor:t.palette.semantic.fill["fill-warning-weak"],borderColor:t.palette.semantic.stroke["stroke-warning-weak"],color:t.palette.semantic.text["text-warning"]},success:{backgroundColor:t.palette.semantic.fill["fill-success-weak"],borderColor:t.palette.semantic.stroke["stroke-success-weak"],color:t.palette.semantic.text["text-success"]},information:{backgroundColor:t.palette.semantic.fill["fill-information-weak"],borderColor:t.palette.semantic.stroke["stroke-information-weak"],color:t.palette.semantic.text["text-information"]},brand:{backgroundColor:t.palette.semantic.fill["fill-primary-weak"],borderColor:t.palette.semantic.stroke["stroke-primary-weak"],color:t.palette.semantic.text["text-primary"]}}[e]),o=r.styled(t,{shouldForwardProp:e=>"tone"!==e})((({theme:e,tone:t})=>({...a(t,e)}))),l=({className:t,fdKey:r,icon:a,label:l,size:i="medium",tone:s="neutral"})=>e.jsx(o,{className:t,clickable:!1,"data-fd":r,"data-fd-variant":"badge",icon:a,label:l,size:i,tone:s});l.displayName="Badge",exports.BADGE_TONES=["neutral","error","warning","success","information","brand"],exports.Badge=l,exports.default=l;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/components/atoms/Badge/index.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport MuiChip, { type ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled, type Theme } from '@mui/material/styles';\n\nimport CancelIcon from '@fd/icons/Cancel';\n\n/** Available visual tones for the Badge component */\nexport const BADGE_TONES = ['neutral', 'error', 'warning', 'success', 'information', 'brand'] as const;\nexport type BadgeTone = (typeof BADGE_TONES)[number];\n\n/** Props for the Badge component */\nexport interface BadgeProps {\n /** Additional CSS class names */\n className?: string;\n /** Optional icon to display within the badge */\n icon?: MuiChipProps['icon'];\n /** Text label displayed in the badge */\n label: string;\n /** Visual tone/color of the badge */\n tone?: BadgeTone;\n /** Size of the badge */\n size?: MuiChipProps['size'];\n /** Callback function when the badge is dismissed */\n onDismiss?: MuiChipProps['onDelete'];\n /** Test ID for testing and automation */\n 'data-testid'?: string;\n}\n\ninterface StyledBadgeProps {\n tone: BadgeTone;\n size: MuiChipProps['size'];\n}\n\n/** Color mapping for different tones */\nconst getToneStyles = (\n tone: BadgeTone,\n theme: Theme,\n): {\n backgroundColor: string;\n borderColor: string;\n color: string;\n} => {\n const colorMap = {\n neutral: {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-weak'],\n color: theme.palette.semantic.text['text-strong'],\n },\n error: {\n backgroundColor: theme.palette.semantic.fill['fill-error-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-error-weak'],\n color: theme.palette.semantic.text['text-error'],\n },\n warning: {\n backgroundColor: theme.palette.semantic.fill['fill-warning-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-warning-weak'],\n color: theme.palette.semantic.text['text-warning'],\n },\n success: {\n backgroundColor: theme.palette.semantic.fill['fill-success-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-success-weak'],\n color: theme.palette.semantic.text['text-success'],\n },\n information: {\n backgroundColor: theme.palette.semantic.fill['fill-information-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-information-weak'],\n color: theme.palette.semantic.text['text-information'],\n },\n brand: {\n backgroundColor: theme.palette.semantic.fill['fill-primary-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-primary-weak'],\n color: theme.palette.semantic.text['text-primary'],\n },\n } satisfies Record<BadgeTone, object>;\n\n return colorMap[tone];\n};\n\nconst StyledBadge = styled(MuiChip, {\n shouldForwardProp: (prop) => !['tone'].includes(prop as string),\n})<StyledBadgeProps>(({ theme, tone, size }) => ({\n fontSize: size === 'small' ? theme.typography.caption.fontSize : theme.typography.body1.fontSize,\n lineHeight: size === 'small' ? theme.typography.caption.lineHeight : theme.typography.body1.lineHeight,\n fontWeight: 400,\n padding: theme.spacing(0, 1),\n borderRadius: theme.radius['radius-16'],\n borderWidth: '1px',\n borderStyle: 'solid',\n\n '& .MuiChip-label': {\n padding: theme.spacing(0, 0.5),\n },\n '& .MuiChip-icon': {\n paddingRight: theme.spacing(0.5),\n color: tone === 'neutral' ? theme.palette.semantic.icon['icon-strong'] : 'inherit',\n fontSize: 'inherit',\n },\n '& .MuiChip-deleteIcon': {\n color: theme.palette.semantic.icon['icon-strong'],\n margin: 0,\n },\n ...getToneStyles(tone, theme),\n}));\n\n/**\n * Badge component is used to highlight and categorize information using short text labels.\n * It supports different visual tones to convey different semantic meanings and can include\n * an optional icon.\n *\n * React.memo is used to optimize performance by preventing unnecessary re-renders\n * when the component's props haven't changed, which is beneficial for components\n * that may be used frequently throughout the application.\n */\nexport const Badge = React.memo(\n ({\n className,\n icon,\n label,\n onDismiss,\n size = 'medium',\n tone = 'neutral',\n 'data-testid': dataTestId,\n }: BadgeProps): JSX.Element => (\n <StyledBadge\n className={className}\n data-testid={dataTestId}\n deleteIcon={<CancelIcon size=\"sm\" />}\n icon={icon}\n label={label}\n onDelete={onDismiss}\n size={size}\n tone={tone}\n />\n ),\n);\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n"],"names":["getToneStyles","tone","theme","neutral","backgroundColor","palette","semantic","fill","borderColor","stroke","color","text","error","warning","success","information","brand","StyledBadge","styled","MuiChip","shouldForwardProp","prop","includes","size","fontSize","typography","caption","body1","lineHeight","fontWeight","padding","spacing","borderRadius","radius","borderWidth","borderStyle","paddingRight","icon","margin","Badge","React","memo","className","label","onDismiss","dataTestId","_jsx","deleteIcon","CancelIcon","onDelete","displayName"],"mappings":"0fAQO,MA2BDA,EAAgB,CACpBC,EACAC,KAMiB,CACfC,QAAS,CACPC,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,aAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,eAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,gBAErCC,MAAO,CACLR,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,mBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,qBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,eAErCE,QAAS,CACPT,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCG,QAAS,CACPV,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCI,YAAa,CACXX,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,yBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,2BAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,qBAErCK,MAAO,CACLZ,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,kBAIvBV,IAGZgB,EAAcC,EAAAA,OAAOC,EAAS,CAClCC,kBAAoBC,IAAU,CAAC,QAAQC,SAASD,IAD9BH,EAEC,EAAGhB,QAAOD,OAAMsB,WAAM,CACzCC,SAAmB,UAATD,EAAmBrB,EAAMuB,WAAWC,QAAQF,SAAWtB,EAAMuB,WAAWE,MAAMH,SACxFI,WAAqB,UAATL,EAAmBrB,EAAMuB,WAAWC,QAAQE,WAAa1B,EAAMuB,WAAWE,MAAMC,WAC5FC,WAAY,IACZC,QAAS5B,EAAM6B,QAAQ,EAAG,GAC1BC,aAAc9B,EAAM+B,OAAO,aAC3BC,YAAa,MACbC,YAAa,QAEb,mBAAoB,CAClBL,QAAS5B,EAAM6B,QAAQ,EAAG,KAE5B,kBAAmB,CACjBK,aAAclC,EAAM6B,QAAQ,IAC5BrB,MAAgB,YAATT,EAAqBC,EAAMG,QAAQC,SAAS+B,KAAK,eAAiB,UACzEb,SAAU,WAEZ,wBAAyB,CACvBd,MAAOR,EAAMG,QAAQC,SAAS+B,KAAK,eACnCC,OAAQ,MAEPtC,EAAcC,EAAMC,OAYZqC,EAAQC,EAAMC,MACzB,EACEC,YACAL,OACAM,QACAC,YACArB,OAAO,SACPtB,OAAO,UACP,cAAe4C,KAEfC,EAAAA,IAAC7B,EAAW,CACVyB,UAAWA,EAAS,cACPG,EACbE,WAAYD,EAAAA,IAACE,EAAU,CAACzB,KAAK,OAC7Bc,KAAMA,EACNM,MAAOA,EACPM,SAAUL,EACVrB,KAAMA,EACNtB,KAAMA,MAKZsC,EAAMW,YAAc,4BAjIO,CAAC,UAAW,QAAS,UAAW,UAAW,cAAe"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/components/atoms/Badge/index.tsx"],"sourcesContent":["import MuiChip, { type ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled, type Theme } from '@mui/material/styles';\n\n/** Available visual tones for the Badge component */\nexport const BADGE_TONES = ['neutral', 'error', 'warning', 'success', 'information', 'brand'] as const;\nexport type BadgeTone = (typeof BADGE_TONES)[number];\n\n/** Props for the Badge component */\nexport interface BadgeProps {\n /** Additional CSS class names */\n className?: string;\n /** Test ID for testing and automation */\n fdKey?: string;\n /** Optional icon to display within the badge */\n icon?: MuiChipProps['icon'];\n /** Text label displayed in the badge */\n label: string;\n /** Visual tone/color of the badge */\n tone?: BadgeTone;\n /** Size of the badge */\n size?: MuiChipProps['size'];\n}\n\ninterface StyledBadgeProps {\n tone: BadgeTone;\n}\n\nconst getToneStyles = (\n tone: BadgeTone,\n theme: Theme,\n): {\n backgroundColor: string;\n borderColor: string;\n color: string;\n} => {\n const colorMap = {\n neutral: {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-weak'],\n color: theme.palette.semantic.text['text-strong'],\n },\n error: {\n backgroundColor: theme.palette.semantic.fill['fill-error-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-error-weak'],\n color: theme.palette.semantic.text['text-error'],\n },\n warning: {\n backgroundColor: theme.palette.semantic.fill['fill-warning-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-warning-weak'],\n color: theme.palette.semantic.text['text-warning'],\n },\n success: {\n backgroundColor: theme.palette.semantic.fill['fill-success-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-success-weak'],\n color: theme.palette.semantic.text['text-success'],\n },\n information: {\n backgroundColor: theme.palette.semantic.fill['fill-information-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-information-weak'],\n color: theme.palette.semantic.text['text-information'],\n },\n brand: {\n backgroundColor: theme.palette.semantic.fill['fill-primary-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-primary-weak'],\n color: theme.palette.semantic.text['text-primary'],\n },\n } satisfies Record<BadgeTone, object>;\n\n return colorMap[tone];\n};\n\nconst StyledBadge = styled(MuiChip, {\n shouldForwardProp: (prop) => prop !== 'tone',\n})<StyledBadgeProps>(({ theme, tone }) => ({\n ...getToneStyles(tone, theme),\n}));\n\n/**\n * Badge component is used to highlight and categorize information using short text labels.\n * It supports different visual tones to convey different semantic meanings and can include\n * an optional icon. It is a presentational component and should not be used as a button or link.\n */\nexport const Badge = ({\n className,\n fdKey,\n icon,\n label,\n size = 'medium',\n tone = 'neutral',\n}: BadgeProps): JSX.Element => (\n <StyledBadge\n className={className}\n clickable={false}\n data-fd={fdKey}\n data-fd-variant=\"badge\"\n icon={icon}\n label={label}\n size={size}\n tone={tone}\n />\n);\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n"],"names":["getToneStyles","tone","theme","neutral","backgroundColor","palette","semantic","fill","borderColor","stroke","color","text","error","warning","success","information","brand","StyledBadge","styled","MuiChip","shouldForwardProp","prop","Badge","className","fdKey","icon","label","size","_jsx","clickable","displayName"],"mappings":"yKAIO,MAuBDA,EAAgB,CACpBC,EACAC,KAMiB,CACfC,QAAS,CACPC,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,aAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,eAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,gBAErCC,MAAO,CACLR,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,mBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,qBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,eAErCE,QAAS,CACPT,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCG,QAAS,CACPV,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCI,YAAa,CACXX,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,yBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,2BAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,qBAErCK,MAAO,CACLZ,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,kBAIvBV,IAGZgB,EAAcC,EAAAA,OAAOC,EAAS,CAClCC,kBAAoBC,GAAkB,SAATA,GADXH,EAEC,EAAGhB,QAAOD,WAAM,IAChCD,EAAcC,EAAMC,OAQZoB,EAAQ,EACnBC,YACAC,QACAC,OACAC,QACAC,OAAO,SACP1B,OAAO,aAEP2B,EAAAA,IAACX,EAAW,CACVM,UAAWA,EACXM,WAAW,EAAK,UACPL,EAAK,kBACE,QAChBC,KAAMA,EACNC,MAAOA,EACPC,KAAMA,EACN1B,KAAMA,IAIVqB,EAAMQ,YAAc,4BAlGO,CAAC,UAAW,QAAS,UAAW,UAAW,cAAe"}
@@ -1,4 +1,3 @@
1
- import * as react from 'react';
2
1
  import { ChipProps } from '@mui/material/Chip';
3
2
 
4
3
  /** Available visual tones for the Badge component */
@@ -8,6 +7,8 @@ type BadgeTone = (typeof BADGE_TONES)[number];
8
7
  interface BadgeProps {
9
8
  /** Additional CSS class names */
10
9
  className?: string;
10
+ /** Test ID for testing and automation */
11
+ fdKey?: string;
11
12
  /** Optional icon to display within the badge */
12
13
  icon?: ChipProps['icon'];
13
14
  /** Text label displayed in the badge */
@@ -16,21 +17,16 @@ interface BadgeProps {
16
17
  tone?: BadgeTone;
17
18
  /** Size of the badge */
18
19
  size?: ChipProps['size'];
19
- /** Callback function when the badge is dismissed */
20
- onDismiss?: ChipProps['onDelete'];
21
- /** Test ID for testing and automation */
22
- 'data-testid'?: string;
23
20
  }
24
21
  /**
25
22
  * Badge component is used to highlight and categorize information using short text labels.
26
23
  * It supports different visual tones to convey different semantic meanings and can include
27
- * an optional icon.
28
- *
29
- * React.memo is used to optimize performance by preventing unnecessary re-renders
30
- * when the component's props haven't changed, which is beneficial for components
31
- * that may be used frequently throughout the application.
24
+ * an optional icon. It is a presentational component and should not be used as a button or link.
32
25
  */
33
- declare const Badge: react.MemoExoticComponent<({ className, icon, label, onDismiss, size, tone, "data-testid": dataTestId, }: BadgeProps) => JSX.Element>;
26
+ declare const Badge: {
27
+ ({ className, fdKey, icon, label, size, tone, }: BadgeProps): JSX.Element;
28
+ displayName: string;
29
+ };
34
30
 
35
31
  export { BADGE_TONES, Badge, Badge as default };
36
32
  export type { BadgeProps, BadgeTone };
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import*as t from"react";import o from"@mui/material/Chip";import{styled as r}from"@mui/material/styles";import a from"../../../icons/Cancel/index.js";const i=["neutral","error","warning","success","information","brand"],l=(e,t)=>({neutral:{backgroundColor:t.palette.semantic.fill["fill-weak"],borderColor:t.palette.semantic.stroke["stroke-weak"],color:t.palette.semantic.text["text-strong"]},error:{backgroundColor:t.palette.semantic.fill["fill-error-weak"],borderColor:t.palette.semantic.stroke["stroke-error-weak"],color:t.palette.semantic.text["text-error"]},warning:{backgroundColor:t.palette.semantic.fill["fill-warning-weak"],borderColor:t.palette.semantic.stroke["stroke-warning-weak"],color:t.palette.semantic.text["text-warning"]},success:{backgroundColor:t.palette.semantic.fill["fill-success-weak"],borderColor:t.palette.semantic.stroke["stroke-success-weak"],color:t.palette.semantic.text["text-success"]},information:{backgroundColor:t.palette.semantic.fill["fill-information-weak"],borderColor:t.palette.semantic.stroke["stroke-information-weak"],color:t.palette.semantic.text["text-information"]},brand:{backgroundColor:t.palette.semantic.fill["fill-primary-weak"],borderColor:t.palette.semantic.stroke["stroke-primary-weak"],color:t.palette.semantic.text["text-primary"]}}[e]),n=r(o,{shouldForwardProp:e=>!["tone"].includes(e)})((({theme:e,tone:t,size:o})=>({fontSize:"small"===o?e.typography.caption.fontSize:e.typography.body1.fontSize,lineHeight:"small"===o?e.typography.caption.lineHeight:e.typography.body1.lineHeight,fontWeight:400,padding:e.spacing(0,1),borderRadius:e.radius["radius-16"],borderWidth:"1px",borderStyle:"solid","& .MuiChip-label":{padding:e.spacing(0,.5)},"& .MuiChip-icon":{paddingRight:e.spacing(.5),color:"neutral"===t?e.palette.semantic.icon["icon-strong"]:"inherit",fontSize:"inherit"},"& .MuiChip-deleteIcon":{color:e.palette.semantic.icon["icon-strong"],margin:0},...l(t,e)}))),s=t.memo((({className:t,icon:o,label:r,onDismiss:i,size:l="medium",tone:s="neutral","data-testid":c})=>e(n,{className:t,"data-testid":c,deleteIcon:e(a,{size:"sm"}),icon:o,label:r,onDelete:i,size:l,tone:s})));s.displayName="Badge";export{i as BADGE_TONES,s as Badge,s as default};
1
+ import{jsx as e}from"react/jsx-runtime";import t from"@mui/material/Chip";import{styled as r}from"@mui/material/styles";const a=["neutral","error","warning","success","information","brand"],o=(e,t)=>({neutral:{backgroundColor:t.palette.semantic.fill["fill-weak"],borderColor:t.palette.semantic.stroke["stroke-weak"],color:t.palette.semantic.text["text-strong"]},error:{backgroundColor:t.palette.semantic.fill["fill-error-weak"],borderColor:t.palette.semantic.stroke["stroke-error-weak"],color:t.palette.semantic.text["text-error"]},warning:{backgroundColor:t.palette.semantic.fill["fill-warning-weak"],borderColor:t.palette.semantic.stroke["stroke-warning-weak"],color:t.palette.semantic.text["text-warning"]},success:{backgroundColor:t.palette.semantic.fill["fill-success-weak"],borderColor:t.palette.semantic.stroke["stroke-success-weak"],color:t.palette.semantic.text["text-success"]},information:{backgroundColor:t.palette.semantic.fill["fill-information-weak"],borderColor:t.palette.semantic.stroke["stroke-information-weak"],color:t.palette.semantic.text["text-information"]},brand:{backgroundColor:t.palette.semantic.fill["fill-primary-weak"],borderColor:t.palette.semantic.stroke["stroke-primary-weak"],color:t.palette.semantic.text["text-primary"]}}[e]),l=r(t,{shouldForwardProp:e=>"tone"!==e})((({theme:e,tone:t})=>({...o(t,e)}))),i=({className:t,fdKey:r,icon:a,label:o,size:i="medium",tone:n="neutral"})=>e(l,{className:t,clickable:!1,"data-fd":r,"data-fd-variant":"badge",icon:a,label:o,size:i,tone:n});i.displayName="Badge";export{a as BADGE_TONES,i as Badge,i as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/atoms/Badge/index.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport MuiChip, { type ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled, type Theme } from '@mui/material/styles';\n\nimport CancelIcon from '@fd/icons/Cancel';\n\n/** Available visual tones for the Badge component */\nexport const BADGE_TONES = ['neutral', 'error', 'warning', 'success', 'information', 'brand'] as const;\nexport type BadgeTone = (typeof BADGE_TONES)[number];\n\n/** Props for the Badge component */\nexport interface BadgeProps {\n /** Additional CSS class names */\n className?: string;\n /** Optional icon to display within the badge */\n icon?: MuiChipProps['icon'];\n /** Text label displayed in the badge */\n label: string;\n /** Visual tone/color of the badge */\n tone?: BadgeTone;\n /** Size of the badge */\n size?: MuiChipProps['size'];\n /** Callback function when the badge is dismissed */\n onDismiss?: MuiChipProps['onDelete'];\n /** Test ID for testing and automation */\n 'data-testid'?: string;\n}\n\ninterface StyledBadgeProps {\n tone: BadgeTone;\n size: MuiChipProps['size'];\n}\n\n/** Color mapping for different tones */\nconst getToneStyles = (\n tone: BadgeTone,\n theme: Theme,\n): {\n backgroundColor: string;\n borderColor: string;\n color: string;\n} => {\n const colorMap = {\n neutral: {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-weak'],\n color: theme.palette.semantic.text['text-strong'],\n },\n error: {\n backgroundColor: theme.palette.semantic.fill['fill-error-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-error-weak'],\n color: theme.palette.semantic.text['text-error'],\n },\n warning: {\n backgroundColor: theme.palette.semantic.fill['fill-warning-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-warning-weak'],\n color: theme.palette.semantic.text['text-warning'],\n },\n success: {\n backgroundColor: theme.palette.semantic.fill['fill-success-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-success-weak'],\n color: theme.palette.semantic.text['text-success'],\n },\n information: {\n backgroundColor: theme.palette.semantic.fill['fill-information-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-information-weak'],\n color: theme.palette.semantic.text['text-information'],\n },\n brand: {\n backgroundColor: theme.palette.semantic.fill['fill-primary-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-primary-weak'],\n color: theme.palette.semantic.text['text-primary'],\n },\n } satisfies Record<BadgeTone, object>;\n\n return colorMap[tone];\n};\n\nconst StyledBadge = styled(MuiChip, {\n shouldForwardProp: (prop) => !['tone'].includes(prop as string),\n})<StyledBadgeProps>(({ theme, tone, size }) => ({\n fontSize: size === 'small' ? theme.typography.caption.fontSize : theme.typography.body1.fontSize,\n lineHeight: size === 'small' ? theme.typography.caption.lineHeight : theme.typography.body1.lineHeight,\n fontWeight: 400,\n padding: theme.spacing(0, 1),\n borderRadius: theme.radius['radius-16'],\n borderWidth: '1px',\n borderStyle: 'solid',\n\n '& .MuiChip-label': {\n padding: theme.spacing(0, 0.5),\n },\n '& .MuiChip-icon': {\n paddingRight: theme.spacing(0.5),\n color: tone === 'neutral' ? theme.palette.semantic.icon['icon-strong'] : 'inherit',\n fontSize: 'inherit',\n },\n '& .MuiChip-deleteIcon': {\n color: theme.palette.semantic.icon['icon-strong'],\n margin: 0,\n },\n ...getToneStyles(tone, theme),\n}));\n\n/**\n * Badge component is used to highlight and categorize information using short text labels.\n * It supports different visual tones to convey different semantic meanings and can include\n * an optional icon.\n *\n * React.memo is used to optimize performance by preventing unnecessary re-renders\n * when the component's props haven't changed, which is beneficial for components\n * that may be used frequently throughout the application.\n */\nexport const Badge = React.memo(\n ({\n className,\n icon,\n label,\n onDismiss,\n size = 'medium',\n tone = 'neutral',\n 'data-testid': dataTestId,\n }: BadgeProps): JSX.Element => (\n <StyledBadge\n className={className}\n data-testid={dataTestId}\n deleteIcon={<CancelIcon size=\"sm\" />}\n icon={icon}\n label={label}\n onDelete={onDismiss}\n size={size}\n tone={tone}\n />\n ),\n);\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n"],"names":["BADGE_TONES","getToneStyles","tone","theme","neutral","backgroundColor","palette","semantic","fill","borderColor","stroke","color","text","error","warning","success","information","brand","StyledBadge","styled","MuiChip","shouldForwardProp","prop","includes","size","fontSize","typography","caption","body1","lineHeight","fontWeight","padding","spacing","borderRadius","radius","borderWidth","borderStyle","paddingRight","icon","margin","Badge","React","memo","className","label","onDismiss","dataTestId","_jsx","deleteIcon","CancelIcon","onDelete","displayName"],"mappings":"8LAQO,MAAMA,EAAc,CAAC,UAAW,QAAS,UAAW,UAAW,cAAe,SA2B/EC,EAAgB,CACpBC,EACAC,KAMiB,CACfC,QAAS,CACPC,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,aAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,eAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,gBAErCC,MAAO,CACLR,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,mBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,qBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,eAErCE,QAAS,CACPT,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCG,QAAS,CACPV,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCI,YAAa,CACXX,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,yBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,2BAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,qBAErCK,MAAO,CACLZ,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,kBAIvBV,IAGZgB,EAAcC,EAAOC,EAAS,CAClCC,kBAAoBC,IAAU,CAAC,QAAQC,SAASD,IAD9BH,EAEC,EAAGhB,QAAOD,OAAMsB,WAAM,CACzCC,SAAmB,UAATD,EAAmBrB,EAAMuB,WAAWC,QAAQF,SAAWtB,EAAMuB,WAAWE,MAAMH,SACxFI,WAAqB,UAATL,EAAmBrB,EAAMuB,WAAWC,QAAQE,WAAa1B,EAAMuB,WAAWE,MAAMC,WAC5FC,WAAY,IACZC,QAAS5B,EAAM6B,QAAQ,EAAG,GAC1BC,aAAc9B,EAAM+B,OAAO,aAC3BC,YAAa,MACbC,YAAa,QAEb,mBAAoB,CAClBL,QAAS5B,EAAM6B,QAAQ,EAAG,KAE5B,kBAAmB,CACjBK,aAAclC,EAAM6B,QAAQ,IAC5BrB,MAAgB,YAATT,EAAqBC,EAAMG,QAAQC,SAAS+B,KAAK,eAAiB,UACzEb,SAAU,WAEZ,wBAAyB,CACvBd,MAAOR,EAAMG,QAAQC,SAAS+B,KAAK,eACnCC,OAAQ,MAEPtC,EAAcC,EAAMC,OAYZqC,EAAQC,EAAMC,MACzB,EACEC,YACAL,OACAM,QACAC,YACArB,OAAO,SACPtB,OAAO,UACP,cAAe4C,KAEfC,EAAC7B,EAAW,CACVyB,UAAWA,EAAS,cACPG,EACbE,WAAYD,EAACE,EAAU,CAACzB,KAAK,OAC7Bc,KAAMA,EACNM,MAAOA,EACPM,SAAUL,EACVrB,KAAMA,EACNtB,KAAMA,MAKZsC,EAAMW,YAAc"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/atoms/Badge/index.tsx"],"sourcesContent":["import MuiChip, { type ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled, type Theme } from '@mui/material/styles';\n\n/** Available visual tones for the Badge component */\nexport const BADGE_TONES = ['neutral', 'error', 'warning', 'success', 'information', 'brand'] as const;\nexport type BadgeTone = (typeof BADGE_TONES)[number];\n\n/** Props for the Badge component */\nexport interface BadgeProps {\n /** Additional CSS class names */\n className?: string;\n /** Test ID for testing and automation */\n fdKey?: string;\n /** Optional icon to display within the badge */\n icon?: MuiChipProps['icon'];\n /** Text label displayed in the badge */\n label: string;\n /** Visual tone/color of the badge */\n tone?: BadgeTone;\n /** Size of the badge */\n size?: MuiChipProps['size'];\n}\n\ninterface StyledBadgeProps {\n tone: BadgeTone;\n}\n\nconst getToneStyles = (\n tone: BadgeTone,\n theme: Theme,\n): {\n backgroundColor: string;\n borderColor: string;\n color: string;\n} => {\n const colorMap = {\n neutral: {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-weak'],\n color: theme.palette.semantic.text['text-strong'],\n },\n error: {\n backgroundColor: theme.palette.semantic.fill['fill-error-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-error-weak'],\n color: theme.palette.semantic.text['text-error'],\n },\n warning: {\n backgroundColor: theme.palette.semantic.fill['fill-warning-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-warning-weak'],\n color: theme.palette.semantic.text['text-warning'],\n },\n success: {\n backgroundColor: theme.palette.semantic.fill['fill-success-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-success-weak'],\n color: theme.palette.semantic.text['text-success'],\n },\n information: {\n backgroundColor: theme.palette.semantic.fill['fill-information-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-information-weak'],\n color: theme.palette.semantic.text['text-information'],\n },\n brand: {\n backgroundColor: theme.palette.semantic.fill['fill-primary-weak'],\n borderColor: theme.palette.semantic.stroke['stroke-primary-weak'],\n color: theme.palette.semantic.text['text-primary'],\n },\n } satisfies Record<BadgeTone, object>;\n\n return colorMap[tone];\n};\n\nconst StyledBadge = styled(MuiChip, {\n shouldForwardProp: (prop) => prop !== 'tone',\n})<StyledBadgeProps>(({ theme, tone }) => ({\n ...getToneStyles(tone, theme),\n}));\n\n/**\n * Badge component is used to highlight and categorize information using short text labels.\n * It supports different visual tones to convey different semantic meanings and can include\n * an optional icon. It is a presentational component and should not be used as a button or link.\n */\nexport const Badge = ({\n className,\n fdKey,\n icon,\n label,\n size = 'medium',\n tone = 'neutral',\n}: BadgeProps): JSX.Element => (\n <StyledBadge\n className={className}\n clickable={false}\n data-fd={fdKey}\n data-fd-variant=\"badge\"\n icon={icon}\n label={label}\n size={size}\n tone={tone}\n />\n);\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n"],"names":["BADGE_TONES","getToneStyles","tone","theme","neutral","backgroundColor","palette","semantic","fill","borderColor","stroke","color","text","error","warning","success","information","brand","StyledBadge","styled","MuiChip","shouldForwardProp","prop","Badge","className","fdKey","icon","label","size","_jsx","clickable","displayName"],"mappings":"wHAIO,MAAMA,EAAc,CAAC,UAAW,QAAS,UAAW,UAAW,cAAe,SAuB/EC,EAAgB,CACpBC,EACAC,KAMiB,CACfC,QAAS,CACPC,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,aAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,eAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,gBAErCC,MAAO,CACLR,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,mBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,qBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,eAErCE,QAAS,CACPT,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCG,QAAS,CACPV,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,iBAErCI,YAAa,CACXX,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,yBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,2BAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,qBAErCK,MAAO,CACLZ,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,qBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,uBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,kBAIvBV,IAGZgB,EAAcC,EAAOC,EAAS,CAClCC,kBAAoBC,GAAkB,SAATA,GADXH,EAEC,EAAGhB,QAAOD,WAAM,IAChCD,EAAcC,EAAMC,OAQZoB,EAAQ,EACnBC,YACAC,QACAC,OACAC,QACAC,OAAO,SACP1B,OAAO,aAEP2B,EAACX,EAAW,CACVM,UAAWA,EACXM,WAAW,EAAK,UACPL,EAAK,kBACE,QAChBC,KAAMA,EACNC,MAAOA,EACPC,KAAMA,EACN1B,KAAMA,IAIVqB,EAAMQ,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("@mui/material/Box"),l=require("@mui/material/Chip"),i=require("@mui/material/styles"),s=require("../../../icons/Cancel/index.cjs.js");const o=i.styled(t,{shouldForwardProp:e=>"disabled"!==e})((({disabled:e})=>({cursor:e?"not-allowed":void 0}))),r=i.styled(l,{shouldForwardProp:e=>"selected"!==e})((({theme:e,selected:t})=>({...t&&{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"],"& .MuiChip-deleteIcon, & .MuiChip-icon":{color:e.palette.semantic.icon["icon-inverse-strong"],"&:hover:not(.Mui-disabled)":{color:e.palette.semantic.text["text-inverse-strong"]}},"&:hover:not(.Mui-disabled)":{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"]},"&:active:not(.Mui-disabled)":{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"]},"&:focus-visible, &.Mui-focusVisible":{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"]},"&.Mui-disabled":{backgroundColor:e.palette.semantic.fill["fill-disabled"],borderColor:e.palette.semantic.fill["fill-disabled"],color:e.palette.semantic.text["text-inverse-strong"],"& .MuiChip-deleteIcon, & .MuiChip-icon":{color:e.palette.semantic.icon["icon-inverse-strong"]}}}}))),a=({className:t,disabled:l=!1,fdKey:i,label:a,onClick:d,onDismiss:n,selected:c=!1,size:m="medium",dismissAriaLabel:u})=>e.jsx(o,{disabled:l,children:e.jsx(r,{"aria-label":d?`${a}`:n?`${u} ${a}`:void 0,className:t,clickable:!l&&!!d,"data-fd":i,"data-fd-variant":"tag",deleteIcon:(()=>{if(n)return e.jsx(s,{"aria-hidden":!0,"data-testid":"tag-dismiss-icon",size:"sm"})})(),disabled:l,label:a,onClick:l?void 0:d,onDelete:l?void 0:n,onKeyDown:e=>{l||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),e.stopPropagation(),n?n(e):d&&d(e))},selected:c,size:m})});a.displayName="Tag",exports.Tag=a,exports.default=a;
2
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/components/atoms/Tag/index.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport MuiChip, { type ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled } from '@mui/material/styles';\n\nimport CancelIcon from '@fd/icons/Cancel';\n\n/** Props for the Tag component */\ninterface TagBaseProps {\n /** Additional CSS class names */\n className?: string;\n /** Whether the tag is disabled */\n disabled?: boolean;\n /** Test ID for testing and automation */\n fdKey?: string;\n /** Text label displayed in the tag */\n label: string;\n /** Whether the tag is selected */\n selected?: boolean;\n /** Size of the tag */\n size?: MuiChipProps['size'];\n}\n\ninterface TagDismissibleProps extends TagBaseProps {\n /** Callback function when the tag is clicked */\n onClick?: undefined;\n /** Callback function when the tag is dismissed */\n onDismiss: NonNullable<MuiChipProps['onDelete']>;\n /** Aria-label prefix for the dismiss button; the tag label is appended automatically */\n dismissAriaLabel: string;\n}\n\ninterface TagNonDismissibleProps extends TagBaseProps {\n /** Callback function when the tag is clicked */\n onClick?: MuiChipProps['onClick'];\n /** No dismiss handler in this variant */\n onDismiss?: undefined;\n /** No aria label when there is no dismiss */\n dismissAriaLabel?: undefined;\n}\n\n/** Props for the Tag component */\nexport type TagProps = TagDismissibleProps | TagNonDismissibleProps;\n\nconst StyledTagContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'disabled',\n})<{ disabled?: boolean }>(({ disabled }) => ({\n cursor: disabled ? 'not-allowed' : undefined,\n}));\n\nconst StyledTag = styled(MuiChip, {\n shouldForwardProp: (prop) => prop !== 'selected',\n})<{ selected?: boolean }>(({ theme, selected }) => ({\n ...(selected && {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n\n '& .MuiChip-deleteIcon, & .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-inverse-strong'],\n\n '&:hover:not(.Mui-disabled)': {\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n },\n '&:hover:not(.Mui-disabled)': {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n '&:active:not(.Mui-disabled)': {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n '&:focus-visible, &.Mui-focusVisible': {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n '&.Mui-disabled': {\n backgroundColor: theme.palette.semantic.fill['fill-disabled'],\n borderColor: theme.palette.semantic.fill['fill-disabled'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n\n '& .MuiChip-deleteIcon, & .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-inverse-strong'],\n },\n },\n }),\n}));\n\n/**\n * Tag component used for categorization and filtering.\n * It supports two variants: dismissible (with delete icon) and clickable (entire tag is interactive).\n * Both variants support a selected state.\n */\nexport const Tag = ({\n className,\n disabled = false,\n fdKey,\n label,\n onClick,\n onDismiss,\n selected = false,\n size = 'medium',\n dismissAriaLabel,\n}: TagProps): JSX.Element => {\n const getAriaLabel = (): string | undefined => {\n if (onClick) {\n return `${label}`;\n }\n if (onDismiss) {\n return `${dismissAriaLabel} ${label}`;\n }\n\n return undefined;\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (disabled) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n\n if (onDismiss) {\n onDismiss(event as unknown as React.MouseEvent<HTMLDivElement>);\n } else if (onClick) {\n onClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n }\n }\n };\n\n const renderDismissIcon = (): React.ReactElement<unknown> | undefined => {\n if (!onDismiss) {\n return undefined;\n }\n\n return <CancelIcon aria-hidden={true} data-testid=\"tag-dismiss-icon\" size=\"sm\" />;\n };\n\n return (\n <StyledTagContainer disabled={disabled}>\n <StyledTag\n aria-label={getAriaLabel()}\n className={className}\n clickable={disabled ? false : !!onClick}\n data-fd={fdKey}\n data-fd-variant=\"tag\"\n deleteIcon={renderDismissIcon()}\n disabled={disabled}\n label={label}\n onClick={disabled ? undefined : onClick}\n onDelete={disabled ? undefined : onDismiss}\n onKeyDown={handleKeyDown}\n selected={selected}\n size={size}\n />\n </StyledTagContainer>\n );\n};\n\nTag.displayName = 'Tag';\n\nexport default Tag;\n"],"names":["StyledTagContainer","styled","Box","shouldForwardProp","prop","disabled","cursor","undefined","StyledTag","MuiChip","theme","selected","backgroundColor","palette","semantic","fill","borderColor","stroke","color","text","icon","Tag","className","fdKey","label","onClick","onDismiss","size","dismissAriaLabel","_jsx","children","clickable","deleteIcon","CancelIcon","renderDismissIcon","onDelete","onKeyDown","event","key","preventDefault","stopPropagation","displayName"],"mappings":"wPA2CA,MAAMA,EAAqBC,EAAAA,OAAOC,EAAK,CACrCC,kBAAoBC,GAAkB,aAATA,GADJH,EAEA,EAAGI,eAAU,CACtCC,OAAQD,EAAW,mBAAgBE,MAG/BC,EAAYP,EAAAA,OAAOQ,EAAS,CAChCN,kBAAoBC,GAAkB,aAATA,GADbH,EAES,EAAGS,QAAOC,eAAU,IACzCA,GAAY,CACdC,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,uBAEnC,yCAA0C,CACxCD,MAAOR,EAAMG,QAAQC,SAASM,KAAK,uBAEnC,6BAA8B,CAC5BF,MAAOR,EAAMG,QAAQC,SAASK,KAAK,yBAGvC,6BAA8B,CAC5BP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,wBAErC,8BAA+B,CAC7BP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,wBAErC,sCAAuC,CACrCP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,wBAErC,iBAAkB,CAChBP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASC,KAAK,iBACzCG,MAAOR,EAAMG,QAAQC,SAASK,KAAK,uBAEnC,yCAA0C,CACxCD,MAAOR,EAAMG,QAAQC,SAASM,KAAK,8BAW9BC,EAAM,EACjBC,YACAjB,YAAW,EACXkB,QACAC,QACAC,UACAC,YACAf,YAAW,EACXgB,OAAO,SACPC,sBAuCEC,EAAAA,IAAC7B,GAAmBK,SAAUA,EAAQyB,SACpCD,EAAAA,IAACrB,EAAS,CAAA,aArCRiB,EACK,GAAGD,IAERE,EACK,GAAGE,KAAoBJ,SADhC,EAoCIF,UAAWA,EACXS,WAAW1B,KAAqBoB,YACvBF,EAAK,kBACE,MAChBS,WAhBoB,MACxB,GAAKN,EAIL,OAAOG,EAAAA,IAACI,EAAU,CAAA,eAAc,EAAI,cAAc,mBAAmBN,KAAK,QAW1DO,GACZ7B,SAAUA,EACVmB,MAAOA,EACPC,QAASpB,OAAWE,EAAYkB,EAChCU,SAAU9B,OAAWE,EAAYmB,EACjCU,UAtCiBC,IACjBhC,GAIc,UAAdgC,EAAMC,KAAiC,MAAdD,EAAMC,MACjCD,EAAME,iBACNF,EAAMG,kBAEFd,EACFA,EAAUW,GACDZ,GACTA,EAAQY,KA2BR1B,SAAUA,EACVgB,KAAMA,MAMdN,EAAIoB,YAAc"}
@@ -0,0 +1,47 @@
1
+ import { ChipProps } from '@mui/material/Chip';
2
+
3
+ /** Props for the Tag component */
4
+ interface TagBaseProps {
5
+ /** Additional CSS class names */
6
+ className?: string;
7
+ /** Whether the tag is disabled */
8
+ disabled?: boolean;
9
+ /** Test ID for testing and automation */
10
+ fdKey?: string;
11
+ /** Text label displayed in the tag */
12
+ label: string;
13
+ /** Whether the tag is selected */
14
+ selected?: boolean;
15
+ /** Size of the tag */
16
+ size?: ChipProps['size'];
17
+ }
18
+ interface TagDismissibleProps extends TagBaseProps {
19
+ /** Callback function when the tag is clicked */
20
+ onClick?: undefined;
21
+ /** Callback function when the tag is dismissed */
22
+ onDismiss: NonNullable<ChipProps['onDelete']>;
23
+ /** Aria-label prefix for the dismiss button; the tag label is appended automatically */
24
+ dismissAriaLabel: string;
25
+ }
26
+ interface TagNonDismissibleProps extends TagBaseProps {
27
+ /** Callback function when the tag is clicked */
28
+ onClick?: ChipProps['onClick'];
29
+ /** No dismiss handler in this variant */
30
+ onDismiss?: undefined;
31
+ /** No aria label when there is no dismiss */
32
+ dismissAriaLabel?: undefined;
33
+ }
34
+ /** Props for the Tag component */
35
+ type TagProps = TagDismissibleProps | TagNonDismissibleProps;
36
+ /**
37
+ * Tag component used for categorization and filtering.
38
+ * It supports two variants: dismissible (with delete icon) and clickable (entire tag is interactive).
39
+ * Both variants support a selected state.
40
+ */
41
+ declare const Tag: {
42
+ ({ className, disabled, fdKey, label, onClick, onDismiss, selected, size, dismissAriaLabel, }: TagProps): JSX.Element;
43
+ displayName: string;
44
+ };
45
+
46
+ export { Tag, Tag as default };
47
+ export type { TagProps };
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";import t from"@mui/material/Box";import i from"@mui/material/Chip";import{styled as l}from"@mui/material/styles";import o from"../../../icons/Cancel/index.js";const s=l(t,{shouldForwardProp:e=>"disabled"!==e})((({disabled:e})=>({cursor:e?"not-allowed":void 0}))),a=l(i,{shouldForwardProp:e=>"selected"!==e})((({theme:e,selected:t})=>({...t&&{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"],"& .MuiChip-deleteIcon, & .MuiChip-icon":{color:e.palette.semantic.icon["icon-inverse-strong"],"&:hover:not(.Mui-disabled)":{color:e.palette.semantic.text["text-inverse-strong"]}},"&:hover:not(.Mui-disabled)":{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"]},"&:active:not(.Mui-disabled)":{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"]},"&:focus-visible, &.Mui-focusVisible":{backgroundColor:e.palette.semantic.fill["fill-selected"],borderColor:e.palette.semantic.stroke["stroke-selected"],color:e.palette.semantic.text["text-inverse-strong"]},"&.Mui-disabled":{backgroundColor:e.palette.semantic.fill["fill-disabled"],borderColor:e.palette.semantic.fill["fill-disabled"],color:e.palette.semantic.text["text-inverse-strong"],"& .MuiChip-deleteIcon, & .MuiChip-icon":{color:e.palette.semantic.icon["icon-inverse-strong"]}}}}))),r=({className:t,disabled:i=!1,fdKey:l,label:r,onClick:d,onDismiss:n,selected:c=!1,size:m="medium",dismissAriaLabel:p})=>e(s,{disabled:i,children:e(a,{"aria-label":d?`${r}`:n?`${p} ${r}`:void 0,className:t,clickable:!i&&!!d,"data-fd":l,"data-fd-variant":"tag",deleteIcon:(()=>{if(n)return e(o,{"aria-hidden":!0,"data-testid":"tag-dismiss-icon",size:"sm"})})(),disabled:i,label:r,onClick:i?void 0:d,onDelete:i?void 0:n,onKeyDown:e=>{i||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),e.stopPropagation(),n?n(e):d&&d(e))},selected:c,size:m})});r.displayName="Tag";export{r as Tag,r as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/atoms/Tag/index.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport MuiChip, { type ChipProps as MuiChipProps } from '@mui/material/Chip';\nimport { styled } from '@mui/material/styles';\n\nimport CancelIcon from '@fd/icons/Cancel';\n\n/** Props for the Tag component */\ninterface TagBaseProps {\n /** Additional CSS class names */\n className?: string;\n /** Whether the tag is disabled */\n disabled?: boolean;\n /** Test ID for testing and automation */\n fdKey?: string;\n /** Text label displayed in the tag */\n label: string;\n /** Whether the tag is selected */\n selected?: boolean;\n /** Size of the tag */\n size?: MuiChipProps['size'];\n}\n\ninterface TagDismissibleProps extends TagBaseProps {\n /** Callback function when the tag is clicked */\n onClick?: undefined;\n /** Callback function when the tag is dismissed */\n onDismiss: NonNullable<MuiChipProps['onDelete']>;\n /** Aria-label prefix for the dismiss button; the tag label is appended automatically */\n dismissAriaLabel: string;\n}\n\ninterface TagNonDismissibleProps extends TagBaseProps {\n /** Callback function when the tag is clicked */\n onClick?: MuiChipProps['onClick'];\n /** No dismiss handler in this variant */\n onDismiss?: undefined;\n /** No aria label when there is no dismiss */\n dismissAriaLabel?: undefined;\n}\n\n/** Props for the Tag component */\nexport type TagProps = TagDismissibleProps | TagNonDismissibleProps;\n\nconst StyledTagContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'disabled',\n})<{ disabled?: boolean }>(({ disabled }) => ({\n cursor: disabled ? 'not-allowed' : undefined,\n}));\n\nconst StyledTag = styled(MuiChip, {\n shouldForwardProp: (prop) => prop !== 'selected',\n})<{ selected?: boolean }>(({ theme, selected }) => ({\n ...(selected && {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n\n '& .MuiChip-deleteIcon, & .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-inverse-strong'],\n\n '&:hover:not(.Mui-disabled)': {\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n },\n '&:hover:not(.Mui-disabled)': {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n '&:active:not(.Mui-disabled)': {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n '&:focus-visible, &.Mui-focusVisible': {\n backgroundColor: theme.palette.semantic.fill['fill-selected'],\n borderColor: theme.palette.semantic.stroke['stroke-selected'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n },\n '&.Mui-disabled': {\n backgroundColor: theme.palette.semantic.fill['fill-disabled'],\n borderColor: theme.palette.semantic.fill['fill-disabled'],\n color: theme.palette.semantic.text['text-inverse-strong'],\n\n '& .MuiChip-deleteIcon, & .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-inverse-strong'],\n },\n },\n }),\n}));\n\n/**\n * Tag component used for categorization and filtering.\n * It supports two variants: dismissible (with delete icon) and clickable (entire tag is interactive).\n * Both variants support a selected state.\n */\nexport const Tag = ({\n className,\n disabled = false,\n fdKey,\n label,\n onClick,\n onDismiss,\n selected = false,\n size = 'medium',\n dismissAriaLabel,\n}: TagProps): JSX.Element => {\n const getAriaLabel = (): string | undefined => {\n if (onClick) {\n return `${label}`;\n }\n if (onDismiss) {\n return `${dismissAriaLabel} ${label}`;\n }\n\n return undefined;\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (disabled) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n\n if (onDismiss) {\n onDismiss(event as unknown as React.MouseEvent<HTMLDivElement>);\n } else if (onClick) {\n onClick(event as unknown as React.MouseEvent<HTMLDivElement>);\n }\n }\n };\n\n const renderDismissIcon = (): React.ReactElement<unknown> | undefined => {\n if (!onDismiss) {\n return undefined;\n }\n\n return <CancelIcon aria-hidden={true} data-testid=\"tag-dismiss-icon\" size=\"sm\" />;\n };\n\n return (\n <StyledTagContainer disabled={disabled}>\n <StyledTag\n aria-label={getAriaLabel()}\n className={className}\n clickable={disabled ? false : !!onClick}\n data-fd={fdKey}\n data-fd-variant=\"tag\"\n deleteIcon={renderDismissIcon()}\n disabled={disabled}\n label={label}\n onClick={disabled ? undefined : onClick}\n onDelete={disabled ? undefined : onDismiss}\n onKeyDown={handleKeyDown}\n selected={selected}\n size={size}\n />\n </StyledTagContainer>\n );\n};\n\nTag.displayName = 'Tag';\n\nexport default Tag;\n"],"names":["StyledTagContainer","styled","Box","shouldForwardProp","prop","disabled","cursor","undefined","StyledTag","MuiChip","theme","selected","backgroundColor","palette","semantic","fill","borderColor","stroke","color","text","icon","Tag","className","fdKey","label","onClick","onDismiss","size","dismissAriaLabel","_jsx","children","clickable","deleteIcon","CancelIcon","renderDismissIcon","onDelete","onKeyDown","event","key","preventDefault","stopPropagation","displayName"],"mappings":"uMA2CA,MAAMA,EAAqBC,EAAOC,EAAK,CACrCC,kBAAoBC,GAAkB,aAATA,GADJH,EAEA,EAAGI,eAAU,CACtCC,OAAQD,EAAW,mBAAgBE,MAG/BC,EAAYP,EAAOQ,EAAS,CAChCN,kBAAoBC,GAAkB,aAATA,GADbH,EAES,EAAGS,QAAOC,eAAU,IACzCA,GAAY,CACdC,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,uBAEnC,yCAA0C,CACxCD,MAAOR,EAAMG,QAAQC,SAASM,KAAK,uBAEnC,6BAA8B,CAC5BF,MAAOR,EAAMG,QAAQC,SAASK,KAAK,yBAGvC,6BAA8B,CAC5BP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,wBAErC,8BAA+B,CAC7BP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,wBAErC,sCAAuC,CACrCP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASG,OAAO,mBAC3CC,MAAOR,EAAMG,QAAQC,SAASK,KAAK,wBAErC,iBAAkB,CAChBP,gBAAiBF,EAAMG,QAAQC,SAASC,KAAK,iBAC7CC,YAAaN,EAAMG,QAAQC,SAASC,KAAK,iBACzCG,MAAOR,EAAMG,QAAQC,SAASK,KAAK,uBAEnC,yCAA0C,CACxCD,MAAOR,EAAMG,QAAQC,SAASM,KAAK,8BAW9BC,EAAM,EACjBC,YACAjB,YAAW,EACXkB,QACAC,QACAC,UACAC,YACAf,YAAW,EACXgB,OAAO,SACPC,sBAuCEC,EAAC7B,GAAmBK,SAAUA,EAAQyB,SACpCD,EAACrB,EAAS,CAAA,aArCRiB,EACK,GAAGD,IAERE,EACK,GAAGE,KAAoBJ,SADhC,EAoCIF,UAAWA,EACXS,WAAW1B,KAAqBoB,YACvBF,EAAK,kBACE,MAChBS,WAhBoB,MACxB,GAAKN,EAIL,OAAOG,EAACI,EAAU,CAAA,eAAc,EAAI,cAAc,mBAAmBN,KAAK,QAW1DO,GACZ7B,SAAUA,EACVmB,MAAOA,EACPC,QAASpB,OAAWE,EAAYkB,EAChCU,SAAU9B,OAAWE,EAAYmB,EACjCU,UAtCiBC,IACjBhC,GAIc,UAAdgC,EAAMC,KAAiC,MAAdD,EAAMC,MACjCD,EAAME,iBACNF,EAAMG,kBAEFd,EACFA,EAAUW,GACDZ,GACTA,EAAQY,KA2BR1B,SAAUA,EACVgB,KAAMA,MAMdN,EAAIoB,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("react/jsx-runtime"),i=require("@mui/material/Autocomplete"),l=require("@mui/material/Box"),n=require("@mui/material/styles"),r=require("@mui/material/Tooltip"),s=require("../../../icons/ArrowDown01/index.cjs.js"),a=require("../../../icons/ArrowUp01/index.cjs.js"),o=require("../../../icons/Cancel/index.cjs.js"),d=require("../../../icons/Search/index.cjs.js"),c=require("../../../utilities/stringUtilities.cjs.js"),p=require("../../atoms/Badge/index.cjs.js"),u=require("../../atoms/CircularProgress/index.cjs.js"),m=require("../../atoms/MenuItem/index.cjs.js"),g=require("../../atoms/TextField/index.cjs.js"),x=require("./hooks/useDynamicLimitTags.cjs.js");const h=i,j=n.styled(h,{shouldForwardProp:e=>"fullWidth"!==e})((({fullWidth:e=!1})=>({width:e?"100%":"min(364px, 100%)"}))),b=n.styled(l,{shouldForwardProp:e=>!["clickable","disabled","placement"].includes(e)})((({theme:e,clickable:t=!1,disabled:i=!1,placement:l})=>({alignItems:"center",cursor:t?i?"not-allowed":"pointer":"default",display:"flex",justifyContent:"center",padding:0,pointerEvents:t?"auto":"none",..."start"===l&&{paddingRight:e.spacing(1)},..."middle"===l&&{padding:e.spacing(0,1)},"& svg":{color:i?e.palette.semantic.icon["icon-disabled"]:e.palette.semantic.icon["icon-strong"]}}))),y=n.styled(l,{shouldForwardProp:e=>"placement"!==e})((({theme:e,placement:t})=>({alignItems:"center",display:"flex",justifyContent:"center",padding:0,..."start"===t&&{paddingRight:e.spacing(1)},..."middle"===t&&{padding:e.spacing(0,1)}}))),f=({disabled:i=!1,errorText:l,fdKey:n,fullWidth:h=!1,helperText:f,label:T,loading:q=!1,multiple:C=!1,placeholder:I,onChange:P,onInputChange:k,options:v=[],required:A=!1,translations:O,type:w="search",value:E})=>{const[F,W]=e.useState(!1),D="search"===w,L="combobox"===w,{rootRef:S,limitTags:M}=x.useDynamicLimitTags({chipMax:130,gap:4,horizontalPadding:32,reservedPx:D?120:90});e.useEffect((()=>{i&&W(!1)}),[i]);const B=e=>{i||W(void 0===e?e=>!e:e)};return t.jsx(j,{ref:S,clearIcon:t.jsx(o,{size:"md"}),clearText:O.clearTextAriaLabel,disableClearable:i||q,disableCloseOnSelect:C,disabled:i,filterOptions:D?e=>e:void 0,forcePopupIcon:L,freeSolo:D,fullWidth:h,getOptionKey:e=>"string"==typeof e?e:String(e.value),getOptionLabel:e=>"string"==typeof e?e:e.label,isOptionEqualToValue:(e,t)=>null!=t&&("string"==typeof t?e.label===t||String(e.value)===t:e.value===t.value),limitTags:M,loading:q,loadingText:O.loadingText,multiple:C,noOptionsText:O.noOptionsText,onChange:(e,t,i,l)=>{P&&P(e,t,i,l)},onClose:()=>B(!1),onInputChange:(e,t,i)=>{k&&k(e,t,i)},onOpen:()=>B(!0),open:F,openText:O.openPopupAriaLabel,options:v,popupIcon:D?null:t.jsx(b,{clickable:!0,disabled:i,placement:"end",children:F?t.jsx(a,{}):t.jsx(s,{})}),renderInput:e=>t.jsx(g.TextField,{disabled:i,errorText:l,fdKey:n,fullWidth:h,helperText:f,label:T,placeholder:I,required:A,slotProps:{input:{...e.InputProps,endAdornment:t.jsxs(t.Fragment,{children:[q?t.jsx(y,{placement:D?"end":"middle",children:t.jsx(u.CircularProgress,{size:"small"})}):null,e.InputProps.endAdornment]}),startAdornment:t.jsxs(t.Fragment,{children:[D?t.jsx(b,{disabled:i,placement:"start",children:t.jsx(d,{"aria-hidden":"true"})}):null,e.InputProps.startAdornment]})},htmlInput:{...e.inputProps}}}),renderOption:(t,i,l)=>{const{key:n,onClick:r,...s}=t;return C?e.createElement(m.MenuItem,{...s,key:n,checked:l.selected,label:i.label,onCheckedChange:(e,t)=>{r?.(t)},type:"checkbox"}):e.createElement(m.MenuItem,{...s,key:n,label:i.label,onClick:r,selected:l.selected,type:"text"})},renderTags:(e,i)=>e.map(((e,l)=>{const{key:n,onDelete:s,...a}=i({index:l}),o="string"==typeof e?e:e.label,d=c.truncateWithEllipsis(o,13,{includeEllipsisInLimit:!0}),u=d.endsWith("..."),m=n??`tag-${"string"==typeof e?e:e.value}`;return u?t.jsx(r,{arrow:!0,placement:"top",title:o,children:t.jsx("span",{...a,children:t.jsx(p.Badge,{label:d,onDismiss:s})})},m):t.jsx("span",{...a,children:t.jsx(p.Badge,{label:d,onDismiss:s})},m)})),slotProps:{popupIndicator:{onClick:e=>{i||(e.stopPropagation(),B())}}},value:C?Array.isArray(E)?E:null==E?[]:[E]:Array.isArray(E)?E.length>0?E[0]:null:E??null})};exports.Autocomplete=f,exports.default=f;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),i=require("react/jsx-runtime"),t=require("@mui/material/Autocomplete"),l=require("@mui/material/Box"),s=require("@mui/material/styles"),n=require("@mui/material/Tooltip"),r=require("../../../icons/ArrowDown01/index.cjs.js"),a=require("../../../icons/ArrowUp01/index.cjs.js"),o=require("../../../icons/Cancel/index.cjs.js"),d=require("../../../icons/Search/index.cjs.js"),c=require("../../../utilities/stringUtilities.cjs.js"),p=require("../../atoms/CircularProgress/index.cjs.js"),u=require("../../atoms/MenuItem/index.cjs.js"),m=require("../../atoms/Tag/index.cjs.js"),g=require("../../atoms/TextField/index.cjs.js"),x=require("./hooks/useDynamicLimitTags.cjs.js");const h=t,j=s.styled(h,{shouldForwardProp:e=>"fullWidth"!==e})((({fullWidth:e=!1})=>({width:e?"100%":"min(364px, 100%)"}))),b=s.styled(l,{shouldForwardProp:e=>!["clickable","disabled","placement"].includes(e)})((({theme:e,clickable:i=!1,disabled:t=!1,placement:l})=>({alignItems:"center",cursor:i?t?"not-allowed":"pointer":"default",display:"flex",justifyContent:"center",padding:0,pointerEvents:i?"auto":"none",..."start"===l&&{paddingRight:e.spacing(1)},..."middle"===l&&{padding:e.spacing(0,1)},"& svg":{color:t?e.palette.semantic.icon["icon-disabled"]:e.palette.semantic.icon["icon-strong"]}}))),y=s.styled(l,{shouldForwardProp:e=>"placement"!==e})((({theme:e,placement:i})=>({alignItems:"center",display:"flex",justifyContent:"center",padding:0,..."start"===i&&{paddingRight:e.spacing(1)},..."middle"===i&&{padding:e.spacing(0,1)}}))),f=({className:t,disabled:l=!1,errorText:s,fdKey:h,fullWidth:f=!1,helperText:T,label:q,loading:A=!1,multiple:C=!1,placeholder:I,onChange:P,onInputChange:k,options:v=[],required:L=!1,translations:O,type:w="search",value:E})=>{const[F,W]=e.useState(!1),D="search"===w,S="combobox"===w,{rootRef:M,limitTags:z}=x.useDynamicLimitTags({chipMax:130,gap:4,horizontalPadding:32,reservedPx:D?120:90});e.useEffect((()=>{l&&W(!1)}),[l]);const K=e=>{l||W(void 0===e?e=>!e:e)};return i.jsx(j,{ref:M,className:t,clearIcon:i.jsx(o,{size:"md"}),clearText:O.clearTextAriaLabel,disableClearable:l||A,disableCloseOnSelect:C,disabled:l,filterOptions:D?e=>e:void 0,forcePopupIcon:S,freeSolo:D,fullWidth:f,getOptionKey:e=>"string"==typeof e?e:String(e.value),getOptionLabel:e=>"string"==typeof e?e:e.label,isOptionEqualToValue:(e,i)=>null!=i&&("string"==typeof i?e.label===i||String(e.value)===i:e.value===i.value),limitTags:z,loading:A,loadingText:O.loadingText,multiple:C,noOptionsText:O.noOptionsText,onChange:(e,i,t,l)=>{P&&P(e,i,t,l)},onClose:()=>K(!1),onInputChange:(e,i,t)=>{k&&k(e,i,t)},onOpen:()=>K(!0),open:F,openText:O.openPopupAriaLabel,options:v,popupIcon:D?null:i.jsx(b,{clickable:!0,disabled:l,placement:"end",children:F?i.jsx(a,{}):i.jsx(r,{})}),renderInput:e=>i.jsx(g.TextField,{disabled:l,errorText:s,fdKey:h,fullWidth:f,helperText:T,label:q,placeholder:I,required:L,slotProps:{input:{...e.InputProps,endAdornment:i.jsxs(i.Fragment,{children:[A?i.jsx(y,{placement:D?"end":"middle",children:i.jsx(p.CircularProgress,{size:"small"})}):null,e.InputProps.endAdornment]}),startAdornment:i.jsxs(i.Fragment,{children:[D?i.jsx(b,{disabled:l,placement:"start",children:i.jsx(d,{"aria-hidden":"true"})}):null,e.InputProps.startAdornment]})},htmlInput:{...e.inputProps}}}),renderOption:(i,t,l)=>{const{key:s,onClick:n,...r}=i;return C?e.createElement(u.MenuItem,{...r,key:s,checked:l.selected,label:t.label,onCheckedChange:(e,i)=>{n?.(i)},type:"checkbox"}):e.createElement(u.MenuItem,{...r,key:s,label:t.label,onClick:n,selected:l.selected,type:"text"})},renderTags:(e,t)=>e.map(((e,l)=>{const{key:s,onDelete:r,...a}=t({index:l}),o="string"==typeof e?e:e.label,d=c.truncateWithEllipsis(o,13,{includeEllipsisInLimit:!0}),p=d.endsWith("..."),u=s??`tag-${"string"==typeof e?e:e.value}`;return p?i.jsx(n,{arrow:!0,placement:"top",title:o,children:i.jsx("span",{...a,children:i.jsx(m.Tag,{dismissAriaLabel:O.dismissTagAriaLabel,label:d,onDismiss:r})})},u):i.jsx("span",{...a,children:i.jsx(m.Tag,{dismissAriaLabel:O.dismissTagAriaLabel,label:d,onDismiss:r})},u)})),slotProps:{popupIndicator:{onClick:e=>{l||(e.stopPropagation(),K())}}},value:C?Array.isArray(E)?E:null==E?[]:[E]:Array.isArray(E)?E.length>0?E[0]:null:E??null})};exports.Autocomplete=f,exports.default=f;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/components/molecules/Autocomplete/index.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport MuiAutocomplete, {\n type AutocompleteChangeDetails,\n type AutocompleteChangeReason,\n type AutocompleteInputChangeReason,\n type AutocompleteProps as MuiAutocompleteProps,\n type AutocompleteRenderGetTagProps,\n type AutocompleteRenderInputParams,\n type AutocompleteRenderOptionState,\n type AutocompleteValue,\n} from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n// TODO: Replace with our own Tooltip component\nimport MuiTooltip from '@mui/material/Tooltip';\n\nimport ArrowDown01Icon from '@fd/icons/ArrowDown01';\nimport ArrowUp01Icon from '@fd/icons/ArrowUp01';\nimport CancelIcon from '@fd/icons/Cancel';\nimport SearchIcon from '@fd/icons/Search';\nimport { truncateWithEllipsis } from '@fd/utilities/stringUtilities';\n\n// TODO: Replace with our own Tag component\nimport Badge from '../../atoms/Badge';\nimport CircularProgress from '../../atoms/CircularProgress';\nimport MenuItem from '../../atoms/MenuItem';\nimport TextField, { type TextFieldProps } from '../../atoms/TextField';\nimport { useDynamicLimitTags } from './hooks/useDynamicLimitTags';\n\n// Bind flags to MuiAutocomplete\ntype MuiCustomAutocompleteProps<\n M extends boolean = boolean, // Multiple\n DC extends boolean = boolean, // DisableClearable\n FS extends boolean = boolean, // FreeSolo\n> = MuiAutocompleteProps<AutocompleteOption, M, DC, FS>;\n\n/**\n * Represents an option in the Autocomplete dropdown.\n */\nexport interface AutocompleteOption {\n label: string;\n value: number | string;\n}\n\n/**\n * Props for the Autocomplete component.\n * Supports both single and multiple selection modes with optional search functionality.\n */\nexport interface AutocompleteProps\n extends Omit<TextFieldProps, 'endAdornment' | 'multiline' | 'onChange' | 'options' | 'startAdornment'> {\n /** Shows a loading indicator inside the input (e.g., while fetching). */\n loading?: boolean;\n /** Enables selection of multiple options and shows checkboxes and tags for selected values. */\n multiple?: MuiCustomAutocompleteProps['multiple'];\n /** Called when the selected value(s) change. */\n onChange: MuiCustomAutocompleteProps['onChange'];\n /** Called when the input text changes (typing or programmatic updates). */\n onInputChange?: MuiCustomAutocompleteProps['onInputChange'];\n /** Options to display in the dropdown list. */\n options: AutocompleteOption[];\n /** UI and accessibility labels used by the component. */\n translations: {\n /** Aria-label for the clear button. */\n clearTextAriaLabel: string;\n /** Text shown while loading options. */\n loadingText: string;\n /** Text shown when there are no options to display. */\n noOptionsText: string;\n /** Aria-label for the popup indicator button. */\n openPopupAriaLabel: string;\n };\n /** Visual behavior: 'search' shows a leading search icon; 'combobox' shows a popup button. */\n type?: 'combobox' | 'search';\n /** Controlled value (single option, array for multiple, or null). */\n value: MuiCustomAutocompleteProps['value'];\n}\n\n// Bind flags to MuiAutocomplete, see MuiCustomAutocompleteProps for more details\nconst MuiCustomAutocomplete = MuiAutocomplete<AutocompleteOption, boolean, boolean, boolean>;\nconst StyledAutocomplete = styled(MuiCustomAutocomplete, {\n shouldForwardProp: (prop) => prop !== 'fullWidth',\n})<{ fullWidth?: boolean }>(({ fullWidth = false }) => ({\n width: fullWidth ? '100%' : 'min(364px, 100%)',\n}));\n\nconst StyledAdornment = styled(Box, {\n shouldForwardProp: (prop) => !['clickable', 'disabled', 'placement'].includes(prop as string),\n})<{ clickable?: boolean; error?: boolean; disabled?: boolean; placement: 'end' | 'middle' | 'start' }>(\n ({ theme, clickable = false, disabled = false, placement }) => ({\n alignItems: 'center',\n cursor: clickable ? (disabled ? 'not-allowed' : 'pointer') : 'default',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n pointerEvents: clickable ? 'auto' : 'none',\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n\n '& svg': {\n color: disabled\n ? theme.palette.semantic.icon['icon-disabled']\n : theme.palette.semantic.icon['icon-strong'],\n },\n }),\n);\n\nconst StyledLoadingSpinnerContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'placement',\n})<{ placement?: 'end' | 'middle' | 'start' }>(({ theme, placement }) => ({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n}));\n\n/**\n * A customizable Autocomplete component supporting search and combobox modes.\n * Supports single and multiple selection with dynamic tag rendering and optional loading states.\n *\n * @param props - The component props\n * @returns The rendered Autocomplete component\n */\nexport const Autocomplete = ({\n disabled = false,\n errorText,\n fdKey,\n fullWidth = false,\n helperText,\n label,\n loading = false,\n multiple = false,\n placeholder,\n onChange,\n onInputChange,\n options = [],\n required = false,\n translations,\n type = 'search',\n value,\n}: AutocompleteProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const isSearch = type === 'search';\n const isCombobox = type === 'combobox';\n\n const { rootRef, limitTags } = useDynamicLimitTags({\n chipMax: 130,\n gap: 4,\n horizontalPadding: 32,\n reservedPx: isSearch ? 120 : 90,\n });\n\n // Close the dropdown (if open) when the component is dynamically disabled\n useEffect(() => {\n if (disabled) {\n setIsOpen(false);\n }\n }, [disabled]);\n\n /**\n * Toggles or sets the dropdown open state.\n * Does nothing when the component is disabled.\n *\n * @param open - Optional boolean to explicitly set open state; if undefined, toggles current state\n */\n const toggleOpen = (open?: boolean): void => {\n if (disabled) {\n return;\n }\n\n if (open !== undefined) {\n setIsOpen(open);\n return;\n }\n\n setIsOpen((prevOpen) => !prevOpen);\n };\n\n const renderSearchIcon = (): JSX.Element => {\n return (\n <StyledAdornment disabled={disabled} placement=\"start\">\n <SearchIcon aria-hidden=\"true\" />\n </StyledAdornment>\n );\n };\n\n const renderPopupIcon = (): JSX.Element => {\n return (\n <StyledAdornment clickable disabled={disabled} placement=\"end\">\n {isOpen ? <ArrowUp01Icon /> : <ArrowDown01Icon />}\n </StyledAdornment>\n );\n };\n\n const renderLoadingSpinner = (): JSX.Element => {\n return (\n <StyledLoadingSpinnerContainer placement={isSearch ? 'end' : 'middle'}>\n <CircularProgress size=\"small\" />\n </StyledLoadingSpinnerContainer>\n );\n };\n\n const renderInputField = (params: AutocompleteRenderInputParams): JSX.Element => (\n <TextField\n disabled={disabled}\n errorText={errorText}\n fdKey={fdKey}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n input: {\n ...params.InputProps,\n endAdornment: (\n <>\n {loading ? renderLoadingSpinner() : null}\n {params.InputProps.endAdornment}\n </>\n ),\n startAdornment: (\n <>\n {isSearch ? renderSearchIcon() : null}\n {params.InputProps.startAdornment}\n </>\n ),\n },\n htmlInput: {\n ...params.inputProps,\n },\n }}\n />\n );\n\n const renderMenuOption = (\n optionProps: React.HTMLAttributes<HTMLLIElement> & { key: React.Key },\n option: AutocompleteOption,\n state: AutocompleteRenderOptionState,\n ): JSX.Element => {\n const { key, onClick, ...rest } = optionProps;\n\n if (multiple) {\n return (\n <MenuItem\n {...rest}\n key={key}\n checked={state.selected}\n label={option.label}\n onCheckedChange={(_checked, e) => {\n onClick?.(e as React.MouseEvent<HTMLLIElement, MouseEvent>);\n }}\n type=\"checkbox\"\n />\n );\n }\n\n return (\n <MenuItem\n {...rest}\n key={key}\n label={option.label}\n onClick={onClick}\n selected={state.selected}\n type=\"text\"\n />\n );\n };\n\n const renderSelectedTags = (\n selected: AutocompleteOption[],\n getTagProps: AutocompleteRenderGetTagProps,\n ): React.ReactNode =>\n selected.map((tag, index) => {\n const { key, onDelete, ...tagProps } = getTagProps({ index });\n const rawLabel = typeof tag === 'string' ? tag : tag.label;\n const label = truncateWithEllipsis(rawLabel, 13, { includeEllipsisInLimit: true });\n const isTruncated = label.endsWith('...');\n const tagKey = key ?? `tag-${typeof tag === 'string' ? tag : tag.value}`;\n\n if (isTruncated) {\n return (\n <MuiTooltip key={tagKey} arrow placement=\"top\" title={rawLabel}>\n <span {...tagProps}>\n <Badge label={label} onDismiss={onDelete} />\n </span>\n </MuiTooltip>\n );\n }\n\n return (\n <span key={tagKey} {...tagProps}>\n <Badge label={label} onDismiss={onDelete} />\n </span>\n );\n });\n\n const handlePopupIndicatorClick = (event: React.MouseEvent): void => {\n if (disabled) {\n return;\n }\n\n event.stopPropagation();\n toggleOpen();\n };\n\n const handleChange = (\n event: React.SyntheticEvent,\n value: AutocompleteValue<AutocompleteOption, boolean, boolean, boolean>,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails<AutocompleteOption>,\n ): void => {\n if (!onChange) {\n return;\n }\n onChange(event, value, reason, details);\n };\n\n const handleInputChange = (\n event: React.SyntheticEvent,\n value: string,\n reason: AutocompleteInputChangeReason,\n ): void => {\n if (!onInputChange) {\n return;\n }\n onInputChange(event, value, reason);\n };\n\n /**\n * Returns all options without filtering for search mode.\n * Disables MUI's built-in client-side filtering when type is 'search'.\n */\n const disableClientFilter = (opts: AutocompleteOption[]): AutocompleteOption[] => opts;\n\n /**\n * Extracts the display label from an option.\n * Supports both object options and freeSolo string values.\n */\n const getOptionLabel = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : option.label;\n };\n\n /**\n * Provides a stable unique key for each option to optimize DOM reconciliation.\n */\n const getOptionKey = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : String(option.value);\n };\n\n /**\n * Determines equality between an option and the current value.\n * Handles both freeSolo string values and object options to prevent selection glitches.\n */\n const getIsOptionEqualToValue = (a: AutocompleteOption, b: AutocompleteOption): boolean => {\n if (b === null || b === undefined) {\n return false;\n }\n return typeof b === 'string' ? a.label === b || String(a.value) === b : a.value === b.value;\n };\n\n /**\n * Normalizes the value prop for MUI Autocomplete.\n * Handles both single and multiple selection modes, ensuring the value\n * format matches the mode (array for multiple, single value/null for single).\n *\n * @returns Normalized value compatible with MUI Autocomplete\n */\n const getValue = (): AutocompleteProps['value'] => {\n // Multiple value selection\n if (multiple) {\n if (Array.isArray(value)) return value;\n if (value === null || value === undefined) return [];\n return [value as AutocompleteOption];\n }\n\n // Single value selection\n if (Array.isArray(value)) return value.length > 0 ? value[0] : null;\n return value ?? null;\n };\n\n return (\n <StyledAutocomplete\n ref={rootRef}\n clearIcon={<CancelIcon size=\"md\" />}\n clearText={translations.clearTextAriaLabel}\n disableClearable={disabled || loading}\n disableCloseOnSelect={multiple}\n disabled={disabled}\n filterOptions={isSearch ? disableClientFilter : undefined}\n forcePopupIcon={isCombobox}\n freeSolo={isSearch}\n fullWidth={fullWidth}\n getOptionKey={getOptionKey}\n getOptionLabel={getOptionLabel}\n isOptionEqualToValue={getIsOptionEqualToValue}\n limitTags={limitTags}\n loading={loading}\n loadingText={translations.loadingText}\n multiple={multiple}\n noOptionsText={translations.noOptionsText}\n onChange={handleChange}\n onClose={() => toggleOpen(false)}\n onInputChange={handleInputChange}\n onOpen={() => toggleOpen(true)}\n open={isOpen}\n openText={translations.openPopupAriaLabel}\n options={options}\n popupIcon={isSearch ? null : renderPopupIcon()}\n renderInput={renderInputField}\n renderOption={renderMenuOption}\n renderTags={renderSelectedTags}\n slotProps={{\n popupIndicator: {\n onClick: handlePopupIndicatorClick,\n },\n }}\n value={getValue()}\n />\n );\n};\n\nexport default Autocomplete;\n"],"names":["MuiCustomAutocomplete","StyledAutocomplete","styled","shouldForwardProp","prop","fullWidth","width","StyledAdornment","Box","includes","theme","clickable","disabled","placement","alignItems","cursor","display","justifyContent","padding","pointerEvents","paddingRight","spacing","color","palette","semantic","icon","StyledLoadingSpinnerContainer","Autocomplete","errorText","fdKey","helperText","label","loading","multiple","placeholder","onChange","onInputChange","options","required","translations","type","value","isOpen","setIsOpen","useState","isSearch","isCombobox","rootRef","limitTags","useDynamicLimitTags","chipMax","gap","horizontalPadding","reservedPx","useEffect","toggleOpen","open","undefined","prevOpen","_jsx","ref","clearIcon","CancelIcon","size","clearText","clearTextAriaLabel","disableClearable","disableCloseOnSelect","filterOptions","opts","forcePopupIcon","freeSolo","getOptionKey","option","String","getOptionLabel","isOptionEqualToValue","a","b","loadingText","noOptionsText","event","reason","details","onClose","onOpen","openText","openPopupAriaLabel","popupIcon","children","ArrowUp01Icon","ArrowDown01Icon","renderInput","params","TextField","slotProps","input","InputProps","endAdornment","_jsxs","_Fragment","CircularProgress","startAdornment","SearchIcon","htmlInput","inputProps","renderOption","optionProps","state","key","onClick","rest","_createElement","MenuItem","checked","selected","onCheckedChange","_checked","e","renderTags","getTagProps","map","tag","index","onDelete","tagProps","rawLabel","truncateWithEllipsis","includeEllipsisInLimit","isTruncated","endsWith","tagKey","MuiTooltip","arrow","title","Badge","onDismiss","popupIndicator","stopPropagation","Array","isArray","length"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/components/molecules/Autocomplete/index.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport MuiAutocomplete, {\n type AutocompleteChangeDetails,\n type AutocompleteChangeReason,\n type AutocompleteInputChangeReason,\n type AutocompleteProps as MuiAutocompleteProps,\n type AutocompleteRenderGetTagProps,\n type AutocompleteRenderInputParams,\n type AutocompleteRenderOptionState,\n type AutocompleteValue,\n} from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n// TODO: Replace with our own Tooltip component\nimport MuiTooltip from '@mui/material/Tooltip';\n\nimport ArrowDown01Icon from '@fd/icons/ArrowDown01';\nimport ArrowUp01Icon from '@fd/icons/ArrowUp01';\nimport CancelIcon from '@fd/icons/Cancel';\nimport SearchIcon from '@fd/icons/Search';\nimport { truncateWithEllipsis } from '@fd/utilities/stringUtilities';\n\nimport CircularProgress from '../../atoms/CircularProgress';\nimport MenuItem from '../../atoms/MenuItem';\nimport Tag from '../../atoms/Tag';\nimport TextField, { type TextFieldProps } from '../../atoms/TextField';\nimport { useDynamicLimitTags } from './hooks/useDynamicLimitTags';\n\n// Bind flags to MuiAutocomplete\ntype MuiCustomAutocompleteProps<\n M extends boolean = boolean, // Multiple\n DC extends boolean = boolean, // DisableClearable\n FS extends boolean = boolean, // FreeSolo\n> = MuiAutocompleteProps<AutocompleteOption, M, DC, FS>;\n\n/**\n * Represents an option in the Autocomplete dropdown.\n */\nexport interface AutocompleteOption {\n label: string;\n value: number | string;\n}\n\n/**\n * Props for the Autocomplete component.\n * Supports both single and multiple selection modes with optional search functionality.\n */\nexport interface AutocompleteProps\n extends Omit<TextFieldProps, 'endAdornment' | 'multiline' | 'onChange' | 'options' | 'startAdornment'> {\n /** Shows a loading indicator inside the input (e.g., while fetching). */\n loading?: boolean;\n /** Enables selection of multiple options and shows checkboxes and tags for selected values. */\n multiple?: MuiCustomAutocompleteProps['multiple'];\n /** Called when the selected value(s) change. */\n onChange: MuiCustomAutocompleteProps['onChange'];\n /** Called when the input text changes (typing or programmatic updates). */\n onInputChange?: MuiCustomAutocompleteProps['onInputChange'];\n /** Options to display in the dropdown list. */\n options: AutocompleteOption[];\n /** UI and accessibility labels used by the component. */\n translations: {\n /** Aria-label for the clear button. */\n clearTextAriaLabel: string;\n /** Aria-label for the dismiss tag button. */\n dismissTagAriaLabel: string;\n /** Text shown while loading options. */\n loadingText: string;\n /** Text shown when there are no options to display. */\n noOptionsText: string;\n /** Aria-label for the popup indicator button. */\n openPopupAriaLabel: string;\n };\n /** Visual behavior: 'search' shows a leading search icon; 'combobox' shows a popup button. */\n type?: 'combobox' | 'search';\n /** Controlled value (single option, array for multiple, or null). */\n value: MuiCustomAutocompleteProps['value'];\n}\n\n// Bind flags to MuiAutocomplete, see MuiCustomAutocompleteProps for more details\nconst MuiCustomAutocomplete = MuiAutocomplete<AutocompleteOption, boolean, boolean, boolean>;\nconst StyledAutocomplete = styled(MuiCustomAutocomplete, {\n shouldForwardProp: (prop) => prop !== 'fullWidth',\n})<{ fullWidth?: boolean }>(({ fullWidth = false }) => ({\n width: fullWidth ? '100%' : 'min(364px, 100%)',\n}));\n\nconst StyledAdornment = styled(Box, {\n shouldForwardProp: (prop) => !['clickable', 'disabled', 'placement'].includes(prop as string),\n})<{ clickable?: boolean; error?: boolean; disabled?: boolean; placement: 'end' | 'middle' | 'start' }>(\n ({ theme, clickable = false, disabled = false, placement }) => ({\n alignItems: 'center',\n cursor: clickable ? (disabled ? 'not-allowed' : 'pointer') : 'default',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n pointerEvents: clickable ? 'auto' : 'none',\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n\n '& svg': {\n color: disabled\n ? theme.palette.semantic.icon['icon-disabled']\n : theme.palette.semantic.icon['icon-strong'],\n },\n }),\n);\n\nconst StyledLoadingSpinnerContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'placement',\n})<{ placement?: 'end' | 'middle' | 'start' }>(({ theme, placement }) => ({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n}));\n\n/**\n * A customizable Autocomplete component supporting search and combobox modes.\n * Supports single and multiple selection with dynamic tag rendering and optional loading states.\n *\n * @param props - The component props\n * @returns The rendered Autocomplete component\n */\nexport const Autocomplete = ({\n className,\n disabled = false,\n errorText,\n fdKey,\n fullWidth = false,\n helperText,\n label,\n loading = false,\n multiple = false,\n placeholder,\n onChange,\n onInputChange,\n options = [],\n required = false,\n translations,\n type = 'search',\n value,\n}: AutocompleteProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const isSearch = type === 'search';\n const isCombobox = type === 'combobox';\n\n const { rootRef, limitTags } = useDynamicLimitTags({\n chipMax: 130,\n gap: 4,\n horizontalPadding: 32,\n reservedPx: isSearch ? 120 : 90,\n });\n\n // Close the dropdown (if open) when the component is dynamically disabled\n useEffect(() => {\n if (disabled) {\n setIsOpen(false);\n }\n }, [disabled]);\n\n /**\n * Toggles or sets the dropdown open state.\n * Does nothing when the component is disabled.\n *\n * @param open - Optional boolean to explicitly set open state; if undefined, toggles current state\n */\n const toggleOpen = (open?: boolean): void => {\n if (disabled) {\n return;\n }\n\n if (open !== undefined) {\n setIsOpen(open);\n return;\n }\n\n setIsOpen((prevOpen) => !prevOpen);\n };\n\n const renderSearchIcon = (): JSX.Element => {\n return (\n <StyledAdornment disabled={disabled} placement=\"start\">\n <SearchIcon aria-hidden=\"true\" />\n </StyledAdornment>\n );\n };\n\n const renderPopupIcon = (): JSX.Element => {\n return (\n <StyledAdornment clickable disabled={disabled} placement=\"end\">\n {isOpen ? <ArrowUp01Icon /> : <ArrowDown01Icon />}\n </StyledAdornment>\n );\n };\n\n const renderLoadingSpinner = (): JSX.Element => {\n return (\n <StyledLoadingSpinnerContainer placement={isSearch ? 'end' : 'middle'}>\n <CircularProgress size=\"small\" />\n </StyledLoadingSpinnerContainer>\n );\n };\n\n const renderInputField = (params: AutocompleteRenderInputParams): JSX.Element => (\n <TextField\n disabled={disabled}\n errorText={errorText}\n fdKey={fdKey}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n input: {\n ...params.InputProps,\n endAdornment: (\n <>\n {loading ? renderLoadingSpinner() : null}\n {params.InputProps.endAdornment}\n </>\n ),\n startAdornment: (\n <>\n {isSearch ? renderSearchIcon() : null}\n {params.InputProps.startAdornment}\n </>\n ),\n },\n htmlInput: {\n ...params.inputProps,\n },\n }}\n />\n );\n\n const renderMenuOption = (\n optionProps: React.HTMLAttributes<HTMLLIElement> & { key: React.Key },\n option: AutocompleteOption,\n state: AutocompleteRenderOptionState,\n ): JSX.Element => {\n const { key, onClick, ...rest } = optionProps;\n\n if (multiple) {\n return (\n <MenuItem\n {...rest}\n key={key}\n checked={state.selected}\n label={option.label}\n onCheckedChange={(_checked, e) => {\n onClick?.(e as React.MouseEvent<HTMLLIElement, MouseEvent>);\n }}\n type=\"checkbox\"\n />\n );\n }\n\n return (\n <MenuItem\n {...rest}\n key={key}\n label={option.label}\n onClick={onClick}\n selected={state.selected}\n type=\"text\"\n />\n );\n };\n\n const renderSelectedTags = (\n selected: AutocompleteOption[],\n getTagProps: AutocompleteRenderGetTagProps,\n ): React.ReactNode =>\n selected.map((tag, index) => {\n const { key, onDelete, ...tagProps } = getTagProps({ index });\n const rawLabel = typeof tag === 'string' ? tag : tag.label;\n const label = truncateWithEllipsis(rawLabel, 13, { includeEllipsisInLimit: true });\n const isTruncated = label.endsWith('...');\n const tagKey = key ?? `tag-${typeof tag === 'string' ? tag : tag.value}`;\n\n if (isTruncated) {\n return (\n <MuiTooltip key={tagKey} arrow placement=\"top\" title={rawLabel}>\n <span {...tagProps}>\n <Tag dismissAriaLabel={translations.dismissTagAriaLabel} label={label} onDismiss={onDelete} />\n </span>\n </MuiTooltip>\n );\n }\n\n return (\n <span key={tagKey} {...tagProps}>\n <Tag dismissAriaLabel={translations.dismissTagAriaLabel} label={label} onDismiss={onDelete} />\n </span>\n );\n });\n\n const handlePopupIndicatorClick = (event: React.MouseEvent): void => {\n if (disabled) {\n return;\n }\n\n event.stopPropagation();\n toggleOpen();\n };\n\n const handleChange = (\n event: React.SyntheticEvent,\n value: AutocompleteValue<AutocompleteOption, boolean, boolean, boolean>,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails<AutocompleteOption>,\n ): void => {\n if (!onChange) {\n return;\n }\n onChange(event, value, reason, details);\n };\n\n const handleInputChange = (\n event: React.SyntheticEvent,\n value: string,\n reason: AutocompleteInputChangeReason,\n ): void => {\n if (!onInputChange) {\n return;\n }\n onInputChange(event, value, reason);\n };\n\n /**\n * Returns all options without filtering for search mode.\n * Disables MUI's built-in client-side filtering when type is 'search'.\n */\n const disableClientFilter = (opts: AutocompleteOption[]): AutocompleteOption[] => opts;\n\n /**\n * Extracts the display label from an option.\n * Supports both object options and freeSolo string values.\n */\n const getOptionLabel = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : option.label;\n };\n\n /**\n * Provides a stable unique key for each option to optimize DOM reconciliation.\n */\n const getOptionKey = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : String(option.value);\n };\n\n /**\n * Determines equality between an option and the current value.\n * Handles both freeSolo string values and object options to prevent selection glitches.\n */\n const getIsOptionEqualToValue = (a: AutocompleteOption, b: AutocompleteOption): boolean => {\n if (b === null || b === undefined) {\n return false;\n }\n return typeof b === 'string' ? a.label === b || String(a.value) === b : a.value === b.value;\n };\n\n /**\n * Normalizes the value prop for MUI Autocomplete.\n * Handles both single and multiple selection modes, ensuring the value\n * format matches the mode (array for multiple, single value/null for single).\n *\n * @returns Normalized value compatible with MUI Autocomplete\n */\n const getValue = (): AutocompleteProps['value'] => {\n // Multiple value selection\n if (multiple) {\n if (Array.isArray(value)) return value;\n if (value === null || value === undefined) return [];\n return [value as AutocompleteOption];\n }\n\n // Single value selection\n if (Array.isArray(value)) return value.length > 0 ? value[0] : null;\n return value ?? null;\n };\n\n return (\n <StyledAutocomplete\n ref={rootRef}\n className={className}\n clearIcon={<CancelIcon size=\"md\" />}\n clearText={translations.clearTextAriaLabel}\n disableClearable={disabled || loading}\n disableCloseOnSelect={multiple}\n disabled={disabled}\n filterOptions={isSearch ? disableClientFilter : undefined}\n forcePopupIcon={isCombobox}\n freeSolo={isSearch}\n fullWidth={fullWidth}\n getOptionKey={getOptionKey}\n getOptionLabel={getOptionLabel}\n isOptionEqualToValue={getIsOptionEqualToValue}\n limitTags={limitTags}\n loading={loading}\n loadingText={translations.loadingText}\n multiple={multiple}\n noOptionsText={translations.noOptionsText}\n onChange={handleChange}\n onClose={() => toggleOpen(false)}\n onInputChange={handleInputChange}\n onOpen={() => toggleOpen(true)}\n open={isOpen}\n openText={translations.openPopupAriaLabel}\n options={options}\n popupIcon={isSearch ? null : renderPopupIcon()}\n renderInput={renderInputField}\n renderOption={renderMenuOption}\n renderTags={renderSelectedTags}\n slotProps={{\n popupIndicator: {\n onClick: handlePopupIndicatorClick,\n },\n }}\n value={getValue()}\n />\n );\n};\n\nexport default Autocomplete;\n"],"names":["MuiCustomAutocomplete","StyledAutocomplete","styled","shouldForwardProp","prop","fullWidth","width","StyledAdornment","Box","includes","theme","clickable","disabled","placement","alignItems","cursor","display","justifyContent","padding","pointerEvents","paddingRight","spacing","color","palette","semantic","icon","StyledLoadingSpinnerContainer","Autocomplete","className","errorText","fdKey","helperText","label","loading","multiple","placeholder","onChange","onInputChange","options","required","translations","type","value","isOpen","setIsOpen","useState","isSearch","isCombobox","rootRef","limitTags","useDynamicLimitTags","chipMax","gap","horizontalPadding","reservedPx","useEffect","toggleOpen","open","undefined","prevOpen","_jsx","ref","clearIcon","CancelIcon","size","clearText","clearTextAriaLabel","disableClearable","disableCloseOnSelect","filterOptions","opts","forcePopupIcon","freeSolo","getOptionKey","option","String","getOptionLabel","isOptionEqualToValue","a","b","loadingText","noOptionsText","event","reason","details","onClose","onOpen","openText","openPopupAriaLabel","popupIcon","children","ArrowUp01Icon","ArrowDown01Icon","renderInput","params","TextField","slotProps","input","InputProps","endAdornment","_jsxs","_Fragment","CircularProgress","startAdornment","SearchIcon","htmlInput","inputProps","renderOption","optionProps","state","key","onClick","rest","_createElement","MenuItem","checked","selected","onCheckedChange","_checked","e","renderTags","getTagProps","map","tag","index","onDelete","tagProps","rawLabel","truncateWithEllipsis","includeEllipsisInLimit","isTruncated","endsWith","tagKey","MuiTooltip","arrow","title","Tag","dismissAriaLabel","dismissTagAriaLabel","onDismiss","popupIndicator","stopPropagation","Array","isArray","length"],"mappings":"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"}
@@ -30,6 +30,8 @@ interface AutocompleteProps extends Omit<TextFieldProps, 'endAdornment' | 'multi
30
30
  translations: {
31
31
  /** Aria-label for the clear button. */
32
32
  clearTextAriaLabel: string;
33
+ /** Aria-label for the dismiss tag button. */
34
+ dismissTagAriaLabel: string;
33
35
  /** Text shown while loading options. */
34
36
  loadingText: string;
35
37
  /** Text shown when there are no options to display. */
@@ -49,7 +51,7 @@ interface AutocompleteProps extends Omit<TextFieldProps, 'endAdornment' | 'multi
49
51
  * @param props - The component props
50
52
  * @returns The rendered Autocomplete component
51
53
  */
52
- declare const Autocomplete: ({ disabled, errorText, fdKey, fullWidth, helperText, label, loading, multiple, placeholder, onChange, onInputChange, options, required, translations, type, value, }: AutocompleteProps) => JSX.Element;
54
+ declare const Autocomplete: ({ className, disabled, errorText, fdKey, fullWidth, helperText, label, loading, multiple, placeholder, onChange, onInputChange, options, required, translations, type, value, }: AutocompleteProps) => JSX.Element;
53
55
 
54
56
  export { Autocomplete, Autocomplete as default };
55
57
  export type { AutocompleteOption, AutocompleteProps };
@@ -1,2 +1,2 @@
1
- import{useState as e,useEffect as t,createElement as i}from"react";import{jsx as n,jsxs as l,Fragment as o}from"react/jsx-runtime";import r from"@mui/material/Autocomplete";import a from"@mui/material/Box";import{styled as s}from"@mui/material/styles";import d from"@mui/material/Tooltip";import p from"../../../icons/ArrowDown01/index.js";import m from"../../../icons/ArrowUp01/index.js";import c from"../../../icons/Cancel/index.js";import u from"../../../icons/Search/index.js";import{truncateWithEllipsis as g}from"../../../utilities/stringUtilities.js";import{Badge as h}from"../../atoms/Badge/index.js";import{CircularProgress as f}from"../../atoms/CircularProgress/index.js";import{MenuItem as x}from"../../atoms/MenuItem/index.js";import{TextField as b}from"../../atoms/TextField/index.js";import{useDynamicLimitTags as y}from"./hooks/useDynamicLimitTags.js";const T=s(r,{shouldForwardProp:e=>"fullWidth"!==e})((({fullWidth:e=!1})=>({width:e?"100%":"min(364px, 100%)"}))),C=s(a,{shouldForwardProp:e=>!["clickable","disabled","placement"].includes(e)})((({theme:e,clickable:t=!1,disabled:i=!1,placement:n})=>({alignItems:"center",cursor:t?i?"not-allowed":"pointer":"default",display:"flex",justifyContent:"center",padding:0,pointerEvents:t?"auto":"none",..."start"===n&&{paddingRight:e.spacing(1)},..."middle"===n&&{padding:e.spacing(0,1)},"& svg":{color:i?e.palette.semantic.icon["icon-disabled"]:e.palette.semantic.icon["icon-strong"]}}))),I=s(a,{shouldForwardProp:e=>"placement"!==e})((({theme:e,placement:t})=>({alignItems:"center",display:"flex",justifyContent:"center",padding:0,..."start"===t&&{paddingRight:e.spacing(1)},..."middle"===t&&{padding:e.spacing(0,1)}}))),P=({disabled:r=!1,errorText:a,fdKey:s,fullWidth:P=!1,helperText:k,label:j,loading:A=!1,multiple:v=!1,placeholder:w,onChange:O,onInputChange:W,options:D=[],required:L=!1,translations:S,type:F="search",value:q})=>{const[z,E]=e(!1),K="search"===F,R="combobox"===F,{rootRef:B,limitTags:M}=y({chipMax:130,gap:4,horizontalPadding:32,reservedPx:K?120:90});t((()=>{r&&E(!1)}),[r]);const U=e=>{r||E(void 0===e?e=>!e:e)};return n(T,{ref:B,clearIcon:n(c,{size:"md"}),clearText:S.clearTextAriaLabel,disableClearable:r||A,disableCloseOnSelect:v,disabled:r,filterOptions:K?e=>e:void 0,forcePopupIcon:R,freeSolo:K,fullWidth:P,getOptionKey:e=>"string"==typeof e?e:String(e.value),getOptionLabel:e=>"string"==typeof e?e:e.label,isOptionEqualToValue:(e,t)=>null!=t&&("string"==typeof t?e.label===t||String(e.value)===t:e.value===t.value),limitTags:M,loading:A,loadingText:S.loadingText,multiple:v,noOptionsText:S.noOptionsText,onChange:(e,t,i,n)=>{O&&O(e,t,i,n)},onClose:()=>U(!1),onInputChange:(e,t,i)=>{W&&W(e,t,i)},onOpen:()=>U(!0),open:z,openText:S.openPopupAriaLabel,options:D,popupIcon:K?null:n(C,{clickable:!0,disabled:r,placement:"end",children:n(z?m:p,{})}),renderInput:e=>n(b,{disabled:r,errorText:a,fdKey:s,fullWidth:P,helperText:k,label:j,placeholder:w,required:L,slotProps:{input:{...e.InputProps,endAdornment:l(o,{children:[A?n(I,{placement:K?"end":"middle",children:n(f,{size:"small"})}):null,e.InputProps.endAdornment]}),startAdornment:l(o,{children:[K?n(C,{disabled:r,placement:"start",children:n(u,{"aria-hidden":"true"})}):null,e.InputProps.startAdornment]})},htmlInput:{...e.inputProps}}}),renderOption:(e,t,n)=>{const{key:l,onClick:o,...r}=e;return i(x,v?{...r,key:l,checked:n.selected,label:t.label,onCheckedChange:(e,t)=>{o?.(t)},type:"checkbox"}:{...r,key:l,label:t.label,onClick:o,selected:n.selected,type:"text"})},renderTags:(e,t)=>e.map(((e,i)=>{const{key:l,onDelete:o,...r}=t({index:i}),a="string"==typeof e?e:e.label,s=g(a,13,{includeEllipsisInLimit:!0}),p=s.endsWith("..."),m=l??`tag-${"string"==typeof e?e:e.value}`;return p?n(d,{arrow:!0,placement:"top",title:a,children:n("span",{...r,children:n(h,{label:s,onDismiss:o})})},m):n("span",{...r,children:n(h,{label:s,onDismiss:o})},m)})),slotProps:{popupIndicator:{onClick:e=>{r||(e.stopPropagation(),U())}}},value:v?Array.isArray(q)?q:null==q?[]:[q]:Array.isArray(q)?q.length>0?q[0]:null:q??null})};export{P as Autocomplete,P as default};
1
+ import{useState as e,useEffect as i,createElement as t}from"react";import{jsx as l,jsxs as n,Fragment as o}from"react/jsx-runtime";import r from"@mui/material/Autocomplete";import a from"@mui/material/Box";import{styled as s}from"@mui/material/styles";import d from"@mui/material/Tooltip";import p from"../../../icons/ArrowDown01/index.js";import m from"../../../icons/ArrowUp01/index.js";import c from"../../../icons/Cancel/index.js";import u from"../../../icons/Search/index.js";import{truncateWithEllipsis as g}from"../../../utilities/stringUtilities.js";import{CircularProgress as h}from"../../atoms/CircularProgress/index.js";import{MenuItem as f}from"../../atoms/MenuItem/index.js";import{Tag as b}from"../../atoms/Tag/index.js";import{TextField as x}from"../../atoms/TextField/index.js";import{useDynamicLimitTags as y}from"./hooks/useDynamicLimitTags.js";const T=s(r,{shouldForwardProp:e=>"fullWidth"!==e})((({fullWidth:e=!1})=>({width:e?"100%":"min(364px, 100%)"}))),A=s(a,{shouldForwardProp:e=>!["clickable","disabled","placement"].includes(e)})((({theme:e,clickable:i=!1,disabled:t=!1,placement:l})=>({alignItems:"center",cursor:i?t?"not-allowed":"pointer":"default",display:"flex",justifyContent:"center",padding:0,pointerEvents:i?"auto":"none",..."start"===l&&{paddingRight:e.spacing(1)},..."middle"===l&&{padding:e.spacing(0,1)},"& svg":{color:t?e.palette.semantic.icon["icon-disabled"]:e.palette.semantic.icon["icon-strong"]}}))),C=s(a,{shouldForwardProp:e=>"placement"!==e})((({theme:e,placement:i})=>({alignItems:"center",display:"flex",justifyContent:"center",padding:0,..."start"===i&&{paddingRight:e.spacing(1)},..."middle"===i&&{padding:e.spacing(0,1)}}))),I=({className:r,disabled:a=!1,errorText:s,fdKey:I,fullWidth:P=!1,helperText:k,label:j,loading:v=!1,multiple:w=!1,placeholder:L,onChange:O,onInputChange:W,options:D=[],required:S=!1,translations:F,type:q="search",value:z})=>{const[E,K]=e(!1),R="search"===q,M="combobox"===q,{rootRef:N,limitTags:U}=y({chipMax:130,gap:4,horizontalPadding:32,reservedPx:R?120:90});i((()=>{a&&K(!1)}),[a]);const B=e=>{a||K(void 0===e?e=>!e:e)};return l(T,{ref:N,className:r,clearIcon:l(c,{size:"md"}),clearText:F.clearTextAriaLabel,disableClearable:a||v,disableCloseOnSelect:w,disabled:a,filterOptions:R?e=>e:void 0,forcePopupIcon:M,freeSolo:R,fullWidth:P,getOptionKey:e=>"string"==typeof e?e:String(e.value),getOptionLabel:e=>"string"==typeof e?e:e.label,isOptionEqualToValue:(e,i)=>null!=i&&("string"==typeof i?e.label===i||String(e.value)===i:e.value===i.value),limitTags:U,loading:v,loadingText:F.loadingText,multiple:w,noOptionsText:F.noOptionsText,onChange:(e,i,t,l)=>{O&&O(e,i,t,l)},onClose:()=>B(!1),onInputChange:(e,i,t)=>{W&&W(e,i,t)},onOpen:()=>B(!0),open:E,openText:F.openPopupAriaLabel,options:D,popupIcon:R?null:l(A,{clickable:!0,disabled:a,placement:"end",children:l(E?m:p,{})}),renderInput:e=>l(x,{disabled:a,errorText:s,fdKey:I,fullWidth:P,helperText:k,label:j,placeholder:L,required:S,slotProps:{input:{...e.InputProps,endAdornment:n(o,{children:[v?l(C,{placement:R?"end":"middle",children:l(h,{size:"small"})}):null,e.InputProps.endAdornment]}),startAdornment:n(o,{children:[R?l(A,{disabled:a,placement:"start",children:l(u,{"aria-hidden":"true"})}):null,e.InputProps.startAdornment]})},htmlInput:{...e.inputProps}}}),renderOption:(e,i,l)=>{const{key:n,onClick:o,...r}=e;return t(f,w?{...r,key:n,checked:l.selected,label:i.label,onCheckedChange:(e,i)=>{o?.(i)},type:"checkbox"}:{...r,key:n,label:i.label,onClick:o,selected:l.selected,type:"text"})},renderTags:(e,i)=>e.map(((e,t)=>{const{key:n,onDelete:o,...r}=i({index:t}),a="string"==typeof e?e:e.label,s=g(a,13,{includeEllipsisInLimit:!0}),p=s.endsWith("..."),m=n??`tag-${"string"==typeof e?e:e.value}`;return p?l(d,{arrow:!0,placement:"top",title:a,children:l("span",{...r,children:l(b,{dismissAriaLabel:F.dismissTagAriaLabel,label:s,onDismiss:o})})},m):l("span",{...r,children:l(b,{dismissAriaLabel:F.dismissTagAriaLabel,label:s,onDismiss:o})},m)})),slotProps:{popupIndicator:{onClick:e=>{a||(e.stopPropagation(),B())}}},value:w?Array.isArray(z)?z:null==z?[]:[z]:Array.isArray(z)?z.length>0?z[0]:null:z??null})};export{I as Autocomplete,I as default};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/molecules/Autocomplete/index.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport MuiAutocomplete, {\n type AutocompleteChangeDetails,\n type AutocompleteChangeReason,\n type AutocompleteInputChangeReason,\n type AutocompleteProps as MuiAutocompleteProps,\n type AutocompleteRenderGetTagProps,\n type AutocompleteRenderInputParams,\n type AutocompleteRenderOptionState,\n type AutocompleteValue,\n} from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n// TODO: Replace with our own Tooltip component\nimport MuiTooltip from '@mui/material/Tooltip';\n\nimport ArrowDown01Icon from '@fd/icons/ArrowDown01';\nimport ArrowUp01Icon from '@fd/icons/ArrowUp01';\nimport CancelIcon from '@fd/icons/Cancel';\nimport SearchIcon from '@fd/icons/Search';\nimport { truncateWithEllipsis } from '@fd/utilities/stringUtilities';\n\n// TODO: Replace with our own Tag component\nimport Badge from '../../atoms/Badge';\nimport CircularProgress from '../../atoms/CircularProgress';\nimport MenuItem from '../../atoms/MenuItem';\nimport TextField, { type TextFieldProps } from '../../atoms/TextField';\nimport { useDynamicLimitTags } from './hooks/useDynamicLimitTags';\n\n// Bind flags to MuiAutocomplete\ntype MuiCustomAutocompleteProps<\n M extends boolean = boolean, // Multiple\n DC extends boolean = boolean, // DisableClearable\n FS extends boolean = boolean, // FreeSolo\n> = MuiAutocompleteProps<AutocompleteOption, M, DC, FS>;\n\n/**\n * Represents an option in the Autocomplete dropdown.\n */\nexport interface AutocompleteOption {\n label: string;\n value: number | string;\n}\n\n/**\n * Props for the Autocomplete component.\n * Supports both single and multiple selection modes with optional search functionality.\n */\nexport interface AutocompleteProps\n extends Omit<TextFieldProps, 'endAdornment' | 'multiline' | 'onChange' | 'options' | 'startAdornment'> {\n /** Shows a loading indicator inside the input (e.g., while fetching). */\n loading?: boolean;\n /** Enables selection of multiple options and shows checkboxes and tags for selected values. */\n multiple?: MuiCustomAutocompleteProps['multiple'];\n /** Called when the selected value(s) change. */\n onChange: MuiCustomAutocompleteProps['onChange'];\n /** Called when the input text changes (typing or programmatic updates). */\n onInputChange?: MuiCustomAutocompleteProps['onInputChange'];\n /** Options to display in the dropdown list. */\n options: AutocompleteOption[];\n /** UI and accessibility labels used by the component. */\n translations: {\n /** Aria-label for the clear button. */\n clearTextAriaLabel: string;\n /** Text shown while loading options. */\n loadingText: string;\n /** Text shown when there are no options to display. */\n noOptionsText: string;\n /** Aria-label for the popup indicator button. */\n openPopupAriaLabel: string;\n };\n /** Visual behavior: 'search' shows a leading search icon; 'combobox' shows a popup button. */\n type?: 'combobox' | 'search';\n /** Controlled value (single option, array for multiple, or null). */\n value: MuiCustomAutocompleteProps['value'];\n}\n\n// Bind flags to MuiAutocomplete, see MuiCustomAutocompleteProps for more details\nconst MuiCustomAutocomplete = MuiAutocomplete<AutocompleteOption, boolean, boolean, boolean>;\nconst StyledAutocomplete = styled(MuiCustomAutocomplete, {\n shouldForwardProp: (prop) => prop !== 'fullWidth',\n})<{ fullWidth?: boolean }>(({ fullWidth = false }) => ({\n width: fullWidth ? '100%' : 'min(364px, 100%)',\n}));\n\nconst StyledAdornment = styled(Box, {\n shouldForwardProp: (prop) => !['clickable', 'disabled', 'placement'].includes(prop as string),\n})<{ clickable?: boolean; error?: boolean; disabled?: boolean; placement: 'end' | 'middle' | 'start' }>(\n ({ theme, clickable = false, disabled = false, placement }) => ({\n alignItems: 'center',\n cursor: clickable ? (disabled ? 'not-allowed' : 'pointer') : 'default',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n pointerEvents: clickable ? 'auto' : 'none',\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n\n '& svg': {\n color: disabled\n ? theme.palette.semantic.icon['icon-disabled']\n : theme.palette.semantic.icon['icon-strong'],\n },\n }),\n);\n\nconst StyledLoadingSpinnerContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'placement',\n})<{ placement?: 'end' | 'middle' | 'start' }>(({ theme, placement }) => ({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n}));\n\n/**\n * A customizable Autocomplete component supporting search and combobox modes.\n * Supports single and multiple selection with dynamic tag rendering and optional loading states.\n *\n * @param props - The component props\n * @returns The rendered Autocomplete component\n */\nexport const Autocomplete = ({\n disabled = false,\n errorText,\n fdKey,\n fullWidth = false,\n helperText,\n label,\n loading = false,\n multiple = false,\n placeholder,\n onChange,\n onInputChange,\n options = [],\n required = false,\n translations,\n type = 'search',\n value,\n}: AutocompleteProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const isSearch = type === 'search';\n const isCombobox = type === 'combobox';\n\n const { rootRef, limitTags } = useDynamicLimitTags({\n chipMax: 130,\n gap: 4,\n horizontalPadding: 32,\n reservedPx: isSearch ? 120 : 90,\n });\n\n // Close the dropdown (if open) when the component is dynamically disabled\n useEffect(() => {\n if (disabled) {\n setIsOpen(false);\n }\n }, [disabled]);\n\n /**\n * Toggles or sets the dropdown open state.\n * Does nothing when the component is disabled.\n *\n * @param open - Optional boolean to explicitly set open state; if undefined, toggles current state\n */\n const toggleOpen = (open?: boolean): void => {\n if (disabled) {\n return;\n }\n\n if (open !== undefined) {\n setIsOpen(open);\n return;\n }\n\n setIsOpen((prevOpen) => !prevOpen);\n };\n\n const renderSearchIcon = (): JSX.Element => {\n return (\n <StyledAdornment disabled={disabled} placement=\"start\">\n <SearchIcon aria-hidden=\"true\" />\n </StyledAdornment>\n );\n };\n\n const renderPopupIcon = (): JSX.Element => {\n return (\n <StyledAdornment clickable disabled={disabled} placement=\"end\">\n {isOpen ? <ArrowUp01Icon /> : <ArrowDown01Icon />}\n </StyledAdornment>\n );\n };\n\n const renderLoadingSpinner = (): JSX.Element => {\n return (\n <StyledLoadingSpinnerContainer placement={isSearch ? 'end' : 'middle'}>\n <CircularProgress size=\"small\" />\n </StyledLoadingSpinnerContainer>\n );\n };\n\n const renderInputField = (params: AutocompleteRenderInputParams): JSX.Element => (\n <TextField\n disabled={disabled}\n errorText={errorText}\n fdKey={fdKey}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n input: {\n ...params.InputProps,\n endAdornment: (\n <>\n {loading ? renderLoadingSpinner() : null}\n {params.InputProps.endAdornment}\n </>\n ),\n startAdornment: (\n <>\n {isSearch ? renderSearchIcon() : null}\n {params.InputProps.startAdornment}\n </>\n ),\n },\n htmlInput: {\n ...params.inputProps,\n },\n }}\n />\n );\n\n const renderMenuOption = (\n optionProps: React.HTMLAttributes<HTMLLIElement> & { key: React.Key },\n option: AutocompleteOption,\n state: AutocompleteRenderOptionState,\n ): JSX.Element => {\n const { key, onClick, ...rest } = optionProps;\n\n if (multiple) {\n return (\n <MenuItem\n {...rest}\n key={key}\n checked={state.selected}\n label={option.label}\n onCheckedChange={(_checked, e) => {\n onClick?.(e as React.MouseEvent<HTMLLIElement, MouseEvent>);\n }}\n type=\"checkbox\"\n />\n );\n }\n\n return (\n <MenuItem\n {...rest}\n key={key}\n label={option.label}\n onClick={onClick}\n selected={state.selected}\n type=\"text\"\n />\n );\n };\n\n const renderSelectedTags = (\n selected: AutocompleteOption[],\n getTagProps: AutocompleteRenderGetTagProps,\n ): React.ReactNode =>\n selected.map((tag, index) => {\n const { key, onDelete, ...tagProps } = getTagProps({ index });\n const rawLabel = typeof tag === 'string' ? tag : tag.label;\n const label = truncateWithEllipsis(rawLabel, 13, { includeEllipsisInLimit: true });\n const isTruncated = label.endsWith('...');\n const tagKey = key ?? `tag-${typeof tag === 'string' ? tag : tag.value}`;\n\n if (isTruncated) {\n return (\n <MuiTooltip key={tagKey} arrow placement=\"top\" title={rawLabel}>\n <span {...tagProps}>\n <Badge label={label} onDismiss={onDelete} />\n </span>\n </MuiTooltip>\n );\n }\n\n return (\n <span key={tagKey} {...tagProps}>\n <Badge label={label} onDismiss={onDelete} />\n </span>\n );\n });\n\n const handlePopupIndicatorClick = (event: React.MouseEvent): void => {\n if (disabled) {\n return;\n }\n\n event.stopPropagation();\n toggleOpen();\n };\n\n const handleChange = (\n event: React.SyntheticEvent,\n value: AutocompleteValue<AutocompleteOption, boolean, boolean, boolean>,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails<AutocompleteOption>,\n ): void => {\n if (!onChange) {\n return;\n }\n onChange(event, value, reason, details);\n };\n\n const handleInputChange = (\n event: React.SyntheticEvent,\n value: string,\n reason: AutocompleteInputChangeReason,\n ): void => {\n if (!onInputChange) {\n return;\n }\n onInputChange(event, value, reason);\n };\n\n /**\n * Returns all options without filtering for search mode.\n * Disables MUI's built-in client-side filtering when type is 'search'.\n */\n const disableClientFilter = (opts: AutocompleteOption[]): AutocompleteOption[] => opts;\n\n /**\n * Extracts the display label from an option.\n * Supports both object options and freeSolo string values.\n */\n const getOptionLabel = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : option.label;\n };\n\n /**\n * Provides a stable unique key for each option to optimize DOM reconciliation.\n */\n const getOptionKey = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : String(option.value);\n };\n\n /**\n * Determines equality between an option and the current value.\n * Handles both freeSolo string values and object options to prevent selection glitches.\n */\n const getIsOptionEqualToValue = (a: AutocompleteOption, b: AutocompleteOption): boolean => {\n if (b === null || b === undefined) {\n return false;\n }\n return typeof b === 'string' ? a.label === b || String(a.value) === b : a.value === b.value;\n };\n\n /**\n * Normalizes the value prop for MUI Autocomplete.\n * Handles both single and multiple selection modes, ensuring the value\n * format matches the mode (array for multiple, single value/null for single).\n *\n * @returns Normalized value compatible with MUI Autocomplete\n */\n const getValue = (): AutocompleteProps['value'] => {\n // Multiple value selection\n if (multiple) {\n if (Array.isArray(value)) return value;\n if (value === null || value === undefined) return [];\n return [value as AutocompleteOption];\n }\n\n // Single value selection\n if (Array.isArray(value)) return value.length > 0 ? value[0] : null;\n return value ?? null;\n };\n\n return (\n <StyledAutocomplete\n ref={rootRef}\n clearIcon={<CancelIcon size=\"md\" />}\n clearText={translations.clearTextAriaLabel}\n disableClearable={disabled || loading}\n disableCloseOnSelect={multiple}\n disabled={disabled}\n filterOptions={isSearch ? disableClientFilter : undefined}\n forcePopupIcon={isCombobox}\n freeSolo={isSearch}\n fullWidth={fullWidth}\n getOptionKey={getOptionKey}\n getOptionLabel={getOptionLabel}\n isOptionEqualToValue={getIsOptionEqualToValue}\n limitTags={limitTags}\n loading={loading}\n loadingText={translations.loadingText}\n multiple={multiple}\n noOptionsText={translations.noOptionsText}\n onChange={handleChange}\n onClose={() => toggleOpen(false)}\n onInputChange={handleInputChange}\n onOpen={() => toggleOpen(true)}\n open={isOpen}\n openText={translations.openPopupAriaLabel}\n options={options}\n popupIcon={isSearch ? null : renderPopupIcon()}\n renderInput={renderInputField}\n renderOption={renderMenuOption}\n renderTags={renderSelectedTags}\n slotProps={{\n popupIndicator: {\n onClick: handlePopupIndicatorClick,\n },\n }}\n value={getValue()}\n />\n );\n};\n\nexport default Autocomplete;\n"],"names":["StyledAutocomplete","styled","shouldForwardProp","prop","fullWidth","width","StyledAdornment","Box","includes","theme","clickable","disabled","placement","alignItems","cursor","display","justifyContent","padding","pointerEvents","paddingRight","spacing","color","palette","semantic","icon","StyledLoadingSpinnerContainer","Autocomplete","errorText","fdKey","helperText","label","loading","multiple","placeholder","onChange","onInputChange","options","required","translations","type","value","isOpen","setIsOpen","useState","isSearch","isCombobox","rootRef","limitTags","useDynamicLimitTags","chipMax","gap","horizontalPadding","reservedPx","useEffect","toggleOpen","open","undefined","prevOpen","_jsx","ref","clearIcon","CancelIcon","size","clearText","clearTextAriaLabel","disableClearable","disableCloseOnSelect","filterOptions","opts","forcePopupIcon","freeSolo","getOptionKey","option","String","getOptionLabel","isOptionEqualToValue","a","b","loadingText","noOptionsText","event","reason","details","onClose","onOpen","openText","openPopupAriaLabel","popupIcon","children","ArrowUp01Icon","ArrowDown01Icon","renderInput","params","TextField","slotProps","input","InputProps","endAdornment","_jsxs","_Fragment","CircularProgress","startAdornment","SearchIcon","htmlInput","inputProps","renderOption","optionProps","state","key","onClick","rest","_createElement","MenuItem","checked","selected","onCheckedChange","_checked","e","renderTags","getTagProps","map","tag","index","onDelete","tagProps","rawLabel","truncateWithEllipsis","includeEllipsisInLimit","isTruncated","endsWith","tagKey","MuiTooltip","arrow","title","Badge","onDismiss","popupIndicator","stopPropagation","Array","isArray","length"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/molecules/Autocomplete/index.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport MuiAutocomplete, {\n type AutocompleteChangeDetails,\n type AutocompleteChangeReason,\n type AutocompleteInputChangeReason,\n type AutocompleteProps as MuiAutocompleteProps,\n type AutocompleteRenderGetTagProps,\n type AutocompleteRenderInputParams,\n type AutocompleteRenderOptionState,\n type AutocompleteValue,\n} from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n// TODO: Replace with our own Tooltip component\nimport MuiTooltip from '@mui/material/Tooltip';\n\nimport ArrowDown01Icon from '@fd/icons/ArrowDown01';\nimport ArrowUp01Icon from '@fd/icons/ArrowUp01';\nimport CancelIcon from '@fd/icons/Cancel';\nimport SearchIcon from '@fd/icons/Search';\nimport { truncateWithEllipsis } from '@fd/utilities/stringUtilities';\n\nimport CircularProgress from '../../atoms/CircularProgress';\nimport MenuItem from '../../atoms/MenuItem';\nimport Tag from '../../atoms/Tag';\nimport TextField, { type TextFieldProps } from '../../atoms/TextField';\nimport { useDynamicLimitTags } from './hooks/useDynamicLimitTags';\n\n// Bind flags to MuiAutocomplete\ntype MuiCustomAutocompleteProps<\n M extends boolean = boolean, // Multiple\n DC extends boolean = boolean, // DisableClearable\n FS extends boolean = boolean, // FreeSolo\n> = MuiAutocompleteProps<AutocompleteOption, M, DC, FS>;\n\n/**\n * Represents an option in the Autocomplete dropdown.\n */\nexport interface AutocompleteOption {\n label: string;\n value: number | string;\n}\n\n/**\n * Props for the Autocomplete component.\n * Supports both single and multiple selection modes with optional search functionality.\n */\nexport interface AutocompleteProps\n extends Omit<TextFieldProps, 'endAdornment' | 'multiline' | 'onChange' | 'options' | 'startAdornment'> {\n /** Shows a loading indicator inside the input (e.g., while fetching). */\n loading?: boolean;\n /** Enables selection of multiple options and shows checkboxes and tags for selected values. */\n multiple?: MuiCustomAutocompleteProps['multiple'];\n /** Called when the selected value(s) change. */\n onChange: MuiCustomAutocompleteProps['onChange'];\n /** Called when the input text changes (typing or programmatic updates). */\n onInputChange?: MuiCustomAutocompleteProps['onInputChange'];\n /** Options to display in the dropdown list. */\n options: AutocompleteOption[];\n /** UI and accessibility labels used by the component. */\n translations: {\n /** Aria-label for the clear button. */\n clearTextAriaLabel: string;\n /** Aria-label for the dismiss tag button. */\n dismissTagAriaLabel: string;\n /** Text shown while loading options. */\n loadingText: string;\n /** Text shown when there are no options to display. */\n noOptionsText: string;\n /** Aria-label for the popup indicator button. */\n openPopupAriaLabel: string;\n };\n /** Visual behavior: 'search' shows a leading search icon; 'combobox' shows a popup button. */\n type?: 'combobox' | 'search';\n /** Controlled value (single option, array for multiple, or null). */\n value: MuiCustomAutocompleteProps['value'];\n}\n\n// Bind flags to MuiAutocomplete, see MuiCustomAutocompleteProps for more details\nconst MuiCustomAutocomplete = MuiAutocomplete<AutocompleteOption, boolean, boolean, boolean>;\nconst StyledAutocomplete = styled(MuiCustomAutocomplete, {\n shouldForwardProp: (prop) => prop !== 'fullWidth',\n})<{ fullWidth?: boolean }>(({ fullWidth = false }) => ({\n width: fullWidth ? '100%' : 'min(364px, 100%)',\n}));\n\nconst StyledAdornment = styled(Box, {\n shouldForwardProp: (prop) => !['clickable', 'disabled', 'placement'].includes(prop as string),\n})<{ clickable?: boolean; error?: boolean; disabled?: boolean; placement: 'end' | 'middle' | 'start' }>(\n ({ theme, clickable = false, disabled = false, placement }) => ({\n alignItems: 'center',\n cursor: clickable ? (disabled ? 'not-allowed' : 'pointer') : 'default',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n pointerEvents: clickable ? 'auto' : 'none',\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n\n '& svg': {\n color: disabled\n ? theme.palette.semantic.icon['icon-disabled']\n : theme.palette.semantic.icon['icon-strong'],\n },\n }),\n);\n\nconst StyledLoadingSpinnerContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'placement',\n})<{ placement?: 'end' | 'middle' | 'start' }>(({ theme, placement }) => ({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n padding: 0,\n\n ...(placement === 'start' && { paddingRight: theme.spacing(1) }),\n ...(placement === 'middle' && { padding: theme.spacing(0, 1) }),\n}));\n\n/**\n * A customizable Autocomplete component supporting search and combobox modes.\n * Supports single and multiple selection with dynamic tag rendering and optional loading states.\n *\n * @param props - The component props\n * @returns The rendered Autocomplete component\n */\nexport const Autocomplete = ({\n className,\n disabled = false,\n errorText,\n fdKey,\n fullWidth = false,\n helperText,\n label,\n loading = false,\n multiple = false,\n placeholder,\n onChange,\n onInputChange,\n options = [],\n required = false,\n translations,\n type = 'search',\n value,\n}: AutocompleteProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n const isSearch = type === 'search';\n const isCombobox = type === 'combobox';\n\n const { rootRef, limitTags } = useDynamicLimitTags({\n chipMax: 130,\n gap: 4,\n horizontalPadding: 32,\n reservedPx: isSearch ? 120 : 90,\n });\n\n // Close the dropdown (if open) when the component is dynamically disabled\n useEffect(() => {\n if (disabled) {\n setIsOpen(false);\n }\n }, [disabled]);\n\n /**\n * Toggles or sets the dropdown open state.\n * Does nothing when the component is disabled.\n *\n * @param open - Optional boolean to explicitly set open state; if undefined, toggles current state\n */\n const toggleOpen = (open?: boolean): void => {\n if (disabled) {\n return;\n }\n\n if (open !== undefined) {\n setIsOpen(open);\n return;\n }\n\n setIsOpen((prevOpen) => !prevOpen);\n };\n\n const renderSearchIcon = (): JSX.Element => {\n return (\n <StyledAdornment disabled={disabled} placement=\"start\">\n <SearchIcon aria-hidden=\"true\" />\n </StyledAdornment>\n );\n };\n\n const renderPopupIcon = (): JSX.Element => {\n return (\n <StyledAdornment clickable disabled={disabled} placement=\"end\">\n {isOpen ? <ArrowUp01Icon /> : <ArrowDown01Icon />}\n </StyledAdornment>\n );\n };\n\n const renderLoadingSpinner = (): JSX.Element => {\n return (\n <StyledLoadingSpinnerContainer placement={isSearch ? 'end' : 'middle'}>\n <CircularProgress size=\"small\" />\n </StyledLoadingSpinnerContainer>\n );\n };\n\n const renderInputField = (params: AutocompleteRenderInputParams): JSX.Element => (\n <TextField\n disabled={disabled}\n errorText={errorText}\n fdKey={fdKey}\n fullWidth={fullWidth}\n helperText={helperText}\n label={label}\n placeholder={placeholder}\n required={required}\n slotProps={{\n input: {\n ...params.InputProps,\n endAdornment: (\n <>\n {loading ? renderLoadingSpinner() : null}\n {params.InputProps.endAdornment}\n </>\n ),\n startAdornment: (\n <>\n {isSearch ? renderSearchIcon() : null}\n {params.InputProps.startAdornment}\n </>\n ),\n },\n htmlInput: {\n ...params.inputProps,\n },\n }}\n />\n );\n\n const renderMenuOption = (\n optionProps: React.HTMLAttributes<HTMLLIElement> & { key: React.Key },\n option: AutocompleteOption,\n state: AutocompleteRenderOptionState,\n ): JSX.Element => {\n const { key, onClick, ...rest } = optionProps;\n\n if (multiple) {\n return (\n <MenuItem\n {...rest}\n key={key}\n checked={state.selected}\n label={option.label}\n onCheckedChange={(_checked, e) => {\n onClick?.(e as React.MouseEvent<HTMLLIElement, MouseEvent>);\n }}\n type=\"checkbox\"\n />\n );\n }\n\n return (\n <MenuItem\n {...rest}\n key={key}\n label={option.label}\n onClick={onClick}\n selected={state.selected}\n type=\"text\"\n />\n );\n };\n\n const renderSelectedTags = (\n selected: AutocompleteOption[],\n getTagProps: AutocompleteRenderGetTagProps,\n ): React.ReactNode =>\n selected.map((tag, index) => {\n const { key, onDelete, ...tagProps } = getTagProps({ index });\n const rawLabel = typeof tag === 'string' ? tag : tag.label;\n const label = truncateWithEllipsis(rawLabel, 13, { includeEllipsisInLimit: true });\n const isTruncated = label.endsWith('...');\n const tagKey = key ?? `tag-${typeof tag === 'string' ? tag : tag.value}`;\n\n if (isTruncated) {\n return (\n <MuiTooltip key={tagKey} arrow placement=\"top\" title={rawLabel}>\n <span {...tagProps}>\n <Tag dismissAriaLabel={translations.dismissTagAriaLabel} label={label} onDismiss={onDelete} />\n </span>\n </MuiTooltip>\n );\n }\n\n return (\n <span key={tagKey} {...tagProps}>\n <Tag dismissAriaLabel={translations.dismissTagAriaLabel} label={label} onDismiss={onDelete} />\n </span>\n );\n });\n\n const handlePopupIndicatorClick = (event: React.MouseEvent): void => {\n if (disabled) {\n return;\n }\n\n event.stopPropagation();\n toggleOpen();\n };\n\n const handleChange = (\n event: React.SyntheticEvent,\n value: AutocompleteValue<AutocompleteOption, boolean, boolean, boolean>,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails<AutocompleteOption>,\n ): void => {\n if (!onChange) {\n return;\n }\n onChange(event, value, reason, details);\n };\n\n const handleInputChange = (\n event: React.SyntheticEvent,\n value: string,\n reason: AutocompleteInputChangeReason,\n ): void => {\n if (!onInputChange) {\n return;\n }\n onInputChange(event, value, reason);\n };\n\n /**\n * Returns all options without filtering for search mode.\n * Disables MUI's built-in client-side filtering when type is 'search'.\n */\n const disableClientFilter = (opts: AutocompleteOption[]): AutocompleteOption[] => opts;\n\n /**\n * Extracts the display label from an option.\n * Supports both object options and freeSolo string values.\n */\n const getOptionLabel = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : option.label;\n };\n\n /**\n * Provides a stable unique key for each option to optimize DOM reconciliation.\n */\n const getOptionKey = (option: AutocompleteOption | string): string => {\n return typeof option === 'string' ? option : String(option.value);\n };\n\n /**\n * Determines equality between an option and the current value.\n * Handles both freeSolo string values and object options to prevent selection glitches.\n */\n const getIsOptionEqualToValue = (a: AutocompleteOption, b: AutocompleteOption): boolean => {\n if (b === null || b === undefined) {\n return false;\n }\n return typeof b === 'string' ? a.label === b || String(a.value) === b : a.value === b.value;\n };\n\n /**\n * Normalizes the value prop for MUI Autocomplete.\n * Handles both single and multiple selection modes, ensuring the value\n * format matches the mode (array for multiple, single value/null for single).\n *\n * @returns Normalized value compatible with MUI Autocomplete\n */\n const getValue = (): AutocompleteProps['value'] => {\n // Multiple value selection\n if (multiple) {\n if (Array.isArray(value)) return value;\n if (value === null || value === undefined) return [];\n return [value as AutocompleteOption];\n }\n\n // Single value selection\n if (Array.isArray(value)) return value.length > 0 ? value[0] : null;\n return value ?? null;\n };\n\n return (\n <StyledAutocomplete\n ref={rootRef}\n className={className}\n clearIcon={<CancelIcon size=\"md\" />}\n clearText={translations.clearTextAriaLabel}\n disableClearable={disabled || loading}\n disableCloseOnSelect={multiple}\n disabled={disabled}\n filterOptions={isSearch ? disableClientFilter : undefined}\n forcePopupIcon={isCombobox}\n freeSolo={isSearch}\n fullWidth={fullWidth}\n getOptionKey={getOptionKey}\n getOptionLabel={getOptionLabel}\n isOptionEqualToValue={getIsOptionEqualToValue}\n limitTags={limitTags}\n loading={loading}\n loadingText={translations.loadingText}\n multiple={multiple}\n noOptionsText={translations.noOptionsText}\n onChange={handleChange}\n onClose={() => toggleOpen(false)}\n onInputChange={handleInputChange}\n onOpen={() => toggleOpen(true)}\n open={isOpen}\n openText={translations.openPopupAriaLabel}\n options={options}\n popupIcon={isSearch ? null : renderPopupIcon()}\n renderInput={renderInputField}\n renderOption={renderMenuOption}\n renderTags={renderSelectedTags}\n slotProps={{\n popupIndicator: {\n onClick: handlePopupIndicatorClick,\n },\n }}\n value={getValue()}\n />\n );\n};\n\nexport default Autocomplete;\n"],"names":["StyledAutocomplete","styled","shouldForwardProp","prop","fullWidth","width","StyledAdornment","Box","includes","theme","clickable","disabled","placement","alignItems","cursor","display","justifyContent","padding","pointerEvents","paddingRight","spacing","color","palette","semantic","icon","StyledLoadingSpinnerContainer","Autocomplete","className","errorText","fdKey","helperText","label","loading","multiple","placeholder","onChange","onInputChange","options","required","translations","type","value","isOpen","setIsOpen","useState","isSearch","isCombobox","rootRef","limitTags","useDynamicLimitTags","chipMax","gap","horizontalPadding","reservedPx","useEffect","toggleOpen","open","undefined","prevOpen","_jsx","ref","clearIcon","CancelIcon","size","clearText","clearTextAriaLabel","disableClearable","disableCloseOnSelect","filterOptions","opts","forcePopupIcon","freeSolo","getOptionKey","option","String","getOptionLabel","isOptionEqualToValue","a","b","loadingText","noOptionsText","event","reason","details","onClose","onOpen","openText","openPopupAriaLabel","popupIcon","children","ArrowUp01Icon","ArrowDown01Icon","renderInput","params","TextField","slotProps","input","InputProps","endAdornment","_jsxs","_Fragment","CircularProgress","startAdornment","SearchIcon","htmlInput","inputProps","renderOption","optionProps","state","key","onClick","rest","_createElement","MenuItem","checked","selected","onCheckedChange","_checked","e","renderTags","getTagProps","map","tag","index","onDelete","tagProps","rawLabel","truncateWithEllipsis","includeEllipsisInLimit","isTruncated","endsWith","tagKey","MuiTooltip","arrow","title","Tag","dismissAriaLabel","dismissTagAriaLabel","onDismiss","popupIndicator","stopPropagation","Array","isArray","length"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@mui/material/styles/createTheme"),r=require("../components/atoms/Button/buttonThemeOverrides.cjs.js"),s=require("../components/atoms/IconButton/iconButtonThemeOverrides.cjs.js"),i=require("../icons/Cancel/index.cjs.js"),t=require("./overrides/autocompleteOverrides.cjs.js"),o=require("./overrides/checkboxOverrides.cjs.js"),a=require("./overrides/formControlLabelOverrides.cjs.js"),d=require("./overrides/formHelperTextOverrides.cjs.js"),u=require("./overrides/formLabelOverrides.cjs.js"),n=require("./overrides/inputBaseOverrides.cjs.js"),p=require("./overrides/inputLabelOverrides.cjs.js"),l=require("./overrides/listItemTextOverrides.cjs.js"),c=require("./overrides/menuItemOverrides.cjs.js"),v=require("./overrides/menuOverrides.cjs.js"),m=require("./overrides/selectOverrides.cjs.js"),j=require("./overrides/textFieldOverrides.cjs.js"),h=require("./tokens/breakpoints/breakpoints.cjs.js"),b=require("./tokens/colours/semantic.cjs.js"),y=require("./tokens/radius/radius.cjs.js"),O=require("./tokens/shadows/shadows.cjs.js"),g=require("./tokens/typography/variant-mapping.cjs.js"),M=require("./typography.cjs.js");const x=x=>{const k={typography:M.typography,palette:"light"===x?b.lightColours:b.darkColours,radius:y.radius,breakpoints:{values:h.breakpointValues},customShadows:{...O.shadows}},q=e(k);return Object.keys(M.typography).forEach((e=>{const r=e.split(/(?=[A-Z])/)[0],s=e;q.typography[s]={...q.typography[s],[q.breakpoints.down("tablet")]:{...M.getMobileTextStyle(r)}}})),e({...k,typography:q.typography,shape:{borderRadius:4},customShadows:q.customShadows,components:{MuiAlert:{defaultProps:{components:{CloseIcon:i}},styleOverrides:{root:{borderRadius:"8px",padding:"24px"},icon:{marginRight:"12px",padding:0},action:{padding:0,"& button":{marginTop:"-5px"}},message:{padding:0}}},MuiButton:r.buttonStyleOverrides(q),MuiIconButton:s.iconButtonStyleOverrides(),MuiCard:{styleOverrides:{root:{boxShadow:"none",borderWidth:"1px",borderStyle:"solid",borderColor:q.palette.divider}}},MuiChip:{styleOverrides:{root:{fontWeight:"bold",paddingLeft:"6px",paddingRight:"6px"}}},MuiListItemButton:{styleOverrides:{root:{"&:hover":{backgroundColor:q.palette.semantic.fill["fill-primary-weak"]},"&:not(:last-child)":{borderBottom:`1px solid ${q.palette.semantic.stroke["stroke-weak"]}`}}}},MuiTableRow:{styleOverrides:{root:{"&.MuiTableRow-hover:hover":{backgroundColor:q.palette.semantic.fill["fill-secondary"],cursor:"pointer"}}}},MuiTypography:{defaultProps:{variantMapping:g.typographyVariantMapping}},MuiAutocomplete:t.autocompleteOverrides(q),MuiCheckbox:o.checkboxOverrides(q),MuiFormControlLabel:a.formControlLabelOverrides(q),MuiFormHelperText:d.formHelperTextOverrides(q),MuiFormLabel:u.formLabelOverrides(q),MuiInputBase:n.inputBaseOverrides(q),MuiInputLabel:p.inputLabelOverrides(q),MuiListItemText:l.listItemTextOverrides(q),MuiMenu:v.menuOverrides(q),MuiMenuItem:c.menuItemOverrides(q),MuiSelect:m.selectOverrides(q),MuiTextField:j.textFieldOverrides(q)}})},k=x("light"),q=x("dark");exports.darkTheme=q,exports.lightTheme=k;
1
+ "use strict";var e=require("@mui/material/styles/createTheme"),r=require("../components/atoms/Button/buttonThemeOverrides.cjs.js"),s=require("../components/atoms/IconButton/iconButtonThemeOverrides.cjs.js"),i=require("../icons/Cancel/index.cjs.js"),t=require("./overrides/autocompleteOverrides.cjs.js"),o=require("./overrides/buttonBaseOverrides.cjs.js"),a=require("./overrides/checkboxOverrides.cjs.js"),d=require("./overrides/chipOverrides.cjs.js"),u=require("./overrides/formControlLabelOverrides.cjs.js"),n=require("./overrides/formHelperTextOverrides.cjs.js"),p=require("./overrides/formLabelOverrides.cjs.js"),l=require("./overrides/inputBaseOverrides.cjs.js"),c=require("./overrides/inputLabelOverrides.cjs.js"),v=require("./overrides/listItemTextOverrides.cjs.js"),m=require("./overrides/menuItemOverrides.cjs.js"),j=require("./overrides/menuOverrides.cjs.js"),h=require("./overrides/selectOverrides.cjs.js"),O=require("./overrides/textFieldOverrides.cjs.js"),b=require("./tokens/breakpoints/breakpoints.cjs.js"),y=require("./tokens/colours/semantic.cjs.js"),g=require("./tokens/radius/radius.cjs.js"),M=require("./tokens/shadows/shadows.cjs.js"),q=require("./tokens/typography/variant-mapping.cjs.js"),k=require("./typography.cjs.js");const x=x=>{const T={typography:k.typography,palette:"light"===x?y.lightColours:y.darkColours,radius:g.radius,breakpoints:{values:b.breakpointValues},customShadows:{...M.shadows}},B=e(T);return Object.keys(k.typography).forEach((e=>{const r=e.split(/(?=[A-Z])/)[0],s=e;B.typography[s]={...B.typography[s],[B.breakpoints.down("tablet")]:{...k.getMobileTextStyle(r)}}})),e({...T,typography:B.typography,shape:{borderRadius:4},customShadows:B.customShadows,components:{MuiAlert:{defaultProps:{components:{CloseIcon:i}},styleOverrides:{root:{borderRadius:"8px",padding:"24px"},icon:{marginRight:"12px",padding:0},action:{padding:0,"& button":{marginTop:"-5px"}},message:{padding:0}}},MuiButton:r.buttonStyleOverrides(B),MuiIconButton:s.iconButtonStyleOverrides(),MuiCard:{styleOverrides:{root:{boxShadow:"none",borderWidth:"1px",borderStyle:"solid",borderColor:B.palette.divider}}},MuiListItemButton:{styleOverrides:{root:{"&:hover":{backgroundColor:B.palette.semantic.fill["fill-primary-weak"]},"&:not(:last-child)":{borderBottom:`1px solid ${B.palette.semantic.stroke["stroke-weak"]}`}}}},MuiTableRow:{styleOverrides:{root:{"&.MuiTableRow-hover:hover":{backgroundColor:B.palette.semantic.fill["fill-secondary"],cursor:"pointer"}}}},MuiTypography:{defaultProps:{variantMapping:q.typographyVariantMapping}},MuiAutocomplete:t.autocompleteOverrides(B),MuiButtonBase:o.buttonBaseOverrides(),MuiCheckbox:a.checkboxOverrides(B),MuiChip:d.chipOverrides(B),MuiFormControlLabel:u.formControlLabelOverrides(B),MuiFormHelperText:n.formHelperTextOverrides(B),MuiFormLabel:p.formLabelOverrides(B),MuiInputBase:l.inputBaseOverrides(B),MuiInputLabel:c.inputLabelOverrides(B),MuiListItemText:v.listItemTextOverrides(B),MuiMenu:j.menuOverrides(B),MuiMenuItem:m.menuItemOverrides(B),MuiSelect:h.selectOverrides(B),MuiTextField:O.textFieldOverrides(B)}})},T=x("light"),B=x("dark");exports.darkTheme=B,exports.lightTheme=T;
2
2
  //# sourceMappingURL=flipdishPublicTheme.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flipdishPublicTheme.cjs.js","sources":["../../src/themes/flipdishPublicTheme.ts"],"sourcesContent":["import createTheme, { type Theme, type ThemeOptions } from '@mui/material/styles/createTheme';\n\nimport { buttonStyleOverrides } from '../components/atoms/Button/buttonThemeOverrides';\nimport { iconButtonStyleOverrides } from '../components/atoms/IconButton/iconButtonThemeOverrides';\nimport CancelIcon from '../icons/Cancel';\nimport { autocompleteOverrides } from './overrides/autocompleteOverrides';\nimport { checkboxOverrides } from './overrides/checkboxOverrides';\nimport { formControlLabelOverrides } from './overrides/formControlLabelOverrides';\nimport { formHelperTextOverrides } from './overrides/formHelperTextOverrides';\nimport { formLabelOverrides } from './overrides/formLabelOverrides';\nimport { inputBaseOverrides } from './overrides/inputBaseOverrides';\nimport { inputLabelOverrides } from './overrides/inputLabelOverrides';\nimport { listItemTextOverrides } from './overrides/listItemTextOverrides';\nimport { menuItemOverrides } from './overrides/menuItemOverrides';\nimport { menuOverrides } from './overrides/menuOverrides';\nimport { selectOverrides } from './overrides/selectOverrides';\nimport { textFieldOverrides } from './overrides/textFieldOverrides';\nimport { breakpointValues } from './tokens/breakpoints/breakpoints';\nimport { darkColours, lightColours } from './tokens/colours/semantic';\nimport { radius } from './tokens/radius/radius';\nimport { shadows } from './tokens/shadows/shadows';\nimport { fontSize } from './tokens/typography/font-size';\nimport { typographyVariantMapping } from './tokens/typography/variant-mapping';\nimport { getMobileTextStyle, typography } from './typography';\n\nconst createFlipdishThemeFactory = (mode: 'dark' | 'light'): Theme => {\n const themeOptions: ThemeOptions = {\n typography,\n palette: mode === 'light' ? lightColours : darkColours,\n radius,\n breakpoints: {\n values: breakpointValues,\n },\n customShadows: {\n ...shadows,\n },\n };\n const baseTheme = createTheme(themeOptions);\n\n /*\n Add mobile text styles to typography\n Has to be done using media queries, otherwise it isn't responsive :(\n https://mui.com/material-ui/customization/typography/#responsive-font-sizes\n */\n Object.keys(typography).forEach((key) => {\n // only key before the suffix split by capital letter (h1Strong -> h1)\n const keyWithoutVariantSuffix = key.split(/(?=[A-Z])/)[0];\n const typographyKey = key as keyof typeof typography;\n baseTheme.typography[typographyKey] = {\n ...baseTheme.typography[typographyKey],\n [baseTheme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle(keyWithoutVariantSuffix as keyof (typeof fontSize)['mobile']),\n },\n };\n });\n\n // Create final theme with component overrides and additional configurations\n return createTheme({\n ...themeOptions,\n typography: baseTheme.typography,\n shape: {\n borderRadius: 4,\n },\n customShadows: baseTheme.customShadows,\n components: {\n MuiAlert: {\n defaultProps: {\n components: {\n CloseIcon: CancelIcon,\n },\n },\n styleOverrides: {\n root: {\n // TODO: Replace with borderRadius from tokens when implemented\n borderRadius: '8px',\n // TODO: Replace with spacing from tokens when implemented\n padding: '24px',\n },\n icon: {\n // TODO: Replace with spacing from tokens when implemented\n marginRight: '12px',\n padding: 0,\n },\n action: {\n padding: 0,\n '& button': {\n marginTop: '-5px',\n },\n },\n message: {\n padding: 0,\n },\n },\n },\n MuiButton: buttonStyleOverrides(baseTheme),\n MuiIconButton: iconButtonStyleOverrides(),\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'none',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: baseTheme.palette.divider,\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n fontWeight: 'bold',\n paddingLeft: '6px',\n paddingRight: '6px',\n },\n },\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-primary-weak'],\n },\n '&:not(:last-child)': {\n borderBottom: `1px solid ${baseTheme.palette.semantic.stroke['stroke-weak']}`,\n },\n },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&.MuiTableRow-hover:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-secondary'],\n cursor: 'pointer',\n },\n },\n },\n },\n MuiTypography: {\n defaultProps: {\n variantMapping: typographyVariantMapping,\n },\n },\n MuiAutocomplete: autocompleteOverrides(baseTheme),\n MuiCheckbox: checkboxOverrides(baseTheme),\n MuiFormControlLabel: formControlLabelOverrides(baseTheme),\n MuiFormHelperText: formHelperTextOverrides(baseTheme),\n MuiFormLabel: formLabelOverrides(baseTheme),\n MuiInputBase: inputBaseOverrides(baseTheme),\n MuiInputLabel: inputLabelOverrides(baseTheme),\n MuiListItemText: listItemTextOverrides(baseTheme),\n MuiMenu: menuOverrides(baseTheme),\n MuiMenuItem: menuItemOverrides(baseTheme),\n MuiSelect: selectOverrides(baseTheme),\n MuiTextField: textFieldOverrides(baseTheme),\n },\n });\n};\n\nexport const lightTheme = createFlipdishThemeFactory('light');\nexport const darkTheme = createFlipdishThemeFactory('dark');\n"],"names":["createFlipdishThemeFactory","mode","themeOptions","typography","palette","lightColours","darkColours","radius","breakpoints","values","breakpointValues","customShadows","shadows","baseTheme","createTheme","Object","keys","forEach","key","keyWithoutVariantSuffix","split","typographyKey","down","getMobileTextStyle","shape","borderRadius","components","MuiAlert","defaultProps","CloseIcon","CancelIcon","styleOverrides","root","padding","icon","marginRight","action","marginTop","message","MuiButton","buttonStyleOverrides","MuiIconButton","iconButtonStyleOverrides","MuiCard","boxShadow","borderWidth","borderStyle","borderColor","divider","MuiChip","fontWeight","paddingLeft","paddingRight","MuiListItemButton","backgroundColor","semantic","fill","borderBottom","stroke","MuiTableRow","cursor","MuiTypography","variantMapping","typographyVariantMapping","MuiAutocomplete","autocompleteOverrides","MuiCheckbox","checkboxOverrides","MuiFormControlLabel","formControlLabelOverrides","MuiFormHelperText","formHelperTextOverrides","MuiFormLabel","formLabelOverrides","MuiInputBase","inputBaseOverrides","MuiInputLabel","inputLabelOverrides","MuiListItemText","listItemTextOverrides","MuiMenu","menuOverrides","MuiMenuItem","menuItemOverrides","MuiSelect","selectOverrides","MuiTextField","textFieldOverrides","lightTheme","darkTheme"],"mappings":"0nCAyBA,MAAMA,EAA8BC,IAClC,MAAMC,EAA6B,YACjCC,EAAAA,WACAC,QAAkB,UAATH,EAAmBI,EAAAA,aAAeC,EAAAA,mBAC3CC,EAAAA,OACAC,YAAa,CACXC,OAAQC,EAAAA,kBAEVC,cAAe,IACVC,EAAAA,UAGDC,EAAYC,EAAYZ,GAoB9B,OAbAa,OAAOC,KAAKb,EAAAA,YAAYc,SAASC,IAE/B,MAAMC,EAA0BD,EAAIE,MAAM,aAAa,GACjDC,EAAgBH,EACtBL,EAAUV,WAAWkB,GAAiB,IACjCR,EAAUV,WAAWkB,GACxB,CAACR,EAAUL,YAAYc,KAAK,WAAY,IACnCC,EAAAA,mBAAmBJ,QAMrBL,EAAY,IACdZ,EACHC,WAAYU,EAAUV,WACtBqB,MAAO,CACLC,aAAc,GAEhBd,cAAeE,EAAUF,cACzBe,WAAY,CACVC,SAAU,CACRC,aAAc,CACZF,WAAY,CACVG,UAAWC,IAGfC,eAAgB,CACdC,KAAM,CAEJP,aAAc,MAEdQ,QAAS,QAEXC,KAAM,CAEJC,YAAa,OACbF,QAAS,GAEXG,OAAQ,CACNH,QAAS,EACT,WAAY,CACVI,UAAW,SAGfC,QAAS,CACPL,QAAS,KAIfM,UAAWC,EAAAA,qBAAqB3B,GAChC4B,cAAeC,EAAAA,2BACfC,QAAS,CACPZ,eAAgB,CACdC,KAAM,CACJY,UAAW,OACXC,YAAa,MACbC,YAAa,QACbC,YAAalC,EAAUT,QAAQ4C,WAIrCC,QAAS,CACPlB,eAAgB,CACdC,KAAM,CACJkB,WAAY,OACZC,YAAa,MACbC,aAAc,SAIpBC,kBAAmB,CACjBtB,eAAgB,CACdC,KAAM,CACJ,UAAW,CACTsB,gBAAiBzC,EAAUT,QAAQmD,SAASC,KAAK,sBAEnD,qBAAsB,CACpBC,aAAc,aAAa5C,EAAUT,QAAQmD,SAASG,OAAO,qBAKrEC,YAAa,CACX5B,eAAgB,CACdC,KAAM,CACJ,4BAA6B,CAC3BsB,gBAAiBzC,EAAUT,QAAQmD,SAASC,KAAK,kBACjDI,OAAQ,cAKhBC,cAAe,CACbjC,aAAc,CACZkC,eAAgBC,EAAAA,2BAGpBC,gBAAiBC,EAAAA,sBAAsBpD,GACvCqD,YAAaC,EAAAA,kBAAkBtD,GAC/BuD,oBAAqBC,EAAAA,0BAA0BxD,GAC/CyD,kBAAmBC,EAAAA,wBAAwB1D,GAC3C2D,aAAcC,EAAAA,mBAAmB5D,GACjC6D,aAAcC,EAAAA,mBAAmB9D,GACjC+D,cAAeC,EAAAA,oBAAoBhE,GACnCiE,gBAAiBC,EAAAA,sBAAsBlE,GACvCmE,QAASC,EAAAA,cAAcpE,GACvBqE,YAAaC,EAAAA,kBAAkBtE,GAC/BuE,UAAWC,EAAAA,gBAAgBxE,GAC3ByE,aAAcC,EAAAA,mBAAmB1E,OAK1B2E,EAAaxF,EAA2B,SACxCyF,EAAYzF,EAA2B"}
1
+ {"version":3,"file":"flipdishPublicTheme.cjs.js","sources":["../../src/themes/flipdishPublicTheme.ts"],"sourcesContent":["import createTheme, { type Theme, type ThemeOptions } from '@mui/material/styles/createTheme';\n\nimport { buttonStyleOverrides } from '../components/atoms/Button/buttonThemeOverrides';\nimport { iconButtonStyleOverrides } from '../components/atoms/IconButton/iconButtonThemeOverrides';\nimport CancelIcon from '../icons/Cancel';\nimport { autocompleteOverrides } from './overrides/autocompleteOverrides';\nimport { buttonBaseOverrides } from './overrides/buttonBaseOverrides';\nimport { checkboxOverrides } from './overrides/checkboxOverrides';\nimport { chipOverrides } from './overrides/chipOverrides';\nimport { formControlLabelOverrides } from './overrides/formControlLabelOverrides';\nimport { formHelperTextOverrides } from './overrides/formHelperTextOverrides';\nimport { formLabelOverrides } from './overrides/formLabelOverrides';\nimport { inputBaseOverrides } from './overrides/inputBaseOverrides';\nimport { inputLabelOverrides } from './overrides/inputLabelOverrides';\nimport { listItemTextOverrides } from './overrides/listItemTextOverrides';\nimport { menuItemOverrides } from './overrides/menuItemOverrides';\nimport { menuOverrides } from './overrides/menuOverrides';\nimport { selectOverrides } from './overrides/selectOverrides';\nimport { textFieldOverrides } from './overrides/textFieldOverrides';\nimport { breakpointValues } from './tokens/breakpoints/breakpoints';\nimport { darkColours, lightColours } from './tokens/colours/semantic';\nimport { radius } from './tokens/radius/radius';\nimport { shadows } from './tokens/shadows/shadows';\nimport { fontSize } from './tokens/typography/font-size';\nimport { typographyVariantMapping } from './tokens/typography/variant-mapping';\nimport { getMobileTextStyle, typography } from './typography';\n\nconst createFlipdishThemeFactory = (mode: 'dark' | 'light'): Theme => {\n const themeOptions: ThemeOptions = {\n typography,\n palette: mode === 'light' ? lightColours : darkColours,\n radius,\n breakpoints: {\n values: breakpointValues,\n },\n customShadows: {\n ...shadows,\n },\n };\n const baseTheme = createTheme(themeOptions);\n\n /*\n Add mobile text styles to typography\n Has to be done using media queries, otherwise it isn't responsive :(\n https://mui.com/material-ui/customization/typography/#responsive-font-sizes\n */\n Object.keys(typography).forEach((key) => {\n // only key before the suffix split by capital letter (h1Strong -> h1)\n const keyWithoutVariantSuffix = key.split(/(?=[A-Z])/)[0];\n const typographyKey = key as keyof typeof typography;\n baseTheme.typography[typographyKey] = {\n ...baseTheme.typography[typographyKey],\n [baseTheme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle(keyWithoutVariantSuffix as keyof (typeof fontSize)['mobile']),\n },\n };\n });\n\n // Create final theme with component overrides and additional configurations\n return createTheme({\n ...themeOptions,\n typography: baseTheme.typography,\n shape: {\n borderRadius: 4,\n },\n customShadows: baseTheme.customShadows,\n components: {\n MuiAlert: {\n defaultProps: {\n components: {\n CloseIcon: CancelIcon,\n },\n },\n styleOverrides: {\n root: {\n // TODO: Replace with borderRadius from tokens when implemented\n borderRadius: '8px',\n // TODO: Replace with spacing from tokens when implemented\n padding: '24px',\n },\n icon: {\n // TODO: Replace with spacing from tokens when implemented\n marginRight: '12px',\n padding: 0,\n },\n action: {\n padding: 0,\n '& button': {\n marginTop: '-5px',\n },\n },\n message: {\n padding: 0,\n },\n },\n },\n MuiButton: buttonStyleOverrides(baseTheme),\n MuiIconButton: iconButtonStyleOverrides(),\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'none',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: baseTheme.palette.divider,\n },\n },\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-primary-weak'],\n },\n '&:not(:last-child)': {\n borderBottom: `1px solid ${baseTheme.palette.semantic.stroke['stroke-weak']}`,\n },\n },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&.MuiTableRow-hover:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-secondary'],\n cursor: 'pointer',\n },\n },\n },\n },\n MuiTypography: {\n defaultProps: {\n variantMapping: typographyVariantMapping,\n },\n },\n MuiAutocomplete: autocompleteOverrides(baseTheme),\n MuiButtonBase: buttonBaseOverrides(baseTheme),\n MuiCheckbox: checkboxOverrides(baseTheme),\n MuiChip: chipOverrides(baseTheme),\n MuiFormControlLabel: formControlLabelOverrides(baseTheme),\n MuiFormHelperText: formHelperTextOverrides(baseTheme),\n MuiFormLabel: formLabelOverrides(baseTheme),\n MuiInputBase: inputBaseOverrides(baseTheme),\n MuiInputLabel: inputLabelOverrides(baseTheme),\n MuiListItemText: listItemTextOverrides(baseTheme),\n MuiMenu: menuOverrides(baseTheme),\n MuiMenuItem: menuItemOverrides(baseTheme),\n MuiSelect: selectOverrides(baseTheme),\n MuiTextField: textFieldOverrides(baseTheme),\n },\n });\n};\n\nexport const lightTheme = createFlipdishThemeFactory('light');\nexport const darkTheme = createFlipdishThemeFactory('dark');\n"],"names":["createFlipdishThemeFactory","mode","themeOptions","typography","palette","lightColours","darkColours","radius","breakpoints","values","breakpointValues","customShadows","shadows","baseTheme","createTheme","Object","keys","forEach","key","keyWithoutVariantSuffix","split","typographyKey","down","getMobileTextStyle","shape","borderRadius","components","MuiAlert","defaultProps","CloseIcon","CancelIcon","styleOverrides","root","padding","icon","marginRight","action","marginTop","message","MuiButton","buttonStyleOverrides","MuiIconButton","iconButtonStyleOverrides","MuiCard","boxShadow","borderWidth","borderStyle","borderColor","divider","MuiListItemButton","backgroundColor","semantic","fill","borderBottom","stroke","MuiTableRow","cursor","MuiTypography","variantMapping","typographyVariantMapping","MuiAutocomplete","autocompleteOverrides","MuiButtonBase","buttonBaseOverrides","MuiCheckbox","checkboxOverrides","MuiChip","chipOverrides","MuiFormControlLabel","formControlLabelOverrides","MuiFormHelperText","formHelperTextOverrides","MuiFormLabel","formLabelOverrides","MuiInputBase","inputBaseOverrides","MuiInputLabel","inputLabelOverrides","MuiListItemText","listItemTextOverrides","MuiMenu","menuOverrides","MuiMenuItem","menuItemOverrides","MuiSelect","selectOverrides","MuiTextField","textFieldOverrides","lightTheme","darkTheme"],"mappings":"4tCA2BA,MAAMA,EAA8BC,IAClC,MAAMC,EAA6B,YACjCC,EAAAA,WACAC,QAAkB,UAATH,EAAmBI,EAAAA,aAAeC,EAAAA,mBAC3CC,EAAAA,OACAC,YAAa,CACXC,OAAQC,EAAAA,kBAEVC,cAAe,IACVC,EAAAA,UAGDC,EAAYC,EAAYZ,GAoB9B,OAbAa,OAAOC,KAAKb,EAAAA,YAAYc,SAASC,IAE/B,MAAMC,EAA0BD,EAAIE,MAAM,aAAa,GACjDC,EAAgBH,EACtBL,EAAUV,WAAWkB,GAAiB,IACjCR,EAAUV,WAAWkB,GACxB,CAACR,EAAUL,YAAYc,KAAK,WAAY,IACnCC,EAAAA,mBAAmBJ,QAMrBL,EAAY,IACdZ,EACHC,WAAYU,EAAUV,WACtBqB,MAAO,CACLC,aAAc,GAEhBd,cAAeE,EAAUF,cACzBe,WAAY,CACVC,SAAU,CACRC,aAAc,CACZF,WAAY,CACVG,UAAWC,IAGfC,eAAgB,CACdC,KAAM,CAEJP,aAAc,MAEdQ,QAAS,QAEXC,KAAM,CAEJC,YAAa,OACbF,QAAS,GAEXG,OAAQ,CACNH,QAAS,EACT,WAAY,CACVI,UAAW,SAGfC,QAAS,CACPL,QAAS,KAIfM,UAAWC,EAAAA,qBAAqB3B,GAChC4B,cAAeC,EAAAA,2BACfC,QAAS,CACPZ,eAAgB,CACdC,KAAM,CACJY,UAAW,OACXC,YAAa,MACbC,YAAa,QACbC,YAAalC,EAAUT,QAAQ4C,WAIrCC,kBAAmB,CACjBlB,eAAgB,CACdC,KAAM,CACJ,UAAW,CACTkB,gBAAiBrC,EAAUT,QAAQ+C,SAASC,KAAK,sBAEnD,qBAAsB,CACpBC,aAAc,aAAaxC,EAAUT,QAAQ+C,SAASG,OAAO,qBAKrEC,YAAa,CACXxB,eAAgB,CACdC,KAAM,CACJ,4BAA6B,CAC3BkB,gBAAiBrC,EAAUT,QAAQ+C,SAASC,KAAK,kBACjDI,OAAQ,cAKhBC,cAAe,CACb7B,aAAc,CACZ8B,eAAgBC,EAAAA,2BAGpBC,gBAAiBC,EAAAA,sBAAsBhD,GACvCiD,cAAeC,EAAAA,sBACfC,YAAaC,EAAAA,kBAAkBpD,GAC/BqD,QAASC,EAAAA,cAActD,GACvBuD,oBAAqBC,EAAAA,0BAA0BxD,GAC/CyD,kBAAmBC,EAAAA,wBAAwB1D,GAC3C2D,aAAcC,EAAAA,mBAAmB5D,GACjC6D,aAAcC,EAAAA,mBAAmB9D,GACjC+D,cAAeC,EAAAA,oBAAoBhE,GACnCiE,gBAAiBC,EAAAA,sBAAsBlE,GACvCmE,QAASC,EAAAA,cAAcpE,GACvBqE,YAAaC,EAAAA,kBAAkBtE,GAC/BuE,UAAWC,EAAAA,gBAAgBxE,GAC3ByE,aAAcC,EAAAA,mBAAmB1E,OAK1B2E,EAAaxF,EAA2B,SACxCyF,EAAYzF,EAA2B"}
@@ -1,2 +1,2 @@
1
- import r from"@mui/material/styles/createTheme";import{buttonStyleOverrides as e}from"../components/atoms/Button/buttonThemeOverrides.js";import{iconButtonStyleOverrides as o}from"../components/atoms/IconButton/iconButtonThemeOverrides.js";import t from"../icons/Cancel/index.js";import{autocompleteOverrides as i}from"./overrides/autocompleteOverrides.js";import{checkboxOverrides as s}from"./overrides/checkboxOverrides.js";import{formControlLabelOverrides as p}from"./overrides/formControlLabelOverrides.js";import{formHelperTextOverrides as m}from"./overrides/formHelperTextOverrides.js";import{formLabelOverrides as a}from"./overrides/formLabelOverrides.js";import{inputBaseOverrides as d}from"./overrides/inputBaseOverrides.js";import{inputLabelOverrides as n}from"./overrides/inputLabelOverrides.js";import{listItemTextOverrides as l}from"./overrides/listItemTextOverrides.js";import{menuItemOverrides as u}from"./overrides/menuItemOverrides.js";import{menuOverrides as c}from"./overrides/menuOverrides.js";import{selectOverrides as v}from"./overrides/selectOverrides.js";import{textFieldOverrides as f}from"./overrides/textFieldOverrides.js";import{breakpointValues as h}from"./tokens/breakpoints/breakpoints.js";import{lightColours as b,darkColours as g}from"./tokens/colours/semantic.js";import{radius as y}from"./tokens/radius/radius.js";import{shadows as M}from"./tokens/shadows/shadows.js";import{typographyVariantMapping as j}from"./tokens/typography/variant-mapping.js";import{typography as O,getMobileTextStyle as k}from"./typography.js";const x=x=>{const T={typography:O,palette:"light"===x?b:g,radius:y,breakpoints:{values:h},customShadows:{...M}},w=r(T);return Object.keys(O).forEach((r=>{const e=r.split(/(?=[A-Z])/)[0],o=r;w.typography[o]={...w.typography[o],[w.breakpoints.down("tablet")]:{...k(e)}}})),r({...T,typography:w.typography,shape:{borderRadius:4},customShadows:w.customShadows,components:{MuiAlert:{defaultProps:{components:{CloseIcon:t}},styleOverrides:{root:{borderRadius:"8px",padding:"24px"},icon:{marginRight:"12px",padding:0},action:{padding:0,"& button":{marginTop:"-5px"}},message:{padding:0}}},MuiButton:e(w),MuiIconButton:o(),MuiCard:{styleOverrides:{root:{boxShadow:"none",borderWidth:"1px",borderStyle:"solid",borderColor:w.palette.divider}}},MuiChip:{styleOverrides:{root:{fontWeight:"bold",paddingLeft:"6px",paddingRight:"6px"}}},MuiListItemButton:{styleOverrides:{root:{"&:hover":{backgroundColor:w.palette.semantic.fill["fill-primary-weak"]},"&:not(:last-child)":{borderBottom:`1px solid ${w.palette.semantic.stroke["stroke-weak"]}`}}}},MuiTableRow:{styleOverrides:{root:{"&.MuiTableRow-hover:hover":{backgroundColor:w.palette.semantic.fill["fill-secondary"],cursor:"pointer"}}}},MuiTypography:{defaultProps:{variantMapping:j}},MuiAutocomplete:i(w),MuiCheckbox:s(w),MuiFormControlLabel:p(w),MuiFormHelperText:m(w),MuiFormLabel:a(w),MuiInputBase:d(w),MuiInputLabel:n(w),MuiListItemText:l(w),MuiMenu:c(w),MuiMenuItem:u(w),MuiSelect:v(w),MuiTextField:f(w)}})},T=x("light"),w=x("dark");export{w as darkTheme,T as lightTheme};
1
+ import r from"@mui/material/styles/createTheme";import{buttonStyleOverrides as e}from"../components/atoms/Button/buttonThemeOverrides.js";import{iconButtonStyleOverrides as o}from"../components/atoms/IconButton/iconButtonThemeOverrides.js";import t from"../icons/Cancel/index.js";import{autocompleteOverrides as i}from"./overrides/autocompleteOverrides.js";import{buttonBaseOverrides as s}from"./overrides/buttonBaseOverrides.js";import{checkboxOverrides as m}from"./overrides/checkboxOverrides.js";import{chipOverrides as p}from"./overrides/chipOverrides.js";import{formControlLabelOverrides as a}from"./overrides/formControlLabelOverrides.js";import{formHelperTextOverrides as d}from"./overrides/formHelperTextOverrides.js";import{formLabelOverrides as n}from"./overrides/formLabelOverrides.js";import{inputBaseOverrides as u}from"./overrides/inputBaseOverrides.js";import{inputLabelOverrides as l}from"./overrides/inputLabelOverrides.js";import{listItemTextOverrides as v}from"./overrides/listItemTextOverrides.js";import{menuItemOverrides as c}from"./overrides/menuItemOverrides.js";import{menuOverrides as f}from"./overrides/menuOverrides.js";import{selectOverrides as h}from"./overrides/selectOverrides.js";import{textFieldOverrides as b}from"./overrides/textFieldOverrides.js";import{breakpointValues as y}from"./tokens/breakpoints/breakpoints.js";import{lightColours as M,darkColours as j}from"./tokens/colours/semantic.js";import{radius as g}from"./tokens/radius/radius.js";import{shadows as O}from"./tokens/shadows/shadows.js";import{typographyVariantMapping as k}from"./tokens/typography/variant-mapping.js";import{typography as x,getMobileTextStyle as B}from"./typography.js";const T=T=>{const w={typography:x,palette:"light"===T?M:j,radius:g,breakpoints:{values:y},customShadows:{...O}},C=r(w);return Object.keys(x).forEach((r=>{const e=r.split(/(?=[A-Z])/)[0],o=r;C.typography[o]={...C.typography[o],[C.breakpoints.down("tablet")]:{...B(e)}}})),r({...w,typography:C.typography,shape:{borderRadius:4},customShadows:C.customShadows,components:{MuiAlert:{defaultProps:{components:{CloseIcon:t}},styleOverrides:{root:{borderRadius:"8px",padding:"24px"},icon:{marginRight:"12px",padding:0},action:{padding:0,"& button":{marginTop:"-5px"}},message:{padding:0}}},MuiButton:e(C),MuiIconButton:o(),MuiCard:{styleOverrides:{root:{boxShadow:"none",borderWidth:"1px",borderStyle:"solid",borderColor:C.palette.divider}}},MuiListItemButton:{styleOverrides:{root:{"&:hover":{backgroundColor:C.palette.semantic.fill["fill-primary-weak"]},"&:not(:last-child)":{borderBottom:`1px solid ${C.palette.semantic.stroke["stroke-weak"]}`}}}},MuiTableRow:{styleOverrides:{root:{"&.MuiTableRow-hover:hover":{backgroundColor:C.palette.semantic.fill["fill-secondary"],cursor:"pointer"}}}},MuiTypography:{defaultProps:{variantMapping:k}},MuiAutocomplete:i(C),MuiButtonBase:s(),MuiCheckbox:m(C),MuiChip:p(C),MuiFormControlLabel:a(C),MuiFormHelperText:d(C),MuiFormLabel:n(C),MuiInputBase:u(C),MuiInputLabel:l(C),MuiListItemText:v(C),MuiMenu:f(C),MuiMenuItem:c(C),MuiSelect:h(C),MuiTextField:b(C)}})},w=T("light"),C=T("dark");export{C as darkTheme,w as lightTheme};
2
2
  //# sourceMappingURL=flipdishPublicTheme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flipdishPublicTheme.js","sources":["../../src/themes/flipdishPublicTheme.ts"],"sourcesContent":["import createTheme, { type Theme, type ThemeOptions } from '@mui/material/styles/createTheme';\n\nimport { buttonStyleOverrides } from '../components/atoms/Button/buttonThemeOverrides';\nimport { iconButtonStyleOverrides } from '../components/atoms/IconButton/iconButtonThemeOverrides';\nimport CancelIcon from '../icons/Cancel';\nimport { autocompleteOverrides } from './overrides/autocompleteOverrides';\nimport { checkboxOverrides } from './overrides/checkboxOverrides';\nimport { formControlLabelOverrides } from './overrides/formControlLabelOverrides';\nimport { formHelperTextOverrides } from './overrides/formHelperTextOverrides';\nimport { formLabelOverrides } from './overrides/formLabelOverrides';\nimport { inputBaseOverrides } from './overrides/inputBaseOverrides';\nimport { inputLabelOverrides } from './overrides/inputLabelOverrides';\nimport { listItemTextOverrides } from './overrides/listItemTextOverrides';\nimport { menuItemOverrides } from './overrides/menuItemOverrides';\nimport { menuOverrides } from './overrides/menuOverrides';\nimport { selectOverrides } from './overrides/selectOverrides';\nimport { textFieldOverrides } from './overrides/textFieldOverrides';\nimport { breakpointValues } from './tokens/breakpoints/breakpoints';\nimport { darkColours, lightColours } from './tokens/colours/semantic';\nimport { radius } from './tokens/radius/radius';\nimport { shadows } from './tokens/shadows/shadows';\nimport { fontSize } from './tokens/typography/font-size';\nimport { typographyVariantMapping } from './tokens/typography/variant-mapping';\nimport { getMobileTextStyle, typography } from './typography';\n\nconst createFlipdishThemeFactory = (mode: 'dark' | 'light'): Theme => {\n const themeOptions: ThemeOptions = {\n typography,\n palette: mode === 'light' ? lightColours : darkColours,\n radius,\n breakpoints: {\n values: breakpointValues,\n },\n customShadows: {\n ...shadows,\n },\n };\n const baseTheme = createTheme(themeOptions);\n\n /*\n Add mobile text styles to typography\n Has to be done using media queries, otherwise it isn't responsive :(\n https://mui.com/material-ui/customization/typography/#responsive-font-sizes\n */\n Object.keys(typography).forEach((key) => {\n // only key before the suffix split by capital letter (h1Strong -> h1)\n const keyWithoutVariantSuffix = key.split(/(?=[A-Z])/)[0];\n const typographyKey = key as keyof typeof typography;\n baseTheme.typography[typographyKey] = {\n ...baseTheme.typography[typographyKey],\n [baseTheme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle(keyWithoutVariantSuffix as keyof (typeof fontSize)['mobile']),\n },\n };\n });\n\n // Create final theme with component overrides and additional configurations\n return createTheme({\n ...themeOptions,\n typography: baseTheme.typography,\n shape: {\n borderRadius: 4,\n },\n customShadows: baseTheme.customShadows,\n components: {\n MuiAlert: {\n defaultProps: {\n components: {\n CloseIcon: CancelIcon,\n },\n },\n styleOverrides: {\n root: {\n // TODO: Replace with borderRadius from tokens when implemented\n borderRadius: '8px',\n // TODO: Replace with spacing from tokens when implemented\n padding: '24px',\n },\n icon: {\n // TODO: Replace with spacing from tokens when implemented\n marginRight: '12px',\n padding: 0,\n },\n action: {\n padding: 0,\n '& button': {\n marginTop: '-5px',\n },\n },\n message: {\n padding: 0,\n },\n },\n },\n MuiButton: buttonStyleOverrides(baseTheme),\n MuiIconButton: iconButtonStyleOverrides(),\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'none',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: baseTheme.palette.divider,\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n fontWeight: 'bold',\n paddingLeft: '6px',\n paddingRight: '6px',\n },\n },\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-primary-weak'],\n },\n '&:not(:last-child)': {\n borderBottom: `1px solid ${baseTheme.palette.semantic.stroke['stroke-weak']}`,\n },\n },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&.MuiTableRow-hover:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-secondary'],\n cursor: 'pointer',\n },\n },\n },\n },\n MuiTypography: {\n defaultProps: {\n variantMapping: typographyVariantMapping,\n },\n },\n MuiAutocomplete: autocompleteOverrides(baseTheme),\n MuiCheckbox: checkboxOverrides(baseTheme),\n MuiFormControlLabel: formControlLabelOverrides(baseTheme),\n MuiFormHelperText: formHelperTextOverrides(baseTheme),\n MuiFormLabel: formLabelOverrides(baseTheme),\n MuiInputBase: inputBaseOverrides(baseTheme),\n MuiInputLabel: inputLabelOverrides(baseTheme),\n MuiListItemText: listItemTextOverrides(baseTheme),\n MuiMenu: menuOverrides(baseTheme),\n MuiMenuItem: menuItemOverrides(baseTheme),\n MuiSelect: selectOverrides(baseTheme),\n MuiTextField: textFieldOverrides(baseTheme),\n },\n });\n};\n\nexport const lightTheme = createFlipdishThemeFactory('light');\nexport const darkTheme = createFlipdishThemeFactory('dark');\n"],"names":["createFlipdishThemeFactory","mode","themeOptions","typography","palette","lightColours","darkColours","radius","breakpoints","values","breakpointValues","customShadows","shadows","baseTheme","createTheme","Object","keys","forEach","key","keyWithoutVariantSuffix","split","typographyKey","down","getMobileTextStyle","shape","borderRadius","components","MuiAlert","defaultProps","CloseIcon","CancelIcon","styleOverrides","root","padding","icon","marginRight","action","marginTop","message","MuiButton","buttonStyleOverrides","MuiIconButton","iconButtonStyleOverrides","MuiCard","boxShadow","borderWidth","borderStyle","borderColor","divider","MuiChip","fontWeight","paddingLeft","paddingRight","MuiListItemButton","backgroundColor","semantic","fill","borderBottom","stroke","MuiTableRow","cursor","MuiTypography","variantMapping","typographyVariantMapping","MuiAutocomplete","autocompleteOverrides","MuiCheckbox","checkboxOverrides","MuiFormControlLabel","formControlLabelOverrides","MuiFormHelperText","formHelperTextOverrides","MuiFormLabel","formLabelOverrides","MuiInputBase","inputBaseOverrides","MuiInputLabel","inputLabelOverrides","MuiListItemText","listItemTextOverrides","MuiMenu","menuOverrides","MuiMenuItem","menuItemOverrides","MuiSelect","selectOverrides","MuiTextField","textFieldOverrides","lightTheme","darkTheme"],"mappings":"khDAyBA,MAAMA,EAA8BC,IAClC,MAAMC,EAA6B,CACjCC,aACAC,QAAkB,UAATH,EAAmBI,EAAeC,EAC3CC,SACAC,YAAa,CACXC,OAAQC,GAEVC,cAAe,IACVC,IAGDC,EAAYC,EAAYZ,GAoB9B,OAbAa,OAAOC,KAAKb,GAAYc,SAASC,IAE/B,MAAMC,EAA0BD,EAAIE,MAAM,aAAa,GACjDC,EAAgBH,EACtBL,EAAUV,WAAWkB,GAAiB,IACjCR,EAAUV,WAAWkB,GACxB,CAACR,EAAUL,YAAYc,KAAK,WAAY,IACnCC,EAAmBJ,QAMrBL,EAAY,IACdZ,EACHC,WAAYU,EAAUV,WACtBqB,MAAO,CACLC,aAAc,GAEhBd,cAAeE,EAAUF,cACzBe,WAAY,CACVC,SAAU,CACRC,aAAc,CACZF,WAAY,CACVG,UAAWC,IAGfC,eAAgB,CACdC,KAAM,CAEJP,aAAc,MAEdQ,QAAS,QAEXC,KAAM,CAEJC,YAAa,OACbF,QAAS,GAEXG,OAAQ,CACNH,QAAS,EACT,WAAY,CACVI,UAAW,SAGfC,QAAS,CACPL,QAAS,KAIfM,UAAWC,EAAqB3B,GAChC4B,cAAeC,IACfC,QAAS,CACPZ,eAAgB,CACdC,KAAM,CACJY,UAAW,OACXC,YAAa,MACbC,YAAa,QACbC,YAAalC,EAAUT,QAAQ4C,WAIrCC,QAAS,CACPlB,eAAgB,CACdC,KAAM,CACJkB,WAAY,OACZC,YAAa,MACbC,aAAc,SAIpBC,kBAAmB,CACjBtB,eAAgB,CACdC,KAAM,CACJ,UAAW,CACTsB,gBAAiBzC,EAAUT,QAAQmD,SAASC,KAAK,sBAEnD,qBAAsB,CACpBC,aAAc,aAAa5C,EAAUT,QAAQmD,SAASG,OAAO,qBAKrEC,YAAa,CACX5B,eAAgB,CACdC,KAAM,CACJ,4BAA6B,CAC3BsB,gBAAiBzC,EAAUT,QAAQmD,SAASC,KAAK,kBACjDI,OAAQ,cAKhBC,cAAe,CACbjC,aAAc,CACZkC,eAAgBC,IAGpBC,gBAAiBC,EAAsBpD,GACvCqD,YAAaC,EAAkBtD,GAC/BuD,oBAAqBC,EAA0BxD,GAC/CyD,kBAAmBC,EAAwB1D,GAC3C2D,aAAcC,EAAmB5D,GACjC6D,aAAcC,EAAmB9D,GACjC+D,cAAeC,EAAoBhE,GACnCiE,gBAAiBC,EAAsBlE,GACvCmE,QAASC,EAAcpE,GACvBqE,YAAaC,EAAkBtE,GAC/BuE,UAAWC,EAAgBxE,GAC3ByE,aAAcC,EAAmB1E,OAK1B2E,EAAaxF,EAA2B,SACxCyF,EAAYzF,EAA2B"}
1
+ {"version":3,"file":"flipdishPublicTheme.js","sources":["../../src/themes/flipdishPublicTheme.ts"],"sourcesContent":["import createTheme, { type Theme, type ThemeOptions } from '@mui/material/styles/createTheme';\n\nimport { buttonStyleOverrides } from '../components/atoms/Button/buttonThemeOverrides';\nimport { iconButtonStyleOverrides } from '../components/atoms/IconButton/iconButtonThemeOverrides';\nimport CancelIcon from '../icons/Cancel';\nimport { autocompleteOverrides } from './overrides/autocompleteOverrides';\nimport { buttonBaseOverrides } from './overrides/buttonBaseOverrides';\nimport { checkboxOverrides } from './overrides/checkboxOverrides';\nimport { chipOverrides } from './overrides/chipOverrides';\nimport { formControlLabelOverrides } from './overrides/formControlLabelOverrides';\nimport { formHelperTextOverrides } from './overrides/formHelperTextOverrides';\nimport { formLabelOverrides } from './overrides/formLabelOverrides';\nimport { inputBaseOverrides } from './overrides/inputBaseOverrides';\nimport { inputLabelOverrides } from './overrides/inputLabelOverrides';\nimport { listItemTextOverrides } from './overrides/listItemTextOverrides';\nimport { menuItemOverrides } from './overrides/menuItemOverrides';\nimport { menuOverrides } from './overrides/menuOverrides';\nimport { selectOverrides } from './overrides/selectOverrides';\nimport { textFieldOverrides } from './overrides/textFieldOverrides';\nimport { breakpointValues } from './tokens/breakpoints/breakpoints';\nimport { darkColours, lightColours } from './tokens/colours/semantic';\nimport { radius } from './tokens/radius/radius';\nimport { shadows } from './tokens/shadows/shadows';\nimport { fontSize } from './tokens/typography/font-size';\nimport { typographyVariantMapping } from './tokens/typography/variant-mapping';\nimport { getMobileTextStyle, typography } from './typography';\n\nconst createFlipdishThemeFactory = (mode: 'dark' | 'light'): Theme => {\n const themeOptions: ThemeOptions = {\n typography,\n palette: mode === 'light' ? lightColours : darkColours,\n radius,\n breakpoints: {\n values: breakpointValues,\n },\n customShadows: {\n ...shadows,\n },\n };\n const baseTheme = createTheme(themeOptions);\n\n /*\n Add mobile text styles to typography\n Has to be done using media queries, otherwise it isn't responsive :(\n https://mui.com/material-ui/customization/typography/#responsive-font-sizes\n */\n Object.keys(typography).forEach((key) => {\n // only key before the suffix split by capital letter (h1Strong -> h1)\n const keyWithoutVariantSuffix = key.split(/(?=[A-Z])/)[0];\n const typographyKey = key as keyof typeof typography;\n baseTheme.typography[typographyKey] = {\n ...baseTheme.typography[typographyKey],\n [baseTheme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle(keyWithoutVariantSuffix as keyof (typeof fontSize)['mobile']),\n },\n };\n });\n\n // Create final theme with component overrides and additional configurations\n return createTheme({\n ...themeOptions,\n typography: baseTheme.typography,\n shape: {\n borderRadius: 4,\n },\n customShadows: baseTheme.customShadows,\n components: {\n MuiAlert: {\n defaultProps: {\n components: {\n CloseIcon: CancelIcon,\n },\n },\n styleOverrides: {\n root: {\n // TODO: Replace with borderRadius from tokens when implemented\n borderRadius: '8px',\n // TODO: Replace with spacing from tokens when implemented\n padding: '24px',\n },\n icon: {\n // TODO: Replace with spacing from tokens when implemented\n marginRight: '12px',\n padding: 0,\n },\n action: {\n padding: 0,\n '& button': {\n marginTop: '-5px',\n },\n },\n message: {\n padding: 0,\n },\n },\n },\n MuiButton: buttonStyleOverrides(baseTheme),\n MuiIconButton: iconButtonStyleOverrides(),\n MuiCard: {\n styleOverrides: {\n root: {\n boxShadow: 'none',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: baseTheme.palette.divider,\n },\n },\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-primary-weak'],\n },\n '&:not(:last-child)': {\n borderBottom: `1px solid ${baseTheme.palette.semantic.stroke['stroke-weak']}`,\n },\n },\n },\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&.MuiTableRow-hover:hover': {\n backgroundColor: baseTheme.palette.semantic.fill['fill-secondary'],\n cursor: 'pointer',\n },\n },\n },\n },\n MuiTypography: {\n defaultProps: {\n variantMapping: typographyVariantMapping,\n },\n },\n MuiAutocomplete: autocompleteOverrides(baseTheme),\n MuiButtonBase: buttonBaseOverrides(baseTheme),\n MuiCheckbox: checkboxOverrides(baseTheme),\n MuiChip: chipOverrides(baseTheme),\n MuiFormControlLabel: formControlLabelOverrides(baseTheme),\n MuiFormHelperText: formHelperTextOverrides(baseTheme),\n MuiFormLabel: formLabelOverrides(baseTheme),\n MuiInputBase: inputBaseOverrides(baseTheme),\n MuiInputLabel: inputLabelOverrides(baseTheme),\n MuiListItemText: listItemTextOverrides(baseTheme),\n MuiMenu: menuOverrides(baseTheme),\n MuiMenuItem: menuItemOverrides(baseTheme),\n MuiSelect: selectOverrides(baseTheme),\n MuiTextField: textFieldOverrides(baseTheme),\n },\n });\n};\n\nexport const lightTheme = createFlipdishThemeFactory('light');\nexport const darkTheme = createFlipdishThemeFactory('dark');\n"],"names":["createFlipdishThemeFactory","mode","themeOptions","typography","palette","lightColours","darkColours","radius","breakpoints","values","breakpointValues","customShadows","shadows","baseTheme","createTheme","Object","keys","forEach","key","keyWithoutVariantSuffix","split","typographyKey","down","getMobileTextStyle","shape","borderRadius","components","MuiAlert","defaultProps","CloseIcon","CancelIcon","styleOverrides","root","padding","icon","marginRight","action","marginTop","message","MuiButton","buttonStyleOverrides","MuiIconButton","iconButtonStyleOverrides","MuiCard","boxShadow","borderWidth","borderStyle","borderColor","divider","MuiListItemButton","backgroundColor","semantic","fill","borderBottom","stroke","MuiTableRow","cursor","MuiTypography","variantMapping","typographyVariantMapping","MuiAutocomplete","autocompleteOverrides","MuiButtonBase","buttonBaseOverrides","MuiCheckbox","checkboxOverrides","MuiChip","chipOverrides","MuiFormControlLabel","formControlLabelOverrides","MuiFormHelperText","formHelperTextOverrides","MuiFormLabel","formLabelOverrides","MuiInputBase","inputBaseOverrides","MuiInputLabel","inputLabelOverrides","MuiListItemText","listItemTextOverrides","MuiMenu","menuOverrides","MuiMenuItem","menuItemOverrides","MuiSelect","selectOverrides","MuiTextField","textFieldOverrides","lightTheme","darkTheme"],"mappings":"wpDA2BA,MAAMA,EAA8BC,IAClC,MAAMC,EAA6B,CACjCC,aACAC,QAAkB,UAATH,EAAmBI,EAAeC,EAC3CC,SACAC,YAAa,CACXC,OAAQC,GAEVC,cAAe,IACVC,IAGDC,EAAYC,EAAYZ,GAoB9B,OAbAa,OAAOC,KAAKb,GAAYc,SAASC,IAE/B,MAAMC,EAA0BD,EAAIE,MAAM,aAAa,GACjDC,EAAgBH,EACtBL,EAAUV,WAAWkB,GAAiB,IACjCR,EAAUV,WAAWkB,GACxB,CAACR,EAAUL,YAAYc,KAAK,WAAY,IACnCC,EAAmBJ,QAMrBL,EAAY,IACdZ,EACHC,WAAYU,EAAUV,WACtBqB,MAAO,CACLC,aAAc,GAEhBd,cAAeE,EAAUF,cACzBe,WAAY,CACVC,SAAU,CACRC,aAAc,CACZF,WAAY,CACVG,UAAWC,IAGfC,eAAgB,CACdC,KAAM,CAEJP,aAAc,MAEdQ,QAAS,QAEXC,KAAM,CAEJC,YAAa,OACbF,QAAS,GAEXG,OAAQ,CACNH,QAAS,EACT,WAAY,CACVI,UAAW,SAGfC,QAAS,CACPL,QAAS,KAIfM,UAAWC,EAAqB3B,GAChC4B,cAAeC,IACfC,QAAS,CACPZ,eAAgB,CACdC,KAAM,CACJY,UAAW,OACXC,YAAa,MACbC,YAAa,QACbC,YAAalC,EAAUT,QAAQ4C,WAIrCC,kBAAmB,CACjBlB,eAAgB,CACdC,KAAM,CACJ,UAAW,CACTkB,gBAAiBrC,EAAUT,QAAQ+C,SAASC,KAAK,sBAEnD,qBAAsB,CACpBC,aAAc,aAAaxC,EAAUT,QAAQ+C,SAASG,OAAO,qBAKrEC,YAAa,CACXxB,eAAgB,CACdC,KAAM,CACJ,4BAA6B,CAC3BkB,gBAAiBrC,EAAUT,QAAQ+C,SAASC,KAAK,kBACjDI,OAAQ,cAKhBC,cAAe,CACb7B,aAAc,CACZ8B,eAAgBC,IAGpBC,gBAAiBC,EAAsBhD,GACvCiD,cAAeC,IACfC,YAAaC,EAAkBpD,GAC/BqD,QAASC,EAActD,GACvBuD,oBAAqBC,EAA0BxD,GAC/CyD,kBAAmBC,EAAwB1D,GAC3C2D,aAAcC,EAAmB5D,GACjC6D,aAAcC,EAAmB9D,GACjC+D,cAAeC,EAAoBhE,GACnCiE,gBAAiBC,EAAsBlE,GACvCmE,QAASC,EAAcpE,GACvBqE,YAAaC,EAAkBtE,GAC/BuE,UAAWC,EAAgBxE,GAC3ByE,aAAcC,EAAmB1E,OAK1B2E,EAAaxF,EAA2B,SACxCyF,EAAYzF,EAA2B"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("@mui/material/styles");const e=e=>({defaultProps:{disableRipple:!0,disableTouchRipple:!0,focusRipple:!1}});exports.buttonBaseOverrides=e,exports.default=e;
2
+ //# sourceMappingURL=buttonBaseOverrides.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttonBaseOverrides.cjs.js","sources":["../../../src/themes/overrides/buttonBaseOverrides.ts"],"sourcesContent":["import { type Components, type Theme } from '@mui/material/styles';\n\nexport const buttonBaseOverrides = (_theme: Theme): Components<Theme>['MuiButtonBase'] => ({\n defaultProps: {\n disableRipple: true,\n disableTouchRipple: true,\n focusRipple: false,\n },\n});\n\nexport default buttonBaseOverrides;\n"],"names":["buttonBaseOverrides","_theme","defaultProps","disableRipple","disableTouchRipple","focusRipple"],"mappings":"0GAEaA,EAAuBC,IAAa,CAC/CC,aAAc,CACZC,eAAe,EACfC,oBAAoB,EACpBC,aAAa"}
@@ -0,0 +1,5 @@
1
+ import { Theme, Components } from '@mui/material/styles';
2
+
3
+ declare const buttonBaseOverrides: (_theme: Theme) => Components<Theme>['MuiButtonBase'];
4
+
5
+ export { buttonBaseOverrides, buttonBaseOverrides as default };
@@ -0,0 +1,2 @@
1
+ import"@mui/material/styles";const e=e=>({defaultProps:{disableRipple:!0,disableTouchRipple:!0,focusRipple:!1}});export{e as buttonBaseOverrides,e as default};
2
+ //# sourceMappingURL=buttonBaseOverrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttonBaseOverrides.js","sources":["../../../src/themes/overrides/buttonBaseOverrides.ts"],"sourcesContent":["import { type Components, type Theme } from '@mui/material/styles';\n\nexport const buttonBaseOverrides = (_theme: Theme): Components<Theme>['MuiButtonBase'] => ({\n defaultProps: {\n disableRipple: true,\n disableTouchRipple: true,\n focusRipple: false,\n },\n});\n\nexport default buttonBaseOverrides;\n"],"names":["buttonBaseOverrides","_theme","defaultProps","disableRipple","disableTouchRipple","focusRipple"],"mappings":"mCAEaA,EAAuBC,IAAa,CAC/CC,aAAc,CACZC,eAAe,EACfC,oBAAoB,EACpBC,aAAa"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("@mui/material/styles");var e=require("../typography.cjs.js");const i=i=>({styleOverrides:{root:{alignItems:"center",backgroundColor:i.palette.semantic.fill["fill-weak"],border:"1px solid",borderColor:i.palette.semantic.stroke["stroke-weak"],color:i.palette.semantic.text["text-strong"],display:"flex",justifyContent:"center",padding:i.spacing(0,1),"&.MuiChip-clickable":{boxShadow:"none","&:hover":{backgroundColor:i.palette.semantic.fill["fill-hover"],boxShadow:"none"},"&:active":{backgroundColor:i.palette.semantic.fill["fill-press"],boxShadow:"none"}},"&.MuiChip-deletable":{cursor:"default","&:hover":{backgroundColor:i.palette.semantic.fill["fill-hover"],boxShadow:"none"}},"&:focus-visible, &.Mui-focusVisible":{backgroundColor:i.palette.semantic.fill["fill-weak"],outline:`2px solid ${i.palette.semantic.stroke["stroke-focus"]}`,outlineOffset:"2px"},"&.Mui-disabled":{backgroundColor:i.palette.semantic.fill["fill-weak"],borderColor:"transparent",color:i.palette.semantic.text["text-disabled"],opacity:1,"& .MuiChip-deleteIcon, & .MuiChip-icon":{color:i.palette.semantic.icon["icon-disabled"]}},"&.MuiChip-sizeSmall":{...e.typography.captionWeak,[i.breakpoints.down("tablet")]:{...e.getMobileTextStyle("caption")}},"&.MuiChip-sizeMedium":{...e.typography.b1Weak,[i.breakpoints.down("tablet")]:{...e.getMobileTextStyle("b1")}},"& .MuiChip-label":{padding:i.spacing(0,.5)},"& .MuiChip-icon":{paddingRight:i.spacing(.5),fontSize:"inherit"},"& .MuiChip-deleteIcon":{color:i.palette.semantic.icon["icon-strong"],margin:0},'&[data-fd-variant="badge"]':{"& .MuiChip-icon":{color:i.palette.semantic.icon["icon-strong"]},"&.MuiChip-sizeSmall":{borderRadius:i.radius["radius-4"]},"&.MuiChip-sizeMedium":{borderRadius:i.radius["radius-8"]}},'&[data-fd-variant="tag"]':{borderRadius:i.radius["radius-16"]}}}});exports.chipOverrides=i,exports.default=i;
2
+ //# sourceMappingURL=chipOverrides.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chipOverrides.cjs.js","sources":["../../../src/themes/overrides/chipOverrides.ts"],"sourcesContent":["import { type Components, type Theme } from '@mui/material/styles';\n\nimport { getMobileTextStyle, typography } from '@fd/themes/typography';\n\nexport const chipOverrides = (theme: Theme): Components<Theme>['MuiChip'] => ({\n styleOverrides: {\n root: {\n alignItems: 'center',\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n border: '1px solid',\n borderColor: theme.palette.semantic.stroke['stroke-weak'],\n color: theme.palette.semantic.text['text-strong'],\n display: 'flex',\n justifyContent: 'center',\n padding: theme.spacing(0, 1),\n\n '&.MuiChip-clickable': {\n boxShadow: 'none',\n\n '&:hover': {\n backgroundColor: theme.palette.semantic.fill['fill-hover'],\n boxShadow: 'none',\n },\n '&:active': {\n backgroundColor: theme.palette.semantic.fill['fill-press'],\n boxShadow: 'none',\n },\n },\n '&.MuiChip-deletable': {\n cursor: 'default',\n\n '&:hover': {\n backgroundColor: theme.palette.semantic.fill['fill-hover'],\n boxShadow: 'none',\n },\n },\n '&:focus-visible, &.Mui-focusVisible': {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n outline: `2px solid ${theme.palette.semantic.stroke['stroke-focus']}`,\n outlineOffset: '2px',\n },\n '&.Mui-disabled': {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n borderColor: 'transparent',\n color: theme.palette.semantic.text['text-disabled'],\n opacity: 1, // Override default MUI opacity\n\n '& .MuiChip-deleteIcon, & .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-disabled'],\n },\n },\n '&.MuiChip-sizeSmall': {\n ...typography.captionWeak,\n\n [theme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle('caption'),\n },\n },\n '&.MuiChip-sizeMedium': {\n ...typography.b1Weak,\n\n [theme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle('b1'),\n },\n },\n '& .MuiChip-label': {\n padding: theme.spacing(0, 0.5),\n },\n '& .MuiChip-icon': {\n paddingRight: theme.spacing(0.5),\n fontSize: 'inherit',\n },\n '& .MuiChip-deleteIcon': {\n color: theme.palette.semantic.icon['icon-strong'],\n margin: 0,\n },\n '&[data-fd-variant=\"badge\"]': {\n '& .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-strong'],\n },\n '&.MuiChip-sizeSmall': {\n borderRadius: theme.radius['radius-4'],\n },\n '&.MuiChip-sizeMedium': {\n borderRadius: theme.radius['radius-8'],\n },\n },\n '&[data-fd-variant=\"tag\"]': {\n borderRadius: theme.radius['radius-16'],\n },\n },\n },\n});\n\nexport default chipOverrides;\n"],"names":["chipOverrides","theme","styleOverrides","root","alignItems","backgroundColor","palette","semantic","fill","border","borderColor","stroke","color","text","display","justifyContent","padding","spacing","boxShadow","cursor","outline","outlineOffset","opacity","icon","typography","captionWeak","breakpoints","down","getMobileTextStyle","b1Weak","paddingRight","fontSize","margin","borderRadius","radius"],"mappings":"gJAIaA,EAAiBC,IAAY,CACxCC,eAAgB,CACdC,KAAM,CACJC,WAAY,SACZC,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,aAC7CC,OAAQ,YACRC,YAAaT,EAAMK,QAAQC,SAASI,OAAO,eAC3CC,MAAOX,EAAMK,QAAQC,SAASM,KAAK,eACnCC,QAAS,OACTC,eAAgB,SAChBC,QAASf,EAAMgB,QAAQ,EAAG,GAE1B,sBAAuB,CACrBC,UAAW,OAEX,UAAW,CACTb,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,cAC7CU,UAAW,QAEb,WAAY,CACVb,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,cAC7CU,UAAW,SAGf,sBAAuB,CACrBC,OAAQ,UAER,UAAW,CACTd,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,cAC7CU,UAAW,SAGf,sCAAuC,CACrCb,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,aAC7CY,QAAS,aAAanB,EAAMK,QAAQC,SAASI,OAAO,kBACpDU,cAAe,OAEjB,iBAAkB,CAChBhB,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,aAC7CE,YAAa,cACbE,MAAOX,EAAMK,QAAQC,SAASM,KAAK,iBACnCS,QAAS,EAET,yCAA0C,CACxCV,MAAOX,EAAMK,QAAQC,SAASgB,KAAK,mBAGvC,sBAAuB,IAClBC,EAAAA,WAAWC,YAEd,CAACxB,EAAMyB,YAAYC,KAAK,WAAY,IAC/BC,EAAAA,mBAAmB,aAG1B,uBAAwB,IACnBJ,EAAAA,WAAWK,OAEd,CAAC5B,EAAMyB,YAAYC,KAAK,WAAY,IAC/BC,EAAAA,mBAAmB,QAG1B,mBAAoB,CAClBZ,QAASf,EAAMgB,QAAQ,EAAG,KAE5B,kBAAmB,CACjBa,aAAc7B,EAAMgB,QAAQ,IAC5Bc,SAAU,WAEZ,wBAAyB,CACvBnB,MAAOX,EAAMK,QAAQC,SAASgB,KAAK,eACnCS,OAAQ,GAEV,6BAA8B,CAC5B,kBAAmB,CACjBpB,MAAOX,EAAMK,QAAQC,SAASgB,KAAK,gBAErC,sBAAuB,CACrBU,aAAchC,EAAMiC,OAAO,aAE7B,uBAAwB,CACtBD,aAAchC,EAAMiC,OAAO,cAG/B,2BAA4B,CAC1BD,aAAchC,EAAMiC,OAAO"}
@@ -0,0 +1,5 @@
1
+ import { Theme, Components } from '@mui/material/styles';
2
+
3
+ declare const chipOverrides: (theme: Theme) => Components<Theme>['MuiChip'];
4
+
5
+ export { chipOverrides, chipOverrides as default };
@@ -0,0 +1,2 @@
1
+ import"@mui/material/styles";import{getMobileTextStyle as e,typography as i}from"../typography.js";const o=o=>({styleOverrides:{root:{alignItems:"center",backgroundColor:o.palette.semantic.fill["fill-weak"],border:"1px solid",borderColor:o.palette.semantic.stroke["stroke-weak"],color:o.palette.semantic.text["text-strong"],display:"flex",justifyContent:"center",padding:o.spacing(0,1),"&.MuiChip-clickable":{boxShadow:"none","&:hover":{backgroundColor:o.palette.semantic.fill["fill-hover"],boxShadow:"none"},"&:active":{backgroundColor:o.palette.semantic.fill["fill-press"],boxShadow:"none"}},"&.MuiChip-deletable":{cursor:"default","&:hover":{backgroundColor:o.palette.semantic.fill["fill-hover"],boxShadow:"none"}},"&:focus-visible, &.Mui-focusVisible":{backgroundColor:o.palette.semantic.fill["fill-weak"],outline:`2px solid ${o.palette.semantic.stroke["stroke-focus"]}`,outlineOffset:"2px"},"&.Mui-disabled":{backgroundColor:o.palette.semantic.fill["fill-weak"],borderColor:"transparent",color:o.palette.semantic.text["text-disabled"],opacity:1,"& .MuiChip-deleteIcon, & .MuiChip-icon":{color:o.palette.semantic.icon["icon-disabled"]}},"&.MuiChip-sizeSmall":{...i.captionWeak,[o.breakpoints.down("tablet")]:{...e("caption")}},"&.MuiChip-sizeMedium":{...i.b1Weak,[o.breakpoints.down("tablet")]:{...e("b1")}},"& .MuiChip-label":{padding:o.spacing(0,.5)},"& .MuiChip-icon":{paddingRight:o.spacing(.5),fontSize:"inherit"},"& .MuiChip-deleteIcon":{color:o.palette.semantic.icon["icon-strong"],margin:0},'&[data-fd-variant="badge"]':{"& .MuiChip-icon":{color:o.palette.semantic.icon["icon-strong"]},"&.MuiChip-sizeSmall":{borderRadius:o.radius["radius-4"]},"&.MuiChip-sizeMedium":{borderRadius:o.radius["radius-8"]}},'&[data-fd-variant="tag"]':{borderRadius:o.radius["radius-16"]}}}});export{o as chipOverrides,o as default};
2
+ //# sourceMappingURL=chipOverrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chipOverrides.js","sources":["../../../src/themes/overrides/chipOverrides.ts"],"sourcesContent":["import { type Components, type Theme } from '@mui/material/styles';\n\nimport { getMobileTextStyle, typography } from '@fd/themes/typography';\n\nexport const chipOverrides = (theme: Theme): Components<Theme>['MuiChip'] => ({\n styleOverrides: {\n root: {\n alignItems: 'center',\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n border: '1px solid',\n borderColor: theme.palette.semantic.stroke['stroke-weak'],\n color: theme.palette.semantic.text['text-strong'],\n display: 'flex',\n justifyContent: 'center',\n padding: theme.spacing(0, 1),\n\n '&.MuiChip-clickable': {\n boxShadow: 'none',\n\n '&:hover': {\n backgroundColor: theme.palette.semantic.fill['fill-hover'],\n boxShadow: 'none',\n },\n '&:active': {\n backgroundColor: theme.palette.semantic.fill['fill-press'],\n boxShadow: 'none',\n },\n },\n '&.MuiChip-deletable': {\n cursor: 'default',\n\n '&:hover': {\n backgroundColor: theme.palette.semantic.fill['fill-hover'],\n boxShadow: 'none',\n },\n },\n '&:focus-visible, &.Mui-focusVisible': {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n outline: `2px solid ${theme.palette.semantic.stroke['stroke-focus']}`,\n outlineOffset: '2px',\n },\n '&.Mui-disabled': {\n backgroundColor: theme.palette.semantic.fill['fill-weak'],\n borderColor: 'transparent',\n color: theme.palette.semantic.text['text-disabled'],\n opacity: 1, // Override default MUI opacity\n\n '& .MuiChip-deleteIcon, & .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-disabled'],\n },\n },\n '&.MuiChip-sizeSmall': {\n ...typography.captionWeak,\n\n [theme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle('caption'),\n },\n },\n '&.MuiChip-sizeMedium': {\n ...typography.b1Weak,\n\n [theme.breakpoints.down('tablet')]: {\n ...getMobileTextStyle('b1'),\n },\n },\n '& .MuiChip-label': {\n padding: theme.spacing(0, 0.5),\n },\n '& .MuiChip-icon': {\n paddingRight: theme.spacing(0.5),\n fontSize: 'inherit',\n },\n '& .MuiChip-deleteIcon': {\n color: theme.palette.semantic.icon['icon-strong'],\n margin: 0,\n },\n '&[data-fd-variant=\"badge\"]': {\n '& .MuiChip-icon': {\n color: theme.palette.semantic.icon['icon-strong'],\n },\n '&.MuiChip-sizeSmall': {\n borderRadius: theme.radius['radius-4'],\n },\n '&.MuiChip-sizeMedium': {\n borderRadius: theme.radius['radius-8'],\n },\n },\n '&[data-fd-variant=\"tag\"]': {\n borderRadius: theme.radius['radius-16'],\n },\n },\n },\n});\n\nexport default chipOverrides;\n"],"names":["chipOverrides","theme","styleOverrides","root","alignItems","backgroundColor","palette","semantic","fill","border","borderColor","stroke","color","text","display","justifyContent","padding","spacing","boxShadow","cursor","outline","outlineOffset","opacity","icon","typography","captionWeak","breakpoints","down","getMobileTextStyle","b1Weak","paddingRight","fontSize","margin","borderRadius","radius"],"mappings":"yGAIaA,EAAiBC,IAAY,CACxCC,eAAgB,CACdC,KAAM,CACJC,WAAY,SACZC,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,aAC7CC,OAAQ,YACRC,YAAaT,EAAMK,QAAQC,SAASI,OAAO,eAC3CC,MAAOX,EAAMK,QAAQC,SAASM,KAAK,eACnCC,QAAS,OACTC,eAAgB,SAChBC,QAASf,EAAMgB,QAAQ,EAAG,GAE1B,sBAAuB,CACrBC,UAAW,OAEX,UAAW,CACTb,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,cAC7CU,UAAW,QAEb,WAAY,CACVb,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,cAC7CU,UAAW,SAGf,sBAAuB,CACrBC,OAAQ,UAER,UAAW,CACTd,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,cAC7CU,UAAW,SAGf,sCAAuC,CACrCb,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,aAC7CY,QAAS,aAAanB,EAAMK,QAAQC,SAASI,OAAO,kBACpDU,cAAe,OAEjB,iBAAkB,CAChBhB,gBAAiBJ,EAAMK,QAAQC,SAASC,KAAK,aAC7CE,YAAa,cACbE,MAAOX,EAAMK,QAAQC,SAASM,KAAK,iBACnCS,QAAS,EAET,yCAA0C,CACxCV,MAAOX,EAAMK,QAAQC,SAASgB,KAAK,mBAGvC,sBAAuB,IAClBC,EAAWC,YAEd,CAACxB,EAAMyB,YAAYC,KAAK,WAAY,IAC/BC,EAAmB,aAG1B,uBAAwB,IACnBJ,EAAWK,OAEd,CAAC5B,EAAMyB,YAAYC,KAAK,WAAY,IAC/BC,EAAmB,QAG1B,mBAAoB,CAClBZ,QAASf,EAAMgB,QAAQ,EAAG,KAE5B,kBAAmB,CACjBa,aAAc7B,EAAMgB,QAAQ,IAC5Bc,SAAU,WAEZ,wBAAyB,CACvBnB,MAAOX,EAAMK,QAAQC,SAASgB,KAAK,eACnCS,OAAQ,GAEV,6BAA8B,CAC5B,kBAAmB,CACjBpB,MAAOX,EAAMK,QAAQC,SAASgB,KAAK,gBAErC,sBAAuB,CACrBU,aAAchC,EAAMiC,OAAO,aAE7B,uBAAwB,CACtBD,aAAchC,EAAMiC,OAAO,cAG/B,2BAA4B,CAC1BD,aAAchC,EAAMiC,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flipdish/portal-library",
3
- "version": "7.1.0",
3
+ "version": "7.2.0",
4
4
  "files": [
5
5
  "dist"
6
6
  ],