@dcs-tech/ui 0.8.0 → 0.10.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 (102) hide show
  1. package/CHANGELOG.md +496 -0
  2. package/README.md +56 -5
  3. package/dist/{ChartImageMenu-AsfvmdTH.js → ChartImageMenu-3OfqNFyt.js} +557 -546
  4. package/dist/{ChartView-CW3m4Z_1.js → ChartView-n4G5_2ro.js} +35 -31
  5. package/dist/{SummaryChart-CxRjK_HU.js → SummaryChart-i6fOdrDM.js} +2 -2
  6. package/dist/{SummaryImage-DeYs2Jgj.js → SummaryImage-CCt5ozD9.js} +2 -2
  7. package/dist/{SummarySeeAll-CrmROhBv.js → SummarySeeAll-BY8knsRe.js} +5 -5
  8. package/dist/assets/fileTask.worker--Q3rI3Bn.js +1 -0
  9. package/dist/{columnValue-DwUqueZ6.js → columnValue-74XDBcVF.js} +219 -192
  10. package/dist/{exportContext-BKFnNQ0q.js → exportContext-C52ZuHd8.js} +2 -2
  11. package/dist/{exportEngine-CZ22cX7a.js → exportEngine-BmDly7iw.js} +3 -3
  12. package/dist/file-worker.js +1 -1
  13. package/dist/{fileActions-COf5Q4Eg.js → fileActions-CFNO14Aj.js} +1 -1
  14. package/dist/{geometry-yZmKN662.js → geometry-DG134nYI.js} +379 -273
  15. package/dist/index.js +12808 -9621
  16. package/dist/{labels-CnqqTrne.js → labels-BPItSeRU.js} +2 -0
  17. package/dist/{runFileTask--4YjQH7Y.js → runFileTask-BIZTFnZP.js} +55 -39
  18. package/dist/scrollArea-D84Cwm4o.js +310 -0
  19. package/dist/style.css +1 -1
  20. package/dist/{summaryChartData-CARqGRUl.js → summaryChartData-BiQYJbYZ.js} +8 -2
  21. package/dist/types/components/Alert/Alert.d.ts +16 -0
  22. package/dist/types/components/Alert/index.d.ts +2 -0
  23. package/dist/types/components/Card/Card.d.ts +4 -3
  24. package/dist/types/components/Card/index.d.ts +1 -1
  25. package/dist/types/components/Charts/Funnel.d.ts +2 -1
  26. package/dist/types/components/Charts/chartImage.d.ts +1 -0
  27. package/dist/types/components/ChipInput/ChipTags.d.ts +3 -0
  28. package/dist/types/components/CommandPalette/CommandPaletteTrigger.d.ts +9 -0
  29. package/dist/types/components/CommandPalette/index.d.ts +2 -0
  30. package/dist/types/components/DataTable/TablePagination.d.ts +1 -1
  31. package/dist/types/components/DataTable/TableToolbar.d.ts +2 -1
  32. package/dist/types/components/DataTable/TableView.d.ts +1 -0
  33. package/dist/types/components/DataTable/cards/cardFields.d.ts +1 -0
  34. package/dist/types/components/DataTable/defaults.d.ts +4 -0
  35. package/dist/types/components/DataTable/index.d.ts +1 -1
  36. package/dist/types/components/DataTable/labels.d.ts +2 -0
  37. package/dist/types/components/DataTable/types.d.ts +19 -2
  38. package/dist/types/components/DataTable/ui-local/TableReorderList.d.ts +13 -0
  39. package/dist/types/components/DataTable/ui.d.ts +2 -1
  40. package/dist/types/components/DataTable/useTable.d.ts +1 -0
  41. package/dist/types/components/DatePicker/PeriodGrid.d.ts +13 -0
  42. package/dist/types/components/DatePicker/PeriodPicker.d.ts +19 -0
  43. package/dist/types/components/DatePicker/index.d.ts +1 -1
  44. package/dist/types/components/Dialog/dialogSlots.d.ts +9 -0
  45. package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +8 -0
  46. package/dist/types/components/FieldWrapper/index.d.ts +1 -1
  47. package/dist/types/components/Fields/index.d.ts +1 -1
  48. package/dist/types/components/Image/ImageEditor.d.ts +21 -0
  49. package/dist/types/components/Image/ImagePicker.d.ts +10 -1
  50. package/dist/types/components/Image/imageRender.d.ts +33 -0
  51. package/dist/types/components/Image/index.d.ts +3 -1
  52. package/dist/types/components/Image/prepareImage.d.ts +4 -3
  53. package/dist/types/components/Link/Link.d.ts +22 -0
  54. package/dist/types/components/Link/index.d.ts +2 -0
  55. package/dist/types/components/NavList/NavList.d.ts +13 -0
  56. package/dist/types/components/NavList/index.d.ts +2 -0
  57. package/dist/types/components/PageProgress/PageProgress.d.ts +10 -0
  58. package/dist/types/components/PageProgress/index.d.ts +2 -0
  59. package/dist/types/components/Pagination/Pagination.d.ts +19 -0
  60. package/dist/types/components/Pagination/index.d.ts +2 -0
  61. package/dist/types/components/Popover/Popover.d.ts +1 -1
  62. package/dist/types/components/Popover/floatingPosition.d.ts +4 -0
  63. package/dist/types/components/ReorderList/ReorderGroup.d.ts +16 -0
  64. package/dist/types/components/ReorderList/ReorderList.d.ts +55 -0
  65. package/dist/types/components/ReorderList/crossListDrag.d.ts +61 -0
  66. package/dist/types/components/ReorderList/index.d.ts +5 -0
  67. package/dist/types/components/ReorderList/useReorderDrag.d.ts +28 -0
  68. package/dist/types/components/Tooltip/useTooltip.d.ts +4 -0
  69. package/dist/types/components/UIProvider/UILabelsContext.d.ts +86 -0
  70. package/dist/types/core/hooks/index.d.ts +1 -0
  71. package/dist/types/core/hooks/useMeasuredState.d.ts +1 -0
  72. package/dist/types/core/logic/alert.logic.d.ts +3 -0
  73. package/dist/types/core/logic/commandPalette.logic.d.ts +2 -0
  74. package/dist/types/core/logic/datePicker.logic.d.ts +12 -0
  75. package/dist/types/core/logic/fieldWrapper.logic.d.ts +6 -1
  76. package/dist/types/core/logic/imageEditor.logic.d.ts +132 -0
  77. package/dist/types/core/logic/imageTransform.logic.d.ts +57 -0
  78. package/dist/types/core/logic/index.d.ts +9 -0
  79. package/dist/types/core/logic/inertProps.d.ts +3 -0
  80. package/dist/types/core/logic/pageProgress.logic.d.ts +3 -0
  81. package/dist/types/core/logic/pagination.logic.d.ts +7 -0
  82. package/dist/types/core/logic/periodPicker.logic.d.ts +86 -0
  83. package/dist/types/core/logic/reorder.logic.d.ts +49 -0
  84. package/dist/types/core/types/chipinput.types.d.ts +3 -1
  85. package/dist/types/core/types/collapsible.types.d.ts +3 -0
  86. package/dist/types/core/types/datePicker.types.d.ts +7 -0
  87. package/dist/types/core/types/field.types.d.ts +6 -3
  88. package/dist/types/core/types/fieldWrapper.types.d.ts +2 -0
  89. package/dist/types/core/types/fields.types.d.ts +6 -1
  90. package/dist/types/core/types/form.types.d.ts +1 -0
  91. package/dist/types/core/types/format.types.d.ts +2 -0
  92. package/dist/types/core/types/input.types.d.ts +2 -0
  93. package/dist/types/core/types/navigation.types.d.ts +1 -0
  94. package/dist/types/core/types/select.types.d.ts +2 -6
  95. package/dist/types/core/types/suggest.types.d.ts +2 -0
  96. package/dist/types/index.d.ts +25 -7
  97. package/package.json +3 -2
  98. package/dist/assets/fileTask.worker-BHT1olUk.js +0 -1
  99. package/dist/scrollArea-Dd2dNMV4.js +0 -236
  100. package/dist/types/components/DataTable/ui-local/DragAndDropList/DragAndDropList.d.ts +0 -4
  101. package/dist/types/components/DataTable/ui-local/DragAndDropList/index.d.ts +0 -3
  102. package/dist/types/components/DataTable/ui-local/DragAndDropList/types.d.ts +0 -70
@@ -25,3 +25,7 @@ export declare const visibleBounds: (el: Element) => {
25
25
  top: number;
26
26
  bottom: number;
27
27
  };
28
+ export declare const listOverhang: (list: Element | null | undefined, anchor: Element | null | undefined) => string | undefined;
29
+ export declare const titleWhenCut: (event: {
30
+ target: EventTarget | null;
31
+ }) => void;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { ReorderGroupMove, ReorderPeer } from './crossListDrag';
3
+ export interface ReorderGroupProps<T = any> {
4
+ onMove: (move: ReorderGroupMove<T>) => void;
5
+ children: React.ReactNode;
6
+ }
7
+ interface ReorderGroupContextValue {
8
+ peers: Set<ReorderPeer>;
9
+ onMove: (move: ReorderGroupMove) => void;
10
+ busy: {
11
+ current: boolean;
12
+ };
13
+ }
14
+ export declare const useReorderGroup: () => ReorderGroupContextValue | null;
15
+ export declare function ReorderGroup<T = any>({ onMove, children }: ReorderGroupProps<T>): React.JSX.Element;
16
+ export default ReorderGroup;
@@ -0,0 +1,55 @@
1
+ import React from 'react';
2
+ import { type UILabels } from '../UIProvider/UILabelsContext';
3
+ import { type ReorderAxis, type ReorderMove } from './useReorderDrag';
4
+ import type { ReorderWhenFull } from './crossListDrag';
5
+ export type { ReorderAxis, ReorderMove, ReorderWhenFull };
6
+ export type ReorderDragFrom = 'handle' | 'row' | 'both';
7
+ export type ReorderLabels = UILabels['reorder'];
8
+ export interface ReorderHandleProps {
9
+ tabIndex: number;
10
+ 'aria-label': string;
11
+ 'aria-describedby': string;
12
+ style: React.CSSProperties;
13
+ onPointerDown: React.PointerEventHandler<HTMLElement>;
14
+ onKeyDown: React.KeyboardEventHandler<HTMLElement>;
15
+ 'data-reorder-handle': string;
16
+ }
17
+ export interface ReorderListHandle {
18
+ move: (key: string | number, step: -1 | 1) => boolean;
19
+ }
20
+ export interface ReorderItemState {
21
+ index: number;
22
+ dragging: boolean;
23
+ canDrag: boolean;
24
+ handle: React.ReactNode;
25
+ handleProps: ReorderHandleProps | null;
26
+ }
27
+ export interface ReorderListProps<T> {
28
+ items: readonly T[];
29
+ getKey: (item: T, index: number) => string | number;
30
+ renderItem: (item: T, state: ReorderItemState) => React.ReactNode;
31
+ onReorder: (items: T[], move: ReorderMove) => void;
32
+ axis?: ReorderAxis;
33
+ dragFrom?: ReorderDragFrom;
34
+ canDrag?: (item: T, index: number) => boolean;
35
+ isFixed?: (item: T, index: number) => boolean;
36
+ disabled?: boolean;
37
+ getItemLabel?: (item: T, index: number) => string;
38
+ labels?: Partial<ReorderLabels>;
39
+ className?: string;
40
+ itemClassName?: string;
41
+ style?: React.CSSProperties;
42
+ 'aria-label'?: string;
43
+ 'aria-labelledby'?: string;
44
+ role?: React.AriaRole;
45
+ itemRole?: React.AriaRole;
46
+ listId?: string;
47
+ maxItems?: number;
48
+ whenFull?: ReorderWhenFull;
49
+ sortable?: boolean;
50
+ autoScroll?: boolean;
51
+ autoScrollSpeed?: number;
52
+ handleRef?: React.Ref<ReorderListHandle>;
53
+ }
54
+ export declare function ReorderList<T>({ items, getKey, renderItem, onReorder, axis, dragFrom, canDrag, isFixed, disabled, getItemLabel, labels, className, itemClassName, style, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, role, itemRole, listId, maxItems, whenFull, sortable, autoScroll, autoScrollSpeed, handleRef, }: ReorderListProps<T>): React.JSX.Element;
55
+ export default ReorderList;
@@ -0,0 +1,61 @@
1
+ import { type ReorderPoint } from '../../core/logic';
2
+ export type ReorderAxis = 'vertical' | 'horizontal' | 'wrap';
3
+ export interface ReorderMove {
4
+ from: number;
5
+ to: number;
6
+ }
7
+ export interface ReorderGroupMove<T = any> {
8
+ item: T;
9
+ from: {
10
+ list: string;
11
+ index: number;
12
+ };
13
+ to: {
14
+ list: string;
15
+ index: number;
16
+ };
17
+ }
18
+ export type ReorderWhenFull = 'reject' | 'replace';
19
+ export interface ReorderPeer {
20
+ id: string;
21
+ el: () => HTMLElement | null;
22
+ options: () => {
23
+ items: readonly any[];
24
+ getKey: (item: any, index: number) => string | number;
25
+ isFixed: (item: any, index: number) => boolean;
26
+ onReorder: (items: any[], move: ReorderMove) => void;
27
+ axis: ReorderAxis;
28
+ disabled: boolean;
29
+ sortable: boolean;
30
+ maxItems?: number;
31
+ whenFull: ReorderWhenFull;
32
+ listLabel?: string;
33
+ };
34
+ }
35
+ export declare const setRowOffset: (row: HTMLElement, x: number, y: number) => void;
36
+ export interface CrossDragStop {
37
+ position: number;
38
+ total: number;
39
+ list?: string;
40
+ }
41
+ export interface CrossDrag {
42
+ follow: (x: number, y: number) => void;
43
+ step: (step: -1 | 1) => CrossDragStop | null;
44
+ goHome: () => void;
45
+ settle: () => void;
46
+ commit: () => void;
47
+ stop: () => CrossDragStop;
48
+ span: (vertical: boolean) => {
49
+ start: number;
50
+ size: number;
51
+ };
52
+ refocus: () => void;
53
+ clear: () => void;
54
+ }
55
+ export declare function createCrossDrag(args: {
56
+ peers: readonly ReorderPeer[];
57
+ sourceEl: HTMLElement;
58
+ from: number;
59
+ press: ReorderPoint;
60
+ onMove?: (move: ReorderGroupMove) => void;
61
+ }): CrossDrag | null;
@@ -0,0 +1,5 @@
1
+ export { ReorderList, default } from './ReorderList';
2
+ export { ReorderGroup } from './ReorderGroup';
3
+ export type { ReorderGroupProps } from './ReorderGroup';
4
+ export type { ReorderGroupMove } from './crossListDrag';
5
+ export type { ReorderListProps, ReorderItemState, ReorderHandleProps, ReorderDragFrom, ReorderAxis, ReorderMove, ReorderLabels, ReorderListHandle, ReorderWhenFull, } from './ReorderList';
@@ -0,0 +1,28 @@
1
+ import { type KeyboardEvent, type PointerEvent } from 'react';
2
+ import { type ReorderAxis, type ReorderMove, type ReorderWhenFull } from './crossListDrag';
3
+ export type { ReorderAxis, ReorderMove };
4
+ type ReorderEvent = 'pickedUp' | 'moved' | 'dropped' | 'cancelled';
5
+ interface ReorderDragOptions<T> {
6
+ items: readonly T[];
7
+ getKey: (item: T, index: number) => string | number;
8
+ onReorder: (items: T[], move: ReorderMove) => void;
9
+ isFixed: (item: T, index: number) => boolean;
10
+ axis: ReorderAxis;
11
+ disabled: boolean;
12
+ announce: (event: ReorderEvent, index: number, position: number, total: number, list?: string) => void;
13
+ listId?: string;
14
+ listLabel?: string;
15
+ sortable: boolean;
16
+ maxItems?: number;
17
+ whenFull: ReorderWhenFull;
18
+ canDrag: (item: T, index: number) => boolean;
19
+ autoScroll: boolean;
20
+ autoScrollSpeed?: number;
21
+ }
22
+ export declare function useReorderDrag<T>(options: ReorderDragOptions<T>): {
23
+ listRef: import("react").RefObject<HTMLDivElement | null>;
24
+ activeKey: string | number | null;
25
+ press: (e: PointerEvent<HTMLElement>, index: number, kind: "handle" | "row") => void;
26
+ keyDown: (e: KeyboardEvent<HTMLElement>, index: number) => void;
27
+ move: (key: string | number, step: -1 | 1) => boolean;
28
+ };
@@ -1,5 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { TooltipProp } from '../../core/types';
3
+ export declare const hoverSurfaceIsWarm: () => boolean;
4
+ export declare const dismissActiveTooltip: () => void;
5
+ export declare const warmTooltips: () => void;
6
+ export declare const handOverToTooltip: () => void;
3
7
  export interface UseTooltipResult {
4
8
  triggerProps: {
5
9
  onPointerEnter: (event: React.PointerEvent<HTMLElement>) => void;
@@ -20,6 +20,9 @@ export declare const DEFAULT_UI_LABELS: {
20
20
  fixErrors: string;
21
21
  submitFailed: string;
22
22
  };
23
+ chipInput: {
24
+ removeTag: string;
25
+ };
23
26
  input: {
24
27
  clear: string;
25
28
  showPassword: string;
@@ -38,6 +41,8 @@ export declare const DEFAULT_UI_LABELS: {
38
41
  maxReached: string;
39
42
  dragToReorder: string;
40
43
  fixedPosition: string;
44
+ selectedOptions: string;
45
+ reorderInstructions: string;
41
46
  };
42
47
  suggest: {
43
48
  placeholder: string;
@@ -50,6 +55,7 @@ export declare const DEFAULT_UI_LABELS: {
50
55
  placeholder: string;
51
56
  empty: string;
52
57
  name: string;
58
+ trigger: string;
53
59
  };
54
60
  datePicker: {
55
61
  clear: string;
@@ -57,6 +63,18 @@ export declare const DEFAULT_UI_LABELS: {
57
63
  presetRanges: string;
58
64
  previousMonth: string;
59
65
  nextMonth: string;
66
+ previousYear: string;
67
+ nextYear: string;
68
+ previousYears: string;
69
+ nextYears: string;
70
+ month: string;
71
+ year: string;
72
+ from: string;
73
+ to: string;
74
+ rangeTo: string;
75
+ selected: string;
76
+ chooseMonth: string;
77
+ chooseYear: string;
60
78
  presets: {
61
79
  today: string;
62
80
  yesterday: string;
@@ -99,15 +117,83 @@ export declare const DEFAULT_UI_LABELS: {
99
117
  related: string;
100
118
  hidden: (count: number) => string;
101
119
  };
120
+ alert: {
121
+ dismiss: string;
122
+ };
123
+ navList: {
124
+ name: string;
125
+ };
126
+ pageProgress: {
127
+ name: string;
128
+ };
129
+ pagination: {
130
+ name: string;
131
+ first: string;
132
+ previous: string;
133
+ next: string;
134
+ last: string;
135
+ page: (n: string) => string;
136
+ pageOf: (n: string, count: string) => string;
137
+ range: (from: string, to: string, total: string) => string;
138
+ noRows: string;
139
+ perPage: string;
140
+ rowsPerPage: string;
141
+ };
142
+ link: {
143
+ opensInNewTab: string;
144
+ };
145
+ reorder: {
146
+ item: string;
147
+ handle: (item: string) => string;
148
+ instructions: string;
149
+ pickedUp: (item: string, position: number, total: number) => string;
150
+ moved: (item: string, position: number, total: number) => string;
151
+ dropped: (item: string, position: number, total: number) => string;
152
+ cancelled: (item: string, position: number, total: number) => string;
153
+ movedToList: (item: string, list: string, position: number, total: number) => string;
154
+ droppedInList: (item: string, list: string, position: number, total: number) => string;
155
+ };
102
156
  image: {
103
157
  image: string;
104
158
  images: string;
105
159
  add: string;
160
+ replace: string;
161
+ drop: string;
106
162
  preparing: string;
107
163
  remove: string;
108
164
  previous: string;
109
165
  next: string;
110
166
  };
167
+ imageEditor: {
168
+ title: string;
169
+ apply: string;
170
+ cancel: string;
171
+ tools: string;
172
+ zoom: string;
173
+ pan: string;
174
+ rotateLeft: string;
175
+ rotateRight: string;
176
+ straighten: string;
177
+ flipHorizontal: string;
178
+ flipVertical: string;
179
+ reset: string;
180
+ ratios: string;
181
+ free: string;
182
+ imageAlt: string;
183
+ cropBox: string;
184
+ hintMove: string;
185
+ hintResize: string;
186
+ hintPan: string;
187
+ hintZoom: string;
188
+ status: (width: number, height: number) => string;
189
+ loading: string;
190
+ failedCors: string;
191
+ failedLoad: string;
192
+ failedRead: string;
193
+ failedRender: string;
194
+ imageTooSmall: (width: number, height: number) => string;
195
+ cropTooSmall: (width: number, height: number) => string;
196
+ };
111
197
  };
112
198
  export type UILabels = typeof DEFAULT_UI_LABELS & {
113
199
  table?: Partial<DataTableLabels>;
@@ -1,3 +1,4 @@
1
1
  export { useDebounced, useDebouncedCallback } from './useDebounced';
2
2
  export type { DebouncedCallback } from './useDebounced';
3
3
  export { usePresence, SURFACE_EXIT_MS } from './usePresence';
4
+ export { useMeasuredState } from './useMeasuredState';
@@ -0,0 +1 @@
1
+ export declare function useMeasuredState<T extends object>(initial: T | null): [T | null, (next: T | null) => void];
@@ -0,0 +1,3 @@
1
+ import type { TooltipTone } from '../types';
2
+ export type AlertTone = Exclude<TooltipTone, 'default'>;
3
+ export declare function alertRoleFor(tone: AlertTone): 'alert' | 'status';
@@ -0,0 +1,2 @@
1
+ export declare function shortcutText(hotkey: string, isApple: boolean): string;
2
+ export declare function isApplePlatform(platform: string): boolean;
@@ -23,12 +23,23 @@ export declare function endOfMonth(day: IsoDay): IsoDay;
23
23
  export declare function weekdayOf(day: IsoDay): number;
24
24
  export declare const isDayInRange: (day: IsoDay, min?: string, max?: string) => boolean;
25
25
  export declare function clampDay(day: IsoDay, min?: string, max?: string): IsoDay;
26
+ export declare const DEFAULT_YEARS_BACK = 100;
27
+ export declare const DEFAULT_YEARS_AHEAD = 10;
28
+ export declare function yearOptions(opts: {
29
+ today: IsoDay;
30
+ shown: number;
31
+ back?: number;
32
+ ahead?: number;
33
+ min?: string;
34
+ max?: string;
35
+ }): number[];
26
36
  export declare function normalizeTime(value: unknown): string;
27
37
  export declare function splitDateValue(value: unknown): {
28
38
  day: IsoDay;
29
39
  time: string;
30
40
  };
31
41
  export declare function joinDateValue(day: IsoDay, time?: string): DateValue;
42
+ export declare function expandYear(yy: number, todayYear: number): number;
32
43
  export declare function parseDateText(text: unknown, opts?: {
33
44
  within?: IsoDay;
34
45
  today?: IsoDay;
@@ -137,5 +148,6 @@ export declare function viewForRange(from: IsoDay, to: IsoDay, opts?: {
137
148
  export declare function extendDateRange(range: Partial<DayRange> | null | undefined, day: IsoDay): DayRange;
138
149
  export declare function calendarNames(locale?: string): {
139
150
  months: string[];
151
+ monthsShort: string[];
140
152
  weekdays: string[];
141
153
  };
@@ -1,4 +1,9 @@
1
- import type { FieldLayout, FieldSize } from '../types';
1
+ import type { FieldLayout, FieldSize, FieldWidth } from '../types';
2
+ export declare function resolveFieldWidth(width: FieldWidth | undefined, layout: FieldLayout): {
3
+ classKey?: string;
4
+ length?: string;
5
+ };
6
+ export declare function warnFieldFullWidth(fullWidth: boolean | undefined): void;
2
7
  export declare function buildFieldWrapperClassKeys(opts: {
3
8
  layout: FieldLayout;
4
9
  size?: FieldSize;
@@ -0,0 +1,132 @@
1
+ import { type ImageCropRect, type ImageSize, type ImageTransform, type ImageTransformInput } from './imageTransform.logic';
2
+ export interface ImageEditorRatio {
3
+ label: string;
4
+ value: number;
5
+ }
6
+ export interface ImageEditorCropOptions {
7
+ ratios?: ImageEditorRatio[];
8
+ free?: boolean;
9
+ defaultRatio?: number;
10
+ shape?: 'rect' | 'circle';
11
+ minWidth?: number;
12
+ minHeight?: number;
13
+ }
14
+ export interface ImageEditorOutputOptions {
15
+ maxWidth?: number;
16
+ maxHeight?: number;
17
+ mimeType?: string;
18
+ quality?: number;
19
+ }
20
+ export interface ImageEditorOptions {
21
+ crop?: boolean | ImageEditorCropOptions;
22
+ zoom?: boolean | {
23
+ min?: number;
24
+ max?: number;
25
+ };
26
+ pan?: boolean;
27
+ rotate?: boolean;
28
+ straighten?: boolean | {
29
+ maxDegrees?: number;
30
+ };
31
+ flip?: boolean | {
32
+ horizontal?: boolean;
33
+ vertical?: boolean;
34
+ };
35
+ reset?: boolean;
36
+ output?: ImageEditorOutputOptions;
37
+ }
38
+ export interface ResolvedImageEditorOptions {
39
+ crop: {
40
+ enabled: boolean;
41
+ ratios: ImageEditorRatio[];
42
+ free: boolean;
43
+ initialRatio: number | null;
44
+ showSelector: boolean;
45
+ shape: 'rect' | 'circle';
46
+ minWidth: number;
47
+ minHeight: number;
48
+ };
49
+ zoom: {
50
+ enabled: boolean;
51
+ min: number;
52
+ max: number;
53
+ };
54
+ pan: boolean;
55
+ rotate: boolean;
56
+ straighten: {
57
+ enabled: boolean;
58
+ maxDegrees: number;
59
+ };
60
+ flip: {
61
+ horizontal: boolean;
62
+ vertical: boolean;
63
+ };
64
+ reset: boolean;
65
+ output: ImageEditorOutputOptions;
66
+ }
67
+ export declare const resolveImageEditorOptions: (options?: ImageEditorOptions) => ResolvedImageEditorOptions;
68
+ export declare const restrictImageTransform: (image: ImageSize, options: ResolvedImageEditorOptions, input: ImageTransformInput, ratio?: number | null) => ImageTransform;
69
+ export interface ImageEditorModel {
70
+ image: ImageSize;
71
+ options: ResolvedImageEditorOptions;
72
+ transform: ImageTransform;
73
+ ratio: number | null;
74
+ stage: ImageSize;
75
+ zoom: number;
76
+ center: {
77
+ x: number;
78
+ y: number;
79
+ };
80
+ anchorCrop: ImageCropRect | null;
81
+ }
82
+ export declare const imageEditorScale: (m: ImageEditorModel) => number;
83
+ export interface CreateImageEditorModel {
84
+ image: ImageSize;
85
+ stage: ImageSize;
86
+ options: ResolvedImageEditorOptions;
87
+ initial?: ImageTransformInput;
88
+ }
89
+ export declare const createImageEditorModel: ({ image, stage, options, initial }: CreateImageEditorModel) => ImageEditorModel;
90
+ export declare const setImageEditorStage: (m: ImageEditorModel, stage: ImageSize) => ImageEditorModel;
91
+ export declare const applyImageEditorOptions: (m: ImageEditorModel, options: ResolvedImageEditorOptions) => ImageEditorModel;
92
+ export declare const resetImageEditor: (m: ImageEditorModel) => ImageEditorModel;
93
+ export declare const rotateImageEditor: (m: ImageEditorModel, direction: "left" | "right") => ImageEditorModel;
94
+ export declare const flipImageEditor: (m: ImageEditorModel, axis: "horizontal" | "vertical") => ImageEditorModel;
95
+ export declare const straightenImageEditor: (m: ImageEditorModel, degrees: number) => ImageEditorModel;
96
+ export declare const setImageEditorRatio: (m: ImageEditorModel, ratio: number | null) => ImageEditorModel;
97
+ export declare const setImageEditorZoom: (m: ImageEditorModel, zoom: number) => ImageEditorModel;
98
+ export declare const moveImageEditorCrop: (m: ImageEditorModel, dx: number, dy: number) => ImageEditorModel;
99
+ export declare const panImageEditor: (m: ImageEditorModel, dx: number, dy: number) => ImageEditorModel;
100
+ export type ImageCropHandle = 'n' | 's' | 'e' | 'w' | 'nw' | 'ne' | 'sw' | 'se';
101
+ export declare const IMAGE_CROP_HANDLES: readonly ImageCropHandle[];
102
+ export declare const resizeImageEditorCrop: (m: ImageEditorModel, handle: ImageCropHandle, dx: number, dy: number) => ImageEditorModel;
103
+ export declare const imageEditorBox: (m: ImageEditorModel) => ImageCropRect;
104
+ export declare const imageEditorViewMatrix: (m: ImageEditorModel) => import("./imageTransform.logic").ImageMatrix;
105
+ export declare const finalImageTransform: (m: ImageEditorModel) => ImageTransform;
106
+ export declare const imageEditorOutputSize: (m: ImageEditorModel) => ImageSize;
107
+ export declare const imageEditorMeetsMinimum: (m: ImageEditorModel) => boolean;
108
+ export declare const imageCanMeetMinimum: (image: ImageSize, options: ResolvedImageEditorOptions) => boolean;
109
+ export type ImageEditorKeyAction = {
110
+ type: 'move';
111
+ dx: number;
112
+ dy: number;
113
+ } | {
114
+ type: 'resize';
115
+ dx: number;
116
+ dy: number;
117
+ } | {
118
+ type: 'pan';
119
+ dx: number;
120
+ dy: number;
121
+ } | {
122
+ type: 'zoom';
123
+ factor: number;
124
+ };
125
+ export declare const imageEditorKeyAction: (options: ResolvedImageEditorOptions, event: {
126
+ key: string;
127
+ shiftKey?: boolean;
128
+ altKey?: boolean;
129
+ ctrlKey?: boolean;
130
+ metaKey?: boolean;
131
+ }) => ImageEditorKeyAction | null;
132
+ export declare const applyImageEditorKeyAction: (m: ImageEditorModel, action: ImageEditorKeyAction) => ImageEditorModel;
@@ -0,0 +1,57 @@
1
+ export type ImageQuarterTurn = 0 | 90 | 180 | 270;
2
+ export interface ImageSize {
3
+ width: number;
4
+ height: number;
5
+ }
6
+ export interface ImageCropRect {
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ }
12
+ export interface ImageOrientation {
13
+ rotate: ImageQuarterTurn;
14
+ straighten: number;
15
+ flipH: boolean;
16
+ flipV: boolean;
17
+ }
18
+ export interface ImageTransform extends ImageOrientation {
19
+ crop: ImageCropRect;
20
+ }
21
+ export type ImageTransformInput = Partial<Omit<ImageTransform, 'rotate'>> & {
22
+ rotate?: number;
23
+ };
24
+ export type ImageMatrix = readonly [a: number, b: number, c: number, d: number, e: number, f: number];
25
+ type Turned = Pick<ImageOrientation, 'rotate' | 'straighten'>;
26
+ export declare const IMAGE_STRAIGHTEN_LIMIT = 45;
27
+ export declare const normalizeQuarterTurn: (degrees: number) => ImageQuarterTurn;
28
+ export declare const clampStraighten: (degrees: number, limit?: number) => number;
29
+ export declare const imageFrameSize: (image: ImageSize, rotate: ImageQuarterTurn) => ImageSize;
30
+ export declare const imageBoundsSize: (image: ImageSize, o: Turned) => ImageSize;
31
+ export declare const fullImageCrop: (image: ImageSize, o: Turned, ratio?: number | null) => ImageCropRect;
32
+ export declare const imageCropFits: (image: ImageSize, o: Turned, crop: ImageCropRect) => boolean;
33
+ export declare const clampImageCrop: (image: ImageSize, o: Turned, crop: ImageCropRect) => ImageCropRect;
34
+ export declare const fitImageCropToRatio: (image: ImageSize, o: Turned, crop: ImageCropRect, ratio: number | null) => ImageCropRect;
35
+ export declare const resolveImageTransform: (image: ImageSize, input?: ImageTransformInput) => ImageTransform;
36
+ export declare const snapImageCrop: (image: ImageSize, transform: ImageTransform, ratio?: number | null) => ImageCropRect;
37
+ export interface ImageOutputLimits {
38
+ maxWidth?: number;
39
+ maxHeight?: number;
40
+ }
41
+ export declare const imageOutputSize: (crop: Pick<ImageCropRect, "width" | "height">, limits?: ImageOutputLimits) => ImageSize;
42
+ export interface ImageFrameTarget {
43
+ scaleX: number;
44
+ scaleY: number;
45
+ x: number;
46
+ y: number;
47
+ }
48
+ export declare const imageMatrix: (image: ImageSize, o: ImageOrientation, target: ImageFrameTarget) => ImageMatrix;
49
+ export declare const imageOutputMatrix: (image: ImageSize, transform: ImageTransform, output: ImageSize) => ImageMatrix;
50
+ export declare const applyImageMatrix: (m: ImageMatrix, p: {
51
+ x: number;
52
+ y: number;
53
+ }) => {
54
+ x: number;
55
+ y: number;
56
+ };
57
+ export {};
@@ -6,6 +6,7 @@ export * from './collapsible.logic';
6
6
  export * from './colorScheme';
7
7
  export * from './columnOrder.logic';
8
8
  export * from './datePicker.logic';
9
+ export * from './periodPicker.logic';
9
10
  export * from './timeField.logic';
10
11
  export * from './editableTable.logic';
11
12
  export * from './fieldControl.logic';
@@ -21,8 +22,13 @@ export * from './popover.logic';
21
22
  export * from './popupList.logic';
22
23
  export * from './press.logic';
23
24
  export * from './stepper.logic';
25
+ export * from './alert.logic';
26
+ export * from './pagination.logic';
27
+ export * from './commandPalette.logic';
28
+ export * from './pageProgress.logic';
24
29
  export * from './quickAddGrid.logic';
25
30
  export * from './radio.logic';
31
+ export * from './reorder.logic';
26
32
  export * from './select.logic';
27
33
  export * from './suggest.logic';
28
34
  export * from './switch.logic';
@@ -36,3 +42,6 @@ export * from './tooltip.logic';
36
42
  export * from './typography.logic';
37
43
  export * from './uiScale.logic';
38
44
  export * from './useMergeRefs';
45
+ export * from './inertProps';
46
+ export * from './imageTransform.logic';
47
+ export * from './imageEditor.logic';
@@ -0,0 +1,3 @@
1
+ export declare function inertProps(inert: boolean): {
2
+ inert?: boolean;
3
+ };
@@ -0,0 +1,3 @@
1
+ export type PageProgressPhase = 'idle' | 'waiting' | 'running' | 'finishing';
2
+ export type PageProgressEvent = 'activate' | 'deactivate' | 'delayElapsed' | 'finished';
3
+ export declare function nextPageProgressPhase(phase: PageProgressPhase, event: PageProgressEvent): PageProgressPhase;
@@ -0,0 +1,7 @@
1
+ export type PaginationSlot = number | 'gap-start' | 'gap-end';
2
+ export declare function pageCountFor(total: number, pageSize: number): number;
3
+ export declare function pageRowRange(pageIndex: number, pageSize: number, total: number): {
4
+ from: number;
5
+ to: number;
6
+ };
7
+ export declare function paginationSlots(pageIndex: number, pageCount: number, siblings?: number): PaginationSlot[];