@contractspec/lib.design-system 4.3.0 → 4.4.1
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/README.md +53 -17
- package/dist/browser/components/data-view/DataViewRenderer.js +1 -1
- package/dist/browser/components/data-view/collection.js +1 -1
- package/dist/browser/components/forms/controls/Select.js +1 -1
- package/dist/browser/components/object-reference/DefaultObjectReferenceDetail.js +1 -0
- package/dist/browser/components/object-reference/DefaultObjectReferenceParts.js +1 -1
- package/dist/browser/components/object-reference/DefaultObjectReferenceProperty.js +1 -0
- package/dist/browser/components/object-reference/ObjectReferenceHandler.js +1 -1
- package/dist/browser/components/object-reference/ObjectReferencePanel.js +1 -0
- package/dist/browser/components/object-reference/ReferenceIcon.js +1 -1
- package/dist/browser/components/object-reference/actions.js +1 -1
- package/dist/browser/components/object-reference/index.js +1 -1
- package/dist/browser/components/object-reference/runtime.js +1 -1
- package/dist/browser/components/object-reference/url-safety.js +1 -0
- package/dist/browser/components/object-reference/useObjectReferenceController.js +1 -1
- package/dist/browser/components/organisms/Header.js +1 -1
- package/dist/browser/components/organisms/MarketingHeader.js +1 -1
- package/dist/browser/components/organisms/MarketingHeaderMobile.js +1 -1
- package/dist/browser/components/overlays/AdaptivePanel.js +1 -0
- package/dist/browser/components/overlays/index.js +1 -0
- package/dist/browser/components/shell/AppShell.js +1 -1
- package/dist/browser/components/shell/ShellNotifications.js +1 -0
- package/dist/browser/components/shell/ShellSidebar.js +1 -1
- package/dist/browser/components/shell/index.js +1 -1
- package/dist/browser/components/shell/policy.js +1 -0
- package/dist/browser/i18n/translation.js +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/renderers/form-contract/phone-country-control.js +1 -0
- package/dist/browser/renderers/form-contract/phone-country-utils.js +1 -0
- package/dist/browser/renderers/form-contract/phone-field.js +1 -0
- package/dist/browser/renderers/form-contract/phone-utils.js +1 -0
- package/dist/browser/renderers/form-contract/rich-fields.js +1 -1
- package/dist/browser/renderers/form-contract/values.js +1 -1
- package/dist/components/data-view/DataViewRenderer.d.ts +5 -2
- package/dist/components/data-view/DataViewRenderer.js +1 -1
- package/dist/components/data-view/DataViewRenderer.native.d.ts +5 -2
- package/dist/components/data-view/DataViewTable.d.ts +1 -1
- package/dist/components/data-view/DataViewTable.native.d.ts +1 -1
- package/dist/components/data-view/collection.d.ts +9 -1
- package/dist/components/data-view/collection.js +1 -1
- package/dist/components/forms/controls/Select.d.ts +1 -1
- package/dist/components/forms/controls/Select.js +1 -1
- package/dist/components/legal/molecules/LegalTOC.d.ts +1 -1
- package/dist/components/marketing/MarketingCardsSection.d.ts +1 -1
- package/dist/components/molecules/StatusChip.d.ts +1 -1
- package/dist/components/object-reference/DefaultObjectReferenceDetail.d.ts +10 -0
- package/dist/components/object-reference/DefaultObjectReferenceDetail.js +1 -0
- package/dist/components/object-reference/DefaultObjectReferenceParts.d.ts +0 -3
- package/dist/components/object-reference/DefaultObjectReferenceParts.js +1 -1
- package/dist/components/object-reference/DefaultObjectReferenceParts.native.d.ts +6 -3
- package/dist/components/object-reference/DefaultObjectReferenceProperty.d.ts +13 -0
- package/dist/components/object-reference/DefaultObjectReferenceProperty.js +1 -0
- package/dist/components/object-reference/ObjectReferenceHandler.d.ts +1 -1
- package/dist/components/object-reference/ObjectReferenceHandler.js +1 -1
- package/dist/components/object-reference/ObjectReferenceHandler.native.d.ts +1 -1
- package/dist/components/object-reference/ObjectReferencePanel.d.ts +18 -0
- package/dist/components/object-reference/ObjectReferencePanel.js +1 -0
- package/dist/components/object-reference/ReferenceIcon.js +1 -1
- package/dist/components/object-reference/actions.d.ts +7 -2
- package/dist/components/object-reference/actions.js +1 -1
- package/dist/components/object-reference/index.d.ts +4 -2
- package/dist/components/object-reference/index.js +1 -1
- package/dist/components/object-reference/index.native.d.ts +2 -2
- package/dist/components/object-reference/runtime.d.ts +2 -1
- package/dist/components/object-reference/runtime.js +1 -1
- package/dist/components/object-reference/types.d.ts +36 -3
- package/dist/components/object-reference/url-safety.d.ts +2 -0
- package/dist/components/object-reference/url-safety.js +1 -0
- package/dist/components/object-reference/useObjectReferenceController.d.ts +5 -2
- package/dist/components/object-reference/useObjectReferenceController.js +1 -1
- package/dist/components/organisms/Header.js +1 -1
- package/dist/components/organisms/MarketingHeader.js +1 -1
- package/dist/components/organisms/MarketingHeaderMobile.js +1 -1
- package/dist/components/overlays/AdaptivePanel.d.ts +26 -0
- package/dist/components/overlays/AdaptivePanel.js +1 -0
- package/dist/components/overlays/index.d.ts +1 -0
- package/dist/components/overlays/index.js +1 -0
- package/dist/components/shell/AppShell.d.ts +1 -1
- package/dist/components/shell/AppShell.js +1 -1
- package/dist/components/shell/AppShell.native.d.ts +1 -1
- package/dist/components/shell/AppShell.types.d.ts +2 -1
- package/dist/components/shell/ShellNotifications.d.ts +5 -0
- package/dist/components/shell/ShellNotifications.js +1 -0
- package/dist/components/shell/ShellNotifications.native.d.ts +5 -0
- package/dist/components/shell/ShellSidebar.d.ts +2 -1
- package/dist/components/shell/ShellSidebar.js +1 -1
- package/dist/components/shell/index.d.ts +4 -1
- package/dist/components/shell/index.js +1 -1
- package/dist/components/shell/index.native.d.ts +2 -1
- package/dist/components/shell/policy.d.ts +15 -0
- package/dist/components/shell/policy.js +1 -0
- package/dist/components/shell/types.d.ts +50 -0
- package/dist/i18n/translation.d.ts +6 -1
- package/dist/i18n/translation.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/native/components/data-view/DataViewRenderer.js +1 -1
- package/dist/native/components/data-view/DataViewRenderer.native.js +1 -1
- package/dist/native/components/data-view/collection.js +1 -1
- package/dist/native/components/forms/controls/Select.js +1 -1
- package/dist/native/components/object-reference/DefaultObjectReferenceDetail.js +1 -0
- package/dist/native/components/object-reference/DefaultObjectReferenceParts.js +1 -1
- package/dist/native/components/object-reference/DefaultObjectReferenceParts.native.js +1 -1
- package/dist/native/components/object-reference/DefaultObjectReferenceProperty.js +1 -0
- package/dist/native/components/object-reference/ObjectReferenceHandler.js +1 -1
- package/dist/native/components/object-reference/ObjectReferenceHandler.native.js +1 -1
- package/dist/native/components/object-reference/ObjectReferencePanel.js +1 -0
- package/dist/native/components/object-reference/ReferenceIcon.js +1 -1
- package/dist/native/components/object-reference/actions.js +1 -1
- package/dist/native/components/object-reference/index.js +1 -1
- package/dist/native/components/object-reference/index.native.js +1 -1
- package/dist/native/components/object-reference/runtime.js +1 -1
- package/dist/native/components/object-reference/url-safety.js +1 -0
- package/dist/native/components/object-reference/useObjectReferenceController.js +1 -1
- package/dist/native/components/organisms/Header.js +1 -1
- package/dist/native/components/organisms/MarketingHeader.js +1 -1
- package/dist/native/components/organisms/MarketingHeaderMobile.js +1 -1
- package/dist/native/components/overlays/AdaptivePanel.js +1 -0
- package/dist/native/components/overlays/index.js +1 -0
- package/dist/native/components/shell/AppShell.js +1 -1
- package/dist/native/components/shell/AppShell.native.js +1 -1
- package/dist/native/components/shell/ShellNotifications.js +1 -0
- package/dist/native/components/shell/ShellNotifications.native.js +1 -0
- package/dist/native/components/shell/ShellSidebar.js +1 -1
- package/dist/native/components/shell/index.js +1 -1
- package/dist/native/components/shell/index.native.js +1 -1
- package/dist/native/components/shell/policy.js +1 -0
- package/dist/native/i18n/translation.js +1 -1
- package/dist/native/index.js +1 -1
- package/dist/native/renderers/form-contract/phone-country-control.js +1 -0
- package/dist/native/renderers/form-contract/phone-country-control.native.js +1 -0
- package/dist/native/renderers/form-contract/phone-country-utils.js +1 -0
- package/dist/native/renderers/form-contract/phone-field.js +1 -0
- package/dist/native/renderers/form-contract/phone-utils.js +1 -0
- package/dist/native/renderers/form-contract/rich-fields.js +1 -1
- package/dist/native/renderers/form-contract/values.js +1 -1
- package/dist/renderers/form-contract/phone-country-control.d.ts +18 -0
- package/dist/renderers/form-contract/phone-country-control.js +1 -0
- package/dist/renderers/form-contract/phone-country-control.native.d.ts +18 -0
- package/dist/renderers/form-contract/phone-country-utils.d.ts +9 -0
- package/dist/renderers/form-contract/phone-country-utils.js +1 -0
- package/dist/renderers/form-contract/phone-field.d.ts +18 -0
- package/dist/renderers/form-contract/phone-field.js +1 -0
- package/dist/renderers/form-contract/phone-utils.d.ts +3 -0
- package/dist/renderers/form-contract/phone-utils.js +1 -0
- package/dist/renderers/form-contract/rich-fields.d.ts +2 -12
- package/dist/renderers/form-contract/rich-fields.js +1 -1
- package/dist/renderers/form-contract/values.d.ts +1 -0
- package/dist/renderers/form-contract/values.js +1 -1
- package/dist/theme/variants.d.ts +1 -1
- package/package.json +187 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
export const FORM_FALLBACK_TEXT={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region"};export function updateAddress(e,o,n){return{line1:e?.line1??"",line2:e?.line2,city:e?.city,region:e?.region,postalCode:e?.postalCode,countryCode:e?.countryCode,[o]:n}}export function updatePhone(e,o,n){return{countryCode:e?.countryCode??"",nationalNumber:e?.nationalNumber??"",extension:e?.extension,e164:e?.e164,[o]:n}}
|
|
1
|
+
export const FORM_FALLBACK_TEXT={addressLine1:"Address line 1",addressLine2:"Address line 2",city:"City",countryCode:"Country code",extension:"Extension",phoneNumber:"Phone number",postalCode:"Postal code",region:"Region"};export function updateAddress(e,o,n){return{line1:e?.line1??"",line2:e?.line2,city:e?.city,region:e?.region,postalCode:e?.postalCode,countryCode:e?.countryCode,[o]:n}}export function updatePhone(e,o,n){return{countryCode:e?.countryCode??"",countryIso2:e?.countryIso2,nationalNumber:e?.nationalNumber??"",extension:e?.extension,e164:e?.e164,[o]:n}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DataViewCollectionMode, DataViewDensity, DataViewFilterSet, DataViewSpec } from '@contractspec/lib.contracts-spec/data-views';
|
|
1
|
+
import type { DataViewCollectionMode, DataViewDataDepth, DataViewDensity, DataViewFilterSet, DataViewSpec } from '@contractspec/lib.contracts-spec/data-views';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
export interface DataViewRendererProps {
|
|
4
4
|
spec: DataViewSpec;
|
|
@@ -19,6 +19,9 @@ export interface DataViewRendererProps {
|
|
|
19
19
|
density?: DataViewDensity;
|
|
20
20
|
defaultDensity?: DataViewDensity;
|
|
21
21
|
onDensityChange?: (density: DataViewDensity) => void;
|
|
22
|
+
dataDepth?: DataViewDataDepth;
|
|
23
|
+
defaultDataDepth?: DataViewDataDepth;
|
|
24
|
+
onDataDepthChange?: (dataDepth: DataViewDataDepth) => void;
|
|
22
25
|
search?: string;
|
|
23
26
|
onSearchChange?: (value: string) => void;
|
|
24
27
|
filters?: Record<string, unknown> | DataViewFilterSet;
|
|
@@ -30,4 +33,4 @@ export interface DataViewRendererProps {
|
|
|
30
33
|
};
|
|
31
34
|
onPageChange?: (page: number) => void;
|
|
32
35
|
}
|
|
33
|
-
export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, toolbar, loading, headerActions, emptyState, footer, viewMode, defaultViewMode, onViewModeChange, density, defaultDensity, onDensityChange, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, toolbar, loading, headerActions, emptyState, footer, viewMode, defaultViewMode, onViewModeChange, density, defaultDensity, onDensityChange, dataDepth, defaultDataDepth, onDataDepthChange, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as Y,jsxs as A,Fragment as sB}from"react/jsx-runtime";import{resolveDataViewFilters as EB}from"@contractspec/lib.contracts-spec/data-views";import{Pagination as NB}from"@contractspec/lib.ui-kit-web/ui/atoms/Pagination";import{VStack as RB}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as TB}from"@contractspec/lib.ui-kit-web/ui/text";import{Grid3X3 as AB,List as MB,Table2 as jB}from"lucide-react";import*as q from"react";import{resolveTranslationString as a,useDesignSystemTranslation as kB}from"../../i18n/translation";import{Button as T}from"../atoms/Button";import{Input as F}from"../atoms/Input";import{FiltersToolbar as VB}from"../molecules/FiltersToolbar";import{DATA_VIEW_DATA_DEPTHS as _B,formatDataViewDataDepth as SB,getDataViewCollectionConfig as bB,getDataViewCollectionViewModesConfig as xB,isDataViewCollectionKind as t,projectCollectionDataDepth as FB,resolveAllowedCollectionModes as wB,resolveCollectionDataDepth as mB,resolveCollectionDensity as CB,resolveCollectionView as DB}from"./collection";import{DataViewDetail as yB}from"./DataViewDetail";import{DataViewGrid as gB}from"./DataViewGrid";import{DataViewList as hB}from"./DataViewList";import{DataViewTable as uB}from"./DataViewTable";export function DataViewRenderer({spec:B,items:J=[],item:Q=null,className:Z,renderActions:O,onSelect:$,onRowClick:H,toolbar:M,loading:K,headerActions:X,emptyState:E,footer:C,viewMode:D,defaultViewMode:y,onViewModeChange:UB,density:g,defaultDensity:h,onDensityChange:YB,dataDepth:u,defaultDataDepth:v,onDataDepthChange:ZB,search:$B,onSearchChange:d,filters:z,onFilterChange:N,pagination:L,onPageChange:p}){const S=kB(),b=q.useMemo(()=>wB(B.view),[B.view]),[HB,WB]=q.useState(y),f=D??HB??y,j=q.useMemo(()=>DB(B,f),[f,B]),[XB,zB]=q.useState(h),P=CB(B,{density:g??XB,defaultDensity:h}),[GB,qB]=q.useState(v),k=mB(B,{dataDepth:u??GB,defaultDataDepth:v}),KB=bB(B.view),LB=xB(B.view),W=KB?.toolbar,V=W?.enabled!==!1,c=W?.filters!==!1,_=W?.actions??"end",r=_==="start"||_==="both"?X:void 0,o=_==="end"||_==="both"?X:void 0,s=typeof W?.search==="object"?W.search:void 0,n=Boolean(V&&W?.search!==!1&&d),G=q.useMemo(()=>EB({filters:B.view.filters,scope:B.view.filterScope,user:vB(z)}),[z,B.view.filterScope,B.view.filters]),i=q.useMemo(()=>{if(B.view.filterScope){const U=Object.entries(G.user).map(([I,R])=>({key:I,label:`${e(B,I)}: ${BB(R)}`,onRemove:()=>{const{[I]:iB,...PB}=G.user;N?.(PB)}})),x=G.lockedChips==="hidden"?[]:Object.entries(G.locked).map(([I,R])=>({key:`locked-${I}`,label:`${e(B,I)}: ${BB(R)}`,disabled:!0}));return[...U,...x]}return z?Object.entries(z).map(([U,x])=>({key:U,label:`${U}: ${String(x)}`,onRemove:()=>{const{[U]:I,...R}=z;N?.(R)}})):[]},[z,N,G,B]),IB=B.view.filterScope?Object.keys(G.user).length>0:Boolean(z&&Object.keys(z).length>0),l=q.useMemo(()=>{const U=t(B.view.kind)?FB(j.spec,k):B;switch(U.view.kind){case"list":return Y(hB,{spec:U,items:J,className:Z,renderActions:O,onSelect:$,emptyState:E,density:P});case"table":return Y(uB,{spec:U,items:J,className:Z,onRowClick:H,toolbar:M,loading:K,emptyState:E,headerActions:V?void 0:X,footer:C,density:P});case"detail":return Y(yB,{spec:B,item:Q,className:Z,emptyState:E,headerActions:X});case"grid":return Y(gB,{spec:U,items:J,className:Z,renderActions:O,onSelect:$,emptyState:E,density:P});default:return Y(TB,{className:Z,children:a("Unsupported data view kind",S)})}},[B,j.spec,J,Q,Z,O,$,H,M,K,X,E,C,P,k,V,S]);if(!(B.view.kind==="list"||B.view.kind==="table"||B.view.kind==="grid"))return Y(sB,{children:l});return A(RB,{gap:"lg",children:[V&&(c&&B.view.filters?.length||n||i.length||b.length>1||W?.density||W?.dataDepth||r||o)?A(VB,{searchValue:$B,onSearchChange:n?d:void 0,searchPlaceholder:s?.placeholder??a("Search...",S)??"Search...",debounceMs:s?.debounceMs,activeChips:i,onClearAll:IB?()=>N?.({}):void 0,right:o,children:[r,b.length>1&&W?.viewMode!==!1?Y(fB,{mode:j.mode,allowedModes:b,labels:t(B.view.kind)?LB?.labels:void 0,onChange:(U)=>{if(U===j.mode)return;if(D===void 0)WB(U);UB?.(U)}}):null,W?.density?Y(cB,{density:P,onChange:(U)=>{if(U===P)return;if(g===void 0)zB(U);YB?.(U)}}):null,W?.dataDepth?Y(rB,{dataDepth:k,onChange:(U)=>{if(U===k)return;if(u===void 0)qB(U);ZB?.(U)}}):null,c?Y(dB,{filters:B.view.filters,values:G.user,lockedKeys:Object.keys(G.locked),onFilterChange:N}):null]}):null,l,L&&L.total>0&&Y(NB,{currentPage:L.page,totalPages:Math.ceil(L.total/L.pageSize),totalItems:L.total,itemsPerPage:L.pageSize,onPageChange:(U)=>p?.(U),onItemsPerPageChange:(U)=>{p?.(1)},showItemsPerPage:!1})]})}function vB(B){if(!B)return;return Object.fromEntries(Object.entries(B??{}).filter((J)=>Boolean(J[1]&&typeof J[1]==="object"&&"kind"in J[1]&&typeof J[1].kind==="string")))}function e(B,J){return B.view.filters?.find((Q)=>Q.key===J)?.label??J}function BB(B){if(!B)return"";if(B.kind==="single")return String(B.value);if(B.kind==="multi")return B.values.map(String).join(", ");if(B.kind==="range")return[B.from==null?"":String(B.from),B.to==null?"":String(B.to)].filter(Boolean).join(" - ");return`${B.mode}(${B.clauses.length})`}function dB({filters:B,values:J,lockedKeys:Q,onFilterChange:Z}){if(!B?.length||!Z)return null;const O=new Set(Q),$=B.filter((H)=>H.type!=="search"&&!O.has(H.key));if($.length===0)return null;return Y("div",{className:"flex flex-wrap items-center gap-2",children:$.map((H)=>Y(pB,{filter:H,value:J[H.key],values:J,onFilterChange:Z},H.key))})}function pB({filter:B,value:J,values:Q,onFilterChange:Z}){if(B.type==="boolean"){const O=J?.kind==="single"?J.value===!0:void 0;return A(T,{size:"sm",variant:"outline",onPress:()=>JB(Q,B.key,O===void 0?!0:!O,Z),children:[B.label,": ",O?"Oui":"Non"]})}if(B.valueMode==="range"){const O=J?.kind==="range"?J:void 0;return A("div",{className:"flex min-w-0 items-center gap-2",children:[Y(F,{type:w(B),inputMode:m(B),value:O?.from==null?"":String(O.from),onChange:($)=>OB(Q,B,"from",$.currentTarget.value,Z),placeholder:`${B.label} min`,className:"h-9 w-28"}),Y(F,{type:w(B),inputMode:m(B),value:O?.to==null?"":String(O.to),onChange:($)=>OB(Q,B,"to",$.currentTarget.value,Z),placeholder:`${B.label} max`,className:"h-9 w-28"})]})}return Y(F,{type:w(B),inputMode:m(B),value:J?.kind==="single"?String(J.value):"",onChange:(O)=>JB(Q,B.key,QB(B,O.currentTarget.value),Z),placeholder:B.label,className:"h-9 w-36"})}function JB(B,J,Q,Z){const O={...B};if(Q===void 0||Q==="")delete O[J];else O[J]={kind:"single",value:Q};Z(O)}function OB(B,J,Q,Z,O){const $=B[J.key],H=$?.kind==="range"?$:{},M=QB(J,Z),K={...H,[Q]:M};if(K.from==null&&K.to==null){const X={...B};delete X[J.key];O(X);return}O({...B,[J.key]:{kind:"range",from:K.from,to:K.to}})}function QB(B,J){if(J==="")return;switch(B.type){case"number":case"percent":case"currency":case"duration":{const Q=Number(J);return Number.isFinite(Q)?Q:void 0}default:return J}}function w(B){switch(B.type){case"number":case"percent":case"currency":case"duration":return"number";case"date":return"date";case"time":return"time";case"datetime":return"datetime-local";default:return"text"}}function m(B){switch(B.type){case"number":case"percent":case"currency":case"duration":return"decimal";default:return}}function fB({mode:B,allowedModes:J,labels:Q,onChange:Z}){return Y("div",{className:"flex items-center gap-1 rounded-md border bg-background p-1",children:J.map((O)=>{const $=oB(O);return Y(T,{size:"sm",variant:O===B?"default":"ghost",onPress:()=>Z(O),ariaLabelI18n:Q?.[O]??O,children:Y($,{className:"h-4 w-4"})},O)})})}function cB({density:B,onChange:J}){return A("div",{className:"flex items-center gap-1 rounded-md border bg-background p-1",children:[Y(T,{size:"sm",variant:B==="comfortable"?"default":"ghost",onPress:()=>J("comfortable"),children:"Comfort"}),Y(T,{size:"sm",variant:B==="compact"?"default":"ghost",onPress:()=>J("compact"),children:"Compact"})]})}function rB({dataDepth:B,onChange:J}){return Y("div",{className:"flex items-center gap-1 rounded-md border bg-background p-1",children:_B.map((Q)=>Y(T,{size:"sm",variant:B===Q?"default":"ghost",onPress:()=>J(Q),children:SB(Q)},Q))})}function oB(B){if(B==="grid")return AB;if(B==="table")return jB;return MB}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DataViewCollectionMode, DataViewDensity, DataViewFilterSet, DataViewSpec } from '@contractspec/lib.contracts-spec/data-views';
|
|
1
|
+
import type { DataViewCollectionMode, DataViewDataDepth, DataViewDensity, DataViewFilterSet, DataViewSpec } from '@contractspec/lib.contracts-spec/data-views';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
export interface DataViewRendererProps {
|
|
4
4
|
spec: DataViewSpec;
|
|
@@ -19,6 +19,9 @@ export interface DataViewRendererProps {
|
|
|
19
19
|
density?: DataViewDensity;
|
|
20
20
|
defaultDensity?: DataViewDensity;
|
|
21
21
|
onDensityChange?: (density: DataViewDensity) => void;
|
|
22
|
+
dataDepth?: DataViewDataDepth;
|
|
23
|
+
defaultDataDepth?: DataViewDataDepth;
|
|
24
|
+
onDataDepthChange?: (dataDepth: DataViewDataDepth) => void;
|
|
22
25
|
search?: string;
|
|
23
26
|
onSearchChange?: (value: string) => void;
|
|
24
27
|
filters?: Record<string, unknown> | DataViewFilterSet;
|
|
@@ -30,4 +33,4 @@ export interface DataViewRendererProps {
|
|
|
30
33
|
};
|
|
31
34
|
onPageChange?: (page: number) => void;
|
|
32
35
|
}
|
|
33
|
-
export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, toolbar, loading, headerActions, emptyState, footer, viewMode, defaultViewMode, onViewModeChange, density, defaultDensity, onDensityChange, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function DataViewRenderer({ spec, items, item, className, renderActions, onSelect, onRowClick, toolbar, loading, headerActions, emptyState, footer, viewMode, defaultViewMode, onViewModeChange, density, defaultDensity, onDensityChange, dataDepth, defaultDataDepth, onDataDepthChange, search, onSearchChange, filters, onFilterChange, pagination, onPageChange, }: DataViewRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { DataViewCollectionConfig, DataViewCollectionMode, DataViewCollectionViewModesConfig, DataViewConfig, DataViewDensity, DataViewSpec } from '@contractspec/lib.contracts-spec/data-views';
|
|
1
|
+
import type { DataViewCollectionConfig, DataViewCollectionMode, DataViewCollectionViewModesConfig, DataViewConfig, DataViewDataDepth, DataViewDensity, DataViewSpec } from '@contractspec/lib.contracts-spec/data-views';
|
|
2
|
+
export declare const DATA_VIEW_DATA_DEPTHS: DataViewDataDepth[];
|
|
3
|
+
export declare function formatDataViewDataDepth(dataDepth: DataViewDataDepth): string;
|
|
2
4
|
export interface ResolvedCollectionView {
|
|
3
5
|
spec: DataViewSpec;
|
|
4
6
|
mode: DataViewCollectionMode;
|
|
@@ -8,9 +10,15 @@ export interface ResolveCollectionDensityInput {
|
|
|
8
10
|
density?: DataViewDensity;
|
|
9
11
|
defaultDensity?: DataViewDensity;
|
|
10
12
|
}
|
|
13
|
+
export interface ResolveCollectionDataDepthInput {
|
|
14
|
+
dataDepth?: DataViewDataDepth;
|
|
15
|
+
defaultDataDepth?: DataViewDataDepth;
|
|
16
|
+
}
|
|
11
17
|
export declare function isDataViewCollectionKind(kind: DataViewConfig['kind']): kind is DataViewCollectionMode;
|
|
12
18
|
export declare function resolveAllowedCollectionModes(view: DataViewConfig): DataViewCollectionMode[];
|
|
13
19
|
export declare function getDataViewCollectionConfig(view: DataViewConfig): DataViewCollectionConfig | undefined;
|
|
14
20
|
export declare function getDataViewCollectionViewModesConfig(view: DataViewConfig): DataViewCollectionViewModesConfig | undefined;
|
|
15
21
|
export declare function resolveCollectionView(spec: DataViewSpec, requestedMode?: DataViewCollectionMode): ResolvedCollectionView;
|
|
16
22
|
export declare function resolveCollectionDensity(spec: DataViewSpec, input?: ResolveCollectionDensityInput): DataViewDensity;
|
|
23
|
+
export declare function resolveCollectionDataDepth(spec: DataViewSpec, input?: ResolveCollectionDataDepthInput): DataViewDataDepth;
|
|
24
|
+
export declare function projectCollectionDataDepth(spec: DataViewSpec, dataDepth: DataViewDataDepth): DataViewSpec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const X=["list","grid","table"];export const DATA_VIEW_DATA_DEPTHS=["summary","standard","detailed","exhaustive"];const $=new Map(DATA_VIEW_DATA_DEPTHS.map((z,B)=>[z,B]));export function formatDataViewDataDepth(z){if(z==="summary")return"Summary";if(z==="detailed")return"Detailed";if(z==="exhaustive")return"Exhaustive";return"Standard"}export function isDataViewCollectionKind(z){return z==="list"||z==="grid"||z==="table"}export function resolveAllowedCollectionModes(z){const B=getDataViewCollectionConfig(z);if(!B||!isDataViewCollectionKind(z.kind))return isDataViewCollectionKind(z.kind)?[z.kind]:[];const G=getDataViewCollectionViewModesConfig(z),J=G?.allowedModes?.filter(x);if(J?.length)return H(J);if(B.toolbar?.viewMode===!0)return X;return G?X:[z.kind]}export function getDataViewCollectionConfig(z){if(!isDataViewCollectionKind(z.kind))return;return z.collection}export function getDataViewCollectionViewModesConfig(z){const B=getDataViewCollectionConfig(z),G=B?.toolbar?.viewMode;if(B?.viewModes)return B.viewModes;return typeof G==="object"?G:void 0}export function resolveCollectionView(z,B){const G=resolveAllowedCollectionModes(z.view),J=j(z.view,G),U=B&&G.includes(B)?B:J;return{spec:{...z,view:R(z.view,U)},mode:U,allowedModes:G}}export function resolveCollectionDensity(z,B={}){const G=z.view.kind==="table"?z.view.density:void 0;return B.density??B.defaultDensity??G??getDataViewCollectionConfig(z.view)?.density??"comfortable"}export function resolveCollectionDataDepth(z,B={}){return B.dataDepth??B.defaultDataDepth??getDataViewCollectionConfig(z.view)?.dataDepth??"standard"}export function projectCollectionDataDepth(z,B){if(!isDataViewCollectionKind(z.view.kind))return z;const G=z.view.fields.filter((Q)=>P(Q,B)),J=new Set(G.map((Q)=>Q.key)),U=J.has(z.view.primaryField??"")?z.view.primaryField:G[0]?.key,Y=z.view.secondaryFields?.filter((Q)=>J.has(Q));if(z.view.kind==="table")return{...z,view:{...z.view,fields:G,primaryField:U,secondaryFields:Y,columns:z.view.columns?.filter((Q)=>J.has(Q.field)),rowExpansion:z.view.rowExpansion?{...z.view.rowExpansion,fields:z.view.rowExpansion.fields.filter((Q)=>J.has(Q))}:void 0}};return{...z,view:{...z.view,fields:G,primaryField:U,secondaryFields:Y}}}function j(z,B){const G=isDataViewCollectionKind(z.kind)&&getDataViewCollectionViewModesConfig(z)?.defaultMode;if(G&&B.includes(G))return G;if(isDataViewCollectionKind(z.kind)&&B.includes(z.kind))return z.kind;return B[0]??"list"}function R(z,B){const G=getDataViewCollectionConfig(z),J={fields:z.fields,primaryField:z.primaryField,secondaryFields:z.secondaryFields,filters:z.filters,filterScope:z.filterScope,actions:z.actions,collection:G};if(B==="list")return{...J,kind:"list",layout:z.kind==="list"?z.layout:"compact"};if(B==="grid")return{...J,kind:"grid",columns:z.kind==="grid"?z.columns:void 0};if(z.kind==="table")return{...z,...J,kind:"table"};return{...J,kind:"table",density:G?.density}}function x(z){return z==="list"||z==="grid"||z==="table"}function H(z){return X.filter((B)=>z.includes(B))}function P(z,B){const G=z.visibility?.minDataDepth;if(!G)return!0;return Z(B)>=Z(G)}function Z(z){return $.get(z)??0}
|
|
@@ -12,6 +12,6 @@ export interface SelectProps extends ThemedPrimitiveProps {
|
|
|
12
12
|
name?: string;
|
|
13
13
|
className?: string;
|
|
14
14
|
}
|
|
15
|
-
export declare function Select({ options, groups, value, onChange, placeholder, disabled, className, componentKey, themeVariant, placeholderI18n, ...props }: SelectProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function Select({ options, groups, value, onChange, placeholder, disabled, id, name, className, componentKey, themeVariant, placeholderI18n, ...props }: SelectProps): import("react/jsx-runtime").JSX.Element;
|
|
16
16
|
export type { SelectOptionGroup };
|
|
17
17
|
export { SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as z,jsxs as M}from"react/jsx-runtime";import{SelectContent,SelectGroup,SelectItem,SelectLabel,SelectTrigger,SelectValue,Select as
|
|
1
|
+
import{jsx as z,jsxs as M}from"react/jsx-runtime";import{SelectContent,SelectGroup,SelectItem,SelectLabel,SelectTrigger,SelectValue,Select as T}from"@contractspec/lib.ui-kit-web/ui/select";import{useThemedPrimitive as v,useTranslatedText as w}from"../../primitives/themed";import{selectGroupKey as G,selectGroupLabel as L,selectOptionGroups as V,selectOptionLabel as _,selectOptionValue as D}from"./select-options";export function Select({options:Q,groups:R,value:E,onChange:U,placeholder:X,disabled:Y,id:Z,name:$,className:k,componentKey:P,themeVariant:W,placeholderI18n:N,...C}){const B=w(),f=v({defaultComponentKey:"Select",componentKey:P,themeVariant:W,className:k}),K=V({options:Q,groups:R});return M(T,{value:E==null?"":D(E),onValueChange:(q)=>U?.(q),disabled:Y,name:$,...C,children:[z(SelectTrigger,{id:Z,className:f.className,children:z(SelectValue,{placeholder:B(N??X)})}),z(SelectContent,{children:K.map((q,F)=>{const H=G(q,F),J=L(q,B);return M(SelectGroup,{children:[J?z(SelectLabel,{children:J}):null,q.options.map((A,O)=>z(SelectItem,{value:D(A.value),disabled:A.disabled,children:_(A,B)},`${H}-${D(A.value)}-${O}`))]},`${H}-${F}`)})})]})}export{SelectContent,SelectGroup,SelectItem,SelectLabel,SelectTrigger,SelectValue};
|
|
@@ -5,7 +5,7 @@ export interface TocItem {
|
|
|
5
5
|
label: React.ReactNode;
|
|
6
6
|
}
|
|
7
7
|
declare const tocVariants: (props?: ({
|
|
8
|
-
variant?: "
|
|
8
|
+
variant?: "inline" | "sidebar" | null | undefined;
|
|
9
9
|
size?: "sm" | "md" | null | undefined;
|
|
10
10
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
11
11
|
export type LegalTOCProps = {
|
|
@@ -2,7 +2,7 @@ import { type VariantProps } from 'class-variance-authority';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { MarketingSection } from './MarketingSection';
|
|
4
4
|
declare const gridVariants: (props?: ({
|
|
5
|
-
columns?: 2 | 3 | 4 |
|
|
5
|
+
columns?: 1 | 2 | 3 | 4 | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
type MarketingCardsSectionProps = React.PropsWithChildren<Omit<React.ComponentProps<typeof MarketingSection>, 'children'> & VariantProps<typeof gridVariants> & {
|
|
8
8
|
gridClassName?: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type VariantProps } from 'class-variance-authority';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
declare const chipVariants: (props?: ({
|
|
4
|
-
tone?: "
|
|
4
|
+
tone?: "neutral" | "info" | "success" | "warning" | "danger" | null | undefined;
|
|
5
5
|
size?: "sm" | "md" | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
export type StatusChipProps = React.HTMLAttributes<HTMLSpanElement> & VariantProps<typeof chipVariants> & {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ObjectReferenceActionDescriptor, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceRenderContext } from './types';
|
|
2
|
+
type IconRenderer = ObjectReferenceHandlerProps['iconRenderer'];
|
|
3
|
+
export declare function DefaultReferenceDetail({ context, iconRenderer, renderProperty, renderSection, runReferenceAction, }: {
|
|
4
|
+
context: ObjectReferenceRenderContext;
|
|
5
|
+
iconRenderer?: IconRenderer;
|
|
6
|
+
renderProperty?: ObjectReferenceHandlerProps['renderProperty'];
|
|
7
|
+
renderSection?: ObjectReferenceHandlerProps['renderSection'];
|
|
8
|
+
runReferenceAction: (reference: ObjectReferenceDescriptor, action: ObjectReferenceActionDescriptor) => void;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as I}from"react/jsx-runtime";import{Fragment as J}from"react";import{getObjectReferenceDisplayValue as Q}from"./actions";import{DefaultActionButton as T}from"./DefaultObjectReferenceParts";import{DefaultReferenceProperty as U,MetadataList as K}from"./DefaultObjectReferenceProperty";export function DefaultReferenceDetail({context:k,iconRenderer:E,renderProperty:G,renderSection:C,runReferenceAction:v}){const{reference:z}=k;return I("div",{className:"flex flex-col gap-3",children:[q(W,{reference:z}),z.sections?.map((H)=>C?q(J,{children:C({...k,section:H})},H.id):q(X,{context:k,iconRenderer:E,renderProperty:G,runReferenceAction:v,section:H},H.id)),z.properties&&z.properties.length>0?q("div",{className:"grid gap-2",children:z.properties.map((H)=>q(N,{context:k,iconRenderer:E,property:H,renderProperty:G,runReferenceAction:v},H.id))}):null]})}function W({reference:k}){return I("div",{className:"rounded-md border border-border bg-muted/30 p-3 text-sm",children:[q("div",{className:"font-medium text-foreground",children:Q(k)}),k.href?q("div",{className:"mt-1 break-all text-muted-foreground",children:k.href}):null,q(K,{entries:Object.entries(k.metadata??{})})]})}function X({context:k,iconRenderer:E,renderProperty:G,runReferenceAction:C,section:v}){return I("section",{className:"grid gap-2",children:[I("div",{children:[v.title?q("h3",{className:"font-medium text-foreground text-sm",children:v.title}):null,v.description?q("p",{className:"text-muted-foreground text-xs",children:v.description}):null]}),v.properties?.map((z)=>q(N,{context:k,iconRenderer:E,property:z,renderProperty:G,runReferenceAction:C},z.id)),v.actions&&v.actions.length>0?q("div",{className:"grid gap-2",children:v.actions.map((z)=>q(T,{action:z,reference:k.reference,iconRenderer:E,onClick:()=>C(k.reference,z)},z.id))}):null,q(K,{entries:Object.entries(v.metadata??{})})]})}function N({context:k,iconRenderer:E,property:G,renderProperty:C,runReferenceAction:v}){if(C)return q(J,{children:C({...k,property:G,depth:0,runPropertyAction:v})});return q(U,{context:k,depth:0,iconRenderer:E,property:G,runReferenceAction:v})}
|
|
@@ -5,9 +5,6 @@ export declare function DefaultObjectReferenceTrigger({ context, iconRenderer, i
|
|
|
5
5
|
interactivityVisibility: NonNullable<ObjectReferenceHandlerProps['interactivityVisibility']>;
|
|
6
6
|
className?: string;
|
|
7
7
|
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
export declare function DefaultReferenceDetail({ reference, }: {
|
|
9
|
-
reference: ObjectReferenceHandlerProps['reference'];
|
|
10
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
11
8
|
export declare function DefaultActionButton({ action, reference, iconRenderer, onClick, }: {
|
|
12
9
|
action: ObjectReferenceActionDescriptor;
|
|
13
10
|
reference: ObjectReferenceHandlerProps['reference'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r,jsxs as i}from"react/jsx-runtime";import{cn as
|
|
1
|
+
import{jsx as r,jsxs as i}from"react/jsx-runtime";import{cn as d}from"../../lib/utils";import{ReferenceIcon as l,ReferenceSearchIcon as a}from"./ReferenceIcon";export function DefaultObjectReferenceTrigger({context:e,iconRenderer:o,interactivityVisibility:n,className:c}){const{reference:t}=e;return i("span",{className:d("inline-flex min-w-0 items-center gap-1.5 text-foreground text-sm transition-colors hover:text-primary",n==="underline"&&"underline decoration-muted-foreground/50 underline-offset-4 hover:decoration-primary",c),children:[r(l,{context:{iconKey:t.iconKey??t.kind,reference:t},iconRenderer:o}),r("span",{className:"truncate",children:t.label}),n==="icon"?r(a,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}):null]})}export function DefaultActionButton({action:e,reference:o,iconRenderer:n,onClick:c}){return i("button",{type:"button",className:d("flex min-h-11 w-full items-center gap-3 rounded-md border border-border px-3 py-2 text-left text-sm transition-colors hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring",e.variant==="primary"&&"border-primary/40 bg-primary/10",e.variant==="danger"&&"border-destructive/40 text-destructive",e.disabled&&"cursor-not-allowed opacity-50"),disabled:e.disabled,onClick:c,children:[r(l,{context:{iconKey:e.iconKey??e.id,reference:o,action:e},iconRenderer:n}),i("span",{className:"min-w-0 flex-1",children:[r("span",{className:"block font-medium",children:e.label}),e.description?r("span",{className:"block text-muted-foreground text-xs",children:e.description}):null]})]})}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import type { ObjectReferenceActionDescriptor, ObjectReferenceHandlerProps, ObjectReferenceRenderContext } from './types';
|
|
1
|
+
import type { ObjectReferenceActionDescriptor, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceRenderContext } from './types';
|
|
2
2
|
export declare function NativeObjectReferenceTrigger({ context, iconRenderer, interactivityVisibility, }: {
|
|
3
3
|
context: ObjectReferenceRenderContext;
|
|
4
4
|
iconRenderer?: ObjectReferenceHandlerProps['iconRenderer'];
|
|
5
5
|
interactivityVisibility: NonNullable<ObjectReferenceHandlerProps['interactivityVisibility']>;
|
|
6
6
|
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
export declare function NativeReferenceDetail({
|
|
8
|
-
|
|
7
|
+
export declare function NativeReferenceDetail({ context, renderProperty, renderSection, runReferenceAction, }: {
|
|
8
|
+
context: ObjectReferenceRenderContext;
|
|
9
|
+
renderProperty?: ObjectReferenceHandlerProps['renderProperty'];
|
|
10
|
+
renderSection?: ObjectReferenceHandlerProps['renderSection'];
|
|
11
|
+
runReferenceAction: (reference: ObjectReferenceDescriptor, action: ObjectReferenceActionDescriptor) => void;
|
|
9
12
|
}): import("react/jsx-runtime").JSX.Element;
|
|
10
13
|
export declare function NativeActionButton({ action, onPress, }: {
|
|
11
14
|
action: ObjectReferenceActionDescriptor;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ObjectReferenceActionDescriptor, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceRenderContext } from './types';
|
|
2
|
+
type IconRenderer = ObjectReferenceHandlerProps['iconRenderer'];
|
|
3
|
+
export declare function DefaultReferenceProperty({ context, depth, iconRenderer, property, runReferenceAction, }: {
|
|
4
|
+
context: ObjectReferenceRenderContext;
|
|
5
|
+
depth: number;
|
|
6
|
+
iconRenderer?: IconRenderer;
|
|
7
|
+
property: ObjectReferenceDescriptor;
|
|
8
|
+
runReferenceAction: (reference: ObjectReferenceDescriptor, action: ObjectReferenceActionDescriptor) => void;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function MetadataList({ entries, }: {
|
|
11
|
+
entries: Array<[string, unknown]>;
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as q,jsxs as F}from"react/jsx-runtime";import{createDefaultObjectReferenceActions as J,getObjectReferenceDisplayValue as K}from"./actions";import{DefaultActionButton as L}from"./DefaultObjectReferenceParts";import{ReferenceIcon as N}from"./ReferenceIcon";export function DefaultReferenceProperty({context:z,depth:C,iconRenderer:E,property:g,runReferenceAction:H}){const I=g.actions??J(g),G=C<3?g.properties:void 0;return F("div",{className:"rounded-md border border-border p-3 text-sm",children:[F("div",{className:"flex items-start gap-2",children:[q(N,{context:{iconKey:g.iconKey??g.kind,reference:g},iconRenderer:E}),F("div",{className:"min-w-0 flex-1",children:[q("div",{className:"font-medium text-foreground",children:g.label}),q("div",{className:"break-words text-muted-foreground",children:K(g)}),g.description?q("div",{className:"mt-1 text-muted-foreground text-xs",children:g.description}):null]})]}),I.length>0?q("div",{className:"mt-3 grid gap-2",children:I.map((B)=>q(L,{action:B,reference:g,iconRenderer:E,onClick:()=>H(g,B)},B.id))}):null,G&&G.length>0?q("div",{className:"mt-3 grid gap-2",children:G.map((B)=>q(DefaultReferenceProperty,{context:z,depth:C+1,iconRenderer:E,property:B,runReferenceAction:H},B.id))}):null]})}export function MetadataList({entries:z}){if(z.length===0)return null;return q("dl",{className:"mt-3 grid gap-2",children:z.map(([C,E])=>F("div",{className:"grid gap-0.5",children:[q("dt",{className:"font-medium text-muted-foreground text-xs uppercase",children:C}),q("dd",{className:"break-words text-foreground",children:Q(E)})]},C))})}function Q(z){return typeof z==="object"&&z!==null?JSON.stringify(z):String(z)}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ObjectReferenceHandlerProps } from './types';
|
|
2
|
-
export declare function ObjectReferenceHandler({ reference, actions, interactivityVisibility, defaultOpen, open, onOpenChange, actionHandlers, onAction, onActionError, copyText, copyHandler, openHref, renderTrigger, renderDetail, renderAction, iconRenderer, className, panelClassName, }: ObjectReferenceHandlerProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function ObjectReferenceHandler({ reference, actions, interactivityVisibility, openTarget, panelMode, mobilePanelMode, desktopPanelMode, responsiveBreakpoint, defaultOpen, open, onOpenChange, actionHandlers, onAction, onActionError, copyText, copyHandler, openHref, renderTrigger, renderDetail, renderAction, renderProperty, renderSection, iconRenderer, className, panelClassName, }: ObjectReferenceHandlerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as F,jsxs as z}from"react/jsx-runtime";import{Tooltip as j,TooltipContent as y,TooltipTrigger as x}from"@contractspec/lib.ui-kit-web/ui/tooltip";import*as T from"react";import{DefaultReferenceDetail as g}from"./DefaultObjectReferenceDetail";import{DefaultActionButton as d,DefaultObjectReferenceTrigger as l}from"./DefaultObjectReferenceParts";import{ObjectReferencePanel as p}from"./ObjectReferencePanel";import{normalizeSafeObjectReferenceHref as s}from"./url-safety";import{useObjectReferenceController as f}from"./useObjectReferenceController";export function ObjectReferenceHandler({reference:q,actions:K,interactivityVisibility:U="underline",openTarget:G,panelMode:Q,mobilePanelMode:I,desktopPanelMode:E,responsiveBreakpoint:V,defaultOpen:B=!1,open:S,onOpenChange:k,actionHandlers:N,onAction:C,onActionError:M,copyText:h,copyHandler:m,openHref:b,renderTrigger:X,renderDetail:Y,renderAction:Z,renderProperty:v,renderSection:P,iconRenderer:W,className:D,panelClassName:w}){const{context:L,openDetail:u,resolvedActions:H,resolvedOpen:O,runAction:$,runReferenceAction:_,setOpen:A}=f({reference:q,actions:K,defaultOpen:B,open:S,onOpenChange:k,actionHandlers:N,copyText:h,copyHandler:m,openHref:b,openTarget:G,onAction:C,onActionError:M,defaultOpenTarget:G,defaultCopy:i,defaultOpenHref:a}),R=X?X(L):F(l,{context:L,iconRenderer:W,interactivityVisibility:U,className:D});return F(p,{open:O,onOpenChange:A,mode:Q,mobileMode:I,desktopMode:E,breakpoint:V,title:q.label,description:q.description,className:w,trigger:z(j,{children:[F(x,{asChild:!0,children:F("button",{type:"button",className:"contents","aria-label":q.ariaLabel??`Open ${q.label}`,onClick:(J)=>{if(c(G,q))J.preventDefault();u()},children:R})}),F(y,{children:q.ariaLabel??q.label})]}),children:z("div",{className:"flex flex-col gap-4 px-4 pb-4",children:[Y?Y(L):F(g,{context:L,iconRenderer:W,renderProperty:v,renderSection:P,runReferenceAction:_}),F("div",{className:"flex flex-col gap-2",children:H.map((J)=>Z?F(T.Fragment,{children:Z({...L,action:J,runAction:$})},J.id):F(d,{action:J,reference:q,iconRenderer:W,onClick:()=>$(J)},J.id))})]})})}async function i(q,K){if(typeof navigator<"u"&&navigator.clipboard){await navigator.clipboard.writeText(q);return}throw Error("Clipboard is not available.")}async function a(q,K,{target:U}){const G=s(q);if(!G||typeof window>"u")return;if(U==="new-page"){const Q=window.open(G,"_blank","noopener,noreferrer");if(Q)Q.opener=null;return}window.location.assign(G)}function c(q,K){return(q??K.openTarget)==="new-page"&&Boolean(K.href)}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ObjectReferenceHandlerProps } from './types';
|
|
2
|
-
export declare function ObjectReferenceHandler({ reference, actions, interactivityVisibility, defaultOpen, open, onOpenChange, actionHandlers, onAction, onActionError, copyText, copyHandler, openHref, renderTrigger, renderDetail, renderAction, iconRenderer, className, panelClassName, }: ObjectReferenceHandlerProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function ObjectReferenceHandler({ reference, actions, interactivityVisibility, openTarget, defaultOpen, open, onOpenChange, actionHandlers, onAction, onActionError, copyText, copyHandler, openHref, renderTrigger, renderDetail, renderAction, renderProperty, renderSection, iconRenderer, className, panelClassName, }: ObjectReferenceHandlerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
import { type AdaptivePanelBreakpoint, type AdaptivePanelMode } from '../overlays/AdaptivePanel';
|
|
3
|
+
export type ObjectReferencePanelMode = AdaptivePanelMode;
|
|
4
|
+
export type ObjectReferencePanelBreakpoint = AdaptivePanelBreakpoint;
|
|
5
|
+
export interface ObjectReferencePanelProps {
|
|
6
|
+
open: boolean;
|
|
7
|
+
onOpenChange: (open: boolean) => void;
|
|
8
|
+
trigger: React.ReactNode;
|
|
9
|
+
title: React.ReactNode;
|
|
10
|
+
description?: React.ReactNode;
|
|
11
|
+
mode?: ObjectReferencePanelMode;
|
|
12
|
+
mobileMode?: Exclude<ObjectReferencePanelMode, 'responsive'>;
|
|
13
|
+
desktopMode?: Exclude<ObjectReferencePanelMode, 'responsive'>;
|
|
14
|
+
breakpoint?: ObjectReferencePanelBreakpoint;
|
|
15
|
+
className?: string;
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare function ObjectReferencePanel(props: ObjectReferencePanelProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as n}from"react/jsx-runtime";import{AdaptivePanel as t}from"../overlays/AdaptivePanel";export function ObjectReferencePanel(e){return n(t,{...e})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as p,Fragment as
|
|
1
|
+
import{jsx as p,Fragment as R}from"react/jsx-runtime";import{Copy as s,ExternalLink as r,FileText as l,Mail as o,MapPin as t,Phone as c,Search,User as i}from"lucide-react";const m={address:t,email:o,phone:c,user:i,customer:i,file:l,url:r,custom:Search,copy:s,emailAction:o,map:t,phoneAction:c,"external-link":r};export function ReferenceIcon({context:e,iconRenderer:n}){if(n)return p(R,{children:n(e)});const a=m[e.iconKey]??Search;return p(a,{className:"h-4 w-4 shrink-0 text-muted-foreground"})}export{Search as ReferenceSearchIcon};
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import type { ObjectReferenceActionDescriptor, ObjectReferenceDescriptor } from './types';
|
|
1
|
+
import type { ObjectReferenceActionDescriptor, ObjectReferenceDescriptor, ObjectReferenceOpenTarget } from './types';
|
|
2
2
|
export { createMapsProviderHref, createMapsReferenceActions, type ObjectReferenceMapsActionOptions, type ObjectReferenceMapsProvider, } from './maps';
|
|
3
|
+
export interface ObjectReferenceOpenActionOptions {
|
|
4
|
+
label?: string;
|
|
5
|
+
openTarget?: ObjectReferenceOpenTarget;
|
|
6
|
+
}
|
|
3
7
|
export declare function getObjectReferenceDisplayValue(reference: ObjectReferenceDescriptor): string;
|
|
4
8
|
export declare function createCopyReferenceAction(reference: ObjectReferenceDescriptor, label?: string): ObjectReferenceActionDescriptor;
|
|
5
|
-
export declare function createOpenReferenceAction(reference: ObjectReferenceDescriptor,
|
|
9
|
+
export declare function createOpenReferenceAction(reference: ObjectReferenceDescriptor, options?: string | ObjectReferenceOpenActionOptions): ObjectReferenceActionDescriptor | null;
|
|
10
|
+
export declare function createEmailReferenceAction(reference: ObjectReferenceDescriptor, label?: string): ObjectReferenceActionDescriptor | null;
|
|
6
11
|
export declare function createPhoneReferenceAction(reference: ObjectReferenceDescriptor, label?: string): ObjectReferenceActionDescriptor | null;
|
|
7
12
|
export declare function createDefaultObjectReferenceActions(reference: ObjectReferenceDescriptor): ObjectReferenceActionDescriptor[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{createMapsProviderHref,createMapsReferenceActions}from"./maps";import{createMapsReferenceActions as c}from"./maps";function n(e){return e.trim().replace(/\s+/g," ")}export function getObjectReferenceDisplayValue(e){return e.value??e.href??e.label}export function createCopyReferenceAction(e,t="Copy"){return{id:"copy",label:t,description:"Copy this reference",iconKey:"copy",metadata:{copyText:getObjectReferenceDisplayValue(e)}}}export function createOpenReferenceAction(e,t=
|
|
1
|
+
export{createMapsProviderHref,createMapsReferenceActions}from"./maps";import{createMapsReferenceActions as c}from"./maps";function n(e){return e.trim().replace(/\s+/g," ")}export function getObjectReferenceDisplayValue(e){return e.value??e.href??e.label}export function createCopyReferenceAction(e,t="Copy"){return{id:"copy",label:t,description:"Copy this reference",iconKey:"copy",metadata:{copyText:getObjectReferenceDisplayValue(e)}}}export function createOpenReferenceAction(e,t={}){if(!e.href)return null;const r=typeof t==="string"?{label:t}:t;return{id:"open",label:r.label??"Open details",description:"Open the related page or resource",href:e.href,openTarget:r.openTarget??e.openTarget,iconKey:"external-link"}}export function createEmailReferenceAction(e,t="Email"){if(e.kind!=="email")return null;const r=n(e.value??e.label);if(!r)return null;return{id:"email",label:t,description:"Send an email",href:`mailto:${r}`,iconKey:"email"}}export function createPhoneReferenceAction(e,t="Call"){if(e.kind!=="phone")return null;const r=n(e.value??e.label);if(!r)return null;return{id:"call",label:t,description:"Call this phone number",href:`tel:${r.replace(/[^\d+]/g,"")}`,iconKey:"phone"}}export function createDefaultObjectReferenceActions(e){return[createCopyReferenceAction(e),createOpenReferenceAction(e),createEmailReferenceAction(e),createPhoneReferenceAction(e),...c(e)].filter((t)=>Boolean(t))}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export { createCopyReferenceAction, createDefaultObjectReferenceActions, createMapsProviderHref, createMapsReferenceActions, createOpenReferenceAction, createPhoneReferenceAction, getObjectReferenceDisplayValue, type ObjectReferenceMapsActionOptions, type ObjectReferenceMapsProvider, } from './actions';
|
|
1
|
+
export { createCopyReferenceAction, createDefaultObjectReferenceActions, createEmailReferenceAction, createMapsProviderHref, createMapsReferenceActions, createOpenReferenceAction, createPhoneReferenceAction, getObjectReferenceDisplayValue, type ObjectReferenceMapsActionOptions, type ObjectReferenceMapsProvider, } from './actions';
|
|
2
2
|
export { ObjectReferenceHandler } from './ObjectReferenceHandler';
|
|
3
|
+
export { ObjectReferencePanel, type ObjectReferencePanelProps, } from './ObjectReferencePanel';
|
|
3
4
|
export { type ExecuteObjectReferenceActionOptions, executeObjectReferenceAction, } from './runtime';
|
|
4
|
-
export type { JsonPrimitive, JsonValue, ObjectReferenceActionDescriptor, ObjectReferenceActionEvent, ObjectReferenceActionHandler, ObjectReferenceActionRenderContext, ObjectReferenceActionVariant, ObjectReferenceCopyHandler, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceIconRenderContext, ObjectReferenceInteractivityVisibility, ObjectReferenceKind, ObjectReferenceMetadata, ObjectReferenceOpenHrefHandler, ObjectReferenceRenderContext, } from './types';
|
|
5
|
+
export type { JsonPrimitive, JsonValue, ObjectReferenceActionDescriptor, ObjectReferenceActionEvent, ObjectReferenceActionHandler, ObjectReferenceActionRenderContext, ObjectReferenceActionVariant, ObjectReferenceCopyHandler, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceIconRenderContext, ObjectReferenceInteractivityVisibility, ObjectReferenceKind, ObjectReferenceMetadata, ObjectReferenceOpenHrefHandler, ObjectReferenceOpenTarget, ObjectReferencePanelBreakpoint, ObjectReferencePanelMode, ObjectReferencePropertyRenderContext, ObjectReferenceRenderContext, ObjectReferenceSectionDescriptor, ObjectReferenceSectionRenderContext, } from './types';
|
|
6
|
+
export { normalizeSafeObjectReferenceHref, SAFE_OBJECT_REFERENCE_PROTOCOLS, } from './url-safety';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{createCopyReferenceAction,createDefaultObjectReferenceActions,createMapsProviderHref,createMapsReferenceActions,createOpenReferenceAction,createPhoneReferenceAction,getObjectReferenceDisplayValue}from"./actions";export{ObjectReferenceHandler}from"./ObjectReferenceHandler";export{executeObjectReferenceAction}from"./runtime";
|
|
1
|
+
export{createCopyReferenceAction,createDefaultObjectReferenceActions,createEmailReferenceAction,createMapsProviderHref,createMapsReferenceActions,createOpenReferenceAction,createPhoneReferenceAction,getObjectReferenceDisplayValue}from"./actions";export{ObjectReferenceHandler}from"./ObjectReferenceHandler";export{ObjectReferencePanel}from"./ObjectReferencePanel";export{executeObjectReferenceAction}from"./runtime";export{normalizeSafeObjectReferenceHref,SAFE_OBJECT_REFERENCE_PROTOCOLS}from"./url-safety";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createCopyReferenceAction, createDefaultObjectReferenceActions, createMapsProviderHref, createMapsReferenceActions, createOpenReferenceAction, createPhoneReferenceAction, getObjectReferenceDisplayValue, type ObjectReferenceMapsActionOptions, type ObjectReferenceMapsProvider, } from './actions';
|
|
1
|
+
export { createCopyReferenceAction, createDefaultObjectReferenceActions, createEmailReferenceAction, createMapsProviderHref, createMapsReferenceActions, createOpenReferenceAction, createPhoneReferenceAction, getObjectReferenceDisplayValue, type ObjectReferenceMapsActionOptions, type ObjectReferenceMapsProvider, } from './actions';
|
|
2
2
|
export { ObjectReferenceHandler } from './ObjectReferenceHandler';
|
|
3
3
|
export { type ExecuteObjectReferenceActionOptions, executeObjectReferenceAction, } from './runtime';
|
|
4
|
-
export type { JsonPrimitive, JsonValue, ObjectReferenceActionDescriptor, ObjectReferenceActionEvent, ObjectReferenceActionHandler, ObjectReferenceActionRenderContext, ObjectReferenceActionVariant, ObjectReferenceCopyHandler, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceIconRenderContext, ObjectReferenceInteractivityVisibility, ObjectReferenceKind, ObjectReferenceMetadata, ObjectReferenceOpenHrefHandler, ObjectReferenceRenderContext, } from './types';
|
|
4
|
+
export type { JsonPrimitive, JsonValue, ObjectReferenceActionDescriptor, ObjectReferenceActionEvent, ObjectReferenceActionHandler, ObjectReferenceActionRenderContext, ObjectReferenceActionVariant, ObjectReferenceCopyHandler, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceIconRenderContext, ObjectReferenceInteractivityVisibility, ObjectReferenceKind, ObjectReferenceMetadata, ObjectReferenceOpenHrefHandler, ObjectReferenceOpenTarget, ObjectReferencePanelBreakpoint, ObjectReferencePanelMode, ObjectReferencePropertyRenderContext, ObjectReferenceRenderContext, ObjectReferenceSectionDescriptor, ObjectReferenceSectionRenderContext, } from './types';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ObjectReferenceActionEvent, ObjectReferenceHandlerProps } from './types';
|
|
1
|
+
import type { ObjectReferenceActionEvent, ObjectReferenceHandlerProps, ObjectReferenceOpenTarget } from './types';
|
|
2
2
|
export interface ExecuteObjectReferenceActionOptions {
|
|
3
3
|
actionHandlers?: ObjectReferenceHandlerProps['actionHandlers'];
|
|
4
4
|
copyText?: string;
|
|
@@ -6,6 +6,7 @@ export interface ExecuteObjectReferenceActionOptions {
|
|
|
6
6
|
openHref?: ObjectReferenceHandlerProps['openHref'];
|
|
7
7
|
onAction?: ObjectReferenceHandlerProps['onAction'];
|
|
8
8
|
onActionError?: ObjectReferenceHandlerProps['onActionError'];
|
|
9
|
+
defaultOpenTarget?: ObjectReferenceOpenTarget;
|
|
9
10
|
defaultCopy?: ObjectReferenceHandlerProps['copyHandler'];
|
|
10
11
|
defaultOpenHref?: ObjectReferenceHandlerProps['openHref'];
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getObjectReferenceDisplayValue as
|
|
1
|
+
import{getObjectReferenceDisplayValue as A}from"./actions";import{normalizeSafeObjectReferenceHref as B}from"./url-safety";export async function executeObjectReferenceAction(k,q){try{const w=q.actionHandlers?.[k.action.id];if(w)await w(k);else if(k.action.id==="copy")await C(k,q);else if(k.action.href){const y=B(k.action.href);if(!y)throw Error("Unsafe object reference href.");await D(y,k,E(k,q),q)}await q.onAction?.(k)}catch(w){q.onActionError?.(w,k)}}function C(k,q){const w=q.copyText??F(k.action.metadata?.copyText)??A(k.reference);if(q.copyHandler)return q.copyHandler(w,k);if(q.defaultCopy)return q.defaultCopy(w,k);throw Error("Clipboard is not available.")}function D(k,q,w,y){if(y.openHref)return y.openHref(k,q,{target:w});return y.defaultOpenHref?.(k,q,{target:w})}function E(k,q){return k.action.openTarget??G(k.action.metadata?.openTarget)??k.reference.openTarget??q.defaultOpenTarget??"same-page"}function F(k){return typeof k==="string"?k:void 0}function G(k){return k==="same-page"||k==="new-page"?k:void 0}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type * as React from 'react';
|
|
2
|
-
export type ObjectReferenceKind = 'address' | 'phone' | 'user' | 'customer' | 'file' | 'url' | 'custom';
|
|
2
|
+
export type ObjectReferenceKind = 'address' | 'email' | 'phone' | 'user' | 'customer' | 'file' | 'url' | 'custom';
|
|
3
3
|
export type ObjectReferenceInteractivityVisibility = 'none' | 'underline' | 'icon';
|
|
4
4
|
export type ObjectReferenceActionVariant = 'default' | 'primary' | 'secondary' | 'danger';
|
|
5
|
+
export type ObjectReferenceOpenTarget = 'same-page' | 'new-page';
|
|
6
|
+
export type ObjectReferencePanelMode = import('../overlays').AdaptivePanelMode;
|
|
7
|
+
export type ObjectReferencePanelBreakpoint = import('../overlays').AdaptivePanelBreakpoint;
|
|
5
8
|
export type JsonPrimitive = string | number | boolean | null;
|
|
6
9
|
export type JsonValue = JsonPrimitive | JsonValue[] | {
|
|
7
10
|
readonly [key: string]: JsonValue;
|
|
@@ -14,15 +17,28 @@ export interface ObjectReferenceDescriptor {
|
|
|
14
17
|
description?: string;
|
|
15
18
|
value?: string;
|
|
16
19
|
href?: string;
|
|
20
|
+
openTarget?: ObjectReferenceOpenTarget;
|
|
21
|
+
actions?: ObjectReferenceActionDescriptor[];
|
|
22
|
+
properties?: ObjectReferenceDescriptor[];
|
|
23
|
+
sections?: ObjectReferenceSectionDescriptor[];
|
|
17
24
|
metadata?: ObjectReferenceMetadata;
|
|
18
25
|
iconKey?: string;
|
|
19
26
|
ariaLabel?: string;
|
|
20
27
|
}
|
|
28
|
+
export interface ObjectReferenceSectionDescriptor {
|
|
29
|
+
id: string;
|
|
30
|
+
title?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
properties?: ObjectReferenceDescriptor[];
|
|
33
|
+
actions?: ObjectReferenceActionDescriptor[];
|
|
34
|
+
metadata?: ObjectReferenceMetadata;
|
|
35
|
+
}
|
|
21
36
|
export interface ObjectReferenceActionDescriptor {
|
|
22
37
|
id: string;
|
|
23
38
|
label: string;
|
|
24
39
|
description?: string;
|
|
25
40
|
href?: string;
|
|
41
|
+
openTarget?: ObjectReferenceOpenTarget;
|
|
26
42
|
disabled?: boolean;
|
|
27
43
|
variant?: ObjectReferenceActionVariant;
|
|
28
44
|
iconKey?: string;
|
|
@@ -31,11 +47,13 @@ export interface ObjectReferenceActionDescriptor {
|
|
|
31
47
|
export interface ObjectReferenceActionEvent {
|
|
32
48
|
reference: ObjectReferenceDescriptor;
|
|
33
49
|
action: ObjectReferenceActionDescriptor;
|
|
34
|
-
source: 'action';
|
|
50
|
+
source: 'action' | 'trigger';
|
|
35
51
|
}
|
|
36
52
|
export type ObjectReferenceActionHandler = (event: ObjectReferenceActionEvent) => void | Promise<void>;
|
|
37
53
|
export type ObjectReferenceCopyHandler = (text: string, event: ObjectReferenceActionEvent) => void | Promise<void>;
|
|
38
|
-
export type ObjectReferenceOpenHrefHandler = (href: string, event: ObjectReferenceActionEvent
|
|
54
|
+
export type ObjectReferenceOpenHrefHandler = (href: string, event: ObjectReferenceActionEvent, options: {
|
|
55
|
+
target: ObjectReferenceOpenTarget;
|
|
56
|
+
}) => void | Promise<void>;
|
|
39
57
|
export interface ObjectReferenceRenderContext {
|
|
40
58
|
reference: ObjectReferenceDescriptor;
|
|
41
59
|
actions: ObjectReferenceActionDescriptor[];
|
|
@@ -46,6 +64,14 @@ export interface ObjectReferenceActionRenderContext extends ObjectReferenceRende
|
|
|
46
64
|
action: ObjectReferenceActionDescriptor;
|
|
47
65
|
runAction: (action: ObjectReferenceActionDescriptor) => void;
|
|
48
66
|
}
|
|
67
|
+
export interface ObjectReferencePropertyRenderContext extends ObjectReferenceRenderContext {
|
|
68
|
+
property: ObjectReferenceDescriptor;
|
|
69
|
+
depth: number;
|
|
70
|
+
runPropertyAction: (property: ObjectReferenceDescriptor, action: ObjectReferenceActionDescriptor) => void;
|
|
71
|
+
}
|
|
72
|
+
export interface ObjectReferenceSectionRenderContext extends ObjectReferenceRenderContext {
|
|
73
|
+
section: ObjectReferenceSectionDescriptor;
|
|
74
|
+
}
|
|
49
75
|
export interface ObjectReferenceIconRenderContext {
|
|
50
76
|
iconKey: string;
|
|
51
77
|
reference: ObjectReferenceDescriptor;
|
|
@@ -55,6 +81,11 @@ export interface ObjectReferenceHandlerProps {
|
|
|
55
81
|
reference: ObjectReferenceDescriptor;
|
|
56
82
|
actions?: ObjectReferenceActionDescriptor[];
|
|
57
83
|
interactivityVisibility?: ObjectReferenceInteractivityVisibility;
|
|
84
|
+
openTarget?: ObjectReferenceOpenTarget;
|
|
85
|
+
panelMode?: ObjectReferencePanelMode;
|
|
86
|
+
mobilePanelMode?: Exclude<ObjectReferencePanelMode, 'responsive'>;
|
|
87
|
+
desktopPanelMode?: Exclude<ObjectReferencePanelMode, 'responsive'>;
|
|
88
|
+
responsiveBreakpoint?: ObjectReferencePanelBreakpoint;
|
|
58
89
|
defaultOpen?: boolean;
|
|
59
90
|
open?: boolean;
|
|
60
91
|
onOpenChange?: (open: boolean) => void;
|
|
@@ -67,6 +98,8 @@ export interface ObjectReferenceHandlerProps {
|
|
|
67
98
|
renderTrigger?: (context: ObjectReferenceRenderContext) => React.ReactNode;
|
|
68
99
|
renderDetail?: (context: ObjectReferenceRenderContext) => React.ReactNode;
|
|
69
100
|
renderAction?: (context: ObjectReferenceActionRenderContext) => React.ReactNode;
|
|
101
|
+
renderProperty?: (context: ObjectReferencePropertyRenderContext) => React.ReactNode;
|
|
102
|
+
renderSection?: (context: ObjectReferenceSectionRenderContext) => React.ReactNode;
|
|
70
103
|
iconRenderer?: (context: ObjectReferenceIconRenderContext) => React.ReactNode;
|
|
71
104
|
className?: string;
|
|
72
105
|
panelClassName?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SAFE_OBJECT_REFERENCE_PROTOCOLS=new Set(["http:","https:","mailto:","tel:","geo:"]);export function normalizeSafeObjectReferenceHref(e){const t=e?.trim();if(!t)return null;if(t.startsWith("/")&&!t.startsWith("//"))return t;if(t.startsWith("#"))return t;try{const r=new URL(t);return SAFE_OBJECT_REFERENCE_PROTOCOLS.has(r.protocol)?r.toString():null}catch{return null}}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import type { ObjectReferenceActionDescriptor, ObjectReferenceHandlerProps, ObjectReferenceRenderContext } from './types';
|
|
1
|
+
import type { ObjectReferenceActionDescriptor, ObjectReferenceActionEvent, ObjectReferenceDescriptor, ObjectReferenceHandlerProps, ObjectReferenceOpenTarget, ObjectReferenceRenderContext } from './types';
|
|
2
2
|
interface ControllerOptions extends ObjectReferenceHandlerProps {
|
|
3
3
|
defaultCopy?: ObjectReferenceHandlerProps['copyHandler'];
|
|
4
|
+
defaultOpenTarget?: ObjectReferenceOpenTarget;
|
|
4
5
|
defaultOpenHref?: ObjectReferenceHandlerProps['openHref'];
|
|
5
6
|
}
|
|
6
|
-
export declare function useObjectReferenceController({ reference, actions, defaultOpen, open, onOpenChange, actionHandlers, onAction, onActionError, copyText, copyHandler, openHref, defaultCopy, defaultOpenHref, }: ControllerOptions): {
|
|
7
|
+
export declare function useObjectReferenceController({ reference, actions, defaultOpen, open, onOpenChange, actionHandlers, onAction, onActionError, copyText, copyHandler, openHref, openTarget, defaultCopy, defaultOpenTarget, defaultOpenHref, }: ControllerOptions): {
|
|
7
8
|
context: ObjectReferenceRenderContext;
|
|
9
|
+
openDetail: () => void;
|
|
8
10
|
resolvedActions: ObjectReferenceActionDescriptor[];
|
|
9
11
|
resolvedOpen: boolean;
|
|
10
12
|
runAction: (action: ObjectReferenceActionDescriptor) => void;
|
|
13
|
+
runReferenceAction: (actionReference: ObjectReferenceDescriptor, action: ObjectReferenceActionDescriptor, source?: ObjectReferenceActionEvent["source"]) => void;
|
|
11
14
|
setOpen: (nextOpen: boolean) => void;
|
|
12
15
|
};
|
|
13
16
|
export {};
|