@flamingo-stack/openframe-frontend-core 0.0.313-snapshot.20260623203621 → 0.0.313

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 (108) hide show
  1. package/dist/{chunk-ZPK5HW7B.cjs → chunk-2ZHDP22R.cjs} +3 -3
  2. package/dist/{chunk-ZPK5HW7B.cjs.map → chunk-2ZHDP22R.cjs.map} +1 -1
  3. package/dist/{chunk-NH2RY6VM.js → chunk-66JU4VP2.js} +3 -15
  4. package/dist/{chunk-NH2RY6VM.js.map → chunk-66JU4VP2.js.map} +1 -1
  5. package/dist/{chunk-OD3BEWDQ.js → chunk-6FZD5KFP.js} +3 -3
  6. package/dist/{chunk-WJCOWYAP.cjs → chunk-BFNTSETG.cjs} +14 -14
  7. package/dist/{chunk-WJCOWYAP.cjs.map → chunk-BFNTSETG.cjs.map} +1 -1
  8. package/dist/{chunk-BHOGI57O.cjs → chunk-BFSKFC6S.cjs} +38 -38
  9. package/dist/{chunk-BHOGI57O.cjs.map → chunk-BFSKFC6S.cjs.map} +1 -1
  10. package/dist/{chunk-JWX6NIQ4.js → chunk-BVDHLEP2.js} +2 -2
  11. package/dist/{chunk-46UZAYUT.cjs → chunk-DDLJTRF4.cjs} +29 -29
  12. package/dist/{chunk-46UZAYUT.cjs.map → chunk-DDLJTRF4.cjs.map} +1 -1
  13. package/dist/{chunk-VCJOLKED.cjs → chunk-DE2BQKQV.cjs} +12 -12
  14. package/dist/{chunk-VCJOLKED.cjs.map → chunk-DE2BQKQV.cjs.map} +1 -1
  15. package/dist/{chunk-XKVSR3IV.js → chunk-E6BHNYTA.js} +4 -4
  16. package/dist/{chunk-UO27TVAO.js → chunk-FXTT7K3A.js} +3 -3
  17. package/dist/{chunk-5ATH263N.cjs → chunk-G56GYN7Z.cjs} +1 -4
  18. package/dist/chunk-G56GYN7Z.cjs.map +1 -0
  19. package/dist/{chunk-DD35H7HA.cjs → chunk-GHK2FCIM.cjs} +40 -40
  20. package/dist/{chunk-DD35H7HA.cjs.map → chunk-GHK2FCIM.cjs.map} +1 -1
  21. package/dist/{chunk-E4CQ4RUG.js → chunk-JQ2EYXWR.js} +1 -4
  22. package/dist/chunk-JQ2EYXWR.js.map +1 -0
  23. package/dist/{chunk-TRSDXD23.js → chunk-JQLC2FVM.js} +2 -2
  24. package/dist/{chunk-BJ6JXN5Z.js → chunk-OZYAAJHM.js} +5 -5
  25. package/dist/{chunk-UNKIRZVY.cjs → chunk-REHUG3RH.cjs} +19 -19
  26. package/dist/{chunk-UNKIRZVY.cjs.map → chunk-REHUG3RH.cjs.map} +1 -1
  27. package/dist/{chunk-E2LC43T3.js → chunk-RM3M3SZ6.js} +2 -2
  28. package/dist/{chunk-ZW3NHMG7.js → chunk-SPFGSUNE.js} +3 -3
  29. package/dist/{chunk-EC4DGRN6.cjs → chunk-SQQXCVZZ.cjs} +53 -65
  30. package/dist/chunk-SQQXCVZZ.cjs.map +1 -0
  31. package/dist/{chunk-AD7TII2A.cjs → chunk-XHGE5XBH.cjs} +5 -5
  32. package/dist/{chunk-AD7TII2A.cjs.map → chunk-XHGE5XBH.cjs.map} +1 -1
  33. package/dist/{chunk-L7BROXZ7.js → chunk-YI2ACYRX.js} +2 -2
  34. package/dist/{chunk-2LFQJYLQ.cjs → chunk-YSMKPNYZ.cjs} +7 -7
  35. package/dist/{chunk-2LFQJYLQ.cjs.map → chunk-YSMKPNYZ.cjs.map} +1 -1
  36. package/dist/components/case-studies/index.cjs +9 -9
  37. package/dist/components/case-studies/index.js +3 -3
  38. package/dist/components/chat/index.cjs +3 -3
  39. package/dist/components/chat/index.js +2 -2
  40. package/dist/components/contact/index.cjs +4 -4
  41. package/dist/components/contact/index.js +3 -3
  42. package/dist/components/docs/index.cjs +6 -6
  43. package/dist/components/docs/index.js +5 -5
  44. package/dist/components/embeds/index.cjs +4 -4
  45. package/dist/components/embeds/index.js +3 -3
  46. package/dist/components/faq/index.cjs +5 -5
  47. package/dist/components/faq/index.js +4 -4
  48. package/dist/components/features/index.cjs +3 -3
  49. package/dist/components/features/index.js +2 -2
  50. package/dist/components/index.cjs +188 -190
  51. package/dist/components/index.cjs.map +1 -1
  52. package/dist/components/index.js +10 -12
  53. package/dist/components/index.js.map +1 -1
  54. package/dist/components/layout/page-layout.d.ts +1 -1
  55. package/dist/components/layout/page-layout.d.ts.map +1 -1
  56. package/dist/components/layout/title-block.d.ts +0 -10
  57. package/dist/components/layout/title-block.d.ts.map +1 -1
  58. package/dist/components/navigation/index.cjs +3 -3
  59. package/dist/components/navigation/index.js +2 -2
  60. package/dist/components/onboarding-guides/index.cjs +29 -29
  61. package/dist/components/onboarding-guides/index.js +5 -5
  62. package/dist/components/related-content/index.cjs +5 -5
  63. package/dist/components/related-content/index.js +4 -4
  64. package/dist/components/tickets/help-center-list.d.ts +1 -5
  65. package/dist/components/tickets/help-center-list.d.ts.map +1 -1
  66. package/dist/components/tickets/index.cjs +73 -84
  67. package/dist/components/tickets/index.cjs.map +1 -1
  68. package/dist/components/tickets/index.js +10 -21
  69. package/dist/components/tickets/index.js.map +1 -1
  70. package/dist/components/tool-icon.d.ts.map +1 -1
  71. package/dist/components/ui/index.cjs +3 -5
  72. package/dist/components/ui/index.cjs.map +1 -1
  73. package/dist/components/ui/index.js +2 -4
  74. package/dist/hooks/index.cjs +2 -2
  75. package/dist/hooks/index.js +1 -1
  76. package/dist/index.cjs +3 -5
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +2 -4
  79. package/dist/types/index.cjs +0 -2
  80. package/dist/types/index.cjs.map +1 -1
  81. package/dist/types/index.js +0 -2
  82. package/dist/types/index.js.map +1 -1
  83. package/dist/types/tool.types.d.ts +0 -1
  84. package/dist/types/tool.types.d.ts.map +1 -1
  85. package/dist/utils/index.cjs +0 -11
  86. package/dist/utils/index.cjs.map +1 -1
  87. package/dist/utils/index.js +0 -11
  88. package/dist/utils/index.js.map +1 -1
  89. package/dist/utils/tool-utils.d.ts.map +1 -1
  90. package/package.json +1 -1
  91. package/src/components/layout/page-layout.tsx +1 -1
  92. package/src/components/layout/title-block.tsx +1 -12
  93. package/src/components/tickets/help-center-list.tsx +4 -16
  94. package/src/components/tool-icon.tsx +0 -1
  95. package/src/types/tool.types.ts +0 -2
  96. package/src/utils/tool-utils.ts +0 -11
  97. package/dist/chunk-5ATH263N.cjs.map +0 -1
  98. package/dist/chunk-E4CQ4RUG.js.map +0 -1
  99. package/dist/chunk-EC4DGRN6.cjs.map +0 -1
  100. /package/dist/{chunk-OD3BEWDQ.js.map → chunk-6FZD5KFP.js.map} +0 -0
  101. /package/dist/{chunk-JWX6NIQ4.js.map → chunk-BVDHLEP2.js.map} +0 -0
  102. /package/dist/{chunk-XKVSR3IV.js.map → chunk-E6BHNYTA.js.map} +0 -0
  103. /package/dist/{chunk-UO27TVAO.js.map → chunk-FXTT7K3A.js.map} +0 -0
  104. /package/dist/{chunk-TRSDXD23.js.map → chunk-JQLC2FVM.js.map} +0 -0
  105. /package/dist/{chunk-BJ6JXN5Z.js.map → chunk-OZYAAJHM.js.map} +0 -0
  106. /package/dist/{chunk-E2LC43T3.js.map → chunk-RM3M3SZ6.js.map} +0 -0
  107. /package/dist/{chunk-ZW3NHMG7.js.map → chunk-SPFGSUNE.js.map} +0 -0
  108. /package/dist/{chunk-L7BROXZ7.js.map → chunk-YI2ACYRX.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
- var _chunk5ATH263Ncjs = require('./chunk-5ATH263N.cjs');
4
+ var _chunkG56GYN7Zcjs = require('./chunk-G56GYN7Z.cjs');
5
5
 
6
6
  // src/hooks/use-self-fetch.ts
7
7
  var _react = require('react');
@@ -27,7 +27,7 @@ function useSelfFetch(url, options) {
27
27
  try {
28
28
  setIsLoading(true);
29
29
  setError(false);
30
- const res = await _chunk5ATH263Ncjs.contentFetch.call(void 0, url, { signal: ctrl.signal });
30
+ const res = await _chunkG56GYN7Zcjs.contentFetch.call(void 0, url, { signal: ctrl.signal });
31
31
  if (!res.ok) throw new Error(`Request failed (${res.status})`);
32
32
  const json = await res.json();
33
33
  if (!cancelled) {
@@ -65,4 +65,4 @@ function useSelfFetch(url, options) {
65
65
 
66
66
 
67
67
  exports.useSelfFetch = useSelfFetch;
68
- //# sourceMappingURL=chunk-ZPK5HW7B.cjs.map
68
+ //# sourceMappingURL=chunk-2ZHDP22R.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-ZPK5HW7B.cjs","../src/hooks/use-self-fetch.ts"],"names":[],"mappings":"AAAA,6rBAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACA;ACHA,8BAAgF;AAmCzE,SAAS,YAAA,CACd,GAAA,EACA,OAAA,EACuB;AACvB,EAAA,MAAM,YAAA,kBAAc,OAAA,2BAAS,aAAA;AAC7B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,EAAA,EAAI,6BAAA,iBAAmB,WAAA,UAAe,MAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA,YAAS,IAAgB,KAAA,EAAA,GAAa,IAAA,IAAQ,IAAI,CAAA;AACpF,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,EAAA,EAAI,6BAAA,KAAc,CAAA;AACxC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA,CAAU,CAAA;AAM5C,EAAA,MAAM,WAAA,EAAa,2BAAA,YAAsB,IAAgB,KAAA,EAAA,EAAY,IAAA,EAAM,IAAI,CAAA;AAK/E,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,YAAA,IAAgB,KAAA,CAAA,EAAW,OAAA,CAAQ,WAAW,CAAA;AAAA,EACpD,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,IAAA,IAAQ,IAAA,EAAM;AAChB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAA;AAAA,IACF;AAGA,IAAA,GAAA,CAAI,UAAA,CAAW,QAAA,IAAY,GAAA,EAAK,MAAA;AAChC,IAAA,MAAM,KAAA,EAAO,IAAI,eAAA,CAAgB,CAAA;AACjC,IAAA,IAAI,UAAA,EAAY,KAAA;AAChB,IAAA,MAAA,SAAe,IAAA,CAAA,EAAO;AACpB,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,QAAA,CAAS,KAAK,CAAA;AACd,QAAA,MAAM,IAAA,EAAM,MAAM,4CAAA,GAAa,EAAe,EAAE,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAC,CAAA;AACrE,QAAA,GAAA,CAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAC7D,QAAA,MAAM,KAAA,EAAQ,MAAM,GAAA,CAAI,IAAA,CAAK,CAAA;AAC7B,QAAA,GAAA,CAAI,CAAC,SAAA,EAAW;AACd,UAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,UAAA,UAAA,CAAW,QAAA,EAAU,GAAA;AAAA,QACvB;AAAA,MACF,EAAA,MAAA,CAAS,GAAA,EAAK;AAMZ,QAAA,GAAA,CAAI,UAAA,mBAAc,GAAA,6BAAe,OAAA,IAAS,YAAA,EAAc,MAAA;AACxD,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,OAAA,CAAQ,KAAA,CAAM,eAAA,EAAiB,GAAA,EAAK,GAAG,CAAA;AAAA,MACzC,EAAA,QAAE;AACA,QAAA,GAAA,CAAI,CAAC,SAAA,EAAW,YAAA,CAAa,KAAK,CAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA;AACL,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,UAAA,EAAY,IAAA;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,CAAA;AAAA,IACb,CAAA;AAAA,EAEF,CAAA,EAAG,CAAC,GAAA,EAAK,SAAS,CAAC,CAAA;AAEnB,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA;AAAA;AAAA,IAGA,MAAA,EAAQ,CAAA,EAAA,GAAM;AACZ,MAAA,UAAA,CAAW,QAAA,EAAU,IAAA;AACrB,MAAA,YAAA,CAAa,CAAC,CAAA,EAAA,GAAM,EAAA,EAAI,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AACF;ADnDA;AACA;AACE;AACF,oCAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-ZPK5HW7B.cjs","sourcesContent":[null,"'use client'\n\nimport { useEffect, useRef, useState, type Dispatch, type SetStateAction } from 'react'\nimport { contentFetch } from '../utils/embed-content-fetch'\n\nexport interface UseSelfFetchResult<T> {\n data: T | null\n /** Imperatively patch the fetched data (e.g. optimistic vote updates). */\n setData: Dispatch<SetStateAction<T | null>>\n isLoading: boolean\n error: boolean\n /** Re-run the fetch (error-retry affordance). */\n reload: () => void\n}\n\n/**\n * The single source for the 4 self-fetching content views\n * (`ProductReleasesView`, `RoadmapView`, the onboarding catalog/detail). GETs a\n * configured `url` into component state with **plain `fetch` + `useEffect`** —\n * deliberately NO react-query, so embedders don't need a QueryClient. This is\n * the same technology choice the shipped `DeliveryLists` makes; that component\n * predates this hook and still hand-rolls the loop (a future pass can migrate\n * it onto a two-url variant of this hook).\n *\n * Behaviour:\n * - `url = null` → fetching is DISABLED (controlled / SSR mode, or missing\n * config); returns `initialData ?? null` and never fetches.\n * - `initialData` provided → hydrates immediately and SKIPS the first fetch\n * (so the hub's server-rendered data isn't re-fetched on mount); later\n * `url` changes still re-fetch.\n * - a `cancelled` guard ensures an in-flight response from a STALE `url`\n * (e.g. a fast pagination / section toggle) can't overwrite a newer one.\n * - `reload()` bumps an internal key to retry after an error.\n *\n * Re-fetches whenever `url` changes, so callers fold all query params INTO the\n * url string (the url IS the cache key).\n */\nexport function useSelfFetch<T>(\n url: string | null,\n options?: { initialData?: T },\n): UseSelfFetchResult<T> {\n const initialData = options?.initialData\n const [data, setData] = useState<T | null>(initialData ?? null)\n const [isLoading, setIsLoading] = useState(initialData === undefined && url !== null)\n const [error, setError] = useState(false)\n const [reloadKey, setReloadKey] = useState(0)\n // The url whose data we currently hold — seeded from SSR `initialData`, then set after\n // each completed fetch. The effect skips the fetch when this equals `url` (so server-\n // rendered data isn't re-fetched on mount). A VALUE compare (not a one-shot flag) so the\n // SSR-hydration skip survives React 18 StrictMode's mount→unmount→remount in dev;\n // `reload()` nulls it to force a re-fetch of the same url.\n const dataUrlRef = useRef<string | null>(initialData !== undefined ? url : null)\n\n // Re-sync when a CONTROLLED `initialData` changes (e.g. the host navigates\n // between detail slugs without remounting). No-op in self-fetch mode, where\n // `initialData` is `undefined`.\n useEffect(() => {\n if (initialData !== undefined) setData(initialData)\n }, [initialData])\n\n useEffect(() => {\n if (url === null) {\n setIsLoading(false)\n return\n }\n // Already hold data for this exact url (SSR-hydrated, or a prior completed fetch) →\n // skip. `reload()` clears `dataUrlRef` so a retry of the same url still fetches.\n if (dataUrlRef.current === url) return\n const ctrl = new AbortController()\n let cancelled = false\n async function load() {\n try {\n setIsLoading(true)\n setError(false)\n const res = await contentFetch(url as string, { signal: ctrl.signal })\n if (!res.ok) throw new Error(`Request failed (${res.status})`)\n const json = (await res.json()) as T\n if (!cancelled) {\n setData(json)\n dataUrlRef.current = url // remember the url we now hold data for\n }\n } catch (err) {\n // AbortError on cleanup (unmount / stale-url change / React StrictMode's dev\n // double-invoke) is EXPECTED — the request was intentionally aborted. Aborting\n // also means the orphaned StrictMode fetch shows as \"cancelled\" instead of\n // completing as a wasted duplicate (parity with useChatIdentity). Only real\n // failures fall through to the error state + console.\n if (cancelled || (err as Error)?.name === 'AbortError') return\n setError(true)\n console.error('useSelfFetch:', url, err)\n } finally {\n if (!cancelled) setIsLoading(false)\n }\n }\n load()\n return () => {\n cancelled = true\n ctrl.abort()\n }\n // `url` folds in every query param; `reloadKey` drives retry.\n }, [url, reloadKey])\n\n return {\n data,\n setData,\n isLoading,\n error,\n // Force a re-fetch of the current url: clear the held-url ref so the skip above\n // doesn't short-circuit, then bump the effect key.\n reload: () => {\n dataUrlRef.current = null\n setReloadKey((k) => k + 1)\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-2ZHDP22R.cjs","../src/hooks/use-self-fetch.ts"],"names":[],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-2ZHDP22R.cjs","sourcesContent":[null,"'use client'\n\nimport { useEffect, useRef, useState, type Dispatch, type SetStateAction } from 'react'\nimport { contentFetch } from '../utils/embed-content-fetch'\n\nexport interface UseSelfFetchResult<T> {\n data: T | null\n /** Imperatively patch the fetched data (e.g. optimistic vote updates). */\n setData: Dispatch<SetStateAction<T | null>>\n isLoading: boolean\n error: boolean\n /** Re-run the fetch (error-retry affordance). */\n reload: () => void\n}\n\n/**\n * The single source for the 4 self-fetching content views\n * (`ProductReleasesView`, `RoadmapView`, the onboarding catalog/detail). GETs a\n * configured `url` into component state with **plain `fetch` + `useEffect`** —\n * deliberately NO react-query, so embedders don't need a QueryClient. This is\n * the same technology choice the shipped `DeliveryLists` makes; that component\n * predates this hook and still hand-rolls the loop (a future pass can migrate\n * it onto a two-url variant of this hook).\n *\n * Behaviour:\n * - `url = null` → fetching is DISABLED (controlled / SSR mode, or missing\n * config); returns `initialData ?? null` and never fetches.\n * - `initialData` provided → hydrates immediately and SKIPS the first fetch\n * (so the hub's server-rendered data isn't re-fetched on mount); later\n * `url` changes still re-fetch.\n * - a `cancelled` guard ensures an in-flight response from a STALE `url`\n * (e.g. a fast pagination / section toggle) can't overwrite a newer one.\n * - `reload()` bumps an internal key to retry after an error.\n *\n * Re-fetches whenever `url` changes, so callers fold all query params INTO the\n * url string (the url IS the cache key).\n */\nexport function useSelfFetch<T>(\n url: string | null,\n options?: { initialData?: T },\n): UseSelfFetchResult<T> {\n const initialData = options?.initialData\n const [data, setData] = useState<T | null>(initialData ?? null)\n const [isLoading, setIsLoading] = useState(initialData === undefined && url !== null)\n const [error, setError] = useState(false)\n const [reloadKey, setReloadKey] = useState(0)\n // The url whose data we currently hold — seeded from SSR `initialData`, then set after\n // each completed fetch. The effect skips the fetch when this equals `url` (so server-\n // rendered data isn't re-fetched on mount). A VALUE compare (not a one-shot flag) so the\n // SSR-hydration skip survives React 18 StrictMode's mount→unmount→remount in dev;\n // `reload()` nulls it to force a re-fetch of the same url.\n const dataUrlRef = useRef<string | null>(initialData !== undefined ? url : null)\n\n // Re-sync when a CONTROLLED `initialData` changes (e.g. the host navigates\n // between detail slugs without remounting). No-op in self-fetch mode, where\n // `initialData` is `undefined`.\n useEffect(() => {\n if (initialData !== undefined) setData(initialData)\n }, [initialData])\n\n useEffect(() => {\n if (url === null) {\n setIsLoading(false)\n return\n }\n // Already hold data for this exact url (SSR-hydrated, or a prior completed fetch) →\n // skip. `reload()` clears `dataUrlRef` so a retry of the same url still fetches.\n if (dataUrlRef.current === url) return\n const ctrl = new AbortController()\n let cancelled = false\n async function load() {\n try {\n setIsLoading(true)\n setError(false)\n const res = await contentFetch(url as string, { signal: ctrl.signal })\n if (!res.ok) throw new Error(`Request failed (${res.status})`)\n const json = (await res.json()) as T\n if (!cancelled) {\n setData(json)\n dataUrlRef.current = url // remember the url we now hold data for\n }\n } catch (err) {\n // AbortError on cleanup (unmount / stale-url change / React StrictMode's dev\n // double-invoke) is EXPECTED — the request was intentionally aborted. Aborting\n // also means the orphaned StrictMode fetch shows as \"cancelled\" instead of\n // completing as a wasted duplicate (parity with useChatIdentity). Only real\n // failures fall through to the error state + console.\n if (cancelled || (err as Error)?.name === 'AbortError') return\n setError(true)\n console.error('useSelfFetch:', url, err)\n } finally {\n if (!cancelled) setIsLoading(false)\n }\n }\n load()\n return () => {\n cancelled = true\n ctrl.abort()\n }\n // `url` folds in every query param; `reloadKey` drives retry.\n }, [url, reloadKey])\n\n return {\n data,\n setData,\n isLoading,\n error,\n // Force a re-fetch of the current url: clear the held-url ref so the skip above\n // doesn't short-circuit, then bump the effect key.\n reload: () => {\n dataUrlRef.current = null\n setReloadKey((k) => k + 1)\n },\n }\n}\n"]}
@@ -25,7 +25,7 @@ import {
25
25
  useOgPlaceholderUrl,
26
26
  useOnboardingState,
27
27
  useToast
28
- } from "./chunk-E4CQ4RUG.js";
28
+ } from "./chunk-JQ2EYXWR.js";
29
29
  import {
30
30
  useChatRuntime,
31
31
  useRequiredChatRuntime
@@ -18897,7 +18897,6 @@ function EntityImage({ src, alt, fallbackText, className }) {
18897
18897
 
18898
18898
  // src/components/layout/title-block.tsx
18899
18899
  import { jsx as jsx139, jsxs as jsxs111 } from "react/jsx-runtime";
18900
- var TITLE_BLOCK_MIN_HEIGHT = "min-h-11 md:min-h-12";
18901
18900
  function TitleBlock({
18902
18901
  title,
18903
18902
  subtitle,
@@ -18929,7 +18928,7 @@ function TitleBlock({
18929
18928
  className
18930
18929
  ),
18931
18930
  children: [
18932
- /* @__PURE__ */ jsxs111("div", { className: cn("flex flex-col justify-center gap-[var(--spacing-system-xs)] flex-1 min-w-0", TITLE_BLOCK_MIN_HEIGHT), children: [
18931
+ /* @__PURE__ */ jsxs111("div", { className: "flex flex-col gap-[var(--spacing-system-xs)] flex-1 min-w-0", children: [
18933
18932
  backButton && /* @__PURE__ */ jsx139(
18934
18933
  BackButton,
18935
18934
  {
@@ -19532,16 +19531,6 @@ var toolAliasMap = {
19532
19531
  "openframe_client": "OPENFRAME_CLIENT",
19533
19532
  "openframe-client": "OPENFRAME_CLIENT",
19534
19533
  "openframeclient": "OPENFRAME_CLIENT",
19535
- // OpenFrame RMM
19536
- "RMM": "OPENFRAME_RMM",
19537
- "rmm": "OPENFRAME_RMM",
19538
- "OPENFRAME_RMM": "OPENFRAME_RMM",
19539
- "OPENFRAME-RMM": "OPENFRAME_RMM",
19540
- "OPENFRAMERMM": "OPENFRAME_RMM",
19541
- "openframe_rmm": "OPENFRAME_RMM",
19542
- "openframe-rmm": "OPENFRAME_RMM",
19543
- "openframermm": "OPENFRAME_RMM",
19544
- "openframe-rmm-agent": "OPENFRAME_RMM",
19545
19534
  // OSQUERY
19546
19535
  "OSQUERY": "OSQUERY",
19547
19536
  // System
@@ -48705,7 +48694,6 @@ export {
48705
48694
  ContentPageContainer,
48706
48695
  ListPageLayout,
48707
48696
  EntityImage,
48708
- TITLE_BLOCK_MIN_HEIGHT,
48709
48697
  TitleBlock,
48710
48698
  PageLayout,
48711
48699
  PageShell,
@@ -49077,4 +49065,4 @@ export {
49077
49065
  LogsList,
49078
49066
  assets
49079
49067
  };
49080
- //# sourceMappingURL=chunk-NH2RY6VM.js.map
49068
+ //# sourceMappingURL=chunk-66JU4VP2.js.map