react-os-shell 4.77.0 → 4.79.2
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.
- package/dist/{Browser-G7A6O5KI.js → Browser-XPFSDH27.js} +5 -5
- package/dist/{Browser-G7A6O5KI.js.map → Browser-XPFSDH27.js.map} +1 -1
- package/dist/{Calculator-SRZGJITP.js → Calculator-PAPSDNSJ.js} +4 -4
- package/dist/{Calculator-SRZGJITP.js.map → Calculator-PAPSDNSJ.js.map} +1 -1
- package/dist/{CurrencyConverter-3KBUNSD6.js → CurrencyConverter-VJQI2XVV.js} +4 -4
- package/dist/{CurrencyConverter-3KBUNSD6.js.map → CurrencyConverter-VJQI2XVV.js.map} +1 -1
- package/dist/{Documents-7CMK5XDC.js → Documents-NHWPVRQC.js} +5 -5
- package/dist/{Documents-7CMK5XDC.js.map → Documents-NHWPVRQC.js.map} +1 -1
- package/dist/{Files-KFHBFAEL.js → Files-4RFGGL6Q.js} +8 -8
- package/dist/{Files-KFHBFAEL.js.map → Files-4RFGGL6Q.js.map} +1 -1
- package/dist/{Notepad-3QOAGMND.js → Notepad-K57YAANX.js} +5 -5
- package/dist/{Notepad-3QOAGMND.js.map → Notepad-K57YAANX.js.map} +1 -1
- package/dist/{PomodoroTimer-QGQBN2OH.js → PomodoroTimer-GFL4L3XS.js} +4 -4
- package/dist/{PomodoroTimer-QGQBN2OH.js.map → PomodoroTimer-GFL4L3XS.js.map} +1 -1
- package/dist/{Preview-SEO3K7T6.js → Preview-IOH4HR4P.js} +19 -17
- package/dist/Preview-IOH4HR4P.js.map +1 -0
- package/dist/{Spreadsheet-2ZRR3TVZ.js → Spreadsheet-C5GAX4ZW.js} +23 -18
- package/dist/Spreadsheet-C5GAX4ZW.js.map +1 -0
- package/dist/{Stock-OVVGE7US.js → Stock-WZXVQX3G.js} +4 -4
- package/dist/{Stock-OVVGE7US.js.map → Stock-WZXVQX3G.js.map} +1 -1
- package/dist/{Weather-PKUXHYIL.js → Weather-FQ7ZVXVR.js} +4 -4
- package/dist/{Weather-PKUXHYIL.js.map → Weather-FQ7ZVXVR.js.map} +1 -1
- package/dist/{WorldClock-OUO4IYKF.js → WorldClock-XAFQ5ZQF.js} +4 -4
- package/dist/{WorldClock-OUO4IYKF.js.map → WorldClock-XAFQ5ZQF.js.map} +1 -1
- package/dist/apps/index.d.ts +10 -4
- package/dist/apps/index.js +17 -17
- package/dist/{chunk-BV6SQ46N.js → chunk-3L463T5H.js} +5 -3
- package/dist/chunk-3L463T5H.js.map +1 -0
- package/dist/{chunk-4SQU5YV6.js → chunk-CT3HVZRZ.js} +5 -3
- package/dist/chunk-CT3HVZRZ.js.map +1 -0
- package/dist/{chunk-UEJC6VOM.js → chunk-EXSEW5F3.js} +3 -74
- package/dist/chunk-EXSEW5F3.js.map +1 -0
- package/dist/{chunk-TT56U4GY.js → chunk-GO2LCDHS.js} +4 -4
- package/dist/{chunk-TT56U4GY.js.map → chunk-GO2LCDHS.js.map} +1 -1
- package/dist/chunk-UWLJI2O7.js +7 -0
- package/dist/{chunk-FSOC6W3V.js.map → chunk-UWLJI2O7.js.map} +1 -1
- package/dist/{chunk-S6K37RLY.js → chunk-VDKHMCWT.js} +6 -5
- package/dist/chunk-VDKHMCWT.js.map +1 -0
- package/dist/{chunk-HEULN5GY.js → chunk-Z5LURI3C.js} +6 -6
- package/dist/{chunk-HEULN5GY.js.map → chunk-Z5LURI3C.js.map} +1 -1
- package/dist/{chunk-XYP45LGG.js → chunk-ZO4XGUZQ.js} +3 -3
- package/dist/{chunk-XYP45LGG.js.map → chunk-ZO4XGUZQ.js.map} +1 -1
- package/dist/{index-DVekeidu.d.ts → index-C_uCjbAh.d.ts} +85 -1
- package/dist/index.d.ts +14 -3
- package/dist/index.js +52 -17
- package/dist/index.js.map +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +2 -2
- package/package.json +1 -1
- package/dist/Preview-SEO3K7T6.js.map +0 -1
- package/dist/Spreadsheet-2ZRR3TVZ.js.map +0 -1
- package/dist/chunk-4SQU5YV6.js.map +0 -1
- package/dist/chunk-BV6SQ46N.js.map +0 -1
- package/dist/chunk-FSOC6W3V.js +0 -7
- package/dist/chunk-S6K37RLY.js.map +0 -1
- package/dist/chunk-UEJC6VOM.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { VERSION } from './chunk-
|
|
2
|
-
import { useWindowMenuItem, Modal } from './chunk-
|
|
1
|
+
import { VERSION } from './chunk-UWLJI2O7.js';
|
|
2
|
+
import { useWindowMenuItem, Modal } from './chunk-EXSEW5F3.js';
|
|
3
3
|
import { navIcons } from './chunk-WNLPTLT6.js';
|
|
4
4
|
import { useState, useCallback, isValidElement, cloneElement } from 'react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -7,7 +7,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
7
7
|
var BUILTIN_APP_INFO = {
|
|
8
8
|
spreadsheet: {
|
|
9
9
|
name: "Spreadsheets",
|
|
10
|
-
version: "1.1.
|
|
10
|
+
version: "1.1.2",
|
|
11
11
|
route: "/spreadsheet",
|
|
12
12
|
description: "Multi-sheet spreadsheet editor with CSV / TSV import and export."
|
|
13
13
|
},
|
|
@@ -25,7 +25,7 @@ var BUILTIN_APP_INFO = {
|
|
|
25
25
|
},
|
|
26
26
|
preview: {
|
|
27
27
|
name: "Preview",
|
|
28
|
-
version: "1.2.
|
|
28
|
+
version: "1.2.2",
|
|
29
29
|
route: "/preview",
|
|
30
30
|
description: "Viewer for PDF documents, images, DXF drawings and 3D models \u2014 CAD-style measuring with object snap and an AutoCAD-like command bar."
|
|
31
31
|
},
|
|
@@ -75,5 +75,5 @@ function AboutApp({ app }) {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
export { AboutApp, BUILTIN_APP_INFO };
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
78
|
+
//# sourceMappingURL=chunk-Z5LURI3C.js.map
|
|
79
|
+
//# sourceMappingURL=chunk-Z5LURI3C.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/apps/_about.tsx"],"names":[],"mappings":"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","file":"chunk-Z5LURI3C.js","sourcesContent":["/**\n * Shared \"About\" dialog for the bundled apps.\n *\n * Each bundled app carries its own version (independent of the package\n * version) so app-level changes can be tracked without bumping every app at\n * once. `<AboutApp app=\"…\" />` registers an \"About <Name>\" item in the\n * window title menu and renders the dialog: app icon, name, app version and\n * the react-os-shell attribution + shell version.\n *\n * Bump an app's version in `BUILTIN_APP_INFO` whenever that app's behaviour\n * changes, alongside the package-level CHANGELOG entry.\n */\nimport { useCallback, useState, isValidElement, cloneElement, type ReactElement } from 'react';\nimport Modal, { useWindowMenuItem } from '../shell/Modal';\nimport { navIcons } from '../shell-config/nav';\nimport { VERSION } from '../version';\n\nexport interface BuiltinAppInfo {\n /** Display name — matches the window-registry label. */\n name: string;\n /** App version, independent of the package version. */\n version: string;\n /** One-line summary shown in the About dialog. */\n description: string;\n /** Registry route — used to look up the consumer-registered nav icon. */\n route: string;\n}\n\nexport const BUILTIN_APP_INFO = {\n spreadsheet: {\n name: 'Spreadsheets',\n version: '1.1.2',\n route: '/spreadsheet',\n description: 'Multi-sheet spreadsheet editor with CSV / TSV import and export.',\n },\n notepad: {\n name: 'Notepad',\n version: '1.0.0',\n route: '/notepad',\n description: 'Color-coded notes with checklists, desktop stickies and entity autolinking.',\n },\n documents: {\n name: 'Documents',\n version: '1.1.0',\n route: '/documents',\n description: 'Letter-page editor for Word documents and plain-text files — images, lists, alignment.',\n },\n preview: {\n name: 'Preview',\n version: '1.2.2',\n route: '/preview',\n description: 'Viewer for PDF documents, images, DXF drawings and 3D models — CAD-style measuring with object snap and an AutoCAD-like command bar.',\n },\n files: {\n name: 'Files',\n version: '1.1.0',\n route: '/files',\n description: 'Personal file manager with folders, uploads, quota, trash and desktop shortcut folders.',\n },\n browser: {\n name: 'Browser',\n version: '1.0.1',\n route: '/browser',\n description: 'Minimal web browser with bookmarks, history and navigation bar.',\n },\n} satisfies Record<string, BuiltinAppInfo>;\n\nexport type BuiltinAppId = keyof typeof BUILTIN_APP_INFO;\n\nconst ABOUT_MENU_ICON = (\n <svg className=\"h-4 w-4 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" />\n </svg>\n);\n\n// Generic window glyph shown when the consumer hasn't registered a nav icon\n// for the app's route (same fallback shape as the Modal title bar).\nconst FALLBACK_APP_ICON = (\n <svg className=\"h-9 w-9\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3.75 6.75A2.25 2.25 0 016 4.5h12a2.25 2.25 0 012.25 2.25v10.5A2.25 2.25 0 0118 19.5H6a2.25 2.25 0 01-2.25-2.25V6.75z M3.75 9h16.5\" />\n </svg>\n);\n\n/** Registers \"About <Name>\" in the window title menu and renders the dialog.\n * Render anywhere inside the app's window. */\nexport default function AboutApp({ app }: { app: BuiltinAppId }) {\n const info = BUILTIN_APP_INFO[app];\n const [open, setOpen] = useState(false);\n const openDialog = useCallback(() => setOpen(true), []);\n useWindowMenuItem(`About ${info.name}`, openDialog, ABOUT_MENU_ICON);\n\n if (!open) return null;\n\n const registered = navIcons[info.route];\n const appIcon = isValidElement(registered)\n ? cloneElement(registered as ReactElement, { className: 'h-9 w-9' } as any)\n : FALLBACK_APP_ICON;\n\n return (\n <Modal open onClose={() => setOpen(false)} title={`About ${info.name}`} size=\"sm\" compact bodyScroll={false} autoHeight dimensions={[320, 320]}>\n <div className=\"flex flex-col items-center text-center px-5 pt-5 pb-4\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-gray-100 text-gray-600 shrink-0\">\n {appIcon}\n </div>\n <h2 className=\"mt-3 text-lg font-bold text-gray-900\">{info.name}</h2>\n <p className=\"text-[11px] font-mono text-gray-400\">Version {info.version}</p>\n <p className=\"mt-2 text-xs text-gray-500 leading-relaxed\">{info.description}</p>\n <div className=\"mt-4 pt-3 border-t border-gray-200 w-full\">\n <p className=\"text-[11px] text-gray-500\">\n Part of the <span className=\"font-medium text-gray-700\">react-os-shell</span> desktop environment\n </p>\n {VERSION && <p className=\"mt-0.5 text-[10px] font-mono text-gray-400\">shell v{VERSION}</p>}\n </div>\n </div>\n </Modal>\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Modal } from './chunk-
|
|
1
|
+
import { Modal } from './chunk-EXSEW5F3.js';
|
|
2
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
4
|
var DEFAULT_APPEARANCE = { activeOpacity: 70, inactiveOpacity: 50, activeBlur: 0, inactiveBlur: 0 };
|
|
@@ -138,5 +138,5 @@ function WidgetSettingsModal({ open, onClose, title, appearance, onAppearanceCha
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
export { WidgetSettingsModal, loadAppearance };
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
141
|
+
//# sourceMappingURL=chunk-ZO4XGUZQ.js.map
|
|
142
|
+
//# sourceMappingURL=chunk-ZO4XGUZQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shell/WidgetSettingsModal.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/shell/WidgetSettingsModal.tsx"],"names":[],"mappings":"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","file":"chunk-ZO4XGUZQ.js","sourcesContent":["import Modal from './Modal';\n\nexport interface WidgetAppearance {\n activeOpacity: number;\n inactiveOpacity: number;\n activeBlur: number;\n inactiveBlur: number;\n}\n\nexport const DEFAULT_APPEARANCE: WidgetAppearance = { activeOpacity: 70, inactiveOpacity: 50, activeBlur: 0, inactiveBlur: 0 };\n\nexport function loadAppearance(key: string): WidgetAppearance {\n try {\n const saved = JSON.parse(localStorage.getItem(key) || '');\n // Migrate old single `blur` field to activeBlur/inactiveBlur\n if (saved.blur != null && saved.activeBlur == null) {\n saved.activeBlur = saved.blur;\n saved.inactiveBlur = saved.blur;\n delete saved.blur;\n }\n return { ...DEFAULT_APPEARANCE, ...saved };\n }\n catch { return DEFAULT_APPEARANCE; }\n}\n\n/** Reusable settings modal for widgets — renders appearance sliders + optional extra content above */\nexport default function WidgetSettingsModal({ open, onClose, title, appearance, onAppearanceChange, onSave, children }: {\n open: boolean;\n onClose: () => void;\n title: string;\n appearance: WidgetAppearance;\n onAppearanceChange: (a: WidgetAppearance) => void;\n onSave: () => void;\n children?: React.ReactNode;\n}) {\n if (!open) return null;\n\n const inp = 'w-full h-1.5 rounded-full appearance-none bg-gray-200 cursor-pointer accent-blue-500';\n const lbl = 'flex items-center justify-between text-xs text-gray-500';\n\n return (\n <div onPointerDown={e => e.stopPropagation()} onContextMenu={e => e.stopPropagation()}>\n <Modal open={open} onClose={onClose} title={title} size=\"sm\">\n <div className=\"space-y-4\">\n {children}\n\n {/* Appearance */}\n <div>\n <h3 className=\"text-sm font-semibold text-gray-700 mb-3\">Appearance</h3>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <div className=\"text-xs font-medium text-gray-600 mb-2\">Active</div>\n <div className=\"space-y-2\">\n <div>\n <div className={lbl}><span>Opacity</span><span>{appearance.activeOpacity}%</span></div>\n <input type=\"range\" min={20} max={100} value={appearance.activeOpacity}\n onChange={e => onAppearanceChange({ ...appearance, activeOpacity: +e.target.value })} className={inp} />\n </div>\n <div>\n <div className={lbl}><span>Blur</span><span>{appearance.activeBlur}px</span></div>\n <input type=\"range\" min={0} max={20} value={appearance.activeBlur}\n onChange={e => onAppearanceChange({ ...appearance, activeBlur: +e.target.value })} className={inp} />\n </div>\n </div>\n </div>\n <div>\n <div className=\"text-xs font-medium text-gray-600 mb-2\">Inactive</div>\n <div className=\"space-y-2\">\n <div>\n <div className={lbl}><span>Opacity</span><span>{appearance.inactiveOpacity}%</span></div>\n <input type=\"range\" min={20} max={100} value={appearance.inactiveOpacity}\n onChange={e => onAppearanceChange({ ...appearance, inactiveOpacity: +e.target.value })} className={inp} />\n </div>\n <div>\n <div className={lbl}><span>Blur</span><span>{appearance.inactiveBlur}px</span></div>\n <input type=\"range\" min={0} max={20} value={appearance.inactiveBlur}\n onChange={e => onAppearanceChange({ ...appearance, inactiveBlur: +e.target.value })} className={inp} />\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex gap-2 pt-2\">\n <button onClick={onSave}\n className=\"flex-1 text-sm font-medium py-2 rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition\">Save</button>\n <button onClick={onClose}\n className=\"flex-1 text-sm font-medium py-2 rounded-lg border border-gray-300 text-gray-600 hover:bg-gray-50 transition\">Cancel</button>\n </div>\n </div>\n </Modal>\n </div>\n );\n}\n"]}
|
|
@@ -139,12 +139,39 @@ interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'onC
|
|
|
139
139
|
/**
|
|
140
140
|
* Desktop rung, or `touch`. Defaults to `md`.
|
|
141
141
|
*
|
|
142
|
+
* On `Select` this sizes the DESKTOP branch only: the touch branch takes
|
|
143
|
+
* `touchSize` instead and ignores this entirely. `NativeSelect` and
|
|
144
|
+
* `ListboxSelect` are literal and use it on every viewport.
|
|
145
|
+
*
|
|
142
146
|
* This shadows the native `size` attribute (the number of rows a select
|
|
143
147
|
* shows when it is rendered as a list box), which is omitted above rather
|
|
144
148
|
* than left to collide. Nothing here has ever rendered as a list box — the
|
|
145
149
|
* kit's Select is a dropdown — so no capability is lost.
|
|
146
150
|
*/
|
|
147
151
|
size?: InputSize;
|
|
152
|
+
/**
|
|
153
|
+
* Rung for `Select`'s TOUCH branch. Defaults to `touch` (56px), which is the
|
|
154
|
+
* point of the branch — see the Select doc-block.
|
|
155
|
+
*
|
|
156
|
+
* It exists because the default is not right for everyone and the previous
|
|
157
|
+
* escape hatch was too expensive. `NativeSelect` sizes a select freely, but
|
|
158
|
+
* it is a native `<select>` on the desktop too, which is BG#00421: the OS
|
|
159
|
+
* popup swallows every key event, so shell hotkeys die while it is open.
|
|
160
|
+
* That is the whole reason the desktop listbox exists, and no one should
|
|
161
|
+
* have to give it up to render a 40px select on a phone.
|
|
162
|
+
*
|
|
163
|
+
* The case it is really for is a row of mixed controls. `Input`, `Textarea`,
|
|
164
|
+
* `DatePicker`, `TimePicker`, `InputNumber` and `TagInput` all render the
|
|
165
|
+
* rung they are given on every viewport, and `SearchableSelect` is pinned to
|
|
166
|
+
* `INPUT_BASE` (the `md` rung) with no size axis at all — so a phone form
|
|
167
|
+
* that puts a Select beside an unsized one of those now steps 56px against a
|
|
168
|
+
* control a little over half that. Pass `touchSize="md"` on the Select to
|
|
169
|
+
* line the row back up.
|
|
170
|
+
*
|
|
171
|
+
* Only `Select` reads it. `NativeSelect` and `ListboxSelect` accept it and
|
|
172
|
+
* ignore it, so it never reaches the DOM as an unknown attribute.
|
|
173
|
+
*/
|
|
174
|
+
touchSize?: InputSize;
|
|
148
175
|
options: SelectOption[];
|
|
149
176
|
/** Shown as a disabled first option when no value is selected. */
|
|
150
177
|
placeholder?: string;
|
|
@@ -155,9 +182,66 @@ interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'onC
|
|
|
155
182
|
* Raw native `<select>` styled to match the kit's inputs. This is the original
|
|
156
183
|
* Select — kept as the mobile rendering and exported for callers that need a
|
|
157
184
|
* real `HTMLSelectElement` (form posts, native attribute spread, focus).
|
|
185
|
+
*
|
|
186
|
+
* Literal about `size`: it renders the rung it is handed on every viewport,
|
|
187
|
+
* which is what makes it the opt-out from `Select`'s branch entirely. Prefer
|
|
188
|
+
* `Select`'s `touchSize` when you only want a different touch rung — this one
|
|
189
|
+
* costs you the desktop listbox, and with it BG#00421.
|
|
190
|
+
*
|
|
191
|
+
* `touchSize` is pulled out and dropped: it is `Select`'s prop, and letting it
|
|
192
|
+
* through `rest` would put an unknown attribute on the `<select>`.
|
|
158
193
|
*/
|
|
159
194
|
declare const NativeSelect: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLSelectElement>>;
|
|
160
|
-
/**
|
|
195
|
+
/**
|
|
196
|
+
* Smart Select: native `<select>` on touch, custom listbox on desktop.
|
|
197
|
+
*
|
|
198
|
+
* The touch branch takes `touchSize`, default `touch`, and DISCARDS whatever
|
|
199
|
+
* desktop rung the caller asked for. That is not the component second-guessing
|
|
200
|
+
* the caller — `sm`/`md`/`lg` are the desktop ladder, and this branch only ever
|
|
201
|
+
* renders when there is no desktop. A rung off that ladder has nothing to say
|
|
202
|
+
* about how big an OS picker should be under a finger.
|
|
203
|
+
*
|
|
204
|
+
* It had to be said out loud because the omission was a real defect: this
|
|
205
|
+
* component already decided "this is touch, give it the native picker" and then
|
|
206
|
+
* passed the desktop rung straight through, handing a finger a target under the
|
|
207
|
+
* 44px WCAG 2.5.5 floor that `touchPrimitives.test.tsx` holds every Button rung
|
|
208
|
+
* above. `size="lg"` was measured at 39px on a device; the default `md` is a
|
|
209
|
+
* rung shorter again (`py-1.5 text-sm` against `py-2 text-base`, so 8px off the
|
|
210
|
+
* box), which puts it around 31px. The dealer portal's order filters were
|
|
211
|
+
* exactly that.
|
|
212
|
+
*
|
|
213
|
+
* Note this reads the same signal that already picks the branch
|
|
214
|
+
* (`(max-width: 767px), (pointer: coarse)`), so a narrow desktop window has
|
|
215
|
+
* been getting the native picker all along — it now gets a native picker at a
|
|
216
|
+
* touch size rather than a desktop size, which is the smaller surprise of the
|
|
217
|
+
* two.
|
|
218
|
+
*
|
|
219
|
+
* `Button`'s docblock says nothing picks a touch size automatically, and that
|
|
220
|
+
* still holds: it is about a DESKTOP portal not growing finger-sized controls
|
|
221
|
+
* by accident. This branch cannot run on a desktop pointer at a desktop width.
|
|
222
|
+
*
|
|
223
|
+
* ── Where this leaves a mixed row ───────────────────────────────────────────
|
|
224
|
+
*
|
|
225
|
+
* Select is, for now, the ONLY control in the kit that picks its own touch
|
|
226
|
+
* rung. `Input`, `Textarea`, `DatePicker`, `TimePicker`, `DateTimePicker`,
|
|
227
|
+
* `InputNumber` and `TagInput` all render what they are given on every
|
|
228
|
+
* viewport, and `SearchableSelect` has no size axis at all — it is pinned to
|
|
229
|
+
* `INPUT_BASE`. So a phone form that stacks a Select against an unsized one of
|
|
230
|
+
* those steps 56px against a control a little over half that, and a field that
|
|
231
|
+
* renders a Select or an Input depending on its data (a country with states
|
|
232
|
+
* versus one without, say) changes height with the data.
|
|
233
|
+
*
|
|
234
|
+
* That is a real cost and it is not paid off here: whether the whole ladder
|
|
235
|
+
* should follow a finger is a bigger question than one control's hit target,
|
|
236
|
+
* and answering it in `inputClasses` would move every text field in every
|
|
237
|
+
* consumer. `touchSize="md"` is the seam until it is answered — it lines a
|
|
238
|
+
* Select back up with its neighbours without giving up the desktop listbox.
|
|
239
|
+
*
|
|
240
|
+
* `NativeSelect` remains the way out of the branch ENTIRELY, for a caller who
|
|
241
|
+
* wants one raw native control on every viewport. It is the heavier door:
|
|
242
|
+
* native on the desktop is BG#00421, the OS popup that swallows every key
|
|
243
|
+
* event. Reach for `touchSize` first.
|
|
244
|
+
*/
|
|
161
245
|
declare const Select: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLSelectElement>>;
|
|
162
246
|
|
|
163
247
|
interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'checked' | 'className'> {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SearchConfig, C as ColumnDef, a as SortState, P as PaginatedResponse } from './index-
|
|
2
|
-
export { A as ALT, b as ALT_SHIFT_D, c as ALT_SHIFT_E, d as ALT_SHIFT_N, e as Accordion, f as AccordionItem, g as AccordionProps, h as Align, i as AuthScreen, j as AuthScreenProps, k as Avatar, l as AvatarGroup, m as AvatarGroupProps, n as AvatarProps, o as AvatarSize, p as AvatarStatus, B as Banner, q as BannerEmphasis, r as BannerProps, s as BannerTone, t as BarChart, u as BarChartProps, v as BreadcrumbItem, w as Breadcrumbs, x as BreadcrumbsProps, y as Button, z as ButtonProps, D as ButtonSize, E as ButtonVariant, F as CMD_A, G as CMD_DOT, H as CMD_ENTER, I as CMD_K, J as CMD_S, K as Calendar, L as CalendarMode, M as CalendarProps, N as Card, O as CardPadding, Q as CardProps, R as CellStyle, T as ChatTemplate, U as Checkbox, V as CheckboxProps, W as CheckoutTemplate, X as ColoredBadge, Y as ColoredBadgeProps, Z as ConfirmProvider, _ as ContainerFillChart, $ as ContainerFillChartProps, a0 as ContainerFillItem, a1 as CountBadge, a2 as CountBadgeProps, a3 as CountBadgeTone, a4 as DEFAULT_SHELL_STRINGS, a5 as DashboardTemplate, a6 as DataTable, a7 as DataTableColumn, a8 as DataTableColumnGroup, a9 as DataTableHeader, aa as DataTablePage, ab as DataTableProps, ac as DatePicker, ad as DatePickerProps, ae as DateRangePicker, af as DateRangePickerProps, ag as DateTimePicker, ah as DateTimePickerProps, ai as DescriptionColumns, aj as DescriptionItem, ak as DescriptionList, al as DescriptionListProps, am as Dialog, an as DialogProps, ao as DialogSize, ap as Divider, aq as DividerProps, ar as DividerSpacing, as as DonutChart, at as DonutChartProps, au as DonutSegment, av as Drawer, aw as DrawerProps, ax as DrawerSide, ay as DrawerSize, az as DropdownMenu, aA as DropdownMenuAlign, aB as DropdownMenuItem, aC as DropdownMenuProps, aD as ENTER, aE as EditableGrid, aF as EditableGridProps, aG as EmailTemplate, aH as EmptyState, aI as EmptyStateProps, aJ as ErrorBoundary, aK as ErrorBoundaryProps, aL as ErrorPage, aM as ErrorPageProps, aN as FilePicker, aO as FilePickerProps, aP as FormError, aQ as FormErrorSummary, aR as FormErrorSummaryProps, aS as FormField, aT as FormFieldProps, aU as FormLayoutPage, aV as GLASS_DIVIDER, aW as GLASS_INPUT_BG, aX as GROUP_COLORS, aY as GalleryTemplate, aZ as Gap, a_ as GlobalSearch, a$ as GlobalSearchProps, b0 as Grid, b1 as GridCols, b2 as GridColumn, b3 as GridProps, b4 as HelpCenter, b5 as HelpCenterDoc, b6 as HelpCenterProps, b7 as INPUT_BASE, b8 as INPUT_SIZES, b9 as IconButton, ba as IconButtonProps, bb as Inline, bc as InlineProps, bd as Input, be as InputNumber, bf as InputNumberProps, bg as InputProps, bh as InputSize, bi as Justify, bj as Kanban, bk as KanbanColumn, bl as KanbanProps, bm as Label, bn as LabelProps, bo as LineChart, bp as LineChartProps, bq as LineChartSeries, br as ListFooter, bs as ListLoadError, bt as ListLoadErrorProps, bu as LoadingSpinner, bv as LoadingSpinnerProps, bw as MAX_FRACTION_DIGITS, bx as MOD, by as Markdown, bz as MarkdownProps, bA as MediaUploadField, bB as MediaUploadFieldProps, bC as MediaUploadGrid, bD as MediaUploadGridItem, bE as MediaUploadGridProps, bF as MetricBar, bG as MetricBarProps, bH as Milestone, bI as MilestoneKind, bJ as MilestoneTimeline, bK as MilestoneTimelineProps, bL as NativeSelect, bM as NumericKeypad, bN as NumericKeypadProps, bO as PageHeader, bP as PageHeaderProps, bQ as Pagination, bR as PaginationProps, bS as Paragraph, bT as ParagraphProps, bU as PopupMenu, bV as PopupMenuDivider, bW as PopupMenuItem, bX as PopupMenuLabel, bY as Radio, bZ as RadioProps, b_ as Result, b$ as ResultProps, c0 as ResultStatus, c1 as SHIFT, c2 as SearchProvider, c3 as SearchResult, c4 as SearchableOption, c5 as SearchableSelect, c6 as SearchableSelectProps, c7 as Segmented, c8 as SegmentedOption, c9 as SegmentedProps, ca as SegmentedSize, cb as Select, cc as SelectOption, cd as SelectProps, ce as SemanticGroup, cf as SeverityTone, cg as ShellPrefsAdapter, ch as ShellPrefsProvider, ci as ShellStrings, cj as ShellStringsOverride, ck as ShellStringsProvider, cl as SidebarActionButton, cm as SidebarActionButtonProps, cn as SidebarGroupLabel, co as SidebarLayout, cp as SidebarLayoutProps, cq as SidebarNavItem, cr as Skeleton, cs as SkeletonProps, ct as SkeletonVariant, cu as Sparkline, cv as SparklineProps, cw as Stack, cx as StackProps, cy as StatCard, cz as StatCardProps, cA as Statistic, cB as StatisticProps, cC as StatisticSize, cD as StatisticTone, cE as StatusBadge, cF as StatusBadgeProvider, cG as StepItem, cH as Stepper, cI as StepperProps, cJ as Switch, cK as SwitchProps, cL as SwitchSize, cM as TabItem, cN as Tabs, cO as TabsProps, cP as TagInput, cQ as TagInputOption, cR as TagInputProps, cS as Text, cT as TextProps, cU as TextSize, cV as TextTone, cW as TextWeight, cX as Textarea, cY as TextareaProps, cZ as Theme, c_ as TileButton, c$ as TileButtonProps, d0 as TileSize, d1 as TimePicker, d2 as TimePickerProps, d3 as Title, d4 as TitleLevel, d5 as TitleProps, d6 as ToastOptions, d7 as ToastPlacement, d8 as Tooltip, d9 as TooltipProps, da as TopNav, db as TopNavItem, dc as TopNavProps, dd as VERSION, de as appendKey, df as applyThemePrefs, dg as backspace, dh as confirm, di as confirmDestructive, dj as formatDate, dk as fromDateKey, dl as glassStyle, dm as inputClasses, dn as isMac, dp as isSeverityTone, dq as mediaFileName, dr as prompt, ds as resolveTheme, dt as severityOf, du as tabButtonId, dv as tabPanelId, dw as toDateKey, dx as toISODate, dy as toast, dz as useClickOutside, dA as useConfirm, dB as useFocusTrap, dC as useIsMobile, dD as useLocalStoragePrefs, dE as useScrollLock, dF as useShellPrefs, dG as useShellStrings, dH as useTheme } from './index-
|
|
1
|
+
import { S as SearchConfig, C as ColumnDef, a as SortState, P as PaginatedResponse } from './index-C_uCjbAh.js';
|
|
2
|
+
export { A as ALT, b as ALT_SHIFT_D, c as ALT_SHIFT_E, d as ALT_SHIFT_N, e as Accordion, f as AccordionItem, g as AccordionProps, h as Align, i as AuthScreen, j as AuthScreenProps, k as Avatar, l as AvatarGroup, m as AvatarGroupProps, n as AvatarProps, o as AvatarSize, p as AvatarStatus, B as Banner, q as BannerEmphasis, r as BannerProps, s as BannerTone, t as BarChart, u as BarChartProps, v as BreadcrumbItem, w as Breadcrumbs, x as BreadcrumbsProps, y as Button, z as ButtonProps, D as ButtonSize, E as ButtonVariant, F as CMD_A, G as CMD_DOT, H as CMD_ENTER, I as CMD_K, J as CMD_S, K as Calendar, L as CalendarMode, M as CalendarProps, N as Card, O as CardPadding, Q as CardProps, R as CellStyle, T as ChatTemplate, U as Checkbox, V as CheckboxProps, W as CheckoutTemplate, X as ColoredBadge, Y as ColoredBadgeProps, Z as ConfirmProvider, _ as ContainerFillChart, $ as ContainerFillChartProps, a0 as ContainerFillItem, a1 as CountBadge, a2 as CountBadgeProps, a3 as CountBadgeTone, a4 as DEFAULT_SHELL_STRINGS, a5 as DashboardTemplate, a6 as DataTable, a7 as DataTableColumn, a8 as DataTableColumnGroup, a9 as DataTableHeader, aa as DataTablePage, ab as DataTableProps, ac as DatePicker, ad as DatePickerProps, ae as DateRangePicker, af as DateRangePickerProps, ag as DateTimePicker, ah as DateTimePickerProps, ai as DescriptionColumns, aj as DescriptionItem, ak as DescriptionList, al as DescriptionListProps, am as Dialog, an as DialogProps, ao as DialogSize, ap as Divider, aq as DividerProps, ar as DividerSpacing, as as DonutChart, at as DonutChartProps, au as DonutSegment, av as Drawer, aw as DrawerProps, ax as DrawerSide, ay as DrawerSize, az as DropdownMenu, aA as DropdownMenuAlign, aB as DropdownMenuItem, aC as DropdownMenuProps, aD as ENTER, aE as EditableGrid, aF as EditableGridProps, aG as EmailTemplate, aH as EmptyState, aI as EmptyStateProps, aJ as ErrorBoundary, aK as ErrorBoundaryProps, aL as ErrorPage, aM as ErrorPageProps, aN as FilePicker, aO as FilePickerProps, aP as FormError, aQ as FormErrorSummary, aR as FormErrorSummaryProps, aS as FormField, aT as FormFieldProps, aU as FormLayoutPage, aV as GLASS_DIVIDER, aW as GLASS_INPUT_BG, aX as GROUP_COLORS, aY as GalleryTemplate, aZ as Gap, a_ as GlobalSearch, a$ as GlobalSearchProps, b0 as Grid, b1 as GridCols, b2 as GridColumn, b3 as GridProps, b4 as HelpCenter, b5 as HelpCenterDoc, b6 as HelpCenterProps, b7 as INPUT_BASE, b8 as INPUT_SIZES, b9 as IconButton, ba as IconButtonProps, bb as Inline, bc as InlineProps, bd as Input, be as InputNumber, bf as InputNumberProps, bg as InputProps, bh as InputSize, bi as Justify, bj as Kanban, bk as KanbanColumn, bl as KanbanProps, bm as Label, bn as LabelProps, bo as LineChart, bp as LineChartProps, bq as LineChartSeries, br as ListFooter, bs as ListLoadError, bt as ListLoadErrorProps, bu as LoadingSpinner, bv as LoadingSpinnerProps, bw as MAX_FRACTION_DIGITS, bx as MOD, by as Markdown, bz as MarkdownProps, bA as MediaUploadField, bB as MediaUploadFieldProps, bC as MediaUploadGrid, bD as MediaUploadGridItem, bE as MediaUploadGridProps, bF as MetricBar, bG as MetricBarProps, bH as Milestone, bI as MilestoneKind, bJ as MilestoneTimeline, bK as MilestoneTimelineProps, bL as NativeSelect, bM as NumericKeypad, bN as NumericKeypadProps, bO as PageHeader, bP as PageHeaderProps, bQ as Pagination, bR as PaginationProps, bS as Paragraph, bT as ParagraphProps, bU as PopupMenu, bV as PopupMenuDivider, bW as PopupMenuItem, bX as PopupMenuLabel, bY as Radio, bZ as RadioProps, b_ as Result, b$ as ResultProps, c0 as ResultStatus, c1 as SHIFT, c2 as SearchProvider, c3 as SearchResult, c4 as SearchableOption, c5 as SearchableSelect, c6 as SearchableSelectProps, c7 as Segmented, c8 as SegmentedOption, c9 as SegmentedProps, ca as SegmentedSize, cb as Select, cc as SelectOption, cd as SelectProps, ce as SemanticGroup, cf as SeverityTone, cg as ShellPrefsAdapter, ch as ShellPrefsProvider, ci as ShellStrings, cj as ShellStringsOverride, ck as ShellStringsProvider, cl as SidebarActionButton, cm as SidebarActionButtonProps, cn as SidebarGroupLabel, co as SidebarLayout, cp as SidebarLayoutProps, cq as SidebarNavItem, cr as Skeleton, cs as SkeletonProps, ct as SkeletonVariant, cu as Sparkline, cv as SparklineProps, cw as Stack, cx as StackProps, cy as StatCard, cz as StatCardProps, cA as Statistic, cB as StatisticProps, cC as StatisticSize, cD as StatisticTone, cE as StatusBadge, cF as StatusBadgeProvider, cG as StepItem, cH as Stepper, cI as StepperProps, cJ as Switch, cK as SwitchProps, cL as SwitchSize, cM as TabItem, cN as Tabs, cO as TabsProps, cP as TagInput, cQ as TagInputOption, cR as TagInputProps, cS as Text, cT as TextProps, cU as TextSize, cV as TextTone, cW as TextWeight, cX as Textarea, cY as TextareaProps, cZ as Theme, c_ as TileButton, c$ as TileButtonProps, d0 as TileSize, d1 as TimePicker, d2 as TimePickerProps, d3 as Title, d4 as TitleLevel, d5 as TitleProps, d6 as ToastOptions, d7 as ToastPlacement, d8 as Tooltip, d9 as TooltipProps, da as TopNav, db as TopNavItem, dc as TopNavProps, dd as VERSION, de as appendKey, df as applyThemePrefs, dg as backspace, dh as confirm, di as confirmDestructive, dj as formatDate, dk as fromDateKey, dl as glassStyle, dm as inputClasses, dn as isMac, dp as isSeverityTone, dq as mediaFileName, dr as prompt, ds as resolveTheme, dt as severityOf, du as tabButtonId, dv as tabPanelId, dw as toDateKey, dx as toISODate, dy as toast, dz as useClickOutside, dA as useConfirm, dB as useFocusTrap, dC as useIsMobile, dD as useLocalStoragePrefs, dE as useScrollLock, dF as useShellPrefs, dG as useShellStrings, dH as useTheme } from './index-C_uCjbAh.js';
|
|
3
3
|
import { W as WindowRegistry } from './types-C4Fy2SUD.js';
|
|
4
4
|
export { M as ModalRegistryEntry, P as PageRegistryEntry, a as WindowRegistryEntry, i as isEntityEntry, b as isPageEntry, s as setShellWindowRegistry } from './types-C4Fy2SUD.js';
|
|
5
5
|
import * as react from 'react';
|
|
@@ -1872,6 +1872,17 @@ interface PdfActionButtonProps {
|
|
|
1872
1872
|
onPreviewOpened?: (filename: string) => void;
|
|
1873
1873
|
/** Optional leading icon override for the button (defaults to a document glyph). */
|
|
1874
1874
|
icon?: ReactNode;
|
|
1875
|
+
/**
|
|
1876
|
+
* How long to wait for `fetchPdf()` before giving up, in milliseconds.
|
|
1877
|
+
* Defaults to 30 seconds. Pass `0` (or `Infinity`) to wait for ever.
|
|
1878
|
+
*
|
|
1879
|
+
* This exists because a promise that never settles used to leave the Preview
|
|
1880
|
+
* window on its "LOADING PDF" placeholder indefinitely, so a slow document
|
|
1881
|
+
* and a dead one were indistinguishable to the person waiting. Timing out
|
|
1882
|
+
* turns that silence into a stated failure. The request itself is not
|
|
1883
|
+
* cancelled — the consumer owns the transport (see `withTimeout`).
|
|
1884
|
+
*/
|
|
1885
|
+
timeoutMs?: number;
|
|
1875
1886
|
}
|
|
1876
1887
|
/**
|
|
1877
1888
|
* A dropdown PDF button that can Preview the document in the shell's Preview
|
|
@@ -1885,7 +1896,7 @@ interface PdfActionButtonProps {
|
|
|
1885
1896
|
* recent-documents logging) are lifted to the optional `onEmail` /
|
|
1886
1897
|
* `onPreviewOpened` callbacks.
|
|
1887
1898
|
*/
|
|
1888
|
-
declare function PdfActionButton({ fetchPdf, filename, label, className, disabled, onEmail, onPreviewOpened, icon, }: PdfActionButtonProps): react_jsx_runtime.JSX.Element;
|
|
1899
|
+
declare function PdfActionButton({ fetchPdf, filename, label, className, disabled, onEmail, onPreviewOpened, icon, timeoutMs, }: PdfActionButtonProps): react_jsx_runtime.JSX.Element;
|
|
1889
1900
|
|
|
1890
1901
|
interface ShellAuth {
|
|
1891
1902
|
/** Returns true if the current user has any of the listed permission codes. */
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { PREVIEW_OPENED_EVENT, openPreviewFile } from './chunk-
|
|
1
|
+
import { PREVIEW_OPENED_EVENT, openPreviewFile } from './chunk-GO2LCDHS.js';
|
|
2
2
|
import { subscribePomo, getPomoSnapshot } from './chunk-TT2WNTDS.js';
|
|
3
3
|
export { setShellTodoProvider } from './chunk-TT2WNTDS.js';
|
|
4
4
|
export { ImageAnnotator_default as ImageAnnotator } from './chunk-AXWC3332.js';
|
|
5
5
|
import { publishDesktopFolders, requestFilesTrashView, FolderGlyph, requestFilesDesktopFolderView, FileIconTile } from './chunk-OQ7GRU7G.js';
|
|
6
|
-
import './chunk-
|
|
7
|
-
import { setPdfPreview } from './chunk-
|
|
8
|
-
import { CMD_K, CMD_DOT, SHIFT, MOD, ENTER, CMD_A, ALT_SHIFT_N, ALT_SHIFT_E, CMD_ENTER, CMD_S, ALT_SHIFT_D, CMD_Z, CMD_SHIFT_Z, formatDate, useTheme, GlobalSearch, resolveTheme, useClickOutside, ListLoadError, ListFooter, firstEnabledIndex, Button_default, FormField, Input_default, applyThemePrefs, lastEnabledIndex, nextEnabledIndex, matchTypeahead } from './chunk-
|
|
9
|
-
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, Accordion, AuthScreen, Avatar, AvatarGroup, Banner, BarChart, Button_default as Button, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Calendar, Card, ChatTemplate, Checkbox_default as Checkbox, CheckoutTemplate, ColoredBadge, ContainerFillChart, CountBadge, DashboardTemplate, DataTable, DataTablePage, DatePicker_default as DatePicker, DateRangePicker, DateTimePicker_default as DateTimePicker, DescriptionList, Divider, DonutChart, Drawer, DropdownMenu, ENTER, EmailTemplate, EmptyState, ErrorBoundary, ErrorPage, FilePicker, FormErrorSummary, FormField, FormLayoutPage, GROUP_COLORS, GalleryTemplate, GlobalSearch, Grid, HelpCenter, INPUT_BASE, INPUT_SIZES, IconButton_default as IconButton, Inline, Input_default as Input, InputNumber_default as InputNumber, Kanban, Label, LineChart, ListFooter, ListLoadError, LoadingSpinner, MAX_FRACTION_DIGITS, MOD, Markdown, MediaUploadField, MediaUploadGrid, MetricBar, MilestoneTimeline, NativeSelect, NumericKeypad, PageHeader, Pagination, Paragraph, Radio_default as Radio, Result, SHIFT, SearchableSelect, Segmented, Select_default as Select, SidebarActionButton, SidebarGroupLabel, SidebarNavItem, Skeleton, Sparkline, Stack, StatCard, Statistic, StatusBadge, StatusBadgeProvider, Stepper, Switch_default as Switch, Tabs, TagInput, Text, Textarea_default as Textarea, TileButton_default as TileButton, TimePicker_default as TimePicker, Title, Tooltip, TopNav, appendKey, applyThemePrefs, backspace, formatDate, fromKey as fromDateKey, inputClasses, isMac, isSeverityTone, mediaFileName, resolveTheme, severityOf, tabButtonId, tabPanelId, toKey as toDateKey, toISODate, useClickOutside, useTheme } from './chunk-
|
|
6
|
+
import './chunk-CT3HVZRZ.js';
|
|
7
|
+
import { setPdfPreview } from './chunk-3L463T5H.js';
|
|
8
|
+
import { CMD_K, CMD_DOT, SHIFT, MOD, ENTER, CMD_A, ALT_SHIFT_N, ALT_SHIFT_E, CMD_ENTER, CMD_S, ALT_SHIFT_D, CMD_Z, CMD_SHIFT_Z, formatDate, useTheme, GlobalSearch, resolveTheme, useClickOutside, ListLoadError, ListFooter, firstEnabledIndex, Button_default, FormField, Input_default, applyThemePrefs, lastEnabledIndex, nextEnabledIndex, matchTypeahead } from './chunk-VDKHMCWT.js';
|
|
9
|
+
export { ALT, ALT_SHIFT_D, ALT_SHIFT_E, ALT_SHIFT_N, Accordion, AuthScreen, Avatar, AvatarGroup, Banner, BarChart, Button_default as Button, CMD_A, CMD_DOT, CMD_ENTER, CMD_K, CMD_S, Calendar, Card, ChatTemplate, Checkbox_default as Checkbox, CheckoutTemplate, ColoredBadge, ContainerFillChart, CountBadge, DashboardTemplate, DataTable, DataTablePage, DatePicker_default as DatePicker, DateRangePicker, DateTimePicker_default as DateTimePicker, DescriptionList, Divider, DonutChart, Drawer, DropdownMenu, ENTER, EmailTemplate, EmptyState, ErrorBoundary, ErrorPage, FilePicker, FormErrorSummary, FormField, FormLayoutPage, GROUP_COLORS, GalleryTemplate, GlobalSearch, Grid, HelpCenter, INPUT_BASE, INPUT_SIZES, IconButton_default as IconButton, Inline, Input_default as Input, InputNumber_default as InputNumber, Kanban, Label, LineChart, ListFooter, ListLoadError, LoadingSpinner, MAX_FRACTION_DIGITS, MOD, Markdown, MediaUploadField, MediaUploadGrid, MetricBar, MilestoneTimeline, NativeSelect, NumericKeypad, PageHeader, Pagination, Paragraph, Radio_default as Radio, Result, SHIFT, SearchableSelect, Segmented, Select_default as Select, SidebarActionButton, SidebarGroupLabel, SidebarNavItem, Skeleton, Sparkline, Stack, StatCard, Statistic, StatusBadge, StatusBadgeProvider, Stepper, Switch_default as Switch, Tabs, TagInput, Text, Textarea_default as Textarea, TileButton_default as TileButton, TimePicker_default as TimePicker, Title, Tooltip, TopNav, appendKey, applyThemePrefs, backspace, formatDate, fromKey as fromDateKey, inputClasses, isMac, isSeverityTone, mediaFileName, resolveTheme, severityOf, tabButtonId, tabPanelId, toKey as toDateKey, toISODate, useClickOutside, useTheme } from './chunk-VDKHMCWT.js';
|
|
10
10
|
export { Breadcrumbs } from './chunk-HNH7FOYB.js';
|
|
11
11
|
import { withSpareRow, EditableGrid } from './chunk-DC6BYGZ6.js';
|
|
12
12
|
export { EditableGrid } from './chunk-DC6BYGZ6.js';
|
|
@@ -14,13 +14,13 @@ import { SidebarLayout } from './chunk-YG45DAUT.js';
|
|
|
14
14
|
export { SidebarLayout } from './chunk-YG45DAUT.js';
|
|
15
15
|
import { toast_default } from './chunk-2VM2FRZJ.js';
|
|
16
16
|
export { toast_default as toast } from './chunk-2VM2FRZJ.js';
|
|
17
|
-
import { APP_VERSION, VERSION } from './chunk-
|
|
18
|
-
export { VERSION } from './chunk-
|
|
17
|
+
import { APP_VERSION, VERSION } from './chunk-UWLJI2O7.js';
|
|
18
|
+
export { VERSION } from './chunk-UWLJI2O7.js';
|
|
19
19
|
import { playNotification, playStartup, soundsEnabled, getSoundConfig, SOUND_PACK_KEYS, SOUND_PACKS, SOUND_TYPES, SOUND_TYPE_LABELS, setSoundForType, previewSound, setAllSounds, playLogout } from './chunk-D7PYW2QS.js';
|
|
20
20
|
import { useAuth } from './chunk-EWDYCO65.js';
|
|
21
21
|
export { setShellAuthBridge } from './chunk-EWDYCO65.js';
|
|
22
|
-
import { cancelWindowFront, requestWindowFront, useWindowManager, WINDOW_REGISTRY, isPageEntry, Modal, setPerfCollecting, drainPerfEvents, markMenuOpen, SIDEBAR_STRIP_W, forgetMaximizedWindowBoxes, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, useUndo, useEnclosingModalId, CancelButton, setWindowPosition } from './chunk-
|
|
23
|
-
export { CancelButton, CopyButton, DocFavStar, MODAL_SUBMIT_SELECTOR, Modal, ModalActions, UndoProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, beginWindowGesture, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, markMenuOpen, requestWindowFront, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useEnclosingModalId, useIsActiveWindow, useModalActive, useUndo, useUndoable, useUndoableState, useWidgetSettings, useWindowDirty, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-
|
|
22
|
+
import { cancelWindowFront, requestWindowFront, useWindowManager, WINDOW_REGISTRY, isPageEntry, Modal, setPerfCollecting, drainPerfEvents, markMenuOpen, SIDEBAR_STRIP_W, forgetMaximizedWindowBoxes, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, useUndo, useEnclosingModalId, CancelButton, setWindowPosition } from './chunk-EXSEW5F3.js';
|
|
23
|
+
export { CancelButton, CopyButton, DocFavStar, MODAL_SUBMIT_SELECTOR, Modal, ModalActions, UndoProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, beginWindowGesture, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, markMenuOpen, requestWindowFront, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useEnclosingModalId, useIsActiveWindow, useModalActive, useUndo, useUndoable, useUndoableState, useWidgetSettings, useWindowDirty, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-EXSEW5F3.js';
|
|
24
24
|
import { useShellStrings, useShellPrefs, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, useIsMobile } from './chunk-BLLINYDD.js';
|
|
25
25
|
export { DEFAULT_SHELL_STRINGS, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, ShellStringsProvider, useIsMobile, useLocalStoragePrefs, useShellPrefs, useShellStrings } from './chunk-BLLINYDD.js';
|
|
26
26
|
import { registerModalEscapeInterceptor } from './chunk-CDR2Q64Q.js';
|
|
@@ -341,14 +341,14 @@ function NotificationBell({
|
|
|
341
341
|
] })
|
|
342
342
|
] }) }),
|
|
343
343
|
/* @__PURE__ */ jsx(PopupMenuDivider, {}),
|
|
344
|
-
/* @__PURE__ */ jsx("div", { className: "overflow-y-auto", style: { flex: "1 1 auto", minHeight: 0 }, children: notifications.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-8 px-4 text-center", children: [
|
|
344
|
+
/* @__PURE__ */ jsx("div", { className: "overflow-y-auto overflow-x-hidden", style: { flex: "1 1 auto", minHeight: 0 }, children: notifications.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-8 px-4 text-center", children: [
|
|
345
345
|
/* @__PURE__ */ jsx("svg", { className: "h-8 w-8 text-gray-300 mb-2", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }),
|
|
346
346
|
/* @__PURE__ */ jsx("p", { className: "text-sm text-gray-600 font-medium", children: strings.caughtUp }),
|
|
347
347
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-gray-400 mt-0.5", children: strings.empty })
|
|
348
348
|
] }) : notifications.map((notif) => /* @__PURE__ */ jsxs(PopupMenuItem, { onClick: () => handleClick(notif), children: [
|
|
349
349
|
/* @__PURE__ */ jsx("div", { className: "pt-0.5 shrink-0", children: !notif.is_read ? /* @__PURE__ */ jsx("div", { className: "h-2 w-2 rounded-full bg-blue-500" }) : /* @__PURE__ */ jsx("div", { className: "h-2 w-2" }) }),
|
|
350
350
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
351
|
-
/* @__PURE__ */ jsx("p", { className: `text-sm leading-tight ${!notif.is_read ? "font-medium" : ""}`, children: notif.title }),
|
|
351
|
+
/* @__PURE__ */ jsx("p", { className: `text-sm leading-tight break-words ${!notif.is_read ? "font-medium" : ""}`, children: notif.title }),
|
|
352
352
|
notif.message && /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 mt-0.5 truncate", children: notif.message }),
|
|
353
353
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-1", children: [
|
|
354
354
|
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-gray-400", children: timeAgo(notif.created_at) }),
|
|
@@ -2866,7 +2866,7 @@ function StartMenu({
|
|
|
2866
2866
|
)
|
|
2867
2867
|
] })
|
|
2868
2868
|
] }),
|
|
2869
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-400 text-center py-12", children: "No matching apps" }) : filtered.map(({ item, sectionLabel }, i) => {
|
|
2869
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden wrap-anywhere", children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-400 text-center py-12", children: "No matching apps" }) : filtered.map(({ item, sectionLabel }, i) => {
|
|
2870
2870
|
const icon = navIcons2[item.to];
|
|
2871
2871
|
return /* @__PURE__ */ jsxs(
|
|
2872
2872
|
"button",
|
|
@@ -3049,7 +3049,7 @@ function StartMenu({
|
|
|
3049
3049
|
] })
|
|
3050
3050
|
}
|
|
3051
3051
|
),
|
|
3052
|
-
search.length >= 2 ? /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-1 pb-2 max-h-[400px]", children: searchResults.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-400 text-center py-4", children: "No results" }) : searchResults.map((r, i) => /* @__PURE__ */ jsxs(
|
|
3052
|
+
search.length >= 2 ? /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto overflow-x-hidden wrap-anywhere px-1 pb-2 max-h-[400px]", children: searchResults.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-400 text-center py-4", children: "No results" }) : searchResults.map((r, i) => /* @__PURE__ */ jsxs(
|
|
3053
3053
|
"button",
|
|
3054
3054
|
{
|
|
3055
3055
|
onClick: () => handleClick(r.to),
|
|
@@ -3062,7 +3062,7 @@ function StartMenu({
|
|
|
3062
3062
|
]
|
|
3063
3063
|
},
|
|
3064
3064
|
i
|
|
3065
|
-
)) }) : /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-1 pb-1 flex flex-col", children: [
|
|
3065
|
+
)) }) : /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto overflow-x-hidden wrap-anywhere px-1 pb-1 flex flex-col", children: [
|
|
3066
3066
|
isVertical && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3067
3067
|
footerItems.map((item) => /* @__PURE__ */ jsxs(
|
|
3068
3068
|
"button",
|
|
@@ -3174,7 +3174,7 @@ function StartMenu({
|
|
|
3174
3174
|
style: menuGlass,
|
|
3175
3175
|
onMouseEnter: () => scheduleClose(i + 1),
|
|
3176
3176
|
onMouseLeave: () => scheduleClose(i),
|
|
3177
|
-
children: /* @__PURE__ */ jsx("div", { className: "py-1 px-1 overflow-y-auto overscroll-contain", style: { maxHeight: availH }, children: items.map((item) => {
|
|
3177
|
+
children: /* @__PURE__ */ jsx("div", { className: "py-1 px-1 overflow-y-auto overflow-x-hidden wrap-anywhere overscroll-contain", style: { maxHeight: availH }, children: items.map((item) => {
|
|
3178
3178
|
const kids = submenuItems(item);
|
|
3179
3179
|
const isOpen = openPath[i + 1]?.key === item.to;
|
|
3180
3180
|
return /* @__PURE__ */ jsxs(
|
|
@@ -6855,6 +6855,24 @@ function ChangePasswordForm({
|
|
|
6855
6855
|
] }) })
|
|
6856
6856
|
] });
|
|
6857
6857
|
}
|
|
6858
|
+
|
|
6859
|
+
// src/shell/withTimeout.ts
|
|
6860
|
+
var TIMED_OUT = /* @__PURE__ */ Symbol("react-os-shell:timed-out");
|
|
6861
|
+
async function withTimeout(work, ms) {
|
|
6862
|
+
if (!Number.isFinite(ms) || ms <= 0) return work;
|
|
6863
|
+
let timer;
|
|
6864
|
+
try {
|
|
6865
|
+
return await Promise.race([
|
|
6866
|
+
work,
|
|
6867
|
+
new Promise((resolve) => {
|
|
6868
|
+
timer = setTimeout(() => resolve(TIMED_OUT), ms);
|
|
6869
|
+
})
|
|
6870
|
+
]);
|
|
6871
|
+
} finally {
|
|
6872
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
6873
|
+
}
|
|
6874
|
+
}
|
|
6875
|
+
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
6858
6876
|
var DEFAULT_BUTTON_CLASS = "inline-flex items-center gap-1.5 bg-white text-gray-700 border border-gray-300 px-3 py-1.5 text-sm font-medium rounded-lg hover:bg-gray-50 disabled:opacity-50";
|
|
6859
6877
|
var DocumentIcon = /* @__PURE__ */ jsx("svg", { className: "h-4 w-4 text-gray-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" }) });
|
|
6860
6878
|
function PdfActionButton({
|
|
@@ -6865,7 +6883,8 @@ function PdfActionButton({
|
|
|
6865
6883
|
disabled,
|
|
6866
6884
|
onEmail,
|
|
6867
6885
|
onPreviewOpened,
|
|
6868
|
-
icon
|
|
6886
|
+
icon,
|
|
6887
|
+
timeoutMs = DEFAULT_TIMEOUT_MS
|
|
6869
6888
|
}) {
|
|
6870
6889
|
const [open, setOpen] = useState(false);
|
|
6871
6890
|
const [loading, setLoading] = useState(false);
|
|
@@ -6881,7 +6900,7 @@ function PdfActionButton({
|
|
|
6881
6900
|
const resolvePdf = async () => {
|
|
6882
6901
|
setLoading(true);
|
|
6883
6902
|
try {
|
|
6884
|
-
return await fetchPdf();
|
|
6903
|
+
return await withTimeout(fetchPdf(), timeoutMs);
|
|
6885
6904
|
} finally {
|
|
6886
6905
|
setLoading(false);
|
|
6887
6906
|
}
|
|
@@ -6889,6 +6908,10 @@ function PdfActionButton({
|
|
|
6889
6908
|
const handleDownload = async () => {
|
|
6890
6909
|
setOpen(false);
|
|
6891
6910
|
const blob = await resolvePdf();
|
|
6911
|
+
if (blob === TIMED_OUT) {
|
|
6912
|
+
toast_default.error(`${filename} took too long to load. Please try again.`);
|
|
6913
|
+
return;
|
|
6914
|
+
}
|
|
6892
6915
|
if (!blob) return;
|
|
6893
6916
|
const url = window.URL.createObjectURL(blob);
|
|
6894
6917
|
const a = document.createElement("a");
|
|
@@ -6903,6 +6926,14 @@ function PdfActionButton({
|
|
|
6903
6926
|
const handle = setPdfPreview({ filename, converting: true, convertingMessage: "LOADING PDF" });
|
|
6904
6927
|
openPage("/preview");
|
|
6905
6928
|
const blob = await resolvePdf();
|
|
6929
|
+
if (blob === TIMED_OUT) {
|
|
6930
|
+
handle.update({
|
|
6931
|
+
filename,
|
|
6932
|
+
converting: false,
|
|
6933
|
+
convertingMessage: "This document took too long to load. Close this window and try again."
|
|
6934
|
+
});
|
|
6935
|
+
return;
|
|
6936
|
+
}
|
|
6906
6937
|
if (!blob) {
|
|
6907
6938
|
handle.update({ filename, converting: false, convertingMessage: "Failed to load PDF." });
|
|
6908
6939
|
return;
|
|
@@ -6914,6 +6945,10 @@ function PdfActionButton({
|
|
|
6914
6945
|
const handleEmail = async () => {
|
|
6915
6946
|
setOpen(false);
|
|
6916
6947
|
const blob = await resolvePdf();
|
|
6948
|
+
if (blob === TIMED_OUT) {
|
|
6949
|
+
toast_default.error(`${filename} took too long to load. Please try again.`);
|
|
6950
|
+
return;
|
|
6951
|
+
}
|
|
6917
6952
|
if (!blob || !onEmail) return;
|
|
6918
6953
|
onEmail(blob);
|
|
6919
6954
|
};
|