@motifx-community/ui 0.1.0-beta.2 → 0.1.0-beta.3

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 (215) hide show
  1. package/CHANGELOG.md +87 -12
  2. package/README.md +6 -6
  3. package/dist/components/accordion/Accordion.d.ts +3 -3
  4. package/dist/components/accordion/AccordionItem.d.ts +1 -1
  5. package/dist/components/card/Card.d.ts +1 -1
  6. package/dist/components/contextmenu/ContextMenu.d.ts +1 -1
  7. package/dist/components/datagrid/DataGrid.d.ts +5 -5
  8. package/dist/components/datagrid/data-grid-props.d.ts +2 -2
  9. package/dist/components/datagrid/grid-adaptive-row-expanded-event-args.d.ts +1 -1
  10. package/dist/components/datagrid/grid-adaptive-row-expanding-event-args.d.ts +1 -1
  11. package/dist/components/datagrid/grid-grouping-changed-event-args.d.ts +1 -1
  12. package/dist/components/datagrid/grid-grouping-changing-event-args.d.ts +2 -2
  13. package/dist/components/datagrid/grid-master-detail.d.ts +1 -1
  14. package/dist/components/datagrid/grid-row-expanded-event-args.d.ts +1 -1
  15. package/dist/components/datagrid/grid-row-expanding-event-args.d.ts +1 -1
  16. package/dist/components/datagrid/grid-search-text-changed-event-args.d.ts +1 -1
  17. package/dist/components/datagrid/grid-search-text-changing-event-args.d.ts +1 -1
  18. package/dist/components/datagrid/grid-sort-changing-event-args.d.ts +1 -1
  19. package/dist/components/datagrid/model/GridSearch.d.ts +1 -1
  20. package/dist/components/draggable/Draggable.d.ts +99 -0
  21. package/dist/components/draggable/DropTarget.d.ts +38 -0
  22. package/dist/components/draggable/draggable-event-args.d.ts +17 -0
  23. package/dist/components/draggable/draggable-props.d.ts +37 -0
  24. package/dist/components/draggable/drop-event-args.d.ts +11 -0
  25. package/dist/components/draggable/drop-target-props.d.ts +13 -0
  26. package/dist/components/draggable/index.d.ts +6 -0
  27. package/dist/components/fileuploader/FileUploader.d.ts +1 -1
  28. package/dist/components/fileuploader/file-uploader-props.d.ts +1 -1
  29. package/dist/components/fileuploader/upload-mode.d.ts +1 -1
  30. package/dist/components/filterbuilder/FilterBuilder.d.ts +1 -1
  31. package/dist/components/gallery/Gallery.d.ts +132 -0
  32. package/dist/components/gallery/gallery-item-click-event-args.d.ts +9 -0
  33. package/dist/components/gallery/gallery-item.d.ts +18 -0
  34. package/dist/components/gallery/gallery-props.d.ts +38 -0
  35. package/dist/components/gallery/index.d.ts +6 -0
  36. package/dist/components/gallery/slide-changed-event-args.d.ts +11 -0
  37. package/dist/components/gallery/slide-changing-event-args.d.ts +14 -0
  38. package/dist/components/layout/ChildSettings.d.ts +1 -1
  39. package/dist/components/layout/DockPanel.d.ts +2 -2
  40. package/dist/components/layout/Grid.d.ts +1 -1
  41. package/dist/components/layout/SplitContainer.d.ts +1 -1
  42. package/dist/components/layout/Stack.d.ts +1 -1
  43. package/dist/components/multiview/MultiView.d.ts +87 -0
  44. package/dist/components/multiview/View.d.ts +41 -0
  45. package/dist/components/multiview/index.d.ts +6 -0
  46. package/dist/components/multiview/multi-view-props.d.ts +24 -0
  47. package/dist/components/multiview/view-props.d.ts +15 -0
  48. package/dist/components/multiview/view-selecting-event-args.d.ts +15 -0
  49. package/dist/components/multiview/view-selection-changed-event-args.d.ts +12 -0
  50. package/dist/components/numberbox/number-box-props.d.ts +1 -1
  51. package/dist/components/popover/Popover.d.ts +1 -1
  52. package/dist/components/popover/popover-props.d.ts +1 -1
  53. package/dist/components/resizable/Resizable.d.ts +84 -0
  54. package/dist/components/resizable/index.d.ts +3 -0
  55. package/dist/components/resizable/resizable-props.d.ts +41 -0
  56. package/dist/components/resizable/resize-event-args.d.ts +13 -0
  57. package/dist/components/scheduler/AppointmentEditor.d.ts +1 -1
  58. package/dist/components/scheduler/scheduler-props.d.ts +1 -1
  59. package/dist/components/scrollview/ScrollView.d.ts +1 -1
  60. package/dist/components/skeleton/Skeleton.d.ts +1 -1
  61. package/dist/components/speeddial/SpeedDial.d.ts +129 -0
  62. package/dist/components/speeddial/index.d.ts +6 -0
  63. package/dist/components/speeddial/speed-dial-action-click-event-args.d.ts +9 -0
  64. package/dist/components/speeddial/speed-dial-action.d.ts +25 -0
  65. package/dist/components/speeddial/speed-dial-event-args.d.ts +8 -0
  66. package/dist/components/speeddial/speed-dial-props.d.ts +49 -0
  67. package/dist/components/speeddial/speed-dial-tooltip.d.ts +3 -0
  68. package/dist/components/splitter/SplitPane.d.ts +45 -0
  69. package/dist/components/splitter/Splitter.d.ts +116 -0
  70. package/dist/components/splitter/index.d.ts +6 -0
  71. package/dist/components/splitter/split-pane-props.d.ts +21 -0
  72. package/dist/components/splitter/splitter-collapse-event-args.d.ts +13 -0
  73. package/dist/components/splitter/splitter-props.d.ts +25 -0
  74. package/dist/components/splitter/splitter-resize-event-args.d.ts +10 -0
  75. package/dist/components/stepper/Stepper.d.ts +1 -1
  76. package/dist/components/stepper/WizardStep.d.ts +1 -1
  77. package/dist/components/stepper/step-changed-event-args.d.ts +1 -1
  78. package/dist/components/stepper/step-changing-event-args.d.ts +1 -1
  79. package/dist/components/stepper/wizard-props.d.ts +1 -1
  80. package/dist/components/tabdocs/TabDocumentManager.d.ts +1 -1
  81. package/dist/components/tabs/Tabs.d.ts +2 -2
  82. package/dist/components/tileview/TileView.d.ts +128 -0
  83. package/dist/components/tileview/index.d.ts +6 -0
  84. package/dist/components/tileview/tile-click-event-args.d.ts +9 -0
  85. package/dist/components/tileview/tile-reorder-event-args.d.ts +11 -0
  86. package/dist/components/tileview/tile-selection-changed-event-args.d.ts +11 -0
  87. package/dist/components/tileview/tile-view-item.d.ts +18 -0
  88. package/dist/components/tileview/tile-view-props.d.ts +38 -0
  89. package/dist/components/timeline/Timeline.d.ts +113 -0
  90. package/dist/components/timeline/index.d.ts +5 -0
  91. package/dist/components/timeline/timeline-item-click-event-args.d.ts +9 -0
  92. package/dist/components/timeline/timeline-item.d.ts +24 -0
  93. package/dist/components/timeline/timeline-props.d.ts +30 -0
  94. package/dist/components/timeline/timeline-selection-changed-event-args.d.ts +11 -0
  95. package/dist/components/tooltip/Tooltip.d.ts +1 -1
  96. package/dist/components/treeview/TreeView.d.ts +1 -1
  97. package/dist/components/validationsummary/ValidationSummary.d.ts +56 -0
  98. package/dist/components/validationsummary/index.d.ts +3 -0
  99. package/dist/components/validationsummary/summary-item-click-event-args.d.ts +11 -0
  100. package/dist/components/validationsummary/validation-summary-props.d.ts +17 -0
  101. package/dist/core/control.d.ts +4 -4
  102. package/dist/core/flow-home.d.ts +1 -1
  103. package/dist/core/ui-strings.d.ts +26 -0
  104. package/dist/generated/tokens.d.ts +6390 -4745
  105. package/dist/index.d.ts +9 -0
  106. package/dist/index.js +5119 -759
  107. package/dist/index.js.map +1 -1
  108. package/dist/locales/en.json +22 -1
  109. package/dist/locales/tr.json +22 -1
  110. package/dist/parts/slide/slide-track-host.d.ts +19 -0
  111. package/dist/parts/slide/slide-track.d.ts +45 -0
  112. package/dist/styles.css +3072 -182
  113. package/dist/tokens/index.d.ts +6390 -4745
  114. package/dist/tokens/index.js +6390 -4745
  115. package/dist/tokens/index.js.map +1 -1
  116. package/dist/{tr-B218zMtu.js → tr-C5IXRzAH.js} +45 -3
  117. package/dist/{tr-B218zMtu.js.map → tr-C5IXRzAH.js.map} +1 -1
  118. package/docs/accordion.md +9 -9
  119. package/docs/actionsheet.md +2 -2
  120. package/docs/avatar.md +5 -5
  121. package/docs/badge.md +6 -6
  122. package/docs/bottomsheet.md +4 -4
  123. package/docs/breadcrumb.md +3 -3
  124. package/docs/button.md +8 -8
  125. package/docs/buttongroup.md +5 -5
  126. package/docs/calendar.md +6 -6
  127. package/docs/card.md +6 -6
  128. package/docs/checkbox.md +7 -7
  129. package/docs/chip.md +5 -5
  130. package/docs/colorbox.md +3 -3
  131. package/docs/combobox.md +7 -7
  132. package/docs/control.md +12 -12
  133. package/docs/datagrid-api.md +5 -5
  134. package/docs/datagrid-bands.md +1 -1
  135. package/docs/datagrid-drag-select.md +2 -2
  136. package/docs/datagrid-drag.md +1 -1
  137. package/docs/datagrid-editing.md +2 -2
  138. package/docs/datagrid-filtering.md +3 -3
  139. package/docs/datagrid-forms.md +1 -1
  140. package/docs/datagrid-grouping.md +1 -1
  141. package/docs/datagrid-layout.md +4 -4
  142. package/docs/datagrid-lookups.md +1 -1
  143. package/docs/datagrid-master-detail.md +3 -3
  144. package/docs/datagrid-scrolling.md +1 -1
  145. package/docs/datagrid-selection.md +3 -3
  146. package/docs/datagrid.md +8 -8
  147. package/docs/datebox.md +6 -6
  148. package/docs/daterangebox.md +4 -4
  149. package/docs/draggable.md +194 -0
  150. package/docs/drawer.md +1 -1
  151. package/docs/dropdown.md +8 -8
  152. package/docs/fileuploader.md +4 -4
  153. package/docs/filterbuilder.md +7 -7
  154. package/docs/formlayout.md +1 -1
  155. package/docs/gallery.md +244 -0
  156. package/docs/home.md +11 -7
  157. package/docs/keyboard.md +1 -1
  158. package/docs/language.md +1 -1
  159. package/docs/layout.md +13 -13
  160. package/docs/listbox.md +8 -8
  161. package/docs/loadpanel.md +4 -4
  162. package/docs/lookup.md +1 -1
  163. package/docs/menus.md +2 -2
  164. package/docs/multiview.md +202 -0
  165. package/docs/numberbox.md +7 -7
  166. package/docs/pagination.md +4 -4
  167. package/docs/popover.md +11 -11
  168. package/docs/progress.md +7 -7
  169. package/docs/radiogroup.md +7 -7
  170. package/docs/rating.md +4 -4
  171. package/docs/resizable.md +139 -0
  172. package/docs/scheduler-agenda.md +1 -1
  173. package/docs/scheduler-big-data.md +1 -1
  174. package/docs/scheduler-editing.md +5 -5
  175. package/docs/scheduler-form.md +1 -1
  176. package/docs/scheduler-icalendar.md +1 -1
  177. package/docs/scheduler-mobile.md +1 -1
  178. package/docs/scheduler-recurrence.md +2 -2
  179. package/docs/scheduler-resources.md +1 -1
  180. package/docs/scheduler-timeline.md +1 -1
  181. package/docs/scheduler.md +4 -4
  182. package/docs/scrollview.md +5 -5
  183. package/docs/showcase.md +1 -1
  184. package/docs/skeleton.md +2 -2
  185. package/docs/slider.md +7 -7
  186. package/docs/sortable.md +2 -2
  187. package/docs/speeddial.md +290 -0
  188. package/docs/splitter.md +204 -0
  189. package/docs/stepper.md +5 -5
  190. package/docs/switch.md +7 -7
  191. package/docs/tabdocs-dock.md +3 -3
  192. package/docs/tabdocs-drag.md +1 -1
  193. package/docs/tabdocs-menus.md +1 -1
  194. package/docs/tabdocs-mobile.md +1 -1
  195. package/docs/tabdocs-tabs.md +1 -1
  196. package/docs/tabdocs-windows.md +1 -1
  197. package/docs/tabdocs-workspace.md +1 -1
  198. package/docs/tabdocs.md +5 -5
  199. package/docs/tabs.md +9 -9
  200. package/docs/tagbox.md +8 -8
  201. package/docs/textarea.md +7 -7
  202. package/docs/textbox.md +8 -8
  203. package/docs/tileview.md +206 -0
  204. package/docs/timeline.md +174 -0
  205. package/docs/toast.md +5 -5
  206. package/docs/tokens.md +333 -4
  207. package/docs/toolbar.md +6 -6
  208. package/docs/tooltip.md +12 -12
  209. package/docs/treeview.md +9 -9
  210. package/docs/validationsummary.md +115 -0
  211. package/docs/window.md +5 -5
  212. package/docs/wizard.md +9 -9
  213. package/llms-full.txt +2525 -379
  214. package/llms.txt +13 -4
  215. package/package.json +1 -1
@@ -12,7 +12,7 @@ export interface PopoverProps extends ControlProps {
12
12
  title?: Bind<string>;
13
13
  /** What screen readers call it when it has no title. */
14
14
  label?: Bind<string>;
15
- /** Content from code, after the JSX children. */
15
+ /** Content programmatically, after the JSX children. */
16
16
  content?: Bind<ComponentBase | null | undefined>;
17
17
  /** Default `'click'`. */
18
18
  showOn?: Bind<PopoverShowOn>;
@@ -0,0 +1,84 @@
1
+ import { Component, Emitter, type Bind, type Event as MotifEvent, type IBaseProp } from "@motifx/core";
2
+ import { Control } from "../../core/control";
3
+ import type { WindowBox } from "../../parts/window/window-box";
4
+ import type { ResizeEventArgs } from "./resize-event-args";
5
+ import type { ResizableProps, ResizeEdge, ResizeHandles, ResizeSize } from "./resizable-props";
6
+ interface Limits {
7
+ minW: number;
8
+ minH: number;
9
+ maxW: number;
10
+ maxH: number;
11
+ }
12
+ /**
13
+ * A box the user resizes from its sides and corners with the pointer, or with the arrow keys on the grip in its
14
+ * end corner. The JSX children are its content. It stays at least `minWidth` × `minHeight`, at most the maximums,
15
+ * and inside `area` when one is given; `keepAspectRatio` keeps its shape. A box laid out by its position
16
+ * (`absolute`, `fixed`) also moves when a start or top side is dragged, so the far side stays; one in the flow
17
+ * only changes size.
18
+ *
19
+ * @example
20
+ * <Resizable minWidth={160} minHeight={100} x-model={() => this.layout.size}><Panel padding="md">…</Panel></Resizable>
21
+ * <Resizable handles={['end', 'bottom', 'bottom-end']} area="parent" keepAspectRatio><img src="…" /></Resizable>
22
+ */
23
+ export declare class Resizable extends Control<HTMLDivElement, ResizableProps> {
24
+ starting: Emitter<ResizeEventArgs>;
25
+ resizing: Emitter<ResizeEventArgs>;
26
+ resized: Emitter<ResizeEventArgs>;
27
+ frame: HTMLDivElement;
28
+ grip: Component<HTMLDivElement>;
29
+ live: Component<HTMLSpanElement>;
30
+ constructor(props?: IBaseProp<ResizableProps>);
31
+ get handles(): ResizeHandles;
32
+ set handles(value: Bind<ResizeHandles>);
33
+ get minWidth(): number;
34
+ set minWidth(value: Bind<number>);
35
+ get minHeight(): number;
36
+ set minHeight(value: Bind<number>);
37
+ get maxWidth(): number | null;
38
+ set maxWidth(value: Bind<number | null>);
39
+ get maxHeight(): number | null;
40
+ set maxHeight(value: Bind<number | null>);
41
+ get area(): 'parent' | HTMLElement | null;
42
+ set area(value: Bind<'parent' | HTMLElement | null>);
43
+ get keepAspectRatio(): boolean;
44
+ set keepAspectRatio(value: Bind<boolean>);
45
+ get step(): number;
46
+ set step(value: Bind<number>);
47
+ get width(): number | string | null;
48
+ set width(value: Bind<number | string | null>);
49
+ get height(): number | string | null;
50
+ set height(value: Bind<number | string | null>);
51
+ get size(): ResizeSize | null;
52
+ set size(value: Bind<ResizeSize | null>);
53
+ /** `size`, for `x-model`. */
54
+ get value(): ResizeSize | null;
55
+ set value(value: ResizeSize | null);
56
+ /** A resize is about to begin from a handle (`edge`); `cancel` keeps the size. */
57
+ get onResizeStarting(): MotifEvent<ResizeEventArgs>;
58
+ /** The box is being resized (`width`, `height` so far). */
59
+ get onResizing(): MotifEvent<ResizeEventArgs>;
60
+ /** A resize ended: the pointer let go, or a key moved a side. */
61
+ get onResized(): MotifEvent<ResizeEventArgs>;
62
+ /** The box's size in pixels now. */
63
+ get currentSize(): ResizeSize;
64
+ /** The grip in the end corner, the Tab stop that takes the keys. */
65
+ get gripElement(): HTMLDivElement;
66
+ length(value: number | string | null | undefined): string;
67
+ allowed(): Set<ResizeEdge>;
68
+ drawHandles(): void;
69
+ box(): WindowBox;
70
+ room(): {
71
+ w: number;
72
+ h: number;
73
+ };
74
+ limits(): Limits;
75
+ get positioned(): boolean;
76
+ physical(edge: ResizeEdge): ResizeEdge;
77
+ next(edge: ResizeEdge, start: WindowBox, dx: number, dy: number): WindowBox;
78
+ applyBox(box: WindowBox): void;
79
+ args(edge: ResizeEdge, box: WindowBox, event?: Event): ResizeEventArgs;
80
+ pointerDown(e: PointerEvent, given: ResizeEdge | null): void;
81
+ keyDown(e: KeyboardEvent): void;
82
+ finish(edge: ResizeEdge, box: WindowBox, event?: Event): void;
83
+ }
84
+ export {};
@@ -0,0 +1,3 @@
1
+ export { Resizable } from './Resizable';
2
+ export type { ResizableProps, ResizeEdge, ResizeHandles, ResizeSize } from './resizable-props';
3
+ export type { ResizeEventArgs } from './resize-event-args';
@@ -0,0 +1,41 @@
1
+ import type { Bind } from '@motifx/core';
2
+ import type { ControlProps } from '../../core/control';
3
+ import type { WindowEdge } from '../../parts/window/window-edge';
4
+ import type { ResizeEventArgs } from './resize-event-args';
5
+ /** A side or a corner the box is resized from; `start` and `end` follow the reading direction. */
6
+ export type ResizeEdge = WindowEdge;
7
+ /** Which handles the box has: every side and corner, the sides, the corners, or a list of them. */
8
+ export type ResizeHandles = 'all' | 'edges' | 'corners' | readonly ResizeEdge[];
9
+ /** The box's size in pixels. */
10
+ export interface ResizeSize {
11
+ width: number;
12
+ height: number;
13
+ }
14
+ /** Props of `Resizable`. Each one is also a settable property; a function is followed. */
15
+ export interface ResizableProps extends ControlProps {
16
+ /** Default `'all'`. */
17
+ handles?: Bind<ResizeHandles>;
18
+ /** The least width and height, in pixels. Default `30`. */
19
+ minWidth?: Bind<number>;
20
+ minHeight?: Bind<number>;
21
+ /** The most width and height, in pixels; `null` for no limit. Default `null`. */
22
+ maxWidth?: Bind<number | null>;
23
+ maxHeight?: Bind<number | null>;
24
+ /** The box stays inside this: its parent, or an element it lies in. Default `null`, no limit. */
25
+ area?: Bind<'parent' | HTMLElement | null>;
26
+ /** The width and the height keep their ratio. Default `false`. */
27
+ keepAspectRatio?: Bind<boolean>;
28
+ /** Pixels an arrow key changes a side by. Default `10`. */
29
+ step?: Bind<number>;
30
+ /** The width to start with, a CSS length or pixels. Without one the content decides. */
31
+ width?: Bind<number | string | null>;
32
+ height?: Bind<number | string | null>;
33
+ /** The size in pixels: given, it is applied; after every resize the new one is written to `x-model`. */
34
+ size?: Bind<ResizeSize | null>;
35
+ /** A resize is about to begin from a handle; cancelable. */
36
+ onResizeStarting?: (e: ResizeEventArgs) => void;
37
+ /** The box is being resized. */
38
+ onResizing?: (e: ResizeEventArgs) => void;
39
+ /** A resize ended (the pointer let go, or a key moved a side). */
40
+ onResized?: (e: ResizeEventArgs) => void;
41
+ }
@@ -0,0 +1,13 @@
1
+ import type { EventArgs } from '@motifx/core';
2
+ import type { Resizable } from './Resizable';
3
+ import type { ResizeEdge } from './resizable-props';
4
+ /** A resize begins (`cancel = true` keeps the size), goes on, or ended: the edge it is from and the size in pixels. */
5
+ export interface ResizeEventArgs extends EventArgs {
6
+ edge: ResizeEdge;
7
+ width: number;
8
+ height: number;
9
+ /** By a handle or a key, else from the props. */
10
+ byUser: boolean;
11
+ source: Resizable;
12
+ event?: Event;
13
+ }
@@ -129,7 +129,7 @@ export declare class AppointmentEditor<T> implements DragHost<T> {
129
129
  private unsave;
130
130
  /** A change to a series that did not go through: `onDataError` says what was saved and whether it was taken back. */
131
131
  private failed;
132
- /** What a change reaches: the setting's answer, the occurrence from code, else the user's answer. */
132
+ /** What a change reaches: the setting's answer, the occurrence programmatically, else the user's answer. */
133
133
  private scopeFor;
134
134
  /**
135
135
  * Asks the user what a change (or a delete) of an occurrence reaches: `onSeriesAsking` first (it
@@ -112,7 +112,7 @@ export interface SchedulerProps<T> extends ControlProps, SchedulerTemplates<T> {
112
112
  * browser's. An appointment's own zone (`fields.startTimeZone`) is the one its series repeats in.
113
113
  */
114
114
  timeZone?: Bind<string | null>;
115
- /** What changing or deleting an occurrence of a series reaches: `'ask'` (default) asks the user; from code it is the occurrence. */
115
+ /** What changing or deleting an occurrence of a series reaches: `'ask'` (default) asks the user; programmatically it is the occurrence. */
116
116
  seriesEdit?: Bind<SeriesEditMode>;
117
117
  /** Occurrences of a series, and ones changed apart from it, carry a mark where the design language draws one. Default `true`. */
118
118
  recurrenceMarks?: Bind<boolean>;
@@ -17,7 +17,7 @@ interface Pull {
17
17
  /**
18
18
  * Content that scrolls in a box of its own, with the scrollbars shown as told (`showScrollbar`), a pull from the top
19
19
  * that asks for what is new (`pullToRefresh`, `onPullDown`) and a reach near the end that asks for more
20
- * (`loadOnReachBottom`, `onReachBottom`). `scrollTo`, `scrollBy` and `scrollToElement` move it from code.
20
+ * (`loadOnReachBottom`, `onReachBottom`). `scrollTo`, `scrollBy` and `scrollToElement` move it programmatically.
21
21
  *
22
22
  * @example
23
23
  * <ScrollView style="block-size: 20rem" pullToRefresh onPullDown={e => (e.promise = this.reload())} loadOnReachBottom onReachBottom={e => (e.promise = this.loadMore())}>
@@ -34,7 +34,7 @@ export declare class Skeleton extends Control<HTMLDivElement, SkeletonProps> {
34
34
  set loading(value: Bind<boolean>);
35
35
  get label(): string;
36
36
  set label(value: Bind<string>);
37
- /** The part holding what shows once loaded, for adding to it from code. */
37
+ /** The part holding what shows once loaded, for adding to it programmatically. */
38
38
  get content(): Component<HTMLDivElement>;
39
39
  onMounted(): void;
40
40
  private countOf;
@@ -0,0 +1,129 @@
1
+ import { Component, Emitter, type Bind, type ComponentBase, type Event as MotifEvent, type IBaseProp } from "@motifx/core";
2
+ import { Control } from "../../core/control";
3
+ import type { IconSource } from "../../core/icon-source";
4
+ import { Tooltip } from "../tooltip/Tooltip";
5
+ import type { SpeedDialAction } from "./speed-dial-action";
6
+ import type { SpeedDialActionClickEventArgs } from "./speed-dial-action-click-event-args";
7
+ import type { SpeedDialEventArgs } from "./speed-dial-event-args";
8
+ import type { SpeedDialDirection, SpeedDialLayout, SpeedDialPosition, SpeedDialProps, SpeedDialRelativeTo } from "./speed-dial-props";
9
+ import type { SpeedDialTooltip } from "./speed-dial-tooltip";
10
+ type Side = 'top' | 'bottom' | 'start' | 'end';
11
+ interface Look {
12
+ item: unknown;
13
+ key: string | null;
14
+ text: string;
15
+ glyph: string;
16
+ icon: IconSource | null;
17
+ enabled: boolean;
18
+ visible: boolean;
19
+ click: ((e: SpeedDialActionClickEventArgs) => void) | null;
20
+ tooltip: string | boolean | SpeedDialTooltip | undefined;
21
+ }
22
+ interface ActionPart {
23
+ item: unknown;
24
+ button: Component<HTMLButtonElement>;
25
+ iconHost: Component<HTMLSpanElement>;
26
+ glyph: Component<HTMLSpanElement>;
27
+ icon: ComponentBase | null;
28
+ label: Component<HTMLSpanElement>;
29
+ tooltip: Tooltip | null;
30
+ }
31
+ /**
32
+ * A round button in a corner of the page (or in the flow) that opens its actions when pressed: each a round button
33
+ * with a glyph, in a line with a label beside it, or on a circle around the button with a tooltip. With one action
34
+ * shown, the main button does it itself. The actions are a menu for the keys: the arrows move, Enter and Space
35
+ * choose, Escape closes.
36
+ *
37
+ * @example
38
+ * <SpeedDial text="New" actions={[{ text: 'Note', glyph: 'pencil', click: () => this.newNote() }, { text: 'Event', glyph: 'calendar', click: () => this.newEvent() }]} />
39
+ * <SpeedDial layout="quarter-circle" actions={() => this.tools} />
40
+ * <SpeedDial position="inline" direction="end" extended text="Share" actions={() => this.shareTargets} />
41
+ */
42
+ export declare class SpeedDial extends Control<HTMLDivElement, SpeedDialProps> {
43
+ opened: Emitter<SpeedDialEventArgs>;
44
+ closed: Emitter<SpeedDialEventArgs>;
45
+ actionClick: Emitter<SpeedDialActionClickEventArgs>;
46
+ fan: Component<HTMLDivElement>;
47
+ main: Component<HTMLButtonElement>;
48
+ mainGlyph: Component<HTMLSpanElement>;
49
+ mainText: Component<HTMLSpanElement>;
50
+ parts: ActionPart[];
51
+ looks: Look[];
52
+ mainTooltip: Tooltip | null;
53
+ stopItems: (() => void) | null;
54
+ byUser: boolean;
55
+ ready: boolean;
56
+ outside: (e: PointerEvent) => void;
57
+ constructor(props?: IBaseProp<SpeedDialProps>);
58
+ get actions(): readonly SpeedDialAction[];
59
+ set actions(value: Bind<readonly SpeedDialAction[]>);
60
+ get glyph(): string;
61
+ set glyph(value: Bind<string>);
62
+ get openGlyph(): string;
63
+ set openGlyph(value: Bind<string>);
64
+ get extended(): boolean;
65
+ set extended(value: Bind<boolean>);
66
+ get layout(): SpeedDialLayout;
67
+ set layout(value: Bind<SpeedDialLayout>);
68
+ get radius(): number | null;
69
+ set radius(value: Bind<number | null>);
70
+ get direction(): SpeedDialDirection;
71
+ set direction(value: Bind<SpeedDialDirection>);
72
+ get position(): SpeedDialPosition;
73
+ set position(value: Bind<SpeedDialPosition>);
74
+ get relativeTo(): SpeedDialRelativeTo;
75
+ set relativeTo(value: Bind<SpeedDialRelativeTo>);
76
+ get open(): boolean;
77
+ set open(value: Bind<boolean>);
78
+ /** `open`, for `x-model`. */
79
+ get value(): boolean;
80
+ set value(value: boolean);
81
+ get closeOnAction(): boolean;
82
+ set closeOnAction(value: Bind<boolean>);
83
+ get showLabels(): boolean;
84
+ set showLabels(value: Bind<boolean>);
85
+ get tooltip(): boolean | SpeedDialTooltip;
86
+ set tooltip(value: Bind<boolean | SpeedDialTooltip>);
87
+ /** The actions opened. */
88
+ get onOpened(): MotifEvent<SpeedDialEventArgs>;
89
+ /** The actions closed. */
90
+ get onClosed(): MotifEvent<SpeedDialEventArgs>;
91
+ /** An action was pressed (`index`, `action`). */
92
+ get onActionClick(): MotifEvent<SpeedDialActionClickEventArgs>;
93
+ /** Whether the actions are open. */
94
+ get isOpen(): boolean;
95
+ /** The main button. */
96
+ get mainElement(): HTMLButtonElement;
97
+ /** The one action shown, when there is exactly one: the main button does it itself. */
98
+ get single(): Look | null;
99
+ /** Opens the actions from code. */
100
+ show(): void;
101
+ /** Closes the actions from code. */
102
+ close(): void;
103
+ /** Opens the actions, or closes them. */
104
+ toggle(): void;
105
+ /** Reads the actions again after they were changed in place. */
106
+ refresh(): void;
107
+ renderItems(): void;
108
+ lookOf(item: unknown): Look;
109
+ drawActions(): void;
110
+ makeAction(look: Look): ActionPart;
111
+ drawLayout(): void;
112
+ lineDirection(): 'up' | 'down' | 'start' | 'end';
113
+ lineSide(): Side;
114
+ sideAt(angle: number): Side;
115
+ awayFromEdges(): SpeedDialDirection;
116
+ tooltipOf(look: Look, side: Side): SpeedDialTooltip | null;
117
+ drawTooltips(): void;
118
+ drawMain(): void;
119
+ drawOpen(): void;
120
+ setOpen(on: boolean, byUser: boolean, event?: Event): void;
121
+ shownActions(): ActionPart[];
122
+ run(index: number, event: Event): void;
123
+ mainClick(e: MouseEvent): void;
124
+ mainKeyDown(e: KeyboardEvent): void;
125
+ fanKeyDown(e: KeyboardEvent): void;
126
+ moveKeys(): [string[], string[]];
127
+ fanClick(e: MouseEvent): void;
128
+ }
129
+ export {};
@@ -0,0 +1,6 @@
1
+ export { SpeedDial } from './SpeedDial';
2
+ export type { SpeedDialAction } from './speed-dial-action';
3
+ export type { SpeedDialProps, SpeedDialDirection, SpeedDialLayout, SpeedDialPosition, SpeedDialRelativeTo } from './speed-dial-props';
4
+ export type { SpeedDialTooltip } from './speed-dial-tooltip';
5
+ export type { SpeedDialEventArgs } from './speed-dial-event-args';
6
+ export type { SpeedDialActionClickEventArgs } from './speed-dial-action-click-event-args';
@@ -0,0 +1,9 @@
1
+ import type { SpeedDial } from './SpeedDial';
2
+ /** An action was pressed (or the main button, when it stands for the only action). */
3
+ export interface SpeedDialActionClickEventArgs {
4
+ index: number;
5
+ /** The action as given. */
6
+ action: unknown;
7
+ source: SpeedDial;
8
+ event: Event;
9
+ }
@@ -0,0 +1,25 @@
1
+ import type { Bind } from '@motifx/core';
2
+ import type { IconSource } from '../../core/icon-source';
3
+ import type { SpeedDialActionClickEventArgs } from './speed-dial-action-click-event-args';
4
+ import type { SpeedDialTooltip } from './speed-dial-tooltip';
5
+ /** One action of the `SpeedDial`: a round button with a glyph or an icon, its text as a label beside it. */
6
+ export interface SpeedDialAction {
7
+ /** Names the action in the events; without one its index does. */
8
+ key?: string;
9
+ /** The label beside the button, and what screen readers call it. */
10
+ text: Bind<string>;
11
+ /** A glyph of the kit's set (`pencil`, `trash`, `plus`…). */
12
+ glyph?: Bind<string>;
13
+ /** An icon of your own: an address, an element or a component, in place of the glyph. */
14
+ icon?: IconSource;
15
+ /** Its tooltip: a text of its own, its options, or `false` for none. Wins over the speed dial's `tooltip`. */
16
+ tooltip?: Bind<string | boolean | SpeedDialTooltip>;
17
+ /** Default `true`. */
18
+ enabled?: Bind<boolean>;
19
+ /** Default `true`. */
20
+ visible?: Bind<boolean>;
21
+ /** What the action does; `onActionClick` is told too. */
22
+ click?: (e: SpeedDialActionClickEventArgs) => void;
23
+ /** Anything of your own. */
24
+ data?: unknown;
25
+ }
@@ -0,0 +1,8 @@
1
+ import type { SpeedDial } from './SpeedDial';
2
+ /** The actions opened or closed. */
3
+ export interface SpeedDialEventArgs {
4
+ /** By a press or a key, else from code. */
5
+ byUser: boolean;
6
+ source: SpeedDial;
7
+ event?: Event;
8
+ }
@@ -0,0 +1,49 @@
1
+ import type { Bind } from '@motifx/core';
2
+ import type { ControlProps } from '../../core/control';
3
+ import type { SpeedDialAction } from './speed-dial-action';
4
+ import type { SpeedDialActionClickEventArgs } from './speed-dial-action-click-event-args';
5
+ import type { SpeedDialEventArgs } from './speed-dial-event-args';
6
+ import type { SpeedDialTooltip } from './speed-dial-tooltip';
7
+ /** How the actions lie: in a line from the main button, or on a circle, a half or a quarter of one around it. */
8
+ export type SpeedDialLayout = 'linear' | 'circle' | 'semi-circle' | 'quarter-circle';
9
+ /** Where the actions go from the main button. A line takes the first word of a diagonal. */
10
+ export type SpeedDialDirection = 'up' | 'down' | 'start' | 'end' | 'up-start' | 'up-end' | 'down-start' | 'down-end';
11
+ /** A corner, an edge's middle or the centre of what it is placed in, or `inline` in the flow of the page. */
12
+ export type SpeedDialPosition = 'bottom-end' | 'bottom-start' | 'top-end' | 'top-start' | 'bottom' | 'top' | 'start' | 'end' | 'center' | 'inline';
13
+ /** What `position` is measured in: the viewport, or the nearest positioned parent. */
14
+ export type SpeedDialRelativeTo = 'viewport' | 'parent';
15
+ /** Props of `SpeedDial`. Each one is also a settable property; a function is followed. */
16
+ export interface SpeedDialProps extends ControlProps {
17
+ /** The actions, in the order they fan out. With one shown, the main button does it itself. */
18
+ actions?: Bind<readonly SpeedDialAction[]>;
19
+ /** The main button's glyph. Default `'plus'`. */
20
+ glyph?: Bind<string>;
21
+ /** The main button's glyph while the actions are open. Default `'dismiss'`. */
22
+ openGlyph?: Bind<string>;
23
+ /** What screen readers call the main button, and its text when `extended`. Default: the kit's "Actions". */
24
+ text?: Bind<string>;
25
+ /** The main button shows its `text` beside the glyph. Default `false`. */
26
+ extended?: Bind<boolean>;
27
+ /** Default `'linear'`. */
28
+ layout?: Bind<SpeedDialLayout>;
29
+ /** Pixels from the main button's centre to the actions' centres, around it. Default: just enough to keep them apart. */
30
+ radius?: Bind<number | null>;
31
+ /** Default: away from the edges `position` names; `'up'` in the centre and inline. */
32
+ direction?: Bind<SpeedDialDirection>;
33
+ /** Default `'bottom-end'`. */
34
+ position?: Bind<SpeedDialPosition>;
35
+ /** Default `'viewport'`. */
36
+ relativeTo?: Bind<SpeedDialRelativeTo>;
37
+ /** The actions are open. `x-model` binds it two-way. Default `false`. */
38
+ open?: Bind<boolean>;
39
+ /** A press on an action closes the fan. Default `true`. */
40
+ closeOnAction?: Bind<boolean>;
41
+ /** The actions' labels are shown beside them while open. Default: in a line yes, around the button no. */
42
+ showLabels?: Bind<boolean>;
43
+ /** Tooltips on the actions, with their text unless an action says otherwise; options go to each `Tooltip`. Default: while the labels are off. */
44
+ tooltip?: Bind<boolean | SpeedDialTooltip>;
45
+ onOpened?: (e: SpeedDialEventArgs) => void;
46
+ onClosed?: (e: SpeedDialEventArgs) => void;
47
+ /** An action was pressed. */
48
+ onActionClick?: (e: SpeedDialActionClickEventArgs) => void;
49
+ }
@@ -0,0 +1,3 @@
1
+ import type { TooltipProps } from '../tooltip/tooltip-props';
2
+ /** Options of an action's tooltip: what a `Tooltip` takes, but its target. */
3
+ export type SpeedDialTooltip = Omit<TooltipProps, 'target'>;
@@ -0,0 +1,45 @@
1
+ import { type Bind, type IBaseProp } from "@motifx/core";
2
+ import { Panel } from "../layout/Panel";
3
+ import type { SplitPaneProps } from "./split-pane-props";
4
+ import type { Splitter } from "./Splitter";
5
+ /**
6
+ * One pane of a `Splitter`: a `Panel` with its place in the split: `size` (pixels, a share, or an equal share of
7
+ * what is left), `minSize`, `maxSize`, whether the handles next to it may hide it (`collapsible`) or change its
8
+ * size (`resizable`).
9
+ *
10
+ * @example
11
+ * <Splitter>
12
+ * <SplitPane size={240} minSize={160} collapsible><FolderTree /></SplitPane>
13
+ * <SplitPane><MessageList /></SplitPane>
14
+ * <SplitPane size="30%" scrollable="vertical"><Preview /></SplitPane>
15
+ * </Splitter>
16
+ */
17
+ export declare class SplitPane extends Panel {
18
+ owner: Splitter | null;
19
+ constructor(props?: IBaseProp<SplitPaneProps>);
20
+ /** The `key` prop (also when written as the JSX `key`), `''` without one. */
21
+ get key(): string;
22
+ set key(value: Bind<string>);
23
+ get size(): number | string | null;
24
+ set size(value: Bind<number | string | null>);
25
+ get minSize(): number;
26
+ set minSize(value: Bind<number>);
27
+ get maxSize(): number | null;
28
+ set maxSize(value: Bind<number | null>);
29
+ /** This pane's own setting; `undefined` follows the splitter. */
30
+ get collapsible(): boolean | undefined;
31
+ set collapsible(value: Bind<boolean | undefined>);
32
+ get collapsed(): boolean;
33
+ set collapsed(value: Bind<boolean>);
34
+ get resizable(): boolean;
35
+ set resizable(value: Bind<boolean>);
36
+ /** Whether the handles next to it may hide it: its own `collapsible`, else the splitter's. */
37
+ get isCollapsible(): boolean;
38
+ /** Hides the pane as the handle's button does; `false` when it may not be hidden or `onCollapsing` refused. */
39
+ collapse(): boolean;
40
+ /** Shows the pane again. */
41
+ expand(): boolean;
42
+ /** @internal The user hid or showed the pane: the change is the pane's own, not its binding's. */
43
+ setCollapsed(on: boolean): void;
44
+ protected applyProperty(name: string, value: unknown): void;
45
+ }
@@ -0,0 +1,116 @@
1
+ import { Component, Emitter, type Bind, type Event as MotifEvent, type IBaseProp } from "@motifx/core";
2
+ import { Control } from "../../core/control";
3
+ import type { LayoutOrientation } from "../layout/layout-orientation";
4
+ import { SplitPane } from "./SplitPane";
5
+ import type { SplitterCollapseEventArgs } from "./splitter-collapse-event-args";
6
+ import type { SplitterProps } from "./splitter-props";
7
+ import type { SplitterResizeEventArgs } from "./splitter-resize-event-args";
8
+ interface Lay {
9
+ px: number | null;
10
+ fr: number;
11
+ }
12
+ interface Handle {
13
+ cell: Component<HTMLDivElement>;
14
+ bar: Component<HTMLDivElement>;
15
+ before: Component<HTMLButtonElement>;
16
+ after: Component<HTMLButtonElement>;
17
+ beforeGlyph: Component<HTMLSpanElement>;
18
+ afterGlyph: Component<HTMLSpanElement>;
19
+ }
20
+ interface Drag {
21
+ pointer: number;
22
+ handle: number;
23
+ from: number;
24
+ a: number;
25
+ b: number;
26
+ }
27
+ /**
28
+ * Panes side by side or one under the other, as many as needed, with a handle between each two that the pointer
29
+ * drags and the keys move (the window splitter pattern); a handle resizes the two panes next to it, the rest keep
30
+ * their room. A pane is a `SplitPane`: pixels, a share or an equal share of what is left, least and most sizes, and
31
+ * it may be hidden from its handle (`collapsible`). A pane may hold another splitter.
32
+ *
33
+ * @example
34
+ * <Splitter x-model={() => this.layout.sizes}>
35
+ * <SplitPane size={240} minSize={160} collapsible><FolderTree /></SplitPane>
36
+ * <SplitPane minSize={320}><Editor /></SplitPane>
37
+ * <SplitPane size="30%"><Preview /></SplitPane>
38
+ * </Splitter>
39
+ */
40
+ export declare class Splitter extends Control<HTMLDivElement, SplitterProps> {
41
+ resizing: Emitter<SplitterResizeEventArgs>;
42
+ resized: Emitter<SplitterResizeEventArgs>;
43
+ collapsing: Emitter<SplitterCollapseEventArgs>;
44
+ collapsedEvent: Emitter<SplitterCollapseEventArgs>;
45
+ panes: SplitPane[];
46
+ handles: Handle[];
47
+ lay: Map<SplitPane, Lay>;
48
+ drag: Drag | null;
49
+ ready: boolean;
50
+ constructor(props?: IBaseProp<SplitterProps>);
51
+ get orientation(): LayoutOrientation;
52
+ set orientation(value: Bind<LayoutOrientation>);
53
+ get resizable(): boolean;
54
+ set resizable(value: Bind<boolean>);
55
+ get collapsible(): boolean;
56
+ set collapsible(value: Bind<boolean>);
57
+ get step(): number;
58
+ set step(value: Bind<number>);
59
+ /** The sizes given; see `sizes` in the props. The pixels now are `currentSizes`. */
60
+ get sizes(): readonly (number | string | null)[] | null;
61
+ set sizes(value: Bind<readonly (number | string | null)[] | null>);
62
+ /** `sizes`, for `x-model`. */
63
+ get value(): readonly (number | string | null)[] | null;
64
+ set value(value: readonly (number | string | null)[] | null);
65
+ /** A handle is being dragged (`handle`, `sizes` in pixels). */
66
+ get onResizing(): MotifEvent<SplitterResizeEventArgs>;
67
+ /** A drag ended or a key moved a handle. */
68
+ get onResized(): MotifEvent<SplitterResizeEventArgs>;
69
+ /** A pane is about to be hidden or shown again (`pane`, `collapsed`); `cancel` leaves it. */
70
+ get onCollapsing(): MotifEvent<SplitterCollapseEventArgs>;
71
+ /** A pane was hidden or shown again. */
72
+ get onCollapsed(): MotifEvent<SplitterCollapseEventArgs>;
73
+ /** The panes' pixels along the split now, in pane order; 0 for a hidden pane. */
74
+ get currentSizes(): number[];
75
+ /** How many panes there are, hidden ones too. */
76
+ get count(): number;
77
+ /** Adds a pane at the end. */
78
+ add(pane: SplitPane): SplitPane;
79
+ /** Adds a pane at `index`. */
80
+ insert(index: number, pane: SplitPane): SplitPane;
81
+ /** Removes a pane and disposes it. */
82
+ remove(pane: SplitPane): boolean;
83
+ /** Hides a pane, the neighbours taking its room; `false` when it is not here, hidden already, or `onCollapsing` refused. */
84
+ collapse(pane: SplitPane | number): boolean;
85
+ /** Shows a hidden pane again. */
86
+ expand(pane: SplitPane | number): boolean;
87
+ onBuilt(): void;
88
+ onDisposing(): void;
89
+ /** @internal A pane's limits, collapsed state, visibility or `resizable` changed. */
90
+ paneChanged(): void;
91
+ /** @internal A pane's own `size` changed: the layout starts from the sizes again. */
92
+ sizeChanged(): void;
93
+ /** @internal A pane was disposed on its own. */
94
+ paneGone(pane: SplitPane): void;
95
+ place(pane: SplitPane, index: number): void;
96
+ forget(pane: SplitPane): void;
97
+ shownPanes(): SplitPane[];
98
+ get horizontal(): boolean;
99
+ readSizes(): void;
100
+ tracks(panes: SplitPane[]): string;
101
+ relayout(): void;
102
+ makeHandle(): Handle;
103
+ drawHandles(): void;
104
+ canResize(handle: number): boolean;
105
+ measure(panes: SplitPane[]): number[];
106
+ freeze(panes: SplitPane[]): void;
107
+ apply(handle: number, a: number, total: number): boolean;
108
+ tell(emitter: Emitter<SplitterResizeEventArgs>, handle: number, event?: Event): void;
109
+ fold(target: SplitPane | number, on: boolean, byUser: boolean, event?: Event): boolean;
110
+ foldFromHandle(handle: Handle, side: 'before' | 'after', event: Event): void;
111
+ keyDown(e: KeyboardEvent): void;
112
+ pointerDown(e: PointerEvent, handle: Handle): void;
113
+ pointerMove(e: PointerEvent): void;
114
+ pointerUp(e: PointerEvent): void;
115
+ }
116
+ export {};
@@ -0,0 +1,6 @@
1
+ export { Splitter } from './Splitter';
2
+ export { SplitPane } from './SplitPane';
3
+ export type { SplitterProps } from './splitter-props';
4
+ export type { SplitPaneProps } from './split-pane-props';
5
+ export type { SplitterResizeEventArgs } from './splitter-resize-event-args';
6
+ export type { SplitterCollapseEventArgs } from './splitter-collapse-event-args';
@@ -0,0 +1,21 @@
1
+ import type { Bind, ComponentBase } from '@motifx/core';
2
+ import type { PanelProps } from '../layout/panel-props';
3
+ /** Props of `SplitPane`, one pane of a `Splitter`: a `Panel` (padding, scrolling, a frame) with its place in the split. */
4
+ export interface SplitPaneProps extends PanelProps {
5
+ /** Names the pane; the JSX `key` is read too. */
6
+ key?: Bind<string>;
7
+ /** Pixels, a share (`'30%'`) of the room the shares divide, or `null` for an equal share of what is left. Default `null`. */
8
+ size?: Bind<number | string | null>;
9
+ /** The least it gets, in pixels. Default `0`. */
10
+ minSize?: Bind<number>;
11
+ /** The most it gets, in pixels; `null` for no limit. Default `null`. */
12
+ maxSize?: Bind<number | null>;
13
+ /** The handles next to it can hide it (a button on the handle, Enter on it). `undefined` follows the splitter. */
14
+ collapsible?: Bind<boolean | undefined>;
15
+ /** Hidden, the neighbours taking its room. Default `false`. */
16
+ collapsed?: Bind<boolean>;
17
+ /** The handles next to it can change its size. Default `true`. */
18
+ resizable?: Bind<boolean>;
19
+ /** Content made with the pane, besides the JSX children. */
20
+ content?: () => ComponentBase | readonly ComponentBase[];
21
+ }
@@ -0,0 +1,13 @@
1
+ import type { EventArgs } from '@motifx/core';
2
+ import type { SplitPane } from './SplitPane';
3
+ import type { Splitter } from './Splitter';
4
+ /** A pane is about to be hidden (`collapsed: true`) or shown again; `cancel = true` leaves it as it is. */
5
+ export interface SplitterCollapseEventArgs extends EventArgs {
6
+ pane: SplitPane;
7
+ index: number;
8
+ collapsed: boolean;
9
+ /** By a button on the handle or Enter on it, else programmatically. */
10
+ byUser: boolean;
11
+ source: Splitter;
12
+ event?: Event;
13
+ }