@eifi1/ui-kit 0.23.0 → 0.24.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 (101) hide show
  1. package/README.md +6 -6
  2. package/dist/chart.d.ts +2 -4
  3. package/dist/components/amount-input.d.ts +16 -9
  4. package/dist/components/amount-input.js +13 -11
  5. package/dist/components/amount-input.js.map +1 -1
  6. package/dist/components/autocomplete.d.ts +5 -0
  7. package/dist/components/autocomplete.js +39 -37
  8. package/dist/components/autocomplete.js.map +1 -1
  9. package/dist/components/button-group.d.ts +2 -4
  10. package/dist/components/calculator.d.ts +2 -4
  11. package/dist/components/column-mapper.d.ts +62 -9
  12. package/dist/components/column-mapper.js +85 -49
  13. package/dist/components/column-mapper.js.map +1 -1
  14. package/dist/components/combobox.d.ts +33 -1
  15. package/dist/components/combobox.js +8 -2
  16. package/dist/components/combobox.js.map +1 -1
  17. package/dist/components/confirm-dialog.d.ts +2 -4
  18. package/dist/components/copy-button.d.ts +2 -4
  19. package/dist/components/danger-confirm.d.ts +2 -4
  20. package/dist/components/danger-confirm.js +52 -5
  21. package/dist/components/danger-confirm.js.map +1 -1
  22. package/dist/components/entity-combobox.d.ts +13 -1
  23. package/dist/components/entity-combobox.js +13 -4
  24. package/dist/components/entity-combobox.js.map +1 -1
  25. package/dist/components/facing-pair.d.ts +2 -4
  26. package/dist/components/file-button.d.ts +2 -4
  27. package/dist/components/file-dropzone.d.ts +2 -4
  28. package/dist/components/form-actions.d.ts +1 -3
  29. package/dist/components/form-actions.js +15 -1
  30. package/dist/components/form-actions.js.map +1 -1
  31. package/dist/components/iban-input.d.ts +2 -4
  32. package/dist/components/language-select.d.ts +2 -4
  33. package/dist/components/money-field.d.ts +2 -4
  34. package/dist/components/multi-entity-combobox.d.ts +5 -1
  35. package/dist/components/multi-entity-combobox.js +11 -3
  36. package/dist/components/multi-entity-combobox.js.map +1 -1
  37. package/dist/components/number-field.d.ts +2 -4
  38. package/dist/components/number-input.d.ts +2 -4
  39. package/dist/components/numpad-sheet.d.ts +2 -4
  40. package/dist/components/phone-input.d.ts +2 -4
  41. package/dist/components/series-chart.d.ts +2 -4
  42. package/dist/components/settings-fields.d.ts +2 -4
  43. package/dist/components/share-card.d.ts +1 -3
  44. package/dist/components/text-link.d.ts +1 -3
  45. package/dist/components/time-input.d.ts +2 -4
  46. package/dist/components/ui.d.ts +2 -4
  47. package/dist/components/ui.js +55 -17
  48. package/dist/components/ui.js.map +1 -1
  49. package/dist/feedback/feedback-attachment.d.ts +66 -1
  50. package/dist/feedback/feedback-attachment.js +32 -12
  51. package/dist/feedback/feedback-attachment.js.map +1 -1
  52. package/dist/feedback/feedback-dialog.d.ts +66 -1
  53. package/dist/feedback/feedback-inbox.d.ts +67 -253
  54. package/dist/feedback/feedback-thread.d.ts +1 -3
  55. package/dist/feedback/feedback-thread.js +8 -2
  56. package/dist/feedback/feedback-thread.js.map +1 -1
  57. package/dist/{feedback-BxeQVzwq.d.ts → feedback-DOwPu-Il.d.ts} +878 -18
  58. package/dist/feedback.d.ts +2 -4
  59. package/dist/hooks/use-file-drop.d.ts +2 -4
  60. package/dist/i18n/defaults.d.ts +2 -4
  61. package/dist/i18n/german.d.ts +2 -4
  62. package/dist/i18n/kit-labels.d.ts +1 -3
  63. package/dist/i18n/languages.d.ts +2 -4
  64. package/dist/i18n/locales/de-CH.d.ts +2 -4
  65. package/dist/i18n/locales/en.d.ts +2 -4
  66. package/dist/i18n/locales/es.d.ts +2 -4
  67. package/dist/i18n/locales/fr.d.ts +2 -4
  68. package/dist/i18n/locales/hu.d.ts +2 -4
  69. package/dist/i18n/locales/it.d.ts +2 -4
  70. package/dist/i18n/locales/zh.d.ts +2 -4
  71. package/dist/i18n/review.d.ts +2 -4
  72. package/dist/index.d.ts +2 -4
  73. package/dist/lib/strip-fade.d.ts +2 -2
  74. package/dist/lib/strip-fade.js.map +1 -1
  75. package/dist/rhf/fields.d.ts +59 -8
  76. package/dist/rhf/fields.js +61 -3
  77. package/dist/rhf/fields.js.map +1 -1
  78. package/dist/rhf/form.d.ts +2 -4
  79. package/dist/rhf.d.ts +3 -5
  80. package/dist/rhf.js.map +1 -1
  81. package/dist/shell/app-shell.d.ts +1 -3
  82. package/dist/shell/top-bar-brand.d.ts +2 -4
  83. package/dist/shell.d.ts +1 -3
  84. package/dist/wizard/stepper-nav.d.ts +2 -4
  85. package/dist/wizard.d.ts +2 -4
  86. package/package.json +1 -1
  87. package/src/components/amount-input.tsx +37 -20
  88. package/src/components/autocomplete.tsx +16 -5
  89. package/src/components/column-mapper.tsx +181 -79
  90. package/src/components/combobox.tsx +41 -3
  91. package/src/components/danger-confirm.tsx +193 -22
  92. package/src/components/entity-combobox.tsx +28 -5
  93. package/src/components/form-actions.tsx +20 -1
  94. package/src/components/multi-entity-combobox.tsx +16 -3
  95. package/src/components/ui.tsx +107 -0
  96. package/src/feedback/feedback-attachment.tsx +65 -12
  97. package/src/feedback/feedback-thread.tsx +66 -6
  98. package/src/lib/strip-fade.ts +2 -2
  99. package/src/rhf/fields.tsx +167 -6
  100. package/src/rhf.ts +1 -1
  101. package/dist/feedback-attachment-fGAzZPf0.d.ts +0 -469
@@ -1,2 +1,67 @@
1
1
  import 'react';
2
- export { b as DEFAULT_FEEDBACK_DIALOG_LABELS, l as FeedbackAttachmentLabels, o as FeedbackCategoryOption, p as FeedbackDialog, q as FeedbackDialogLabels, r as FeedbackDialogMultipleProps, s as FeedbackDialogProps, t as FeedbackDialogSingleProps, u as FeedbackDialogTextLabels, v as FeedbackMultipleSubmission, w as FeedbackSubmission } from '../feedback-attachment-fGAzZPf0.js';
2
+ export { a7 as DEFAULT_FEEDBACK_DIALOG_LABELS, aP as FeedbackAttachmentLabels, aU as FeedbackCategoryOption, b1 as FeedbackDialog, b2 as FeedbackDialogLabels, b3 as FeedbackDialogMultipleProps, b4 as FeedbackDialogProps, b5 as FeedbackDialogSingleProps, b6 as FeedbackDialogTextLabels, b7 as FeedbackMultipleSubmission, be as FeedbackSubmission } from '../feedback-DOwPu-Il.js';
3
+ import '../components/tooltip.js';
4
+ import '../hooks/use-anchored-rect.js';
5
+ import '../lib/clipping.js';
6
+ import '../data-table-labels-B7OdnM0S.js';
7
+ import '../components/data-table-sort.js';
8
+ import '../components/swipeable-row.js';
9
+ import '../components/mini-calendar.js';
10
+ import '../components/calendar-heatmap.js';
11
+ import '../components/popover.js';
12
+ import '../components/chip.js';
13
+ import 'lucide-react';
14
+ import '../components/field-sync.js';
15
+ import '../wizard/types.js';
16
+ import '../tour/tour.js';
17
+ import '../search/command-palette.js';
18
+ import '../search/global-search.js';
19
+ import '../search/search-index.js';
20
+ import '../components/month-picker.js';
21
+ import '../components/page-contents.js';
22
+ import '../components/series-chart-labels.js';
23
+ import '../components/pie-chart-labels.js';
24
+ import '../components/sparkline.js';
25
+ import '../components/stat-tile.js';
26
+ import '../components/signature-pad.js';
27
+ import '../components/password-strength.js';
28
+ import '../components/swatch-picker.js';
29
+ import '../components/tile-radio.js';
30
+ import '../components/icon-picker.js';
31
+ import '../components/dialog-frame.js';
32
+ import '../components/modal.js';
33
+ import '../hooks/use-search-param-state.js';
34
+ import '../components/measured-grid.js';
35
+ import '../components/account-settings-labels.js';
36
+ import '../components/floating-panel.js';
37
+ import '../components/bulk-action-bar.js';
38
+ import '../components/list.js';
39
+ import '../components/signed-amount.js';
40
+ import '../components/breadcrumbs.js';
41
+ import '../components/toast.js';
42
+ import '../components/description-list.js';
43
+ import '../components/line-items.js';
44
+ import '../components/progress-bar.js';
45
+ import '../components/error-boundary.js';
46
+ import '../components/authed-image.js';
47
+ import '../hooks/use-authed-src.js';
48
+ import '../components/image-grid.js';
49
+ import '../components/lightbox.js';
50
+ import '../components/write-lock.js';
51
+ import '../components/legal.js';
52
+ import '../components/account-chips.js';
53
+ import '../lib/format.js';
54
+ import '../components/reauth-dialog.js';
55
+ import '../components/server-wake.js';
56
+ import '../lib/server-wake.js';
57
+ import '../components/translation-review-labels.js';
58
+ import '../lib/translation-review.js';
59
+ import '../components/country-select.js';
60
+ import '../components/inline-edit-field.js';
61
+ import '../lib/iban.js';
62
+ import '../lib/phone.js';
63
+ import '../components/sign-chip.js';
64
+ import '../components/column-mapper.js';
65
+ import '../lib/column-mapping.js';
66
+ import '../lib/table-text.js';
67
+ import '../components/field-parts.js';
@@ -1,253 +1,67 @@
1
- import * as react from 'react';
2
- import { ReactNode } from 'react';
3
- import { LucideIcon } from 'lucide-react';
4
- import { l as FeedbackAttachmentLabels, e as FeedbackAttachmentErrorInfo } from '../feedback-attachment-fGAzZPf0.js';
5
-
6
- /**
7
- * The feedback **inbox**, as the parts two apps were each writing separately.
8
- *
9
- * `feedback-dialog.tsx` next door is the other half — the form somebody files a
10
- * report with — and the split between them is the same one: this owns the
11
- * *vocabulary*, the *policy* about how a report moves, and the *look*; the app
12
- * owns the data, the API and every string.
13
- *
14
- * It exists because both apps had grown their own copy. Keksdose's is the one
15
- * this is lifted from, comments and all, because it is the one that had been
16
- * argued with users for a year — the glyph per status, the two sizes of the
17
- * status control, what a row offers from where it currently stands. Steering
18
- * Design's was thinner in every one of those places and read as a different
19
- * product for no reason anyone chose.
20
- *
21
- * **What is deliberately NOT here.** The two apps store a report differently and
22
- * are meant to: one keeps the reporter's context in a JSON column and the
23
- * screenshot in an object store, the other keeps a `page_path` and the bytes in
24
- * the row. So there is no `Feedback` type in this file and nothing here takes
25
- * one. Every component takes the values it draws, and the detail panel is a
26
- * *shell* the app fills — which is what lets each keep the shape that suits it
27
- * without either of them inventing a second look for a status pill.
28
- */
29
- /** The seven states a report can be in.
30
- *
31
- * Shared value for value across both apps on purpose: it is what lets one habit,
32
- * and one agent prompt, work on either repo. Four are a chain and three sit off
33
- * it — see {@link visibleFeedbackStatuses} for what that buys. */
34
- type FeedbackStatus = "OPEN" | "IN_PROGRESS" | "IN_EVALUATION" | "NEEDS_LIVE_TEST" | "POSTPONED" | "DONE" | "WONT_DO";
35
- /** What a report is about. `CRASH` is filed by an error boundary and never
36
- * chosen, which is exactly why it is loud below and absent from every picker. */
37
- type FeedbackCategory = "CRASH" | "BUG" | "IDEA" | "QUESTION" | "OTHER";
38
- /**
39
- * A glyph and a tone per status.
40
- *
41
- * Colour alone is not a label — two of these sit a hue apart, and a consumer who
42
- * moves `--brand` can park it beside any of the others — so every status carries
43
- * its own shape as well. Declaration order is chain order, and
44
- * {@link FEEDBACK_STATUS_ORDER} is derived from it rather than restated, because
45
- * a restated list cannot be checked for exhaustiveness: an eighth status would
46
- * break the build here and leave a literal seven long.
47
- */
48
- declare const FEEDBACK_STATUS_META: Record<FeedbackStatus, {
49
- icon: LucideIcon;
50
- activeBg: string;
51
- activeText: string;
52
- }>;
53
- /** Chain order, then the three off it. The order a picker offers, and the rank a
54
- * status column sorts by — so a list sorted by status reads as a queue rather
55
- * than as an alphabet. */
56
- declare const FEEDBACK_STATUS_ORDER: FeedbackStatus[];
57
- /** The next status along the chain, or null at the end (or off it, as `WONT_DO`
58
- * is). What a swipe-to-advance gesture commits. */
59
- declare function nextFeedbackStatus(current: FeedbackStatus): FeedbackStatus | null;
60
- /**
61
- * The steps that make sense from where a row currently stands.
62
- *
63
- * For the compact control in a table cell: it is a glanceable triage affordance,
64
- * and a row of seven icons in a cell is noise. One step forward, one step back
65
- * (so an item can be sent back for rework), and any of the three off-chain
66
- * verdicts — which is what makes those usable as verdicts at all.
67
- *
68
- * The two parking states are not dead ends: each offers the step that resumes
69
- * work and the ones that close it, but deliberately **not each other** —
70
- * "postponed" and "waiting on a deploy" are different answers to different
71
- * questions, and a row moving between them directly is a re-triage, which starts
72
- * by picking the work back up.
73
- */
74
- declare function visibleFeedbackStatuses(current: FeedbackStatus): FeedbackStatus[];
75
- /**
76
- * Every status, in chain order — what an EXPANDED row offers.
77
- *
78
- * {@link visibleFeedbackStatuses} narrows the choice to the steps that make
79
- * sense from where a row is, which is right for a table cell. Once the row is
80
- * open in front of you, that same narrowing turns every non-adjacent move into a
81
- * walk: OPEN to DONE meant three round trips, and WONT_DO could not be left at
82
- * all except through a rework note.
83
- *
84
- * Takes a `current` it does not use, so the two policies read as one pair at the
85
- * call sites and a future rule ("terminal rows still cannot jump to X") has a
86
- * place to live.
87
- */
88
- declare function selectableFeedbackStatuses(_current: FeedbackStatus): FeedbackStatus[];
89
- /**
90
- * Per-category badge treatment, the counterpart to the status meta above.
91
- *
92
- * A category cell that is one grey pill holding the raw enum makes a CRASH —
93
- * filed automatically, by somebody staring at a broken page right now — read
94
- * exactly like a QUESTION, and sit unnoticed in the queue. `--danger` plus its own
95
- * glyph is what makes that impossible; the hand-filed categories stay
96
- * deliberately quiet so that the loud one means something.
97
- *
98
- * Declaration order is triage order, CRASH first.
99
- */
100
- declare const FEEDBACK_CATEGORY_META: Record<FeedbackCategory, {
101
- icon: LucideIcon;
102
- badgeBg: string;
103
- badgeText: string;
104
- }>;
105
- /** Triage order, CRASH first — also a category column's sort key and the option
106
- * order in its filter. Sorting by the raw enum is alphabetical, which parks
107
- * CRASH between BUG and IDEA. */
108
- declare const FEEDBACK_CATEGORY_ORDER: FeedbackCategory[];
109
- /** A category's rank for a column sort. Anything this build has never heard of —
110
- * an older client against a newer API — sorts LAST rather than to `indexOf`'s
111
- * −1, which would rank it above CRASH. */
112
- declare function feedbackCategoryRank(category: FeedbackCategory): number;
113
- /**
114
- * The category as a badge.
115
- *
116
- * Falls back to OTHER's treatment for a category this build has never heard of,
117
- * so an older client against a newer API degrades to a readable neutral pill
118
- * instead of throwing on `meta.icon` — a crash report must not be able to cause
119
- * one. The *label* is the caller's, and for the same reason it needs the same
120
- * guard: pass what OTHER is called if you cannot name the value you were given.
121
- */
122
- declare function FeedbackCategoryBadge({ category, label, compact, className, }: {
123
- category: FeedbackCategory;
124
- label: ReactNode;
125
- compact?: boolean;
126
- className?: string;
127
- }): react.JSX.Element;
128
- /** Where a report stands, as a badge — for the places that only *report* the
129
- * status rather than offering to change it. */
130
- declare function FeedbackStatusBadge({ status, label, className, }: {
131
- status: FeedbackStatus;
132
- label: ReactNode;
133
- className?: string;
134
- }): react.JSX.Element;
135
- /**
136
- * A row of statuses to switch a report to — either a table column's icon row or
137
- * an expanded panel's labelled pills.
138
- *
139
- * One component for both, because everything except the class strings is the
140
- * same decision: which one is current, and when the buttons are disabled. Two
141
- * copies had already drifted — only the icon variant carried `aria-label` and
142
- * `aria-pressed`, so the pill row was unlabelled for a screen reader.
143
- *
144
- * WHICH statuses to offer is the caller's, not this component's:
145
- * {@link visibleFeedbackStatuses} for a compact column,
146
- * {@link selectableFeedbackStatuses} for an expanded row. Passing the list keeps
147
- * that policy readable at the two call sites instead of hiding it behind
148
- * `variant`.
149
- */
150
- declare function FeedbackStatusTransitions({ status, statuses, canEdit, onPick, variant, label, className, }: {
151
- status: FeedbackStatus;
152
- statuses: FeedbackStatus[];
153
- canEdit: boolean;
154
- onPick: (status: FeedbackStatus) => void;
155
- variant: "icon" | "pill";
156
- /** What each status is called, translated by the app. */
157
- label: (status: FeedbackStatus) => string;
158
- className?: string;
159
- }): react.JSX.Element;
160
- /**
161
- * A textarea and its two buttons — for an outcome, for a note sent back with a
162
- * report, for a body being corrected.
163
- *
164
- * One component because all three are the same gesture: a draft that is not
165
- * committed until it is saved. Ctrl/⌘+Enter submits, which is the same shortcut
166
- * the compose dialog next door uses, so the habit carries across the feature.
167
- *
168
- * ## `initial` seeds the draft; it does not own it (changed 2026-09-22)
169
- *
170
- * This used to re-seed from `initial` in an effect, and that effect threw away
171
- * whatever was in the box — **and the picture attached to it** — every time the
172
- * prop arrived with a different value. `initial` is normally the saved note, so
173
- * the list refreshing under the editor, or the owner re-deriving the same string,
174
- * was enough: a triager halfway through a reply, with a screenshot picked out,
175
- * lost both and got the saved text back with no way to undo it.
176
- *
177
- * A draft belongs to the thing being edited, so switching to a different note is a
178
- * different editor — say so with a `key`:
179
- *
180
- * ```tsx
181
- * <FeedbackNoteEditor key={note.id} initial={note.body} … />
182
- * ```
183
- *
184
- * Where the id is not in hand at the call site, pass {@link resetKey} instead and
185
- * the editor re-seeds when THAT changes. Either way the decision is the caller's,
186
- * which is the point: the editor cannot tell a new subject from a new render.
187
- */
188
- declare function FeedbackNoteEditor({ initial, pending, onSave, onCancel, saveLabel, cancelLabel, placeholder, rows, attachment, resetKey, }: {
189
- initial: string;
190
- pending: boolean;
191
- onSave: (value: string, attachment?: File | null) => void;
192
- onCancel: () => void;
193
- saveLabel: ReactNode;
194
- cancelLabel: ReactNode;
195
- /** A line above the field saying what to write, not an in-field placeholder:
196
- * a hint that disappears the moment somebody starts typing is a hint that is
197
- * gone exactly when it is being followed. */
198
- placeholder?: ReactNode;
199
- rows?: number;
200
- /** Offer a picture with the note (Steering Design feedback #128). Omitted,
201
- * the editor is exactly the text box it always was — which is what the
202
- * *outcome* editor beside it wants, since an outcome is the answer rather
203
- * than the evidence. */
204
- attachment?: FeedbackNoteAttachment;
205
- /** Change this to say "the editor is now editing something ELSE", and the draft
206
- * and its attachment are dropped and re-seeded from `initial`. For call sites
207
- * that cannot put a `key` on the editor (see the note above). Leave it out and
208
- * the draft is never thrown away behind the user's back. */
209
- resetKey?: string | number;
210
- }): react.JSX.Element;
211
- /** What {@link FeedbackNoteEditor} needs in order to offer a picture with the
212
- * note: the same four things {@link FeedbackAttachmentField} takes, so the
213
- * reply path is held to the app's own limits rather than to the defaults. */
214
- interface FeedbackNoteAttachment {
215
- labels: FeedbackAttachmentLabels;
216
- accept?: string[];
217
- maxBytes?: number;
218
- /** `info` (0.23.0) names the refused file and the limit. */
219
- onError?: (kind: "type" | "size", info: FeedbackAttachmentErrorInfo) => void;
220
- onCaptureScreenshot?: () => Promise<File | null>;
221
- }
222
- /**
223
- * One labelled block of an opened report.
224
- *
225
- * The detail panel is a stack of these, and it is a stack rather than a
226
- * component with fixed fields on purpose: the two apps keep a report's context
227
- * and its screenshot in genuinely different places, and a shell that insisted on
228
- * both would force one of them to invent a shape it does not have. What is
229
- * shared is what a section *looks* like — and that is all that made the two
230
- * panels read as different products.
231
- */
232
- declare function FeedbackDetailSection({ title, action, children, }: {
233
- title: ReactNode;
234
- /** Something on the title's own line — an edit button, a resolved-at date. */
235
- action?: ReactNode;
236
- children: ReactNode;
237
- }): react.JSX.Element;
238
- /** The stack a detail panel is. Here so the spacing between sections is decided
239
- * once rather than by whichever app was written second. */
240
- declare function FeedbackDetail({ children }: {
241
- children: ReactNode;
242
- }): react.JSX.Element;
243
- /** Prose inside a section — a body, an outcome, a note.
244
- *
245
- * `whitespace-pre-wrap` is the whole component: a report is written in
246
- * paragraphs, and a note appended to it later is separated by blank lines that
247
- * carry the entire "this arrived after the answer" reading. */
248
- declare function FeedbackProse({ children, empty }: {
249
- children?: string;
250
- empty?: ReactNode;
251
- }): react.JSX.Element;
252
-
253
- export { FEEDBACK_CATEGORY_META, FEEDBACK_CATEGORY_ORDER, FEEDBACK_STATUS_META, FEEDBACK_STATUS_ORDER, type FeedbackCategory, FeedbackCategoryBadge, FeedbackDetail, FeedbackDetailSection, type FeedbackNoteAttachment, FeedbackNoteEditor, FeedbackProse, type FeedbackStatus, FeedbackStatusBadge, FeedbackStatusTransitions, feedbackCategoryRank, nextFeedbackStatus, selectableFeedbackStatuses, visibleFeedbackStatuses };
1
+ import 'react';
2
+ import 'lucide-react';
3
+ export { av as FEEDBACK_CATEGORY_META, aw as FEEDBACK_CATEGORY_ORDER, ax as FEEDBACK_STATUS_META, ay as FEEDBACK_STATUS_ORDER, aS as FeedbackCategory, aT as FeedbackCategoryBadge, a$ as FeedbackDetail, b0 as FeedbackDetailSection, b8 as FeedbackNoteAttachment, b9 as FeedbackNoteEditor, ba as FeedbackProse, bb as FeedbackStatus, bc as FeedbackStatusBadge, bd as FeedbackStatusTransitions, cH as feedbackCategoryRank, cL as nextFeedbackStatus, cO as selectableFeedbackStatuses, c_ as visibleFeedbackStatuses } from '../feedback-DOwPu-Il.js';
4
+ import '../components/tooltip.js';
5
+ import '../hooks/use-anchored-rect.js';
6
+ import '../lib/clipping.js';
7
+ import '../data-table-labels-B7OdnM0S.js';
8
+ import '../components/data-table-sort.js';
9
+ import '../components/swipeable-row.js';
10
+ import '../components/mini-calendar.js';
11
+ import '../components/calendar-heatmap.js';
12
+ import '../components/popover.js';
13
+ import '../components/chip.js';
14
+ import '../components/field-sync.js';
15
+ import '../wizard/types.js';
16
+ import '../tour/tour.js';
17
+ import '../search/command-palette.js';
18
+ import '../search/global-search.js';
19
+ import '../search/search-index.js';
20
+ import '../components/month-picker.js';
21
+ import '../components/page-contents.js';
22
+ import '../components/series-chart-labels.js';
23
+ import '../components/pie-chart-labels.js';
24
+ import '../components/sparkline.js';
25
+ import '../components/stat-tile.js';
26
+ import '../components/signature-pad.js';
27
+ import '../components/password-strength.js';
28
+ import '../components/swatch-picker.js';
29
+ import '../components/tile-radio.js';
30
+ import '../components/icon-picker.js';
31
+ import '../components/dialog-frame.js';
32
+ import '../components/modal.js';
33
+ import '../hooks/use-search-param-state.js';
34
+ import '../components/measured-grid.js';
35
+ import '../components/account-settings-labels.js';
36
+ import '../components/floating-panel.js';
37
+ import '../components/bulk-action-bar.js';
38
+ import '../components/list.js';
39
+ import '../components/signed-amount.js';
40
+ import '../components/breadcrumbs.js';
41
+ import '../components/toast.js';
42
+ import '../components/description-list.js';
43
+ import '../components/line-items.js';
44
+ import '../components/progress-bar.js';
45
+ import '../components/error-boundary.js';
46
+ import '../components/authed-image.js';
47
+ import '../hooks/use-authed-src.js';
48
+ import '../components/image-grid.js';
49
+ import '../components/lightbox.js';
50
+ import '../components/write-lock.js';
51
+ import '../components/legal.js';
52
+ import '../components/account-chips.js';
53
+ import '../lib/format.js';
54
+ import '../components/reauth-dialog.js';
55
+ import '../components/server-wake.js';
56
+ import '../lib/server-wake.js';
57
+ import '../components/translation-review-labels.js';
58
+ import '../lib/translation-review.js';
59
+ import '../components/country-select.js';
60
+ import '../components/inline-edit-field.js';
61
+ import '../lib/iban.js';
62
+ import '../lib/phone.js';
63
+ import '../components/sign-chip.js';
64
+ import '../components/column-mapper.js';
65
+ import '../lib/column-mapping.js';
66
+ import '../lib/table-text.js';
67
+ import '../components/field-parts.js';
@@ -1,7 +1,5 @@
1
1
  import 'react';
2
- export { z as ChatComposer, D as ChatComposerHandle, E as ChatComposerLabels, F as ChatComposerProps, a3 as DEFAULT_FEEDBACK_COMPOSER_LABELS, a4 as DEFAULT_FEEDBACK_THREAD_LABELS, ax as FeedbackComposer, ay as FeedbackComposerAttachment, az as FeedbackComposerHandle, aA as FeedbackComposerLabels, aB as FeedbackComposerProps, aC as FeedbackThread, aD as FeedbackThreadAttachment, aE as FeedbackThreadEvent, aF as FeedbackThreadItem, aG as FeedbackThreadLabels, aH as FeedbackThreadMessage, aI as FeedbackThreadProps } from '../feedback-BxeQVzwq.js';
3
- import '../feedback-attachment-fGAzZPf0.js';
4
- import './feedback-inbox.js';
2
+ export { z as ChatComposer, D as ChatComposerHandle, E as ChatComposerLabels, F as ChatComposerProps, G as ChatComposerSlotContext, a6 as DEFAULT_FEEDBACK_COMPOSER_LABELS, a8 as DEFAULT_FEEDBACK_THREAD_LABELS, aV as FeedbackComposer, aW as FeedbackComposerAttachment, aX as FeedbackComposerHandle, aY as FeedbackComposerLabels, aZ as FeedbackComposerProps, a_ as FeedbackComposerSlotContext, bf as FeedbackThread, bg as FeedbackThreadAttachment, bh as FeedbackThreadEvent, bi as FeedbackThreadItem, bj as FeedbackThreadLabels, bk as FeedbackThreadMessage, bl as FeedbackThreadProps } from '../feedback-DOwPu-Il.js';
5
3
  import '../components/tooltip.js';
6
4
  import '../hooks/use-anchored-rect.js';
7
5
  import '../lib/clipping.js';
@@ -310,6 +310,10 @@ function FeedbackComposer({
310
310
  });
311
311
  };
312
312
  const config = attachment === true ? {} : attachment || null;
313
+ const slot = typeof attachmentSlot === "function" ? (
314
+ // eslint-disable-next-line react-hooks/refs -- handed on for an effect, not read here
315
+ attachmentSlot({ root, pending })
316
+ ) : attachmentSlot;
313
317
  return /* @__PURE__ */ jsxs("div", { ...rootAttributes, ref: root, className: cn("space-y-2", className), children: [
314
318
  /* @__PURE__ */ jsx(
315
319
  Textarea,
@@ -337,7 +341,7 @@ function FeedbackComposer({
337
341
  }
338
342
  ),
339
343
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end justify-between gap-2", children: [
340
- config || attachmentSlot != null ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-wrap items-end gap-2", children: [
344
+ config || slot != null ? /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-wrap items-end gap-2", children: [
341
345
  config && /* @__PURE__ */ jsx(
342
346
  FeedbackAttachmentField,
343
347
  {
@@ -348,10 +352,12 @@ function FeedbackComposer({
348
352
  maxBytes: config.maxBytes,
349
353
  onError: config.onError,
350
354
  onCaptureScreenshot: config.onCaptureScreenshot,
355
+ buttonVariant: config.buttonVariant,
356
+ buttonSize: config.buttonSize,
351
357
  pasteFrom: root
352
358
  }
353
359
  ),
354
- attachmentSlot
360
+ slot
355
361
  ] }) : /* @__PURE__ */ jsx("span", {}),
356
362
  /* @__PURE__ */ jsxs("div", { className: "ms-auto flex items-center gap-2", children: [
357
363
  /* @__PURE__ */ jsx(