@persona/design-system 0.10.1 → 0.10.3

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 (120) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{CheckboxGroupField-4dc7YXJY.d.mts → CheckboxGroupField-6E5o6bYi.d.mts} +2 -2
  3. package/dist/CheckboxGroupField.d.mts +1 -1
  4. package/dist/{Combobox-CcFJo68g.mjs → Combobox-CBM-oY-e.mjs} +6 -4
  5. package/dist/{Combobox-CcFJo68g.mjs.map → Combobox-CBM-oY-e.mjs.map} +1 -1
  6. package/dist/{Combobox-Bm2eSg56.d.mts → Combobox-DTeu9_RR.d.mts} +3 -3
  7. package/dist/Combobox.d.mts +2 -2
  8. package/dist/{ComboboxBase-B7ZcqU9p.d.mts → ComboboxBase-BMBdtP2Z.d.mts} +2 -2
  9. package/dist/ComboboxBase.d.mts +1 -1
  10. package/dist/{ComboboxMultiSelect-BkdRrH6K.d.mts → ComboboxMultiSelect-DY5bAep9.d.mts} +2 -2
  11. package/dist/ComboboxMultiSelect.d.mts +1 -1
  12. package/dist/{ComboboxSingleSelect-DIBRZmvS.d.mts → ComboboxSingleSelect-1NglA-u2.d.mts} +3 -3
  13. package/dist/ComboboxSingleSelect.d.mts +1 -1
  14. package/dist/{CompactBar-CfrrZ69k.d.mts → CompactBar-D9egXqY_.d.mts} +2 -2
  15. package/dist/CompactBar.d.mts +1 -1
  16. package/dist/{ControlBar-D9KflqmH.d.mts → ControlBar-RIz-xjxs.d.mts} +18 -1
  17. package/dist/ControlBar.d.mts +1 -1
  18. package/dist/{DataTable-BoAAKhVH.mjs → DataTable-DQ8axNfo.mjs} +3 -3
  19. package/dist/{DataTable-BoAAKhVH.mjs.map → DataTable-DQ8axNfo.mjs.map} +1 -1
  20. package/dist/{DataTable--_f1Obhj.d.mts → DataTable-l1bFeLXL.d.mts} +6 -5
  21. package/dist/DataTable.d.mts +1 -1
  22. package/dist/DropdownButton.d.mts +1 -1
  23. package/dist/{DropdownMenu-Bie2cWjb.d.mts → DropdownMenu-UIrnFxfG.d.mts} +2 -2
  24. package/dist/DropdownMenu.d.mts +1 -1
  25. package/dist/{FormField-C4B2qFgh.mjs → FormField-C0cd1zVd.mjs} +3 -3
  26. package/dist/{FormField-C4B2qFgh.mjs.map → FormField-C0cd1zVd.mjs.map} +1 -1
  27. package/dist/ImageThumbnail.d.mts +43 -0
  28. package/dist/IndexTableLayout.d.mts +3 -3
  29. package/dist/InlineCombobox.d.mts +1 -1
  30. package/dist/InlineInput.d.mts +1 -1
  31. package/dist/{ListBox-DIk8suJM.d.mts → ListBox-cH0dfeLN.d.mts} +2 -2
  32. package/dist/ListBox.d.mts +1 -1
  33. package/dist/{ListBoxField-DF8rqPsu.d.mts → ListBoxField-DOpaE0q4.d.mts} +4 -4
  34. package/dist/ListBoxField.d.mts +1 -1
  35. package/dist/{LogicRow-uxpe1vZ1.d.mts → LogicRow-CaxsteGU.d.mts} +2 -2
  36. package/dist/LogicRow.d.mts +1 -1
  37. package/dist/MaskedInput.d.mts +1 -1
  38. package/dist/{Menu-CrThaUX2.d.mts → Menu-5VknNr1T.d.mts} +2 -2
  39. package/dist/Menu.d.mts +1 -1
  40. package/dist/{Select-CsxK6A5m.d.mts → Select-CG_Xkx0m.d.mts} +2 -2
  41. package/dist/Select.d.mts +1 -1
  42. package/dist/SelectionCard.d.mts +46 -0
  43. package/dist/SelectionCardGroup.d.mts +37 -0
  44. package/dist/SmartTextInputField.d.mts +2 -2
  45. package/dist/{Spinner-uVZyOh1T.mjs → Spinner-7Camx1vs.mjs} +4 -3
  46. package/dist/{Spinner-uVZyOh1T.mjs.map → Spinner-7Camx1vs.mjs.map} +1 -1
  47. package/dist/{Table--o4ZLRbb.mjs → Table-BIDaC0uS.mjs} +2 -2
  48. package/dist/{Table--o4ZLRbb.mjs.map → Table-BIDaC0uS.mjs.map} +1 -1
  49. package/dist/{TableBox-3qunC9Nl.mjs → TableBox-Bn_XZEYd.mjs} +3 -3
  50. package/dist/{TableBox-3qunC9Nl.mjs.map → TableBox-Bn_XZEYd.mjs.map} +1 -1
  51. package/dist/TableBox.d.mts +1 -1
  52. package/dist/{TableBoxCell-okcOQ5Ec.d.mts → TableBoxCell-v_ag22E0.d.mts} +4 -4
  53. package/dist/TableBoxCell.d.mts +1 -1
  54. package/dist/{TableBoxField-DR-SJY9z.d.mts → TableBoxField-BTpSGmgW.d.mts} +5 -5
  55. package/dist/TableBoxField.d.mts +1 -1
  56. package/dist/{TableBoxRow-DiuAB_rV.d.mts → TableBoxRow-BBTztgTT.d.mts} +2 -2
  57. package/dist/TableBoxRow.d.mts +1 -1
  58. package/dist/{TableBoxRowActions-Cm4KJsAD.d.mts → TableBoxRowActions-B9QSVySz.d.mts} +2 -2
  59. package/dist/TableBoxRowActions.d.mts +1 -1
  60. package/dist/{TableControls-n16XKO9S.mjs → TableControls-qxoq5abn.mjs} +142 -61
  61. package/dist/TableControls-qxoq5abn.mjs.map +1 -0
  62. package/dist/{TableControls-B9bvsNUc.d.mts → TableControls-wM35j3g4.d.mts} +5 -4
  63. package/dist/TableControls.d.mts +1 -1
  64. package/dist/{TableControlsContext-CZThYoj5.d.mts → TableControlsContext-rTYwRi5S.d.mts} +2 -2
  65. package/dist/TableControlsContext.d.mts +1 -1
  66. package/dist/{TableViewConfigurationDropdown-CvN7tE98.d.mts → TableViewConfigurationDropdown-Gut16-vY.d.mts} +2 -2
  67. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  68. package/dist/{clientFilterUtils-BXEpzorX.d.mts → clientFilterUtils-D0Bwapen.d.mts} +2 -2
  69. package/dist/clientFilterUtils.d.mts +1 -1
  70. package/dist/components/Combobox/index.d.mts +2 -2
  71. package/dist/components/Combobox/index.mjs +1 -1
  72. package/dist/components/DataTable/TableControls/index.d.mts +7 -7
  73. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  74. package/dist/components/DataTable/index.d.mts +5 -5
  75. package/dist/components/DataTable/index.mjs +1 -1
  76. package/dist/components/DataTable/types.d.mts +1 -1
  77. package/dist/components/DropdownMenu/index.d.mts +1 -1
  78. package/dist/components/FormField/index.d.mts +4 -4
  79. package/dist/components/FormField/index.mjs +1 -1
  80. package/dist/components/ImageTile/index.mjs +82 -52
  81. package/dist/components/ImageTile/index.mjs.map +1 -1
  82. package/dist/components/ListBox/index.d.mts +3 -3
  83. package/dist/components/Menu/index.d.mts +1 -1
  84. package/dist/components/Select/index.d.mts +1 -1
  85. package/dist/components/SelectionCard/index.d.mts +3 -0
  86. package/dist/components/SelectionCard/index.mjs +272 -0
  87. package/dist/components/SelectionCard/index.mjs.map +1 -0
  88. package/dist/components/SmartTextInput/index.mjs +1 -1
  89. package/dist/components/Spinner/index.mjs +1 -1
  90. package/dist/components/Table/index.mjs +1 -1
  91. package/dist/components/TableBox/index.d.mts +1 -1
  92. package/dist/components/TableBox/index.mjs +1 -1
  93. package/dist/components/VersionHistory/index.mjs +1 -1
  94. package/dist/fieldPickerOptions.d.mts +1 -1
  95. package/dist/{filters-ogUUmLEf.d.mts → filters-C8YLLbH3.d.mts} +2 -2
  96. package/dist/filters.d.mts +1 -1
  97. package/dist/{helpers-Dqw5PEva.d.mts → helpers-DvqDI2e5.d.mts} +2 -2
  98. package/dist/helpers.d.mts +1 -1
  99. package/dist/{index-Ck939aXd.d.mts → index-CNDe1Lij.d.mts} +3 -3
  100. package/dist/{inputFields-DVLg_2wz.d.mts → inputFields-BZcm1UV5.d.mts} +4 -4
  101. package/dist/inputFields.d.mts +1 -1
  102. package/dist/patterns/IndexTableLayout/index.mjs +1 -1
  103. package/dist/patterns/LayoutLoadingShimmer/index.mjs +1 -1
  104. package/dist/{types-Bdi8Y7ll.d.mts → types-Ci-KTHfu.d.mts} +3 -3
  105. package/dist/{types-BQP14Fng.d.mts → types-SYxBPX6o.d.mts} +2 -2
  106. package/dist/types5.d.mts +1 -1
  107. package/dist/useColumnConfiguration.d.mts +2 -2
  108. package/dist/useComboboxFooterAction.d.mts +1 -1
  109. package/dist/{useTableColumns-DdU0CLcU.d.mts → useTableColumns-PyxNyTD6.d.mts} +2 -2
  110. package/dist/useTableColumns.d.mts +1 -1
  111. package/dist/useTruncation.d.mts +1 -1
  112. package/llms.txt +2 -1
  113. package/package.json +4 -2
  114. package/skills/ui-authoring/COMPONENTS.md +1 -0
  115. package/skills/ui-authoring/PATTERNS.md +5 -1
  116. package/skills/ui-authoring/SKILL.md +8 -0
  117. package/skills/ui-authoring/STANDARD.md +137 -0
  118. package/skills/ui-authoring/TOKENS.md +3 -1
  119. package/skills/ui-authoring/lanes.json +22 -0
  120. package/dist/TableControls-n16XKO9S.mjs.map +0 -1
@@ -0,0 +1,272 @@
1
+ import { a as styled, r as css } from "../../styledComponentsInterop-NxwFjeA4.mjs";
2
+ import { semanticColor, semanticOnly, semanticTokens } from "../../lib/semanticColor.mjs";
3
+ import { i as Paragraph } from "../../Text-CSwFifQF.mjs";
4
+ import { a as Tooltip } from "../../Tooltip-B-0VRuKT.mjs";
5
+ import { opacityOf, withAlpha } from "../../lib/color.mjs";
6
+ import useControlled from "../../lib/useControlled.mjs";
7
+ import { focusStyle } from "../../mixins/focus.mjs";
8
+ import { n as Stack, t as HStack } from "../../Stack-BkC7FCdF.mjs";
9
+ import { n as useFormField, t as FormControlContext } from "../../useFormField-CbNYbDdp.mjs";
10
+ import { t as Checkbox } from "../../Checkbox-BaJ-dGdX.mjs";
11
+ import { Color, Spacing, Typography } from "@persona/design-tokens";
12
+ import { Children, cloneElement, isValidElement, useContext } from "react";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ //#region components/SelectionCard/SelectionCard.tsx
15
+ const CardRoot = styled.label`
16
+ position: relative;
17
+ display: flex;
18
+ flex-direction: column;
19
+ flex: 1 1 auto;
20
+ width: 100%;
21
+ box-sizing: border-box;
22
+ overflow: hidden;
23
+ cursor: ${({ $disabled }) => $disabled ? "default" : "pointer"};
24
+ pointer-events: ${({ $disabled }) => $disabled ? "none" : "auto"};
25
+ border-radius: ${({ theme }) => theme.card.borderRadius};
26
+ outline: none;
27
+
28
+ /* Keyboard focus only. A click focuses the input too, and should not draw this ring. */
29
+ &:has(:focus-visible) {
30
+ ${focusStyle}
31
+ }
32
+
33
+ border: 1px solid
34
+ ${({ theme, $selected, $disabled }) => {
35
+ if ($disabled) return semanticColor(theme, "InputBorderDisabled", Color.BorderInputDisabled);
36
+ if ($selected) return semanticColor(theme, "BorderAccent", theme.color.primary.brand);
37
+ return semanticColor(theme, "BorderDefault", theme.color.border.input);
38
+ }};
39
+
40
+ background-color: ${({ theme, $selected, $disabled }) => {
41
+ if ($disabled) return semanticColor(theme, "InputSurfaceDisabled", Color.BackgroundInputDisabled);
42
+ if ($selected) {
43
+ const tokens = semanticTokens(theme);
44
+ return tokens ? withAlpha(tokens.SurfaceAccent, tokens.Opacity25) : theme.color.background.highlight;
45
+ }
46
+ return semanticColor(theme, "SurfacePrimary", theme.color.background.primary);
47
+ }};
48
+
49
+ ${({ $disabled, $selected }) => !$disabled && !$selected && css`
50
+ &:hover {
51
+ background-color: ${({ theme }) => semanticColor(theme, "SurfaceHover", Color.BackgroundInteractiveHover)};
52
+ }
53
+ `}
54
+
55
+ ${({ $disabled }) => $disabled && css`
56
+ ${semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)}
57
+ `}
58
+ `;
59
+ const Body = styled.div`
60
+ padding: ${Spacing[4]};
61
+ `;
62
+ const Copy = styled(Stack)`
63
+ flex: 1 1 auto;
64
+ min-width: 0;
65
+ `;
66
+ /** Height of one line of label text. */
67
+ const LABEL_LINE_HEIGHT = Typography.TextMediumBold.lineHeight;
68
+ /** Size of the checkbox and the icon. */
69
+ const CONTROL_SIZE = Spacing[4];
70
+ /**
71
+ * Holds the label. With a checkbox or icon, the label's first line is pulled up to share their
72
+ * 16px height and center line. Only the top moves, so the gap to the description stays the same
73
+ * with or without a checkbox or icon.
74
+ */
75
+ const LabelRow = styled.span`
76
+ display: block;
77
+ ${({ $withControl }) => $withControl && css`
78
+ margin-top: calc((${CONTROL_SIZE} - ${LABEL_LINE_HEIGHT}) / 2);
79
+ `}
80
+ `;
81
+ /** Centers a 16px icon on the checkbox and label center line. */
82
+ const IconSlot = styled.span`
83
+ display: inline-flex;
84
+ flex: 0 0 auto;
85
+ align-items: center;
86
+ justify-content: center;
87
+ align-self: flex-start;
88
+ height: ${CONTROL_SIZE};
89
+ color: ${({ theme }) => semanticColor(theme, "FgPrimary", theme.color.text.primary)};
90
+
91
+ svg {
92
+ width: ${CONTROL_SIZE};
93
+ height: ${CONTROL_SIZE};
94
+ }
95
+ `;
96
+ const Marker = styled.span`
97
+ display: inline-flex;
98
+ flex: 0 0 auto;
99
+ align-items: center;
100
+ height: ${CONTROL_SIZE};
101
+
102
+ /* The card draws the only focus ring and the only disabled fade. */
103
+ && input:focus-visible ~ [aria-hidden] {
104
+ outline: none;
105
+ }
106
+
107
+ && input ~ [aria-hidden] {
108
+ opacity: 1;
109
+ }
110
+ `;
111
+ const NativeRadio = styled.input`
112
+ cursor: inherit;
113
+ position: absolute;
114
+ inset: 0;
115
+ margin: 0;
116
+ opacity: 0;
117
+ border: 0;
118
+ outline: none;
119
+ pointer-events: none;
120
+ `;
121
+ const TooltipTrigger = styled.span`
122
+ display: flex;
123
+ flex-direction: column;
124
+ width: 100%;
125
+ align-self: stretch;
126
+ `;
127
+ const SelectionCard = ({ value, label, description, icon, disabled: disabledProp, disabledReason, name, checked = false, onChange, multiple = false, className }) => {
128
+ const disabled = !!useFormField({ disabled: disabledProp || void 0 }).disabled;
129
+ const card = /* @__PURE__ */ jsxs(CardRoot, {
130
+ className,
131
+ $selected: checked,
132
+ $disabled: disabled,
133
+ children: [/* @__PURE__ */ jsx(Body, { children: /* @__PURE__ */ jsxs(HStack, {
134
+ align: "flex-start",
135
+ spacing: icon ? Spacing[3] : Spacing[2],
136
+ children: [
137
+ multiple && /* @__PURE__ */ jsx(Marker, { children: /* @__PURE__ */ jsx(Checkbox, {
138
+ name,
139
+ value,
140
+ checked,
141
+ disabled,
142
+ onChange: (event) => onChange?.(event.target.checked)
143
+ }) }),
144
+ icon && /* @__PURE__ */ jsx(IconSlot, { children: icon }),
145
+ /* @__PURE__ */ jsxs(Copy, {
146
+ spacing: Spacing[1],
147
+ children: [/* @__PURE__ */ jsx(LabelRow, {
148
+ $withControl: multiple || !!icon,
149
+ children: /* @__PURE__ */ jsx(Paragraph, {
150
+ as: "span",
151
+ size: "md",
152
+ weight: "bold",
153
+ color: disabled ? "disabled" : "primary",
154
+ children: label
155
+ })
156
+ }), description && /* @__PURE__ */ jsx(Paragraph, {
157
+ as: "span",
158
+ size: "md",
159
+ color: disabled ? "disabled" : checked ? "primary" : "secondary",
160
+ children: description
161
+ })]
162
+ })
163
+ ]
164
+ }) }), !multiple && /* @__PURE__ */ jsx(NativeRadio, {
165
+ type: "radio",
166
+ name,
167
+ value,
168
+ checked,
169
+ disabled,
170
+ onChange: () => onChange?.(true)
171
+ })]
172
+ });
173
+ if (disabled && disabledReason) return /* @__PURE__ */ jsx(Tooltip, {
174
+ trigger: /* @__PURE__ */ jsx(TooltipTrigger, { children: card }),
175
+ children: disabledReason
176
+ });
177
+ return card;
178
+ };
179
+ //#endregion
180
+ //#region components/SelectionCard/SelectionCardGroup.tsx
181
+ const selectionCards = (children) => Children.toArray(children).filter((child) => isValidElement(child) && child.type === SelectionCard);
182
+ const firstSelectableValue = (children) => selectionCards(children).find((card) => !card.props.disabled)?.props.value;
183
+ const groupLayout = (children, stack) => {
184
+ const inline = selectionCards(children).length === 2 && !stack;
185
+ return {
186
+ $inline: inline,
187
+ direction: inline ? "horizontal" : "vertical",
188
+ equal: inline,
189
+ align: inline ? "stretch" : void 0
190
+ };
191
+ };
192
+ const Group = styled(Stack)`
193
+ ${({ $inline }) => $inline && css`
194
+ > * {
195
+ width: auto;
196
+ min-width: 0;
197
+ align-self: stretch;
198
+ }
199
+ `}
200
+ `;
201
+ const renderCards = (children, getProps) => Children.map(children, (child) => {
202
+ if (!isValidElement(child) || child.type !== SelectionCard) return child;
203
+ const card = child;
204
+ return cloneElement(card, getProps(card.props));
205
+ });
206
+ const SingleGroup = ({ name, className, stack, children, value: valueProp, defaultValue, onChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, "aria-required": ariaRequired }) => {
207
+ const field = useContext(FormControlContext);
208
+ const [value, setValue] = useControlled({
209
+ controlledValue: valueProp,
210
+ default: defaultValue ?? (field.disabled ? void 0 : firstSelectableValue(children))
211
+ });
212
+ return /* @__PURE__ */ jsx(Group, {
213
+ ...groupLayout(children, stack),
214
+ className,
215
+ spacing: Spacing[2],
216
+ role: "radiogroup",
217
+ "aria-label": ariaLabel,
218
+ "aria-labelledby": ariaLabelledby,
219
+ "aria-required": ariaRequired,
220
+ children: renderCards(children, (card) => ({
221
+ name,
222
+ multiple: false,
223
+ checked: card.value === value,
224
+ onChange: () => {
225
+ if (field.disabled || card.disabled) return;
226
+ setValue(card.value);
227
+ onChange?.(card.value);
228
+ }
229
+ }))
230
+ });
231
+ };
232
+ const MultipleGroup = ({ name, className, stack, children, value: valueProp, defaultValue, onChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby }) => {
233
+ const field = useContext(FormControlContext);
234
+ const [value, setValue] = useControlled({
235
+ controlledValue: valueProp,
236
+ default: defaultValue ?? []
237
+ });
238
+ const selected = value ?? [];
239
+ return /* @__PURE__ */ jsx(Group, {
240
+ ...groupLayout(children, stack),
241
+ className,
242
+ spacing: Spacing[2],
243
+ role: "group",
244
+ "aria-label": ariaLabel,
245
+ "aria-labelledby": ariaLabelledby,
246
+ children: renderCards(children, (card) => ({
247
+ name,
248
+ multiple: true,
249
+ checked: selected.includes(card.value),
250
+ onChange: (checked) => {
251
+ if (field.disabled || card.disabled) return;
252
+ const next = checked ? selected.includes(card.value) ? selected : [...selected, card.value] : selected.filter((item) => item !== card.value);
253
+ setValue(next);
254
+ onChange?.(next);
255
+ }
256
+ }))
257
+ });
258
+ };
259
+ const SelectionCardGroup = (props) => {
260
+ const field = useContext(FormControlContext);
261
+ return /* @__PURE__ */ jsx(FormControlContext.Provider, {
262
+ value: {
263
+ ...field,
264
+ inputId: void 0
265
+ },
266
+ children: props.multiple ? /* @__PURE__ */ jsx(MultipleGroup, { ...props }) : /* @__PURE__ */ jsx(SingleGroup, { ...props })
267
+ });
268
+ };
269
+ //#endregion
270
+ export { SelectionCard, SelectionCard as default, SelectionCardGroup };
271
+
272
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../components/SelectionCard/SelectionCard.tsx","../../../components/SelectionCard/SelectionCardGroup.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Checkbox from '@persona/design-system/components/Checkbox';\nimport { HStack, Stack } from '@persona/design-system/components/Stack';\nimport { Paragraph } from '@persona/design-system/components/Text';\nimport { Tooltip } from '@persona/design-system/components/Tooltip';\nimport { focusStyle } from '@persona/design-system/mixins/focus';\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport { opacityOf, withAlpha } from 'design-system/lib/color';\nimport { semanticColor, semanticOnly, semanticTokens } from 'design-system/lib/semanticColor';\n\nexport interface SelectionCardProps {\n /** Value submitted with the group when this card is selected. */\n value: string;\n /** Required visible name. Left-aligned with `description`. */\n label: string;\n /** Optional supporting copy under the label. Omitted when not passed. */\n description?: string;\n /**\n * Optional icon to the left of the label. Leave it off when it does not add\n * meaning, including in multiple mode.\n */\n icon?: ReactElement;\n disabled?: boolean;\n /** Tooltip shown on hover only while `disabled` is set. */\n disabledReason?: string;\n /** Injected by `SelectionCardGroup`. */\n name?: string;\n /** Injected by `SelectionCardGroup`. */\n checked?: boolean;\n /** Injected by `SelectionCardGroup`. */\n onChange?: (checked: boolean) => void;\n /** Injected by `SelectionCardGroup`. */\n multiple?: boolean;\n /** Layout hook for this card. */\n className?: string;\n}\n\nconst CardRoot = styled.label<{ $selected: boolean; $disabled: boolean }>`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n box-sizing: border-box;\n overflow: hidden;\n cursor: ${({ $disabled }) => ($disabled ? 'default' : 'pointer')};\n pointer-events: ${({ $disabled }) => ($disabled ? 'none' : 'auto')};\n border-radius: ${({ theme }) => theme.card.borderRadius};\n outline: none;\n\n /* Keyboard focus only. A click focuses the input too, and should not draw this ring. */\n &:has(:focus-visible) {\n ${focusStyle}\n }\n\n border: 1px solid\n ${({ theme, $selected, $disabled }) => {\n if ($disabled) {\n return semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled);\n }\n if ($selected) {\n return semanticColor(theme, 'BorderAccent', theme.color.primary.brand);\n }\n return semanticColor(theme, 'BorderDefault', theme.color.border.input);\n }};\n\n background-color: ${({ theme, $selected, $disabled }) => {\n if ($disabled) {\n return semanticColor(theme, 'InputSurfaceDisabled', Color.BackgroundInputDisabled);\n }\n if ($selected) {\n const tokens = semanticTokens(theme);\n return tokens\n ? withAlpha(tokens.SurfaceAccent, tokens.Opacity25)\n : theme.color.background.highlight;\n }\n return semanticColor(theme, 'SurfacePrimary', theme.color.background.primary);\n }};\n\n ${({ $disabled, $selected }) =>\n !$disabled &&\n !$selected &&\n css`\n &:hover {\n background-color: ${({ theme }) =>\n semanticColor(theme, 'SurfaceHover', Color.BackgroundInteractiveHover)};\n }\n `}\n\n ${({ $disabled }) =>\n $disabled &&\n css`\n ${semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)}\n `}\n`;\n\nconst Body = styled.div`\n padding: ${Spacing[4]};\n`;\n\nconst Copy = styled(Stack)`\n flex: 1 1 auto;\n min-width: 0;\n`;\n\n/** Height of one line of label text. */\nconst LABEL_LINE_HEIGHT = Typography.TextMediumBold.lineHeight;\n\n/** Size of the checkbox and the icon. */\nconst CONTROL_SIZE = Spacing[4];\n\n/**\n * Holds the label. With a checkbox or icon, the label's first line is pulled up to share their\n * 16px height and center line. Only the top moves, so the gap to the description stays the same\n * with or without a checkbox or icon.\n */\nconst LabelRow = styled.span<{ $withControl: boolean }>`\n display: block;\n ${({ $withControl }) =>\n $withControl &&\n css`\n margin-top: calc((${CONTROL_SIZE} - ${LABEL_LINE_HEIGHT}) / 2);\n `}\n`;\n\n/** Centers a 16px icon on the checkbox and label center line. */\nconst IconSlot = styled.span`\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n align-self: flex-start;\n height: ${CONTROL_SIZE};\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', theme.color.text.primary)};\n\n svg {\n width: ${CONTROL_SIZE};\n height: ${CONTROL_SIZE};\n }\n`;\nconst Marker = styled.span`\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n height: ${CONTROL_SIZE};\n\n /* The card draws the only focus ring and the only disabled fade. */\n && input:focus-visible ~ [aria-hidden] {\n outline: none;\n }\n\n && input ~ [aria-hidden] {\n opacity: 1;\n }\n`;\n\nconst NativeRadio = styled.input`\n cursor: inherit;\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n border: 0;\n outline: none;\n pointer-events: none;\n`;\n\nconst TooltipTrigger = styled.span`\n display: flex;\n flex-direction: column;\n width: 100%;\n align-self: stretch;\n`;\n\nexport const SelectionCard = ({\n value,\n label,\n description,\n icon,\n disabled: disabledProp,\n disabledReason,\n name,\n checked = false,\n onChange,\n multiple = false,\n className,\n}: SelectionCardProps) => {\n const field = useFormField({ disabled: disabledProp || undefined });\n const disabled = !!field.disabled;\n const card = (\n <CardRoot className={className} $selected={checked} $disabled={disabled}>\n <Body>\n <HStack align='flex-start' spacing={icon ? Spacing[3] : Spacing[2]}>\n {multiple && (\n <Marker>\n <Checkbox\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={(event) => onChange?.(event.target.checked)}\n />\n </Marker>\n )}\n {icon && <IconSlot>{icon}</IconSlot>}\n <Copy spacing={Spacing[1]}>\n <LabelRow $withControl={multiple || !!icon}>\n <Paragraph\n as='span'\n size='md'\n weight='bold'\n color={disabled ? 'disabled' : 'primary'}\n >\n {label}\n </Paragraph>\n </LabelRow>\n {description && (\n <Paragraph\n as='span'\n size='md'\n color={disabled ? 'disabled' : checked ? 'primary' : 'secondary'}\n >\n {description}\n </Paragraph>\n )}\n </Copy>\n </HStack>\n </Body>\n {!multiple && (\n <NativeRadio\n type='radio'\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={() => onChange?.(true)}\n />\n )}\n </CardRoot>\n );\n\n if (disabled && disabledReason) {\n return <Tooltip trigger={<TooltipTrigger>{card}</TooltipTrigger>}>{disabledReason}</Tooltip>;\n }\n\n return card;\n};\n\nexport default SelectionCard;\n","import {\n Children,\n cloneElement,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useContext,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Stack from '@persona/design-system/components/Stack';\nimport { Spacing } from '@persona/design-tokens';\nimport { FormControlContext } from 'design-system/components/FormControl/useFormField';\nimport useControlled from 'design-system/lib/useControlled';\n\nimport SelectionCard, { type SelectionCardProps } from './SelectionCard';\n\ninterface SelectionCardGroupBaseProps {\n /** Shared input name. Radios in a single group arrow-key together. */\n name?: string;\n /** Layout hook for the group. Not forwarded onto each card. */\n className?: string;\n /** Place two cards in a column. Two cards sit side by side when this is omitted. Three or more always stack. */\n stack?: boolean;\n /** Accessible name for the group. */\n 'aria-label'?: string;\n /** Id of the element that names the group, such as a field label. */\n 'aria-labelledby'?: string;\n children: ReactNode;\n}\n\nexport interface SelectionCardGroupSingleProps extends SelectionCardGroupBaseProps {\n /** One card may be selected. Cards render no radio mark. */\n multiple?: false;\n 'aria-required'?: boolean;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n}\n\nexport interface SelectionCardGroupMultipleProps extends SelectionCardGroupBaseProps {\n /** Several cards may be selected. Each card shows a checkbox. */\n multiple: true;\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n}\n\nexport type SelectionCardGroupProps =\n | SelectionCardGroupSingleProps\n | SelectionCardGroupMultipleProps;\n\nconst selectionCards = (children: ReactNode) =>\n Children.toArray(children).filter(\n (child): child is ReactElement<SelectionCardProps> =>\n isValidElement(child) && child.type === SelectionCard,\n );\n\nconst firstSelectableValue = (children: ReactNode) =>\n selectionCards(children).find((card) => !card.props.disabled)?.props.value;\n\nconst groupLayout = (children: ReactNode, stack?: boolean) => {\n const inline = selectionCards(children).length === 2 && !stack;\n return {\n $inline: inline,\n direction: inline ? ('horizontal' as const) : ('vertical' as const),\n equal: inline,\n align: inline ? ('stretch' as const) : undefined,\n };\n};\n\nconst Group = styled(Stack)<{ $inline: boolean }>`\n ${({ $inline }) =>\n $inline &&\n css`\n > * {\n width: auto;\n min-width: 0;\n align-self: stretch;\n }\n `}\n`;\nconst renderCards = (\n children: ReactNode,\n getProps: (card: SelectionCardProps) => Partial<SelectionCardProps>,\n) =>\n Children.map(children, (child) => {\n if (!isValidElement(child) || child.type !== SelectionCard) {\n return child;\n }\n const card = child as ReactElement<SelectionCardProps>;\n return cloneElement(card, getProps(card.props));\n });\n\nconst SingleGroup = ({\n name,\n className,\n stack,\n children,\n value: valueProp,\n defaultValue,\n onChange,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-required': ariaRequired,\n}: SelectionCardGroupSingleProps) => {\n const field = useContext(FormControlContext);\n const [value, setValue] = useControlled({\n controlledValue: valueProp,\n default: defaultValue ?? (field.disabled ? undefined : firstSelectableValue(children)),\n });\n\n return (\n <Group\n {...groupLayout(children, stack)}\n className={className}\n spacing={Spacing[2]}\n role='radiogroup'\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-required={ariaRequired}\n >\n {renderCards(children, (card) => ({\n name,\n multiple: false,\n checked: card.value === value,\n onChange: () => {\n if (field.disabled || card.disabled) {\n return;\n }\n setValue(card.value);\n onChange?.(card.value);\n },\n }))}\n </Group>\n );\n};\n\nconst MultipleGroup = ({\n name,\n className,\n stack,\n children,\n value: valueProp,\n defaultValue,\n onChange,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n}: SelectionCardGroupMultipleProps) => {\n const field = useContext(FormControlContext);\n const [value, setValue] = useControlled({\n controlledValue: valueProp,\n default: defaultValue ?? [],\n });\n const selected = value ?? [];\n\n return (\n <Group\n {...groupLayout(children, stack)}\n className={className}\n spacing={Spacing[2]}\n role='group'\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n >\n {renderCards(children, (card) => ({\n name,\n multiple: true,\n checked: selected.includes(card.value),\n onChange: (checked: boolean) => {\n if (field.disabled || card.disabled) {\n return;\n }\n const next = checked\n ? selected.includes(card.value)\n ? selected\n : [...selected, card.value]\n : selected.filter((item) => item !== card.value);\n setValue(next);\n onChange?.(next);\n },\n }))}\n </Group>\n );\n};\n\nexport const SelectionCardGroup = (props: SelectionCardGroupProps) => {\n const field = useContext(FormControlContext);\n /* Each card's checkbox would otherwise take the enclosing field's shared input id. */\n return (\n <FormControlContext.Provider value={{ ...field, inputId: undefined }}>\n {props.multiple ? <MultipleGroup {...props} /> : <SingleGroup {...props} />}\n </FormControlContext.Provider>\n );\n};\n\nexport default SelectionCardGroup;\n"],"mappings":"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"}
@@ -16,7 +16,7 @@ import { n as Button } from "../../IconButton-HWx5Hlmi.mjs";
16
16
  import { n as useFormField } from "../../useFormField-CbNYbDdp.mjs";
17
17
  import Input_default from "../Input/index.mjs";
18
18
  import { n as ErrorText } from "../../FormControl-C4CiA0H-.mjs";
19
- import { m as FormField, n as TableBoxField, p as splitOutFormFieldProps } from "../../FormField-C4B2qFgh.mjs";
19
+ import { m as FormField, n as TableBoxField, p as splitOutFormFieldProps } from "../../FormField-C0cd1zVd.mjs";
20
20
  import PillType from "./PillType.mjs";
21
21
  import { ErrorMessageByKind, NodeType, isASTChainNode, isASTContainerNode, isMethodChainNode } from "./parser/smart-text/types.mjs";
22
22
  import { parse as peg$parse } from "./parser/smart-text/parser.mjs";
@@ -1,2 +1,2 @@
1
- import { t as Spinner } from "../../Spinner-uVZyOh1T.mjs";
1
+ import { t as Spinner } from "../../Spinner-7Camx1vs.mjs";
2
2
  export { Spinner, Spinner as default };
@@ -1,2 +1,2 @@
1
- import { a as StickyTH, c as TableCellTitle, d as TableTR, f as TableTH, h as Table, i as StickyTD, l as TableIconTD, m as TableHeaderCell, n as TableBody, o as TableActionTD, p as TableRow, r as TableHead, s as TableCell, t as TableLayout, u as TableTD } from "../../Table--o4ZLRbb.mjs";
1
+ import { a as StickyTH, c as TableCellTitle, d as TableTR, f as TableTH, h as Table, i as StickyTD, l as TableIconTD, m as TableHeaderCell, n as TableBody, o as TableActionTD, p as TableRow, r as TableHead, s as TableCell, t as TableLayout, u as TableTD } from "../../Table-BIDaC0uS.mjs";
2
2
  export { StickyTD, StickyTH, Table, Table as default, TableActionTD, TableBody, TableCell, TableCellTitle, TableHead, TableHeaderCell, TableIconTD, TableLayout, TableRow, TableTD, TableTH, TableTR };
@@ -1,3 +1,3 @@
1
1
  import { t as DragDirection } from "../../useTableBoxDragAndDrop-CKPIY98e.mjs";
2
- import { a as TableBox, o as TableBoxContext, r as InlineEditConfig, s as TableBoxProps } from "../../TableBoxCell-okcOQ5Ec.mjs";
2
+ import { a as TableBox, o as TableBoxContext, r as InlineEditConfig, s as TableBoxProps } from "../../TableBoxCell-v_ag22E0.mjs";
3
3
  export { DragDirection, InlineEditConfig, TableBoxContext, TableBoxProps, TableBox as default };
@@ -1,2 +1,2 @@
1
- import { n as TableBoxContext, t as TableBox } from "../../TableBox-3qunC9Nl.mjs";
1
+ import { n as TableBoxContext, t as TableBox } from "../../TableBox-Bn_XZEYd.mjs";
2
2
  export { TableBoxContext, TableBox as default };
@@ -6,7 +6,7 @@ import { semanticScrollbar } from "../../mixins/scrollbar.mjs";
6
6
  import { n as Stack, t as HStack } from "../../Stack-BkC7FCdF.mjs";
7
7
  import { n as Button, t as IconButton } from "../../IconButton-HWx5Hlmi.mjs";
8
8
  import { n as DropdownMenu_default } from "../../DropdownMenu-CedsmO5h.mjs";
9
- import { t as Spinner } from "../../Spinner-uVZyOh1T.mjs";
9
+ import { t as Spinner } from "../../Spinner-7Camx1vs.mjs";
10
10
  import { i as Modal_default } from "../../Modal-kjUptzg1.mjs";
11
11
  import { t as TextAreaWithStyle } from "../../TextArea-CaIEBz8d.mjs";
12
12
  import { n as StatusIndicator } from "../../StatusIndicator-Bunn9YLV.mjs";
@@ -1,4 +1,4 @@
1
- import { o as ComboboxOptionsOrGroups } from "./ComboboxBase-B7ZcqU9p.mjs";
1
+ import { o as ComboboxOptionsOrGroups } from "./ComboboxBase-BMBdtP2Z.mjs";
2
2
  import { t as FieldRegistry } from "./FieldRegistry-B5E-GN91.mjs";
3
3
 
4
4
  //#region components/DataTable/TableControls/FiltersV2/fieldPickerOptions.d.ts
@@ -1,4 +1,4 @@
1
- import { i as BaseFilterConfig, l as FilterTypeDefinition, t as ActiveFilter, u as FilterTypeResolver } from "./types-Bdi8Y7ll.mjs";
1
+ import { i as BaseFilterConfig, l as FilterTypeDefinition, t as ActiveFilter, u as FilterTypeResolver } from "./types-Ci-KTHfu.mjs";
2
2
  import { ComponentProps } from "react";
3
3
  import * as _$styled_components0 from "styled-components";
4
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
@@ -19,4 +19,4 @@ declare const Filters: <TFilter extends BaseFilterConfig>({
19
19
  }) => _$react_jsx_runtime0.JSX.Element;
20
20
  //#endregion
21
21
  export { resolveFilterTypeDefinition as a, isFilterActive as i, FiltersContainer as n, synchronizeActiveFilters as o, getActiveFilters as r, Filters as t };
22
- //# sourceMappingURL=filters-ogUUmLEf.d.mts.map
22
+ //# sourceMappingURL=filters-C8YLLbH3.d.mts.map
@@ -1,2 +1,2 @@
1
- import { a as resolveFilterTypeDefinition, i as isFilterActive, n as FiltersContainer, o as synchronizeActiveFilters, r as getActiveFilters, t as Filters } from "./filters-ogUUmLEf.mjs";
1
+ import { a as resolveFilterTypeDefinition, i as isFilterActive, n as FiltersContainer, o as synchronizeActiveFilters, r as getActiveFilters, t as Filters } from "./filters-C8YLLbH3.mjs";
2
2
  export { Filters, FiltersContainer, getActiveFilters, isFilterActive, resolveFilterTypeDefinition, synchronizeActiveFilters };
@@ -1,6 +1,6 @@
1
1
  import { n as CheckboxProps } from "./Checkbox-B2MZShdu.mjs";
2
2
  import { i as CommonStrings } from "./strings-FWNWdSn1.mjs";
3
- import { S as RenderValueStickerFormatConfig, b as DatetimeConfig, d as DataTableColumnImageFormat, h as DataTableColumnStringFormat, l as DataTableColumnFormat, p as DataTableColumnPiiFormat, y as DateConfig } from "./types-BQP14Fng.mjs";
3
+ import { S as RenderValueStickerFormatConfig, b as DatetimeConfig, d as DataTableColumnImageFormat, h as DataTableColumnStringFormat, l as DataTableColumnFormat, p as DataTableColumnPiiFormat, y as DateConfig } from "./types-SYxBPX6o.mjs";
4
4
  import { ReactNode } from "react";
5
5
 
6
6
  //#region components/DataTable/helpers.d.ts
@@ -87,4 +87,4 @@ declare const renderAsLightweightImage: (value: unknown, config?: DataTableColum
87
87
  declare const renderAsPDSFormat: <TData = unknown>(value: unknown, format?: DataTableColumnFormat<TData>, row?: TData, options?: PDSFormatOptions) => string | ReactNode;
88
88
  //#endregion
89
89
  export { renderAsDate as a, renderAsNumber as c, renderAsSticker as d, renderAsString as f, renderAsCopyableString as i, renderAsPDSFormat as l, renderAsCheckbox as n, renderAsDatetime as o, renderAsURL as p, renderAsCheckboxHeader as r, renderAsLightweightImage as s, PDSFormatOptions as t, renderAsPii as u };
90
- //# sourceMappingURL=helpers-Dqw5PEva.d.mts.map
90
+ //# sourceMappingURL=helpers-DvqDI2e5.d.mts.map
@@ -1,2 +1,2 @@
1
- import { a as renderAsDate, c as renderAsNumber, d as renderAsSticker, f as renderAsString, i as renderAsCopyableString, l as renderAsPDSFormat, n as renderAsCheckbox, o as renderAsDatetime, p as renderAsURL, r as renderAsCheckboxHeader, s as renderAsLightweightImage, t as PDSFormatOptions, u as renderAsPii } from "./helpers-Dqw5PEva.mjs";
1
+ import { a as renderAsDate, c as renderAsNumber, d as renderAsSticker, f as renderAsString, i as renderAsCopyableString, l as renderAsPDSFormat, n as renderAsCheckbox, o as renderAsDatetime, p as renderAsURL, r as renderAsCheckboxHeader, s as renderAsLightweightImage, t as PDSFormatOptions, u as renderAsPii } from "./helpers-DvqDI2e5.mjs";
2
2
  export { PDSFormatOptions, renderAsCheckbox, renderAsCheckboxHeader, renderAsCopyableString, renderAsDate, renderAsDatetime, renderAsLightweightImage, renderAsNumber, renderAsPDSFormat, renderAsPii, renderAsSticker, renderAsString, renderAsURL };
@@ -1,5 +1,5 @@
1
- import { n as ListBoxItemProps, r as ListBoxProps$1 } from "./ListBox-DIk8suJM.mjs";
2
- import { n as LogicRowProps } from "./LogicRow-uxpe1vZ1.mjs";
1
+ import { n as ListBoxItemProps, r as ListBoxProps$1 } from "./ListBox-cH0dfeLN.mjs";
2
+ import { n as LogicRowProps } from "./LogicRow-CaxsteGU.mjs";
3
3
  import * as _$react from "react";
4
4
  import * as _$react_aria_components0 from "react-aria-components";
5
5
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
@@ -52,4 +52,4 @@ declare const ListBox: {
52
52
  };
53
53
  //#endregion
54
54
  export { ListBox as t };
55
- //# sourceMappingURL=index-Ck939aXd.d.mts.map
55
+ //# sourceMappingURL=index-CNDe1Lij.d.mts.map
@@ -1,11 +1,11 @@
1
1
  import { n as CheckboxProps } from "./Checkbox-B2MZShdu.mjs";
2
- import { n as ComboboxMultiSelectProps } from "./ComboboxMultiSelect-BkdRrH6K.mjs";
3
- import { n as ComboboxSingleSelectProps } from "./ComboboxSingleSelect-DIBRZmvS.mjs";
2
+ import { n as ComboboxMultiSelectProps } from "./ComboboxMultiSelect-DY5bAep9.mjs";
3
+ import { n as ComboboxSingleSelectProps } from "./ComboboxSingleSelect-1NglA-u2.mjs";
4
4
  import { n as FormFieldBaseProps } from "./FormField-mLbXDJ9B.mjs";
5
5
  import { a as InputProps } from "./Input-Bg4bi6VZ.mjs";
6
6
  import { n as RadioGroupProps } from "./RadioGroup-BxEmipHa.mjs";
7
7
  import { i as SegmentedControlProps } from "./SegmentedControl-xjU-2IsJ.mjs";
8
- import { i as SelectProps } from "./Select-CsxK6A5m.mjs";
8
+ import { i as SelectProps } from "./Select-CG_Xkx0m.mjs";
9
9
  import { t as TextAreaProps } from "./TextArea-DFn4XuG-.mjs";
10
10
  import { n as ToggleProps } from "./Toggle-xtPgGaGD.mjs";
11
11
  import * as _$react from "react";
@@ -68,4 +68,4 @@ type ComboboxMultiSelectFieldProps<T = string> = ImplementsFormField & ComboboxM
68
68
  declare const ComboboxField: (props: ComboboxSingleSelectFieldProps | ComboboxMultiSelectFieldProps) => _$react_jsx_runtime0.JSX.Element;
69
69
  //#endregion
70
70
  export { ToggleField as _, ComboboxSingleSelectFieldProps as a, RadioGroupFieldProps as c, SelectField as d, SelectFieldProps as f, TextFieldProps as g, TextField as h, ComboboxMultiSelectFieldProps as i, SegmentedControlField as l, TextAreaFieldProps as m, CheckboxFieldProps as n, ImplementsFormField as o, TextAreaField as p, ComboboxField as r, RadioGroupField as s, CheckboxField as t, SegmentedControlFieldProps as u, ToggleFieldProps as v, splitOutFormFieldProps as y };
71
- //# sourceMappingURL=inputFields-DVLg_2wz.d.mts.map
71
+ //# sourceMappingURL=inputFields-BZcm1UV5.d.mts.map
@@ -1,2 +1,2 @@
1
- import { _ as ToggleField, a as ComboboxSingleSelectFieldProps, c as RadioGroupFieldProps, d as SelectField, f as SelectFieldProps, g as TextFieldProps, h as TextField, i as ComboboxMultiSelectFieldProps, l as SegmentedControlField, m as TextAreaFieldProps, n as CheckboxFieldProps, o as ImplementsFormField, p as TextAreaField, r as ComboboxField, s as RadioGroupField, t as CheckboxField, u as SegmentedControlFieldProps, v as ToggleFieldProps, y as splitOutFormFieldProps } from "./inputFields-DVLg_2wz.mjs";
1
+ import { _ as ToggleField, a as ComboboxSingleSelectFieldProps, c as RadioGroupFieldProps, d as SelectField, f as SelectFieldProps, g as TextFieldProps, h as TextField, i as ComboboxMultiSelectFieldProps, l as SegmentedControlField, m as TextAreaFieldProps, n as CheckboxFieldProps, o as ImplementsFormField, p as TextAreaField, r as ComboboxField, s as RadioGroupField, t as CheckboxField, u as SegmentedControlFieldProps, v as ToggleFieldProps, y as splitOutFormFieldProps } from "./inputFields-BZcm1UV5.mjs";
2
2
  export { CheckboxField, CheckboxFieldProps, ComboboxField, ComboboxMultiSelectFieldProps, ComboboxSingleSelectFieldProps, ImplementsFormField, RadioGroupField, RadioGroupFieldProps, SegmentedControlField, SegmentedControlFieldProps, SelectField, SelectFieldProps, TextAreaField, TextAreaFieldProps, TextField, TextFieldProps, ToggleField, ToggleFieldProps, splitOutFormFieldProps };
@@ -1,5 +1,5 @@
1
1
  import { t as Card_default } from "../../Card-BXNxWX5C.mjs";
2
- import { t as DataTable } from "../../DataTable-BoAAKhVH.mjs";
2
+ import { t as DataTable } from "../../DataTable-DQ8axNfo.mjs";
3
3
  import { t as PageHeader } from "../../PageHeader-DJF7nxgN.mjs";
4
4
  import { a as Section, i as Container } from "../../PageLayout-fXJW7daI.mjs";
5
5
  import { useMemo } from "react";
@@ -2,7 +2,7 @@ import { a as styled } from "../../styledComponentsInterop-NxwFjeA4.mjs";
2
2
  import { n as Stack, t as HStack } from "../../Stack-BkC7FCdF.mjs";
3
3
  import { t as LoadingShimmer } from "../../LoadingShimmer-Bqjdut7i.mjs";
4
4
  import { t as Card_default } from "../../CardV2-Dp4eHSE-.mjs";
5
- import { h as Table, m as TableHeaderCell, n as TableBody, p as TableRow, r as TableHead, s as TableCell } from "../../Table--o4ZLRbb.mjs";
5
+ import { h as Table, m as TableHeaderCell, n as TableBody, p as TableRow, r as TableHead, s as TableCell } from "../../Table-BIDaC0uS.mjs";
6
6
  import { n as PageHeaderContainer } from "../../PageHeader-DJF7nxgN.mjs";
7
7
  import { Color, Spacing } from "@persona/design-tokens";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { n as ComboboxProps } from "./Combobox-Bm2eSg56.mjs";
1
+ import { n as ComboboxProps } from "./Combobox-DTeu9_RR.mjs";
2
2
  import { n as DateRange } from "./DateRangePicker-CLuBLF1q.mjs";
3
3
  import { ReactNode } from "react";
4
4
  import { DateValue } from "@internationalized/date";
@@ -67,7 +67,7 @@ interface DateRangeFilterConfig extends BaseFilterConfig {
67
67
  }
68
68
  interface InputFilterConfig extends BaseFilterConfig {
69
69
  type: 'input';
70
- value: string;
70
+ value?: string;
71
71
  onChange: (value: string) => void;
72
72
  onDelete?: () => void;
73
73
  }
@@ -92,4 +92,4 @@ interface FilterTypeDefinition<TFilter extends BaseFilterConfig = FilterConfig>
92
92
  type FilterTypeResolver<TFilter extends BaseFilterConfig = FilterConfig> = (config: TFilter) => FilterTypeDefinition<TFilter> | undefined;
93
93
  //#endregion
94
94
  export { ComboboxFilterConfig as a, FilterRenderOptions as c, InputFilterConfig as d, MultiSelectFilterConfig as f, BaseFilterConfig as i, FilterTypeDefinition as l, AttributeColumn as n, DateRangeFilterConfig as o, SelectFilterConfig as p, BaseActiveFilter as r, FilterConfig as s, ActiveFilter as t, FilterTypeResolver as u };
95
- //# sourceMappingURL=types-Bdi8Y7ll.d.mts.map
95
+ //# sourceMappingURL=types-Ci-KTHfu.d.mts.map
@@ -1,4 +1,4 @@
1
- import { l as MenuItemProps } from "./Menu-CrThaUX2.mjs";
1
+ import { l as MenuItemProps } from "./Menu-5VknNr1T.mjs";
2
2
  import { o as StickerProps } from "./Sticker-CsUSNIH-.mjs";
3
3
  import { ReactNode } from "react";
4
4
  import { Column, DeepKeys, FilterFnOption, Header, RowData, SortingState, Table } from "@tanstack/react-table";
@@ -177,4 +177,4 @@ type BulkAction = {
177
177
  };
178
178
  //#endregion
179
179
  export { RowAction as C, RowDataWithTourTarget as D, RowDataWithSubrowsToAlwaysShowIds as E, SortProps as O, RenderValueStickerFormatConfig as S, RowDataWithSubrows as T, DataTableColumns as _, DataTableColumnBaseFormat as a, DatetimeConfig as b, DataTableColumnDatetimeFormat as c, DataTableColumnImageFormat as d, DataTableColumnNumberFormat as f, DataTableColumnURLFormat as g, DataTableColumnStringFormat as h, ColumnConfig as i, StickerMapping as k, DataTableColumnFormat as l, DataTableColumnStickerFormat as m, ClientFilterConfig as n, DataTableColumnCheckboxFormat as o, DataTableColumnPiiFormat as p, ClientFilterType as r, DataTableColumnDateFormat as s, BulkAction as t, DataTableColumnIDFormat as u, DataTableVariables as v, RowDataWithDetails as w, HeadlessFilterConfig as x, DateConfig as y };
180
- //# sourceMappingURL=types-BQP14Fng.d.mts.map
180
+ //# sourceMappingURL=types-SYxBPX6o.d.mts.map
package/dist/types5.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as ComboboxFilterConfig, c as FilterRenderOptions, d as InputFilterConfig, f as MultiSelectFilterConfig, i as BaseFilterConfig, l as FilterTypeDefinition, n as AttributeColumn, o as DateRangeFilterConfig, p as SelectFilterConfig, r as BaseActiveFilter, s as FilterConfig, t as ActiveFilter, u as FilterTypeResolver } from "./types-Bdi8Y7ll.mjs";
1
+ import { a as ComboboxFilterConfig, c as FilterRenderOptions, d as InputFilterConfig, f as MultiSelectFilterConfig, i as BaseFilterConfig, l as FilterTypeDefinition, n as AttributeColumn, o as DateRangeFilterConfig, p as SelectFilterConfig, r as BaseActiveFilter, s as FilterConfig, t as ActiveFilter, u as FilterTypeResolver } from "./types-Ci-KTHfu.mjs";
2
2
  export { ActiveFilter, AttributeColumn, BaseActiveFilter, BaseFilterConfig, ComboboxFilterConfig, DateRangeFilterConfig, FilterConfig, FilterRenderOptions, FilterTypeDefinition, FilterTypeResolver, InputFilterConfig, MultiSelectFilterConfig, SelectFilterConfig };
@@ -1,5 +1,5 @@
1
- import { i as TableViewConfigurationProps } from "./TableViewConfigurationDropdown-CvN7tE98.mjs";
2
- import { i as ColumnConfig } from "./types-BQP14Fng.mjs";
1
+ import { i as TableViewConfigurationProps } from "./TableViewConfigurationDropdown-Gut16-vY.mjs";
2
+ import { i as ColumnConfig } from "./types-SYxBPX6o.mjs";
3
3
  import { RowData } from "@tanstack/react-table";
4
4
 
5
5
  //#region patterns/IndexTableLayout/useColumnConfiguration.d.ts
@@ -1,4 +1,4 @@
1
- import { p as FooterAction } from "./ComboboxBase-B7ZcqU9p.mjs";
1
+ import { p as FooterAction } from "./ComboboxBase-BMBdtP2Z.mjs";
2
2
  import { KeyboardEvent } from "react";
3
3
 
4
4
  //#region components/Combobox/useComboboxFooterAction.d.ts
@@ -1,4 +1,4 @@
1
- import { C as RowAction, O as SortProps, _ as DataTableColumns, l as DataTableColumnFormat } from "./types-BQP14Fng.mjs";
1
+ import { C as RowAction, O as SortProps, _ as DataTableColumns, l as DataTableColumnFormat } from "./types-SYxBPX6o.mjs";
2
2
  import { ColumnDef, Row, RowData, Table } from "@tanstack/react-table";
3
3
 
4
4
  //#region components/DataTable/useTableColumns.d.ts
@@ -69,4 +69,4 @@ declare function useTableColumns<TData extends RowData, TFormat extends {
69
69
  }[]];
70
70
  //#endregion
71
71
  export { UseTableColumnsParams as n, useTableColumns as r, RenderFormatFn as t };
72
- //# sourceMappingURL=useTableColumns-DdU0CLcU.d.mts.map
72
+ //# sourceMappingURL=useTableColumns-PyxNyTD6.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as UseTableColumnsParams, r as useTableColumns, t as RenderFormatFn } from "./useTableColumns-DdU0CLcU.mjs";
1
+ import { n as UseTableColumnsParams, r as useTableColumns, t as RenderFormatFn } from "./useTableColumns-PyxNyTD6.mjs";
2
2
  export { RenderFormatFn, UseTableColumnsParams, useTableColumns };
@@ -1,4 +1,4 @@
1
- import { i as ComboboxOption } from "./ComboboxBase-B7ZcqU9p.mjs";
1
+ import { i as ComboboxOption } from "./ComboboxBase-BMBdtP2Z.mjs";
2
2
  import { MutableRefObject, RefObject } from "react";
3
3
 
4
4
  //#region components/Combobox/useTruncation.d.ts
package/llms.txt CHANGED
@@ -14,6 +14,7 @@ For exact prop types, prefer the published type declarations (`dist/**/*.d.mts`,
14
14
  ## Skills
15
15
 
16
16
  - [ui-authoring](skills/ui-authoring/SKILL.md): design tokens, PDS implementation guidelines, table guidelines (DataTable vs TableBox vs TableLayout), routing/link adapters (react-router, TanStack, custom), localization (PDSProvider strings/locale), loading states, testing, Storybook
17
+ - [Product UI standard](skills/ui-authoring/STANDARD.md): the rules every screen meets (11 px minimum for copy and 8 px for labels inside charts and diagrams, WCAG AA contrast, reduced motion, status not by colour alone), the screen brief, and the `new-screen` task lane defined in `lanes.json`
17
18
  - [Tokens](skills/ui-authoring/TOKENS.md): semantic color tokens (Fg / Surface / Border / Action / Input / Feedback / Status / Opacity) with recipes and a dark-mode checklist; Spacing / Typography catalog, radius, elevation, charts
18
19
  - [Patterns](skills/ui-authoring/PATTERNS.md): forms, layout, index tables, indicators, feedback, empty states, charts, panels
19
20
  - [Components](skills/ui-authoring/COMPONENTS.md): which PDS component to use (and its import path); APIs live in that component's `.mdx` when one exists, otherwise in `dist/components/<Name>/index.d.mts`
@@ -39,7 +40,7 @@ their own subpaths.
39
40
  - Modal close button: localize the default with `PDSProvider strings={{ closeModal: translatedLabel }}` (English: "Close"), or override one modal with `contentProps.closeButtonLabel`.
40
41
  - Forms: `ConfigFormGroup`, `FormField` (`TextField`, `TextAreaField`, `TableBoxField`), `Input`, `TextArea`, `Select`, `Combobox`, `Checkbox`, `Radio`, `Toggle`, `DatePicker`
41
42
  - Status: `Sticker` (status badges), `Badge` (counts), `StatusIndicator`
42
- - Saved views: `TableControls` (or `DataTable.controls`) requires `onSetDefaultView` and `onUnsetDefaultView` together, or neither. Editable views offer "Set as default" / "Unset default" based on `view.isDefault`; the design system confirms before calling either callback and warns that both changes affect the entire organization. Consumers own persistence and must remove their own confirmations to avoid double prompts. Compact controls omit saved views.
43
+ - Saved views: `TableControls` (or `DataTable.controls`) requires `onSetDefaultView` and `onUnsetDefaultView` together, or neither. Editable views offer "Set as default" / "Unset default" based on `view.isDefault`; the design system confirms before calling either callback and warns that both changes affect the entire organization. Consumers own persistence and must remove their own confirmations to avoid double prompts. Compact controls omit saved views. Pass `starredDefaultView` to star the default view: the `isDefault` view is pinned first with a star icon, cannot be dragged, hidden, deleted or unset, and its menu offers only Save and Duplicate (its name field still renames it); every other view gets the full menu. Rename and Duplicate on it call `onViewNameChange` / `onDuplicateView` with its id; Save calls `onSaveView()` with no id, saving whatever the consumer treats as the current view. A null `currentView` is shown as the starred view, so `onSaveView` and toolbar Save must treat null as the starred view; while an `isDefault` view exists, pass its id as `currentView` rather than null. A lazy default is a consumer-owned placeholder view with `isDefault: true`. While a view is the default the built-in tab is not shown and a `null` `currentView` is displayed as the starred view; with no `isDefault` view the built-in tab is shown starred and read-only.
43
44
  - DataTable filters: pass `filtersV2` (`TableControlsFiltersV2Props` / `FilterBarProps`) through `DataTable.controls` or directly to `TableControls` for a first-class FilterBar; defaults visible with size derived from `compact`. Hosts own V2 data filtering and feed `onChange` back to `initialState` for active-filter messaging; hydration needs no remount key. Precedence: `filterPanel` → `filtersV2` → legacy `filters`. Legacy `filters` supports `input`, `select`, `multiselect`, `combobox`, and `daterange` with optional `filterResolver`. With `clientFiltering`, `column.filter` generates legacy-only controls backed by TanStack column-filter state, not V2 filtering.
44
45
  - SmartTextInput: when method chains are allowed (`ValueType.MethodChain` or `{{...}}` interpolation), you MUST pass `renderFunctionForm`. PDS does not build the function-parameter form, so without it the dialog opened by placing the cursor in a call like `convert_to(...)` shows only the function name over an empty body. It receives `FunctionFormRenderProps` and must call `onComplete(nodes)` or `onCancel()`. In persona-web, `useDashboardSmartTextInputProps` supplies it (backed by `InputMethodChain/FunctionForm`). See components/SmartTextInput/SmartTextInput.mdx.
45
46
  - FilterBar: optional `FilterField.condition`, `pickerGroup`, and `disabledReason` support host-defined individual predicates in pills and native Rules; existing aggregate fields stay unchanged. See components/DataTable/DataTable.mdx. Hosts own feature activation and serialization.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@persona/design-system",
3
- "version": "0.10.1",
3
+ "version": "0.10.3",
4
4
  "description": "React components for Persona UI",
5
5
  "keywords": [
6
6
  "tanstack-intent"
@@ -64,6 +64,7 @@
64
64
  "./components/RightPanel": "./dist/components/RightPanel/index.mjs",
65
65
  "./components/SegmentedControl": "./dist/components/SegmentedControl/index.mjs",
66
66
  "./components/Select": "./dist/components/Select/index.mjs",
67
+ "./components/SelectionCard": "./dist/components/SelectionCard/index.mjs",
67
68
  "./components/Slider": "./dist/components/Slider/index.mjs",
68
69
  "./components/SmartTextInput": "./dist/components/SmartTextInput/index.mjs",
69
70
  "./components/SmartTextInput/parser/method-chain/parser": "./dist/components/SmartTextInput/parser/method-chain/parser.mjs",
@@ -242,7 +243,7 @@
242
243
  "jsdom": "^27.4.0",
243
244
  "lodash": "^4.18.1",
244
245
  "msw": "^2.12.14",
245
- "playwright": "1.60.0",
246
+ "playwright": "1.61.0",
246
247
  "react": "^17.0.2",
247
248
  "react-dom": "^17.0.2",
248
249
  "react-router-dom": "^6.30.5",
@@ -322,6 +323,7 @@
322
323
  "./components/RightPanel": "./dist/components/RightPanel/index.mjs",
323
324
  "./components/SegmentedControl": "./dist/components/SegmentedControl/index.mjs",
324
325
  "./components/Select": "./dist/components/Select/index.mjs",
326
+ "./components/SelectionCard": "./dist/components/SelectionCard/index.mjs",
325
327
  "./components/Slider": "./dist/components/Slider/index.mjs",
326
328
  "./components/SmartTextInput": "./dist/components/SmartTextInput/index.mjs",
327
329
  "./components/SmartTextInput/parser/method-chain/parser": "./dist/components/SmartTextInput/parser/method-chain/parser.mjs",
@@ -54,6 +54,7 @@ exists. If there is no `.mdx`, use the published type declarations
54
54
  | `RightPanel` | Complementary side panel for contextual updates while the page stays interactive (no overlay). Use `Modal` when the task needs full attention. See [Panels](../../patterns/Panels/Panels.mdx) | `@persona/design-system/components/RightPanel` |
55
55
  | `SegmentedControl` | Picking one option from a compact set of mutually exclusive choices | `@persona/design-system/components/SegmentedControl` |
56
56
  | `Select` | Dropdown — picking one value from a short, known list with no search. Use `Combobox` when the list needs search | `@persona/design-system/components/Select` |
57
+ | `SelectionCard` | A visible choice where each option is a card. Single when one may be chosen, `multiple` when several may | `@persona/design-system/components/SelectionCard` |
57
58
  | `Slider` | Picking a numeric value or range along a scale | `@persona/design-system/components/Slider` |
58
59
  | `SmartTextInput` | Authoring a value that mixes plain text with structured data references — `{{account.id}}` interpolation or a single `account.id` method chain, with autocomplete, syntax highlighting and schema validation. Use `Input` for plain text. Method chains REQUIRE `renderFunctionForm` (otherwise the function dialog is empty) — see its `.mdx` | `@persona/design-system/components/SmartTextInput` |
59
60
  | `Spacer` | Prefer `Stack` — leftover gap helper | `@persona/design-system/components/Spacer` |