react-os-shell 4.1.3 → 4.1.5

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 (43) hide show
  1. package/dist/{Browser-XUBVGSAU.js → Browser-KHY7MXD4.js} +5 -5
  2. package/dist/{Browser-XUBVGSAU.js.map → Browser-KHY7MXD4.js.map} +1 -1
  3. package/dist/{Calculator-YI4FFJNC.js → Calculator-EIKUYW6O.js} +4 -4
  4. package/dist/{Calculator-YI4FFJNC.js.map → Calculator-EIKUYW6O.js.map} +1 -1
  5. package/dist/ConfirmDialog-C25OKJZP.js +4 -0
  6. package/dist/{ConfirmDialog-774RXRGC.js.map → ConfirmDialog-C25OKJZP.js.map} +1 -1
  7. package/dist/{CurrencyConverter-LUX2UEHY.js → CurrencyConverter-PJUTWMCD.js} +4 -4
  8. package/dist/{CurrencyConverter-LUX2UEHY.js.map → CurrencyConverter-PJUTWMCD.js.map} +1 -1
  9. package/dist/{Documents-LO76T67B.js → Documents-KI6IZA6A.js} +5 -5
  10. package/dist/{Documents-LO76T67B.js.map → Documents-KI6IZA6A.js.map} +1 -1
  11. package/dist/{Files-JA26E7LT.js → Files-XDN7W7S7.js} +5 -5
  12. package/dist/{Files-JA26E7LT.js.map → Files-XDN7W7S7.js.map} +1 -1
  13. package/dist/{Notepad-CDB5AOED.js → Notepad-STWMTAB6.js} +5 -5
  14. package/dist/{Notepad-CDB5AOED.js.map → Notepad-STWMTAB6.js.map} +1 -1
  15. package/dist/{PomodoroTimer-XPG5D63T.js → PomodoroTimer-K5NBAIVW.js} +5 -5
  16. package/dist/{PomodoroTimer-XPG5D63T.js.map → PomodoroTimer-K5NBAIVW.js.map} +1 -1
  17. package/dist/{Preview-CVP4RXD5.js → Preview-73KK2YVP.js} +5 -5
  18. package/dist/{Preview-CVP4RXD5.js.map → Preview-73KK2YVP.js.map} +1 -1
  19. package/dist/{Spreadsheet-HJTRTQQU.js → Spreadsheet-YLVGNQ43.js} +5 -5
  20. package/dist/{Spreadsheet-HJTRTQQU.js.map → Spreadsheet-YLVGNQ43.js.map} +1 -1
  21. package/dist/{Stock-7QVYY7WE.js → Stock-2XTWWH6K.js} +4 -4
  22. package/dist/{Stock-7QVYY7WE.js.map → Stock-2XTWWH6K.js.map} +1 -1
  23. package/dist/{Weather-UESMYSNG.js → Weather-GCBITKTJ.js} +4 -4
  24. package/dist/{Weather-UESMYSNG.js.map → Weather-GCBITKTJ.js.map} +1 -1
  25. package/dist/{WorldClock-UONWHVMF.js → WorldClock-S52UINCL.js} +4 -4
  26. package/dist/{WorldClock-UONWHVMF.js.map → WorldClock-S52UINCL.js.map} +1 -1
  27. package/dist/apps/index.js +15 -15
  28. package/dist/{chunk-N36CKRJH.js → chunk-DF4MTEZD.js} +4 -4
  29. package/dist/{chunk-N36CKRJH.js.map → chunk-DF4MTEZD.js.map} +1 -1
  30. package/dist/{chunk-AT2OO6B4.js → chunk-IGYB3NRR.js} +3 -3
  31. package/dist/{chunk-AT2OO6B4.js.map → chunk-IGYB3NRR.js.map} +1 -1
  32. package/dist/chunk-IMKD43E3.js +7 -0
  33. package/dist/{chunk-HWOOGLDG.js.map → chunk-IMKD43E3.js.map} +1 -1
  34. package/dist/{chunk-C7AKG4RE.js → chunk-QAVN7ZV5.js} +3 -3
  35. package/dist/{chunk-C7AKG4RE.js.map → chunk-QAVN7ZV5.js.map} +1 -1
  36. package/dist/{chunk-OGL3C2T2.js → chunk-URHWXWZE.js} +12 -10
  37. package/dist/chunk-URHWXWZE.js.map +1 -0
  38. package/dist/index.js +46 -15
  39. package/dist/index.js.map +1 -1
  40. package/package.json +1 -1
  41. package/dist/ConfirmDialog-774RXRGC.js +0 -4
  42. package/dist/chunk-HWOOGLDG.js +0 -7
  43. package/dist/chunk-OGL3C2T2.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { subscribePomo, getPomoSnapshot } from './chunk-AT2OO6B4.js';
2
- export { setShellTodoProvider } from './chunk-AT2OO6B4.js';
1
+ import { subscribePomo, getPomoSnapshot } from './chunk-IGYB3NRR.js';
2
+ export { setShellTodoProvider } from './chunk-IGYB3NRR.js';
3
3
  export { ImageAnnotator_default as ImageAnnotator } from './chunk-QU5L5ZYM.js';
4
4
  import { PREVIEW_OPENED_EVENT, openPreviewFile } from './chunk-DINNWYVB.js';
5
5
  export { Breadcrumbs } from './chunk-DINNWYVB.js';
@@ -15,10 +15,10 @@ export { ShellAuthProvider, setShellAuthBridge, useShellAuth } from './chunk-ADJ
15
15
  import { EditableGrid } from './chunk-GP4Y3VCB.js';
16
16
  export { EditableGrid } from './chunk-GP4Y3VCB.js';
17
17
  import './chunk-4SQU5YV6.js';
18
- import { APP_VERSION, VERSION } from './chunk-HWOOGLDG.js';
19
- export { VERSION } from './chunk-HWOOGLDG.js';
20
- import { registerModalEscapeInterceptor, useIsMobile, useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, SIDEBAR_STRIP_W, forgetMaximizedWindowBoxes, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, CancelButton, setWindowPosition } from './chunk-OGL3C2T2.js';
21
- export { CancelButton, ConfirmProvider, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, commitExposeHighlight, confirm, confirmDestructive, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, prompt, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-OGL3C2T2.js';
18
+ import { APP_VERSION, VERSION } from './chunk-IMKD43E3.js';
19
+ export { VERSION } from './chunk-IMKD43E3.js';
20
+ import { registerModalEscapeInterceptor, useIsMobile, useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, SIDEBAR_STRIP_W, forgetMaximizedWindowBoxes, ModalActions, useModalActive, client_default, LoadingSpinner, isShellApiClientConfigured, CancelButton, setWindowPosition } from './chunk-URHWXWZE.js';
21
+ export { CancelButton, ConfirmProvider, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, commitExposeHighlight, confirm, confirmDestructive, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, prompt, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-URHWXWZE.js';
22
22
  import { glassStyle, startMenuCategories, navSections, isSection, GLASS_INPUT_BG, navIcons, isReachable, sectionIcons, visibleChildren } from './chunk-6Q4KYGMH.js';
23
23
  export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, setShellNavIcons } from './chunk-6Q4KYGMH.js';
24
24
  import { createContext, lazy, forwardRef, useCallback, useState, useRef, useId, useEffect, useLayoutEffect, useMemo, useContext, isValidElement, cloneElement, Suspense, Fragment as Fragment$1, Children, useSyncExternalStore } from 'react';
@@ -6379,6 +6379,8 @@ function mediaFileName(url) {
6379
6379
  var VIDEO_EXT_RE = /\.(mp4|webm|ogg|ogv|mov|m4v)(\?|#|$)/i;
6380
6380
  function isVideoUrl(url, accept = "") {
6381
6381
  if (!url) return false;
6382
+ const data = DATA_URL_RE.exec(url);
6383
+ if (data) return data[1].toLowerCase() === "video";
6382
6384
  const acceptsVideo = accept.includes("video");
6383
6385
  const acceptsImage = accept.includes("image") || accept === "*" || accept === "";
6384
6386
  return VIDEO_EXT_RE.test(url) || acceptsVideo && !acceptsImage;
@@ -7578,10 +7580,27 @@ function PlainFilter({ filter, value, onChange }) {
7578
7580
  className: `flex items-center gap-1.5 border rounded-lg px-2.5 py-1.5 text-sm transition-colors ${value ? "border-blue-400 bg-blue-50 text-blue-700" : "border-gray-300 text-gray-600 hover:border-gray-400"}`,
7579
7581
  children: [
7580
7582
  /* @__PURE__ */ jsx("span", { className: "truncate max-w-[140px]", children: selectedLabel || filter.label }),
7581
- value ? /* @__PURE__ */ jsx("button", { type: "button", onClick: (e) => {
7582
- e.stopPropagation();
7583
- onChange("");
7584
- }, className: "text-blue-400 hover:text-blue-600", children: /* @__PURE__ */ jsx(XMarkIcon, { className: "h-3.5 w-3.5" }) }) : /* @__PURE__ */ jsx("svg", { className: `h-3.5 w-3.5 text-gray-400 transition-transform ${open ? "rotate-180" : ""}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) })
7583
+ value ? (
7584
+ // A span, not a button: this lives INSIDE the combobox <button>, and
7585
+ // `<button>` inside `<button>` is invalid HTML — React logs "cannot
7586
+ // be a descendant of" and warns of a hydration error. It stays out of
7587
+ // the a11y tree because clearing is already a first-class keyboard
7588
+ // action: index 0 of the listbox is the "All" entry (value ''). A
7589
+ // nested control here would only pad the combobox's accessible name
7590
+ // with an affordance Tab can't reach.
7591
+ /* @__PURE__ */ jsx(
7592
+ "span",
7593
+ {
7594
+ "aria-hidden": "true",
7595
+ onClick: (e) => {
7596
+ e.stopPropagation();
7597
+ onChange("");
7598
+ },
7599
+ className: "cursor-pointer text-blue-400 hover:text-blue-600",
7600
+ children: /* @__PURE__ */ jsx(XMarkIcon, { className: "h-3.5 w-3.5" })
7601
+ }
7602
+ )
7603
+ ) : /* @__PURE__ */ jsx("svg", { className: `h-3.5 w-3.5 text-gray-400 transition-transform ${open ? "rotate-180" : ""}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) })
7585
7604
  ]
7586
7605
  }
7587
7606
  ),
@@ -7625,11 +7644,23 @@ function SearchableFilter({ filter, value, onChange }) {
7625
7644
  className: `flex items-center gap-1.5 border rounded-lg px-2.5 py-1.5 text-sm transition-colors ${value ? "border-blue-400 bg-blue-50 text-blue-700" : "border-gray-300 text-gray-600 hover:border-gray-400"}`,
7626
7645
  children: [
7627
7646
  /* @__PURE__ */ jsx("span", { className: "truncate max-w-[140px]", children: selectedLabel || filter.label }),
7628
- value ? /* @__PURE__ */ jsx("button", { onClick: (e) => {
7629
- e.stopPropagation();
7630
- onChange("");
7631
- setSearch("");
7632
- }, className: "text-blue-400 hover:text-blue-600", children: /* @__PURE__ */ jsx(XMarkIcon, { className: "h-3.5 w-3.5" }) }) : /* @__PURE__ */ jsx("svg", { className: `h-3.5 w-3.5 text-gray-400 transition-transform ${open ? "rotate-180" : ""}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) })
7647
+ value ? (
7648
+ // Same nested-button fix as PlainFilter — the dropdown's leading
7649
+ // "All" button is the keyboard path to the same clear.
7650
+ /* @__PURE__ */ jsx(
7651
+ "span",
7652
+ {
7653
+ "aria-hidden": "true",
7654
+ onClick: (e) => {
7655
+ e.stopPropagation();
7656
+ onChange("");
7657
+ setSearch("");
7658
+ },
7659
+ className: "cursor-pointer text-blue-400 hover:text-blue-600",
7660
+ children: /* @__PURE__ */ jsx(XMarkIcon, { className: "h-3.5 w-3.5" })
7661
+ }
7662
+ )
7663
+ ) : /* @__PURE__ */ jsx("svg", { className: `h-3.5 w-3.5 text-gray-400 transition-transform ${open ? "rotate-180" : ""}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" }) })
7633
7664
  ]
7634
7665
  }
7635
7666
  ),