@collective-intelligence/external-apps-client-sdk-react 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{EntityForm,EntityList,EntityTable,ResourceQueryError,__export,clearProtectedResourceQueries,createDelegatedEntitySource,createResourceListQueryOptions,defineEntity,hasResourceCapability,mapResourceAuthState,resourceKeys,unwrapResourceResult,useEntityCreate,useEntityDelete,useEntityList,useEntityRecord,useEntityUpdate,useEntityViewState,useMemoryEntityViewState}from"./index-6memxjn1.js";var exports_resources={};__export(exports_resources,{useMemoryEntityViewState:()=>useMemoryEntityViewState,useEntityViewState:()=>useEntityViewState,useEntityUpdate:()=>useEntityUpdate,useEntityRecord:()=>useEntityRecord,useEntityList:()=>useEntityList,useEntityDelete:()=>useEntityDelete,useEntityCreate:()=>useEntityCreate,unwrapResourceResult:()=>unwrapResourceResult,mapResourceAuthState:()=>mapResourceAuthState,hasResourceCapability:()=>hasResourceCapability,defineEntity:()=>defineEntity,createDelegatedEntitySource:()=>createDelegatedEntitySource,ResourceTable:()=>ResourceTable,ResourceQueryError:()=>ResourceQueryError,ResourceProvider:()=>ResourceProvider,ResourcePagination:()=>ResourcePagination,ResourceList:()=>ResourceList,ResourceLifecycleAction:()=>ResourceLifecycleAction,ResourceFilter:()=>ResourceFilter,ResourceCapabilityAction:()=>ResourceCapabilityAction,EntityTable:()=>EntityTable,EntityList:()=>EntityList,EntityForm:()=>EntityForm});import{useMutation,useQuery,useQueryClient as useQueryClient2}from"@tanstack/react-query";import{mutationOptions}from"@tanstack/react-query";var invalidateResource=async(options)=>{await options.queryClient.invalidateQueries({queryKey:resourceKeys.resource(options.organizationId,options.client.definition.id,options.client.definition.version)})};var createResourceMutationOptions=(options)=>mutationOptions({mutationFn:async(input)=>{let result;switch(options.operation){case"hard_delete":{unwrapResourceResult(await options.client.hardDelete(input));break}case"restore":{result=unwrapResourceResult(await options.client.restore(input));break}case"soft_delete":{result=unwrapResourceResult(await options.client.softDelete(input));break}default:{throw new TypeError(`Unknown resource operation: ${String(options.operation)}`)}}return result},mutationKey:[...resourceKeys.resource(options.organizationId,options.client.definition.id,options.client.definition.version),"mutations",options.operation],onSuccess:async()=>{await invalidateResource(options)}});import{useQueryClient}from"@tanstack/react-query";import{createContext,useContext,useEffect,useMemo,useRef}from"react";import{jsxDEV}from"react/jsx-dev-runtime";var useResourceQueryCleanup=(queryClient,authStatus,organizationId)=>{const previousOrganizationId=useRef(null);const input=useMemo(()=>({authStatus,organizationId}),[authStatus,organizationId]);useEffect(()=>{const previous=previousOrganizationId.current;previousOrganizationId.current=input.organizationId;if(input.authStatus!=="authenticated"){clearProtectedResourceQueries(queryClient);return}if(previous!==null&&previous!==input.organizationId){clearProtectedResourceQueries(queryClient,previous)}},[input,queryClient])};var ResourceContext=createContext(null);var ResourceProvider=({authState,capabilities,children,organizationId})=>{const queryClient=useQueryClient();useResourceQueryCleanup(queryClient,authState.status,organizationId);const value=useMemo(()=>({authState,capabilities,organizationId}),[authState,capabilities,organizationId]);return jsxDEV(ResourceContext.Provider,{value,children},undefined,false,undefined,this)};var useResourceContext=()=>{const value=useContext(ResourceContext);if(value===null){throw new Error("ResourceProvider must wrap resource bindings")}return value};var authStateForError=(error,fallback)=>error instanceof ResourceQueryError?mapResourceAuthState({correlationId:error.correlationId,error:error.resourceError,ok:false}):fallback;var useResourceList=(client,query)=>{const context=useResourceContext();const result=useQuery({...createResourceListQueryOptions({client,organizationId:context.organizationId,query}),enabled:context.authState.status==="authenticated"});return{...result,authState:authStateForError(result.error,context.authState)}};var useResourceLifecycleMutation=(client,operation)=>{const{capabilities,organizationId}=useResourceContext();const queryClient=useQueryClient2();const mutation=useMutation(createResourceMutationOptions({client,operation,organizationId,queryClient}));let capability;if(operation==="hard_delete"){capability="hardDelete"}else if(operation==="soft_delete"){capability="softDelete"}else{capability=operation}return{...mutation,available:capabilities[capability]===true}};import{jsxDEV as jsxDEV2,Fragment}from"react/jsx-dev-runtime";var nextQuery=(query,result)=>{if(result.pagination==="cursor"){return result.nextCursor===undefined?undefined:{...query,pagination:{cursor:result.nextCursor,limit:query.pagination.mode==="cursor"?query.pagination.limit:25,mode:"cursor"}}}return result.page>=result.totalPages?undefined:{...query,pagination:{mode:"page",page:result.page+1,pageSize:result.pageSize}}};var previousQuery=(query,result)=>result.pagination==="page"&&result.page>1?{...query,pagination:{mode:"page",page:result.page-1,pageSize:result.pageSize}}:undefined;var DefaultStatus=({authState,error,pending})=>{let message=authState.status;if(authState.status==="authenticated"){message=pending?"Loading resources":error?.message??""}return jsxDEV2("output",{"aria-live":"polite",children:message},undefined,false,undefined,this)};var ResourceList=({client,components,onQueryChange,query,renderItem})=>{const resourceQuery=useResourceList(client,query);const Status=components.Status??DefaultStatus;if(resourceQuery.authState.status!=="authenticated"||resourceQuery.isPending||resourceQuery.error!==null){return jsxDEV2(Status,{authState:resourceQuery.authState,pending:resourceQuery.isPending,...resourceQuery.error===null?{}:{error:resourceQuery.error}},undefined,false,undefined,this)}const{List}=components;const{Pagination}=components;const result=resourceQuery.data;const next=nextQuery(query,result);const previous=previousQuery(query,result);return jsxDEV2(Fragment,{children:[jsxDEV2(List,{getItemKey:(item)=>item.id,items:result.items,renderItem},undefined,false,undefined,this),Pagination===undefined?null:jsxDEV2(Pagination,{hasNextPage:next!==undefined,hasPreviousPage:previous!==undefined,isPending:resourceQuery.isFetching,onNext:()=>{if(next!==undefined){onQueryChange?.(next)}},onPrevious:()=>{if(previous!==undefined){onQueryChange?.(previous)}},...result.pagination==="page"?{currentPage:result.page}:{}},undefined,false,undefined,this)]},undefined,true,undefined,this)};var ResourceCapabilityAction=({capability,children,components,unsupported="disable"})=>{const{capabilities}=useResourceContext();const supported=capabilities[capability]===true;if(!supported&&unsupported==="hide"){return null}const{Action}=components;return jsxDEV2(Action,{disabled:!supported,children},undefined,false,undefined,this)};var ResourceFilter=({components,label="Search resources",onQueryChange,query})=>{const{Filter}=components;const{textSearch:_textSearch,...queryWithoutTextSearch}=query;return jsxDEV2(Filter,{label,onChange:(value)=>{onQueryChange(value===""?queryWithoutTextSearch:{...query,textSearch:value})},value:query.textSearch??""},undefined,false,undefined,this)};var ResourcePagination=({components,isPending=false,onQueryChange,query,result})=>{const{Pagination}=components;const next=nextQuery(query,result);const previous=previousQuery(query,result);return jsxDEV2(Pagination,{hasNextPage:next!==undefined,hasPreviousPage:previous!==undefined,isPending,onNext:()=>{if(next!==undefined){onQueryChange(next)}},onPrevious:()=>{if(previous!==undefined){onQueryChange(previous)}},...result.pagination==="page"?{currentPage:result.page}:{}},undefined,false,undefined,this)};var ResourceTable=({caption,client,columns,components,query})=>{const resourceQuery=useResourceList(client,query);const Status=components.Status??DefaultStatus;if(resourceQuery.authState.status!=="authenticated"||resourceQuery.isPending||resourceQuery.error!==null){return jsxDEV2(Status,{authState:resourceQuery.authState,pending:resourceQuery.isPending,...resourceQuery.error===null?{}:{error:resourceQuery.error}},undefined,false,undefined,this)}const{Table}=components;return jsxDEV2(Table,{caption,columns,getRowKey:(row)=>row.id,renderCell:(row,column)=>column.render(row),rows:resourceQuery.data.items},undefined,false,undefined,this)};var ResourceLifecycleAction=({children,client,components,input,operation,unsupported="disable"})=>{const mutation=useResourceLifecycleMutation(client,operation);if(!mutation.available&&unsupported==="hide"){return null}const{Action}=components;return jsxDEV2(Action,{disabled:!mutation.available,onClick:()=>{mutation.mutate(input)},pending:mutation.isPending,children},undefined,false,undefined,this)};var{defineEntity:defineEntity2,EntityForm:EntityForm2,EntityList:EntityList2,EntityTable:EntityTable2,ResourceCapabilityAction:ResourceCapabilityAction2,ResourceFilter:ResourceFilter2,ResourceLifecycleAction:ResourceLifecycleAction2,ResourceList:ResourceList2,ResourcePagination:ResourcePagination2,ResourceProvider:ResourceProvider2,ResourceQueryError:ResourceQueryError2,ResourceTable:ResourceTable2,hasResourceCapability:hasResourceCapability2,mapResourceAuthState:mapResourceAuthState2,unwrapResourceResult:unwrapResourceResult2,useEntityCreate:useEntityCreate2,useEntityDelete:useEntityDelete2,useEntityList:useEntityList2,useEntityRecord:useEntityRecord2,useEntityUpdate:useEntityUpdate2,useEntityViewState:useEntityViewState2,useMemoryEntityViewState:useMemoryEntityViewState2}=exports_resources;export{useMemoryEntityViewState2 as useMemoryEntityViewState,useEntityViewState2 as useEntityViewState,useEntityUpdate2 as useEntityUpdate,useEntityRecord2 as useEntityRecord,useEntityList2 as useEntityList,useEntityDelete2 as useEntityDelete,useEntityCreate2 as useEntityCreate,unwrapResourceResult2 as unwrapResourceResult,mapResourceAuthState2 as mapResourceAuthState,hasResourceCapability2 as hasResourceCapability,defineEntity2 as defineEntity,ResourceTable2 as ResourceTable,ResourceQueryError2 as ResourceQueryError,ResourceProvider2 as ResourceProvider,ResourcePagination2 as ResourcePagination,ResourceList2 as ResourceList,ResourceLifecycleAction2 as ResourceLifecycleAction,ResourceFilter2 as ResourceFilter,ResourceCapabilityAction2 as ResourceCapabilityAction,EntityTable2 as EntityTable,EntityList2 as EntityList,EntityForm2 as EntityForm};
package/package.json CHANGED
@@ -1,6 +1,72 @@
1
1
  {
2
2
  "name": "@collective-intelligence/external-apps-client-sdk-react",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "React bindings for Collective Intelligence external applications.",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "files": [
8
+ "dist",
9
+ "README.md"
10
+ ],
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "ci-source": "./src/index.ts",
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./resources": {
21
+ "ci-source": "./src/resources.ts",
22
+ "types": "./dist/resources.d.ts",
23
+ "import": "./dist/resources.js",
24
+ "default": "./dist/resources.js"
25
+ }
26
+ },
27
+ "scripts": {
28
+ "build": "bun tools/build.ts",
29
+ "test": "bun tools/test-pack.ts",
30
+ "test:pack": "bun tools/test-pack.ts",
31
+ "format": "oxfmt --write .",
32
+ "format:check": "oxfmt --check .",
33
+ "format:check:staged": "oxfmt --check",
34
+ "lint": "node \"../../../.agents/scripts/managed-lint-runner.mjs\" --scope \"packages/public/external-apps-client-sdk-react\"",
35
+ "lint:staged": "oxlint --no-error-on-unmatched-pattern",
36
+ "prepack": "bun run build",
37
+ "type-check": "tsc --noEmit"
38
+ },
39
+ "dependencies": {
40
+ "@tanstack/react-query": "5.101.4",
41
+ "nuqs": "2.10.1"
42
+ },
43
+ "peerDependencies": {
44
+ "react": ">=18.2 <20",
45
+ "react-dom": ">=18.2 <20"
46
+ },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "devDependencies": {
51
+ "@collective-intelligence/external-apps-client-sdk": "workspace:*",
52
+ "@collective-intelligence/ui-react": "workspace:*",
53
+ "@oxlint/plugins": "1.85.0",
54
+ "@tanstack/react-router": "1.170.30",
55
+ "@tanstack/react-start": "1.168.47",
56
+ "@types/bun": "1.3.14",
57
+ "@types/react": "^19.2.14",
58
+ "@types/react-dom": "^19.2.3",
59
+ "@vitejs/plugin-react": "6.0.5",
60
+ "dts-bundle-generator": "9.5.1",
61
+ "eslint-plugin-react-you-might-not-need-an-effect": "latest",
62
+ "jsdom": "28.1.0",
63
+ "oxfmt": "0.66.0",
64
+ "oxlint": "1.82.0",
65
+ "react": "^19.2.8",
66
+ "react-dom": "^19.2.8",
67
+ "typescript": "5.9.3",
68
+ "ultracite": "7.10.7",
69
+ "vite": "8.2.1",
70
+ "vitest": "4.1.10"
71
+ }
72
+ }