@eifi1/ui-kit 0.32.2 → 0.33.1
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 +17 -9
- package/dist/account/delete-account-setting.d.ts +11 -10
- package/dist/account/delete-account-setting.js +2 -1
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/account/email-change-setting.d.ts +5 -0
- package/dist/account/email-change-setting.js +4 -3
- package/dist/account/email-change-setting.js.map +1 -1
- package/dist/account/sessions-setting.d.ts +4 -0
- package/dist/account/sessions-setting.js +3 -2
- package/dist/account/sessions-setting.js.map +1 -1
- package/dist/admin/admin-action-confirm.d.ts +11 -10
- package/dist/admin/admin-action-confirm.js.map +1 -1
- package/dist/admin/invitations-panel.d.ts +11 -10
- package/dist/admin/invitations-panel.js +4 -3
- package/dist/admin/invitations-panel.js.map +1 -1
- package/dist/admin/plan-change.d.ts +101 -0
- package/dist/admin/plan-change.js +210 -0
- package/dist/admin/plan-change.js.map +1 -0
- package/dist/admin/reviewer-scope-editor.d.ts +11 -10
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/admin/role-select.d.ts +8 -7
- package/dist/admin/role-select.js.map +1 -1
- package/dist/admin/transfer-ownership-dialog.d.ts +11 -10
- package/dist/admin/user-roster.d.ts +8 -7
- package/dist/admin/user-roster.js +2 -2
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/auth-errors.d.ts +13 -2
- package/dist/auth/auth-errors.js +5 -1
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/complete-name-dialog.d.ts +4 -1
- package/dist/auth/complete-name-dialog.js +2 -1
- package/dist/auth/complete-name-dialog.js.map +1 -1
- package/dist/auth/register-form.d.ts +11 -10
- package/dist/billing/billing-banner.d.ts +14 -11
- package/dist/billing/billing-banner.js.map +1 -1
- package/dist/billing/billing-labels.d.ts +11 -10
- package/dist/billing/billing-labels.js +10 -1
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/billing-lock.d.ts +40 -12
- package/dist/billing/billing-lock.js +9 -3
- package/dist/billing/billing-lock.js.map +1 -1
- package/dist/billing/billing-overview.d.ts +155 -0
- package/dist/billing/billing-overview.js +2 -0
- package/dist/billing/billing-overview.js.map +1 -0
- package/dist/billing/billing-standing.d.ts +11 -10
- package/dist/billing/checkout-processing.d.ts +218 -0
- package/dist/billing/checkout-processing.js +198 -0
- package/dist/billing/checkout-processing.js.map +1 -0
- package/dist/billing/checkout-return.d.ts +51 -0
- package/dist/billing/checkout-return.js +43 -0
- package/dist/billing/checkout-return.js.map +1 -0
- package/dist/billing/pay-page.d.ts +215 -0
- package/dist/billing/pay-page.js +113 -0
- package/dist/billing/pay-page.js.map +1 -0
- package/dist/billing/plan-card.d.ts +11 -10
- package/dist/billing/plan-limit-notice.d.ts +11 -10
- package/dist/billing/plan-limit-toast.d.ts +144 -0
- package/dist/billing/plan-limit-toast.js +40 -0
- package/dist/billing/plan-limit-toast.js.map +1 -0
- package/dist/billing/subscription-actions.d.ts +39 -15
- package/dist/billing/subscription-actions.js +9 -2
- package/dist/billing/subscription-actions.js.map +1 -1
- package/dist/billing/subscription-status-chip.d.ts +10 -9
- package/dist/bin/eifi1-pay-page.mjs +166 -0
- package/dist/chart.d.ts +11 -10
- package/dist/components/account-chips.d.ts +6 -1
- package/dist/components/account-settings.d.ts +4 -1
- package/dist/components/account-settings.js +2 -1
- package/dist/components/account-settings.js.map +1 -1
- package/dist/components/amount-input.d.ts +11 -10
- package/dist/components/autocomplete.d.ts +2 -1
- package/dist/components/autocomplete.js +5 -3
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/button-group.d.ts +11 -10
- package/dist/components/button-group.js +1 -1
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/calculator.d.ts +11 -10
- package/dist/components/calculator.js +3 -3
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/checkbox-group.d.ts +2 -1
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/checkbox.d.ts +2 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/chip.d.ts +2 -1
- package/dist/components/chip.js +19 -17
- package/dist/components/chip.js.map +1 -1
- package/dist/components/choice-card.d.ts +3 -1
- package/dist/components/choice-card.js +1 -1
- package/dist/components/choice-card.js.map +1 -1
- package/dist/components/combobox-core.js +2 -1
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +4 -3
- package/dist/components/combobox.js +2 -2
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog.d.ts +11 -10
- package/dist/components/confirm-dialog.js +6 -3
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button.d.ts +12 -11
- package/dist/components/country-select.d.ts +2 -1
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +11 -10
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-cells.d.ts +12 -1
- package/dist/components/data-table-filter-popover.d.ts +12 -1
- package/dist/components/data-table-filters.d.ts +12 -1
- package/dist/components/data-table-labels.d.ts +12 -1
- package/dist/components/data-table-pagination.d.ts +12 -1
- package/dist/components/data-table.d.ts +12 -1
- package/dist/components/data-table.js +3 -3
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +6 -4
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dropdown.js +9 -1
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/entity-combobox.d.ts +3 -2
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/facing-pair.d.ts +11 -10
- package/dist/components/field-parts.d.ts +32 -4
- package/dist/components/field-parts.js +54 -19
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/file-button.d.ts +11 -10
- package/dist/components/file-button.js +3 -2
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/file-dropzone.d.ts +12 -11
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/floating-panel.js +5 -5
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/form-actions.d.ts +10 -9
- package/dist/components/form-actions.js +3 -3
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/full-bleed-dialog.js.map +1 -1
- package/dist/components/iban-input.d.ts +11 -10
- package/dist/components/inline-edit-field.d.ts +2 -1
- package/dist/components/inline-edit-field.js +6 -6
- package/dist/components/inline-edit-field.js.map +1 -1
- package/dist/components/language-select.d.ts +11 -10
- package/dist/components/legal-page.d.ts +11 -10
- package/dist/components/legal.d.ts +11 -10
- package/dist/components/list.d.ts +2 -1
- package/dist/components/list.js +4 -5
- package/dist/components/list.js.map +1 -1
- package/dist/components/modal.js.map +1 -1
- package/dist/components/money-field.d.ts +11 -10
- package/dist/components/month-picker.js +54 -44
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.d.ts +3 -2
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/number-field.d.ts +18 -10
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +37 -10
- package/dist/components/number-input.js +27 -12
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.d.ts +11 -10
- package/dist/components/numpad-sheet.js +2 -2
- package/dist/components/numpad-sheet.js.map +1 -1
- package/dist/components/phone-input.d.ts +11 -10
- package/dist/components/popover.js +6 -2
- package/dist/components/popover.js.map +1 -1
- package/dist/components/row-actions.d.ts +6 -5
- package/dist/components/row-actions.js +130 -32
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/series-chart.d.ts +11 -10
- package/dist/components/settings-fields.d.ts +11 -10
- package/dist/components/share-card.d.ts +8 -7
- package/dist/components/share-card.js +26 -10
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/skeleton.d.ts +10 -2
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/status-dot.d.ts +1 -0
- package/dist/components/status-dot.js +2 -2
- package/dist/components/status-dot.js.map +1 -1
- package/dist/components/swatch-picker.d.ts +2 -1
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/swipeable-row.d.ts +88 -17
- package/dist/components/swipeable-row.js +46 -9
- package/dist/components/swipeable-row.js.map +1 -1
- package/dist/components/switch.d.ts +2 -1
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.d.ts +2 -1
- package/dist/components/table.js +6 -0
- package/dist/components/table.js.map +1 -1
- package/dist/components/text-link.d.ts +10 -9
- package/dist/components/time-input.d.ts +11 -10
- package/dist/components/toggle-group.d.ts +2 -1
- package/dist/components/toggle-group.js +1 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/translation-review-editor.d.ts +4 -0
- package/dist/components/translation-review-editor.js +4 -3
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review-parts.d.ts +1 -0
- package/dist/components/translation-review.d.ts +1 -0
- package/dist/components/translation-review.js +15 -18
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/ui.d.ts +10 -9
- package/dist/components/ui.js +47 -27
- package/dist/components/ui.js.map +1 -1
- package/dist/components/use-table-state.d.ts +12 -1
- package/dist/components/user-avatar.d.ts +1 -0
- package/dist/components/write-lock.d.ts +101 -13
- package/dist/components/write-lock.js +37 -13
- package/dist/components/write-lock.js.map +1 -1
- package/dist/{data-table-labels-kpAAVi6g.d.ts → data-table-labels-BJ5JE_X2.d.ts} +17 -0
- package/dist/data-table.d.ts +12 -1
- package/dist/{delete-account-setting-Dy4kJgUm.d.ts → delete-account-setting-DAgGBrbn.d.ts} +393 -42
- package/dist/feedback/feedback-attachment.d.ts +11 -10
- package/dist/feedback/feedback-attachment.js +7 -7
- package/dist/feedback/feedback-attachment.js.map +1 -1
- package/dist/feedback/feedback-context.d.ts +11 -10
- package/dist/feedback/feedback-crash.d.ts +11 -10
- package/dist/feedback/feedback-dialog.d.ts +11 -10
- package/dist/feedback/feedback-inbox.d.ts +10 -9
- package/dist/feedback/feedback-inbox.js +7 -3
- package/dist/feedback/feedback-inbox.js.map +1 -1
- package/dist/feedback/feedback-labels.d.ts +11 -10
- package/dist/feedback/feedback-menu.d.ts +4 -3
- package/dist/feedback/feedback-record.d.ts +11 -10
- package/dist/feedback/feedback-row-detail.d.ts +11 -10
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.d.ts +11 -10
- package/dist/feedback/feedback-submit.d.ts +11 -10
- package/dist/feedback/feedback-swipe.d.ts +11 -10
- package/dist/feedback/feedback-swipe.js +3 -6
- package/dist/feedback/feedback-swipe.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +11 -10
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +11 -10
- package/dist/feedback/feedback-thread.js +5 -1
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback.d.ts +11 -10
- package/dist/hooks/use-anchored-panel.d.ts +37 -7
- package/dist/hooks/use-anchored-panel.js +6 -7
- package/dist/hooks/use-anchored-panel.js.map +1 -1
- package/dist/hooks/use-file-drop.d.ts +11 -10
- package/dist/hooks/use-focus-trap.d.ts +8 -0
- package/dist/hooks/use-focus-trap.js +17 -11
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/i18n/defaults.d.ts +11 -10
- package/dist/i18n/defaults.js +2 -0
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.d.ts +11 -10
- package/dist/i18n/german.js +37 -1
- 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 +11 -10
- package/dist/i18n/locales/de-CH.d.ts +11 -10
- package/dist/i18n/locales/en.d.ts +11 -10
- package/dist/i18n/locales/es.d.ts +11 -10
- package/dist/i18n/locales/es.js +35 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +11 -10
- package/dist/i18n/locales/fr.js +37 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.d.ts +11 -10
- package/dist/i18n/locales/hu.js +38 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +11 -10
- package/dist/i18n/locales/it.js +35 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +11 -10
- package/dist/i18n/locales/zh.js +35 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.d.ts +20 -1
- package/dist/i18n/plurals.js +11 -0
- package/dist/i18n/plurals.js.map +1 -1
- package/dist/i18n/review.d.ts +11 -10
- package/dist/i18n/review.js +8 -1
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.js +40 -2
- package/dist/index.js.map +1 -1
- package/dist/landing/landing-actions.d.ts +11 -10
- package/dist/landing/landing-sections.d.ts +11 -10
- package/dist/landing/public-header.d.ts +11 -10
- package/dist/landing/routing.d.ts +11 -10
- package/dist/pay/.well-known/apple-developer-merchantid-domain-association +1 -0
- package/dist/pay/index.html +30 -0
- package/dist/pay/pay.css +126 -0
- package/dist/pay/pay.js +198 -0
- package/dist/rhf/fields.d.ts +11 -10
- package/dist/rhf/form.d.ts +11 -10
- package/dist/rhf.d.ts +11 -10
- package/dist/settings/settings-section.d.ts +11 -10
- package/dist/shell/app-shell.d.ts +10 -9
- package/dist/shell/top-bar-brand.d.ts +11 -10
- package/dist/shell/topbar-action-menu.d.ts +1 -0
- package/dist/shell.d.ts +11 -10
- package/dist/testing/css-variables.d.ts +74 -0
- package/dist/testing/css-variables.generated.d.ts +7 -0
- package/dist/testing/css-variables.generated.js +8 -0
- package/dist/testing/css-variables.generated.js.map +1 -0
- package/dist/testing/css-variables.js +93 -0
- package/dist/testing/css-variables.js.map +1 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/theme/contrast-tokens.d.ts +44 -1
- package/dist/theme/contrast-tokens.js +21 -0
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/contrast.d.ts +2 -2
- package/dist/theme/palette-derive.js +60 -11
- package/dist/theme/palette-derive.js.map +1 -1
- package/dist/theme/palette-presets.js +45 -43
- package/dist/theme/palette-presets.js.map +1 -1
- package/dist/wizard/stepper-nav.d.ts +12 -11
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard.d.ts +11 -10
- package/package.json +10 -2
- package/src/account/delete-account-setting.tsx +6 -1
- package/src/account/email-change-setting.tsx +9 -3
- package/src/account/sessions-setting.tsx +7 -2
- package/src/admin/admin-action-confirm.tsx +2 -1
- package/src/admin/invitations-panel.tsx +9 -3
- package/src/admin/plan-change.tsx +487 -0
- package/src/admin/reviewer-scope-editor.tsx +2 -1
- package/src/admin/role-select.tsx +2 -1
- package/src/admin/user-roster.tsx +5 -3
- package/src/auth/auth-errors.ts +25 -2
- package/src/auth/complete-name-dialog.tsx +6 -2
- package/src/billing/billing-banner.tsx +3 -1
- package/src/billing/billing-labels.ts +45 -0
- package/src/billing/billing-lock.ts +36 -3
- package/src/billing/billing-overview.ts +58 -0
- package/src/billing/checkout-processing.ts +391 -0
- package/src/billing/checkout-return.ts +90 -0
- package/src/billing/pay-page.ts +246 -0
- package/src/billing/plan-limit-toast.tsx +91 -0
- package/src/billing/subscription-actions.tsx +41 -8
- package/src/components/account-settings.tsx +6 -2
- package/src/components/autocomplete.tsx +10 -4
- package/src/components/button-group.tsx +4 -1
- package/src/components/calculator.tsx +10 -6
- package/src/components/checkbox-group.tsx +2 -2
- package/src/components/checkbox.tsx +2 -1
- package/src/components/chip.tsx +37 -32
- package/src/components/choice-card.tsx +4 -2
- package/src/components/combobox-core.tsx +5 -2
- package/src/components/combobox.tsx +8 -6
- package/src/components/confirm-dialog.tsx +13 -6
- package/src/components/country-select.tsx +2 -2
- package/src/components/danger-confirm.tsx +2 -2
- package/src/components/data-table.tsx +20 -9
- package/src/components/date-picker.tsx +10 -7
- package/src/components/dropdown.tsx +12 -2
- package/src/components/entity-combobox.tsx +3 -3
- package/src/components/field-parts.tsx +61 -14
- package/src/components/file-button.tsx +5 -4
- package/src/components/file-dropzone.tsx +2 -2
- package/src/components/floating-panel.tsx +7 -5
- package/src/components/form-actions.tsx +12 -5
- package/src/components/full-bleed-dialog.tsx +6 -0
- package/src/components/inline-edit-field.tsx +13 -13
- package/src/components/list.tsx +10 -9
- package/src/components/modal.tsx +5 -0
- package/src/components/month-picker.tsx +8 -2
- package/src/components/multi-entity-combobox.tsx +3 -3
- package/src/components/number-field.tsx +7 -0
- package/src/components/number-input.tsx +71 -11
- package/src/components/numpad-sheet.tsx +8 -4
- package/src/components/popover.tsx +6 -2
- package/src/components/row-actions.tsx +208 -58
- package/src/components/share-card.tsx +67 -13
- package/src/components/skeleton.tsx +10 -2
- package/src/components/status-dot.tsx +7 -7
- package/src/components/swatch-picker.tsx +2 -2
- package/src/components/swipeable-row.tsx +138 -27
- package/src/components/switch.tsx +2 -1
- package/src/components/table.tsx +8 -1
- package/src/components/toggle-group.tsx +5 -3
- package/src/components/translation-review-editor.tsx +8 -3
- package/src/components/translation-review.tsx +18 -22
- package/src/components/ui.tsx +92 -43
- package/src/components/write-lock.tsx +150 -24
- package/src/feedback/feedback-attachment.tsx +13 -9
- package/src/feedback/feedback-inbox.tsx +10 -6
- package/src/feedback/feedback-row-detail.tsx +3 -2
- package/src/feedback/feedback-swipe.tsx +6 -11
- package/src/feedback/feedback-table.tsx +2 -1
- package/src/feedback/feedback-thread.tsx +20 -1
- package/src/hooks/use-anchored-panel.ts +60 -14
- package/src/hooks/use-focus-trap.ts +55 -12
- package/src/i18n/defaults.ts +2 -0
- package/src/i18n/german.ts +41 -0
- package/src/i18n/kit-labels.tsx +4 -0
- package/src/i18n/locales/es.ts +35 -0
- package/src/i18n/locales/fr.ts +41 -0
- package/src/i18n/locales/hu.ts +39 -0
- package/src/i18n/locales/it.ts +36 -0
- package/src/i18n/locales/zh.ts +34 -0
- package/src/i18n/plurals.ts +29 -0
- package/src/i18n/review.ts +7 -0
- package/src/index.ts +51 -5
- package/src/testing/css-variables.generated.ts +112 -0
- package/src/testing/css-variables.ts +191 -0
- package/src/testing/index.ts +13 -0
- package/src/theme/contrast-tokens.ts +53 -2
- package/src/theme/palette-derive.ts +87 -10
- package/src/theme/palette-presets.ts +45 -43
- package/src/wizard/stepper-nav.tsx +2 -1
- package/tokens.css +324 -46
|
@@ -1,32 +1,134 @@
|
|
|
1
1
|
import { useEffect, useRef, useState } from "react";
|
|
2
|
-
import type { ReactNode } from "react";
|
|
2
|
+
import type { CSSProperties, ReactNode } from "react";
|
|
3
3
|
import { cn } from "../lib/cn";
|
|
4
4
|
import { FOCUS_RING } from "./focus-ring";
|
|
5
|
+
import type { StatusDotTone } from "./status-dot";
|
|
5
6
|
import { useRowSwipe, type SwipeStage } from "../hooks/use-row-swipe";
|
|
6
7
|
import { DEFAULT_SWIPEABLE_ROW_LABELS, useKitLabels } from "../i18n/kit-labels";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
* What a swipe action's panel means — the vocabulary Chip, ProgressBar and StatusDot
|
|
11
|
+
* already share, so a curtain can be "the colour of the status it produces" by name:
|
|
12
|
+
* brand, neutral, success, warning, danger, info, income, expense, and the categorical
|
|
13
|
+
* hues blue, indigo, purple, teal and orange.
|
|
14
|
+
*/
|
|
15
|
+
export type SwipeTone = StatusDotTone;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* An app's own fill for a documented exception (0.33, docs/colour-roles-harmonization.md
|
|
19
|
+
* §12.6) — a curtain that must be exactly its status pill's palette fill, or two
|
|
20
|
+
* strengths of one tone. CSS colours or `var()`s, the same in both themes unless the app
|
|
21
|
+
* passes a variable it declares per theme in its own stylesheet. The kit cannot measure
|
|
22
|
+
* these, so the app's tests pin the pair.
|
|
15
23
|
*/
|
|
16
|
-
export interface
|
|
24
|
+
export interface SwipePaint {
|
|
25
|
+
/** The armed panel's fill; idle shows a 14 % wash of it on the card. */
|
|
26
|
+
fill: string;
|
|
27
|
+
/** The text and icon colour ON `fill`, armed. Idle text is the body ink. */
|
|
28
|
+
foreground: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface SwipeActionBase {
|
|
17
32
|
onCommit: () => void;
|
|
18
33
|
label: string;
|
|
19
34
|
/** Rendered inside the panel. Icons stay the consumer's choice — this package
|
|
20
35
|
* ships no opinion about which icon set an app uses. */
|
|
21
36
|
icon?: ReactNode;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* One armed swipe action: what it does, and how the reveal panel presents it.
|
|
41
|
+
*
|
|
42
|
+
* The panel has two states. Before the first threshold is crossed it previews the
|
|
43
|
+
* nearest action IDLE, so the user can see what a little more drag will do; crossing
|
|
44
|
+
* the threshold ARMS it — "let go and this fires".
|
|
45
|
+
*
|
|
46
|
+
* **`tone`** (0.33) is how the kit paints it: idle, the tone's soft wash under the
|
|
47
|
+
* tone's own text colour (`bg-danger-soft text-danger`, Chip's soft look, ≥ 4.5:1);
|
|
48
|
+
* armed, the tone's solid fill under its `-contrast` foreground (≥ 5:1). The soft→solid
|
|
49
|
+
* step is the signal. It replaces a panel dimmed to 60 % at idle, whose label sat at
|
|
50
|
+
* 2.4–4.5:1 on the kit's own swipes, and a white label that was unreadable on every
|
|
51
|
+
* dark-mode pastel.
|
|
52
|
+
*
|
|
53
|
+
* **`paint`** follows the same rule for an app's documented exception (see
|
|
54
|
+
* {@link SwipePaint}). **`className` / `armedClassName`** is the old path, kept so
|
|
55
|
+
* existing call sites compile; there the label is white unless the classes set a
|
|
56
|
+
* colour, and the idle panel is still dimmed.
|
|
57
|
+
*/
|
|
58
|
+
export type SwipeAction = SwipeActionBase &
|
|
59
|
+
(
|
|
60
|
+
| {
|
|
61
|
+
/** The kit paints the panel: the tone's wash idle, its fill and `-contrast` armed. */
|
|
62
|
+
tone: SwipeTone;
|
|
63
|
+
paint?: never;
|
|
64
|
+
className?: never;
|
|
65
|
+
armedClassName?: never;
|
|
66
|
+
}
|
|
67
|
+
| {
|
|
68
|
+
/** A documented app exception: idle a 14 % wash of `fill` under the body ink,
|
|
69
|
+
* armed `fill` under `foreground`. */
|
|
70
|
+
paint: SwipePaint;
|
|
71
|
+
tone?: never;
|
|
72
|
+
className?: never;
|
|
73
|
+
armedClassName?: never;
|
|
74
|
+
}
|
|
75
|
+
| {
|
|
76
|
+
tone?: never;
|
|
77
|
+
paint?: never;
|
|
78
|
+
/** @deprecated 0.33 — pass `tone`, or `paint` for an exception. Background
|
|
79
|
+
* utility class while the action is previewed but not yet armed; the panel is
|
|
80
|
+
* dimmed then, and its text is white unless this sets a text colour. */
|
|
81
|
+
className: string;
|
|
82
|
+
/** @deprecated 0.33 — pass `tone`, or `paint`. Background utility class once
|
|
83
|
+
* the drag has passed this action's threshold. */
|
|
84
|
+
armedClassName: string;
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Each tone's panel, idle and armed. Literal class strings, because Tailwind finds a
|
|
90
|
+
* class by reading the source. Idle is Chip's soft recipe for the tone (the money pair
|
|
91
|
+
* takes Chip's soft money look, the well under the money colour; neutral the active
|
|
92
|
+
* fill under the secondary ink); armed is the plain fill, not `-hover`, under the
|
|
93
|
+
* fill's own foreground. Measured in every shipped preset by
|
|
94
|
+
* theme/__tests__/tokens-css-audit.test.ts.
|
|
95
|
+
*/
|
|
96
|
+
export const SWIPE_TONE: Record<SwipeTone, { idle: string; armed: string }> = {
|
|
97
|
+
brand: { idle: "bg-brand-soft text-brand-muted", armed: "bg-brand text-brand-contrast" },
|
|
98
|
+
neutral: { idle: "bg-active text-secondary", armed: "bg-neutral text-neutral-contrast" },
|
|
99
|
+
success: { idle: "bg-success-soft text-success", armed: "bg-success text-success-contrast" },
|
|
100
|
+
warning: { idle: "bg-warning-soft text-warning", armed: "bg-warning text-warning-contrast" },
|
|
101
|
+
danger: { idle: "bg-danger-soft text-danger", armed: "bg-danger text-danger-contrast" },
|
|
102
|
+
info: { idle: "bg-info-soft text-info", armed: "bg-info text-info-contrast" },
|
|
103
|
+
income: { idle: "bg-surface-2 text-money-pos", armed: "bg-money-pos text-money-income-contrast" },
|
|
104
|
+
expense: { idle: "bg-surface-2 text-money-neg", armed: "bg-money-neg text-money-expense-contrast" },
|
|
105
|
+
blue: { idle: "bg-hue-blue-soft text-hue-blue", armed: "bg-hue-blue text-hue-blue-contrast" },
|
|
106
|
+
indigo: { idle: "bg-hue-indigo-soft text-hue-indigo", armed: "bg-hue-indigo text-hue-indigo-contrast" },
|
|
107
|
+
purple: { idle: "bg-hue-purple-soft text-hue-purple", armed: "bg-hue-purple text-hue-purple-contrast" },
|
|
108
|
+
teal: { idle: "bg-hue-teal-soft text-hue-teal", armed: "bg-hue-teal text-hue-teal-contrast" },
|
|
109
|
+
orange: { idle: "bg-hue-orange-soft text-hue-orange", armed: "bg-hue-orange text-hue-orange-contrast" },
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/** `paint`'s two looks, from the two custom properties the panel carries inline. The
|
|
113
|
+
* idle wash is `--brand-bg`'s recipe (14 % of the fill into the card). */
|
|
114
|
+
const PAINT_IDLE = "bg-[color-mix(in_oklab,var(--swipe-paint-fill)_14%,var(--bg-surface))] text-primary";
|
|
115
|
+
const PAINT_ARMED = "bg-[var(--swipe-paint-fill)] text-[var(--swipe-paint-fg)]";
|
|
116
|
+
|
|
117
|
+
/** The panel's colour classes, inline style and dimming for one action and state. */
|
|
118
|
+
function panelLook(action: SwipeAction, armed: boolean): { className: string; style?: CSSProperties; dim: boolean } {
|
|
119
|
+
if (action.tone) return { className: SWIPE_TONE[action.tone][armed ? "armed" : "idle"], dim: false };
|
|
120
|
+
if (action.paint) {
|
|
121
|
+
return {
|
|
122
|
+
className: armed ? PAINT_ARMED : PAINT_IDLE,
|
|
123
|
+
style: {
|
|
124
|
+
"--swipe-paint-fill": action.paint.fill,
|
|
125
|
+
"--swipe-paint-fg": action.paint.foreground,
|
|
126
|
+
} as CSSProperties,
|
|
127
|
+
dim: false,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// The deprecated path, as it was: white text under the caller's fill, dimmed idle.
|
|
131
|
+
return { className: cn("text-white", armed ? action.armedClassName : action.className), dim: !armed };
|
|
30
132
|
}
|
|
31
133
|
|
|
32
134
|
/**
|
|
@@ -76,8 +178,9 @@ const PEEK_PX = 40;
|
|
|
76
178
|
* action reachable and roughly doubles the room between them.
|
|
77
179
|
*
|
|
78
180
|
* **Whether the action will fire is stated three ways, not one** (feedback #174): the
|
|
79
|
-
* panel goes from
|
|
80
|
-
* label turns bold — plus the existing haptic tick per newly armed
|
|
181
|
+
* panel goes from the tone's soft wash to its solid fill, the icon grows and gains a
|
|
182
|
+
* filled disc, and the label turns bold — plus the existing haptic tick per newly armed
|
|
183
|
+
* stage. A colour
|
|
81
184
|
* shift alone is easy to miss mid-gesture, and it is invisible to anyone who cannot
|
|
82
185
|
* distinguish the two tones.
|
|
83
186
|
*
|
|
@@ -180,33 +283,41 @@ export function SwipeableRow({
|
|
|
180
283
|
? leftActions[Math.max(0, swipe.armedLeftIndex)]
|
|
181
284
|
: rightActions[Math.max(0, swipe.armedRightIndex)];
|
|
182
285
|
const armed = draggingLeft ? swipe.armedLeftIndex >= 0 : swipe.armedRightIndex >= 0;
|
|
286
|
+
const look = shown ? panelLook(shown, armed) : null;
|
|
183
287
|
|
|
184
288
|
return (
|
|
185
289
|
<div ref={rowRef} className={cn("relative overflow-hidden", className)}>
|
|
186
|
-
{
|
|
290
|
+
{/* The card under the panel. A dark theme's washes are translucent, and a tone's
|
|
291
|
+
idle pair is measured as that wash ON the card — so the card is there, whatever
|
|
292
|
+
the row happens to sit in. */}
|
|
293
|
+
{active && shown && <div aria-hidden className="pointer-events-none absolute inset-0 bg-surface" />}
|
|
294
|
+
{active && shown && look && (
|
|
187
295
|
<div
|
|
188
296
|
className={cn(
|
|
189
297
|
"pointer-events-none absolute inset-0 flex items-center gap-2 px-4",
|
|
190
|
-
"text-xs font-medium
|
|
191
|
-
|
|
192
|
-
//
|
|
193
|
-
// a
|
|
194
|
-
|
|
195
|
-
|
|
298
|
+
"text-xs font-medium transition-all",
|
|
299
|
+
look.className,
|
|
300
|
+
// The old path only: dimmed until the drag has passed a threshold. A tone
|
|
301
|
+
// or a paint says it with the soft→solid step instead, which keeps its
|
|
302
|
+
// label readable at both ends.
|
|
303
|
+
look.dim && "opacity-60",
|
|
196
304
|
// The panel is anchored to the edge the row is uncovering, so the label
|
|
197
305
|
// sits where the eye already is rather than across the screen. That edge is
|
|
198
306
|
// physical, while a flex row starts at the INLINE start — so in RTL the two
|
|
199
307
|
// directions swap, or the label sat under the row on the covered side.
|
|
200
308
|
draggingLeft ? "flex-row-reverse rtl:flex-row" : "rtl:flex-row-reverse",
|
|
201
309
|
)}
|
|
310
|
+
style={look.style}
|
|
202
311
|
>
|
|
203
312
|
{shown.icon && (
|
|
204
313
|
<span
|
|
205
314
|
className={cn(
|
|
206
315
|
"flex shrink-0 items-center justify-center rounded-full transition-all",
|
|
207
316
|
// Armed, the icon gets a disc of its own and grows — a second,
|
|
208
|
-
// non-colour signal, and the one that stays readable at a glance.
|
|
209
|
-
|
|
317
|
+
// non-colour signal, and the one that stays readable at a glance. In
|
|
318
|
+
// the label's own colour (0.33): a white disc vanished on a dark
|
|
319
|
+
// theme's pastel fill, and the label's colour works on every pair.
|
|
320
|
+
armed ? "size-8 scale-110 bg-current/20" : "size-7 bg-current/10",
|
|
210
321
|
)}
|
|
211
322
|
>
|
|
212
323
|
{shown.icon}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
type DisabledReasonDisplay,
|
|
11
11
|
} from "./field-parts";
|
|
12
12
|
import { FOCUS_RING } from "./focus-ring";
|
|
13
|
+
import type { CommitScope } from "./write-lock";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* An on/off switch that is still `<input type="checkbox">`, with `role="switch"`.
|
|
@@ -117,7 +118,7 @@ export interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
|
|
|
117
118
|
* is locked the `disabledReason` way with the lock's reason (which wins over its
|
|
118
119
|
* own). No provider, or an unlocked one: no effect. Button's `commit`, for K3.
|
|
119
120
|
*/
|
|
120
|
-
commit?:
|
|
121
|
+
commit?: CommitScope;
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
/**
|
package/src/components/table.tsx
CHANGED
|
@@ -162,7 +162,8 @@ export interface TableProps extends ComponentPropsWithRef<"table"> {
|
|
|
162
162
|
/** Tint every other body row. */
|
|
163
163
|
zebra?: boolean;
|
|
164
164
|
/** Tint the body row under the pointer. Off by default: a static table whose rows
|
|
165
|
-
* light up promises a click that does nothing.
|
|
165
|
+
* light up promises a click that does nothing. With `zebra`, a tinted row hovers to
|
|
166
|
+
* the card colour (0.33): the hover tint is too close to the well. */
|
|
166
167
|
hover?: boolean;
|
|
167
168
|
/** Classes for the overflow wrapper around the `<table>` (a max-height, a border). */
|
|
168
169
|
wrapperClassName?: string;
|
|
@@ -518,6 +519,12 @@ export function TableRow({ valign, variant = "row", bordered, className, ref: re
|
|
|
518
519
|
body && (bordered ?? rowDividers) && "border-b border-[var(--border)]",
|
|
519
520
|
record && zebra && "even:bg-[var(--bg-surface-2)]",
|
|
520
521
|
record && hover && "transition-colors hover:bg-[var(--bg-hover)]",
|
|
522
|
+
// A zebra row rests on the well, and `--bg-hover` sits only 1.00–1.02:1 from it
|
|
523
|
+
// (0.33: the light well is the page colour): it hovers to the card instead, the
|
|
524
|
+
// one fill that both steps 1.09–1.13:1 from the well and keeps every text role at
|
|
525
|
+
// 4.5:1 (docs/colour-roles-harmonization.md §12.2). `even:hover:` outranks the
|
|
526
|
+
// row's own `hover:`.
|
|
527
|
+
record && zebra && hover && "even:hover:bg-surface",
|
|
521
528
|
ROW_VARIANT[variant],
|
|
522
529
|
// On the row as well, for a raw `<td>` of the caller's, which inherits it.
|
|
523
530
|
valign && VALIGN[valign],
|
|
@@ -4,7 +4,7 @@ import { cn } from "../lib/cn";
|
|
|
4
4
|
import { horizontalStep } from "../lib/direction";
|
|
5
5
|
import { FIELD_INVALID, FloatingField, Label } from "./ui";
|
|
6
6
|
import { Tooltip } from "./tooltip";
|
|
7
|
-
import { useCommitReason } from "./write-lock";
|
|
7
|
+
import { useCommitReason, type CommitScope } from "./write-lock";
|
|
8
8
|
import {
|
|
9
9
|
DISABLED_REASON_LINE_CLASS,
|
|
10
10
|
FIELD_CAPTION_CLASS,
|
|
@@ -172,7 +172,7 @@ export interface ToggleGroupBaseProps<T extends string>
|
|
|
172
172
|
* must render refused, never live-and-discarding. No provider, or an unlocked one:
|
|
173
173
|
* no effect.
|
|
174
174
|
*/
|
|
175
|
-
commit?:
|
|
175
|
+
commit?: CommitScope;
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
/**
|
|
@@ -200,7 +200,9 @@ export interface ToggleGroupBaseProps<T extends string>
|
|
|
200
200
|
*
|
|
201
201
|
* md: 1 + 20 + 18 + 2 + 1 = 42 sm: 1 + 20 + 16 + 4 + 1 = 42
|
|
202
202
|
*/
|
|
203
|
-
|
|
203
|
+
// At Large the chrome's label stands above it (0.33, §10.17): no strip, the same moat top
|
|
204
|
+
// and bottom.
|
|
205
|
+
const CHROME_PAD: Record<"sm" | "md", string> = { md: "pt-5 pb-0.5 large:pt-0.5", sm: "pt-5 pb-1 large:pt-1" };
|
|
204
206
|
const CHROME_SEGMENT: Record<"sm" | "md", string> = { md: "py-0 leading-[1.125rem]", sm: "py-0 leading-4" };
|
|
205
207
|
|
|
206
208
|
/**
|
|
@@ -16,6 +16,7 @@ import { Caption, SectionLabel } from "./text";
|
|
|
16
16
|
import { DEFAULT_TRANSLATION_REVIEW_LABELS } from "./translation-review-labels";
|
|
17
17
|
import type { TranslationReviewLabels } from "./translation-review-labels";
|
|
18
18
|
import { Button, Textarea } from "./ui";
|
|
19
|
+
import { COMMIT_EXCEPT_BILLING } from "./write-lock";
|
|
19
20
|
|
|
20
21
|
/** A callback may return a promise: resolve and the editor closes, reject and it stays
|
|
21
22
|
* open with the error. */
|
|
@@ -84,6 +85,10 @@ function Then({ label, text }: { label: string; text: string }) {
|
|
|
84
85
|
* Every action waits for its callback: the buttons hold while the promise is out, a
|
|
85
86
|
* resolution closes the editor through `onClose`, and a rejection keeps it open with what
|
|
86
87
|
* was typed and the error under the buttons.
|
|
88
|
+
*
|
|
89
|
+
* Each verdict is a `commit` exempt from billing (`COMMIT_EXCEPT_BILLING`, 0.33): a review
|
|
90
|
+
* is an admin route, which a lapsed plan never locks (docs/billing-harmonization.md
|
|
91
|
+
* §12.13, §12.36); a demo's lock still holds it.
|
|
87
92
|
*/
|
|
88
93
|
export function TranslationReviewEditor({
|
|
89
94
|
row,
|
|
@@ -234,7 +239,7 @@ export function TranslationReviewEditor({
|
|
|
234
239
|
{!missing && (
|
|
235
240
|
<Button
|
|
236
241
|
variant="primary"
|
|
237
|
-
commit
|
|
242
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
238
243
|
pending={busy === "approve"}
|
|
239
244
|
disabled={busy !== null}
|
|
240
245
|
onClick={() => save("APPROVED")}
|
|
@@ -244,7 +249,7 @@ export function TranslationReviewEditor({
|
|
|
244
249
|
)}
|
|
245
250
|
<Button
|
|
246
251
|
variant={missing ? "primary" : "danger"}
|
|
247
|
-
commit
|
|
252
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
248
253
|
pending={busy === "flag"}
|
|
249
254
|
disabled={busy !== null || !canFlag}
|
|
250
255
|
onClick={() => save("NEEDS_CHANGE")}
|
|
@@ -254,7 +259,7 @@ export function TranslationReviewEditor({
|
|
|
254
259
|
{review && onClear && (
|
|
255
260
|
<Button
|
|
256
261
|
variant="ghost"
|
|
257
|
-
commit
|
|
262
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
258
263
|
pending={busy === "clear"}
|
|
259
264
|
disabled={busy !== null}
|
|
260
265
|
onClick={() => void run("clear", () => onClear({ locale: row.locale, key: row.key }))}
|
|
@@ -44,7 +44,7 @@ import { DEFAULT_TRANSLATION_REVIEW_LABELS, reviewStatusLabel } from "./translat
|
|
|
44
44
|
import type { TranslationReviewLabels } from "./translation-review-labels";
|
|
45
45
|
import { ReviewStatusChip, TranslationProgress } from "./translation-review-parts";
|
|
46
46
|
import { Button, IconButton, Select } from "./ui";
|
|
47
|
-
import { useWriteLock } from "./write-lock";
|
|
47
|
+
import { COMMIT_EXCEPT_BILLING, useWriteLock } from "./write-lock";
|
|
48
48
|
|
|
49
49
|
export {
|
|
50
50
|
REVIEW_STATUS_TONES,
|
|
@@ -457,7 +457,10 @@ export function TranslationReviewPanel({
|
|
|
457
457
|
}: TranslationReviewPanelProps) {
|
|
458
458
|
const labels = useKitLabels("translationReview", DEFAULT_TRANSLATION_REVIEW_LABELS, labelsProp);
|
|
459
459
|
const locale = useKitLocale();
|
|
460
|
-
|
|
460
|
+
// A verdict is an admin route, which a lapsed plan never locks
|
|
461
|
+
// (docs/billing-harmonization.md §12.13, §12.36): the buttons take
|
|
462
|
+
// COMMIT_EXCEPT_BILLING, and the swipes read the lock as they see it.
|
|
463
|
+
const lock = useWriteLock(COMMIT_EXCEPT_BILLING);
|
|
461
464
|
// The phone layout DataTable switches its layout on, so "a phone" means the same here
|
|
462
465
|
// as in the table, at every text size: `usePhoneLayout()` itself (§10.4; 0.32.1,
|
|
463
466
|
// keksdose's 0.32 report — `!useBreakpoint("md")` could disagree with it at 767.5 px).
|
|
@@ -742,7 +745,7 @@ export function TranslationReviewPanel({
|
|
|
742
745
|
type="button"
|
|
743
746
|
size="xs"
|
|
744
747
|
tone="muted"
|
|
745
|
-
commit
|
|
748
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
746
749
|
label={labels.approve}
|
|
747
750
|
// The icon alone at every text size (docs/text-size-harmonization.md §10.8):
|
|
748
751
|
// the row's one action, in a hugging column of a dense table beside the
|
|
@@ -773,10 +776,9 @@ export function TranslationReviewPanel({
|
|
|
773
776
|
label: labels.approve,
|
|
774
777
|
icon: <Check className="size-4" aria-hidden />,
|
|
775
778
|
onCommit: () => void approve(`row:${r.id}`, [r], "swipe", r.key),
|
|
776
|
-
//
|
|
777
|
-
//
|
|
778
|
-
|
|
779
|
-
armedClassName: "bg-[var(--success)] text-[var(--success-contrast)]",
|
|
779
|
+
// SwipeableRow paints the tone: its soft wash idle, its fill and that fill's
|
|
780
|
+
// foreground armed (0.33).
|
|
781
|
+
tone: "success",
|
|
780
782
|
};
|
|
781
783
|
case "edit":
|
|
782
784
|
return {
|
|
@@ -789,23 +791,17 @@ export function TranslationReviewPanel({
|
|
|
789
791
|
setOpenId(r.id);
|
|
790
792
|
setFocusId(r.id);
|
|
791
793
|
},
|
|
792
|
-
|
|
793
|
-
? "bg-[var(--brand)] text-[var(--brand-contrast)]"
|
|
794
|
-
: "bg-[var(--danger)] text-[var(--danger-contrast)]",
|
|
795
|
-
armedClassName: missing
|
|
796
|
-
? "bg-[var(--brand-hover)] text-[var(--brand-contrast)]"
|
|
797
|
-
: "bg-[var(--danger-hover)] text-[var(--danger-contrast)]",
|
|
794
|
+
tone: missing ? "brand" : "danger",
|
|
798
795
|
};
|
|
799
796
|
case "clear":
|
|
800
797
|
return {
|
|
801
798
|
label: labels.reset,
|
|
802
799
|
icon: <RotateCcw className="size-4" aria-hidden />,
|
|
803
800
|
onCommit: () => void clearRow(r),
|
|
804
|
-
// A step back, not a verdict: neither the approval's green nor the send-back's
|
|
805
|
-
//
|
|
806
|
-
//
|
|
807
|
-
|
|
808
|
-
armedClassName: "bg-[var(--text-secondary)] text-[var(--bg-surface)]",
|
|
801
|
+
// A step back, not a verdict: neither the approval's green nor the send-back's
|
|
802
|
+
// red. `neutral` is the pair this swipe improvised and 0.33 made a token: the
|
|
803
|
+
// muted ink as a fill under the surface colour.
|
|
804
|
+
tone: "neutral",
|
|
809
805
|
};
|
|
810
806
|
}
|
|
811
807
|
};
|
|
@@ -943,7 +939,7 @@ export function TranslationReviewPanel({
|
|
|
943
939
|
<Button
|
|
944
940
|
variant="secondary"
|
|
945
941
|
size="sm"
|
|
946
|
-
commit
|
|
942
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
947
943
|
// The visible words say what; the group's name, read after them, says where.
|
|
948
944
|
aria-describedby={titleId}
|
|
949
945
|
pending={isQueued(key) && confirming !== g.key}
|
|
@@ -974,7 +970,7 @@ export function TranslationReviewPanel({
|
|
|
974
970
|
}}
|
|
975
971
|
variant="primary"
|
|
976
972
|
size="sm"
|
|
977
|
-
commit
|
|
973
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
978
974
|
aria-describedby={questionId}
|
|
979
975
|
pending={isQueued(key)}
|
|
980
976
|
disabled={busy}
|
|
@@ -1090,7 +1086,7 @@ export function TranslationReviewPanel({
|
|
|
1090
1086
|
<Button
|
|
1091
1087
|
variant="primary"
|
|
1092
1088
|
size="sm"
|
|
1093
|
-
commit
|
|
1089
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
1094
1090
|
pending={isQueued("bulk-approve")}
|
|
1095
1091
|
disabled={busy || toApprove.length === 0}
|
|
1096
1092
|
onClick={() => void approveSelected()}
|
|
@@ -1102,7 +1098,7 @@ export function TranslationReviewPanel({
|
|
|
1102
1098
|
<Button
|
|
1103
1099
|
variant="ghost"
|
|
1104
1100
|
size="sm"
|
|
1105
|
-
commit
|
|
1101
|
+
commit={COMMIT_EXCEPT_BILLING}
|
|
1106
1102
|
pending={isQueued("bulk-reset")}
|
|
1107
1103
|
disabled={busy || toReset.length === 0}
|
|
1108
1104
|
onClick={() => void resetSelected()}
|