@ai4b-team/fsaos-gateway-sdk 3.2.1 → 3.4.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.
package/dist/iife/ui.js CHANGED
@@ -1,3 +1,3 @@
1
- /* @fsaos/ui v2.0.0 — FSAOS UI Primitives — 2026-05-27T19:24:49.061Z */
1
+ /* @fsaos/ui v2.0.0 — FSAOS UI Primitives — 2026-05-28T15:49:04.318Z */
2
2
  "use strict";var __FSAOS_UI__=(()=>{var m=Object.create;var r=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var y=(e,i)=>()=>(i||e((i={exports:{}}).exports,i),i.exports),N=(e,i)=>{for(var a in i)r(e,a,{get:i[a],enumerable:!0})},s=(e,i,a,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of u(i))!h.call(e,t)&&t!==a&&r(e,t,{get:()=>i[t],enumerable:!(l=g(i,t))||l.enumerable});return e};var x=(e,i,a)=>(a=e!=null?m(f(e)):{},s(i||!e||!e.__esModule?r(a,"default",{value:e,enumerable:!0}):a,e)),b=e=>s(r({},"__esModule",{value:!0}),e);var d=y((V,c)=>{c.exports=React});var P={};N(P,{Badge:()=>z,Breadcrumbs:()=>A,Button:()=>D,Card:()=>w,DataView:()=>R,Detail:()=>_,Empty:()=>I,FilePreview:()=>O,Form:()=>F,Grid:()=>k,Image:()=>G,Link:()=>E,Page:()=>v,Router:()=>T,Sidebar:()=>S,Spinner:()=>B,Stack:()=>C,Table:()=>j,Tabs:()=>W,Video:()=>H});var n=x(d(),1);function o(){return(typeof window<"u"&&window.__FSAOS_CONFIG__||{}).edgeBaseUrl||""}function v(e){return(0,n.createElement)("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column"},className:e.className||""},e.children)}function C(e){let i=e.direction||"vertical";return(0,n.createElement)("div",{style:{display:"flex",flexDirection:i==="horizontal"?"row":"column",gap:e.gap||"0.5rem",padding:e.padding||"0",alignItems:e.align||"stretch",justifyContent:e.justify||"flex-start",flex:e.flex||"initial"},className:e.className||""},e.children)}function k(e){return(0,n.createElement)("div",{style:{display:"grid",gridTemplateColumns:"repeat("+(e.columns||3)+", 1fr)",gap:e.gap||"1rem",padding:e.padding||"0"},className:e.className||""},e.children)}function S(e){return(0,n.createElement)("div",{style:{display:"flex",flexDirection:"row",minHeight:"100vh"},className:e.className||""},e.children)}function w(e){return(0,n.createElement)("div",{style:{border:"1px solid var(--color-border, #e5e7eb)",borderRadius:"var(--border-radius, 0.5rem)",padding:e.padding||"1rem",background:"var(--color-surface, #fff)"},className:e.className||"",onClick:e.onClick},e.children)}function z(e){return(0,n.createElement)("span",{style:{display:"inline-flex",alignItems:"center",padding:"0.125rem 0.5rem",fontSize:"0.75rem",fontWeight:"500",borderRadius:"9999px",background:e.color||"#e5e7eb",color:e.textColor||"#374151"},className:e.className||""},e.children||e.label)}function B(e){let i=e.size||"1.5rem";return(0,n.createElement)("div",{style:{width:i,height:i,border:"2px solid #e5e7eb",borderTopColor:"var(--color-primary, #3b82f6)",borderRadius:"50%",animation:"fsaos-spin 0.6s linear infinite"}})}function D(e){return(0,n.createElement)("button",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",padding:"0.5rem 1rem",fontSize:"0.875rem",fontWeight:"500",borderRadius:"var(--border-radius, 0.375rem)",border:e.variant==="outline"?"1px solid var(--color-border, #d1d5db)":"none",background:e.variant==="outline"||e.variant==="ghost"?"transparent":"var(--color-primary, #3b82f6)",color:e.variant==="outline"||e.variant==="ghost"?"var(--color-text, #1a1a1a)":"#fff",cursor:e.disabled?"not-allowed":"pointer",opacity:e.disabled?"0.5":"1",gap:"0.5rem"},className:e.className||"",onClick:e.onClick,disabled:e.disabled},e.children||e.label)}function I(e){return(0,n.createElement)("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"3rem",color:"var(--color-text-secondary, #6b7280)",textAlign:"center"}},e.icon?(0,n.createElement)("div",{style:{fontSize:"2rem",marginBottom:"0.5rem"}},e.icon):null,(0,n.createElement)("div",{style:{fontWeight:500,marginBottom:"0.25rem"}},e.title||e.message||e.children||"No items"),e.description?(0,n.createElement)("div",{style:{fontSize:"0.875rem",opacity:.7}},e.description):null)}function R(e){return(0,n.createElement)("div",{className:e.className||""},e.children)}function j(e){return(0,n.createElement)("table",{className:e.className||""},e.children)}function F(e){return(0,n.createElement)("form",{className:e.className||"",onSubmit:e.onSubmit},e.children)}function _(e){return(0,n.createElement)("div",{className:e.className||""},e.children)}function T(e){return(0,n.createElement)("div",null,e.children)}function E(e){return(0,n.createElement)("a",{href:e.href||e.to,className:e.className||"",onClick:e.onClick},e.children)}function W(e){return(0,n.createElement)("div",{className:e.className||""},e.children)}function A(e){return(0,n.createElement)("nav",{className:e.className||""},e.children)}function G(e){return(0,n.createElement)("img",{src:e.src||(e.path?o()+e.path:""),alt:e.alt||"",className:e.className||"",style:e.style})}function H(e){return(0,n.createElement)("video",{src:e.src||(e.path?o()+e.path:""),controls:!0,className:e.className||""})}function O(e){return(0,n.createElement)("div",{className:e.className||""},e.children||"File preview")}return b(P);})();
3
3
  //# sourceMappingURL=ui.js.map
package/dist/index.cjs CHANGED
@@ -113,6 +113,7 @@ __export(src_exports, {
113
113
  uploadFile: () => uploadFile,
114
114
  useAccounts: () => useAccounts,
115
115
  useAllChannels: () => useAllChannels,
116
+ useArrangement: () => useArrangement,
116
117
  useAsset: () => useAsset,
117
118
  useAuth: () => useAuth,
118
119
  useChannelMessages: () => useChannelMessages,
@@ -2500,6 +2501,16 @@ function useInfiniteChannelMessages(options) {
2500
2501
  qc.invalidateQueries({ queryKey: stableKey });
2501
2502
  return;
2502
2503
  }
2504
+ if (newPage.messages.length > 0) {
2505
+ const minNewSeq = Math.min(...newPage.messages.map((m) => m.seq));
2506
+ if (minNewSeq > maxSeq + 1) {
2507
+ console.warn(
2508
+ `[useInfiniteChannelMessages] sequence gap detected: maxSeq=${maxSeq}, minNewSeq=${minNewSeq}. Triggering full refetch.`
2509
+ );
2510
+ qc.invalidateQueries({ queryKey: stableKey });
2511
+ return;
2512
+ }
2513
+ }
2503
2514
  qc.setQueryData(stableKey, (old) => {
2504
2515
  if (!old) return old;
2505
2516
  const pages = [...old.pages];
@@ -2926,6 +2937,53 @@ function useRealtimeQuery(options) {
2926
2937
  }, [eventType, enabled, debounceMs, qc, JSON.stringify(queryKey)]);
2927
2938
  return query;
2928
2939
  }
2940
+ function useArrangement(parentPath) {
2941
+ useScopeKey();
2942
+ const enabled = !!parentPath;
2943
+ const query = reactQuery.useQuery({
2944
+ queryKey: ["vfs", getScope() ?? "__unscoped__", "arrangement", parentPath ?? ""],
2945
+ queryFn: async () => {
2946
+ const response = await gatewayCall("get-effective-items", {
2947
+ item_type: "item_arrangement"
2948
+ });
2949
+ const rows = response?.content?.items ?? response?.items ?? response?.rows ?? [];
2950
+ const matches = rows.filter(
2951
+ (r) => (r?.item_type_data?.parent_path ?? r?.type_data?.parent_path) === parentPath
2952
+ );
2953
+ return matches[0] ?? null;
2954
+ },
2955
+ enabled
2956
+ });
2957
+ const arrangement = query.data ?? null;
2958
+ const order = React.useMemo(() => {
2959
+ const td = arrangement?.item_type_data ?? arrangement?.type_data ?? null;
2960
+ const o = td?.order;
2961
+ return Array.isArray(o) ? o : null;
2962
+ }, [arrangement]);
2963
+ const applyTo = React.useCallback(
2964
+ (children) => {
2965
+ if (!order || !children?.length) return children ?? [];
2966
+ const key = (c) => c.id ?? c.name ?? "";
2967
+ const rank = new Map(order.map((k, i) => [k, i]));
2968
+ const listed = [];
2969
+ const rest = [];
2970
+ for (const c of children) {
2971
+ (rank.has(key(c)) ? listed : rest).push(c);
2972
+ }
2973
+ listed.sort((a, b) => rank.get(key(a)) - rank.get(key(b)));
2974
+ return [...listed, ...rest];
2975
+ },
2976
+ [order]
2977
+ );
2978
+ return {
2979
+ ...query,
2980
+ arrangement,
2981
+ order,
2982
+ sourceScopeId: arrangement?.source_scope_id ?? null,
2983
+ sourceScopeName: arrangement?.source_scope_name ?? null,
2984
+ applyTo
2985
+ };
2986
+ }
2929
2987
 
2930
2988
  // src/schema-utils.ts
2931
2989
  function keyToLabel(key) {
@@ -3389,6 +3447,7 @@ exports.updateItem = updateItem;
3389
3447
  exports.uploadFile = uploadFile;
3390
3448
  exports.useAccounts = useAccounts;
3391
3449
  exports.useAllChannels = useAllChannels;
3450
+ exports.useArrangement = useArrangement;
3392
3451
  exports.useAsset = useAsset;
3393
3452
  exports.useAuth = useAuth;
3394
3453
  exports.useChannelMessages = useChannelMessages;