@liberation-data/desk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +4 -0
  3. package/README.md +436 -0
  4. package/dist/core/commands.d.ts +40 -0
  5. package/dist/core/commands.d.ts.map +1 -0
  6. package/dist/core/commands.js +92 -0
  7. package/dist/core/commands.js.map +1 -0
  8. package/dist/core/desk.d.ts +46 -0
  9. package/dist/core/desk.d.ts.map +1 -0
  10. package/dist/core/desk.js +178 -0
  11. package/dist/core/desk.js.map +1 -0
  12. package/dist/core/events.d.ts +42 -0
  13. package/dist/core/events.d.ts.map +1 -0
  14. package/dist/core/events.js +54 -0
  15. package/dist/core/events.js.map +1 -0
  16. package/dist/core/index.d.ts +13 -0
  17. package/dist/core/index.d.ts.map +1 -0
  18. package/dist/core/index.js +7 -0
  19. package/dist/core/index.js.map +1 -0
  20. package/dist/core/location.d.ts +30 -0
  21. package/dist/core/location.d.ts.map +1 -0
  22. package/dist/core/location.js +99 -0
  23. package/dist/core/location.js.map +1 -0
  24. package/dist/core/shortcuts.d.ts +36 -0
  25. package/dist/core/shortcuts.d.ts.map +1 -0
  26. package/dist/core/shortcuts.js +73 -0
  27. package/dist/core/shortcuts.js.map +1 -0
  28. package/dist/core/titles.d.ts +3 -0
  29. package/dist/core/titles.d.ts.map +1 -0
  30. package/dist/core/titles.js +26 -0
  31. package/dist/core/titles.js.map +1 -0
  32. package/dist/core/types.d.ts +51 -0
  33. package/dist/core/types.d.ts.map +1 -0
  34. package/dist/core/types.js +2 -0
  35. package/dist/core/types.js.map +1 -0
  36. package/dist/desk.css +2550 -0
  37. package/dist/react/Desktop.d.ts +24 -0
  38. package/dist/react/Desktop.d.ts.map +1 -0
  39. package/dist/react/Desktop.js +212 -0
  40. package/dist/react/Desktop.js.map +1 -0
  41. package/dist/react/Dock.d.ts +42 -0
  42. package/dist/react/Dock.d.ts.map +1 -0
  43. package/dist/react/Dock.js +103 -0
  44. package/dist/react/Dock.js.map +1 -0
  45. package/dist/react/MenuBar.d.ts +64 -0
  46. package/dist/react/MenuBar.d.ts.map +1 -0
  47. package/dist/react/MenuBar.js +245 -0
  48. package/dist/react/MenuBar.js.map +1 -0
  49. package/dist/react/appFrame.d.ts +37 -0
  50. package/dist/react/appFrame.d.ts.map +1 -0
  51. package/dist/react/appFrame.js +119 -0
  52. package/dist/react/appFrame.js.map +1 -0
  53. package/dist/react/arrange.d.ts +24 -0
  54. package/dist/react/arrange.d.ts.map +1 -0
  55. package/dist/react/arrange.js +61 -0
  56. package/dist/react/arrange.js.map +1 -0
  57. package/dist/react/commands.d.ts +23 -0
  58. package/dist/react/commands.d.ts.map +1 -0
  59. package/dist/react/commands.js +41 -0
  60. package/dist/react/commands.js.map +1 -0
  61. package/dist/react/context.d.ts +25 -0
  62. package/dist/react/context.d.ts.map +1 -0
  63. package/dist/react/context.js +28 -0
  64. package/dist/react/context.js.map +1 -0
  65. package/dist/react/controls.d.ts +111 -0
  66. package/dist/react/controls.d.ts.map +1 -0
  67. package/dist/react/controls.js +83 -0
  68. package/dist/react/controls.js.map +1 -0
  69. package/dist/react/conversation.d.ts +41 -0
  70. package/dist/react/conversation.d.ts.map +1 -0
  71. package/dist/react/conversation.js +73 -0
  72. package/dist/react/conversation.js.map +1 -0
  73. package/dist/react/dnd.d.ts +51 -0
  74. package/dist/react/dnd.d.ts.map +1 -0
  75. package/dist/react/dnd.js +138 -0
  76. package/dist/react/dnd.js.map +1 -0
  77. package/dist/react/dragContext.d.ts +32 -0
  78. package/dist/react/dragContext.d.ts.map +1 -0
  79. package/dist/react/dragContext.js +14 -0
  80. package/dist/react/dragContext.js.map +1 -0
  81. package/dist/react/events.d.ts +41 -0
  82. package/dist/react/events.d.ts.map +1 -0
  83. package/dist/react/events.js +91 -0
  84. package/dist/react/events.js.map +1 -0
  85. package/dist/react/index.d.ts +43 -0
  86. package/dist/react/index.d.ts.map +1 -0
  87. package/dist/react/index.js +22 -0
  88. package/dist/react/index.js.map +1 -0
  89. package/dist/react/layers.d.ts +5 -0
  90. package/dist/react/layers.d.ts.map +1 -0
  91. package/dist/react/layers.js +65 -0
  92. package/dist/react/layers.js.map +1 -0
  93. package/dist/react/overlays.d.ts +67 -0
  94. package/dist/react/overlays.d.ts.map +1 -0
  95. package/dist/react/overlays.js +98 -0
  96. package/dist/react/overlays.js.map +1 -0
  97. package/dist/react/popup.d.ts +21 -0
  98. package/dist/react/popup.d.ts.map +1 -0
  99. package/dist/react/popup.js +94 -0
  100. package/dist/react/popup.js.map +1 -0
  101. package/dist/react/search.d.ts +33 -0
  102. package/dist/react/search.d.ts.map +1 -0
  103. package/dist/react/search.js +82 -0
  104. package/dist/react/search.js.map +1 -0
  105. package/dist/react/setupProgress.d.ts +35 -0
  106. package/dist/react/setupProgress.d.ts.map +1 -0
  107. package/dist/react/setupProgress.js +68 -0
  108. package/dist/react/setupProgress.js.map +1 -0
  109. package/dist/react/shell.d.ts +17 -0
  110. package/dist/react/shell.d.ts.map +1 -0
  111. package/dist/react/shell.js +13 -0
  112. package/dist/react/shell.js.map +1 -0
  113. package/dist/react/sidebar.d.ts +23 -0
  114. package/dist/react/sidebar.d.ts.map +1 -0
  115. package/dist/react/sidebar.js +26 -0
  116. package/dist/react/sidebar.js.map +1 -0
  117. package/dist/react/table.d.ts +39 -0
  118. package/dist/react/table.d.ts.map +1 -0
  119. package/dist/react/table.js +86 -0
  120. package/dist/react/table.js.map +1 -0
  121. package/dist/react/tasks.d.ts +41 -0
  122. package/dist/react/tasks.d.ts.map +1 -0
  123. package/dist/react/tasks.js +79 -0
  124. package/dist/react/tasks.js.map +1 -0
  125. package/dist/react/tour.d.ts +42 -0
  126. package/dist/react/tour.d.ts.map +1 -0
  127. package/dist/react/tour.js +68 -0
  128. package/dist/react/tour.js.map +1 -0
  129. package/dist/react/windowBoundary.d.ts +22 -0
  130. package/dist/react/windowBoundary.d.ts.map +1 -0
  131. package/dist/react/windowBoundary.js +50 -0
  132. package/dist/react/windowBoundary.js.map +1 -0
  133. package/dist/react/wizard.d.ts +41 -0
  134. package/dist/react/wizard.d.ts.map +1 -0
  135. package/dist/react/wizard.js +60 -0
  136. package/dist/react/wizard.js.map +1 -0
  137. package/llms.txt +410 -0
  138. package/package.json +64 -0
  139. package/src/core/commands.ts +142 -0
  140. package/src/core/desk.ts +229 -0
  141. package/src/core/events.ts +99 -0
  142. package/src/core/index.ts +43 -0
  143. package/src/core/location.ts +127 -0
  144. package/src/core/shortcuts.ts +119 -0
  145. package/src/core/titles.ts +28 -0
  146. package/src/core/types.ts +49 -0
  147. package/src/desk.css +2550 -0
  148. package/src/react/Desktop.tsx +349 -0
  149. package/src/react/Dock.tsx +258 -0
  150. package/src/react/MenuBar.tsx +350 -0
  151. package/src/react/appFrame.tsx +183 -0
  152. package/src/react/arrange.ts +82 -0
  153. package/src/react/commands.ts +60 -0
  154. package/src/react/context.tsx +55 -0
  155. package/src/react/controls.tsx +364 -0
  156. package/src/react/conversation.tsx +208 -0
  157. package/src/react/dnd.tsx +189 -0
  158. package/src/react/dragContext.tsx +60 -0
  159. package/src/react/events.tsx +149 -0
  160. package/src/react/index.ts +64 -0
  161. package/src/react/layers.ts +66 -0
  162. package/src/react/overlays.tsx +254 -0
  163. package/src/react/popup.tsx +176 -0
  164. package/src/react/search.tsx +177 -0
  165. package/src/react/setupProgress.ts +113 -0
  166. package/src/react/shell.tsx +27 -0
  167. package/src/react/sidebar.tsx +84 -0
  168. package/src/react/table.tsx +176 -0
  169. package/src/react/tasks.tsx +176 -0
  170. package/src/react/tour.tsx +183 -0
  171. package/src/react/windowBoundary.tsx +110 -0
  172. package/src/react/wizard.tsx +150 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dnd.js","sourceRoot":"","sources":["../../src/react/dnd.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface Drag<T = unknown> {
3
+ readonly type: string;
4
+ readonly payload: T;
5
+ /** The window it was picked up in, when it was picked up in one. */
6
+ readonly from: string | null;
7
+ }
8
+ export type Accepts = string | readonly string[] | ((type: string) => boolean);
9
+ export declare const accepted: (accepts: Accepts, type: string) => boolean;
10
+ export interface Target {
11
+ readonly accepts: Accepts;
12
+ readonly onDrop: (drag: Drag) => void;
13
+ }
14
+ export interface DragState {
15
+ readonly drag: Drag;
16
+ readonly x: number;
17
+ readonly y: number;
18
+ readonly over: string | null;
19
+ readonly preview: ReactNode;
20
+ }
21
+ export interface DragContextValue {
22
+ readonly state: DragState | null;
23
+ readonly targets: Map<string, Target>;
24
+ readonly setState: (state: DragState | null) => void;
25
+ }
26
+ export declare const DragContext: import("react").Context<DragContextValue | null>;
27
+ export declare const TARGET_ATTRIBUTE = "data-desk-drop";
28
+ /** Holds what is being carried. A desk provides one; this is for sharing or nesting. */
29
+ export declare function DragProvider({ children }: {
30
+ readonly children: ReactNode;
31
+ }): import("react").JSX.Element;
32
+ //# sourceMappingURL=dragContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dragContext.d.ts","sourceRoot":"","sources":["../../src/react/dragContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,OAAO;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAA;AAE9E,eAAO,MAAM,QAAQ,YAAa,OAAO,QAAQ,MAAM,YACkE,CAAA;AAEzH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAA;CACrD;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAA;AAEvE,eAAO,MAAM,gBAAgB,mBAAmB,CAAA;AAEhD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAc1E"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useMemo, useState } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ export const accepted = (accepts, type) => typeof accepts === 'function' ? accepts(type) : typeof accepts === 'string' ? accepts === type : accepts.includes(type);
5
+ export const DragContext = createContext(null);
6
+ export const TARGET_ATTRIBUTE = 'data-desk-drop';
7
+ /** Holds what is being carried. A desk provides one; this is for sharing or nesting. */
8
+ export function DragProvider({ children }) {
9
+ const [state, setState] = useState(null);
10
+ const [targets] = useState(() => new Map());
11
+ const value = useMemo(() => ({ state, targets, setState }), [state, targets]);
12
+ return (_jsxs(DragContext.Provider, { value: value, children: [children, state && (_jsx("div", { className: "desk-drag-preview", style: { left: state.x, top: state.y }, "aria-hidden": "true", children: state.preview }))] }));
13
+ }
14
+ //# sourceMappingURL=dragContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dragContext.js","sourceRoot":"","sources":["../../src/react/dragContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAgBxC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAE,EAAE,CACzD,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAqBzH,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAA;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAA;AAEhD,wFAAwF;AACxF,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAoC;IACzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAA;IAC1D,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAkB,CAAC,CAAA;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IAC7E,OAAO,CACL,MAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,aAC/B,QAAQ,EACR,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,iBAAc,MAAM,YAC1F,KAAK,CAAC,OAAO,GACV,CACP,IACoB,CACxB,CAAA;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Bus, DeskEvent, EventHandler, SubscribeOptions } from '../core/events.js';
3
+ /** Supplies a bus of your own, or shares one across several desks. A desk already has one. */
4
+ export declare function BusProvider({ bus, children }: {
5
+ readonly bus?: Bus;
6
+ readonly children: ReactNode;
7
+ }): import("react").JSX.Element;
8
+ export declare function useBus(): Bus;
9
+ /** Publishes an event, stamped with the window it came from. */
10
+ export declare function usePublish(): <T>(topic: string, payload: T) => DeskEvent<T>;
11
+ /** Answers events on a topic (`ride.selected`, `ride.*`, `*`) while mounted. */
12
+ export declare function useDeskEvent<T = unknown>(topic: string, handler: EventHandler<T>, options?: SubscribeOptions): void;
13
+ export interface WindowInputOptions {
14
+ readonly placeholder?: string;
15
+ /** What the bar says the text will reach. Defaults to the window's id. */
16
+ readonly target?: string;
17
+ readonly disabled?: boolean;
18
+ }
19
+ /**
20
+ * Takes the text typed into the desk's input bar while this window is key.
21
+ * A window that registers nothing lets the bar's own fallback have it.
22
+ */
23
+ export declare function useWindowInput(handler: (text: string) => void, options?: WindowInputOptions): void;
24
+ export interface InputBarProps {
25
+ /** Used when no window takes the text. */
26
+ readonly onSubmit: (text: string) => void;
27
+ readonly fallbackPlaceholder?: string;
28
+ readonly fallbackTarget?: string;
29
+ readonly label?: string;
30
+ /**
31
+ * `summoned` (the default) stays out of the way until called for, then opens
32
+ * over the middle of the screen. `inline` is always there, wherever you put it.
33
+ */
34
+ readonly mode?: 'summoned' | 'inline';
35
+ /** Summons the bar. Default `mod+j`; `null` binds nothing (a menu item may own the key). */
36
+ readonly shortcut?: string | null;
37
+ readonly className?: string;
38
+ }
39
+ /** One place to type, which reaches whichever window you are working in. */
40
+ export declare function InputBar({ onSubmit, fallbackPlaceholder, fallbackTarget, label, mode, shortcut, className, }: InputBarProps): import("react").JSX.Element | null;
41
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/react/events.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAoB,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOzG,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAGlG;AAED,wBAAgB,MAAM,IAAI,GAAG,CAI5B;AAED,gEAAgE;AAChE,wBAAgB,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAI3E;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAMvH;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI,CAWtG;AAED,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IACrC,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,mBAAkC,EAClC,cAAc,EACd,KAAmB,EACnB,IAAiB,EACjB,QAAkB,EAClB,SAAS,GACV,EAAE,aAAa,sCA2Df"}
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { perform } from '../core/commands.js';
5
+ import { createBus, InputCommands } from '../core/events.js';
6
+ import { useCommand, useShortcuts } from './commands.js';
7
+ import { Composer } from './conversation.js';
8
+ import { useFocusTrap, useLayer } from './layers.js';
9
+ import { BusContext, useDesk, useDeskState, useWindowId } from './context.js';
10
+ /** Supplies a bus of your own, or shares one across several desks. A desk already has one. */
11
+ export function BusProvider({ bus, children }) {
12
+ const [value] = useState(() => bus ?? createBus());
13
+ return _jsx(BusContext.Provider, { value: value, children: children });
14
+ }
15
+ export function useBus() {
16
+ const bus = useContext(BusContext);
17
+ if (!bus)
18
+ throw new Error('useBus must be used inside a <DeskProvider> or <BusProvider>');
19
+ return bus;
20
+ }
21
+ /** Publishes an event, stamped with the window it came from. */
22
+ export function usePublish() {
23
+ const bus = useBus();
24
+ const from = useWindowId();
25
+ return useCallback((topic, payload) => bus.publish(topic, payload, { from }), [bus, from]);
26
+ }
27
+ /** Answers events on a topic (`ride.selected`, `ride.*`, `*`) while mounted. */
28
+ export function useDeskEvent(topic, handler, options = {}) {
29
+ const bus = useBus();
30
+ const latest = useRef(handler);
31
+ latest.current = handler;
32
+ const { replay } = options;
33
+ useEffect(() => bus.subscribe(topic, event => latest.current(event), { replay: replay ?? false }), [bus, topic, replay]);
34
+ }
35
+ /**
36
+ * Takes the text typed into the desk's input bar while this window is key.
37
+ * A window that registers nothing lets the bar's own fallback have it.
38
+ */
39
+ export function useWindowInput(handler, options = {}) {
40
+ const windowId = useWindowId();
41
+ const { placeholder, target, disabled } = options;
42
+ useCommand(InputCommands.submit, handler, { enabled: !disabled });
43
+ // The bar asks the chain how to present itself; the answer is written into the object it sends.
44
+ useCommand(InputCommands.describe, description => {
45
+ if (placeholder)
46
+ description.placeholder = placeholder;
47
+ const named = target ?? windowId;
48
+ if (named)
49
+ description.target = named;
50
+ description.disabled = disabled ?? false;
51
+ });
52
+ }
53
+ /** One place to type, which reaches whichever window you are working in. */
54
+ export function InputBar({ onSubmit, fallbackPlaceholder = 'Type here…', fallbackTarget, label = 'Type here', mode = 'summoned', shortcut = 'mod+j', className, }) {
55
+ const desk = useDesk();
56
+ const state = useDeskState();
57
+ const [value, setValue] = useState('');
58
+ const [open, setOpen] = useState(mode === 'inline');
59
+ const [description, setDescription] = useState({});
60
+ const panel = useRef(null);
61
+ const id = useId();
62
+ const summoned = mode === 'summoned';
63
+ useCommand(InputCommands.open, () => setOpen(true), { at: 'app' });
64
+ useShortcuts(useMemo(() => (shortcut && summoned ? { [shortcut]: InputCommands.open } : {}), [shortcut, summoned]));
65
+ useLayer(id, summoned && open, () => setOpen(false));
66
+ useFocusTrap(panel, summoned && open);
67
+ // Re-ask whenever the key window changes, or the bar is summoned: it belongs to whoever is in front.
68
+ const key = state.stack.at(-1) ?? null;
69
+ useEffect(() => {
70
+ if (!open)
71
+ return;
72
+ const answer = {};
73
+ perform(desk, InputCommands.describe, answer);
74
+ setDescription(answer);
75
+ }, [desk, key, open, id]);
76
+ if (!open)
77
+ return null;
78
+ const submit = (text) => {
79
+ if (!perform(desk, InputCommands.submit, text))
80
+ onSubmit(text);
81
+ setValue('');
82
+ if (summoned)
83
+ setOpen(false);
84
+ };
85
+ const target = description.target ?? fallbackTarget;
86
+ const bar = (_jsxs("div", { ref: panel, className: ['desk-inputbar', className].filter(Boolean).join(' '), "data-mode": mode, children: [_jsx(Composer, { value: value, onChange: setValue, onSubmit: submit, label: label, placeholder: description.placeholder ?? fallbackPlaceholder, maxRows: 4, ...(description.disabled ? { disabled: true } : {}) }), target && (_jsxs("span", { className: "desk-inputbar-target", "aria-live": "polite", children: ["goes to ", _jsx("b", { children: target })] }))] }));
87
+ if (!summoned)
88
+ return bar;
89
+ return createPortal(_jsx("div", { className: "desk-inputbar-scrim", onPointerDown: event => event.target === event.currentTarget && setOpen(false), children: bar }), document.body);
90
+ }
91
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/react/events.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export { APP_BRIDGE_SCRIPT, AppFrame, withAppBridge } from './appFrame.js';
2
+ export type { AppFrameProps } from './appFrame.js';
3
+ export { DragProvider, useDraggable, useDragging, useDragSource, useDropTarget } from './dnd.js';
4
+ export type { Accepts, Drag, DraggableOptions, DraggableResult, DragSource, DragSourceOptions, DropTargetOptions, DropTargetResult, } from './dnd.js';
5
+ export { DeskShell } from './shell.js';
6
+ export type { DeskShellProps } from './shell.js';
7
+ export { DeskProvider, useDesk, useDeskState, useWindowId } from './context.js';
8
+ export type { DeskProviderProps } from './context.js';
9
+ export { useCanPerform, useCommand, usePerform, useShortcuts } from './commands.js';
10
+ export type { UseCommandOptions } from './commands.js';
11
+ export { Desktop } from './Desktop.js';
12
+ export type { DeskLayout, DesktopProps } from './Desktop.js';
13
+ export { lazyWindow } from './windowBoundary.js';
14
+ export type { WindowFailed, WindowLoading } from './windowBoundary.js';
15
+ export { Button, Checkbox, ChoiceGroup, RadioGroup, SegmentedControl, Slider, TextField, Toggle } from './controls.js';
16
+ export type { ButtonIntent, ButtonProps, CheckboxProps, ChoiceGroupProps, ChoiceOption, RadioGroupProps, RadioOption, SegmentedControlProps, SegmentedOption, SliderProps, TextFieldProps, ToggleProps, } from './controls.js';
17
+ export { Checklist, useTasks } from './tasks.js';
18
+ export { localSetupStore, useSetupProgress } from './setupProgress.js';
19
+ export type { SetupProgress, SetupProgressOptions, SetupRecord, SetupStore } from './setupProgress.js';
20
+ export type { ChecklistProps, Task, TaskProgress, Tasks, TaskState } from './tasks.js';
21
+ export { PopUpButton } from './popup.js';
22
+ export type { PopUpButtonProps, PopUpOption } from './popup.js';
23
+ export { Table } from './table.js';
24
+ export type { Column, Sort, TableProps } from './table.js';
25
+ export { Sidebar } from './sidebar.js';
26
+ export type { SidebarItem, SidebarProps, SidebarSection } from './sidebar.js';
27
+ export { Wizard } from './wizard.js';
28
+ export type { WizardProps, WizardStep } from './wizard.js';
29
+ export { TourBar } from './tour.js';
30
+ export type { Tour, TourBarProps, TourStep } from './tour.js';
31
+ export { SearchCommand, SearchPalette, windowResults } from './search.js';
32
+ export type { SearchPaletteProps, SearchResult } from './search.js';
33
+ export { BusProvider, InputBar, useBus, useDeskEvent, usePublish, useWindowInput } from './events.js';
34
+ export type { InputBarProps, WindowInputOptions } from './events.js';
35
+ export { Composer, Thread } from './conversation.js';
36
+ export type { ComposerProps, Message, ThreadProps } from './conversation.js';
37
+ export { Alert, Popover, Sheet, ToastProvider, useToast } from './overlays.js';
38
+ export type { AlertProps, PopoverProps, PopoverTriggerProps, SheetProps, Toast, ToastInput } from './overlays.js';
39
+ export { MenuBar, menuAction, menuCommand, menuHeader, menuSeparator, windowMenuItems } from './MenuBar.js';
40
+ export type { Menu, MenuBarProps, MenuItem } from './MenuBar.js';
41
+ export { Dock, dockItem, dockSeparator, dockStack } from './Dock.js';
42
+ export type { DockEntry, DockItem, DockProps, DockStack } from './Dock.js';
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export { APP_BRIDGE_SCRIPT, AppFrame, withAppBridge } from './appFrame.js';
2
+ export { DragProvider, useDraggable, useDragging, useDragSource, useDropTarget } from './dnd.js';
3
+ export { DeskShell } from './shell.js';
4
+ export { DeskProvider, useDesk, useDeskState, useWindowId } from './context.js';
5
+ export { useCanPerform, useCommand, usePerform, useShortcuts } from './commands.js';
6
+ export { Desktop } from './Desktop.js';
7
+ export { lazyWindow } from './windowBoundary.js';
8
+ export { Button, Checkbox, ChoiceGroup, RadioGroup, SegmentedControl, Slider, TextField, Toggle } from './controls.js';
9
+ export { Checklist, useTasks } from './tasks.js';
10
+ export { localSetupStore, useSetupProgress } from './setupProgress.js';
11
+ export { PopUpButton } from './popup.js';
12
+ export { Table } from './table.js';
13
+ export { Sidebar } from './sidebar.js';
14
+ export { Wizard } from './wizard.js';
15
+ export { TourBar } from './tour.js';
16
+ export { SearchCommand, SearchPalette, windowResults } from './search.js';
17
+ export { BusProvider, InputBar, useBus, useDeskEvent, usePublish, useWindowInput } from './events.js';
18
+ export { Composer, Thread } from './conversation.js';
19
+ export { Alert, Popover, Sheet, ToastProvider, useToast } from './overlays.js';
20
+ export { MenuBar, menuAction, menuCommand, menuHeader, menuSeparator, windowMenuItems } from './MenuBar.js';
21
+ export { Dock, dockItem, dockSeparator, dockStack } from './Dock.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAWhG,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAetH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEzE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAErG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE9E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE3G,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { RefObject } from 'react';
2
+ export declare function useLayer(id: string, open: boolean, onEscape: () => void): void;
3
+ /** Holds keyboard focus inside `panel` while open, and gives it back on close. */
4
+ export declare function useFocusTrap(panel: RefObject<HTMLElement | null>, open: boolean): void;
5
+ //# sourceMappingURL=layers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../src/react/layers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAUtC,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,QAiBvE;AAOD,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,QA4B/E"}
@@ -0,0 +1,65 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /*
3
+ * What every overlay needs: a shared stack so Escape dismisses the topmost one
4
+ * rather than all of them, and a focus trap that gives focus back on the way out.
5
+ */
6
+ const layers = [];
7
+ const isTopLayer = (id) => layers.at(-1) === id;
8
+ export function useLayer(id, open, onEscape) {
9
+ useEffect(() => {
10
+ if (!open)
11
+ return;
12
+ layers.push(id);
13
+ const onKeyDown = (event) => {
14
+ if (event.key !== 'Escape' || !isTopLayer(id))
15
+ return;
16
+ event.preventDefault();
17
+ event.stopPropagation();
18
+ onEscape();
19
+ };
20
+ document.addEventListener('keydown', onKeyDown, true);
21
+ return () => {
22
+ const at = layers.lastIndexOf(id);
23
+ if (at >= 0)
24
+ layers.splice(at, 1);
25
+ document.removeEventListener('keydown', onKeyDown, true);
26
+ };
27
+ });
28
+ }
29
+ const TABBABLE = 'a[href], button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])';
30
+ const tabbable = (root) => [...root.querySelectorAll(TABBABLE)].filter(el => !el.closest('[inert]'));
31
+ /** Holds keyboard focus inside `panel` while open, and gives it back on close. */
32
+ export function useFocusTrap(panel, open) {
33
+ const returnTo = useRef(null);
34
+ useEffect(() => {
35
+ if (!open)
36
+ return;
37
+ returnTo.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
38
+ const first = panel.current && (tabbable(panel.current)[0] ?? panel.current);
39
+ first?.focus({ preventScroll: true });
40
+ const onKeyDown = (event) => {
41
+ if (event.key !== 'Tab' || !panel.current)
42
+ return;
43
+ const stops = tabbable(panel.current);
44
+ if (!stops.length)
45
+ return;
46
+ const [first, last] = [stops[0], stops.at(-1)];
47
+ const active = document.activeElement;
48
+ if (event.shiftKey && (active === first || !panel.current.contains(active))) {
49
+ event.preventDefault();
50
+ last.focus();
51
+ }
52
+ else if (!event.shiftKey && active === last) {
53
+ event.preventDefault();
54
+ first.focus();
55
+ }
56
+ };
57
+ document.addEventListener('keydown', onKeyDown, true);
58
+ return () => {
59
+ document.removeEventListener('keydown', onKeyDown, true);
60
+ if (returnTo.current?.isConnected)
61
+ returnTo.current.focus({ preventScroll: true });
62
+ };
63
+ }, [open, panel]);
64
+ }
65
+ //# sourceMappingURL=layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.js","sourceRoot":"","sources":["../../src/react/layers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { ReactElement, ReactNode, RefObject } from 'react';
2
+ export interface PopoverTriggerProps {
3
+ readonly ref: RefObject<HTMLButtonElement | null>;
4
+ readonly 'aria-haspopup': 'dialog';
5
+ readonly 'aria-expanded': boolean;
6
+ readonly onClick: () => void;
7
+ }
8
+ export interface PopoverProps {
9
+ readonly open: boolean;
10
+ readonly onOpenChange: (open: boolean) => void;
11
+ /** The accessible name of the popover. */
12
+ readonly label: string;
13
+ /** Renders the control the popover hangs from; spread the props it is given. */
14
+ readonly trigger: (props: PopoverTriggerProps) => ReactElement;
15
+ readonly placement?: 'below' | 'above';
16
+ readonly align?: 'start' | 'end';
17
+ readonly children: ReactNode;
18
+ }
19
+ export declare function Popover({ open, onOpenChange, label, trigger, placement, align, children }: PopoverProps): import("react").JSX.Element;
20
+ export interface SheetProps {
21
+ readonly open: boolean;
22
+ readonly onDismiss: () => void;
23
+ readonly title: string;
24
+ readonly description?: ReactNode;
25
+ /** Buttons, trailing-aligned. Cancel before the default button. */
26
+ readonly actions?: ReactNode;
27
+ readonly children?: ReactNode;
28
+ }
29
+ export declare function Sheet({ open, onDismiss, title, description, actions, children }: SheetProps): import("react").ReactPortal | null;
30
+ export interface AlertProps {
31
+ readonly open: boolean;
32
+ readonly title: string;
33
+ readonly message?: ReactNode;
34
+ /** The action the alert is asking about. */
35
+ readonly confirmLabel: string;
36
+ readonly onConfirm: () => void;
37
+ readonly onCancel: () => void;
38
+ readonly cancelLabel?: string;
39
+ /** Use for anything that cannot be undone. */
40
+ readonly destructive?: boolean;
41
+ }
42
+ export declare function Alert({ open, title, message, confirmLabel, onConfirm, onCancel, cancelLabel, destructive }: AlertProps): import("react").ReactPortal | null;
43
+ export interface Toast {
44
+ readonly id: string;
45
+ readonly message: ReactNode;
46
+ readonly tone?: 'neutral' | 'ok' | 'bad';
47
+ /** Usually Undo. Dismisses the toast when chosen. */
48
+ readonly action?: {
49
+ readonly label: string;
50
+ readonly onSelect: () => void;
51
+ };
52
+ /** Milliseconds. 0 keeps it until dismissed. Default 6000. */
53
+ readonly duration?: number;
54
+ }
55
+ export type ToastInput = Omit<Toast, 'id'> & {
56
+ readonly id?: string;
57
+ };
58
+ interface ToastApi {
59
+ show: (toast: ToastInput) => string;
60
+ dismiss: (id: string) => void;
61
+ }
62
+ export declare function ToastProvider({ children }: {
63
+ readonly children: ReactNode;
64
+ }): import("react").JSX.Element;
65
+ export declare function useToast(): ToastApi;
66
+ export {};
67
+ //# sourceMappingURL=overlays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/react/overlays.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { windowElement } from '../core/commands.js';
5
+ import { Button } from './controls.js';
6
+ import { useWindowId } from './context.js';
7
+ import { useFocusTrap, useLayer } from './layers.js';
8
+ export function Popover({ open, onOpenChange, label, trigger, placement = 'below', align = 'start', children }) {
9
+ const id = useId();
10
+ const button = useRef(null);
11
+ const panel = useRef(null);
12
+ useLayer(id, open, () => onOpenChange(false));
13
+ useFocusTrap(panel, open);
14
+ useEffect(() => {
15
+ if (!open)
16
+ return;
17
+ const onPointerDown = (event) => {
18
+ const target = event.target;
19
+ if (!panel.current?.contains(target) && !button.current?.contains(target))
20
+ onOpenChange(false);
21
+ };
22
+ document.addEventListener('pointerdown', onPointerDown, true);
23
+ return () => document.removeEventListener('pointerdown', onPointerDown, true);
24
+ }, [open, onOpenChange]);
25
+ return (_jsxs("span", { className: "desk-popover-anchor", children: [trigger({ ref: button, 'aria-haspopup': 'dialog', 'aria-expanded': open, onClick: () => onOpenChange(!open) }), open && (_jsx("div", { ref: panel, role: "dialog", "aria-label": label, className: "desk-popover", "data-placement": placement, "data-align": align, children: children }))] }));
26
+ }
27
+ export function Sheet({ open, onDismiss, title, description, actions, children }) {
28
+ const id = useId();
29
+ const panel = useRef(null);
30
+ const windowId = useWindowId();
31
+ // A sheet blocks its own window and nothing else, so it lives inside that window. It is
32
+ // found in the document rather than through a ref: a window's ref is attached after the
33
+ // effects of the content it holds have already run.
34
+ const [host, setHost] = useState(null);
35
+ useLayoutEffect(() => {
36
+ if (!open) {
37
+ setHost(null);
38
+ return;
39
+ }
40
+ const element = windowId ? windowElement(document, windowId) : null;
41
+ setHost(element instanceof HTMLElement ? element : document.body);
42
+ }, [open, windowId]);
43
+ useLayer(id, open, onDismiss);
44
+ useFocusTrap(panel, open && host !== null);
45
+ if (!open || !host)
46
+ return null;
47
+ return createPortal(_jsx("div", { className: "desk-sheet-scrim", children: _jsxs("div", { ref: panel, role: "dialog", "aria-modal": "true", "aria-labelledby": `${id}-title`, className: "desk-sheet", children: [_jsx("h2", { id: `${id}-title`, className: "desk-sheet-title", children: title }), description && _jsx("p", { className: "desk-sheet-description", children: description }), children, actions && _jsx("div", { className: "desk-sheet-actions", children: actions })] }) }), host);
48
+ }
49
+ export function Alert({ open, title, message, confirmLabel, onConfirm, onCancel, cancelLabel = 'Cancel', destructive }) {
50
+ const id = useId();
51
+ const panel = useRef(null);
52
+ useLayer(id, open, onCancel);
53
+ useFocusTrap(panel, open);
54
+ if (!open)
55
+ return null;
56
+ return createPortal(_jsx("div", { className: "desk-alert-scrim", children: _jsxs("div", { ref: panel, role: "alertdialog", "aria-modal": "true", "aria-labelledby": `${id}-title`, "aria-describedby": message ? `${id}-message` : undefined, className: "desk-alert", children: [_jsx("h2", { id: `${id}-title`, className: "desk-alert-title", children: title }), message && _jsx("p", { id: `${id}-message`, className: "desk-alert-message", children: message }), _jsxs("div", { className: "desk-alert-actions", children: [_jsx(Button, { onClick: onCancel, children: cancelLabel }), _jsx(Button, { intent: destructive ? 'destructive' : 'default', onClick: onConfirm, children: confirmLabel })] })] }) }), document.body);
57
+ }
58
+ const ToastContext = createContext(null);
59
+ export function ToastProvider({ children }) {
60
+ const [toasts, setToasts] = useState([]);
61
+ const counter = useRef(0);
62
+ const dismiss = useCallback((id) => setToasts(list => list.filter(t => t.id !== id)), []);
63
+ const show = useCallback((toast) => {
64
+ const id = toast.id ?? `toast-${(counter.current += 1)}`;
65
+ setToasts(list => [...list.filter(t => t.id !== id), { ...toast, id }]);
66
+ return id;
67
+ }, []);
68
+ const api = useMemo(() => ({ show, dismiss }), [show, dismiss]);
69
+ return (_jsxs(ToastContext.Provider, { value: api, children: [children, _jsx(ToastStack, { toasts: toasts, onDismiss: dismiss })] }));
70
+ }
71
+ export function useToast() {
72
+ const api = useContext(ToastContext);
73
+ if (!api)
74
+ throw new Error('useToast must be used inside a <ToastProvider>');
75
+ return api;
76
+ }
77
+ function ToastStack({ toasts, onDismiss }) {
78
+ if (!toasts.length)
79
+ return null;
80
+ return createPortal(_jsx("div", { className: "desk-toasts", children: toasts.map(toast => (_jsx(ToastView, { toast: toast, onDismiss: () => onDismiss(toast.id) }, toast.id))) }), document.body);
81
+ }
82
+ function ToastView({ toast, onDismiss }) {
83
+ const [paused, setPaused] = useState(false);
84
+ const duration = toast.duration ?? 6000;
85
+ useEffect(() => {
86
+ if (!duration || paused)
87
+ return;
88
+ const timer = setTimeout(onDismiss, duration);
89
+ return () => clearTimeout(timer);
90
+ }, [duration, paused, onDismiss]);
91
+ return (_jsxs("div", { className: "desk-toast", "data-tone": toast.tone ?? 'neutral', role: toast.tone === 'bad' ? 'alert' : 'status',
92
+ // Reading it, or reaching for Undo, should not start the clock against you.
93
+ onPointerEnter: () => setPaused(true), onPointerLeave: () => setPaused(false), onFocusCapture: () => setPaused(true), onBlurCapture: () => setPaused(false), children: [_jsx("span", { className: "desk-toast-message", children: toast.message }), toast.action && (_jsx(Button, { size: "small", intent: "quiet", onClick: () => {
94
+ toast.action?.onSelect();
95
+ onDismiss();
96
+ }, children: toast.action.label })), _jsx(Button, { size: "small", intent: "quiet", "aria-label": "Dismiss", onClick: onDismiss, children: "\u2715" })] }));
97
+ }
98
+ //# sourceMappingURL=overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../../src/react/overlays.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PopUpOption<T extends string> {
3
+ readonly value: T;
4
+ readonly label: string;
5
+ readonly description?: string;
6
+ readonly icon?: ReactNode;
7
+ readonly disabled?: boolean;
8
+ }
9
+ export interface PopUpButtonProps<T extends string> {
10
+ readonly value: T | null;
11
+ readonly onChange: (value: T) => void;
12
+ readonly options: readonly PopUpOption<T>[];
13
+ readonly label: string;
14
+ /** Hides the label on screen but keeps it for assistive technology. */
15
+ readonly labelHidden?: boolean;
16
+ readonly placeholder?: string;
17
+ readonly disabled?: boolean;
18
+ readonly size?: 'regular' | 'small';
19
+ }
20
+ export declare function PopUpButton<T extends string>({ value, onChange, options, label, labelHidden, placeholder, disabled, size, }: PopUpButtonProps<T>): import("react").JSX.Element;
21
+ //# sourceMappingURL=popup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.d.ts","sourceRoot":"","sources":["../../src/react/popup.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAQrD,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM;IAChD,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uEAAuE;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;CACpC;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,EAC5C,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAK,EACL,WAAW,EACX,WAAuB,EACvB,QAAQ,EACR,IAAgB,GACjB,EAAE,gBAAgB,CAAC,CAAC,CAAC,+BAyIrB"}