@eifi1/ui-kit 0.22.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.
- package/README.md +42 -25
- package/dist/chart.d.ts +8 -7
- package/dist/components/amount-input.d.ts +34 -7
- package/dist/components/amount-input.js +14 -10
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.d.ts +26 -0
- package/dist/components/autocomplete.js +164 -137
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/button-group.d.ts +8 -7
- package/dist/components/calculator.d.ts +8 -7
- package/dist/components/column-mapper.d.ts +235 -0
- package/dist/components/column-mapper.js +411 -0
- package/dist/components/column-mapper.js.map +1 -0
- package/dist/components/combobox-core.d.ts +39 -2
- package/dist/components/combobox-core.js +29 -6
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +113 -3
- package/dist/components/combobox.js +456 -313
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog.d.ts +8 -7
- package/dist/components/confirm-dialog.js +7 -8
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button.d.ts +5 -4
- package/dist/components/country-select.d.ts +50 -7
- package/dist/components/country-select.js +65 -9
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +8 -7
- package/dist/components/danger-confirm.js +64 -7
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/date-picker.d.ts +41 -0
- package/dist/components/date-picker.js +269 -8
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/entity-combobox.d.ts +48 -2
- package/dist/components/entity-combobox.js +159 -114
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/facing-pair.d.ts +8 -7
- package/dist/components/field-parts.d.ts +116 -6
- package/dist/components/field-parts.js +84 -0
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-strip.d.ts +105 -0
- package/dist/components/field-strip.js +46 -0
- package/dist/components/field-strip.js.map +1 -0
- package/dist/components/file-button.d.ts +8 -7
- package/dist/components/file-dropzone.d.ts +8 -7
- package/dist/components/form-actions.d.ts +8 -7
- package/dist/components/form-actions.js +23 -3
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/iban-input.d.ts +8 -7
- package/dist/components/icon-picker.d.ts +10 -1
- package/dist/components/icon-picker.js +12 -4
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/language-select.d.ts +8 -7
- package/dist/components/money-field.d.ts +11 -7
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-picker.js +2 -1
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.d.ts +31 -2
- package/dist/components/multi-entity-combobox.js +152 -103
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/number-field.d.ts +8 -7
- package/dist/components/number-input.d.ts +8 -7
- package/dist/components/numpad-sheet.d.ts +8 -7
- package/dist/components/phone-input.d.ts +8 -7
- package/dist/components/reauth-dialog.d.ts +2 -2
- package/dist/components/reauth-dialog.js +6 -8
- package/dist/components/reauth-dialog.js.map +1 -1
- package/dist/components/series-chart.d.ts +8 -7
- package/dist/components/settings-fields.d.ts +8 -7
- package/dist/components/share-card.d.ts +8 -7
- package/dist/components/swatch-picker.d.ts +17 -1
- package/dist/components/swatch-picker.js +10 -4
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/text-link.d.ts +8 -7
- package/dist/components/tile-radio.d.ts +20 -0
- package/dist/components/tile-radio.js +25 -8
- package/dist/components/tile-radio.js.map +1 -1
- package/dist/components/time-input.d.ts +8 -7
- package/dist/components/toggle-group.js +2 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/trigger-aria.d.ts +3 -0
- package/dist/components/trigger-aria.js +3 -1
- package/dist/components/trigger-aria.js.map +1 -1
- package/dist/components/ui.d.ts +5 -4
- package/dist/components/ui.js +60 -28
- package/dist/components/ui.js.map +1 -1
- package/dist/feedback/feedback-attachment.d.ts +66 -1
- package/dist/feedback/feedback-attachment.js +185 -65
- package/dist/feedback/feedback-attachment.js.map +1 -1
- package/dist/feedback/feedback-dialog.d.ts +66 -1
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox.d.ts +67 -252
- package/dist/feedback/feedback-inbox.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +66 -287
- package/dist/feedback/feedback-thread.js +16 -3
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/{kit-labels-R8mIAc9N.d.ts → feedback-DOwPu-Il.d.ts} +1273 -30
- package/dist/feedback.d.ts +65 -3
- package/dist/hooks/use-file-drop.d.ts +8 -7
- package/dist/i18n/defaults.d.ts +8 -7
- package/dist/i18n/defaults.js +3 -1
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.d.ts +8 -7
- package/dist/i18n/german.js +36 -2
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +5 -4
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.d.ts +8 -7
- package/dist/i18n/locales/de-CH.d.ts +8 -7
- package/dist/i18n/locales/en.d.ts +8 -7
- package/dist/i18n/locales/en.js +7 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +8 -7
- package/dist/i18n/locales/es.js +37 -2
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +8 -7
- package/dist/i18n/locales/fr.js +36 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.d.ts +8 -7
- package/dist/i18n/locales/hu.js +38 -2
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +8 -7
- package/dist/i18n/locales/it.js +37 -2
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +8 -7
- package/dist/i18n/locales/zh.js +34 -2
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.d.ts +8 -7
- package/dist/i18n/review.js +20 -1
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/column-mapping.d.ts +81 -0
- package/dist/lib/column-mapping.js +108 -0
- package/dist/lib/column-mapping.js.map +1 -0
- package/dist/lib/strip-fade.d.ts +2 -2
- package/dist/lib/strip-fade.js.map +1 -1
- package/dist/lib/table-text.d.ts +109 -1
- package/dist/lib/table-text.js +122 -1
- package/dist/lib/table-text.js.map +1 -1
- package/dist/rhf/fields.d.ts +142 -13
- package/dist/rhf/fields.js +185 -3
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form.d.ts +8 -7
- package/dist/rhf.d.ts +9 -8
- package/dist/rhf.js.map +1 -1
- package/dist/shell/app-shell.d.ts +8 -7
- package/dist/shell/top-bar-brand.d.ts +8 -7
- package/dist/shell/topbar-action-menu.d.ts +36 -3
- package/dist/shell/topbar-action-menu.js +74 -33
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell.d.ts +8 -7
- package/dist/table-text.d.ts +1 -1
- package/dist/wizard/stepper-nav.d.ts +38 -9
- package/dist/wizard/stepper-nav.js +4 -0
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard.d.ts +8 -7
- package/package.json +1 -1
- package/src/components/amount-input.tsx +50 -14
- package/src/components/autocomplete.tsx +188 -116
- package/src/components/column-mapper.tsx +768 -0
- package/src/components/combobox-core.tsx +82 -9
- package/src/components/combobox.tsx +655 -335
- package/src/components/confirm-dialog.tsx +12 -8
- package/src/components/country-select.tsx +135 -22
- package/src/components/danger-confirm.tsx +274 -24
- package/src/components/date-picker.tsx +423 -10
- package/src/components/entity-combobox.tsx +243 -129
- package/src/components/field-parts.tsx +224 -5
- package/src/components/field-strip.tsx +149 -0
- package/src/components/form-actions.tsx +52 -5
- package/src/components/icon-picker.tsx +23 -4
- package/src/components/money-field.tsx +3 -0
- package/src/components/month-picker.tsx +2 -1
- package/src/components/multi-entity-combobox.tsx +221 -121
- package/src/components/reauth-dialog.tsx +17 -18
- package/src/components/swatch-picker.tsx +29 -5
- package/src/components/tile-radio.tsx +74 -13
- package/src/components/toggle-group.tsx +2 -2
- package/src/components/trigger-aria.ts +5 -0
- package/src/components/ui.tsx +114 -33
- package/src/feedback/feedback-attachment.tsx +372 -72
- package/src/feedback/feedback-dialog.tsx +7 -3
- package/src/feedback/feedback-inbox.tsx +3 -2
- package/src/feedback/feedback-thread.tsx +112 -9
- package/src/i18n/defaults.ts +2 -0
- package/src/i18n/german.ts +42 -0
- package/src/i18n/kit-labels.tsx +4 -0
- package/src/i18n/locales/en.ts +27 -5
- package/src/i18n/locales/es.ts +41 -0
- package/src/i18n/locales/fr.ts +42 -0
- package/src/i18n/locales/hu.ts +37 -0
- package/src/i18n/locales/it.ts +41 -0
- package/src/i18n/locales/zh.ts +32 -0
- package/src/i18n/review.ts +19 -0
- package/src/index.ts +18 -0
- package/src/lib/column-mapping.ts +234 -0
- package/src/lib/strip-fade.ts +2 -2
- package/src/lib/table-text.ts +271 -0
- package/src/rhf/fields.tsx +421 -6
- package/src/rhf.ts +2 -1
- package/src/shell/topbar-action-menu.tsx +134 -38
- package/src/wizard/stepper-nav.tsx +35 -1
- package/dist/components/field-anatomy.d.ts +0 -95
- package/dist/components/field-anatomy.js +0 -84
- package/dist/components/field-anatomy.js.map +0 -1
- package/dist/feedback-attachment-NhUm7Zga.d.ts +0 -367
- package/src/components/field-anatomy.tsx +0 -190
package/dist/i18n/review.js
CHANGED
|
@@ -82,6 +82,7 @@ const KIT_LABEL_SAMPLES = {
|
|
|
82
82
|
"passwordStrength.optional": [["{{rule}}"]],
|
|
83
83
|
"passwordStrength.tooLong": [[72]],
|
|
84
84
|
"dangerConfirm.phrase": [["{{phrase}}"]],
|
|
85
|
+
"dangerConfirm.needsPhrase": [["{{phrase}}"]],
|
|
85
86
|
"iconPicker.resultCount": one,
|
|
86
87
|
"filePicker.rejectedType": [["{{name}}"]],
|
|
87
88
|
"filePicker.rejectedTypeOnly": [["{{accept}}", "{{name}}"]],
|
|
@@ -107,6 +108,7 @@ const KIT_LABEL_SAMPLES = {
|
|
|
107
108
|
"measuredGrid.problems": one,
|
|
108
109
|
"feedbackAttachment.attachmentRemoveFile": [["{{name}}"]],
|
|
109
110
|
"feedbackAttachment.attachmentLimit": one,
|
|
111
|
+
"feedbackAttachment.attachmentUploadFailed": [["{{name}}"]],
|
|
110
112
|
"feedbackComposer.sendHint": [["{{modifier}}"]],
|
|
111
113
|
"accountSettings.passkeys.renameItem": [["{{name}}"]],
|
|
112
114
|
"accountSettings.passkeys.renameField": [["{{name}}"]],
|
|
@@ -156,7 +158,24 @@ const KIT_LABEL_SAMPLES = {
|
|
|
156
158
|
"inlineEdit.edit": [["{{label}}"]],
|
|
157
159
|
"ibanInput.country": [["{{code}}"]],
|
|
158
160
|
"ibanInput.length": [[20, 21]],
|
|
159
|
-
"signChip.direction": [["{{current}}", "{{next}}"]]
|
|
161
|
+
"signChip.direction": [["{{current}}", "{{next}}"]],
|
|
162
|
+
"columnMapper.readError": [["{{name}}"]],
|
|
163
|
+
"columnMapper.summary": [
|
|
164
|
+
[1, 1],
|
|
165
|
+
[3, 12]
|
|
166
|
+
],
|
|
167
|
+
"columnMapper.unreadCount": one,
|
|
168
|
+
"columnMapper.unreadLine": [[3]],
|
|
169
|
+
"columnMapper.unreadMore": one,
|
|
170
|
+
"columnMapper.columnN": [[3]],
|
|
171
|
+
"columnMapper.roleOf": [["{{column}}"]],
|
|
172
|
+
"columnMapper.requiredRole": [["{{role}}"]],
|
|
173
|
+
"columnMapper.previewOf": [
|
|
174
|
+
[1, 12],
|
|
175
|
+
[10, 250]
|
|
176
|
+
],
|
|
177
|
+
"columnMapper.oneOf": [["{{roles}}"]],
|
|
178
|
+
"columnMapper.missing": [["{{roles}}"]]
|
|
160
179
|
};
|
|
161
180
|
export {
|
|
162
181
|
KIT_LABEL_SAMPLES,
|
package/dist/i18n/review.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/i18n/review.ts"],"sourcesContent":["import type { UiKitLabels } from \"./kit-labels\";\n\n/**\n * The kit's words as a flat `key → text` list, for an app's translation review.\n *\n * keksdose reviews its own locale bundles on its /translations page — one verdict per\n * locale and key, stored with the text the reviewer saw, so a later change re-opens it.\n * The kit's words appear on the same screens but live in TypeScript, not in the app's\n * bundles, and 94 of them are functions (`(count) => \"3 results\"`), which a bundle\n * flattener skips. This turns a label tree into rows that page can join on.\n *\n * - A string label is one row under its dot path: `common.close`. An array of words\n * (weekday names) is one row per entry: `miniCalendar.weekdays.0`.\n * - A function label is called with fixed samples. Text arguments are i18next-style\n * placeholders (`{{name}}`), so a translation that drops one is caught by the same\n * placeholder check the app runs on its own strings. Counts are real numbers, twice\n * where the wording may depend on them — 1 and 3 — so a reviewer sees singular and\n * plural. The key names the sample: `combobox.resultCount(1)`,\n * `shareCard.removeConfirm(name)`, `serverWake.waking()`.\n *\n * Keys depend only on the samples, never on the locale, so the rows of `de-CH` and of the\n * English reference line up key by key. Pass exactly the tree the app hands\n * `UiKitProvider` — its overrides included — and review what users see:\n *\n * kitLabelStrings(UI_KIT_LABELS_DE_CH) // the rows for de-CH\n * kitLabelStrings(DEFAULT_UI_KIT_LABELS) // the English reference\n *\n * A label that throws on its sample becomes a row starting with \"⚠\", so one broken\n * override shows up on the page instead of taking the page down.\n */\nexport function kitLabelStrings(labels: UiKitLabels): Record<string, string> {\n const out: Record<string, string> = {};\n const walk = (node: unknown, path: string) => {\n if (typeof node === \"string\") {\n out[path] = node;\n } else if (typeof node === \"function\") {\n for (const args of KIT_LABEL_SAMPLES[path] ?? [[]]) {\n out[`${path}(${args.map(sampleName).filter((a) => a !== \"\").join(\", \")})`] = render(\n node as (...args: unknown[]) => unknown,\n args,\n );\n }\n } else if (node !== null && typeof node === \"object\") {\n for (const [key, value] of Object.entries(node)) walk(value, path ? `${path}.${key}` : key);\n }\n };\n walk(labels, \"\");\n return out;\n}\n\nfunction render(label: (...args: unknown[]) => unknown, args: readonly unknown[]): string {\n try {\n return String(label(...args));\n } catch (error) {\n return `⚠ ${error instanceof Error ? error.message : String(error)}`;\n }\n}\n\n/** How a sample argument is written in the key: a placeholder by its name, a number as\n * itself, an empty string as `\"\"`, a missing optional argument not at all. */\nfunction sampleName(arg: unknown): string {\n if (arg === undefined) return \"\";\n if (typeof arg === \"string\") return /^\\{\\{(\\w+)\\}\\}$/.exec(arg)?.[1] ?? JSON.stringify(arg);\n return String(arg);\n}\n\nconst one = [[1], [3]] as const;\n\n/**\n * The sample arguments of every function label in {@link UiKitLabels}, by dot path.\n * `src/i18n/__tests__/review.test.ts` fails when a function label has no entry here, so\n * a new one cannot ship un-reviewable.\n */\nexport const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unknown[])[]>> = {\n \"common.fieldValue\": [[\"{{field}}\", \"{{value}}\"]],\n \"dataTable.filterResults\": [\n [1, 1],\n [3, 12],\n ],\n \"dataTable.sortedAscending\": [[\"{{column}}\"]],\n \"dataTable.sortedDescending\": [[\"{{column}}\"]],\n \"dataTable.sortCleared\": [[\"{{column}}\"]],\n \"dataTable.pageChanged\": [[2, 5]],\n \"dataTable.pageRange\": [[1, 25, 1240]],\n \"dataTable.rowCount\": [[1], [1240]],\n \"dataTable.columnsCount\": [[3, 8]],\n \"miniCalendar.day\": [[\"{{date}}\"]],\n \"miniCalendar.startSelected\": [[\"{{date}}\"]],\n \"miniCalendar.rangeSelected\": [[\"{{from}}\", \"{{to}}\"]],\n \"calendarHeatmap.day\": [[\"{{date}}\", \"{{value}}\"]],\n \"calendarHeatmap.truncated\": one,\n \"monthPicker.month\": [[\"{{monthYear}}\"]],\n \"combobox.create\": [[\"{{query}}\"]],\n \"combobox.selectedCount\": one,\n \"combobox.resultCount\": one,\n \"combobox.minChars\": one,\n \"multiSelect.selectedCount\": one,\n \"chipInput.added\": [[\"{{value}}\"]],\n \"chipInput.removed\": [[\"{{value}}\"]],\n \"chipInput.atLimit\": one,\n \"chipInput.duplicate\": [[\"{{value}}\"]],\n \"tabs.remove\": [[\"{{tab}}\"]],\n \"appShell.toggleGroup\": [[\"{{group}}\"]],\n \"topBar.role\": [[\"{{role}}\"]],\n \"file.size\": [[2_500_000]],\n \"wizard.step\": [[2, 4]],\n \"tour.step\": [[2, 4]],\n \"globalSearch.shortcut\": [[\"{{keys}}\"]],\n \"pieChart.slice\": [[\"{{label}}\", \"{{value}}\", \"{{percent}}\"]],\n \"sparkline.rising\": [[\"{{first}}\", \"{{last}}\"]],\n \"sparkline.falling\": [[\"{{first}}\", \"{{last}}\"]],\n \"sparkline.flat\": [[\"{{value}}\"]],\n \"sparkline.single\": [[\"{{value}}\"]],\n \"sparkline.named\": [[\"{{name}}\", \"{{summary}}\"]],\n \"statTile.increase\": [[\"{{amount}}\"]],\n \"statTile.decrease\": [[\"{{amount}}\"]],\n \"statTile.better\": [[\"{{change}}\"]],\n \"statTile.worse\": [[\"{{change}}\"]],\n \"signaturePad.viewTyped\": [[\"{{name}}\"]],\n \"passwordStrength.announcement\": [[\"{{level}}\"]],\n \"passwordStrength.ruleLength\": [[12]],\n \"passwordStrength.optional\": [[\"{{rule}}\"]],\n \"passwordStrength.tooLong\": [[72]],\n \"dangerConfirm.phrase\": [[\"{{phrase}}\"]],\n \"iconPicker.resultCount\": one,\n \"filePicker.rejectedType\": [[\"{{name}}\"]],\n \"filePicker.rejectedTypeOnly\": [[\"{{accept}}\", \"{{name}}\"]],\n \"filePicker.rejectedSize\": [[\"{{name}}\", \"{{maxSize}}\"]],\n \"filePicker.rejectedCount\": [\n [\"{{name}}\", 1],\n [\"{{name}}\", 3],\n ],\n \"filePicker.rejectedInvalid\": [[\"{{name}}\"]],\n \"filePicker.rejectedMany\": one,\n \"filePicker.rejectedPick\": one,\n \"filePicker.selected\": [\n [1, \"{{firstName}}\"],\n [3, \"{{firstName}}\"],\n ],\n \"filePicker.remove\": [[\"{{name}}\"]],\n \"filePicker.removed\": [[\"{{name}}\"]],\n \"filePicker.hint\": [[\"{{accept}}\"], [\"\"]],\n \"measuredGrid.removeRow\": [[3]],\n \"measuredGrid.cell\": [[\"{{column}}\", 3]],\n \"measuredGrid.lineError\": [[3]],\n \"measuredGrid.points\": one,\n \"measuredGrid.problems\": one,\n \"feedbackAttachment.attachmentRemoveFile\": [[\"{{name}}\"]],\n \"feedbackAttachment.attachmentLimit\": one,\n \"feedbackComposer.sendHint\": [[\"{{modifier}}\"]],\n \"accountSettings.passkeys.renameItem\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.renameField\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.deleteItem\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.deleteConfirm\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.created\": [[\"{{date}}\"]],\n \"accountSettings.passkeys.lastUsed\": [[\"{{date}}\"]],\n \"confirmDialog.typed\": [[\"{{text}}\"]],\n \"floatingPanel.badge\": one,\n \"bulkActionBar.selected\": one,\n \"form.submitShortcut\": [[true], [false]],\n \"lineItems.remove\": [[3]],\n \"lineItems.confirmRemove\": [[3]],\n \"lineItems.row\": [[3]],\n \"lineItems.cell\": [[\"{{column}}\", 3]],\n \"progressBar.overLimit\": [[\"{{amount}}\"]],\n \"signedAmount.positive\": [[\"{{amount}}\"]],\n \"signedAmount.negative\": [[\"{{amount}}\"]],\n \"errorBoundary.reportedAs\": [[\"{{reference}}\"]],\n \"authedImage.failedImage\": [[\"{{alt}}\"]],\n \"imageGrid.item\": [[2, 5]],\n \"imageGrid.actions\": [[\"{{name}}\"]],\n \"lightbox.counter\": [[2, 5]],\n \"lightbox.position\": [[2, 5]],\n \"shareCard.roleOf\": [[\"{{name}}\"]],\n \"shareCard.teamHint\": [[\"{{name}}\"]],\n \"shareCard.removeConfirm\": [[\"{{name}}\"]],\n \"shareCard.revokePendingConfirm\": [[\"{{name}}\"]],\n \"serverWake.waking\": [[\"{{appName}}\"], [undefined]],\n \"translationReview.filterCount\": [\n [\"{{status}}\", 1],\n [\"{{status}}\", 3],\n ],\n \"translationReview.placeholdersOnly\": one,\n \"translationReview.progress\": [\n [1, 1],\n [3, 12],\n ],\n \"translationReview.localeProgress\": [[3, 12]],\n \"translationReview.placeholderMismatch\": [[\"{{reference}}\", \"{{text}}\"]],\n \"translationReview.lastApproved\": [[\"{{name}}\", \"{{date}}\"]],\n \"translationReview.lastFlagged\": [[\"{{name}}\", \"{{date}}\"]],\n \"translationReview.scope\": [[\"{{areas}}\"]],\n \"translationReview.exportCorrections\": [[0], [1], [3]],\n \"characterCount.count\": [[12, 80]],\n \"characterCount.remaining\": one,\n \"inlineEdit.edit\": [[\"{{label}}\"]],\n \"ibanInput.country\": [[\"{{code}}\"]],\n \"ibanInput.length\": [[20, 21]],\n \"signChip.direction\": [[\"{{current}}\", \"{{next}}\"]],\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/i18n/review.ts"],"sourcesContent":["import type { UiKitLabels } from \"./kit-labels\";\n\n/**\n * The kit's words as a flat `key → text` list, for an app's translation review.\n *\n * keksdose reviews its own locale bundles on its /translations page — one verdict per\n * locale and key, stored with the text the reviewer saw, so a later change re-opens it.\n * The kit's words appear on the same screens but live in TypeScript, not in the app's\n * bundles, and 94 of them are functions (`(count) => \"3 results\"`), which a bundle\n * flattener skips. This turns a label tree into rows that page can join on.\n *\n * - A string label is one row under its dot path: `common.close`. An array of words\n * (weekday names) is one row per entry: `miniCalendar.weekdays.0`.\n * - A function label is called with fixed samples. Text arguments are i18next-style\n * placeholders (`{{name}}`), so a translation that drops one is caught by the same\n * placeholder check the app runs on its own strings. Counts are real numbers, twice\n * where the wording may depend on them — 1 and 3 — so a reviewer sees singular and\n * plural. The key names the sample: `combobox.resultCount(1)`,\n * `shareCard.removeConfirm(name)`, `serverWake.waking()`.\n *\n * Keys depend only on the samples, never on the locale, so the rows of `de-CH` and of the\n * English reference line up key by key. Pass exactly the tree the app hands\n * `UiKitProvider` — its overrides included — and review what users see:\n *\n * kitLabelStrings(UI_KIT_LABELS_DE_CH) // the rows for de-CH\n * kitLabelStrings(DEFAULT_UI_KIT_LABELS) // the English reference\n *\n * A label that throws on its sample becomes a row starting with \"⚠\", so one broken\n * override shows up on the page instead of taking the page down.\n */\nexport function kitLabelStrings(labels: UiKitLabels): Record<string, string> {\n const out: Record<string, string> = {};\n const walk = (node: unknown, path: string) => {\n if (typeof node === \"string\") {\n out[path] = node;\n } else if (typeof node === \"function\") {\n for (const args of KIT_LABEL_SAMPLES[path] ?? [[]]) {\n out[`${path}(${args.map(sampleName).filter((a) => a !== \"\").join(\", \")})`] = render(\n node as (...args: unknown[]) => unknown,\n args,\n );\n }\n } else if (node !== null && typeof node === \"object\") {\n for (const [key, value] of Object.entries(node)) walk(value, path ? `${path}.${key}` : key);\n }\n };\n walk(labels, \"\");\n return out;\n}\n\nfunction render(label: (...args: unknown[]) => unknown, args: readonly unknown[]): string {\n try {\n return String(label(...args));\n } catch (error) {\n return `⚠ ${error instanceof Error ? error.message : String(error)}`;\n }\n}\n\n/** How a sample argument is written in the key: a placeholder by its name, a number as\n * itself, an empty string as `\"\"`, a missing optional argument not at all. */\nfunction sampleName(arg: unknown): string {\n if (arg === undefined) return \"\";\n if (typeof arg === \"string\") return /^\\{\\{(\\w+)\\}\\}$/.exec(arg)?.[1] ?? JSON.stringify(arg);\n return String(arg);\n}\n\nconst one = [[1], [3]] as const;\n\n/**\n * The sample arguments of every function label in {@link UiKitLabels}, by dot path.\n * `src/i18n/__tests__/review.test.ts` fails when a function label has no entry here, so\n * a new one cannot ship un-reviewable.\n */\nexport const KIT_LABEL_SAMPLES: Readonly<Record<string, readonly (readonly unknown[])[]>> = {\n \"common.fieldValue\": [[\"{{field}}\", \"{{value}}\"]],\n \"dataTable.filterResults\": [\n [1, 1],\n [3, 12],\n ],\n \"dataTable.sortedAscending\": [[\"{{column}}\"]],\n \"dataTable.sortedDescending\": [[\"{{column}}\"]],\n \"dataTable.sortCleared\": [[\"{{column}}\"]],\n \"dataTable.pageChanged\": [[2, 5]],\n \"dataTable.pageRange\": [[1, 25, 1240]],\n \"dataTable.rowCount\": [[1], [1240]],\n \"dataTable.columnsCount\": [[3, 8]],\n \"miniCalendar.day\": [[\"{{date}}\"]],\n \"miniCalendar.startSelected\": [[\"{{date}}\"]],\n \"miniCalendar.rangeSelected\": [[\"{{from}}\", \"{{to}}\"]],\n \"calendarHeatmap.day\": [[\"{{date}}\", \"{{value}}\"]],\n \"calendarHeatmap.truncated\": one,\n \"monthPicker.month\": [[\"{{monthYear}}\"]],\n \"combobox.create\": [[\"{{query}}\"]],\n \"combobox.selectedCount\": one,\n \"combobox.resultCount\": one,\n \"combobox.minChars\": one,\n \"multiSelect.selectedCount\": one,\n \"chipInput.added\": [[\"{{value}}\"]],\n \"chipInput.removed\": [[\"{{value}}\"]],\n \"chipInput.atLimit\": one,\n \"chipInput.duplicate\": [[\"{{value}}\"]],\n \"tabs.remove\": [[\"{{tab}}\"]],\n \"appShell.toggleGroup\": [[\"{{group}}\"]],\n \"topBar.role\": [[\"{{role}}\"]],\n \"file.size\": [[2_500_000]],\n \"wizard.step\": [[2, 4]],\n \"tour.step\": [[2, 4]],\n \"globalSearch.shortcut\": [[\"{{keys}}\"]],\n \"pieChart.slice\": [[\"{{label}}\", \"{{value}}\", \"{{percent}}\"]],\n \"sparkline.rising\": [[\"{{first}}\", \"{{last}}\"]],\n \"sparkline.falling\": [[\"{{first}}\", \"{{last}}\"]],\n \"sparkline.flat\": [[\"{{value}}\"]],\n \"sparkline.single\": [[\"{{value}}\"]],\n \"sparkline.named\": [[\"{{name}}\", \"{{summary}}\"]],\n \"statTile.increase\": [[\"{{amount}}\"]],\n \"statTile.decrease\": [[\"{{amount}}\"]],\n \"statTile.better\": [[\"{{change}}\"]],\n \"statTile.worse\": [[\"{{change}}\"]],\n \"signaturePad.viewTyped\": [[\"{{name}}\"]],\n \"passwordStrength.announcement\": [[\"{{level}}\"]],\n \"passwordStrength.ruleLength\": [[12]],\n \"passwordStrength.optional\": [[\"{{rule}}\"]],\n \"passwordStrength.tooLong\": [[72]],\n \"dangerConfirm.phrase\": [[\"{{phrase}}\"]],\n \"dangerConfirm.needsPhrase\": [[\"{{phrase}}\"]],\n \"iconPicker.resultCount\": one,\n \"filePicker.rejectedType\": [[\"{{name}}\"]],\n \"filePicker.rejectedTypeOnly\": [[\"{{accept}}\", \"{{name}}\"]],\n \"filePicker.rejectedSize\": [[\"{{name}}\", \"{{maxSize}}\"]],\n \"filePicker.rejectedCount\": [\n [\"{{name}}\", 1],\n [\"{{name}}\", 3],\n ],\n \"filePicker.rejectedInvalid\": [[\"{{name}}\"]],\n \"filePicker.rejectedMany\": one,\n \"filePicker.rejectedPick\": one,\n \"filePicker.selected\": [\n [1, \"{{firstName}}\"],\n [3, \"{{firstName}}\"],\n ],\n \"filePicker.remove\": [[\"{{name}}\"]],\n \"filePicker.removed\": [[\"{{name}}\"]],\n \"filePicker.hint\": [[\"{{accept}}\"], [\"\"]],\n \"measuredGrid.removeRow\": [[3]],\n \"measuredGrid.cell\": [[\"{{column}}\", 3]],\n \"measuredGrid.lineError\": [[3]],\n \"measuredGrid.points\": one,\n \"measuredGrid.problems\": one,\n \"feedbackAttachment.attachmentRemoveFile\": [[\"{{name}}\"]],\n \"feedbackAttachment.attachmentLimit\": one,\n \"feedbackAttachment.attachmentUploadFailed\": [[\"{{name}}\"]],\n \"feedbackComposer.sendHint\": [[\"{{modifier}}\"]],\n \"accountSettings.passkeys.renameItem\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.renameField\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.deleteItem\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.deleteConfirm\": [[\"{{name}}\"]],\n \"accountSettings.passkeys.created\": [[\"{{date}}\"]],\n \"accountSettings.passkeys.lastUsed\": [[\"{{date}}\"]],\n \"confirmDialog.typed\": [[\"{{text}}\"]],\n \"floatingPanel.badge\": one,\n \"bulkActionBar.selected\": one,\n \"form.submitShortcut\": [[true], [false]],\n \"lineItems.remove\": [[3]],\n \"lineItems.confirmRemove\": [[3]],\n \"lineItems.row\": [[3]],\n \"lineItems.cell\": [[\"{{column}}\", 3]],\n \"progressBar.overLimit\": [[\"{{amount}}\"]],\n \"signedAmount.positive\": [[\"{{amount}}\"]],\n \"signedAmount.negative\": [[\"{{amount}}\"]],\n \"errorBoundary.reportedAs\": [[\"{{reference}}\"]],\n \"authedImage.failedImage\": [[\"{{alt}}\"]],\n \"imageGrid.item\": [[2, 5]],\n \"imageGrid.actions\": [[\"{{name}}\"]],\n \"lightbox.counter\": [[2, 5]],\n \"lightbox.position\": [[2, 5]],\n \"shareCard.roleOf\": [[\"{{name}}\"]],\n \"shareCard.teamHint\": [[\"{{name}}\"]],\n \"shareCard.removeConfirm\": [[\"{{name}}\"]],\n \"shareCard.revokePendingConfirm\": [[\"{{name}}\"]],\n \"serverWake.waking\": [[\"{{appName}}\"], [undefined]],\n \"translationReview.filterCount\": [\n [\"{{status}}\", 1],\n [\"{{status}}\", 3],\n ],\n \"translationReview.placeholdersOnly\": one,\n \"translationReview.progress\": [\n [1, 1],\n [3, 12],\n ],\n \"translationReview.localeProgress\": [[3, 12]],\n \"translationReview.placeholderMismatch\": [[\"{{reference}}\", \"{{text}}\"]],\n \"translationReview.lastApproved\": [[\"{{name}}\", \"{{date}}\"]],\n \"translationReview.lastFlagged\": [[\"{{name}}\", \"{{date}}\"]],\n \"translationReview.scope\": [[\"{{areas}}\"]],\n \"translationReview.exportCorrections\": [[0], [1], [3]],\n \"characterCount.count\": [[12, 80]],\n \"characterCount.remaining\": one,\n \"inlineEdit.edit\": [[\"{{label}}\"]],\n \"ibanInput.country\": [[\"{{code}}\"]],\n \"ibanInput.length\": [[20, 21]],\n \"signChip.direction\": [[\"{{current}}\", \"{{next}}\"]],\n \"columnMapper.readError\": [[\"{{name}}\"]],\n \"columnMapper.summary\": [\n [1, 1],\n [3, 12],\n ],\n \"columnMapper.unreadCount\": one,\n \"columnMapper.unreadLine\": [[3]],\n \"columnMapper.unreadMore\": one,\n \"columnMapper.columnN\": [[3]],\n \"columnMapper.roleOf\": [[\"{{column}}\"]],\n \"columnMapper.requiredRole\": [[\"{{role}}\"]],\n \"columnMapper.previewOf\": [\n [1, 12],\n [10, 250],\n ],\n \"columnMapper.oneOf\": [[\"{{roles}}\"]],\n \"columnMapper.missing\": [[\"{{roles}}\"]],\n};\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export { AnchorRole, ChartRampReport, ContrastCheck, ContrastReport, DeriveOptio
|
|
|
25
25
|
export { ALTERNATIVE_PRESETS, DEFAULT_PRESET, DERIVED_PRESETS, IMPRINT_PRESET, PALETTES, PalettePreset, TokenSet, applyTokenSet, presetById } from './theme/palette-presets.js';
|
|
26
26
|
export { ThemeMode, ThemePreference, ThemeState, ThemeStore, applyPersistedTheme, createThemeStore } from './theme/theme-store.js';
|
|
27
27
|
export { PaletteStore, applyPersistedPalette, createPaletteStore } from './theme/palette-store.js';
|
|
28
|
-
export { A as AppShellLabels, B as Button, a as ButtonClassesOptions, b as ButtonLinkProps, c as ButtonProps, d as ButtonSize, e as ButtonTone, f as ButtonVariant, C as CalculatorLabels, g as Card, h as CardAction, i as CardActionProps, j as CardContent, k as CardContentProps, l as CardDensity, m as CardDescription, n as CardDescriptionProps, o as CardFooter, p as CardFooterProps, q as CardHeader, r as CardHeaderProps, s as CardProps, t as CardTitle, u as CardTitleLevel, v as CardTitleProps, w as CardTone, x as CharacterCountLabels, y as ChartTooltipPlacement, z as
|
|
28
|
+
export { A as AppShellLabels, B as Button, a as ButtonClassesOptions, b as ButtonLinkProps, c as ButtonProps, d as ButtonSize, e as ButtonTone, f as ButtonVariant, C as CalculatorLabels, g as Card, h as CardAction, i as CardActionProps, j as CardContent, k as CardContentProps, l as CardDensity, m as CardDescription, n as CardDescriptionProps, o as CardFooter, p as CardFooterProps, q as CardHeader, r as CardHeaderProps, s as CardProps, t as CardTitle, u as CardTitleLevel, v as CardTitleProps, w as CardTone, x as CharacterCountLabels, y as ChartTooltipPlacement, z as ChatComposer, D as ChatComposerHandle, E as ChatComposerLabels, F as ChatComposerProps, G as ChatComposerSlotContext, H as ComboboxLabels, I as CommonLabels, J as ConfirmDialogLabels, K as ConfirmFn, L as ConfirmOptions, M as ConfirmProvider, N as ConfirmProviderProps, O as ConfirmTone, P as CopyButton, Q as CopyButtonLabels, R as CopyButtonProps, S as CurrencyLabels, T as CurrentPasswordInput, U as CurrentPasswordInputLabels, V as CurrentPasswordInputProps, W as DEFAULT_APP_SHELL_LABELS, X as DEFAULT_ATTACHMENT_ACCEPT, Y as DEFAULT_CALCULATOR_LABELS, Z as DEFAULT_CHARACTER_COUNT_LABELS, _ as DEFAULT_COMBOBOX_LABELS, $ as DEFAULT_COMMON_LABELS, a0 as DEFAULT_CONFIRM_DIALOG_LABELS, a1 as DEFAULT_COPY_BUTTON_LABELS, a2 as DEFAULT_CURRENCY_LABELS, a3 as DEFAULT_DANGER_CONFIRM_LABELS, a4 as DEFAULT_DATE_PICKER_LABELS, a5 as DEFAULT_FEEDBACK_ATTACHMENT_LABELS, a6 as DEFAULT_FEEDBACK_COMPOSER_LABELS, a7 as DEFAULT_FEEDBACK_DIALOG_LABELS, a8 as DEFAULT_FEEDBACK_THREAD_LABELS, a9 as DEFAULT_FILE_LABELS, aa as DEFAULT_FILE_PICKER_LABELS, ab as DEFAULT_FORM_ACTIONS_LABELS, ac as DEFAULT_IBAN_INPUT_LABELS, ad as DEFAULT_MAX_ATTACHMENTS, ae as DEFAULT_MAX_ATTACHMENT_BYTES, af as DEFAULT_MULTI_SELECT_LABELS, ag as DEFAULT_PASSWORD_REVEAL_LABELS, ah as DEFAULT_PHONE_INPUT_LABELS, ai as DEFAULT_PICKER_SHEET_LABELS, aj as DEFAULT_SHARE_CARD_LABELS, ak as DEFAULT_SWIPEABLE_ROW_LABELS, al as DEFAULT_TABS_LABELS, am as DEFAULT_TOP_BAR_LABELS, an as DangerConfirm, ao as DangerConfirmLabels, ap as DangerConfirmProps, aq as DangerConfirmValues, ar as DangerConsequence, as as DatePickerLabels, at as EmptyState, au as EmptyStateProps, av as FEEDBACK_CATEGORY_META, aw as FEEDBACK_CATEGORY_ORDER, ax as FEEDBACK_STATUS_META, ay as FEEDBACK_STATUS_ORDER, az as FIELD_BASE, aA as FIELD_DISPLAY, aB as FIELD_FLOATING_PAD, aC as FIELD_INVALID, aD as FIELD_TRIGGER, aE as FIELD_WRITABLE_LOOK, aF as FLOATING_INPUT_CLASS, aG as FLOATING_LABEL_CLASS, aH as FeedbackAttachmentError, aI as FeedbackAttachmentErrorInfo, aJ as FeedbackAttachmentField, aK as FeedbackAttachmentFieldLabels, aL as FeedbackAttachmentFieldMultipleProps, aM as FeedbackAttachmentFieldProps, aN as FeedbackAttachmentFieldRefsProps, aO as FeedbackAttachmentFieldSingleProps, aP as FeedbackAttachmentLabels, aQ as FeedbackAttachmentRef, aR as FeedbackAttachmentRefsError, aS as FeedbackCategory, aT as FeedbackCategoryBadge, aU as FeedbackCategoryOption, aV as FeedbackComposer, aW as FeedbackComposerAttachment, aX as FeedbackComposerHandle, aY as FeedbackComposerLabels, aZ as FeedbackComposerProps, a_ as FeedbackComposerSlotContext, a$ as FeedbackDetail, b0 as FeedbackDetailSection, b1 as FeedbackDialog, b2 as FeedbackDialogLabels, b3 as FeedbackDialogMultipleProps, b4 as FeedbackDialogProps, b5 as FeedbackDialogSingleProps, b6 as FeedbackDialogTextLabels, b7 as FeedbackMultipleSubmission, b8 as FeedbackNoteAttachment, b9 as FeedbackNoteEditor, ba as FeedbackProse, bb as FeedbackStatus, bc as FeedbackStatusBadge, bd as FeedbackStatusTransitions, be as FeedbackSubmission, bf as FeedbackThread, bg as FeedbackThreadAttachment, bh as FeedbackThreadEvent, bi as FeedbackThreadItem, bj as FeedbackThreadLabels, bk as FeedbackThreadMessage, bl as FeedbackThreadProps, bm as FieldChevron, bn as FieldChevronProps, bo as FieldHint, bp as FieldHintProps, bq as FileButton, br as FileButtonProps, bs as FileLabels, bt as FilePickerLabels, bu as FileRejection, bv as FileRejectionReason, bw as FileScreenOptions, bx as FloatingField, by as FloatingFieldProps, bz as FormActions, bA as FormActionsAlign, bB as FormActionsDestructive, bC as FormActionsLabels, bD as FormActionsPlacement, bE as FormActionsProps, bF as FormActionsStickyWithin, bG as FormActionsSubmitProps, bH as FormActionsSubmitShortcut, bI as IbanInput, bJ as IbanInputLabels, bK as IbanInputProps, bL as IconButton, bM as IconButtonGlyphSize, bN as IconButtonLinkProps, bO as IconButtonProps, bP as IconButtonSize, bQ as IconButtonTone, bR as IconButtonToneColor, bS as IconButtonVariant, bT as Input, bU as InputProps, bV as KitDateFormatContext, bW as KitDateFormatter, bX as KitLinkComponent, bY as KitLinkProps, bZ as Label, b_ as LabelOverride, b$ as LabelProps, c0 as MultiSelectLabels, c1 as PHONE_QUERY, c2 as PasswordRevealLabels, c3 as PhoneInput, c4 as PhoneInputLabels, c5 as PhoneInputProps, c6 as PickerSheetLabels, c7 as ResponsiveFormActionsPlacement, c8 as Select, c9 as SelectProps, ca as ShareAddRequest, cb as ShareCandidate, cc as ShareCard, cd as ShareCardLabels, ce as ShareCardProps, cf as ShareDialog, cg as ShareDialogProps, ch as ShareGrantee, ci as SharePanel, cj as SharePanelProps, ck as SharePendingGrant, cl as ShareRole, cm as Spinner, cn as SpinnerProps, co as SwipeableRowLabels, cp as TabItem, cq as Tabs, cr as TabsLabels, cs as TabsProps, ct as Textarea, cu as TextareaProps, cv as TopBarLabels, cw as TypedConfirmField, cx as TypedConfirmFieldLabels, cy as TypedConfirmFieldProps, cz as TypedMatch, cA as UiKitLabelOverrides, cB as UiKitLabels, cC as UiKitProvider, cD as UiKitProviderProps, cE as UseFilePickerOptions, cF as UseFilePickerReturn, cG as buttonClasses, cH as feedbackCategoryRank, cI as formatFileSize, cJ as matchesAccept, cK as missingKitLabels, cL as nextFeedbackStatus, cM as pastedName, cN as resolvePasswordRevealLabels, cO as selectableFeedbackStatuses, cP as typedMatches, cQ as useConfirm, cR as useFilePicker, cS as useKitChartTooltipPlacement, cT as useKitDateFormatter, cU as useKitFileLabels, cV as useKitLabelOverrides, cW as useKitLabels, cX as useKitLink, cY as useKitLocale, cZ as useKitWeekStart, c_ as visibleFeedbackStatuses } from './feedback-DOwPu-Il.js';
|
|
29
29
|
export { Field, FieldControlProps, FieldLabelVisibility, FieldProps, FieldRenderMeta } from './components/field.js';
|
|
30
30
|
export { SearchField, SearchFieldProps } from './components/search-field.js';
|
|
31
31
|
export { DropdownPanel, DropdownPanelProps, DropdownSearchHeader, DropdownSearchHeaderProps, useDropdown, useDropdownSearch } from './components/dropdown.js';
|
|
@@ -134,9 +134,6 @@ export { RoleSwitcher, RoleSwitcherProps } from './shell/role-switcher.js';
|
|
|
134
134
|
export { TopBarActionMenu, TopBarMenuEntry, TopBarMenuHeader } from './shell/topbar-action-menu.js';
|
|
135
135
|
export { TopBarBrand, TopBarBrandProps } from './shell/top-bar-brand.js';
|
|
136
136
|
export { AuthLayout, AuthLayoutProps } from './shell/auth-layout.js';
|
|
137
|
-
export { D as DEFAULT_ATTACHMENT_ACCEPT, a as DEFAULT_FEEDBACK_ATTACHMENT_LABELS, b as DEFAULT_FEEDBACK_DIALOG_LABELS, c as DEFAULT_MAX_ATTACHMENTS, d as DEFAULT_MAX_ATTACHMENT_BYTES, F as FeedbackAttachmentError, e as FeedbackAttachmentField, f as FeedbackAttachmentFieldLabels, g as FeedbackAttachmentFieldMultipleProps, h as FeedbackAttachmentFieldProps, i as FeedbackAttachmentFieldRefsProps, j as FeedbackAttachmentFieldSingleProps, k as FeedbackAttachmentLabels, l as FeedbackAttachmentRef, m as FeedbackAttachmentRefsError, n as FeedbackCategoryOption, o as FeedbackDialog, p as FeedbackDialogLabels, q as FeedbackDialogMultipleProps, r as FeedbackDialogProps, s as FeedbackDialogSingleProps, t as FeedbackDialogTextLabels, u as FeedbackMultipleSubmission, v as FeedbackSubmission, w as pastedName } from './feedback-attachment-NhUm7Zga.js';
|
|
138
|
-
export { FEEDBACK_CATEGORY_META, FEEDBACK_CATEGORY_ORDER, FEEDBACK_STATUS_META, FEEDBACK_STATUS_ORDER, FeedbackCategory, FeedbackCategoryBadge, FeedbackDetail, FeedbackDetailSection, FeedbackNoteAttachment, FeedbackNoteEditor, FeedbackProse, FeedbackStatus, FeedbackStatusBadge, FeedbackStatusTransitions, feedbackCategoryRank, nextFeedbackStatus, selectableFeedbackStatuses, visibleFeedbackStatuses } from './feedback/feedback-inbox.js';
|
|
139
|
-
export { ChatComposer, ChatComposerHandle, ChatComposerLabels, ChatComposerProps, DEFAULT_FEEDBACK_COMPOSER_LABELS, DEFAULT_FEEDBACK_THREAD_LABELS, FeedbackComposer, FeedbackComposerAttachment, FeedbackComposerHandle, FeedbackComposerLabels, FeedbackComposerProps, FeedbackThread, FeedbackThreadAttachment, FeedbackThreadEvent, FeedbackThreadItem, FeedbackThreadLabels, FeedbackThreadMessage, FeedbackThreadProps } from './feedback/feedback-thread.js';
|
|
140
137
|
export { DEFAULT_WIZARD_LABELS, FieldErrors, StepStatus, SummaryItem, SummarySection, UseWizardOptions, UseWizardReturn, ValidateResult, WizardLabels, WizardStepConfig, WizardUrlSync, resolveWizardLabels } from './wizard/types.js';
|
|
141
138
|
export { useWizard } from './wizard/use-wizard.js';
|
|
142
139
|
export { WizardContextProvider, WizardContextValue, useOptionalWizardContext, useWizardContext, useWizardNextGate, useWizardStepValidate } from './wizard/wizard-context.js';
|
|
@@ -166,10 +163,14 @@ export { COUNTRY_CODES, countryName } from './lib/countries.js';
|
|
|
166
163
|
export { IBAN_LENGTHS, IbanKind, IbanProblem, compactIban, formatIban, ibanCheckDigits, ibanProblem, isQrIban, isValidIban } from './lib/iban.js';
|
|
167
164
|
export { formatIsin, isValidIsin, isinCheckDigit } from './lib/isin.js';
|
|
168
165
|
export { PHONE_COUNTRIES, PHONE_DIAL_CODES, ParsedPhone, PhoneCountry, PhoneCountryCode, formatNationalPhone, formatPhone, isE164, parsePhone } from './lib/phone.js';
|
|
166
|
+
export { FieldStrip, FieldStripIds, FieldStripPad, FieldStripProps } from './components/field-strip.js';
|
|
167
|
+
export { ColumnMapper, ColumnMapperLabels, ColumnMapperProps, ColumnRoleTable, ColumnRoleTableBodyProps, ColumnRoleTableProps, ColumnRoleTableRowProps, DEFAULT_COLUMN_MAPPER_LABELS } from './components/column-mapper.js';
|
|
168
|
+
export { ColumnMapperResult, ColumnMapping, ColumnRole, assignColumnRole, guessMapping, missingRoles, readMappedTable, readTextFile, roleOfColumn } from './lib/column-mapping.js';
|
|
169
169
|
export { AccountSettingsLabels, DEFAULT_ACCOUNT_SETTINGS_LABELS, PasskeysSettingLabels, PasswordSettingLabels, ProfileSettingLabels, TwoFactorSettingLabels } from './components/account-settings-labels.js';
|
|
170
170
|
export { CLIPS_ATTRIBUTE } from './lib/clipping.js';
|
|
171
171
|
export { ComboClearValue, ComboOption } from './components/combobox-core.js';
|
|
172
172
|
export { DEFAULT_TRANSLATION_REVIEW_LABELS, TranslationReviewLabels } from './components/translation-review-labels.js';
|
|
173
|
+
export { FLOATING_LABEL_STATIC, FieldLabel, FieldLabelProps } from './components/field-parts.js';
|
|
173
174
|
export { REVIEW_STATUS_TONES, ReviewStatusChip, ReviewStatusChipProps, TranslationExportButton, TranslationExportButtonProps, TranslationLocaleTab, TranslationLocaleTabs, TranslationLocaleTabsProps, TranslationProgress, TranslationProgressProps } from './components/translation-review-parts.js';
|
|
174
175
|
export { SeriesChartAxisBudget } from './components/series-chart-budget.js';
|
|
175
176
|
export { TimeTickUnit } from './components/series-chart-ticks.js';
|
|
@@ -181,3 +182,4 @@ import 'zustand/middleware';
|
|
|
181
182
|
import 'lucide-react';
|
|
182
183
|
import './lib/direction.js';
|
|
183
184
|
import 'recharts';
|
|
185
|
+
import './lib/table-text.js';
|
package/dist/index.js
CHANGED
|
@@ -229,6 +229,16 @@ import {
|
|
|
229
229
|
formatPhone,
|
|
230
230
|
isE164
|
|
231
231
|
} from "./lib/phone.js";
|
|
232
|
+
export * from "./components/field-strip.js";
|
|
233
|
+
export * from "./components/column-mapper.js";
|
|
234
|
+
import {
|
|
235
|
+
assignColumnRole,
|
|
236
|
+
guessMapping,
|
|
237
|
+
missingRoles,
|
|
238
|
+
readMappedTable,
|
|
239
|
+
readTextFile,
|
|
240
|
+
roleOfColumn
|
|
241
|
+
} from "./lib/column-mapping.js";
|
|
232
242
|
export {
|
|
233
243
|
ACCOUNT_STATE_TONES,
|
|
234
244
|
AccountStateChip,
|
|
@@ -283,6 +293,7 @@ export {
|
|
|
283
293
|
TypedConfirmField,
|
|
284
294
|
WriteLockProvider,
|
|
285
295
|
anchoredPanelPlacement,
|
|
296
|
+
assignColumnRole,
|
|
286
297
|
attachServerWake,
|
|
287
298
|
cn,
|
|
288
299
|
compactIban,
|
|
@@ -300,6 +311,7 @@ export {
|
|
|
300
311
|
formatNationalPhone,
|
|
301
312
|
formatPhone,
|
|
302
313
|
fromApiReview,
|
|
314
|
+
guessMapping,
|
|
303
315
|
ibanCheckDigits,
|
|
304
316
|
ibanProblem,
|
|
305
317
|
isE164,
|
|
@@ -315,14 +327,18 @@ export {
|
|
|
315
327
|
matchesAccept,
|
|
316
328
|
matchesHotkey,
|
|
317
329
|
mergeReviews,
|
|
330
|
+
missingRoles,
|
|
318
331
|
parseHotkey,
|
|
319
332
|
parsePhone,
|
|
320
333
|
placeholderMismatch,
|
|
321
334
|
placeholderTokens,
|
|
335
|
+
readMappedTable,
|
|
322
336
|
readStored,
|
|
323
337
|
readTableUrlState,
|
|
338
|
+
readTextFile,
|
|
324
339
|
reviewStatus,
|
|
325
340
|
reviewWrite,
|
|
341
|
+
roleOfColumn,
|
|
326
342
|
serverWake,
|
|
327
343
|
setStoreLog,
|
|
328
344
|
summariseRows,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @eifi1/ui-kit — shared design-system barrel.\n//\n// Domain-free UI + theme surface shared across apps (lead app: Keksdose). Consumers import\n// components/theme from \"@eifi1/ui-kit\" and the token stylesheet from \"@eifi1/ui-kit/tokens.css\".\n\n// ── lib ────────────────────────────────────────────────────────────────────\nexport * from \"./lib/calc\";\nexport { cn } from \"./lib/cn\";\nexport { logger, setStoreLog } from \"./lib/logger\";\n// Intl number / money / percent / date / relative-time formatting, and `useKitFormat()`\n// for the same bound to the provider's locale (kastlan's formatters.ts, English \"5m ago\").\nexport * from \"./lib/format\";\n// localStorage that never throws (Safari private mode, blocked site data).\nexport { readStored, writeStored } from \"./lib/safe-storage\";\n// Date helpers are also available via the \"@eifi1/ui-kit/dates\" subpath.\n\n// ── hooks ────────────────────────────────────────────────────────────────────\nexport { useMediaQuery } from \"./hooks/use-media-query\";\nexport { useBodyScrollLock } from \"./hooks/use-body-scroll-lock\";\nexport { useAnchoredRect } from \"./hooks/use-anchored-rect\";\nexport type { AnchorRect } from \"./hooks/use-anchored-rect\";\nexport { useAnchoredPanel, anchoredPanelPlacement, useVisualViewport } from \"./hooks/use-anchored-panel\";\nexport type {\n AnchoredPanel,\n AnchoredPanelOptions,\n ViewportBox,\n} from \"./hooks/use-anchored-panel\";\nexport { useEscapeKey, useOutsideClick } from \"./hooks/use-dismiss\";\n// Focus containment for an overlay, and a live region for a change that moves no focus.\n// Both were extracted from the two components that already did them correctly (Modal and\n// CommandPalette) so the rest of the kit stops being the exception.\nexport { useFocusTrap } from \"./hooks/use-focus-trap\";\nexport type { FocusTrapOptions } from \"./hooks/use-focus-trap\";\nexport { useAnnounce } from \"./hooks/use-announce\";\nexport type { UseAnnounceReturn, UseAnnounceOptions, AnnounceRegionProps } from \"./hooks/use-announce\";\nexport { useOverlayHistory } from \"./hooks/use-overlay-history\";\nexport { useCloseTransition, OVERLAY_EXIT_MS } from \"./hooks/use-close-transition\";\nexport { useRowSwipe } from \"./hooks/use-row-swipe\";\nexport type { SwipeStage, RowSwipeOptions, RowSwipeReturn } from \"./hooks/use-row-swipe\";\n// Any element as a file drop target, screened like FileButton (kastlan).\nexport { useFileDrop, dragHasFiles } from \"./hooks/use-file-drop\";\nexport type { UseFileDropOptions, UseFileDropReturn, FileDropProps } from \"./hooks/use-file-drop\";\n// kastlan's search boxes each carried a hand-rolled copy, two without the cleanup.\nexport { useDebounce, useDebouncedCallback } from \"./hooks/use-debounce\";\nexport type { DebouncedCallbackOptions, DebouncedFunction } from \"./hooks/use-debounce\";\n// One search param as state, the active tab in `?tab=`, and a dialog's open state in the\n// URL (Modal's `urlParam`) — kastlan's and keksdose's use-search-param-state, in the kit.\nexport { useSearchParamState, useTabParam, useDialogParam } from \"./hooks/use-search-param-state\";\nexport type { SearchParamStateOptions, DialogParam } from \"./hooks/use-search-param-state\";\n// Copy that reports whether it worked — keksdose's copy buttons said \"Copied\" when it had not.\nexport { useCopyToClipboard, copyToClipboard } from \"./hooks/use-copy-to-clipboard\";\nexport type { CopyState, UseCopyToClipboardOptions, UseCopyToClipboardReturn } from \"./hooks/use-copy-to-clipboard\";\n// Keyboard shortcuts (\"Mod+K\", \"Ctrl+Shift+F\") that leave typing in fields alone.\nexport { useHotkey, parseHotkey, matchesHotkey } from \"./hooks/use-hotkey\";\nexport type { Hotkey, ParsedHotkey, UseHotkeyOptions } from \"./hooks/use-hotkey\";\n// A protected file as an object URL, fetched with the app's own auth (kastlan's AuthedImage).\nexport { useAuthedSrc } from \"./hooks/use-authed-src\";\nexport type { AuthedFetcher, AuthedSrcStatus, UseAuthedSrcOptions, UseAuthedSrcResult } from \"./hooks/use-authed-src\";\n\n// ── theme / palettes ─────────────────────────────────────────────────────────\nexport * from \"./theme/chart-palette\";\n// Colour maths (sRGB ↔ OKLCH, WCAG contrast, CVD simulation) and the palette deriver\n// that builds a whole, contrast-solved palette from one brand colour plus any colours\n// pinned by hand. `auditPalette` / `auditChartRamp` measure a palette rather than\n// trusting a comment about it.\nexport * from \"./theme/color\";\nexport * from \"./theme/palette-derive\";\nexport * from \"./theme/palette-presets\";\nexport * from \"./theme/theme-store\";\nexport * from \"./theme/palette-store\";\n\n// ── components ───────────────────────────────────────────────────────────────\nexport * from \"./components/ui\";\n// The label-ABOVE field group (label, hint, error, required), inside wizards or out.\nexport * from \"./components/field\";\nexport * from \"./components/search-field\";\nexport * from \"./components/dropdown\";\nexport * from \"./components/popover\";\nexport { SwipeableRow } from \"./components/swipeable-row\";\nexport type { SwipeAction, SwipeableRowProps } from \"./components/swipeable-row\";\nexport * from \"./components/calculator\";\nexport * from \"./components/numpad-sheet\";\nexport * from \"./components/number-input\";\nexport * from \"./components/currency-select\";\nexport * from \"./components/amount-input\";\nexport * from \"./components/money-field\";\nexport * from \"./components/combobox\";\nexport * from \"./components/picker-sheet\";\nexport * from \"./components/entity-combobox\";\nexport * from \"./components/multi-entity-combobox\";\nexport * from \"./components/multi-select\";\nexport * from \"./components/tooltip\";\nexport * from \"./components/user-avatar\";\nexport * from \"./components/settings-fields\";\n// Sync state for a database-backed field: the engine (`useFieldSync`) and the\n// affordance (`FieldSyncIndicator`), kept separate because the state is useful\n// without the dot — a form can gate its submit on any field being `pending`.\nexport * from \"./components/field-sync\";\nexport * from \"./components/month-picker\";\nexport * from \"./components/checkbox\";\nexport * from \"./components/switch\";\nexport * from \"./components/slider\";\nexport * from \"./components/time-input\";\nexport * from \"./components/number-field\";\nexport * from \"./components/sparkline\";\nexport * from \"./components/stat-tile\";\nexport * from \"./components/signature-pad\";\nexport * from \"./components/password-strength\";\nexport * from \"./components/page-contents\";\nexport * from \"./components/disclosure\";\nexport * from \"./components/dialog-frame\";\n// Named, not `*`: danger-confirm also holds the password field and pending hook that\n// ReauthDialog shares with it, which are kit-internal.\nexport {\n DangerConfirm,\n DEFAULT_DANGER_CONFIRM_LABELS,\n typedMatches,\n // 0.22.0: the typed-confirmation field on its own (keksdose K7) and the current-password\n // field kastlan wants for sign-in and re-authentication (kastlan 1).\n TypedConfirmField,\n CurrentPasswordInput,\n} from \"./components/danger-confirm\";\nexport type {\n DangerConfirmLabels,\n DangerConfirmProps,\n TypedMatch,\n DangerConsequence,\n TypedConfirmFieldProps,\n TypedConfirmFieldLabels,\n CurrentPasswordInputProps,\n CurrentPasswordInputLabels,\n} from \"./components/danger-confirm\";\n// 0.18: re-authentication before a sensitive action (Kurvenschmiede 4).\nexport { ReauthDialog, DEFAULT_REAUTH_DIALOG_LABELS } from \"./components/reauth-dialog\";\nexport type { ReauthDialogProps, ReauthDialogLabels } from \"./components/reauth-dialog\";\n// `useConfirm()` — the promise-based replacement for `window.confirm`, one host per app.\nexport * from \"./components/confirm-dialog\";\n// A non-modal corner panel and its round trigger (keksdose's assistant launcher).\nexport * from \"./components/floating-panel\";\n// The count / clear / actions bar a selection brings up (keksdose's three copies).\nexport * from \"./components/bulk-action-bar\";\nexport * from \"./components/swatch-picker\";\nexport * from \"./components/icon-picker\";\nexport * from \"./components/choice-card\";\nexport * from \"./components/autocomplete\";\nexport * from \"./components/measured-grid\";\nexport { useWindowedRows } from \"./hooks/use-windowed-rows\";\nexport type { WindowedRows } from \"./hooks/use-windowed-rows\";\n// Named, not `export *`: file-button.tsx also holds the screening helpers the\n// dropzone shares, which are internal.\nexport { FileButton, useFilePicker, matchesAccept, DEFAULT_FILE_PICKER_LABELS } from \"./components/file-button\";\nexport type {\n FileButtonProps,\n UseFilePickerOptions,\n UseFilePickerReturn,\n FilePickerLabels,\n FileRejection,\n FileRejectionReason,\n FileScreenOptions,\n} from \"./components/file-button\";\nexport * from \"./components/treemap\";\nexport * from \"./components/series-chart\";\nexport * from \"./components/chart-zoom\";\nexport * from \"./components/toggle-legend\";\nexport * from \"./components/facing-pair\";\nexport * from \"./components/series-chart-labels\";\nexport * from \"./components/pie-chart\";\nexport * from \"./components/pie-chart-labels\";\nexport * from \"./components/account-settings\";\n// 0.12.0: the fourth account section, and the QR code TwoFactorSetting draws its\n// otpauth URI with (encoder in lib/qr-encode.ts — no dependency, see there).\nexport * from \"./components/passkeys-setting\";\nexport * from \"./components/qr-code\";\nexport { encodeQr } from \"./lib/qr-encode\";\nexport type { QrEncodeOptions, QrErrorCorrection, QrMatrix } from \"./lib/qr-encode\";\nexport * from \"./components/alert-banner\";\nexport * from \"./components/toggle-group\";\n// A wrapping set of links/buttons marked `aria-current` — Tabs-like looks, not tabs.\nexport * from \"./components/nav-pills\";\n// A pill carrying one VALUE — inert, a link, or a toggle, depending on which prop it is\n// given — and the list field built from it. Distinct from Button on purpose: a row of\n// buttons reads as \"choose an action\", a row of chips as \"here are the things\".\nexport * from \"./components/chip\";\nexport * from \"./components/wizard-stepper\";\nexport * from \"./components/hover-menu\";\nexport * from \"./components/modal\";\nexport * from \"./components/full-bleed-dialog\";\nexport * from \"./components/grouped-picker\";\nexport * from \"./components/file-dropzone\";\nexport * from \"./components/mini-calendar\";\nexport * from \"./components/calendar-heatmap\";\nexport * from \"./components/date-picker\";\nexport * from \"./components/tree-view\";\nexport * from \"./components/chart\";\n// 0.8.0 layout and feedback primitives the apps hand-rolled or took from shadcn/Radix.\nexport * from \"./components/description-list\";\n// The Save / Cancel row forms and dialogs end in, and the editable line-item repeater\n// (journal lines, lease components, invoice positions). 0.12.0.\nexport * from \"./components/form-actions\";\n// 0.18: lock every opted-in commit under one provider, the reason in its tooltip\n// (Kurvenschmiede 2). `useCommitReason` stays internal.\nexport { WriteLockProvider, useWriteLock, DEFAULT_WRITE_LOCK_LABELS } from \"./components/write-lock\";\nexport type { WriteLock, WriteLockLabels, WriteLockProviderProps } from \"./components/write-lock\";\n// 0.18: the parts both apps' admin rosters repeat (Kurvenschmiede 6).\nexport { RoleChip, AccountStateChip, DateMark, dateColumn, DEFAULT_ACCOUNT_STATE_LABELS, ACCOUNT_STATE_TONES } from \"./components/account-chips\";\nexport type { RoleChipProps, RoleDefinition, RoleVocabulary, AccountState, AccountStateLabels, AccountStateChipProps, DateMarkProps, DateColumnOptions } from \"./components/account-chips\";\n// 0.18: the cold-start notice keksdose built (#199), for every app: a framework-free\n// watchdog over the app's requests and the corner notice that explains the wait.\nexport { createServerWake, serverWake, watchReadsAnd, attachServerWake, wrapFetch } from \"./lib/server-wake\";\nexport type { ServerWakeStage, ServerWakeFilter, ServerWakeOptions, ServerWakeRequest, ServerWakeWatcher, ServerWakeAxiosConfig, AxiosLikeInstance } from \"./lib/server-wake\";\nexport { ServerWakeNotice, useServerWakeStage, DEFAULT_SERVER_WAKE_LABELS } from \"./components/server-wake\";\nexport type { ServerWakeLabels, ServerWakeNoticeProps } from \"./components/server-wake\";\n// 0.18: sharing — grantees, roles, pending grants, candidates (Kurvenschmiede 1).\nexport { ShareCard, ShareDialog, SharePanel, DEFAULT_SHARE_CARD_LABELS } from \"./components/share-card\";\nexport type { ShareCardProps, ShareDialogProps, SharePanelProps, ShareCardLabels, ShareRole, ShareGrantee, SharePendingGrant, ShareCandidate, ShareAddRequest } from \"./components/share-card\";\nexport * from \"./components/line-items\";\nexport * from \"./components/progress-bar\";\n// Named: skeleton.tsx also holds SKELETON_CLASS, the look StatTile shares — internal.\nexport { Skeleton } from \"./components/skeleton\";\nexport type { SkeletonProps, SkeletonShape } from \"./components/skeleton\";\n// 0.12.0: a centred spinner with words, signed figures and deltas, a render-error fallback.\nexport * from \"./components/loading-state\";\nexport * from \"./components/signed-amount\";\nexport * from \"./components/error-boundary\";\nexport * from \"./components/copy-button\";\nexport { AuthedImage, DEFAULT_AUTHED_IMAGE_LABELS } from \"./components/authed-image\";\nexport type { AuthedImageProps, AuthedImageLabels } from \"./components/authed-image\";\nexport * from \"./components/image-grid\";\nexport * from \"./components/lightbox\";\nexport * from \"./components/button-group\";\nexport * from \"./components/table\";\nexport * from \"./components/separator\";\n// Named: scroll-area.tsx also holds the overflow hook and scrollbar class Table shares.\nexport { ScrollArea } from \"./components/scroll-area\";\nexport type { ScrollAreaProps } from \"./components/scroll-area\";\n// 0.10.0 rows, menu rows, text primitives and page chrome the apps drew by hand.\nexport * from \"./components/list\";\nexport * from \"./components/menu-item\";\nexport * from \"./components/text\";\nexport * from \"./components/status-dot\";\nexport * from \"./components/page-header\";\nexport * from \"./components/breadcrumbs\";\n// The one inline link (kastlan's EntityLink / CellLink / legal and source links), through\n// `<UiKitProvider linkComponent>`. Named: the file also holds the kit's internal link picker.\nexport { TextLink } from \"./components/text-link\";\nexport type {\n TextLinkProps,\n TextLinkRenderProps,\n TextLinkTone,\n TextLinkUnderline,\n TextLinkCurrent,\n} from \"./components/text-link\";\n// The toast layer over sonner (an OPTIONAL peer, loaded lazily): `toast` mirrors sonner's\n// API so apps migrate by swapping the import; `<Toaster>` carries the placement, theme,\n// tones and z-index both apps had wired by hand.\nexport { toast, Toaster, DEFAULT_TOAST_LABELS, TOAST_ACTION_DURATION } from \"./components/toast\";\nexport type {\n ToastId,\n ToastAction,\n ToastOptions,\n ToastPromiseOptions,\n ToastUndoOptions,\n ToastRedoOptions,\n ToastLabels,\n ToastPosition,\n ToastSwipeDirection,\n ToasterOffset,\n ToasterProps,\n} from \"./components/toast\";\n\n// ── data-table suite ─────────────────────────────────────────────────────────\nexport * from \"./components/data-table-labels\";\nexport * from \"./components/data-table-sort\";\nexport * from \"./components/data-table-filters\";\nexport * from \"./components/data-table-pagination\";\nexport { FilterPopover } from \"./components/data-table-filter-popover\";\n// data-table re-exports SortState internally; export the rest explicitly to\n// avoid a duplicate SortState star-export (it comes from data-table-sort).\nexport { DataTable, DEFAULT_DATA_TABLE_SORT_LABELS } from \"./components/data-table\";\nexport type {\n DataTableSortLabels,\n DataTableColumn,\n DataTableCellProps,\n DataTableHeadProps,\n DataTableProps,\n ServerPagination,\n FilterState,\n MobileSwipeActions,\n DataTableDensity,\n DataTableChrome,\n DataTableRowAction,\n} from \"./components/data-table\";\n// 0.12.0: the yes/no cell, and a server table's state held by its owner, URL-synced.\nexport * from \"./components/data-table-cells\";\nexport { useTableUrlState, readTableUrlState } from \"./components/use-table-state\";\nexport type {\n TableUrlState,\n TableUrlSync,\n TableUrlStateProps,\n UseTableUrlStateOptions,\n UseTableUrlStateReturn,\n} from \"./components/use-table-state\";\n\n// ── shell (composable app chrome) ────────────────────────────────────────────\nexport * from \"./shell/topbar-controls\";\nexport * from \"./shell/top-bar\";\nexport * from \"./shell/app-shell\";\nexport * from \"./shell/option-switcher-menu\";\nexport * from \"./shell/role-switcher\";\nexport * from \"./shell/topbar-action-menu\";\nexport * from \"./shell/top-bar-brand\";\nexport * from \"./shell/auth-layout\";\n\n// ── feedback ─────────────────────────────────────────────────────────────────\n// The form somebody files a report with, and the parts an inbox is built from:\n// the status vocabulary both apps share value for value, the policy about what a\n// row may move to from where it stands, and the look of a status control, a\n// category badge and an opened report. The app still wires its own API, columns\n// and strings — see the note at the top of `feedback-inbox.tsx` for what is\n// deliberately left to it.\nexport * from \"./feedback/feedback-attachment\";\nexport * from \"./feedback/feedback-dialog\";\nexport * from \"./feedback/feedback-inbox\";\nexport * from \"./feedback/feedback-thread\";\n\n// ── multi-step wizard ────────────────────────────────────────────────────────\n// The engine (step machine, validators, collected data), the chrome around it\n// (indicator + nav bar + cancel confirm) and the review step it ends on.\n// `components/wizard-stepper` next door is a different, much smaller thing: a bare\n// step indicator for a two-step import flow, with no engine.\n//\n// Two modules were removed here rather than kept as stock. `wizard-field` held a\n// `WizardField`/`WizardSelectField` pair that had never been rendered in any app —\n// a field group nothing was built from, which this comment used to advertise. And\n// `use-rhf-wizard-step` was the only thing in the package that touched\n// react-hook-form, for a hook neither consumer called: keeping it meant an optional\n// peer, a dev dependency and a type import in every consumer's typecheck, bought\n// for nobody. A design system may carry stock; untested stock nothing has ever\n// rendered is not stock, it is a liability with an export.\nexport * from \"./wizard/types\";\nexport * from \"./wizard/use-wizard\";\nexport * from \"./wizard/wizard-context\";\nexport * from \"./wizard/validation\";\nexport * from \"./wizard/wizard-step\";\nexport * from \"./wizard/wizard-summary\";\nexport * from \"./wizard/stepper-nav\";\n\n// ── guided tours ─────────────────────────────────────────────────────────────\nexport * from \"./tour/tour\";\n\n// ── command palette / global search ──────────────────────────────────────────\nexport * from \"./search/command-palette\";\nexport * from \"./search/search-index\";\nexport * from \"./search/global-search\";\n\n// ── i18n: one label tree, one optional provider ──────────────────────────────\n// `UiKitLabels` names every string the kit renders; `<UiKitProvider labels locale>`\n// hands a translation to every component below it. Precedence: a component's own\n// prop > the provider > the English default. See src/i18n/kit-labels.tsx.\nexport * from \"./i18n/kit-labels\";\nexport * from \"./i18n/defaults\";\n// The kit's words as `key → text` rows for an app's translation review (keksdose).\nexport { kitLabelStrings } from \"./i18n/review\";\n// The seven languages, how an app resolves one, and the kit catalogue loader for it.\nexport * from \"./i18n/languages\";\n// CLDR plural categories for an app's i18next catalogue, filled from `_other`.\nexport { withAllPlurals } from \"./i18n/plurals\";\n// Translation review (0.19): one contract for kastlan's and keksdose's review pages —\n// the pure rows/status/placeholder logic and the presentational page parts.\nexport {\n REVIEW_STATUSES,\n fromApiReview,\n toApiWrite,\n flattenStrings,\n keyNamespace,\n placeholderTokens,\n placeholderMismatch,\n reviewStatus,\n keyInArea,\n keyInAreas,\n translationRows,\n summariseRows,\n DEFAULT_TRANSLATION_REVIEW_FILTER,\n filterTranslationRows,\n reviewWrite,\n mergeReviews,\n dropReviews,\n translationCorrections,\n} from \"./lib/translation-review\";\nexport type {\n TranslationVerdict,\n TranslationReview,\n TranslationReviewWrite,\n TranslationReviewKey,\n ReviewStatus,\n TranslationRow,\n ApiTranslationReview,\n ApiTranslationReviewWrite,\n TranslationRowsInput,\n TranslationSummary,\n TranslationReviewFilter,\n TranslationCorrection,\n} from \"./lib/translation-review\";\nexport {\n TranslationReviewPanel,\n TranslationReviewEditor,\n ReviewStatusChip,\n TranslationProgress,\n TranslationLocaleTabs,\n TranslationExportButton,\n REVIEW_STATUS_TONES,\n DEFAULT_TRANSLATION_REVIEW_LABELS,\n} from \"./components/translation-review\";\nexport type {\n TranslationReviewPanelProps,\n TranslationReviewEditorProps,\n ReviewStatusChipProps,\n TranslationProgressProps,\n TranslationLocaleTab,\n TranslationLocaleTabsProps,\n TranslationExportButtonProps,\n TranslationReviewLabels,\n} from \"./components/translation-review\";\n// The legal pages' shell (0.19, H10): Imprint, Privacy Policy, Terms in every app.\nexport { LegalLayout, LegalSection, LegalLinks, DEFAULT_LEGAL_LABELS } from \"./components/legal\";\nexport type { LegalLabels, LegalLink, LegalLinksProps, LegalSectionProps, LegalLayoutProps } from \"./components/legal\";\n\n// ── 0.22.0: the inputs round (kastlan's, keksdose's and Kurvenschmiede's audits) ──\nexport * from \"./components/checkbox-group\";\nexport * from \"./components/one-time-code-input\";\nexport * from \"./components/language-select\";\nexport * from \"./components/tile-radio\";\nexport * from \"./components/inline-edit-field\";\nexport * from \"./components/sign-chip\";\nexport * from \"./components/country-select\";\nexport { COUNTRY_CODES, countryName } from \"./lib/countries\";\nexport * from \"./components/iban-input\";\nexport {\n IBAN_LENGTHS,\n compactIban,\n formatIban,\n ibanCheckDigits,\n ibanProblem,\n isValidIban,\n isQrIban,\n} from \"./lib/iban\";\nexport type { IbanKind, IbanProblem } from \"./lib/iban\";\nexport { formatIsin, isinCheckDigit, isValidIsin } from \"./lib/isin\";\nexport * from \"./components/phone-input\";\nexport {\n PHONE_DIAL_CODES,\n PHONE_COUNTRIES,\n parsePhone,\n formatNationalPhone,\n formatPhone,\n isE164,\n} from \"./lib/phone\";\nexport type { PhoneCountryCode, PhoneCountry, ParsedPhone } from \"./lib/phone\";\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// @eifi1/ui-kit — shared design-system barrel.\n//\n// Domain-free UI + theme surface shared across apps (lead app: Keksdose). Consumers import\n// components/theme from \"@eifi1/ui-kit\" and the token stylesheet from \"@eifi1/ui-kit/tokens.css\".\n\n// ── lib ────────────────────────────────────────────────────────────────────\nexport * from \"./lib/calc\";\nexport { cn } from \"./lib/cn\";\nexport { logger, setStoreLog } from \"./lib/logger\";\n// Intl number / money / percent / date / relative-time formatting, and `useKitFormat()`\n// for the same bound to the provider's locale (kastlan's formatters.ts, English \"5m ago\").\nexport * from \"./lib/format\";\n// localStorage that never throws (Safari private mode, blocked site data).\nexport { readStored, writeStored } from \"./lib/safe-storage\";\n// Date helpers are also available via the \"@eifi1/ui-kit/dates\" subpath.\n\n// ── hooks ────────────────────────────────────────────────────────────────────\nexport { useMediaQuery } from \"./hooks/use-media-query\";\nexport { useBodyScrollLock } from \"./hooks/use-body-scroll-lock\";\nexport { useAnchoredRect } from \"./hooks/use-anchored-rect\";\nexport type { AnchorRect } from \"./hooks/use-anchored-rect\";\nexport { useAnchoredPanel, anchoredPanelPlacement, useVisualViewport } from \"./hooks/use-anchored-panel\";\nexport type {\n AnchoredPanel,\n AnchoredPanelOptions,\n ViewportBox,\n} from \"./hooks/use-anchored-panel\";\nexport { useEscapeKey, useOutsideClick } from \"./hooks/use-dismiss\";\n// Focus containment for an overlay, and a live region for a change that moves no focus.\n// Both were extracted from the two components that already did them correctly (Modal and\n// CommandPalette) so the rest of the kit stops being the exception.\nexport { useFocusTrap } from \"./hooks/use-focus-trap\";\nexport type { FocusTrapOptions } from \"./hooks/use-focus-trap\";\nexport { useAnnounce } from \"./hooks/use-announce\";\nexport type { UseAnnounceReturn, UseAnnounceOptions, AnnounceRegionProps } from \"./hooks/use-announce\";\nexport { useOverlayHistory } from \"./hooks/use-overlay-history\";\nexport { useCloseTransition, OVERLAY_EXIT_MS } from \"./hooks/use-close-transition\";\nexport { useRowSwipe } from \"./hooks/use-row-swipe\";\nexport type { SwipeStage, RowSwipeOptions, RowSwipeReturn } from \"./hooks/use-row-swipe\";\n// Any element as a file drop target, screened like FileButton (kastlan).\nexport { useFileDrop, dragHasFiles } from \"./hooks/use-file-drop\";\nexport type { UseFileDropOptions, UseFileDropReturn, FileDropProps } from \"./hooks/use-file-drop\";\n// kastlan's search boxes each carried a hand-rolled copy, two without the cleanup.\nexport { useDebounce, useDebouncedCallback } from \"./hooks/use-debounce\";\nexport type { DebouncedCallbackOptions, DebouncedFunction } from \"./hooks/use-debounce\";\n// One search param as state, the active tab in `?tab=`, and a dialog's open state in the\n// URL (Modal's `urlParam`) — kastlan's and keksdose's use-search-param-state, in the kit.\nexport { useSearchParamState, useTabParam, useDialogParam } from \"./hooks/use-search-param-state\";\nexport type { SearchParamStateOptions, DialogParam } from \"./hooks/use-search-param-state\";\n// Copy that reports whether it worked — keksdose's copy buttons said \"Copied\" when it had not.\nexport { useCopyToClipboard, copyToClipboard } from \"./hooks/use-copy-to-clipboard\";\nexport type { CopyState, UseCopyToClipboardOptions, UseCopyToClipboardReturn } from \"./hooks/use-copy-to-clipboard\";\n// Keyboard shortcuts (\"Mod+K\", \"Ctrl+Shift+F\") that leave typing in fields alone.\nexport { useHotkey, parseHotkey, matchesHotkey } from \"./hooks/use-hotkey\";\nexport type { Hotkey, ParsedHotkey, UseHotkeyOptions } from \"./hooks/use-hotkey\";\n// A protected file as an object URL, fetched with the app's own auth (kastlan's AuthedImage).\nexport { useAuthedSrc } from \"./hooks/use-authed-src\";\nexport type { AuthedFetcher, AuthedSrcStatus, UseAuthedSrcOptions, UseAuthedSrcResult } from \"./hooks/use-authed-src\";\n\n// ── theme / palettes ─────────────────────────────────────────────────────────\nexport * from \"./theme/chart-palette\";\n// Colour maths (sRGB ↔ OKLCH, WCAG contrast, CVD simulation) and the palette deriver\n// that builds a whole, contrast-solved palette from one brand colour plus any colours\n// pinned by hand. `auditPalette` / `auditChartRamp` measure a palette rather than\n// trusting a comment about it.\nexport * from \"./theme/color\";\nexport * from \"./theme/palette-derive\";\nexport * from \"./theme/palette-presets\";\nexport * from \"./theme/theme-store\";\nexport * from \"./theme/palette-store\";\n\n// ── components ───────────────────────────────────────────────────────────────\nexport * from \"./components/ui\";\n// The label-ABOVE field group (label, hint, error, required), inside wizards or out.\nexport * from \"./components/field\";\nexport * from \"./components/search-field\";\nexport * from \"./components/dropdown\";\nexport * from \"./components/popover\";\nexport { SwipeableRow } from \"./components/swipeable-row\";\nexport type { SwipeAction, SwipeableRowProps } from \"./components/swipeable-row\";\nexport * from \"./components/calculator\";\nexport * from \"./components/numpad-sheet\";\nexport * from \"./components/number-input\";\nexport * from \"./components/currency-select\";\nexport * from \"./components/amount-input\";\nexport * from \"./components/money-field\";\nexport * from \"./components/combobox\";\nexport * from \"./components/picker-sheet\";\nexport * from \"./components/entity-combobox\";\nexport * from \"./components/multi-entity-combobox\";\nexport * from \"./components/multi-select\";\nexport * from \"./components/tooltip\";\nexport * from \"./components/user-avatar\";\nexport * from \"./components/settings-fields\";\n// Sync state for a database-backed field: the engine (`useFieldSync`) and the\n// affordance (`FieldSyncIndicator`), kept separate because the state is useful\n// without the dot — a form can gate its submit on any field being `pending`.\nexport * from \"./components/field-sync\";\nexport * from \"./components/month-picker\";\nexport * from \"./components/checkbox\";\nexport * from \"./components/switch\";\nexport * from \"./components/slider\";\nexport * from \"./components/time-input\";\nexport * from \"./components/number-field\";\nexport * from \"./components/sparkline\";\nexport * from \"./components/stat-tile\";\nexport * from \"./components/signature-pad\";\nexport * from \"./components/password-strength\";\nexport * from \"./components/page-contents\";\nexport * from \"./components/disclosure\";\nexport * from \"./components/dialog-frame\";\n// Named, not `*`: danger-confirm also holds the password field and pending hook that\n// ReauthDialog shares with it, which are kit-internal.\nexport {\n DangerConfirm,\n DEFAULT_DANGER_CONFIRM_LABELS,\n typedMatches,\n // 0.22.0: the typed-confirmation field on its own (keksdose K7) and the current-password\n // field kastlan wants for sign-in and re-authentication (kastlan 1).\n TypedConfirmField,\n CurrentPasswordInput,\n} from \"./components/danger-confirm\";\nexport type {\n DangerConfirmLabels,\n DangerConfirmProps,\n TypedMatch,\n DangerConsequence,\n TypedConfirmFieldProps,\n TypedConfirmFieldLabels,\n CurrentPasswordInputProps,\n CurrentPasswordInputLabels,\n // 0.23.0: onConfirm's second argument — the guards' values (keksdose G4b).\n DangerConfirmValues,\n} from \"./components/danger-confirm\";\n// 0.18: re-authentication before a sensitive action (Kurvenschmiede 4).\nexport { ReauthDialog, DEFAULT_REAUTH_DIALOG_LABELS } from \"./components/reauth-dialog\";\nexport type { ReauthDialogProps, ReauthDialogLabels } from \"./components/reauth-dialog\";\n// `useConfirm()` — the promise-based replacement for `window.confirm`, one host per app.\nexport * from \"./components/confirm-dialog\";\n// A non-modal corner panel and its round trigger (keksdose's assistant launcher).\nexport * from \"./components/floating-panel\";\n// The count / clear / actions bar a selection brings up (keksdose's three copies).\nexport * from \"./components/bulk-action-bar\";\nexport * from \"./components/swatch-picker\";\nexport * from \"./components/icon-picker\";\nexport * from \"./components/choice-card\";\nexport * from \"./components/autocomplete\";\nexport * from \"./components/measured-grid\";\nexport { useWindowedRows } from \"./hooks/use-windowed-rows\";\nexport type { WindowedRows } from \"./hooks/use-windowed-rows\";\n// Named, not `export *`: file-button.tsx also holds the screening helpers the\n// dropzone shares, which are internal.\nexport { FileButton, useFilePicker, matchesAccept, DEFAULT_FILE_PICKER_LABELS } from \"./components/file-button\";\nexport type {\n FileButtonProps,\n UseFilePickerOptions,\n UseFilePickerReturn,\n FilePickerLabels,\n FileRejection,\n FileRejectionReason,\n FileScreenOptions,\n} from \"./components/file-button\";\nexport * from \"./components/treemap\";\nexport * from \"./components/series-chart\";\nexport * from \"./components/chart-zoom\";\nexport * from \"./components/toggle-legend\";\nexport * from \"./components/facing-pair\";\nexport * from \"./components/series-chart-labels\";\nexport * from \"./components/pie-chart\";\nexport * from \"./components/pie-chart-labels\";\nexport * from \"./components/account-settings\";\n// 0.12.0: the fourth account section, and the QR code TwoFactorSetting draws its\n// otpauth URI with (encoder in lib/qr-encode.ts — no dependency, see there).\nexport * from \"./components/passkeys-setting\";\nexport * from \"./components/qr-code\";\nexport { encodeQr } from \"./lib/qr-encode\";\nexport type { QrEncodeOptions, QrErrorCorrection, QrMatrix } from \"./lib/qr-encode\";\nexport * from \"./components/alert-banner\";\nexport * from \"./components/toggle-group\";\n// A wrapping set of links/buttons marked `aria-current` — Tabs-like looks, not tabs.\nexport * from \"./components/nav-pills\";\n// A pill carrying one VALUE — inert, a link, or a toggle, depending on which prop it is\n// given — and the list field built from it. Distinct from Button on purpose: a row of\n// buttons reads as \"choose an action\", a row of chips as \"here are the things\".\nexport * from \"./components/chip\";\nexport * from \"./components/wizard-stepper\";\nexport * from \"./components/hover-menu\";\nexport * from \"./components/modal\";\nexport * from \"./components/full-bleed-dialog\";\nexport * from \"./components/grouped-picker\";\nexport * from \"./components/file-dropzone\";\nexport * from \"./components/mini-calendar\";\nexport * from \"./components/calendar-heatmap\";\nexport * from \"./components/date-picker\";\nexport * from \"./components/tree-view\";\nexport * from \"./components/chart\";\n// 0.8.0 layout and feedback primitives the apps hand-rolled or took from shadcn/Radix.\nexport * from \"./components/description-list\";\n// The Save / Cancel row forms and dialogs end in, and the editable line-item repeater\n// (journal lines, lease components, invoice positions). 0.12.0.\nexport * from \"./components/form-actions\";\n// 0.18: lock every opted-in commit under one provider, the reason in its tooltip\n// (Kurvenschmiede 2). `useCommitReason` stays internal.\nexport { WriteLockProvider, useWriteLock, DEFAULT_WRITE_LOCK_LABELS } from \"./components/write-lock\";\nexport type { WriteLock, WriteLockLabels, WriteLockProviderProps } from \"./components/write-lock\";\n// 0.18: the parts both apps' admin rosters repeat (Kurvenschmiede 6).\nexport { RoleChip, AccountStateChip, DateMark, dateColumn, DEFAULT_ACCOUNT_STATE_LABELS, ACCOUNT_STATE_TONES } from \"./components/account-chips\";\nexport type { RoleChipProps, RoleDefinition, RoleVocabulary, AccountState, AccountStateLabels, AccountStateChipProps, DateMarkProps, DateColumnOptions } from \"./components/account-chips\";\n// 0.18: the cold-start notice keksdose built (#199), for every app: a framework-free\n// watchdog over the app's requests and the corner notice that explains the wait.\nexport { createServerWake, serverWake, watchReadsAnd, attachServerWake, wrapFetch } from \"./lib/server-wake\";\nexport type { ServerWakeStage, ServerWakeFilter, ServerWakeOptions, ServerWakeRequest, ServerWakeWatcher, ServerWakeAxiosConfig, AxiosLikeInstance } from \"./lib/server-wake\";\nexport { ServerWakeNotice, useServerWakeStage, DEFAULT_SERVER_WAKE_LABELS } from \"./components/server-wake\";\nexport type { ServerWakeLabels, ServerWakeNoticeProps } from \"./components/server-wake\";\n// 0.18: sharing — grantees, roles, pending grants, candidates (Kurvenschmiede 1).\nexport { ShareCard, ShareDialog, SharePanel, DEFAULT_SHARE_CARD_LABELS } from \"./components/share-card\";\nexport type { ShareCardProps, ShareDialogProps, SharePanelProps, ShareCardLabels, ShareRole, ShareGrantee, SharePendingGrant, ShareCandidate, ShareAddRequest } from \"./components/share-card\";\nexport * from \"./components/line-items\";\nexport * from \"./components/progress-bar\";\n// Named: skeleton.tsx also holds SKELETON_CLASS, the look StatTile shares — internal.\nexport { Skeleton } from \"./components/skeleton\";\nexport type { SkeletonProps, SkeletonShape } from \"./components/skeleton\";\n// 0.12.0: a centred spinner with words, signed figures and deltas, a render-error fallback.\nexport * from \"./components/loading-state\";\nexport * from \"./components/signed-amount\";\nexport * from \"./components/error-boundary\";\nexport * from \"./components/copy-button\";\nexport { AuthedImage, DEFAULT_AUTHED_IMAGE_LABELS } from \"./components/authed-image\";\nexport type { AuthedImageProps, AuthedImageLabels } from \"./components/authed-image\";\nexport * from \"./components/image-grid\";\nexport * from \"./components/lightbox\";\nexport * from \"./components/button-group\";\nexport * from \"./components/table\";\nexport * from \"./components/separator\";\n// Named: scroll-area.tsx also holds the overflow hook and scrollbar class Table shares.\nexport { ScrollArea } from \"./components/scroll-area\";\nexport type { ScrollAreaProps } from \"./components/scroll-area\";\n// 0.10.0 rows, menu rows, text primitives and page chrome the apps drew by hand.\nexport * from \"./components/list\";\nexport * from \"./components/menu-item\";\nexport * from \"./components/text\";\nexport * from \"./components/status-dot\";\nexport * from \"./components/page-header\";\nexport * from \"./components/breadcrumbs\";\n// The one inline link (kastlan's EntityLink / CellLink / legal and source links), through\n// `<UiKitProvider linkComponent>`. Named: the file also holds the kit's internal link picker.\nexport { TextLink } from \"./components/text-link\";\nexport type {\n TextLinkProps,\n TextLinkRenderProps,\n TextLinkTone,\n TextLinkUnderline,\n TextLinkCurrent,\n} from \"./components/text-link\";\n// The toast layer over sonner (an OPTIONAL peer, loaded lazily): `toast` mirrors sonner's\n// API so apps migrate by swapping the import; `<Toaster>` carries the placement, theme,\n// tones and z-index both apps had wired by hand.\nexport { toast, Toaster, DEFAULT_TOAST_LABELS, TOAST_ACTION_DURATION } from \"./components/toast\";\nexport type {\n ToastId,\n ToastAction,\n ToastOptions,\n ToastPromiseOptions,\n ToastUndoOptions,\n ToastRedoOptions,\n ToastLabels,\n ToastPosition,\n ToastSwipeDirection,\n ToasterOffset,\n ToasterProps,\n} from \"./components/toast\";\n\n// ── data-table suite ─────────────────────────────────────────────────────────\nexport * from \"./components/data-table-labels\";\nexport * from \"./components/data-table-sort\";\nexport * from \"./components/data-table-filters\";\nexport * from \"./components/data-table-pagination\";\nexport { FilterPopover } from \"./components/data-table-filter-popover\";\n// data-table re-exports SortState internally; export the rest explicitly to\n// avoid a duplicate SortState star-export (it comes from data-table-sort).\nexport { DataTable, DEFAULT_DATA_TABLE_SORT_LABELS } from \"./components/data-table\";\nexport type {\n DataTableSortLabels,\n DataTableColumn,\n DataTableCellProps,\n DataTableHeadProps,\n DataTableProps,\n ServerPagination,\n FilterState,\n MobileSwipeActions,\n DataTableDensity,\n DataTableChrome,\n DataTableRowAction,\n} from \"./components/data-table\";\n// 0.12.0: the yes/no cell, and a server table's state held by its owner, URL-synced.\nexport * from \"./components/data-table-cells\";\nexport { useTableUrlState, readTableUrlState } from \"./components/use-table-state\";\nexport type {\n TableUrlState,\n TableUrlSync,\n TableUrlStateProps,\n UseTableUrlStateOptions,\n UseTableUrlStateReturn,\n} from \"./components/use-table-state\";\n\n// ── shell (composable app chrome) ────────────────────────────────────────────\nexport * from \"./shell/topbar-controls\";\nexport * from \"./shell/top-bar\";\nexport * from \"./shell/app-shell\";\nexport * from \"./shell/option-switcher-menu\";\nexport * from \"./shell/role-switcher\";\nexport * from \"./shell/topbar-action-menu\";\nexport * from \"./shell/top-bar-brand\";\nexport * from \"./shell/auth-layout\";\n\n// ── feedback ─────────────────────────────────────────────────────────────────\n// The form somebody files a report with, and the parts an inbox is built from:\n// the status vocabulary both apps share value for value, the policy about what a\n// row may move to from where it stands, and the look of a status control, a\n// category badge and an opened report. The app still wires its own API, columns\n// and strings — see the note at the top of `feedback-inbox.tsx` for what is\n// deliberately left to it.\nexport * from \"./feedback/feedback-attachment\";\nexport * from \"./feedback/feedback-dialog\";\nexport * from \"./feedback/feedback-inbox\";\nexport * from \"./feedback/feedback-thread\";\n\n// ── multi-step wizard ────────────────────────────────────────────────────────\n// The engine (step machine, validators, collected data), the chrome around it\n// (indicator + nav bar + cancel confirm) and the review step it ends on.\n// `components/wizard-stepper` next door is a different, much smaller thing: a bare\n// step indicator for a two-step import flow, with no engine.\n//\n// Two modules were removed here rather than kept as stock. `wizard-field` held a\n// `WizardField`/`WizardSelectField` pair that had never been rendered in any app —\n// a field group nothing was built from, which this comment used to advertise. And\n// `use-rhf-wizard-step` was the only thing in the package that touched\n// react-hook-form, for a hook neither consumer called: keeping it meant an optional\n// peer, a dev dependency and a type import in every consumer's typecheck, bought\n// for nobody. A design system may carry stock; untested stock nothing has ever\n// rendered is not stock, it is a liability with an export.\nexport * from \"./wizard/types\";\nexport * from \"./wizard/use-wizard\";\nexport * from \"./wizard/wizard-context\";\nexport * from \"./wizard/validation\";\nexport * from \"./wizard/wizard-step\";\nexport * from \"./wizard/wizard-summary\";\nexport * from \"./wizard/stepper-nav\";\n\n// ── guided tours ─────────────────────────────────────────────────────────────\nexport * from \"./tour/tour\";\n\n// ── command palette / global search ──────────────────────────────────────────\nexport * from \"./search/command-palette\";\nexport * from \"./search/search-index\";\nexport * from \"./search/global-search\";\n\n// ── i18n: one label tree, one optional provider ──────────────────────────────\n// `UiKitLabels` names every string the kit renders; `<UiKitProvider labels locale>`\n// hands a translation to every component below it. Precedence: a component's own\n// prop > the provider > the English default. See src/i18n/kit-labels.tsx.\nexport * from \"./i18n/kit-labels\";\nexport * from \"./i18n/defaults\";\n// The kit's words as `key → text` rows for an app's translation review (keksdose).\nexport { kitLabelStrings } from \"./i18n/review\";\n// The seven languages, how an app resolves one, and the kit catalogue loader for it.\nexport * from \"./i18n/languages\";\n// CLDR plural categories for an app's i18next catalogue, filled from `_other`.\nexport { withAllPlurals } from \"./i18n/plurals\";\n// Translation review (0.19): one contract for kastlan's and keksdose's review pages —\n// the pure rows/status/placeholder logic and the presentational page parts.\nexport {\n REVIEW_STATUSES,\n fromApiReview,\n toApiWrite,\n flattenStrings,\n keyNamespace,\n placeholderTokens,\n placeholderMismatch,\n reviewStatus,\n keyInArea,\n keyInAreas,\n translationRows,\n summariseRows,\n DEFAULT_TRANSLATION_REVIEW_FILTER,\n filterTranslationRows,\n reviewWrite,\n mergeReviews,\n dropReviews,\n translationCorrections,\n} from \"./lib/translation-review\";\nexport type {\n TranslationVerdict,\n TranslationReview,\n TranslationReviewWrite,\n TranslationReviewKey,\n ReviewStatus,\n TranslationRow,\n ApiTranslationReview,\n ApiTranslationReviewWrite,\n TranslationRowsInput,\n TranslationSummary,\n TranslationReviewFilter,\n TranslationCorrection,\n} from \"./lib/translation-review\";\nexport {\n TranslationReviewPanel,\n TranslationReviewEditor,\n ReviewStatusChip,\n TranslationProgress,\n TranslationLocaleTabs,\n TranslationExportButton,\n REVIEW_STATUS_TONES,\n DEFAULT_TRANSLATION_REVIEW_LABELS,\n} from \"./components/translation-review\";\nexport type {\n TranslationReviewPanelProps,\n TranslationReviewEditorProps,\n ReviewStatusChipProps,\n TranslationProgressProps,\n TranslationLocaleTab,\n TranslationLocaleTabsProps,\n TranslationExportButtonProps,\n TranslationReviewLabels,\n} from \"./components/translation-review\";\n// The legal pages' shell (0.19, H10): Imprint, Privacy Policy, Terms in every app.\nexport { LegalLayout, LegalSection, LegalLinks, DEFAULT_LEGAL_LABELS } from \"./components/legal\";\nexport type { LegalLabels, LegalLink, LegalLinksProps, LegalSectionProps, LegalLayoutProps } from \"./components/legal\";\n\n// ── 0.22.0: the inputs round (kastlan's, keksdose's and Kurvenschmiede's audits) ──\nexport * from \"./components/checkbox-group\";\nexport * from \"./components/one-time-code-input\";\nexport * from \"./components/language-select\";\nexport * from \"./components/tile-radio\";\nexport * from \"./components/inline-edit-field\";\nexport * from \"./components/sign-chip\";\nexport * from \"./components/country-select\";\nexport { COUNTRY_CODES, countryName } from \"./lib/countries\";\nexport * from \"./components/iban-input\";\nexport {\n IBAN_LENGTHS,\n compactIban,\n formatIban,\n ibanCheckDigits,\n ibanProblem,\n isValidIban,\n isQrIban,\n} from \"./lib/iban\";\nexport type { IbanKind, IbanProblem } from \"./lib/iban\";\nexport { formatIsin, isinCheckDigit, isValidIsin } from \"./lib/isin\";\nexport * from \"./components/phone-input\";\nexport {\n PHONE_DIAL_CODES,\n PHONE_COUNTRIES,\n parsePhone,\n formatNationalPhone,\n formatPhone,\n isE164,\n} from \"./lib/phone\";\nexport type { PhoneCountryCode, PhoneCountry, ParsedPhone } from \"./lib/phone\";\n\n// ── 0.23.0: the apps' 0.22 adoption round (kastlan, keksdose, Kurvenschmiede) ──\n// The label strip over custom content (keksdose G8).\nexport * from \"./components/field-strip\";\n// Paste or drop a table, give each column a role (Kurvenschmiede's columns input,\n// keksdose's import map step). The lexer itself stays in `@eifi1/ui-kit/table-text`.\nexport * from \"./components/column-mapper\";\nexport {\n assignColumnRole,\n guessMapping,\n missingRoles,\n readMappedTable,\n readTextFile,\n roleOfColumn,\n} from \"./lib/column-mapping\";\nexport type { ColumnMapperResult, ColumnMapping, ColumnRole } from \"./lib/column-mapping\";\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { TextTable } from './table-text.js';
|
|
2
|
+
|
|
3
|
+
/** One part a column can play, defined by the caller. */
|
|
4
|
+
interface ColumnRole<R extends string = string> {
|
|
5
|
+
/** The key the mapping is stored under. */
|
|
6
|
+
value: R;
|
|
7
|
+
/** What the role select shows — translated by the caller. */
|
|
8
|
+
label: string;
|
|
9
|
+
/**
|
|
10
|
+
* `true`: the table cannot be used until a column plays this role. A string names a
|
|
11
|
+
* GROUP: the table needs any one of the roles that share it — keksdose's amount,
|
|
12
|
+
* debit and credit, any of which carries the money.
|
|
13
|
+
*/
|
|
14
|
+
required?: boolean | string;
|
|
15
|
+
/**
|
|
16
|
+
* Every cell this role reads must be a number in the table's decimal convention
|
|
17
|
+
* ({@link tableNumber}). A row where one is not — a footer, a units line, a total
|
|
18
|
+
* with a grouping mark — is moved to `unread` with its line number instead of being
|
|
19
|
+
* handed over. Kurvenschmiede's time, setpoint and actual. The cells stay strings:
|
|
20
|
+
* converting is the caller's, with `tableNumber(cell, result.decimalComma)`.
|
|
21
|
+
*/
|
|
22
|
+
numeric?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Role → column index. A role that is absent or `null` sits on no column — so a
|
|
25
|
+
* mapping with nullable fields (keksdose's `CsvMapping`) is one as it stands. */
|
|
26
|
+
type ColumnMapping<R extends string = string> = Partial<Record<R, number | null>>;
|
|
27
|
+
/** What the table is, read through a mapping. */
|
|
28
|
+
interface ColumnMapperResult<R extends string = string> extends TextTable {
|
|
29
|
+
mapping: ColumnMapping<R>;
|
|
30
|
+
/** What the table still needs before it can be used: one entry per gap, each the
|
|
31
|
+
* roles any of which would fill it (one role, or a required group). */
|
|
32
|
+
missing: R[][];
|
|
33
|
+
/** Every required role placed, and at least one row read. */
|
|
34
|
+
complete: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** The role on this column, or `null` for an ignored one. */
|
|
37
|
+
declare function roleOfColumn<R extends string>(roles: readonly ColumnRole<R>[], mapping: ColumnMapping<R>, column: number): R | null;
|
|
38
|
+
/**
|
|
39
|
+
* Put `role` on `column` — or, with `null`, take the column's role off it.
|
|
40
|
+
*
|
|
41
|
+
* Whatever this column played before stops, and the role moves here from any other
|
|
42
|
+
* column, in one new mapping (keksdose's `assignColumn`: "both halves are patches to
|
|
43
|
+
* the same object"). Other fields of the mapping are kept as they are.
|
|
44
|
+
*/
|
|
45
|
+
declare function assignColumnRole<R extends string, M extends ColumnMapping<R>>(roles: readonly ColumnRole<R>[], mapping: M, column: number, role: R | null): M;
|
|
46
|
+
/**
|
|
47
|
+
* The gaps: each required role with no column, and each required group none of whose
|
|
48
|
+
* roles has one. In the order of `roles`. A column index past `width` is no column.
|
|
49
|
+
*/
|
|
50
|
+
declare function missingRoles<R extends string>(roles: readonly ColumnRole<R>[], mapping: ColumnMapping<R>, width?: number): R[][];
|
|
51
|
+
/**
|
|
52
|
+
* A first mapping for a table nobody has mapped yet.
|
|
53
|
+
*
|
|
54
|
+
* A column whose header IS a role's label or key gets that role. The required roles
|
|
55
|
+
* left over then take the free columns in order — Kurvenschmiede's "time, setpoint,
|
|
56
|
+
* actual are the first three columns", which is how a recorder writes them. Optional
|
|
57
|
+
* roles are not guessed by position: in a bank
|
|
58
|
+
* export of twelve columns, "the fourth role is the fourth column" is a wrong answer
|
|
59
|
+
* presented as a suggestion, and an "ignore" is the honest one.
|
|
60
|
+
*/
|
|
61
|
+
declare function guessMapping<R extends string>(roles: readonly ColumnRole<R>[], header: readonly string[] | null, width: number): ColumnMapping<R>;
|
|
62
|
+
/**
|
|
63
|
+
* The table read through the mapping: the rows every `numeric` role can read, the
|
|
64
|
+
* others moved to `unread` (in line order, with the parse's own), what is missing,
|
|
65
|
+
* and whether the table can be used. Column indexes past the table's width count as
|
|
66
|
+
* unplaced.
|
|
67
|
+
*/
|
|
68
|
+
declare function readMappedTable<R extends string>(table: TextTable, roles: readonly ColumnRole<R>[], mapping: ColumnMapping<R>): ColumnMapperResult<R>;
|
|
69
|
+
/**
|
|
70
|
+
* A dropped or chosen file's text — UTF-8 when it is UTF-8, else Windows-1252.
|
|
71
|
+
*
|
|
72
|
+
* A German bank or bench export is very often written in Windows-1252, and reading it
|
|
73
|
+
* as UTF-8 turns every "ä" in a column name into "�" — no error, just a header nobody
|
|
74
|
+
* recognises. So the bytes are tried as strict UTF-8 first and read as Windows-1252
|
|
75
|
+
* when that fails (keksdose's server sniffs the encoding for the same reason; a file
|
|
76
|
+
* read in the browser had nothing doing it). Falls back to `FileReader` where a `File`
|
|
77
|
+
* has no `arrayBuffer` (Kurvenschmiede's `readText`).
|
|
78
|
+
*/
|
|
79
|
+
declare function readTextFile(file: Blob): Promise<string>;
|
|
80
|
+
|
|
81
|
+
export { type ColumnMapperResult, type ColumnMapping, type ColumnRole, assignColumnRole, guessMapping, missingRoles, readMappedTable, readTextFile, roleOfColumn };
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { tableNumber } from "./table-text.js";
|
|
3
|
+
const placedAt = (mapping, role, width) => {
|
|
4
|
+
const column = mapping[role];
|
|
5
|
+
if (typeof column !== "number") return null;
|
|
6
|
+
return width === void 0 || column < width ? column : null;
|
|
7
|
+
};
|
|
8
|
+
function roleOfColumn(roles, mapping, column) {
|
|
9
|
+
return roles.find((role) => mapping[role.value] === column)?.value ?? null;
|
|
10
|
+
}
|
|
11
|
+
function assignColumnRole(roles, mapping, column, role) {
|
|
12
|
+
const next = { ...mapping };
|
|
13
|
+
for (const { value } of roles) {
|
|
14
|
+
if (mapping[value] === column) next[value] = null;
|
|
15
|
+
}
|
|
16
|
+
if (role !== null) next[role] = column;
|
|
17
|
+
return next;
|
|
18
|
+
}
|
|
19
|
+
function missingRoles(roles, mapping, width) {
|
|
20
|
+
const gaps = [];
|
|
21
|
+
const groups = /* @__PURE__ */ new Set();
|
|
22
|
+
for (const role of roles) {
|
|
23
|
+
if (role.required === true) {
|
|
24
|
+
if (placedAt(mapping, role.value, width) === null) gaps.push([role.value]);
|
|
25
|
+
} else if (typeof role.required === "string" && !groups.has(role.required)) {
|
|
26
|
+
groups.add(role.required);
|
|
27
|
+
const members = roles.filter((other) => other.required === role.required);
|
|
28
|
+
if (members.every((member) => placedAt(mapping, member.value, width) === null)) {
|
|
29
|
+
gaps.push(members.map((member) => member.value));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return gaps;
|
|
34
|
+
}
|
|
35
|
+
const normalised = (text) => text.trim().toLowerCase();
|
|
36
|
+
function guessMapping(roles, header, width) {
|
|
37
|
+
const mapping = {};
|
|
38
|
+
const taken = /* @__PURE__ */ new Set();
|
|
39
|
+
if (header) {
|
|
40
|
+
for (const role of roles) {
|
|
41
|
+
const names = [normalised(role.label), normalised(role.value)];
|
|
42
|
+
const column = header.findIndex((name, index) => !taken.has(index) && names.includes(normalised(name)));
|
|
43
|
+
if (column >= 0) {
|
|
44
|
+
mapping[role.value] = column;
|
|
45
|
+
taken.add(column);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const free = Array.from({ length: width }, (_, index) => index).filter((index) => !taken.has(index));
|
|
50
|
+
for (const role of roles) {
|
|
51
|
+
if (role.required !== true || typeof mapping[role.value] === "number") continue;
|
|
52
|
+
const column = free.shift();
|
|
53
|
+
if (column === void 0) break;
|
|
54
|
+
mapping[role.value] = column;
|
|
55
|
+
}
|
|
56
|
+
return mapping;
|
|
57
|
+
}
|
|
58
|
+
function readMappedTable(table, roles, mapping) {
|
|
59
|
+
const numeric = roles.filter((role) => role.numeric).map((role) => placedAt(mapping, role.value, table.width)).filter((column) => column !== null);
|
|
60
|
+
const rows = [];
|
|
61
|
+
const lines = [];
|
|
62
|
+
const refused = [];
|
|
63
|
+
table.rows.forEach((row, index) => {
|
|
64
|
+
if (numeric.every((column) => Number.isFinite(tableNumber(row[column] ?? "", table.decimalComma)))) {
|
|
65
|
+
rows.push(row);
|
|
66
|
+
lines.push(table.lines[index]);
|
|
67
|
+
} else {
|
|
68
|
+
refused.push(table.lines[index]);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const unread = refused.length ? [...table.unread, ...refused].sort((a, b) => a.line - b.line) : table.unread;
|
|
72
|
+
const missing = missingRoles(roles, mapping, table.width);
|
|
73
|
+
return {
|
|
74
|
+
...table,
|
|
75
|
+
rows,
|
|
76
|
+
lines,
|
|
77
|
+
unread,
|
|
78
|
+
mapping,
|
|
79
|
+
missing,
|
|
80
|
+
complete: missing.length === 0 && rows.length > 0
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
async function readTextFile(file) {
|
|
84
|
+
const bytes = await bytesOf(file);
|
|
85
|
+
try {
|
|
86
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
87
|
+
} catch {
|
|
88
|
+
return new TextDecoder("windows-1252").decode(bytes);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function bytesOf(file) {
|
|
92
|
+
if (typeof file.arrayBuffer === "function") return file.arrayBuffer();
|
|
93
|
+
return new Promise((resolve, reject) => {
|
|
94
|
+
const reader = new FileReader();
|
|
95
|
+
reader.onload = () => resolve(reader.result);
|
|
96
|
+
reader.onerror = () => reject(reader.error ?? new Error("read failed"));
|
|
97
|
+
reader.readAsArrayBuffer(file);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
export {
|
|
101
|
+
assignColumnRole,
|
|
102
|
+
guessMapping,
|
|
103
|
+
missingRoles,
|
|
104
|
+
readMappedTable,
|
|
105
|
+
readTextFile,
|
|
106
|
+
roleOfColumn
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=column-mapping.js.map
|