@danxbot/ui 20.23.3 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/index.js +23607 -22540
  2. package/dist/index.js.map +1 -1
  3. package/dist/pure.js +290 -210
  4. package/dist/pure.js.map +1 -1
  5. package/dist/types/components/AppShell.d.ts +1 -1
  6. package/dist/types/components/Board.d.ts +4 -6
  7. package/dist/types/components/Card.d.ts +25 -1
  8. package/dist/types/components/Combobox.d.ts +2 -1
  9. package/dist/types/components/CommandPalette.d.ts +2 -0
  10. package/dist/types/components/DateField.d.ts +2 -2
  11. package/dist/types/components/DragDrop.d.ts +2 -4
  12. package/dist/types/components/InlineEdit.d.ts +4 -4
  13. package/dist/types/components/InlineMarkdownEdit.d.ts +2 -2
  14. package/dist/types/components/PagedWindowList.d.ts +1 -9
  15. package/dist/types/components/Progress.d.ts +4 -4
  16. package/dist/types/components/ReadMore.d.ts +2 -2
  17. package/dist/types/components/SecretField.d.ts +1 -1
  18. package/dist/types/components/Slider.d.ts +1 -1
  19. package/dist/types/components/SortMenu.d.ts +1 -1
  20. package/dist/types/components/Stat.d.ts +1 -1
  21. package/dist/types/components/StatusSelect.d.ts +1 -1
  22. package/dist/types/components/TriStateSwitch.d.ts +1 -7
  23. package/dist/types/components/board/context.d.ts +2 -4
  24. package/dist/types/components/calendar/CalendarMonth.d.ts +2 -3
  25. package/dist/types/components/calendar/CalendarTimeGrid.d.ts +1 -2
  26. package/dist/types/components/calendar/EventActions.d.ts +1 -2
  27. package/dist/types/components/calendar/format.d.ts +10 -9
  28. package/dist/types/components/calendar/use-calendar-drag.d.ts +0 -1
  29. package/dist/types/components/calendar/use-event-keyboard.d.ts +0 -1
  30. package/dist/types/components/chart/BarList.d.ts +1 -1
  31. package/dist/types/components/chart/ShareBar.d.ts +1 -1
  32. package/dist/types/components/chart/TimeSeriesChart.d.ts +2 -4
  33. package/dist/types/components/chart/shared.d.ts +2 -2
  34. package/dist/types/components/chart/time-series-scale.d.ts +1 -1
  35. package/dist/types/components/chat/EffortControl.d.ts +2 -2
  36. package/dist/types/components/chat/MessageScroller.d.ts +1 -1
  37. package/dist/types/components/checklist/StatusChecklist.d.ts +1 -1
  38. package/dist/types/components/edit/outcome.d.ts +0 -12
  39. package/dist/types/components/file-viewer/frames.d.ts +2 -1
  40. package/dist/types/components/kanban/KanbanBoard.d.ts +2 -21
  41. package/dist/types/components/kanban/types.d.ts +1 -1
  42. package/dist/types/components/markdown/Affordances.d.ts +3 -1
  43. package/dist/types/components/openapi/resolve.d.ts +7 -3
  44. package/dist/types/components/openapi/types.d.ts +2 -1
  45. package/dist/types/components/provenance/ConfidenceBar.d.ts +1 -1
  46. package/dist/types/components/provenance/ConfidenceReadout.d.ts +2 -2
  47. package/dist/types/components/provenance/ProvenanceBadge.d.ts +4 -3
  48. package/dist/types/components/provenance/ProvenanceDetail.d.ts +4 -6
  49. package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +1 -1
  50. package/dist/types/components/provenance/absence.d.ts +4 -3
  51. package/dist/types/components/rbac/RoleKeyPicker.d.ts +1 -1
  52. package/dist/types/components/rbac/permissionSections.d.ts +1 -1
  53. package/dist/types/components/rbac/stagedForm.d.ts +4 -4
  54. package/dist/types/components/roadmap/RoadmapItemCard.d.ts +0 -1
  55. package/dist/types/index.d.ts +9 -7
  56. package/dist/types/lib/board/index.d.ts +2 -1
  57. package/dist/types/lib/board/move.d.ts +2 -2
  58. package/dist/types/lib/board/rejection.d.ts +8 -0
  59. package/dist/types/lib/board/types.d.ts +46 -0
  60. package/dist/types/lib/board/use-board.d.ts +2 -2
  61. package/dist/types/lib/calendar/drag.d.ts +1 -1
  62. package/dist/types/lib/calendar/index.d.ts +1 -1
  63. package/dist/types/lib/calendar/types.d.ts +3 -3
  64. package/dist/types/lib/confidence.d.ts +5 -0
  65. package/dist/types/lib/dnd/announce.d.ts +5 -23
  66. package/dist/types/lib/dnd/index.d.ts +1 -1
  67. package/dist/types/lib/format.d.ts +19 -18
  68. package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +258 -0
  69. package/dist/types/lib/i18n/areas/board.d.ts +51 -0
  70. package/dist/types/lib/i18n/areas/chat-chart.d.ts +164 -0
  71. package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
  72. package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
  73. package/dist/types/lib/i18n/areas/docs-views.d.ts +268 -0
  74. package/dist/types/lib/i18n/areas/feedback.d.ts +104 -0
  75. package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
  76. package/dist/types/lib/i18n/areas/forms.d.ts +130 -0
  77. package/dist/types/lib/i18n/areas/markdown.d.ts +139 -0
  78. package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
  79. package/dist/types/lib/i18n/areas/navigation.d.ts +144 -0
  80. package/dist/types/lib/i18n/areas/rbac.d.ts +584 -0
  81. package/dist/types/lib/i18n/emphasis.d.ts +3 -0
  82. package/dist/types/lib/i18n/index.d.ts +8 -0
  83. package/dist/types/lib/i18n/number-format.d.ts +5 -0
  84. package/dist/types/lib/i18n/plural.d.ts +7 -0
  85. package/dist/types/lib/i18n/provider.d.ts +16 -0
  86. package/dist/types/lib/i18n/strings.d.ts +15 -0
  87. package/dist/types/lib/intl-cache.d.ts +31 -0
  88. package/dist/types/lib/markdown/commands.d.ts +4 -2
  89. package/dist/types/lib/markdown/dom.d.ts +27 -21
  90. package/dist/types/lib/markdown/hotkeys.d.ts +12 -5
  91. package/dist/types/lib/markdown/image-decoration.d.ts +22 -1
  92. package/dist/types/lib/markdown/image-pipeline.d.ts +2 -0
  93. package/dist/types/lib/markdown/images.d.ts +1 -1
  94. package/dist/types/lib/markdown/reconcile.d.ts +4 -2
  95. package/dist/types/lib/markdown/surface.d.ts +4 -2
  96. package/dist/types/lib/reduced-motion-help.d.ts +2 -1
  97. package/dist/types/lib/time/relativeAge.d.ts +3 -2
  98. package/dist/types/lib/time/zone.d.ts +9 -0
  99. package/dist/types/lib/values/boolean.d.ts +11 -10
  100. package/dist/types/lib/values/currency.d.ts +5 -5
  101. package/dist/types/lib/values/date.d.ts +4 -4
  102. package/dist/types/lib/values/datetime.d.ts +3 -3
  103. package/dist/types/lib/values/locale-date.d.ts +34 -0
  104. package/dist/types/lib/values/number.d.ts +5 -5
  105. package/dist/types/pure.d.ts +1 -0
  106. package/package.json +1 -1
@@ -70,7 +70,7 @@ interface InlineEditFieldProps {
70
70
  * What the control shows in place of a blank value, and its
71
71
  * `aria-placeholder`.
72
72
  *
73
- * @default "Empty"
73
+ * Omit for the built-in empty text.
74
74
  */
75
75
  placeholder?: string;
76
76
  /** Box ramp. Matches `Input`'s names. */
@@ -122,9 +122,9 @@ interface InlineEditFieldProps {
122
122
  * What is shown when the commit REJECTS (a thrown error or a rejected
123
123
  * promise — never a `{ refusal }`, which renders its own text).
124
124
  *
125
- * @default "Could not save. Your text is still here — press <key> to try again.",
126
- * where <key> is the key that commits in this configuration: Enter, or
127
- * Ctrl+Enter for a `multiline` field without `autosaveMs`.
125
+ * Omit for the built-in sentence, which names the key that commits in this
126
+ * configuration: Enter, or Ctrl+Enter for a `multiline` field without
127
+ * `autosaveMs` (blur never re-attempts a failed value, DX-3372 review L1).
128
128
  */
129
129
  failureMessage?: string;
130
130
  /** The rejected error, handed on so it can be logged or reported. */
@@ -25,7 +25,7 @@ export interface InlineMarkdownEditProps extends EditActivation {
25
25
  editing: boolean;
26
26
  /** The accessible name of the field and of its editor. */
27
27
  label: string;
28
- /** Shown at rest and in the editor when the value is empty. @default "Empty" */
28
+ /** Shown at rest and in the editor when the value is empty. Omit for the built-in text. */
29
29
  placeholder?: string;
30
30
  /** Collapse the rendered view to this many lines behind a `ReadMore`. */
31
31
  collapsedLines?: number;
@@ -55,7 +55,7 @@ export interface InlineMarkdownEditProps extends EditActivation {
55
55
  * What is shown when the commit REJECTS (never a `{ refusal }`, which
56
56
  * renders its own text).
57
57
  *
58
- * @default "Could not save. Your text is still here — press Ctrl+Enter to try again."
58
+ * Omit for the built-in sentence, which names Ctrl+Enter as the retry key.
59
59
  */
60
60
  failureMessage?: string;
61
61
  /** The rejected error, handed on so it can be logged or reported. */
@@ -1,11 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
2
  import type { PagedWindow } from "../lib/paged-window";
3
- export interface PagedWindowStrings {
4
- /** Shown in a page whose request failed. */
5
- error: string;
6
- /** The retry button's label. */
7
- retry: string;
8
- }
9
3
  export interface PagedWindowItemPosition {
10
4
  /** Position among the items currently shown, across every shown page. */
11
5
  local: number;
@@ -24,8 +18,6 @@ export interface PagedWindowListProps<T> {
24
18
  * arrive, so it only has to be close.
25
19
  */
26
20
  estimatedItemHeight: number;
27
- /** Words in the failed-page row. */
28
- strings?: Partial<PagedWindowStrings>;
29
21
  className?: string;
30
22
  }
31
- export declare function PagedWindowList<T>({ source, getKey, renderItem, estimatedItemHeight, strings, className, }: PagedWindowListProps<T>): import("react").JSX.Element;
23
+ export declare function PagedWindowList<T>({ source, getKey, renderItem, estimatedItemHeight, className, }: PagedWindowListProps<T>): import("react").JSX.Element;
@@ -230,7 +230,7 @@ export interface ProgressProps extends VariantProps<typeof bar> {
230
230
  className?: string;
231
231
  ref?: Ref<HTMLDivElement>;
232
232
  }
233
- export declare function Progress({ value, label, format, showValue, size, tone, className, ref, }: ProgressProps): import("react").JSX.Element;
233
+ export declare function Progress({ value, label, format: formatProp, showValue, size, tone, className, ref, }: ProgressProps): import("react").JSX.Element;
234
234
  export interface MeterProps extends VariantProps<typeof bar> {
235
235
  value: number;
236
236
  min?: number;
@@ -273,7 +273,7 @@ declare const ring: import("tailwind-variants").TVReturnType<{
273
273
  * Extracted-tab EXTRACTED/AUDITS/HUMAN VERIFIED/answer-key row) needs more
274
274
  * room than `lg` for a "count/total" fraction than a bare percentage ever
275
275
  * did — `lg` was sized for two digits, and a real fraction runs to eight
276
- * or nine characters even compacted ("1.1k/1.5k"). `xl` is that room.
276
+ * or nine characters even compacted ("1.1K/1.5K"). `xl` is that room.
277
277
  */
278
278
  xl: "size-32";
279
279
  };
@@ -307,7 +307,7 @@ declare const ring: import("tailwind-variants").TVReturnType<{
307
307
  * Extracted-tab EXTRACTED/AUDITS/HUMAN VERIFIED/answer-key row) needs more
308
308
  * room than `lg` for a "count/total" fraction than a bare percentage ever
309
309
  * did — `lg` was sized for two digits, and a real fraction runs to eight
310
- * or nine characters even compacted ("1.1k/1.5k"). `xl` is that room.
310
+ * or nine characters even compacted ("1.1K/1.5K"). `xl` is that room.
311
311
  */
312
312
  xl: "size-32";
313
313
  };
@@ -341,7 +341,7 @@ declare const ring: import("tailwind-variants").TVReturnType<{
341
341
  * Extracted-tab EXTRACTED/AUDITS/HUMAN VERIFIED/answer-key row) needs more
342
342
  * room than `lg` for a "count/total" fraction than a bare percentage ever
343
343
  * did — `lg` was sized for two digits, and a real fraction runs to eight
344
- * or nine characters even compacted ("1.1k/1.5k"). `xl` is that room.
344
+ * or nine characters even compacted ("1.1K/1.5K"). `xl` is that room.
345
345
  */
346
346
  xl: "size-32";
347
347
  };
@@ -10,9 +10,9 @@ export interface ReadMoreProps {
10
10
  defaultExpanded?: boolean;
11
11
  /** Fires on every toggle, controlled or not. */
12
12
  onExpandedChange?: (expanded: boolean) => void;
13
- /** @default "Read more" */
13
+ /** Absent, the built-in "Read more" word of the active `UiLocaleProvider`. */
14
14
  moreLabel?: string;
15
- /** @default "Show less" */
15
+ /** Absent, the built-in "Show less" word of the active `UiLocaleProvider`. */
16
16
  lessLabel?: string;
17
17
  className?: string;
18
18
  ref?: Ref<HTMLDivElement>;
@@ -41,7 +41,7 @@ export interface SecretFieldProps extends Pick<FieldProps, "label" | "descriptio
41
41
  * never rendered while there is no typed text to reveal.
42
42
  */
43
43
  revealable?: boolean;
44
- /** Label on the destructive confirm button. Default "Clear". */
44
+ /** Label on the destructive confirm button. Absent, the built-in "Clear" word of the active `UiLocaleProvider`. */
45
45
  clearConfirmLabel?: string;
46
46
  ref?: Ref<HTMLInputElement>;
47
47
  }
@@ -227,5 +227,5 @@ export interface SliderProps extends Omit<VariantProps<typeof slider>, "disabled
227
227
  className?: string;
228
228
  ref?: Ref<HTMLDivElement>;
229
229
  }
230
- export declare function Slider({ value, defaultValue, onValueChange, onValueCommitted, min, max, step, minStepsBetweenValues, thumbCollision, meetingThumbs, thumbLabels, thumbMarkers, label, format, showValue, marks, tooltip, size, tone, disabled, className, ref, }: SliderProps): import("react").JSX.Element;
230
+ export declare function Slider({ value, defaultValue, onValueChange, onValueCommitted, min, max, step, minStepsBetweenValues, thumbCollision, meetingThumbs, thumbLabels, thumbMarkers, label, format: formatProp, showValue, marks, tooltip, size, tone, disabled, className, ref, }: SliderProps): import("react").JSX.Element;
231
231
  export {};
@@ -8,7 +8,7 @@ export interface SortOption<Field extends string = string> {
8
8
  /**
9
9
  * What each direction means for THIS field, in the words that fit it
10
10
  * ("A to Z" / "Z to A", "Oldest first" / "Newest first"). Absent, the
11
- * directions read "Ascending" / "Descending". It names the arrows to
11
+ * directions read the built-in "Ascending" / "Descending" words of the active `UiLocaleProvider`. It names the arrows to
12
12
  * assistive technology and appears in their tooltips, so a person is never
13
13
  * left decoding which way an arrow sorts a date.
14
14
  */
@@ -91,7 +91,7 @@ export interface StatProps extends VariantProps<typeof stat> {
91
91
  value: ReactNode;
92
92
  /** Rendered smaller, beside the value — "ms", "/min", "GB". */
93
93
  unit?: ReactNode;
94
- /** The change itself — "12%", "+1.2k". */
94
+ /** The change itself — "12%", "+1.2K". */
95
95
  delta?: ReactNode;
96
96
  trend?: StatTrend;
97
97
  /** Whether that movement is good. Independent of direction, on purpose. */
@@ -58,7 +58,7 @@ export interface StatusSelectProps<Value extends string = string> {
58
58
  * always a mistake somewhere, so this is the wording of the report rather
59
59
  * than a label anyone should be seeing.
60
60
  *
61
- * Defaults to "Unknown". It is NOT the raw value: see the component body.
61
+ * Absent, the built-in "Unknown" word of the active `UiLocaleProvider`. It is NOT the raw value: see the component body.
62
62
  */
63
63
  placeholder?: ReactNode;
64
64
  className?: string;
@@ -52,12 +52,6 @@ export interface TriStateSwitchProps {
52
52
  onValueChange: (value: boolean | null) => void;
53
53
  /** The question being answered — the group's accessible name. Required. */
54
54
  "aria-label": string;
55
- /** The words for each stop, read aloud and shown in the caption. */
56
- labels?: {
57
- yes?: string;
58
- no?: string;
59
- unset?: string;
60
- };
61
55
  /** Shows the current state's word beside the track. @default true */
62
56
  showCaption?: boolean;
63
57
  disabled?: boolean;
@@ -65,5 +59,5 @@ export interface TriStateSwitchProps {
65
59
  size?: TriStateSwitchSize;
66
60
  className?: string;
67
61
  }
68
- export declare function TriStateSwitch({ value, onValueChange, "aria-label": ariaLabel, labels, showCaption, disabled, size, className, }: TriStateSwitchProps): import("react").JSX.Element;
62
+ export declare function TriStateSwitch({ value, onValueChange, "aria-label": ariaLabel, showCaption, disabled, size, className, }: TriStateSwitchProps): import("react").JSX.Element;
69
63
  export {};
@@ -1,4 +1,4 @@
1
- import type { BoardColumnId, BoardColumnModel, BoardItemId, BoardMoveRequest, BoardMoveVerdict, BoardReorderLabels } from "../../lib/board";
1
+ import type { BoardColumnId, BoardColumnModel, BoardItemId, BoardMoveRequest, BoardMoveOutcome, BoardReorderLabels } from "../../lib/board";
2
2
  import type { CrossDrop } from "../../lib/dnd";
3
3
  export declare const BoardCardSurfaceContext: import("react").Context<boolean>;
4
4
  /** `true` when an ancestor `BoardCardSurface` makes this whole card draggable. */
@@ -21,14 +21,12 @@ export interface BoardContextValue<T> {
21
21
  * never fails silently" true of every source by construction, not by
22
22
  * convention.
23
23
  */
24
- requestMove: (request: BoardMoveRequest) => BoardMoveVerdict;
24
+ requestMove: (request: BoardMoveRequest) => BoardMoveOutcome;
25
25
  /** The words for the card menu's within-column items (`Board`'s `reorderLabels`). */
26
26
  reorderLabels: BoardReorderLabels;
27
27
  /** What a card dropped on another lane means — `Board`'s `crossLaneDrop`. */
28
28
  crossLaneDrop: CrossDrop;
29
29
  }
30
- /** What the menu says when `Board` is given no `reorderLabels`. */
31
- export declare const DEFAULT_REORDER_LABELS: BoardReorderLabels;
32
30
  export interface BoardColumnContextValue {
33
31
  columnId: BoardColumnId;
34
32
  label: string;
@@ -21,13 +21,12 @@ export interface CalendarMonthProps {
21
21
  * See `packBand`; the affordance is counted so it cannot be drawn over an event.
22
22
  */
23
23
  maxEventRows?: number;
24
- locale?: string;
25
24
  /** Replace a chip's contents. The chip itself — button, label, colour — stays ours. */
26
25
  renderEvent?: (event: CalendarEvent) => ReactNode;
27
26
  className?: string;
28
- /** Accessible name for the grid. */
27
+ /** Accessible name for the grid. Omit for the built-in one. */
29
28
  label?: string;
30
29
  }
31
- export declare function CalendarMonth({ month: monthProp, zone, events, weekStartsOn, today, selectedDate, onSelectDate, onSelectEvent, onMonthChange, maxEventRows, locale, renderEvent, className, label, }: CalendarMonthProps): import("react").JSX.Element;
30
+ export declare function CalendarMonth({ month: monthProp, zone, events, weekStartsOn, today, selectedDate, onSelectDate, onSelectEvent, onMonthChange, maxEventRows, renderEvent, className, label, }: CalendarMonthProps): import("react").JSX.Element;
32
31
  /** The first day of the month `date` falls in — re-exported for consumers paging. */
33
32
  export { startOfMonth, addDays };
@@ -67,9 +67,8 @@ export interface CalendarTimeGridProps {
67
67
  * same three outcomes: a new day, a new start, a new length.
68
68
  */
69
69
  eventActions?: boolean;
70
- locale?: string;
71
70
  renderEvent?: (event: CalendarEvent) => ReactNode;
72
71
  className?: string;
73
72
  label?: string;
74
73
  }
75
- export declare function CalendarTimeGrid({ days, zone, events, today, onSelectEvent, slotMinutes, slotHeightPx, scrollToHour, maxAllDayRows, maxLanes, overlapMode, nowInstant, snapMinutes, onEventChange, onCreate, onAnnounce, eventActions, locale, renderEvent, className, label, }: CalendarTimeGridProps): import("react").JSX.Element;
74
+ export declare function CalendarTimeGrid({ days, zone, events, today, onSelectEvent, slotMinutes, slotHeightPx, scrollToHour, maxAllDayRows, maxLanes, overlapMode, nowInstant, snapMinutes, onEventChange, onCreate, onAnnounce, eventActions, renderEvent, className, label, }: CalendarTimeGridProps): import("react").JSX.Element;
@@ -11,7 +11,6 @@ export interface EventActionsProps {
11
11
  maxDurationMinutes?: number;
12
12
  onApply: (next: TimedEvent) => void;
13
13
  onClose?: () => void;
14
- locale?: string;
15
14
  className?: string;
16
15
  }
17
- export declare function EventActions({ event, zone, days, snapMinutes, maxDurationMinutes, onApply, onClose, locale, className, }: EventActionsProps): import("react").JSX.Element;
16
+ export declare function EventActions({ event, zone, days, snapMinutes, maxDurationMinutes, onApply, onClose, className, }: EventActionsProps): import("react").JSX.Element;
@@ -1,17 +1,18 @@
1
1
  import { type Instant, type PlainDate, type TimeZone } from "@/lib/time";
2
2
  import type { CalendarEvent } from "@/lib/calendar/types";
3
+ import type { CalendarStrings } from "@/lib/i18n/areas/dates";
3
4
  /** `Monday` / `Mon` / `M`, in the viewer's locale. */
4
- export declare function weekdayName(date: PlainDate, width: "long" | "short" | "narrow", locale?: string): string;
5
+ export declare function weekdayName(date: PlainDate, width: "long" | "short" | "narrow", locale: string): string;
5
6
  /** `15` — the number in the cell. */
6
- export declare function dayNumber(date: PlainDate, locale?: string): string;
7
+ export declare function dayNumber(date: PlainDate, locale: string): string;
7
8
  /** `June 2026` — the view's title. */
8
- export declare function monthTitle(date: PlainDate, locale?: string): string;
9
+ export declare function monthTitle(date: PlainDate, locale: string): string;
9
10
  /** `Monday, 15 June 2026` — a cell's accessible name starts with this. */
10
- export declare function longDate(date: PlainDate, locale?: string): string;
11
+ export declare function longDate(date: PlainDate, locale: string): string;
11
12
  /** `9:30 AM` in the calendar's zone — never the host's. */
12
- export declare function timeOfDay(instant: Instant, zone: TimeZone, locale?: string, withMinutes?: boolean): string;
13
+ export declare function timeOfDay(instant: Instant, zone: TimeZone, locale: string, withMinutes?: boolean): string;
13
14
  /** `GMT−6` — the label above the hour gutter. */
14
- export declare function zoneLabel(zone: TimeZone, at: Instant, locale?: string): string;
15
+ export declare function zoneLabel(zone: TimeZone, at: Instant, locale: string): string;
15
16
  /**
16
17
  * The human range of an event: `15–17 June`, `9:30 – 10:30 AM`, `All day`.
17
18
  *
@@ -21,7 +22,7 @@ export declare function zoneLabel(zone: TimeZone, at: Instant, locale?: string):
21
22
  * most-reported bug in calendar interoperability, so it happens once, here,
22
23
  * where a test can point at it.
23
24
  */
24
- export declare function formatDateRange(event: CalendarEvent, zone: TimeZone, locale?: string): string;
25
+ export declare function formatDateRange(event: CalendarEvent, zone: TimeZone, locale: string, strings: CalendarStrings): string;
25
26
  /**
26
27
  * A cell's accessible name: `Monday, 15 June 2026, 3 events`.
27
28
  *
@@ -30,7 +31,7 @@ export declare function formatDateRange(event: CalendarEvent, zone: TimeZone, lo
30
31
  * is empty. Arrowing across a month hearing "14. 15. 16." tells them nothing
31
32
  * about where the work is.
32
33
  */
33
- export declare function cellLabel(date: PlainDate, eventCount: number, locale?: string): string;
34
+ export declare function cellLabel(date: PlainDate, eventCount: number, locale: string, strings: CalendarStrings): string;
34
35
  /**
35
36
  * An event chip's accessible name.
36
37
  *
@@ -38,4 +39,4 @@ export declare function cellLabel(date: PlainDate, eventCount: number, locale?:
38
39
  * two identically-titled events on different calendars are distinguishable
39
40
  * without seeing the colour.
40
41
  */
41
- export declare function eventLabel(event: CalendarEvent, zone: TimeZone, paletteLabel: string | undefined, locale?: string): string;
42
+ export declare function eventLabel(event: CalendarEvent, zone: TimeZone, paletteLabel: string | undefined, locale: string, strings: CalendarStrings): string;
@@ -17,7 +17,6 @@ export interface CalendarDragOptions {
17
17
  }) => void;
18
18
  /** Fired on every committed slot change, for the live region. */
19
19
  readonly onAnnounce?: (message: string) => void;
20
- readonly locale?: string;
21
20
  readonly disabled?: boolean;
22
21
  }
23
22
  export interface CalendarDragState {
@@ -9,7 +9,6 @@ export interface EventKeyboardOptions {
9
9
  readonly days: readonly PlainDate[];
10
10
  readonly onCommit: (event: TimedEvent, next: TimedEvent) => void;
11
11
  readonly onAnnounce?: (message: string) => void;
12
- readonly locale?: string;
13
12
  }
14
13
  export interface EventKeyboardState {
15
14
  /** The event currently held, or null. */
@@ -24,4 +24,4 @@ export interface BarListProps {
24
24
  className?: string;
25
25
  ref?: Ref<HTMLUListElement>;
26
26
  }
27
- export declare function BarList({ items, label, maxItems, formatValue, className, ref }: BarListProps): import("react").JSX.Element;
27
+ export declare function BarList({ items, label, maxItems, formatValue: formatCaller, className, ref }: BarListProps): import("react").JSX.Element;
@@ -17,4 +17,4 @@ export interface ShareBarProps {
17
17
  className?: string;
18
18
  ref?: Ref<HTMLDivElement>;
19
19
  }
20
- export declare function ShareBar({ segments, label, formatValue, className, ref }: ShareBarProps): import("react").JSX.Element;
20
+ export declare function ShareBar({ segments, label, formatValue: formatCaller, className, ref }: ShareBarProps): import("react").JSX.Element;
@@ -44,17 +44,15 @@ export interface TimeSeriesChartProps {
44
44
  formatValue?: (value: number) => string;
45
45
  /** How a value reads on the y axis; use a compact form here. @default `formatValue` */
46
46
  formatAxis?: (value: number) => string;
47
- /** Locale of the time labels. @default the viewer's */
48
- locale?: string;
49
47
  /** IANA zone the buckets are labelled in, e.g. "UTC". @default the viewer's */
50
48
  timeZone?: string;
51
49
  /** Called with a member series' key when its band or its legend name is clicked. */
52
50
  onSelectSeries?: (key: string) => void;
53
51
  /** Plot height in px. @default 240 */
54
52
  height?: number;
55
- /** Said when there is nothing to draw. @default "No data" */
53
+ /** Said when there is nothing to draw. @default the built-in "No data" */
56
54
  emptyLabel?: string;
57
- /** Said over the axis when every value is zero. @default "All values are zero" */
55
+ /** Said over the axis when every value is zero. @default the built-in "All values are zero" */
58
56
  zeroLabel?: string;
59
57
  className?: string;
60
58
  ref?: Ref<HTMLDivElement>;
@@ -18,9 +18,9 @@ export declare function assertChartData(component: string, data: readonly ChartD
18
18
  * (`4.5%`), and `<1%` for a real but tiny share so a nonzero segment is never
19
19
  * printed as `0%`. A zero total reads `0%`, never `NaN%`.
20
20
  */
21
- export declare function formatShare(fraction: number): string;
21
+ export declare function formatShare(fraction: number, locale: string): string;
22
22
  /** The default way a raw value reads. Callers pass `formatValue` for units. */
23
- export declare function defaultFormatValue(value: number): string;
23
+ export declare function defaultFormatValue(value: number, locale: string): string;
24
24
  /**
25
25
  * A tooltip a keyboard and a finger can reach. Base UI opens its tooltip on
26
26
  * hover and on KEYBOARD focus only — a tap or a programmatic focus never
@@ -24,6 +24,6 @@ export interface TimeFormatters {
24
24
  * its date; a month or wider by month and year. `timeZone` is passed straight
25
25
  * to `Intl` (an unknown zone throws, loudly); undefined is the viewer's own.
26
26
  */
27
- export declare function timeFormatters(bucketMs: number, locale: string | undefined, timeZone: string | undefined): TimeFormatters;
27
+ export declare function timeFormatters(bucketMs: number, locale: string, timeZone: string | undefined): TimeFormatters;
28
28
  /** The index of the bucket whose span `[start, start + bucketMs)` holds `at`, or -1. */
29
29
  export declare function bucketIndexAt(buckets: readonly number[], bucketMs: number, at: number): number;
@@ -6,8 +6,8 @@ export interface EffortLevel {
6
6
  /** One line explaining the trade at this stop. */
7
7
  description?: ReactNode;
8
8
  }
9
- export declare const DEFAULT_EFFORT_LEVELS: EffortLevel[];
10
9
  export interface EffortControlProps {
10
+ /** The scale, lowest first. @default the built-in five-step scale */
11
11
  levels?: EffortLevel[];
12
12
  value: string;
13
13
  onValueChange: (id: string) => void;
@@ -20,4 +20,4 @@ export interface EffortControlProps {
20
20
  disabled?: boolean;
21
21
  className?: string;
22
22
  }
23
- export declare function EffortControl({ levels, value, onValueChange, help, inline, side, align, disabled, className, }: EffortControlProps): import("react").JSX.Element;
23
+ export declare function EffortControl({ levels: levelsProp, value, onValueChange, help, inline, side, align, disabled, className, }: EffortControlProps): import("react").JSX.Element;
@@ -3,7 +3,7 @@ export interface MessageScrollerProps {
3
3
  children: ReactNode;
4
4
  /** Distance from the bottom, in px, still counted as "at the bottom". */
5
5
  threshold?: number;
6
- /** Label for the return-to-newest button. */
6
+ /** Label for the return-to-newest button. @default the built-in "Jump to latest" */
7
7
  jumpLabel?: string;
8
8
  /** Fades content at the top edge so it reads as continuing past the frame. */
9
9
  fade?: boolean;
@@ -27,7 +27,7 @@ export interface StatusChecklistProps<Key extends string = string> {
27
27
  * information the consumer put in deliberately.
28
28
  */
29
29
  order?: "state" | "given";
30
- /** Shown when `items` is empty. `EmptyState` supplies the shape. */
30
+ /** Shown when `items` is empty (absent means the provider's own words). `EmptyState` supplies the shape. */
31
31
  emptyTitle?: ReactNode;
32
32
  emptyDescription?: ReactNode;
33
33
  emptyAction?: ReactNode;
@@ -10,18 +10,6 @@ export type EditOutcome = void | EditRefusal;
10
10
  export type EditCommit = (value: string, base: string) => EditOutcome | Promise<EditOutcome>;
11
11
  export declare function isRefusal(outcome: EditOutcome): outcome is EditRefusal;
12
12
  export declare function isPromise(outcome: EditOutcome | Promise<EditOutcome>): outcome is Promise<EditOutcome>;
13
- /**
14
- * The key that retries a failed save in a given field: Enter where Enter
15
- * commits, Ctrl+Enter where Enter inserts a newline. (Both fields accept
16
- * Cmd+Enter as well as Ctrl+Enter, so "Ctrl+Enter" is true on every platform.)
17
- */
18
- export type RetryKey = "Enter" | "Ctrl+Enter";
19
- /**
20
- * The default failure message. It names the retry key because blur never
21
- * re-attempts a failed value — DX-3372 review L1: the single shared sentence
22
- * said "press Enter" in fields where Enter inserts a newline.
23
- */
24
- export declare function defaultFailureMessage(retryKey: RetryKey): string;
25
13
  /**
26
14
  * A refusal nobody can read leaves the field open with nothing beside it — the
27
15
  * exact silent failure the outcome contract exists to rule out — so an empty
@@ -1,3 +1,4 @@
1
+ import type { UiStrings } from "../../lib/i18n";
1
2
  import type { ViewerFile, ViewerFrame } from "./types";
2
3
  /** Where the reader is. The ids are the truth; `index` only says where to land
3
4
  when both have vanished (the nearest position). */
@@ -24,4 +25,4 @@ export interface Start {
24
25
  */
25
26
  export declare function startFrame(frames: readonly ViewerFrame[], start: Start): ViewerFrame | null;
26
27
  /** The frame's name, for a screen reader and for an alt attribute. */
27
- export declare function frameLabel(frame: ViewerFrame): string;
28
+ export declare function frameLabel(frame: ViewerFrame, strings: UiStrings["fileViewer"], fmt: (n: number) => string): string;
@@ -1,6 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
2
  import type { DragSessionCallbacks } from "../../lib/dnd";
3
- import { type DragDropProps } from "../DragDrop";
4
3
  import type { KanbanLane, KanbanMove, KanbanRefusal } from "./types";
5
4
  export type { KanbanLane, KanbanMove, KanbanRefusal };
6
5
  export interface KanbanBoardProps<T> extends Omit<DragSessionCallbacks, "onDragEnd"> {
@@ -39,26 +38,8 @@ export interface KanbanBoardProps<T> extends Omit<DragSessionCallbacks, "onDragE
39
38
  onMove: (move: KanbanMove) => void;
40
39
  /** Called INSTEAD of `onMove` when the destination lane carries a `refusal`. */
41
40
  onRefuse?: (refusal: KanbanRefusal) => void;
42
- /** Shown in a lane with no cards. */
41
+ /** Shown in a lane with no cards. Omitted, the provider's `kanban.empty`. */
43
42
  emptyLane?: ReactNode;
44
- /**
45
- * Override any part of the announcement grammar — `DragDrop.strings`, reached
46
- * through the board.
47
- *
48
- * IT WAS UNREACHABLE, and the omission had a symptom. The default sentence is
49
- * `… Position 1 of 4 in ${containerLabel}`, which reads correctly right up
50
- * until a lane is called "In review" and a screen reader says "in In review".
51
- * That is a property of the lane's NAME rather than of the template, so there
52
- * is no template this component could ship that is right for every board —
53
- * which is precisely why the engine exposes the grammar, and precisely why a
54
- * board that swallowed the prop left its consumer with no way out of a
55
- * sentence they could hear was wrong. Rename the lane, or write the sentence:
56
- *
57
- * ```tsx
58
- * strings={{ picked: (c) => `Picked up ${c.label}, ${c.containerLabel} column.` }}
59
- * ```
60
- */
61
- strings?: DragDropProps["strings"];
62
43
  /**
63
44
  * Fill the space between the board's own top and the bottom of whatever
64
45
  * scrolls it, so the lanes are the only thing that scrolls down.
@@ -88,4 +69,4 @@ export interface KanbanBoardProps<T> extends Omit<DragSessionCallbacks, "onDragE
88
69
  fill?: boolean;
89
70
  className?: string;
90
71
  }
91
- export declare function KanbanBoard<T>({ label, lanes, getItemId, itemLabel, renderItem, renderDragging, onMove, onRefuse, emptyLane, strings, fill, className, ...callbacks }: KanbanBoardProps<T>): import("react").JSX.Element;
72
+ export declare function KanbanBoard<T>({ label, lanes, getItemId, itemLabel, renderItem, renderDragging, onMove, onRefuse, emptyLane, fill, className, ...callbacks }: KanbanBoardProps<T>): import("react").JSX.Element;
@@ -50,6 +50,6 @@ export interface KanbanMove {
50
50
  export interface KanbanRefusal {
51
51
  id: string;
52
52
  lane: string;
53
- /** Verbatim from the lane's `refusal`. */
53
+ /** The sentence shown: the lane's `refusal` verbatim, or the provider's `moveRejected` wording of the core's refusal. */
54
54
  reason: string;
55
55
  }
@@ -1,3 +1,4 @@
1
+ import { type UiStrings } from "../../lib/i18n";
1
2
  import { type BlockInfo, type BlockKind, type ConstructInfo, type InlineMark } from "../../lib/markdown/convert";
2
3
  import { type Command } from "../../lib/markdown/commands";
3
4
  import type { MarkdownSurface } from "../../lib/markdown/surface";
@@ -30,7 +31,8 @@ export declare function useEditorState(surface: MarkdownSurface | null, version:
30
31
  interface TypeChoice {
31
32
  kind: BlockKind;
32
33
  level?: number;
33
- label: string;
34
+ /** Which of the active provider's `markdownAffordances.blockTypes` words names this choice. */
35
+ name: keyof UiStrings["markdownAffordances"]["blockTypes"];
34
36
  icon: string;
35
37
  }
36
38
  export interface LineHandleProps {
@@ -33,15 +33,19 @@ export declare function resolveSchema(doc: Pick<OpenApiDocument, "components">,
33
33
  * more specifically, never withdrawing it.
34
34
  */
35
35
  export declare function mergedParameters(pathParameters: readonly OpenApiParameter[], operationParameters: readonly OpenApiParameter[] | undefined): OpenApiParameter[];
36
+ /** The one word `groupOperations` needs; the viewer passes `useUiStrings().openApiViewer`. */
37
+ export interface GroupOperationsStrings {
38
+ untaggedGroup: string;
39
+ }
36
40
  /**
37
41
  * Groups every operation by tag, falling back to the first path segment ONLY
38
42
  * when the document declares no tag on any operation at all — a document
39
43
  * that tags SOME operations and not others puts the untagged remainder in
40
- * "Other" rather than silently switching the whole document to path-based
44
+ * `strings.untaggedGroup` rather than silently switching the whole document to path-based
41
45
  * grouping, so a partially-tagged spec still reads as "the author meant to
42
- * group by tag".
46
+ * group by tag". Groups are ordered the way `locale` sorts their names (DX-4740).
43
47
  */
44
- export declare function groupOperations(doc: OpenApiDocument): OperationGroup[];
48
+ export declare function groupOperations(doc: OpenApiDocument, strings: GroupOperationsStrings, locale: string): OperationGroup[];
45
49
  /**
46
50
  * Every operation of the document's top-level `webhooks` (DX-4178), in
47
51
  * document order, each carrying its webhook NAME as `path` and `webhook:
@@ -120,7 +120,8 @@ export interface OperationGroup {
120
120
  /** The tag name, or — when the document declares no tags at all on the
121
121
  * operations it carries — the first non-empty path segment (`resolve.ts`).
122
122
  * Never both in the same document: a document that tags ANY operation is
123
- * grouped by tag, with untagged operations falling into `"Other"`. */
123
+ * grouped by tag, with untagged operations falling into the group the
124
+ * provider names (`openApiViewer.untaggedGroup`). */
124
125
  readonly name: string;
125
126
  readonly description?: string;
126
127
  readonly operations: readonly ResolvedOperation[];
@@ -107,7 +107,7 @@ export interface ConfidenceBarProps {
107
107
  * What the rating is OF, used verbatim at the head of the accessible name and
108
108
  * the tooltip: `"<label> 3 of 5"`.
109
109
  *
110
- * @default "Confidence"
110
+ * Absent means the provider's own word for it.
111
111
  */
112
112
  label?: string;
113
113
  /** @default "sm" */
@@ -2,13 +2,13 @@ import type { ProvenanceConfidence } from "./types";
2
2
  export interface ConfidenceReadoutProps {
3
3
  confidence: ProvenanceConfidence | null;
4
4
  /**
5
- * What to say when nothing scored it.
5
+ * What to say when nothing scored it. Absent means the provider's own words.
6
6
  *
7
7
  * Text rather than an empty bar, because a bar at zero and a bar with nothing
8
8
  * to show look identical and mean opposite things.
9
9
  */
10
10
  unscoredLabel?: string;
11
- /** What a RATING is of, at the head of its accessible name. @default "Confidence" */
11
+ /** What a RATING is of, at the head of its accessible name. Absent means the provider's own word. */
12
12
  ratingLabel?: string;
13
13
  /** Hides the band name on a SCORE, for dense rows where the bar is enough. */
14
14
  compact?: boolean;
@@ -1,3 +1,4 @@
1
+ import { type UiStrings } from "../../lib/i18n";
1
2
  import type { ProvenanceState } from "./types";
2
3
  /** How much of the state the badge draws. The accessible name is the same either way. */
3
4
  export type ProvenanceBadgeAppearance = "word" | "icon";
@@ -17,6 +18,6 @@ export interface ProvenanceBadgeProps {
17
18
  className?: string;
18
19
  }
19
20
  export declare function ProvenanceBadge({ state, alwaysShow, appearance, size, className, }: ProvenanceBadgeProps): import("react").JSX.Element | null;
20
- /** The words this library uses for each state. Exported so a consumer's own
21
- filters and legends read the same as its badges. */
22
- export declare function provenanceStateLabel(state: ProvenanceState): string;
21
+ /** The words this library uses for each state, from the provider's strings. Exported so a
22
+ consumer's own filters and legends read the same as its badges. */
23
+ export declare function provenanceStateLabel(state: ProvenanceState, strings: UiStrings["provenanceBadge"]): string;
@@ -14,9 +14,9 @@ export interface ProvenanceDetailProps {
14
14
  * audit trail — none of which this library can name.
15
15
  */
16
16
  actions?: ReactNode;
17
- /** Shown in place of the value when there is none and it did not fail. */
17
+ /** Shown in place of the value when there is none and it did not fail. Absent means the provider's own words. */
18
18
  emptyLabel?: string;
19
- /** Shown in place of the value when the viewer may not see it. */
19
+ /** Shown in place of the value when the viewer may not see it. Absent means the provider's own words. */
20
20
  redactedLabel?: string;
21
21
  /**
22
22
  * YOUR word for what a discrete rating is a rating OF — "Self-rated
@@ -24,12 +24,10 @@ export interface ProvenanceDetailProps {
24
24
  * tooltip.
25
25
  *
26
26
  * A rating is drawn as a coloured bar with no words on its face, so this is
27
- * the only place its meaning is stated to a reader who stops on it. The
28
- * library's own default is the blandest true word, because a default naming
27
+ * the only place its meaning is stated to a reader who stops on it. Absent
28
+ * means the provider's own word, the blandest true one, because a default naming
29
29
  * anybody's domain would be a lie in everybody else's. Ignored for a
30
30
  * continuous score, which says its own band aloud.
31
- *
32
- * @default "Confidence"
33
31
  */
34
32
  ratingLabel?: string;
35
33
  /**