@persona/design-system 0.10.2 → 0.10.4

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 (94) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/{Breadcrumb-BDbY1Ffu.d.mts → Breadcrumb-CA0vAzUN.d.mts} +7 -2
  3. package/dist/Breadcrumb.d.mts +2 -2
  4. package/dist/{Breadcrumbs-C2ThOYJ-.d.mts → Breadcrumbs-47jYLqNP.d.mts} +2 -2
  5. package/dist/{Breadcrumbs-CQUe9VTM.mjs → Breadcrumbs-gRAsKF4R.mjs} +50 -10
  6. package/dist/Breadcrumbs-gRAsKF4R.mjs.map +1 -0
  7. package/dist/Breadcrumbs.d.mts +1 -1
  8. package/dist/{Combobox-BXHCfVpE.mjs → Combobox-CBM-oY-e.mjs} +6 -4
  9. package/dist/{Combobox-BXHCfVpE.mjs.map → Combobox-CBM-oY-e.mjs.map} +1 -1
  10. package/dist/{CompactBar-CfrrZ69k.d.mts → CompactBar-D9egXqY_.d.mts} +2 -2
  11. package/dist/CompactBar.d.mts +1 -1
  12. package/dist/{ConfigFormGroup-BE3yR_VU.mjs → ConfigFormGroup-CidT_cE9.mjs} +1 -1
  13. package/dist/{ConfigFormGroup-BE3yR_VU.mjs.map → ConfigFormGroup-CidT_cE9.mjs.map} +1 -1
  14. package/dist/{ControlBar-D9KflqmH.d.mts → ControlBar-RIz-xjxs.d.mts} +18 -1
  15. package/dist/ControlBar.d.mts +1 -1
  16. package/dist/{DataTable-BdKUCgcZ.d.mts → DataTable-D15C5lfd.d.mts} +3 -2
  17. package/dist/{DataTable-F9R-aQCg.mjs → DataTable-DQ8axNfo.mjs} +7 -7
  18. package/dist/{DataTable-F9R-aQCg.mjs.map → DataTable-DQ8axNfo.mjs.map} +1 -1
  19. package/dist/DataTable.d.mts +1 -1
  20. package/dist/{DatePicker-CkNQjfCN.mjs → DatePicker-D0cvVbzq.mjs} +2 -2
  21. package/dist/{DatePicker-CkNQjfCN.mjs.map → DatePicker-D0cvVbzq.mjs.map} +1 -1
  22. package/dist/{FormField-D0y1uRV5.mjs → FormField-C0cd1zVd.mjs} +5 -5
  23. package/dist/{FormField-D0y1uRV5.mjs.map → FormField-C0cd1zVd.mjs.map} +1 -1
  24. package/dist/{HoverCopyableField-DkOosH8z.mjs → HoverCopyableField-D-BubaRd.mjs} +2 -2
  25. package/dist/{HoverCopyableField-DkOosH8z.mjs.map → HoverCopyableField-D-BubaRd.mjs.map} +1 -1
  26. package/dist/IndexTableLayout.d.mts +4 -4
  27. package/dist/{Link-BSuXrvTu.mjs → Link-Cf__H8gD.mjs} +1 -1
  28. package/dist/{Link-BSuXrvTu.mjs.map → Link-Cf__H8gD.mjs.map} +1 -1
  29. package/dist/{ListBox-BLoJVezh.mjs → ListBox-eoyBHtnJ.mjs} +2 -2
  30. package/dist/{ListBox-BLoJVezh.mjs.map → ListBox-eoyBHtnJ.mjs.map} +1 -1
  31. package/dist/{Modal-IJdbLORi.mjs → Modal-kjUptzg1.mjs} +1 -1
  32. package/dist/{Modal-IJdbLORi.mjs.map → Modal-kjUptzg1.mjs.map} +1 -1
  33. package/dist/{PageHeader-Czj42pyK.d.mts → PageHeader-CnpDVOck.d.mts} +2 -2
  34. package/dist/{PageHeader-DJF7nxgN.mjs → PageHeader-D2j2XHD9.mjs} +6 -2
  35. package/dist/PageHeader-D2j2XHD9.mjs.map +1 -0
  36. package/dist/PageHeader.d.mts +1 -1
  37. package/dist/{Pagination-C5ANr9M0.mjs → Pagination-DtK-jbEY.mjs} +2 -2
  38. package/dist/{Pagination-C5ANr9M0.mjs.map → Pagination-DtK-jbEY.mjs.map} +1 -1
  39. package/dist/{Pii-G16_b7Yk.mjs → Pii-DueIK287.mjs} +1 -1
  40. package/dist/{Pii-G16_b7Yk.mjs.map → Pii-DueIK287.mjs.map} +1 -1
  41. package/dist/{Popover-532iYFek.mjs → Popover-BcII7usF.mjs} +1 -1
  42. package/dist/{Popover-532iYFek.mjs.map → Popover-BcII7usF.mjs.map} +1 -1
  43. package/dist/{Select-hnXfPywt.mjs → Select-BJ9ACmRD.mjs} +1 -1
  44. package/dist/{Select-hnXfPywt.mjs.map → Select-BJ9ACmRD.mjs.map} +1 -1
  45. package/dist/SelectionCard.d.mts +0 -5
  46. package/dist/{Spinner-AnIk8d9M.mjs → Spinner-7Camx1vs.mjs} +4 -3
  47. package/dist/{Spinner-AnIk8d9M.mjs.map → Spinner-7Camx1vs.mjs.map} +1 -1
  48. package/dist/{Table-CmuWqmVN.mjs → Table-BIDaC0uS.mjs} +2 -2
  49. package/dist/{Table-CmuWqmVN.mjs.map → Table-BIDaC0uS.mjs.map} +1 -1
  50. package/dist/{TableBox-BRJunn09.mjs → TableBox-Bn_XZEYd.mjs} +4 -4
  51. package/dist/{TableBox-BRJunn09.mjs.map → TableBox-Bn_XZEYd.mjs.map} +1 -1
  52. package/dist/{TableControls-DCtTiWk6.d.mts → TableControls-ETB0Xk5X.d.mts} +3 -2
  53. package/dist/{TableControls-C5fNNdmT.mjs → TableControls-qxoq5abn.mjs} +102 -60
  54. package/dist/TableControls-qxoq5abn.mjs.map +1 -0
  55. package/dist/TableControls.d.mts +1 -1
  56. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  57. package/dist/components/Breadcrumbs/index.mjs +1 -1
  58. package/dist/components/Combobox/index.mjs +1 -1
  59. package/dist/components/ConfigFormGroup/index.mjs +1 -1
  60. package/dist/components/DataTable/TableControls/index.d.mts +3 -3
  61. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  62. package/dist/components/DataTable/index.d.mts +1 -1
  63. package/dist/components/DataTable/index.mjs +1 -1
  64. package/dist/components/DatePicker/index.mjs +1 -1
  65. package/dist/components/FormField/index.mjs +1 -1
  66. package/dist/components/HoverCopyableField/index.mjs +1 -1
  67. package/dist/components/Link/index.mjs +1 -1
  68. package/dist/components/ListBox/index.mjs +1 -1
  69. package/dist/components/Modal/index.mjs +1 -1
  70. package/dist/components/PageHeader/index.d.mts +1 -1
  71. package/dist/components/PageHeader/index.mjs +1 -1
  72. package/dist/components/Pagination/index.mjs +1 -1
  73. package/dist/components/Pii/index.mjs +1 -1
  74. package/dist/components/Popover/index.mjs +1 -1
  75. package/dist/components/Select/index.mjs +1 -1
  76. package/dist/components/SelectionCard/index.mjs +32 -24
  77. package/dist/components/SelectionCard/index.mjs.map +1 -1
  78. package/dist/components/SmartTextInput/index.mjs +1 -1
  79. package/dist/components/Spinner/index.mjs +1 -1
  80. package/dist/components/Table/index.mjs +1 -1
  81. package/dist/components/TableBox/index.mjs +1 -1
  82. package/dist/components/VersionHistory/index.mjs +2 -2
  83. package/dist/patterns/IndexTableLayout/index.mjs +2 -2
  84. package/dist/patterns/LayoutLoadingShimmer/index.mjs +2 -2
  85. package/dist/patterns/WizardModal/index.mjs +1 -1
  86. package/llms.txt +2 -1
  87. package/package.json +2 -2
  88. package/skills/ui-authoring/SKILL.md +8 -0
  89. package/skills/ui-authoring/STANDARD.md +137 -0
  90. package/skills/ui-authoring/TOKENS.md +3 -1
  91. package/skills/ui-authoring/lanes.json +22 -0
  92. package/dist/Breadcrumbs-CQUe9VTM.mjs.map +0 -1
  93. package/dist/PageHeader-DJF7nxgN.mjs.map +0 -1
  94. package/dist/TableControls-C5fNNdmT.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## 0.10.4 (2026-10-26)
2
+
3
+ ### Features
4
+
5
+ - **design-system:** truncate long breadcrumb labels with an ellipsis
6
+
7
+ ## 0.10.3 (2026-10-26)
8
+
9
+ ### Features
10
+
11
+ - **design-system:** add starredDefaultView to saved view tabs ([#438](https://github.com/persona-id/persona-design-system/pull/438))
12
+
13
+ ### Bug Fixes
14
+
15
+ - **design-system:** use srText as Spinner accessible name ([#451](https://github.com/persona-id/persona-design-system/pull/451), [#450](https://github.com/persona-id/persona-design-system/issues/450))
16
+ - **design-system:** use medium bold label and remove icon background in SelectionCard
17
+ - **filtersv2:** apply a valueless condition as soon as its field is picked
18
+ - **design-system:** only clear a single-select Combobox when the user empties the input
19
+
1
20
  ## 0.10.2 (2026-10-23)
2
21
 
3
22
  ### Features
@@ -31,6 +31,11 @@ type BreadcrumbProps = {
31
31
  editMaxLength?: number;
32
32
  onCopy?: () => void;
33
33
  };
34
+ declare const getInlineActionCount: ({
35
+ onEdit,
36
+ showCopyAction,
37
+ copyValue
38
+ }: Pick<BreadcrumbProps, "onEdit" | "showCopyAction" | "copyValue">) => number;
34
39
  declare const Breadcrumb: ({
35
40
  label,
36
41
  size,
@@ -48,5 +53,5 @@ declare const Breadcrumb: ({
48
53
  onCopy
49
54
  }: BreadcrumbProps) => _$react_jsx_runtime0.JSX.Element;
50
55
  //#endregion
51
- export { BreadcrumbSize as i, BreadcrumbHeadingAs as n, BreadcrumbProps as r, Breadcrumb as t };
52
- //# sourceMappingURL=Breadcrumb-BDbY1Ffu.d.mts.map
56
+ export { getInlineActionCount as a, BreadcrumbSize as i, BreadcrumbHeadingAs as n, BreadcrumbProps as r, Breadcrumb as t };
57
+ //# sourceMappingURL=Breadcrumb-CA0vAzUN.d.mts.map
@@ -1,2 +1,2 @@
1
- import { i as BreadcrumbSize, n as BreadcrumbHeadingAs, r as BreadcrumbProps, t as Breadcrumb } from "./Breadcrumb-BDbY1Ffu.mjs";
2
- export { BreadcrumbHeadingAs, BreadcrumbProps, BreadcrumbSize, Breadcrumb as default };
1
+ import { a as getInlineActionCount, i as BreadcrumbSize, n as BreadcrumbHeadingAs, r as BreadcrumbProps, t as Breadcrumb } from "./Breadcrumb-CA0vAzUN.mjs";
2
+ export { BreadcrumbHeadingAs, BreadcrumbProps, BreadcrumbSize, Breadcrumb as default, getInlineActionCount };
@@ -1,4 +1,4 @@
1
- import { i as BreadcrumbSize, n as BreadcrumbHeadingAs, r as BreadcrumbProps } from "./Breadcrumb-BDbY1Ffu.mjs";
1
+ import { i as BreadcrumbSize, n as BreadcrumbHeadingAs, r as BreadcrumbProps } from "./Breadcrumb-CA0vAzUN.mjs";
2
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region components/Breadcrumbs/Breadcrumbs.d.ts
@@ -23,4 +23,4 @@ declare const Breadcrumbs: ({
23
23
  }: BreadcrumbsProps) => _$react_jsx_runtime0.JSX.Element | null;
24
24
  //#endregion
25
25
  export { BreadcrumbsItemProps as n, BreadcrumbsProps as r, Breadcrumbs as t };
26
- //# sourceMappingURL=Breadcrumbs-C2ThOYJ-.d.mts.map
26
+ //# sourceMappingURL=Breadcrumbs-47jYLqNP.d.mts.map
@@ -5,6 +5,7 @@ import { paragraphMixins } from "./mixins/text.mjs";
5
5
  import { i as Paragraph } from "./Text-CSwFifQF.mjs";
6
6
  import "./variables/transitions.mjs";
7
7
  import { a as Tooltip } from "./Tooltip-B-0VRuKT.mjs";
8
+ import { TruncatedTextWithTooltip } from "./lib/TruncatedTextWithTooltip.mjs";
8
9
  import { focusOutline } from "./mixins/focus.mjs";
9
10
  import { t as HStack } from "./Stack-BkC7FCdF.mjs";
10
11
  import { t as IconButton } from "./IconButton-HWx5Hlmi.mjs";
@@ -23,10 +24,21 @@ const COPY_TOOLTIP_STICKER_MAX_WIDTH = "96px";
23
24
  const COPY_TOOLTIP_STICKER_TOOLTIP_MAX_WIDTH = "250px";
24
25
  const LABEL_ACTION_GAP = Spacing[2];
25
26
  const ACTION_BUTTON_GAP = Spacing[1];
27
+ const getInlineActionCount = ({ onEdit, showCopyAction, copyValue }) => Number(onEdit != null) + (showCopyAction && copyValue != null ? 1 : 0);
26
28
  const CrumbRow = styled(HStack)`
27
29
  align-items: center;
28
30
  min-width: 0;
29
31
  `;
32
+ const InlineActions = styled(HStack)`
33
+ flex-shrink: 0;
34
+ `;
35
+ const BreadcrumbLabel = styled.span`
36
+ overflow-wrap: anywhere;
37
+ `;
38
+ const TruncatedBreadcrumbLabel = ({ label }) => /* @__PURE__ */ jsx(TruncatedTextWithTooltip, {
39
+ tooltipProps: { maxWidth: "400px" },
40
+ children: /* @__PURE__ */ jsx(BreadcrumbLabel, { children: label })
41
+ });
30
42
  const crumbLayoutStyles = (size) => css`
31
43
  display: inline-flex;
32
44
  align-items: center;
@@ -177,10 +189,15 @@ const Breadcrumb = ({ label, size = "md", current = false, headingAs = "h1", sho
177
189
  setIsEditing(false);
178
190
  if (editValue !== label) onEdit?.(editValue);
179
191
  };
180
- const inlineActions = !isEditing && (showCopyAction || onEdit) && /* @__PURE__ */ jsxs(HStack, {
192
+ const inlineActionCount = getInlineActionCount({
193
+ onEdit,
194
+ showCopyAction,
195
+ copyValue
196
+ });
197
+ const inlineActions = !isEditing && inlineActionCount > 0 && /* @__PURE__ */ jsxs(InlineActions, {
181
198
  spacing: ACTION_BUTTON_GAP,
182
199
  align: "center",
183
- children: [onEdit && /* @__PURE__ */ jsx(IconButton, {
200
+ children: [onEdit != null && /* @__PURE__ */ jsx(IconButton, {
184
201
  type: "button",
185
202
  size: "sm",
186
203
  "aria-label": `Edit ${label}`,
@@ -231,7 +248,7 @@ const Breadcrumb = ({ label, size = "md", current = false, headingAs = "h1", sho
231
248
  weight: "bold",
232
249
  color: "primary",
233
250
  as: headingAs,
234
- children: label
251
+ children: /* @__PURE__ */ jsx(TruncatedBreadcrumbLabel, { label })
235
252
  }), inlineActions]
236
253
  });
237
254
  if (href == null && onClick != null) return /* @__PURE__ */ jsxs(CrumbRow, {
@@ -240,7 +257,7 @@ const Breadcrumb = ({ label, size = "md", current = false, headingAs = "h1", sho
240
257
  type: "button",
241
258
  onClick,
242
259
  $size: size,
243
- children: label
260
+ children: /* @__PURE__ */ jsx(TruncatedBreadcrumbLabel, { label })
244
261
  }), inlineActions]
245
262
  });
246
263
  return /* @__PURE__ */ jsxs(CrumbRow, {
@@ -248,16 +265,21 @@ const Breadcrumb = ({ label, size = "md", current = false, headingAs = "h1", sho
248
265
  children: [/* @__PURE__ */ jsx(AncestorNavLink, {
249
266
  to: href ?? "",
250
267
  $size: size,
251
- children: label
268
+ children: /* @__PURE__ */ jsx(TruncatedBreadcrumbLabel, { label })
252
269
  }), inlineActions]
253
270
  });
254
271
  };
255
272
  //#endregion
256
273
  //#region components/Breadcrumbs/Breadcrumbs.tsx
274
+ const ANCESTOR_MIN_CHARS = 8;
275
+ const CURRENT_MIN_CHARS = 12;
276
+ const BreadcrumbNav = styled.nav`
277
+ min-width: 0;
278
+ `;
257
279
  const BreadcrumbList = styled.ol`
258
280
  max-width: 100%;
259
281
  display: flex;
260
- flex-wrap: wrap;
282
+ flex-wrap: nowrap;
261
283
  align-items: center;
262
284
  list-style: none;
263
285
  margin: 0;
@@ -267,7 +289,18 @@ const BreadcrumbList = styled.ol`
267
289
  const BreadcrumbListItem = styled.li`
268
290
  display: flex;
269
291
  align-items: center;
270
- min-width: 0;
292
+ ${({ $size }) => $size === "lg" ? paragraphMixins.lg : paragraphMixins.md};
293
+ ${({ $isShort, $isCurrent }) => $isShort ? "flex-shrink: 0;" : $isCurrent ? "flex: 0 1 auto;" : "flex: 0 100000 auto;"}
294
+ ${({ $minWidth }) => $minWidth != null && `min-width: ${$minWidth};`}
295
+
296
+ &:has(input) {
297
+ flex-shrink: 1;
298
+ }
299
+ `;
300
+ const SeparatorListItem = styled.li`
301
+ display: flex;
302
+ align-items: center;
303
+ flex-shrink: 0;
271
304
  `;
272
305
  const Separator = styled.span`
273
306
  padding: 0 ${Spacing[2]};
@@ -277,13 +310,20 @@ const Separator = styled.span`
277
310
  `;
278
311
  const Breadcrumbs = ({ items, size = "md", headingAs = "h1", "aria-label": ariaLabel = "Breadcrumbs", className }) => {
279
312
  if (items.length === 0) return null;
280
- return /* @__PURE__ */ jsx("nav", {
313
+ return /* @__PURE__ */ jsx(BreadcrumbNav, {
281
314
  "aria-label": ariaLabel,
282
315
  className,
283
316
  children: /* @__PURE__ */ jsx(BreadcrumbList, { children: intersperse(items.map((item, index) => {
284
317
  const isCurrent = index === items.length - 1;
318
+ const minChars = isCurrent ? CURRENT_MIN_CHARS : ANCESTOR_MIN_CHARS;
319
+ const actionCount = getInlineActionCount(item);
320
+ const actionsWidth = actionCount === 0 ? 0 : Number.parseFloat(Spacing[2]) + actionCount * 24 + (actionCount - 1) * Number.parseFloat(Spacing[1]);
285
321
  return /* @__PURE__ */ jsx(BreadcrumbListItem, {
286
322
  "aria-current": isCurrent ? "page" : void 0,
323
+ $size: size,
324
+ $isCurrent: isCurrent,
325
+ $isShort: item.label.length <= minChars,
326
+ $minWidth: item.label.length > minChars ? `calc(${minChars}ch + ${actionsWidth}px)` : void 0,
287
327
  children: /* @__PURE__ */ jsx(Breadcrumb, {
288
328
  ...item,
289
329
  size,
@@ -291,7 +331,7 @@ const Breadcrumbs = ({ items, size = "md", headingAs = "h1", "aria-label": ariaL
291
331
  headingAs
292
332
  })
293
333
  }, `${item.label}-${index}`);
294
- }), (separatorIndex) => /* @__PURE__ */ jsx(BreadcrumbListItem, {
334
+ }), (separatorIndex) => /* @__PURE__ */ jsx(SeparatorListItem, {
295
335
  "aria-hidden": "true",
296
336
  children: /* @__PURE__ */ jsx(Separator, {
297
337
  $size: size,
@@ -303,4 +343,4 @@ const Breadcrumbs = ({ items, size = "md", headingAs = "h1", "aria-label": ariaL
303
343
  //#endregion
304
344
  export { Breadcrumbs as t };
305
345
 
306
- //# sourceMappingURL=Breadcrumbs-CQUe9VTM.mjs.map
346
+ //# sourceMappingURL=Breadcrumbs-gRAsKF4R.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs-gRAsKF4R.mjs","names":["Input"],"sources":["../components/Breadcrumbs/Breadcrumb.tsx","../components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { type ChangeEvent, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { CopyIcon, EditIcon } from '@persona/icons';\nimport { IconButton } from 'design-system/components/Button';\nimport Input from 'design-system/components/Input';\nimport { HStack } from 'design-system/components/Stack';\nimport TechnicalSticker from 'design-system/components/TechnicalSticker';\nimport { Paragraph } from 'design-system/components/Text';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { RouterLink } from 'design-system/lib/router';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport TruncatedTextWithTooltip from 'design-system/lib/TruncatedTextWithTooltip';\nimport { focusOutline } from 'design-system/mixins/focus';\nimport { paragraphMixins } from 'design-system/mixins/text';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nexport type BreadcrumbSize = 'md' | 'lg';\n\nexport type BreadcrumbHeadingAs = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nconst COPY_TOOLTIP_LABEL = 'Copy ID';\nconst COPIED_TOOLTIP_LABEL = 'Copied!';\nconst DEFAULT_EDIT_MAX_LENGTH = 100;\nconst COPY_TOOLTIP_STICKER_MAX_WIDTH = '96px';\nconst COPY_TOOLTIP_STICKER_TOOLTIP_MAX_WIDTH = '250px';\n\nexport type BreadcrumbProps = {\n label: string;\n size?: BreadcrumbSize;\n current?: boolean;\n /**\n * Overrides the heading element rendered for the current crumb. Defaults to `h1`; use `h2` or\n * lower when the page already has an `h1`.\n */\n headingAs?: BreadcrumbHeadingAs;\n showCopyAction?: boolean;\n copyValue?: string;\n copyTooltipLabel?: string;\n /** Copy tooltip text shown after a successful copy. Defaults to `Copied!`. */\n copiedTooltipLabel?: string;\n /**\n * Appends `copyValue` to both copy tooltip texts as a `TechnicalSticker`, so the tooltip shows\n * which token is being copied.\n */\n showCopyValueInTooltip?: boolean;\n /** Internal path (e.g. `/cases`), rendered as a router-aware link. */\n href?: string;\n /**\n * Activates a non-current crumb without a route change, for trails that navigate in-place (e.g.\n * a control panel drilling into a sub-panel). Ignored when `href` is set.\n */\n onClick?: () => void;\n onEdit?: (newLabel: string) => void;\n editMaxLength?: number;\n onCopy?: () => void;\n};\n\nconst LABEL_ACTION_GAP = Spacing[2];\nconst ACTION_BUTTON_GAP = Spacing[1];\n\nexport const getInlineActionCount = ({\n onEdit,\n showCopyAction,\n copyValue,\n}: Pick<BreadcrumbProps, 'onEdit' | 'showCopyAction' | 'copyValue'>) =>\n Number(onEdit != null) + (showCopyAction && copyValue != null ? 1 : 0);\n\nconst CrumbRow = styled(HStack)`\n align-items: center;\n min-width: 0;\n`;\n\nconst InlineActions = styled(HStack)`\n flex-shrink: 0;\n`;\n\nconst BreadcrumbLabel = styled.span`\n overflow-wrap: anywhere;\n`;\n\nconst TruncatedBreadcrumbLabel = ({ label }: { label: string }) => (\n <TruncatedTextWithTooltip tooltipProps={{ maxWidth: '400px' }}>\n <BreadcrumbLabel>{label}</BreadcrumbLabel>\n </TruncatedTextWithTooltip>\n);\n\nconst crumbLayoutStyles = (size: BreadcrumbSize) => css`\n display: inline-flex;\n align-items: center;\n min-width: 0;\n min-height: ${({ theme }) => theme.element.height.xs};\n ${\n size === 'lg'\n ? css`\n font-size: ${({ theme }) => theme.text.paragraph.lg.fontSize};\n line-height: ${({ theme }) => theme.text.paragraph.lg.lineHeight};\n `\n : css``\n };\n`;\n\nconst editInputTextStyles = (size: BreadcrumbSize, current: boolean) => {\n if (current) {\n return size === 'lg' ? paragraphMixins.lgBold : paragraphMixins.mdBold;\n }\n return size === 'lg' ? paragraphMixins.lg : paragraphMixins.md;\n};\n\nconst ancestorCrumbStyles = css<{ $size: BreadcrumbSize }>`\n ${paragraphMixins.md};\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.secondary)};\n text-decoration: none;\n transition: color ${TransitionDuration.ExtraFast} ease-out;\n ${focusOutline}\n ${({ $size }) => crumbLayoutStyles($size)}\n\n &:hover {\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', theme.color.text.primary)};\n }\n`;\n\nconst AncestorNavLink = styled(RouterLink)<{ $size: BreadcrumbSize }>`\n ${ancestorCrumbStyles}\n`;\n\nconst AncestorNavButton = styled.button<{ $size: BreadcrumbSize }>`\n ${ancestorCrumbStyles}\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n`;\n\nconst InlineEditInput = styled(Input)<{\n $size: BreadcrumbSize;\n $current: boolean;\n $editMinWidth?: number;\n}>`\n margin: 0;\n padding: 2px 10px;\n width: auto;\n max-width: 100%;\n min-width: ${({ $editMinWidth }) => ($editMinWidth != null ? `${$editMinWidth}px` : '0')};\n field-sizing: content;\n display: inline-block;\n ${({ $size, $current }) => editInputTextStyles($size, $current)};\n background-color: ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', theme.color.text.primary)};\n\n &:not(:focus) {\n border-color: transparent;\n }\n\n &:hover:not(:disabled) {\n border-style: solid;\n }\n`;\n\nconst CurrentLabel = styled(Paragraph)<{ $size: BreadcrumbSize }>`\n margin: 0;\n ${({ $size }) => crumbLayoutStyles($size)}\n`;\n\nconst copyToClipboard = async (value: string): Promise<boolean> => {\n try {\n if (navigator.clipboard?.writeText == null) {\n return false;\n }\n\n await navigator.clipboard.writeText(value);\n return true;\n } catch {\n return false;\n }\n};\n\nconst BreadcrumbCopyButton = ({\n copyValue,\n copyTooltipLabel = COPY_TOOLTIP_LABEL,\n copiedTooltipLabel = COPIED_TOOLTIP_LABEL,\n showCopyValueInTooltip = false,\n onCopy,\n}: {\n copyValue: string;\n copyTooltipLabel?: string;\n copiedTooltipLabel?: string;\n showCopyValueInTooltip?: boolean;\n onCopy?: () => void;\n}) => {\n const [tooltipOpen, setTooltipOpen] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n const success = await copyToClipboard(copyValue);\n if (!success) {\n return;\n }\n\n setCopied(true);\n setTooltipOpen(true);\n onCopy?.();\n\n window.setTimeout(() => {\n setTooltipOpen(false);\n window.setTimeout(() => setCopied(false), 200);\n }, 1000);\n };\n\n const handleMouseEnter = () => {\n if (!copied) {\n setTooltipOpen(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (!copied) {\n setTooltipOpen(false);\n }\n };\n\n const trigger = (\n <span onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>\n <IconButton\n type='button'\n size='sm'\n aria-label={`Copy ${copyValue}`}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n void handleCopy();\n }}\n >\n <CopyIcon />\n </IconButton>\n </span>\n );\n\n const tooltipLabel = copied ? copiedTooltipLabel : copyTooltipLabel;\n\n return (\n <Tooltip\n trigger={trigger}\n open={tooltipOpen}\n side='top'\n sideOffset={4}\n size='sm'\n contentAlignment='center'\n interactive={false}\n hideArrow\n portal={false}\n maxWidth={showCopyValueInTooltip ? COPY_TOOLTIP_STICKER_TOOLTIP_MAX_WIDTH : undefined}\n >\n {showCopyValueInTooltip ? (\n <HStack spacing={ACTION_BUTTON_GAP} align='center'>\n <span>{tooltipLabel}</span>\n <TechnicalSticker copyable={false} maxWidth={COPY_TOOLTIP_STICKER_MAX_WIDTH}>\n {copyValue}\n </TechnicalSticker>\n </HStack>\n ) : (\n tooltipLabel\n )}\n </Tooltip>\n );\n};\n\nconst Breadcrumb = ({\n label,\n size = 'md',\n current = false,\n headingAs = 'h1',\n showCopyAction = false,\n copyValue,\n copyTooltipLabel,\n copiedTooltipLabel,\n showCopyValueInTooltip,\n href,\n onClick,\n onEdit,\n editMaxLength = DEFAULT_EDIT_MAX_LENGTH,\n onCopy,\n}: BreadcrumbProps) => {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(label);\n const [editMinWidth, setEditMinWidth] = useState<number | undefined>();\n const editInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (!isEditing) {\n setEditValue(label);\n }\n }, [isEditing, label]);\n\n useEffect(() => {\n if (!isEditing) {\n setEditMinWidth(undefined);\n return;\n }\n\n const input = editInputRef.current;\n if (input == null) {\n return;\n }\n\n setEditMinWidth(input.offsetWidth);\n input.focus();\n input.select();\n }, [isEditing]);\n\n const commitEdit = () => {\n if (!isEditing) {\n return;\n }\n\n setIsEditing(false);\n if (editValue !== label) {\n onEdit?.(editValue);\n }\n };\n\n const inlineActionCount = getInlineActionCount({ onEdit, showCopyAction, copyValue });\n const inlineActions = !isEditing && inlineActionCount > 0 && (\n <InlineActions spacing={ACTION_BUTTON_GAP} align='center'>\n {onEdit != null && (\n <IconButton\n type='button'\n size='sm'\n aria-label={`Edit ${label}`}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setIsEditing(true);\n }}\n >\n <EditIcon />\n </IconButton>\n )}\n {showCopyAction && copyValue != null && (\n <BreadcrumbCopyButton\n copyValue={copyValue}\n copyTooltipLabel={copyTooltipLabel}\n copiedTooltipLabel={copiedTooltipLabel}\n showCopyValueInTooltip={showCopyValueInTooltip}\n onCopy={onCopy}\n />\n )}\n </InlineActions>\n );\n\n if (isEditing) {\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <InlineEditInput\n ref={editInputRef}\n $size={size}\n $current={current}\n $editMinWidth={editMinWidth}\n size='md'\n aria-label={`Edit ${label}`}\n maxLength={editMaxLength}\n value={editValue}\n onChange={(event: ChangeEvent<HTMLInputElement>) => setEditValue(event.target.value)}\n onBlur={commitEdit}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitEdit();\n }\n if (event.key === 'Escape') {\n setEditValue(label);\n setIsEditing(false);\n }\n }}\n />\n </CrumbRow>\n );\n }\n\n if (current) {\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <CurrentLabel\n $size={size}\n size={size === 'lg' ? 'lg' : 'md'}\n weight='bold'\n color='primary'\n as={headingAs}\n >\n <TruncatedBreadcrumbLabel label={label} />\n </CurrentLabel>\n {inlineActions}\n </CrumbRow>\n );\n }\n\n if (href == null && onClick != null) {\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <AncestorNavButton type='button' onClick={onClick} $size={size}>\n <TruncatedBreadcrumbLabel label={label} />\n </AncestorNavButton>\n {inlineActions}\n </CrumbRow>\n );\n }\n\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <AncestorNavLink to={href ?? ''} $size={size}>\n <TruncatedBreadcrumbLabel label={label} />\n </AncestorNavLink>\n {inlineActions}\n </CrumbRow>\n );\n};\n\nexport default Breadcrumb;\n","import styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { intersperse } from 'design-system/lib/intersperse';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { paragraphMixins } from 'design-system/mixins/text';\n\nimport Breadcrumb, {\n type BreadcrumbHeadingAs,\n type BreadcrumbProps,\n type BreadcrumbSize,\n getInlineActionCount,\n} from './Breadcrumb';\n\nexport type BreadcrumbsItemProps = Omit<BreadcrumbProps, 'size' | 'current' | 'headingAs'>;\n\nexport type BreadcrumbsProps = {\n items: BreadcrumbsItemProps[];\n size?: BreadcrumbSize;\n /**\n * Overrides the heading element rendered for the current crumb. Defaults to `h1`; use `h2` or\n * lower when the page already has an `h1`.\n */\n headingAs?: BreadcrumbHeadingAs;\n 'aria-label'?: string;\n className?: string;\n};\n\nconst ANCESTOR_MIN_CHARS = 8;\nconst CURRENT_MIN_CHARS = 12;\n\nconst BreadcrumbNav = styled.nav`\n min-width: 0;\n`;\n\nconst BreadcrumbList = styled.ol`\n max-width: 100%;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n min-width: 0;\n`;\n\nconst BreadcrumbListItem = styled.li<{\n $size: BreadcrumbSize;\n $isCurrent: boolean;\n $isShort: boolean;\n $minWidth?: string;\n}>`\n display: flex;\n align-items: center;\n ${({ $size }) => ($size === 'lg' ? paragraphMixins.lg : paragraphMixins.md)};\n ${({ $isShort, $isCurrent }) =>\n $isShort ? 'flex-shrink: 0;' : $isCurrent ? 'flex: 0 1 auto;' : 'flex: 0 100000 auto;'}\n ${({ $minWidth }) => $minWidth != null && `min-width: ${$minWidth};`}\n\n &:has(input) {\n flex-shrink: 1;\n }\n`;\n\nconst SeparatorListItem = styled.li`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n`;\n\nconst Separator = styled.span<{ $size: BreadcrumbSize }>`\n padding: 0 ${Spacing[2]};\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.tertiary)};\n user-select: none;\n ${({ $size }) => ($size === 'lg' ? paragraphMixins.lg : paragraphMixins.md)};\n`;\n\nexport const Breadcrumbs = ({\n items,\n size = 'md',\n headingAs = 'h1',\n 'aria-label': ariaLabel = 'Breadcrumbs',\n className,\n}: BreadcrumbsProps) => {\n if (items.length === 0) {\n return null;\n }\n\n const crumbNodes = items.map((item, index) => {\n const isCurrent = index === items.length - 1;\n const minChars = isCurrent ? CURRENT_MIN_CHARS : ANCESTOR_MIN_CHARS;\n const actionCount = getInlineActionCount(item);\n const actionsWidth =\n actionCount === 0\n ? 0\n : Number.parseFloat(Spacing[2]) +\n actionCount * 24 +\n (actionCount - 1) * Number.parseFloat(Spacing[1]);\n\n return (\n <BreadcrumbListItem\n key={`${item.label}-${index}`}\n aria-current={isCurrent ? 'page' : undefined}\n $size={size}\n $isCurrent={isCurrent}\n $isShort={item.label.length <= minChars}\n $minWidth={\n item.label.length > minChars ? `calc(${minChars}ch + ${actionsWidth}px)` : undefined\n }\n >\n <Breadcrumb {...item} size={size} current={isCurrent} headingAs={headingAs} />\n </BreadcrumbListItem>\n );\n });\n\n const listItems = intersperse(crumbNodes, (separatorIndex: number) => (\n <SeparatorListItem key={`separator-${separatorIndex}`} aria-hidden='true'>\n <Separator $size={size}>/</Separator>\n </SeparatorListItem>\n ));\n\n return (\n <BreadcrumbNav aria-label={ariaLabel} className={className}>\n <BreadcrumbList>{listItems}</BreadcrumbList>\n </BreadcrumbNav>\n );\n};\n\nexport default Breadcrumbs;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { n as BreadcrumbsItemProps, r as BreadcrumbsProps, t as Breadcrumbs } from "./Breadcrumbs-C2ThOYJ-.mjs";
1
+ import { n as BreadcrumbsItemProps, r as BreadcrumbsProps, t as Breadcrumbs } from "./Breadcrumbs-47jYLqNP.mjs";
2
2
  export { Breadcrumbs, Breadcrumbs as default, BreadcrumbsItemProps, BreadcrumbsProps };
@@ -14,7 +14,7 @@ import { r as InputGroup } from "./Input-Dap055xf.mjs";
14
14
  import Input_default from "./components/Input/index.mjs";
15
15
  import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-Dw6Rcpk6.mjs";
16
16
  import { t as Checkbox } from "./Checkbox-BaJ-dGdX.mjs";
17
- import { t as Spinner } from "./Spinner-AnIk8d9M.mjs";
17
+ import { t as Spinner } from "./Spinner-7Camx1vs.mjs";
18
18
  import { Color, Spacing, Typography } from "@persona/design-tokens";
19
19
  import { Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
20
20
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1540,8 +1540,10 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1540
1540
  isOpen: embedded ? isDropdownOpen : void 0,
1541
1541
  selectedItem: isDropdownOpen ? null : selectedNavigableItem,
1542
1542
  inputValue,
1543
- onInputValueChange({ inputValue: newInputValue }) {
1544
- if (newInputValue === "" && !embedded && trigger == null) onChange?.(null);
1543
+ onInputValueChange({ inputValue: newInputValue, type }) {
1544
+ if (type === useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem && isDropdownOpen && !embedded) return;
1545
+ const isUserEdit = type === useCombobox.stateChangeTypes.InputChange || type === useCombobox.stateChangeTypes.InputKeyDownEscape;
1546
+ if (newInputValue === "" && isUserEdit && !embedded && trigger == null) onChange?.(null);
1545
1547
  setInputValue(newInputValue || "");
1546
1548
  onInputChange?.(newInputValue || "");
1547
1549
  },
@@ -1953,4 +1955,4 @@ const Combobox = forwardRef(ComboboxComponent);
1953
1955
  //#endregion
1954
1956
  export { CaretButton as n, flattenOptions as r, Combobox as t };
1955
1957
 
1956
- //# sourceMappingURL=Combobox-BXHCfVpE.mjs.map
1958
+ //# sourceMappingURL=Combobox-CBM-oY-e.mjs.map