@nxgt/material 3.82.0 → 3.84.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 (107) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +4 -3
  3. package/dist/{alert-dialog-DXLJ4AZP.js → alert-dialog-1t6ULy5i.js} +1 -1
  4. package/dist/{async-slice-BfVokA46.js → async-slice-xyA9Uzct.js} +1 -1
  5. package/dist/{button-CSKUtMI3.js → button-DhiNGrdT.js} +1 -1
  6. package/dist/{calculator-Cv00UQgR.js → calculator-BcgxxScL.js} +10 -10
  7. package/dist/calculator-field.js +6 -6
  8. package/dist/{calculator-segment-CwnC2cV_.js → calculator-segment-C4WQAHcN.js} +1 -1
  9. package/dist/calculator.js +1 -1
  10. package/dist/charts.js +3 -3
  11. package/dist/{chip-BGn0V6Pt.js → chip-m0_usuzd.js} +2 -2
  12. package/dist/{code-editor-B25-mWhb.js → code-editor-BgKFrcld.js} +4 -4
  13. package/dist/code-editor.js +4 -4
  14. package/dist/{code-language-items-oRjtO3qV.js → code-language-items-BWw17W9s.js} +2 -2
  15. package/dist/components/theme-tokens.css +3 -3
  16. package/dist/components/ui/collections/server-table/server-table-phone-row.css +12 -0
  17. package/dist/{components-BmZk-git.js → components-JPnObL9i.js} +8914 -8812
  18. package/dist/components.js +37 -37
  19. package/dist/{conversion-variant-wZd-G6xR.js → conversion-variant-DultZZQm.js} +3 -3
  20. package/dist/{currency-field-DizBTAat.js → currency-field-CPbaM7ay.js} +4 -4
  21. package/dist/{dialog-B-3s-oXt.js → dialog-DmlG9opW.js} +3 -3
  22. package/dist/dnd.js +1 -1
  23. package/dist/{dropdown-menu-C6rcYGB9.js → dropdown-menu-CDKev8dk.js} +1 -1
  24. package/dist/editor.js +7 -7
  25. package/dist/{empty-state-CSkghnD9.js → empty-state-C56000TB.js} +1 -1
  26. package/dist/{financial-variant-igpGRbGw.js → financial-variant-BYjQ690K.js} +5 -5
  27. package/dist/{hooks-k8_f3B0k.js → hooks-BTwLAy_A.js} +119 -83
  28. package/dist/hooks.js +3 -3
  29. package/dist/{hover-card-DuaVVKMb.js → hover-card-CDtW6utN.js} +1 -1
  30. package/dist/i18n.js +3 -3
  31. package/dist/{icon-badge-3ThP6EOl.js → icon-badge-ec7MmUGA.js} +1 -1
  32. package/dist/{icon-button-4PKlaI1g.js → icon-button-CG4aO8Gh.js} +1 -1
  33. package/dist/lib/components/ui/display/index.d.ts +1 -0
  34. package/dist/lib/components/ui/display/totals-list/index.d.ts +2 -0
  35. package/dist/lib/components/ui/display/totals-list/totals-list.d.ts +43 -0
  36. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  37. package/dist/lib/components/ui/media/galleries/types.d.ts +8 -0
  38. package/dist/lib/components/ui/media/galleries/use-gallery.d.ts +1 -0
  39. package/dist/lib/components/ui/widgets/event-calendar/event-calendar-context.d.ts +6 -1
  40. package/dist/lib/components/ui/widgets/event-calendar/event-calendar-shell.d.ts +1 -1
  41. package/dist/lib/components/ui/widgets/event-calendar/index.d.ts +1 -1
  42. package/dist/lib/components/ui/widgets/event-calendar/partials/event-preview-title.d.ts +6 -2
  43. package/dist/lib/components/ui/widgets/event-calendar/partials/event-preview.d.ts +3 -1
  44. package/dist/lib/components/ui/widgets/event-calendar/template.types.d.ts +5 -1
  45. package/dist/lib/components/ui/widgets/event-calendar/types.d.ts +20 -0
  46. package/dist/lib/components/ui/widgets/event-calendar/use-template-calendar.d.ts +3 -1
  47. package/dist/lib/hooks/index.d.ts +1 -0
  48. package/dist/lib/hooks/poll.d.ts +26 -0
  49. package/dist/lib/hooks/use-poll.d.ts +30 -0
  50. package/dist/lib/i18n/resources/en/en.d.ts +1 -0
  51. package/dist/lib/i18n/resources/en/material.json.d.ts +1 -0
  52. package/dist/lib/i18n/resources/fr/fr.d.ts +1 -0
  53. package/dist/lib/i18n/resources/fr/material.json.d.ts +1 -0
  54. package/dist/lib/i18n/resources/resources.d.ts +2 -0
  55. package/dist/lib/i18n/translator.d.ts +1 -1
  56. package/dist/lib.js +1 -1
  57. package/dist/main.js +53 -53
  58. package/dist/map.js +7 -7
  59. package/dist/material.css +1 -1
  60. package/dist/pdf-reader.js +1 -1
  61. package/dist/{percent-field-QwU1l2Q4.js → percent-field-8_pILs15.js} +1 -1
  62. package/dist/{picker-surface-CiTycWgV.js → picker-surface-pyGv-Qh9.js} +4 -4
  63. package/dist/{popover-YmbzbKQG.js → popover-3EF4q2CT.js} +1 -1
  64. package/dist/{pos-types-BFrapNmx.js → pos-types-Dv2UxKSN.js} +1 -1
  65. package/dist/{pos-variant-CctfqieO.js → pos-variant-DJvtN9N8.js} +4 -4
  66. package/dist/print.js +1 -1
  67. package/dist/{programmer-variant-Dd0YOixn.js → programmer-variant-Bmcq2KzC.js} +2 -2
  68. package/dist/{public-CshR_aW7.js → public-BNebh4z0.js} +9 -9
  69. package/dist/{rich-code-block-BuJLDoBu.js → rich-code-block-DmX7d58S.js} +5 -5
  70. package/dist/{scientific-variant-CjErQxuZ.js → scientific-variant-DijUrpP8.js} +2 -2
  71. package/dist/{sortable-provider-DU2nvpFc.js → sortable-provider-Cnmt_gWu.js} +2 -2
  72. package/dist/{spinner-DH1mm8hH.js → spinner-C6LP2Rw8.js} +1 -1
  73. package/dist/{tabs-Um0SFyf1.js → tabs-Bj1zOe7-.js} +1 -1
  74. package/dist/theme-picker.js +2 -2
  75. package/dist/{theme-toggle-C-Ih4uQU.js → theme-toggle-Cxku5iBP.js} +1 -1
  76. package/dist/{toolbar-items-BoEY5bkt.js → toolbar-items-CEIuSxU_.js} +4 -4
  77. package/dist/{translate-material-D4rn5UaQ.js → translate-material-DI3nmQ6I.js} +1 -1
  78. package/dist/{translator-CcEgQ-H7.js → translator-BstxG_hN.js} +177 -163
  79. package/dist/{use-chat-composer-BfFcmDua.js → use-chat-composer-BqLkk_iH.js} +71 -66
  80. package/dist/{use-heading-spy-gDNtK1sU.js → use-heading-spy-nFyb9_KE.js} +4 -4
  81. package/dist/{use-material-translation-DYrfV_JJ.js → use-material-translation-1kCHtB0p.js} +1 -1
  82. package/dist/{use-return-focus-C_Qz_yTk.js → use-return-focus-Hv8rn55-.js} +1 -1
  83. package/docs/components/data-display.md +38 -8
  84. package/docs/components/media-and-files.md +11 -0
  85. package/docs/components/rich-widgets.md +22 -1
  86. package/docs/guides/helpers.md +40 -0
  87. package/docs/guides/layouts.md +5 -2
  88. package/docs/guides/theming.md +2 -2
  89. package/docs/roadmap.md +9 -4
  90. package/docs/troubleshooting.md +2 -2
  91. package/lib/components/theme-tokens.css +3 -3
  92. package/lib/components/ui/collections/server-table/server-table-phone-row.css +12 -0
  93. package/lib/themes/ambre.css +2 -2
  94. package/lib/themes/ardoise.css +2 -2
  95. package/lib/themes/bleumono.css +2 -2
  96. package/lib/themes/bluemoon.css +2 -2
  97. package/lib/themes/corail.css +2 -2
  98. package/lib/themes/foret.css +2 -2
  99. package/lib/themes/lavande.css +2 -2
  100. package/lib/themes/menthe.css +2 -2
  101. package/lib/themes/ocean.css +2 -2
  102. package/lib/themes/pink.css +2 -2
  103. package/lib/themes/prune.css +1 -1
  104. package/lib/themes/sable.css +2 -2
  105. package/lib/themes/slate.css +1 -1
  106. package/lib/themes/teal.css +2 -2
  107. package/package.json +4 -4
@@ -82,6 +82,14 @@ export type GalleryProps = {
82
82
  onDelete?: (item: GalleryItem) => void;
83
83
  selectable?: boolean;
84
84
  onSelectionChange?: (ids: string[]) => void;
85
+ /**
86
+ * Bulk actions on the selection (download, move, delete), shown at the end
87
+ * of the "n selected" bar of a `selectable` gallery. A node, or a render
88
+ * function that receives the selected ids. The bar, and so the actions,
89
+ * stay hidden while nothing is selected; on a phone the actions wrap under
90
+ * the count.
91
+ */
92
+ selectionActions?: ReactNode | ((selectedIds: string[]) => ReactNode);
85
93
  trigger?: ReactNode;
86
94
  className?: string;
87
95
  } & Omit<ComponentProps<'div'>, 'children'>;
@@ -28,6 +28,7 @@ export type GalleryModel = {
28
28
  goToLast: () => void;
29
29
  downloadCurrent: () => void;
30
30
  selectable: boolean;
31
+ selectionActions: GalleryProps['selectionActions'];
31
32
  toggleSelected: (id: string) => void;
32
33
  clearSelection: () => void;
33
34
  onKeyDown: (event: {
@@ -1,7 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { EventChipVariant } from '../../display/event-chip/event-chip.classes.js';
3
3
  import { TemplateContext } from './template.types.js';
4
- import { CalendarEvent, EventCalendarRenderEvent, EventCalendarSlot, EventCalendarView } from './types.js';
4
+ import { CalendarEvent, EventCalendarPreviewField, EventCalendarRenderEvent, EventCalendarSlot, EventCalendarView } from './types.js';
5
5
  import { EventCalendarModel } from './use-event-calendar.js';
6
6
  export type EventCalendarContextValue = EventCalendarModel & {
7
7
  /** The events as stored, true instants; `events` is what is drawn (the zone's wall clock). */
@@ -18,6 +18,11 @@ export type EventCalendarContextValue = EventCalendarModel & {
18
18
  scrollToHour?: number;
19
19
  onEventClick?: (event: CalendarEvent) => void;
20
20
  onSlotClick?: (slot: EventCalendarSlot) => void;
21
+ /** The preview popover opens on an event click (default true). */
22
+ eventPreview?: boolean;
23
+ previewFields?: EventCalendarPreviewField[];
24
+ onEventEdit?: (event: CalendarEvent) => void;
25
+ onEventDelete?: (event: CalendarEvent) => void;
21
26
  renderEvent?: EventCalendarRenderEvent;
22
27
  };
23
28
  export declare function EventCalendarProvider({ value, children, }: {
@@ -12,4 +12,4 @@ export type EventCalendarShellProps = EventCalendarProps & {
12
12
  * mini-month side panel and a phone layout of its own. Events are props; the
13
13
  * chrome (search, focus, the last move's direction) lives in a slice.
14
14
  */
15
- export declare function EventCalendarShell({ template, visible, onEventClick, onSlotClick, className, renderEvent, toolbar, searchable, views, phoneView, sidebar, eventVariant, scrollToHour, ...options }: EventCalendarShellProps): import("react").JSX.Element;
15
+ export declare function EventCalendarShell({ template, visible, onEventClick, onSlotClick, eventPreview, previewFields, onEventEdit, onEventDelete, className, renderEvent, toolbar, searchable, views, phoneView, sidebar, eventVariant, scrollToHour, ...options }: EventCalendarShellProps): import("react").JSX.Element;
@@ -2,5 +2,5 @@ export type { EventCalendarProps } from './event-calendar.js';
2
2
  export { EventCalendar } from './event-calendar.js';
3
3
  export { EventCalendarProvider, useEventCalendarContext, } from './event-calendar-context.js';
4
4
  export type { EventCalendarLane, EventCalendarTemplateChange, EventCalendarTemplateEvent, EventCalendarTemplateProps, EventCalendarTemplateSlot, EventCalendarWeekday, } from './template.types.js';
5
- export type { CalendarEvent, EventCalendarChange, EventCalendarDensity, EventCalendarRenderEvent, EventCalendarResource, EventCalendarSlot, EventCalendarView, } from './types.js';
5
+ export type { CalendarEvent, EventCalendarChange, EventCalendarDensity, EventCalendarPreviewField, EventCalendarRenderEvent, EventCalendarResource, EventCalendarSlot, EventCalendarView, } from './types.js';
6
6
  export { useEventCalendar } from './use-event-calendar.js';
@@ -3,9 +3,13 @@ import { CalendarEvent, EventCalendarResource } from '../types.js';
3
3
  * The popover's first line: the event's colour (its resource's tone when it
4
4
  * sets none), the title to edit in place and the delete button.
5
5
  */
6
- export declare function EventPreviewTitle({ event, owner, locked, onDelete, }: {
6
+ export declare function EventPreviewTitle({ event, owner, locked, showTitle, onEdit, onDelete, }: {
7
7
  event: CalendarEvent;
8
8
  owner?: EventCalendarResource;
9
9
  locked: boolean;
10
+ /** The colour dot and the title to edit; off, only the actions remain. */
11
+ showTitle?: boolean;
12
+ /** Set when the app edits the event itself: an Edit button. */
13
+ onEdit?: () => void;
10
14
  onDelete: () => void;
11
- }): import("react").JSX.Element;
15
+ }): import("react").JSX.Element | null;
@@ -1,5 +1,7 @@
1
1
  import { CalendarEvent, EventCalendarResource } from '../types.js';
2
- export declare function EventPreview({ event, owner, }: {
2
+ export declare function EventPreview({ event, owner, onClose, }: {
3
3
  event: CalendarEvent;
4
4
  owner?: EventCalendarResource;
5
+ /** Closes the popover (the app took over with its edit or delete). */
6
+ onClose?: () => void;
5
7
  }): import("react").JSX.Element;
@@ -41,7 +41,7 @@ export type EventCalendarTemplateChange = {
41
41
  * slots and changes are keyed by weekday and time. The month, day and agenda
42
42
  * views do not apply: `view` is `week` (the default) or `workweek`.
43
43
  */
44
- export type EventCalendarTemplateProps = Pick<EventCalendarProps, 'disabled' | 'className' | 'toolbar' | 'searchable' | 'density' | 'eventVariant' | 'startHour' | 'endHour' | 'hourHeight' | 'slotDurationMinutes' | 'scrollToHour'> & {
44
+ export type EventCalendarTemplateProps = Pick<EventCalendarProps, 'disabled' | 'className' | 'toolbar' | 'searchable' | 'density' | 'eventVariant' | 'startHour' | 'endHour' | 'hourHeight' | 'slotDurationMinutes' | 'scrollToHour' | 'eventPreview' | 'previewFields'> & {
45
45
  mode: 'template';
46
46
  events?: EventCalendarTemplateEvent[];
47
47
  defaultEvents?: EventCalendarTemplateEvent[];
@@ -49,6 +49,10 @@ export type EventCalendarTemplateProps = Pick<EventCalendarProps, 'disabled' | '
49
49
  /** After a move, a resize or an edit, with the previous event. */
50
50
  onChange?: (change: EventCalendarTemplateChange) => void;
51
51
  onEventClick?: (event: EventCalendarTemplateEvent) => void;
52
+ /** An "Edit" button in the preview calls this with the event; the app opens its own editor. */
53
+ onEventEdit?: (event: EventCalendarTemplateEvent) => void;
54
+ /** The preview's delete button calls this instead of the built-in confirmation and removal. */
55
+ onEventDelete?: (event: EventCalendarTemplateEvent) => void;
52
56
  /** A click or a drag across an empty slot: where, as weekday and time. */
53
57
  onSlotClick?: (slot: EventCalendarTemplateSlot) => void;
54
58
  /** `week` (7 days, the default) or `workweek` (Monday to Friday). */
@@ -56,6 +56,8 @@ export type EventCalendarChromeState = {
56
56
  /** The resource the phone's switcher shows; `null` is the first. */
57
57
  resourceId: string | null;
58
58
  };
59
+ /** A field of the event preview popover. */
60
+ export type EventCalendarPreviewField = 'title' | 'color' | 'description';
59
61
  export type EventCalendarRenderEvent = (event: CalendarEvent) => ReactNode;
60
62
  export type EventCalendarProps = {
61
63
  /** `dated` (the default): real dates. See `mode="template"` for a recurring week. */
@@ -66,6 +68,24 @@ export type EventCalendarProps = {
66
68
  onChange?: (change: EventCalendarChange) => void;
67
69
  onEventClick?: (event: CalendarEvent) => void;
68
70
  onSlotClick?: (slot: EventCalendarSlot) => void;
71
+ /**
72
+ * Opens the preview popover on an event click. Default `true`; `false` skips
73
+ * it, so `onEventClick` alone handles the click.
74
+ */
75
+ eventPreview?: boolean;
76
+ /**
77
+ * The fields the preview popover edits in place: `'title'`, `'color'`,
78
+ * `'description'`. Default all three; `[]` leaves the time range and the
79
+ * actions. A field left out is not drawn.
80
+ */
81
+ previewFields?: EventCalendarPreviewField[];
82
+ /** An "Edit" button in the preview calls this with the event; the app opens its own editor. */
83
+ onEventEdit?: (event: CalendarEvent) => void;
84
+ /**
85
+ * The preview's delete button calls this with the event instead of the
86
+ * built-in confirmation and removal: the app confirms and deletes.
87
+ */
88
+ onEventDelete?: (event: CalendarEvent) => void;
69
89
  view?: EventCalendarView;
70
90
  defaultView?: EventCalendarView;
71
91
  onViewChange?: (view: EventCalendarView) => void;
@@ -6,7 +6,7 @@ import { CalendarEvent, EventCalendarChange, EventCalendarSlot } from './types.j
6
6
  * into weekday and time. The dated calendar owns no copy: the list given
7
7
  * is always the template list, mapped.
8
8
  */
9
- export declare function useTemplateCalendar({ events, defaultEvents, onEventsChange, onChange, onEventClick, onSlotClick, lanes, lane: laneProp, defaultLane, onLaneChange, }: EventCalendarTemplateProps): {
9
+ export declare function useTemplateCalendar({ events, defaultEvents, onEventsChange, onChange, onEventClick, onSlotClick, onEventEdit, onEventDelete, lanes, lane: laneProp, defaultLane, onLaneChange, }: EventCalendarTemplateProps): {
10
10
  dated: CalendarEvent[];
11
11
  back: (event: CalendarEvent) => EventCalendarTemplateEvent;
12
12
  template: TemplateContext;
@@ -14,5 +14,7 @@ export declare function useTemplateCalendar({ events, defaultEvents, onEventsCha
14
14
  onEventsChange: (next: CalendarEvent[]) => void;
15
15
  onChange: ((change: EventCalendarChange) => void) | undefined;
16
16
  onEventClick: ((event: CalendarEvent) => void) | undefined;
17
+ onEventEdit: ((event: CalendarEvent) => void) | undefined;
18
+ onEventDelete: ((event: CalendarEvent) => void) | undefined;
17
19
  onSlotClick: ((slot: EventCalendarSlot) => void) | undefined;
18
20
  };
@@ -13,6 +13,7 @@ export * from './use-mobile.js';
13
13
  export * from './use-navigation.js';
14
14
  export * from './use-number-formatter.js';
15
15
  export * from './use-options.js';
16
+ export * from './use-poll.js';
16
17
  export * from './use-react-router-block.js';
17
18
  export * from './use-scroll-away.js';
18
19
  export * from './use-search-param.js';
@@ -0,0 +1,26 @@
1
+ export type PollOptions = {
2
+ /** Milliseconds between two reads. */
3
+ ms: number;
4
+ /** One read; the next tick waits for it to end. */
5
+ read: () => void | Promise<void>;
6
+ /** The read happens only while this is true; default: always. */
7
+ active?: () => boolean;
8
+ /** False while the page is hidden; default: `document.visibilityState`. */
9
+ visible?: () => boolean;
10
+ /** Called with what a read threw or rejected; the poll goes on. */
11
+ onError?: (error: unknown) => void;
12
+ /**
13
+ * The in-flight flag, to share between polls that must not overlap (a
14
+ * restart while a read is pending); default: one per call.
15
+ */
16
+ flight?: {
17
+ current: boolean;
18
+ };
19
+ };
20
+ /**
21
+ * The framework-free loop behind `usePoll`: calls `read` every `ms`, one read
22
+ * at a time, skipping (not queueing) a tick while `active()` or `visible()`
23
+ * is false. Returns its stop. A read that throws or rejects never stops it, and after the stop its error
24
+ * is no longer reported.
25
+ */
26
+ export declare function startPoll({ ms, read, active, visible, onError, flight, }: PollOptions): () => void;
@@ -0,0 +1,30 @@
1
+ export { type PollOptions, startPoll } from './poll.js';
2
+ export type UsePollOptions = {
3
+ /** Milliseconds between two reads. A new value restarts the interval. */
4
+ ms: number;
5
+ /** Poll only while true (a sync under way, a pending state); default `true`. */
6
+ enabled?: boolean;
7
+ /** One read; the next tick waits for it to end, so two never overlap. */
8
+ read: () => void | Promise<void>;
9
+ /** Called with what a read threw or rejected; the poll goes on. */
10
+ onError?: (error: unknown) => void;
11
+ };
12
+ /**
13
+ * Reads again every `ms` while `enabled` and the page is visible
14
+ * (`document.visibilityState === 'visible'`), one read at a time. A tick
15
+ * that falls while the page is hidden or a read is still running is skipped,
16
+ * not queued. The timer is cleared on unmount and when `enabled` turns
17
+ * false. The first read comes after `ms`; call `read` yourself for an
18
+ * immediate one. Does nothing on the server. A restart (a new `ms`, `enabled` back on) while a
19
+ * read is pending does not start a second one.
20
+ *
21
+ * `read` and `onError` may change on every render: the latest are used
22
+ * without restarting the interval.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * const { data, revalidate } = useJob(id);
27
+ * usePoll({ ms: 3000, enabled: data?.status === 'running', read: revalidate });
28
+ * ```
29
+ */
30
+ export declare function usePoll({ ms, enabled, read, onError }: UsePollOptions): void;
@@ -1811,6 +1811,7 @@ export declare const en: {
1811
1811
  title: string;
1812
1812
  description: string;
1813
1813
  color: string;
1814
+ edit: string;
1814
1815
  delete: string;
1815
1816
  "delete-confirm": string;
1816
1817
  "open-day": string;
@@ -1801,6 +1801,7 @@ declare const _default: {
1801
1801
  "title": "Title",
1802
1802
  "description": "Add description",
1803
1803
  "color": "Color",
1804
+ "edit": "Edit event",
1804
1805
  "delete": "Delete event",
1805
1806
  "delete-confirm": "This event will be removed.",
1806
1807
  "open-day": "Open {date}",
@@ -1811,6 +1811,7 @@ export declare const fr: {
1811
1811
  title: string;
1812
1812
  description: string;
1813
1813
  color: string;
1814
+ edit: string;
1814
1815
  delete: string;
1815
1816
  "delete-confirm": string;
1816
1817
  "open-day": string;
@@ -1801,6 +1801,7 @@ declare const _default: {
1801
1801
  "title": "Titre",
1802
1802
  "description": "Ajouter une description",
1803
1803
  "color": "Couleur",
1804
+ "edit": "Modifier l'événement",
1804
1805
  "delete": "Supprimer l'événement",
1805
1806
  "delete-confirm": "Cet événement sera retiré.",
1806
1807
  "open-day": "Ouvrir le {date}",
@@ -1809,6 +1809,7 @@ export declare const resources: {
1809
1809
  title: string;
1810
1810
  description: string;
1811
1811
  color: string;
1812
+ edit: string;
1812
1813
  delete: string;
1813
1814
  "delete-confirm": string;
1814
1815
  "open-day": string;
@@ -5325,6 +5326,7 @@ export declare const resources: {
5325
5326
  title: string;
5326
5327
  description: string;
5327
5328
  color: string;
5329
+ edit: string;
5328
5330
  delete: string;
5329
5331
  "delete-confirm": string;
5330
5332
  "open-day": string;