@standards/schema 1.0.0-alpha.442 → 1.0.0-alpha.443
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/{all-CQpxJzde.js → all-BrGOpgV8.js} +1 -1
- package/dist/{all-BYmKV0dE.mjs → all-Df9IeCkI.mjs} +1 -1
- package/dist/api/index.d.mts +321 -31
- package/dist/api/index.d.ts +321 -31
- package/dist/api/index.js +1 -1
- package/dist/api/index.mjs +1 -1
- package/dist/attribute-validators-BJdOkURX.mjs +11 -0
- package/dist/attribute-validators-rgM_bLG1.js +11 -0
- package/dist/{exceptions-uND1wZ9X.d.ts → exceptions-YHdKk5N8.d.ts} +8 -0
- package/dist/{exceptions-lFvB7G4Q.d.mts → exceptions-zQlC2r1F.d.mts} +8 -0
- package/dist/exceptions.d.mts +1 -1
- package/dist/exceptions.d.ts +1 -1
- package/dist/exceptions.js +1 -1
- package/dist/exceptions.mjs +1 -1
- package/dist/{index-CTEU8_BN.d.ts → index-BxDb1xz7.d.ts} +505 -162
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/record-operation-BrYpYAKR.js +2 -0
- package/dist/record-operation-DSjDUW-6.mjs +2 -0
- package/dist/{record-query-BY-r2Ck3.d.mts → record-query-CJVicxN7.d.mts} +505 -162
- package/dist/{utils-PmF7E7_-.d.mts → utils-BZMgedee.d.mts} +1 -1
- package/dist/{utils-Cn0G_X1P.d.ts → utils-CwQlKDYz.d.ts} +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/validation/all.d.mts +1 -1
- package/dist/validation/all.d.ts +1 -1
- package/dist/validation/all.js +1 -1
- package/dist/validation/all.mjs +1 -1
- package/openapi.json +779 -54
- package/package.json +2 -2
- package/dist/attribute-validators-BndMvVLT.mjs +0 -11
- package/dist/attribute-validators-CYrBg3Iz.js +0 -11
- package/dist/record-operation-DBY5XtZW.mjs +0 -2
- package/dist/record-operation-Dqvgxmnz.js +0 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
|
|
2
|
+
import"./zod-locale.mjs";import{DuplicateError as e,SchemaError as t,SchemaErrorCode as n,ValidationError as r}from"./exceptions.mjs";import*as i from"zod";import{COLORS as a,ICONS as o}from"@standards/constants";const s=i.codec(i.iso.datetime({offset:!0}),i.date(),{decode:e=>new Date(e),encode:e=>e.toISOString()});function brandedString(){return i.string()}function outputSchemaOf(e){return`_zod`in e.output?e.output:void 0}function decodeOperationOutput(e,t){let n=outputSchemaOf(e);if(n===void 0)return t;let r=i.safeDecode(n,t);return r.success?r.data:t}function unchecked(){return i.custom()}const c=[`question`,`approval`,`review`,`handoff`,`report`,`fyi`],l=[`unread`,`read`,`archived`],u=[`none`,`pending`,`completed`,`dismissed`,`expired`],d=[`open`,`snoozed`,`closed`,`answered`,`withdrawn`,`expired`,`unread`,`read`,`archived`],f=[`record`,`session`,`document`,`agent`,`routine`,`page`,`email_thread`,`url`],p=i.object({targetType:i.enum(f),targetId:i.string(),objectName:i.string().optional(),label:i.string().optional()});function formatDecisionLink(e){return e.targetType===`record`?`record:${e.objectName??``}:${e.targetId}`:`${e.targetType}:${e.targetId}`}function parseDecisionLink(e){let[t,...n]=e.split(`:`);if(!f.includes(t??``))return null;let r=t;if(r===`record`){let[e,t]=n;return n.length===2&&e&&t?{targetType:r,targetId:t,objectName:e}:null}let i=n.join(`:`);return i?{targetType:r,targetId:i}:null}function decisionThreadKey(e){return`decision:${e}`}const ee=120,m=200,h=`agent.question`,g=`agent.approval`,_=`agent.review`,v=`agent.setup`,y=`agent.routine_run.failed`,b=`agent.message`,x=`connector.connection.reauth_required`,S=`connector.connection.error`,C=`connector.connection.send_not_granted`,w=`record.assigned`,te=`record.mentioned`,ne=`access.granted`,re=`environment.build.failed`,ie=`person.decision`,ae=`bundle.setup`,oe=[h,g,_,v,y,b,x,S,C,w,te,ne,re,ie,ae],se=[`question`,`approval`,`review`,`handoff`];function isActionableDecisionKind(e){return se.includes(e)}const ce=[`agents`,`connectors`,`assignment`,`mentions`,`sharing`],le={[h]:{kind:`question`,area:null},[g]:{kind:`approval`,area:null},[_]:{kind:`review`,area:null},[v]:{kind:`handoff`,area:null},[y]:{kind:`question`,area:`agents`},[b]:{kind:`report`,area:`agents`},[x]:{kind:`handoff`,area:`connectors`},[S]:{kind:`handoff`,area:`connectors`},[C]:{kind:`handoff`,area:`connectors`},[w]:{kind:`fyi`,area:`assignment`},[te]:{kind:`fyi`,area:`mentions`},[ne]:{kind:`fyi`,area:`sharing`},[re]:{kind:`fyi`,area:`agents`},[ie]:{kind:`question`,area:null},[ae]:{kind:`handoff`,area:null}},ue=[`person`,`agent`,`system`],de=i.object({actorId:i.string(),kind:i.enum(ue),label:i.string()}),fe=i.object({id:i.string(),tenantId:i.string(),senderActorId:i.string().optional(),rootActorId:i.string().optional(),triggeredByActorId:i.string().optional(),kind:i.enum(c),type:i.string(),title:i.string(),summary:i.string().optional(),questions:unchecked().optional(),answer:unchecked().optional(),answeredBy:i.string().optional(),effect:i.string().optional(),links:i.array(p),sender:de.optional(),recipientActorIds:i.array(i.string()).optional(),payload:i.record(i.string(),i.unknown()),threadKey:i.string(),idempotencyKey:i.string().optional(),createdAt:s,updatedAt:s}),pe=i.object({documentId:i.string(),fileId:i.string(),name:i.string(),mimeType:i.string(),size:i.number(),url:i.string()}),me=i.object({id:i.string(),tenantId:i.string(),decisionId:i.string(),recipientActorId:i.string(),inboxState:i.enum(l),workState:i.enum(u),readAt:s.optional(),archivedAt:s.optional(),snoozedUntil:s.optional(),completedAt:s.optional(),dismissedAt:s.optional(),createdAt:s,updatedAt:s}),he=`transfers`;function isDecisionTransfer(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.fromActorId==`string`&&typeof t.toActorId==`string`&&typeof t.toLabel==`string`&&typeof t.at==`string`}function decisionTransfersOf(e){let t=e.payload[he];return Array.isArray(t)?t.filter(isDecisionTransfer):[]}function decisionTransferBy(e,t){return decisionTransfersOf(e).filter(e=>e.fromActorId===t).at(-1)}function decisionTransferTo(e,t){return decisionTransfersOf(e).filter(e=>e.toActorId===t).at(-1)}function decisionHandedBy(e,t){return decisionTransferTo(e,t)?.fromActorId}const ge=i.object({decision:fe,recipient:me,testLink:i.object({link:unchecked(),canOpen:i.boolean()}).optional()}),_e=i.object({items:i.array(ge),nextCursor:i.string().optional()}),ve=[`open`,`answered`,`withdrawn`,`expired`,`info`],ye=i.object({open:i.number(),unread:i.number()}),be=i.object({archivedCount:i.number()}),xe=i.object({to:i.array(i.string()).nullable()}),Se={createdAt:`createdAt`,updatedAt:`updatedAt`,createdBy:`createdBy`,lastUpdatedBy:`lastUpdatedBy`,attachments:`attachments`,parentId:`parentId`,childIds:`childIds`};function getSystemAttributeI18nKey(e){return Se[e]}const Ce={createdAt:{id:`system:createdAt`,name:`createdAt`,label:`Created time`,type:`date`,required:!1,system:!0,icon:`clock-circle`,description:`When this record was created`},updatedAt:{id:`system:updatedAt`,name:`updatedAt`,label:`Last edited time`,type:`date`,required:!1,system:!0,icon:`clock-circle`,description:`When this record was last modified`},createdBy:{id:`system:createdBy`,name:`createdBy`,label:`Created by`,type:`user`,required:!1,system:!0,multiple:!1,actors:!0,icon:`user`,description:`Actor who created this record`},lastUpdatedBy:{id:`system:lastUpdatedBy`,name:`lastUpdatedBy`,label:`Last edited by`,type:`user`,required:!1,system:!0,multiple:!1,actors:!0,icon:`user`,description:`Actor who last modified this record`},attachments:{id:`system:attachments`,name:`attachments`,label:`Attachments`,type:`document`,required:!1,system:!0,hidden:!0,icon:`paperclip`,description:`Free-form document attachments`}};function getSystemAttributeList(){return Object.values(Ce)}function isManagedSystemAttribute(e){return e.id?.startsWith(`system:`)??!1}const T=[`hierarchy:parentId`,`hierarchy:childIds`],we=/* @__PURE__ */ new Set([`parentId`,`childIds`]),Te=6;function getHierarchyAttributes(e){if(!e.hierarchical)return[];let t=[{object:e.name}];return[{id:T[0],name:`parentId`,label:`Parent`,type:`relation`,cardinality:`one`,targets:t,required:!1,system:!0,icon:`corner-left-up`,description:`The record this one sits under`},{id:T[1],name:`childIds`,label:`Sub-items`,type:`relation`,cardinality:`many`,targets:t,required:!1,system:!0,icon:`corner-down-right`,description:`The records that sit under this one`}]}function isHierarchyAttribute(e){return e.id?.startsWith(`hierarchy:`)??!1}function getObjectSystemAttributes(e){return[...getSystemAttributeList(),...getHierarchyAttributes(e)]}const Ee=[`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`is_empty`,`is_not_empty`],De=[`is`,`is_not`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`is_empty`,`is_not_empty`],Oe=[`is`],ke=[`is`,`is_not`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`is_within`,`on_day_month`,`is_empty`,`is_not_empty`],Ae=[`is`,`is_not`,`any_of`,`none_of`,`is_empty`,`is_not_empty`],je=[`any_of`,`none_of`,`is_empty`,`is_not_empty`],Me=[`is`,`is_not`,`any_of`,`none_of`,`is_empty`,`is_not_empty`],Ne=[`is_empty`,`is_not_empty`],Pe=[`is`,`is_not`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`contains`,`not_contains`,`is_empty`,`is_not_empty`],E=[`city`,`postalCode`,`country`];function isLocationFilterProperty(e){return E.includes(e)}const D={text:Ee,richtext:[],number:De,checkbox:Oe,date:ke,phone:[`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`is_empty`,`is_not_empty`],currency:De,status:Ae,select:Ae,multiselect:je,location:[],user:Me,relation:Me,formula:Pe,document:Ne},O={text:{value:`plain`,traits:[`placeholder`,`searchable`,`sortable`]},richtext:{value:`plain`,traits:[`searchable`,`content`]},number:{value:`plain`,traits:[`placeholder`,`sortable`]},checkbox:{value:`boolean`,traits:[`sortable`]},date:{value:`plain`,traits:[`placeholder`,`sortable`]},phone:{value:`plain`,traits:[`placeholder`,`searchable`,`sortable`]},currency:{value:`plain`,traits:[`placeholder`,`sortable`,`groupable`]},status:{value:`options`,traits:[`searchable`,`sortable`,`groupable`]},location:{value:`plain`,traits:[]},select:{value:`options`,traits:[`placeholder`,`searchable`,`sortable`]},multiselect:{value:`options`,traits:[`placeholder`,`searchable`]},user:{value:`reference`,traits:[]},relation:{value:`reference`,traits:[`qualified`]},formula:{value:`computed`,traits:[]},rollup:{value:`computed`,traits:[]},document:{value:`reference`,traits:[`content`,`qualified`]}};function descriptorOf(e){return Object.prototype.hasOwnProperty.call(O,e)?O[e]:void 0}function isValueKindType(e,t){return descriptorOf(e)?.value===t}function hasValueKind(e,t){return isValueKindType(e.type,t)}function hasTypeTrait(e,t){return descriptorOf(e)?.traits.includes(t)??!1}const Fe={plain:`static`,boolean:`automatic`,options:`static`,reference:`static`,computed:`forbidden`};function getAttributeCapabilities(e){let t=!!(e.hidden||e.archived),n=!e.archived,r=descriptorOf(e.type)?.value,i=r===`computed`,a=e.type===`document`,o=r===`reference`&&!isHierarchyAttribute(e),s=getAttributeCardinality(e),c=t?[]:getRawFilterOperators(e),l=c.length>0&&!t,u=!t&&hasTypeTrait(e.type,`searchable`),d=!t&&hasTypeTrait(e.type,`sortable`),f=!t&&hasTypeTrait(e.type,`groupable`),p=!t&&(e.type===`status`||e.type===`select`),ee=isManagedSystemAttribute(e),m=i||a||ee,h=!(t||m),g=r===void 0?`forbidden`:Fe[r],_=r===`boolean`||i?`forbidden`:`allowed`,v=supportsMaxItems(e),y=hasTypeTrait(e.type,`placeholder`),b=hasTypeTrait(e.type,`content`),x=!(!e.deprecated||t),S=resolveEditMode(e);return{lifecycle:{active:n,deprecated:!!e.deprecated,visibleInArchitect:!0,visibleInRuntime:!t,warningWhenDeprecated:x},storage:{mode:i?`computed`:o?`edge`:`value`,cardinality:s,edgeBacked:o,preservesExistingValues:!!e.archived,qualifiedProperties:hasTypeTrait(e.type,`qualified`),polymorphic:getPolymorphicCapability(e),maxItems:v},authoring:{editable:h,readOnly:m,directEdit:h&&S===`inline`,required:_,defaultValue:g,placeholder:y,maxItems:v},presentation:{formField:!t&&e.type!==`richtext`,tableCell:!(t||b),defaultColumn:!(t||b),compactDisplay:!t,popoverEditor:!t&&S===`popover`,placeholder:y,warningWhenDeprecated:x},query:{filterable:l,searchable:u,sortable:d,groupable:f,kanbanGroupable:p,operators:c},agent:{readable:!t,writable:h&&!a,compactReadable:!t,contentReadable:!t&&b,requiresDedicatedTool:a},exchange:{importable:!t,exportable:!t,schemaExportable:!0,metadataExportable:!1}}}function getAttributeFilterOperators(e){return getAttributeCapabilities(e).query.operators}function isAttributeFilterable(e){return getAttributeCapabilities(e).query.filterable}function isAttributeSearchable(e){return getAttributeCapabilities(e).query.searchable}function isAttributeSortable$1(e){return getAttributeCapabilities(e).query.sortable}function isAttributeGroupable(e){return getAttributeCapabilities(e).query.groupable}function isAttributeKanbanGroupable(e){return getAttributeCapabilities(e).query.kanbanGroupable}function resolveEffectiveFilterType(e){if(e.type!==`rollup`)return e.type;let t=e;if(t.function===`earliest`||t.function===`latest`)return`date`;if(t.function===`original`){let e=t.targetAttributeType;if(e&&hasFilterOperatorEntry(e))return e}return`number`}function getRollupFilterOperators$1(e){let t=resolveEffectiveFilterType(e);return hasFilterOperatorEntry(t)?D[t]:D.number}function getRawFilterOperators(e){return e.type===`rollup`?getRollupFilterOperators$1(e):D[e.type]??[]}function getAttributeCardinality(e){return e.type===`multiselect`||e.type===`document`||e.type===`user`&&e.multiple===!0||e.type===`relation`&&e.cardinality===`many`?`many`:`one`}function getPolymorphicCapability(e){if(e.type!==`relation`)return`none`;let t=e.targets??[];return t.length===1&&t[0]?.object===`*`?`internal`:t.length>1?`code-only`:`none`}function supportsMaxItems(e){return e.type===`multiselect`||e.type===`relation`&&e.cardinality===`many`}function resolveEditMode(e){switch(e.type){case`checkbox`:return`inline`;case`number`:return e.renderAs===`rating`?`inline`:`default`;case`select`:case`multiselect`:return e.renderAs===`badges`?`inline`:`popover`;case`status`:case`relation`:case`user`:case`date`:return`popover`;default:return`default`}}function hasFilterOperatorEntry(e){return Object.prototype.hasOwnProperty.call(D,e)}const Ie=[`text`,`richtext`,`number`,`checkbox`,`date`,`phone`,`currency`,`status`,`location`,`select`,`multiselect`,`user`,`relation`,`formula`,`rollup`,`document`],Le=`*`;function relationTargetsOf(e){return e.type!==`relation`||!Array.isArray(e.targets)?[]:e.targets.map(e=>e.object).filter(e=>e!==`*`)}function isUniversalRelation(e){return e.targets.length===1&&e.targets[0].object===`*`}function isBilateralRelation(e){return e.bilateral!==void 0}function inferInverseCardinality(e){return`many`}function isAttributeSortable(e){return isAttributeSortable$1(e)}const Re=D,ze=[`is_empty`,`is_not_empty`];function isNoValueOperator(e){return ze.includes(e)}function getRollupFilterOperators(e){return getRollupFilterOperators$1(e)}const k=[`skill`,`memory`,`drives`,`artifact`,`meeting`];function isNativeObjectName(e){return k.includes(e)}const A=[`workspace`,`private`],Be=[`all`,...A,`shared`],j=[...A,`shared`];function parseRecordListScope(e){if(typeof e==`string`&&j.includes(e))return e;throw new r(`visibility must be one of: ${j.join(`, `)} (received: ${String(e)})`,[])}function parseResourceVisibility(e){if(typeof e==`string`&&A.includes(e))return e;throw new r(`visibility must be one of: ${A.join(`, `)} (received: ${String(e)})`,[])}const Ve=[`id`,`createdAt`,`updatedAt`,`createdBy`,`lastUpdatedBy`,`visibility`,`ownedBy`],M=[...Ve,`objectId`,`label`,`embeddingText`,`values`,`metadata`,`deletedAt`,`deletedBy`,`schemaVersion`,`appearance`,`owned_by`,`parentId`,`childIds`],He=k,N={attributesPerObject:300,tabsPerView:24,membersPerGroup:4,pageRows:1e3,groupsPerFormTab:12,fieldsPerGroup:60,fieldsPerFormTab:150,columnsPerTab:50,displayAttributesPerCard:8,optionsPerAttribute:200,sidePanelAttributes:100,sidePanelPanes:20,filterRulesPerTab:50,sortsPerTab:20,emailAttributesPerTab:30,objectsPerPlan:20,mutationsPerPlan:500,planBytes:524288,historyDefault:20,historyMax:50,iconQueries:5,iconResults:20,labelLength:128},Ue=100,We=[`count`,`sum`,`cumulative`,`avg`,`min`,`max`],Ge=[`day`,`week`,`month`,`quarter`,`year`],Ke=Object.keys(a),qe=new Set(o),Je=i.enum(Ke).describe(`A color id from the palette`),P=i.string().superRefine((e,t)=>{qe.has(e)||t.addIssue({code:`custom`,message:`Invalid icon name`})}).transform(e=>e),F=[`page`,`record`,`display`];function defineBlock(e){let t=Object.fromEntries(Object.entries(e.inputs).map(([e,t])=>[e,t.isOptional?t.schema.optional():t.schema]));return Object.freeze({name:e.name,label:e.label,icon:e.icon,family:e.family,contexts:Object.freeze([...e.contexts]),inputs:Object.freeze({...e.inputs}),...e.layout===void 0?{}:{layout:Object.freeze({...e.layout})},parameters:i.object(t).strict().superRefine((t,n)=>{let r=e.refine?.(t);r&&n.addIssue({code:`custom`,path:[r.input],message:r.message})}),...e.refine===void 0?{}:{refine:(t,n)=>e.refine?.(t,n)}})}function parseBlockParameters(e,t,n){let i=e.parameters.safeParse(structuredClone(t??{}));if(!i.success)throw r.fromZodErrors(i.error.issues.map(e=>({path:[...n,...e.path.map(String)],message:e.message})));return i.data}function blockObjectInputs(e,t,n){return Object.entries(e.inputs).flatMap(([e,r])=>{let i=t[e];if(r.kind===`object`&&typeof i==`string`)return[i];if(r.kind===`query`&&typeof i==`object`&&i){let e=i.source;if(!e)return[];if(`object`in e&&typeof e.object==`string`)return[e.object];let t=n?.attributes.find(t=>t.name===e.relation);return t?relationTargetsOf(t):[]}return[]})}const Ye=/^\d{4}-\d{2}-\d{2}$/u;function isCalendarDay(e){if(!Ye.test(e))return!1;let t=/* @__PURE__ */ new Date(`${e}T00:00:00Z`);return!Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===e}function isDynamicValue(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`dynamic`in e}function currentActor(){return{dynamic:`actor`,ref:`current`}}function today(){return{dynamic:`date`,anchor:`today`}}function now(){return{dynamic:`date`,anchor:`now`}}function toAmount(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);return Number.isFinite(t)?t:null}return null}function extractCurrencyFilterValue(e){return typeof e==`object`&&e?`value`in e?toAmount(e.value):null:toAmount(e)}function extractFilterValue(e){return e==null?null:typeof e==`object`&&`value`in e?e.value??null:e}const Xe=/* @__PURE__ */ new Set([`is_not`,`not_contains`,`none_of`,`is_empty`]),Ze={is_not:`is`,not_contains:`contains`,none_of:`any_of`,is_empty:`is_not_empty`};function getOperatorPolarity(e){return Xe.has(e)?`none`:`any`}function normalizeForEdgeRpc(e){return Ze[e]??e}const Qe={is:`any_of`,is_not:`none_of`};function toMultiValueOperator(e){return Qe[e]??e}const $e=new Set(Object.values(Qe).filter(e=>e!==void 0));function isSetMembershipOperator(e){return $e.has(e)}function canonicalizeFilterValue(e,t){let n=e.value;if(isNoValueOperator(e.operator)||n==null||isDynamicValue(n))return;if(isSetMembershipOperator(e.operator)){Array.isArray(n)||(e.value=[n]);return}if(t!==`currency`)return;let i=extractCurrencyFilterValue(n);if(i!==null){e.value=i;return}if(!hasCurrencyAmount(n))return;let a=`Filter on a currency attribute expected a numeric amount, received ${JSON.stringify(n)}`;throw new r(a,[{path:[`value`],message:a}])}function hasCurrencyAmount(e){return typeof e!=`object`||`value`in e&&e.value!=null}const et=`__`;function parseQualifiedAttribute(e){let t=e.indexOf(`__`);return t<=0||t+2>=e.length?{kind:`scalar`,attribute:e}:{kind:`qualified`,root:e.slice(0,t),property:e.slice(t+2)}}function buildQualifiedAttribute(e,t){return`${e}__${t}`}const I=D.text,tt=[`is`,`is_not`,`is_empty`,`is_not_empty`],L=[`is`,`is_not`,`any_of`,`none_of`,`is_empty`,`is_not_empty`],R={id:L,objectId:L,tenantId:L,label:D.text,createdAt:D.date,updatedAt:D.date,deletedAt:D.date,createdBy:D.user,lastUpdatedBy:D.user,parentId:L,childIds:[`is_empty`,`is_not_empty`]},nt=/* @__PURE__ */ new Set([`createdAt`,`updatedAt`,`deletedAt`]);function offeredOn(e,t){return nt.has(e)?t.filter(e=>e!==`on_day_month`):t}function fullyOffered(e,t,n,r){return{target:e,attribute:t,...r?{property:r}:{},operators:n,offered:n}}function attributeFilterTarget(e){let t=isHierarchyAttribute(e)?systemColumnFilterTarget(e.name):void 0;if(t)return t;let n=getAttributeFilterOperators(e);return{target:e.name,attribute:e.name,operators:n,offered:offeredOn(e.name,n)}}function locationPartFilterTarget(e,t){return{target:buildQualifiedAttribute(e,t),attribute:e,property:t,operators:I,offered:t===`country`?tt:I}}function edgePropertyFilterTarget(e,t){let n=hasOperatorEntry(t.type)?D[t.type]:[];return fullyOffered(buildQualifiedAttribute(e,t.name),e,n,t.name)}function hasOperatorEntry(e){return Object.prototype.hasOwnProperty.call(D,e)}const rt=[`is`,`is_not`,`is_empty`,`is_not_empty`];function isMetadataKeyPath(e){return e.startsWith(`metadata.`)?e.slice(9).split(`.`).every(e=>e.length>0):!1}function systemColumnFilterTarget(e){if(isMetadataKeyPath(e))return{target:e,attribute:e,operators:rt,offered:[]};let t=Object.prototype.hasOwnProperty.call(R,e)?R[e]:void 0;return t?{target:e,attribute:e,operators:t,offered:offeredOn(e,t)}:void 0}function filterOperatorsOfType(e){return isAttributeType(e)?getAttributeFilterOperators({type:e}):[]}function isAttributeType(e){return Ie.includes(e)}function isLocationPartOperator(e){return I.includes(e)}function carriesEdgeProperties(e){return hasTypeTrait(e.type,`qualified`)}function filterTargetsOf(e){let t=[];for(let n of e){if(n.type===`location`){for(let e of E)t.push(locationPartFilterTarget(n.name,e));continue}if(t.push(attributeFilterTarget(n)),!carriesEdgeProperties(n))continue;let e=n.properties?.definitions;for(let r of e??[])t.push(edgePropertyFilterTarget(n.name,r))}let n=new Set(e.map(e=>e.name));for(let e of Object.keys(R)){if(n.has(e))continue;let r=systemColumnFilterTarget(e);r&&t.push(r)}return t.filter(e=>e.operators.length>0)}const it={eq:`is`,equals:`is`,equal:`is`,"==":`is`,"=":`is`,neq:`is_not`,notEqual:`is_not`,isNot:`is_not`,"!=":`is_not`,"<>":`is_not`,lt:`less_than`,"<":`less_than`,gt:`greater_than`,">":`greater_than`,lte:`less_or_equal`,"<=":`less_or_equal`,gte:`greater_or_equal`,">=":`greater_or_equal`,in:`any_of`,isAnyOf:`any_of`,anyOf:`any_of`,oneOf:`any_of`,notIn:`none_of`,not_in:`none_of`,isNoneOf:`none_of`,noneOf:`none_of`,notOneOf:`none_of`,startsWith:`starts_with`,beginsWith:`starts_with`,endsWith:`ends_with`,doesNotContain:`not_contains`,notContain:`not_contains`,isEmpty:`is_empty`,isNotEmpty:`is_not_empty`};function normalizeOperator(e){return it[e]??e}function normalizeFilterRule(e){let t=normalizeOperator(e.operator);return t===e.operator?e:{...e,operator:t}}const z=864e5,at=/* @__PURE__ */ new Set([`days`,`weeks`,`months`,`years`]),ot=/* @__PURE__ */ new Set([`past`,`future`]);function isRelativeDateValue(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.amount==`number`&&Number.isFinite(t.amount)&&t.amount>0&&typeof t.unit==`string`&&at.has(t.unit)&&typeof t.direction==`string`&&ot.has(t.direction)}function utcDayStart(e){return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())}function shiftUtcDay(e,t,n){if(n===`days`)return e+t*z;if(n===`weeks`)return e+t*7*z;let r=new Date(e),i=r.getUTCFullYear()+(n===`years`?t:0),a=r.getUTCMonth()+(n===`months`?t:0),o=new Date(Date.UTC(i,a+1,0)).getUTCDate();return Date.UTC(i,a,Math.min(r.getUTCDate(),o))}function resolveIsWithinBounds(e,t=/* @__PURE__ */ new Date){if(!isRelativeDateValue(e))return null;let n=utcDayStart(t),r=Math.trunc(e.amount),i=e.direction===`past`?{startMs:shiftUtcDay(n,-r,e.unit),endMs:n+z}:{startMs:n,endMs:shiftUtcDay(n,r,e.unit)+z};return Number.isFinite(i.startMs)&&Number.isFinite(i.endMs)?i:null}function resolveUtcDayBounds(e){if(!Number.isFinite(e))return null;let t=utcDayStart(new Date(e));return Number.isFinite(t)?{startMs:t,endMs:t+z}:null}function toUtcDayString(e){return new Date(e).toISOString().slice(0,10)}const st=/* @__PURE__ */ new Set([`relation`,`document`,`user`]),ct={id:`text`,objectId:`text`,objectName:`text`,tenantId:`text`,label:`text`,createdAt:`date`,updatedAt:`date`,deletedAt:`date`,deletedBy:`user`,createdBy:`user`,lastUpdatedBy:`user`,visibility:`select`,ownedBy:`user`,parentId:`text`,childIds:`relation`},B={before:`"less_than"`,after:`"greater_than"`,on_or_before:`"less_or_equal"`,on_or_after:`"greater_or_equal"`,is_checked:`"is" with value true`,is_not_checked:`"is" with value false`,day_month_eq:`"on_day_month"`},lt=new Set(Object.entries(D).filter(([,e])=>e.includes(`any_of`)&&!e.includes(`contains`)).map(([e])=>e)),ut={contains:`any_of`,not_contains:`none_of`};function resolveCanonicalOperator(e,t){let n=B[e];if(n){let t=`Unknown filter operator "${e}" — use ${n}`;throw new r(t,[{path:[`operator`],message:t}])}let i=normalizeOperator(e),a=ut[i];if(a&<.has(t)){let e=`Operator "${i}" is not valid for type "${t}" — use "${a}"`;throw new r(e,[{path:[`operator`],message:e}])}return i}function assertPropertyOperator(e,t,n){let i=resolveCanonicalOperator(e,t);if(!n.includes(i)){let i=`Operator "${e}" is not valid for property type "${t}". Valid operators: ${n.length?n.join(`, `):`(no operators registered for this type)`}.`;throw new r(i,[{path:[`operator`],message:i}])}return i}function assertRelativeDateValue(e){if(e.operator===`is_within`&&!isRelativeDateValue(e.value)){let e=`Operator "is_within" requires a relative-date value { amount: positive number, unit: days|weeks|months|years, direction: past|future }`;throw new r(e,[{path:[`value`],message:e}])}}const dt=/^(\d{4}-\d{2}-\d{2})(?:[T ](?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|[+-](?:(?:0\d|1[0-3])(?::[0-5]\d)?|14(?::00)?))?)?$/,ft=/* @__PURE__ */ new Set([`is`,`is_not`,`less_than`,`less_or_equal`,`greater_than`,`greater_or_equal`]);function assertAbsoluteDateValue(e,t){if(t!==`date`||!ft.has(e.operator))return;let n=e.value;if(n==null||isDynamicValue(n)||typeof n==`string`&&isCastableDay(n))return;let i=`Filter on a date attribute expected a YYYY-MM-DD day, optionally followed by a time, received ${JSON.stringify(n)}`;throw new r(i,[{path:[`value`],message:i}])}function isCastableDay(e){let t=dt.exec(e)?.[1];return!t||t.startsWith(`0000-`)?!1:isCalendarDay(t)}function resolveComparandType(e){return e.type===`formula`&&e.returnType===`date`?`date`:resolveEffectiveFilterType(e)}function applyCanonicalForm(e,t,n){e.operator=t,canonicalizeFilterValue(e,n),assertRelativeDateValue(e),assertAbsoluteDateValue(e,n)}function assertDynamicValueForAttribute(e,t){if(!isDynamicValue(e.value))return;let n=e.value;if(n.dynamic===`actor`&&t!==`user`){let e=`actor token (@me) is only valid on user attributes, not "${t}"`;throw new r(e,[{path:[`value`],message:e}])}if(n.dynamic===`date`&&t!==`date`){let e=`date token (@today/@now) is only valid on date attributes, not "${t}"`;throw new r(e,[{path:[`value`],message:e}])}}const V=E.map(e=>`"${e}"`).join(`, `);function operatorList(e){return e.length?e.join(`, `):`(not filterable)`}function qualifyWithSchema(e){if(st.has(e.type))return e.properties}function locationPartsHint(e){return e===`location`?` A location is filtered on one of its parts: set "property" to one of ${V} and use a text operator (e.g. contains).`:``}function dottedPathHint(e,t,n){let r=` Dotted paths are not supported — `;if(n.type===`location`)return`${r}set "attribute" to "${e}" and "property" to ${isLocationFilterProperty(t)?`"${t}"`:`one of ${V}`}.`;let i=qualifyWithSchema(n);if(i){let n=i.definitions.map(e=>`"${e.name}"`).join(`, `);return`${r}set "attribute" to "${e}" and "property" to ${i.definitions.some(e=>e.name===t)?`"${t}"`:`one of ${n}`} to filter on the edge property.`}let a=attributeFilterTarget(n).operators;return`${r}${a.length?`set "attribute" to "${e}" and use one of ${a.join(`, `)}`:`"${e}" is not filterable`}; the full-text "query" parameter matches tokens by relevance, not values.`}function collectQualifiedRuleIssues(e,t){try{return validateQualifiedRule({...e},t),[]}catch(e){if(!(e instanceof r))throw e;return e.errors.map(e=>({...e,path:[...e.path]}))}}function validateQualifiedRule(e,t){if(typeof e.attribute!=`string`){let e=`A filter rule needs an attribute: filters are one combinator and a flat list of rules`;throw new r(e,[{path:[`attribute`],message:e}])}let n=t.attributes.find(t=>t.name===e.attribute),i=n?[]:systemColumnFilterTarget(e.attribute)?.operators??[];if(!n&&i.length===0){let[n,...i]=e.attribute.split(`.`),a=i.length>0?t.attributes.find(e=>e.name===n):void 0,o=a?dottedPathHint(n??``,i[0]??``,a):e.attribute.includes(`.`)?` Dotted paths are not supported — filter on the attribute name alone with a structured operator (contains, any_of, …); the full-text "query" parameter matches tokens by relevance, not values.`:``,s=`Unknown attribute: ${e.attribute}${o}`;throw new r(s,[{path:[`attribute`],message:s}])}if(e.quantifier!==void 0&&!e.property){let e=`quantifier is only valid on qualified edge rules (set "property")`;throw new r(e,[{path:[`quantifier`],message:e}])}if(!n){if(e.property)throw new r(`Cannot qualify system attribute "${e.attribute}"`,[{path:[`property`],message:`"${e.attribute}" is a system column, not a reference`}]);let t=ct[e.attribute]??`text`,n=resolveCanonicalOperator(e.operator,t);if(!i.includes(n)){let t=`Operator "${e.operator}" is not valid for system attribute "${e.attribute}". Valid operators: ${i.join(`, `)}.`;throw new r(t,[{path:[`operator`],message:t}])}applyCanonicalForm(e,n,t);return}if(!e.property){assertDynamicValueForAttribute(e,n.type);let t=attributeFilterTarget(n).operators,i=resolveCanonicalOperator(e.operator,n.type);if(!t.includes(i)){let i=`Operator "${e.operator}" is not valid for attribute "${n.name}". Valid operators: ${operatorList(t)}.${locationPartsHint(n.type)}`;throw new r(i,[{path:[`operator`],message:i}])}applyCanonicalForm(e,i,resolveComparandType(n));return}if(n.type===`location`){if(e.quantifier!==void 0){let e=`quantifier is not valid on a location part — a location is one value, not a set of edges`;throw new r(e,[{path:[`quantifier`],message:e}])}if(!isLocationFilterProperty(e.property)){let t=`Property "${e.property}" is not a part of location "${e.attribute}". Valid parts: ${V}.`;throw new r(t,[{path:[`property`],message:t}])}assertDynamicValueForAttribute(e,`text`);let{operators:t}=locationPartFilterTarget(n.name,e.property);applyCanonicalForm(e,assertPropertyOperator(e.operator,`text`,t),`text`);return}if(!st.has(n.type))throw new r(`Cannot qualify ${n.type} attribute "${e.attribute}"`,[{path:[`property`],message:`Attribute "${e.attribute}" is not a reference type`}]);let a=n.properties;if(!a)throw new r(`Attribute "${e.attribute}" has no qualifyWith schema`,[{path:[`property`],message:`"${e.attribute}" has no qualifyWith`}]);let o=a.definitions.find(t=>t.name===e.property);if(!o)throw new r(`Property "${e.property}" not defined on "${e.attribute}".qualifyWith()`,[{path:[`property`],message:`Unknown property: ${e.property}`}]);let{operators:s}=edgePropertyFilterTarget(n.name,o);applyCanonicalForm(e,assertPropertyOperator(e.operator,o.type,s),o.type)}const pt=i.array(i.string()).max(N.columnsPerTab),mt=i.array(i.string().min(1)).max(N.columnsPerTab).refine(e=>new Set(e).size===e.length,{message:`Displayed attribute names must be unique`}),ht=i.object({attribute:i.string().describe(`Attribute to sort by`),direction:i.enum([`asc`,`desc`]).describe(`asc or desc`)}).strict(),H=i.array(ht).max(N.sortsPerTab),gt=i.object({amount:i.number().describe(`Count`),unit:i.enum([`days`,`weeks`,`months`,`years`]).describe(`Unit`),direction:i.enum([`past`,`future`]).describe(`Past or future`)}).strict(),_t=i.object({value:i.number().nullable().describe(`Amount`),code:i.array(i.string()).optional().describe(`Currency codes`)}).strict(),vt=i.object({phoneNumber:i.string().nullable().describe(`Number`),countryCode:i.string().optional().describe(`ISO country code`)}).strict(),yt=i.discriminatedUnion(`dynamic`,[i.object({dynamic:i.literal(`actor`).describe(`Resolved at filter time`),ref:i.literal(`current`).describe(`The current actor`)}).strict(),i.object({dynamic:i.literal(`date`).describe(`Resolved at filter time`),anchor:i.enum([`today`,`now`]).describe(`Anchor`)}).strict()]),bt=i.object({month:i.number().describe(`1-12`),day:i.number().describe(`Day`)}).strict(),xt=i.union([i.string(),i.number(),i.boolean(),i.array(i.string()),gt,_t,vt,bt,yt,i.null()]),St=i.enum([`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`is_empty`,`is_not_empty`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`is_within`,`on_day_month`,`any_of`,`none_of`],{error:e=>{let t=e.input,n=typeof t==`string`?B[t]:void 0;return n?`Unknown filter operator "${t}" — use ${n}`:void 0}}),Ct=i.object({attribute:i.string().describe(`Attribute to filter on`),property:i.string().optional().describe(`Qualified edge property`),quantifier:i.enum([`any`,`none`]).optional().describe(`For a multi-value attribute`),operator:St.describe(`Comparison`),value:xt.describe(`Comparison value, by attribute type`)}).strict(),wt=i.array(Ct).max(N.filterRulesPerTab),U=i.object({combinator:i.enum([`and`,`or`]).describe(`Match every rule or any rule`),rules:wt.describe(`The rules`)}).strict(),W=i.object({object:i.string().optional().describe(`Every record of this object`),relation:i.string().optional().describe(`Records linked through this relation`)}).strict().superRefine((e,t)=>{e.object===void 0&&e.relation===void 0&&t.addIssue({code:`custom`,message:`Collection source must define an object, a relation, or both`})}).transform(e=>e.relation===void 0?{object:e.object}:e.object===void 0?{relation:e.relation}:{object:e.object,relation:e.relation}),Tt=i.object({source:W,filters:U.optional(),sorts:H.optional(),limit:i.number().int().nonnegative().optional()}).strict();var RecordQuery=class{constructor(e){this.state=e}with(e){return new this.constructor({...this.state,...e})}rule(e,t,n){return this.with({rules:[...this.state.rules,{attribute:e,operator:t,value:n}]})}eq(e,t){return this.rule(e,`is`,t)}neq(e,t){return this.rule(e,`is_not`,t)}gt(e,t){return this.rule(e,`greater_than`,t)}gte(e,t){return this.rule(e,`greater_or_equal`,t)}lt(e,t){return this.rule(e,`less_than`,t)}lte(e,t){return this.rule(e,`less_or_equal`,t)}contains(e,t){return this.rule(e,`contains`,t)}notContains(e,t){return this.rule(e,`not_contains`,t)}startsWith(e,t){return this.rule(e,`starts_with`,t)}endsWith(e,t){return this.rule(e,`ends_with`,t)}in(e,t){return this.rule(e,`any_of`,t)}notIn(e,t){return this.rule(e,`none_of`,t)}isEmpty(e){return this.rule(e,`is_empty`,null)}isNotEmpty(e){return this.rule(e,`is_not_empty`,null)}where(...e){return this.with({rules:[...this.state.rules,...e.map(e=>({...e}))]})}or(){return this.with({combinator:`or`})}orderBy(e,t=`asc`){return this.with({sorts:[...this.state.sorts,{attribute:e,direction:t}]})}limit(e){return this.with({limit:e})}offset(e){return this.with({offset:e})}search(e){return this.with({search:e})}related(e){return this.with({scope:{kind:`related`,relation:e}})}relatedFrom(e){return this.with({scope:{kind:`relatedFrom`,relation:e}})}toDefinition(){let{object:e,scope:t,rules:n,combinator:r,sorts:i,limit:a}=this.state;return{source:t?.kind===`related`?{relation:t.relation}:t?.kind===`relatedFrom`?{object:e,relation:t.relation}:{object:e},...n.length>0?{filters:{combinator:r,rules:n.map(e=>({...e}))}}:{},...i.length>0?{sorts:i.map(e=>({...e}))}:{},...a===void 0?{}:{limit:a}}}};function query(e){return new RecordQuery({object:typeof e==`string`?e:e.build().name,combinator:`and`,rules:[],sorts:[]})}const G=[`day`,`week`,`month`,`quarter`,`year`],K=`$query`,Et=`$record`;function createInput(e){return Object.freeze({...e,optional:()=>createInput({...e,isOptional:!0}),inSection:t=>createInput({...e,section:t}),showWhen:(t,n)=>createInput({...e,when:{key:t,...n}}),many:()=>createInput({...e,isMany:!0,schema:i.array(e.schema).min(1)})})}function objectNameOf(e){return e===void 0||typeof e==`string`?e:e.build().name}function scalar(e,t,n){return createInput({kind:e,of:objectNameOf(n),isOptional:!1,isMany:!1,schema:t})}function name(){return i.string().min(1)}const q={object:e=>scalar(`object`,name(),e),attribute:(e,t)=>createInput({kind:`attribute`,of:objectNameOf(e),options:t,isOptional:!1,isMany:!1,schema:name()}),query:e=>scalar(`query`,Tt,e),record:e=>scalar(`record`,name(),e),agent:()=>scalar(`agent`,name()),routine:()=>scalar(`routine`,name()),view:()=>scalar(`view`,name()),url:()=>scalar(`url`,i.url().refine(e=>/^https?:\/\//.test(e),`Only http(s) links`)),emailCategory:()=>scalar(`emailCategory`,name()),enum:e=>createInput({kind:`enum`,isOptional:!1,isMany:!1,schema:i.enum(e)}),text:()=>scalar(`text`,name()),number:()=>scalar(`number`,i.number()),boolean:()=>scalar(`boolean`,i.boolean()),period:()=>scalar(`period`,i.enum(G))},J={size:{w:4,h:4},minWidth:3,height:`flexible`,minHeight:3,maxHeight:10},Dt=defineBlock({name:`artifact_preview`,label:`Preview`,icon:`eye`,family:`context`,contexts:[`record`],layout:{size:{w:6,h:8},minWidth:4,height:`flexible`,minHeight:4,maxHeight:20},inputs:{}}),Ot=[`number`,`currency`],kt=[`status`,`select`,`user`,`relation`,`date`],At=[`bar`,`horizontal_bar`,`line`,`area`,`donut`,`funnel`,`treemap`,`calendar`],jt=[`value_desc`,`value_asc`,`label`],Mt=[`line`,`area`,`funnel`,`calendar`];function measureIssue({measure:e,attribute:t}){return e===`count`?t===void 0?void 0:{input:`attribute`,message:`count measures records; it takes no attribute`}:t===void 0?{input:`attribute`,message:`${String(e)} needs a number or currency attribute`}:void 0}function requires(e,t,n){return e[t]!==void 0&&e[n]===void 0?{input:t,message:`${t} needs ${n}`}:void 0}function together(e,t,n){return requires(e,t,n)??requires(e,n,t)}function kindIssue(e){let{kind:t,by:n,byBucket:r,by2:i,measure:a}=e;if(i!==void 0&&i===n)return{input:`by2`,message:`by2 must differ from by`};if((t===`donut`||t===`funnel`)&&i!==void 0)return{input:`kind`,message:`a ${String(t)} splits one grouping (by), and no second`};if(t===`funnel`&&a!==`count`&&a!==`sum`)return{input:`kind`,message:`a funnel adds stages up: its measure is count or sum`};if(t===`area`&&i===void 0)return{input:`kind`,message:`an area stacks a second grouping (by2); one series is a line`};if(t===`treemap`&&(n===void 0||i!==void 0))return{input:`kind`,message:`a treemap needs one grouping (by), and no second`};if(t===`calendar`&&(r!==`day`||i!==void 0))return{input:`kind`,message:`a calendar needs a date grouping by day, and no second`};let o=Mt;if(e.order!==void 0&&o.includes(t))return{input:`order`,message:`order applies to bar, horizontal_bar, donut or treemap`}}function measuredInputs(){return{query:q.query(),measure:q.enum(We).inSection(`data`),attribute:q.attribute(K,{types:Ot}).optional().showWhen(`measure`,{not:[`count`]}),label:q.text().optional()}}function metricComparePeriod(e){if(e.period)return e.period;if(!e.trendBucket)return`month`;let t=G.indexOf(e.trendBucket);return G[Math.min(t+1,G.length-1)]??`month`}function comparedSpanIssue(e){let{trendBucket:t,compare:n}=e;if(n===void 0||typeof t!=`string`)return;let r=t;if(r===G.at(-1))return{input:`compare`,message:`compare needs a trendBucket finer than year`};let i=metricComparePeriod({trendBucket:r,period:e.period});return G.indexOf(i)>G.indexOf(r)?void 0:{input:`period`,message:`period must be wider than trendBucket (unset, it is one step above)`}}const Nt=defineBlock({name:`metric`,label:`Indicateur`,icon:`trending-up`,family:`data`,contexts:[`page`,`record`,`display`],layout:{size:{w:3,h:2},minWidth:3,height:`fit`,maxHeight:4,figure:!0},inputs:{...measuredInputs(),trend:q.attribute(K,{types:[`date`]}).optional().inSection(`display`),trendBucket:q.period().optional().showWhen(`trend`),compare:q.enum([`previous_period`]).optional(),period:q.period().optional().showWhen(`compare`),target:q.number().optional()},refine:e=>measureIssue(e)??together(e,`trend`,`trendBucket`)??requires(e,`period`,`compare`)??comparedSpanIssue(e)??(e.target!==void 0&&e.target<=0?{input:`target`,message:`target must be above zero`}:void 0)}),Pt=defineBlock({name:`chart`,label:`Graphique`,icon:`chart-bar`,family:`data`,contexts:[`page`,`record`,`display`],layout:{size:{w:4,h:6},minWidth:4,height:`flexible`,minHeight:4,maxHeight:12},inputs:{...measuredInputs(),kind:q.enum(At),by:q.attribute(K,{types:kt}).optional(),byBucket:q.period().optional().inSection(`data`).showWhen(`by`),by2:q.attribute(K,{types:kt}).optional().showWhen(`by`),by2Bucket:q.period().optional().inSection(`data`).showWhen(`by2`),order:q.enum(jt).optional().inSection(`display`).showWhen(`kind`,{not:Mt})},refine:e=>measureIssue(e)??requires(e,`byBucket`,`by`)??requires(e,`by2`,`by`)??requires(e,`by2Bucket`,`by2`)??kindIssue(e)}),Ft=defineBlock({name:`agenda`,label:`Agenda`,icon:`calendar`,family:`data`,contexts:[`page`,`record`,`display`],layout:J,inputs:{query:q.query(),attribute:q.attribute(K,{types:[`date`]}),next:q.number().optional(),yearly:q.boolean().optional(),label:q.text().optional()}}),It=defineBlock({name:`card`,label:`Fiche`,icon:`user-square`,family:`data`,contexts:[`page`,`record`,`display`],layout:{size:{w:4,h:4},minWidth:3,height:`fit`,maxHeight:10},inputs:{object:q.object().optional(),record:q.record().optional(),fields:q.attribute(Et).many().optional()},refine:(e,t)=>requires(e,`record`,`object`)??(t===`page`&&e.record===void 0?{input:`record`,message:`A card outside a record shows a chosen record: content.card(object).record(id)`}:void 0)}),Lt=defineBlock({name:`text_block`,label:`Texte`,icon:`type-text`,family:`layout`,contexts:[`page`,`record`,`display`],layout:{size:{w:12,h:2},minWidth:3,height:`fit`,maxHeight:16},inputs:{markdown:q.text()}}),Rt=defineBlock({name:`heading`,label:`Titre`,icon:`type-text`,family:`layout`,contexts:[`page`,`record`],layout:{size:{w:12,h:1},minWidth:6,height:`fit`,maxHeight:3},inputs:{title:q.text(),description:q.text().optional(),icon:q.text().optional()}}),zt=defineBlock({name:`decisions`,label:`Décisions`,icon:`inbox`,family:`people`,contexts:[`page`],layout:J,inputs:{kinds:q.enum(c).inSection(`data`).many().optional(),limit:q.number().optional()}}),Bt=defineBlock({name:`meetings_upcoming`,label:`Réunions à venir`,icon:`video`,family:`people`,contexts:[`page`],layout:J,inputs:{limit:q.number().optional()},refine:({limit:e})=>e===void 0||Number.isInteger(e)&&e>=1&&e<=50?void 0:{input:`limit`,message:`limit is a whole number from 1 to 50`}}),Vt=defineBlock({name:`mailbox`,label:`E-mails`,icon:`envelope`,family:`people`,contexts:[`page`],layout:J,inputs:{category:q.emailCategory().optional(),important:q.boolean().optional().inSection(`data`),unread:q.boolean().optional().inSection(`data`),limit:q.number().optional(),label:q.text().optional()},refine:({limit:e})=>e===void 0||Number.isInteger(e)&&e>=1&&e<=50?void 0:{input:`limit`,message:`limit is a whole number from 1 to 50`}}),Y=defineBlock({name:`record_links`,label:`Bubble`,icon:`share`,family:`context`,contexts:[`record`,`page`],layout:{size:{w:6,h:8},minWidth:6,height:`flexible`,minHeight:6,maxHeight:16},inputs:{center:q.enum([`record`,`me`]).optional().inSection(`data`),object:q.object().optional(),record:q.record().optional(),depth:q.enum([`1`,`2`,`3`,`4`,`5`]).optional()},refine:(e,t)=>requires(e,`record`,`object`)??(t===`page`&&e.center!==`me`&&e.record===void 0?{input:`record`,message:`Links outside a record centre on a chosen record or on the viewer: { object, record } or { center: "me" }`}:void 0)}),Ht={name:`bubble`,type:`custom`,extension:Y.name,placement:`main`,label:Y.label,icon:Y.icon,parameters:{}},Ut=[Dt,Nt,Pt,Ft,It,Lt,Rt,zt,Bt,Vt,Y],Wt=/* @__PURE__ */ new Set([`name`,`label`,`icon`,`family`,`contexts`,`inputs`,`parameters`,`layout`,`refine`]),Gt=Ut;var ContentExtensionRegistry=class{constructor(){this.extensions=/* @__PURE__ */ new Map,this.seed()}register(t){let n=Array.isArray(t)?t:[t],r=/* @__PURE__ */ new Set;n.forEach((t,n)=>{if(this.prepare(t,n),r.has(t.name))throw new e(`content extension`,t.name);r.add(t.name)});for(let e of n)this.extensions.set(e.name,e);return this}prepare(t,n){let i=[`extensions`,String(n)],reject=e=>{throw new r(e,[{path:i,message:e}])};if((typeof t!=`object`||!t||Array.isArray(t))&&reject(`Expected a content extension declaration`),Object.keys(t).some(e=>!Wt.has(e))&&reject(`Expected only ${[...Wt].join(`, `)}`),(typeof t.name!=`string`||t.name.trim().length===0)&&reject(`API name must not be empty`),(!Array.isArray(t.contexts)||t.contexts.length===0||t.contexts.some(e=>!F.includes(e)))&&reject(`contexts must be a non-empty list of ${F.join(`, `)}`),typeof t.parameters?.safeParse!=`function`&&reject(`parameters must be a Zod schema`),this.extensions.has(t.name))throw new e(`content extension`,t.name)}get(e){return this.extensions.get(e)}has(e){return this.extensions.has(e)}getAll(){return[...this.extensions.values()]}get size(){return this.extensions.size}clear(){this.extensions.clear(),this.seed()}seed(){for(let e of Gt)this.extensions.set(e.name,e)}};const Kt=new ContentExtensionRegistry,qt=12,X=[3,4,6,8,9,12];function overlaps(e,t){return e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h}function findGridViolation(e,t={}){let n=Object.entries(e);for(let[e,{x:t,y:r,w:i,h:a}]of n){if(![t,r,i,a].every(Number.isInteger))return{path:[e],message:`Block "${e}" needs integer grid coordinates`};if(t<0||r<0||i<1||a<1)return{path:[e],message:`Block "${e}" needs x >= 0, y >= 0, w >= 1 and h >= 1`};if(t+i>12)return{path:[e],message:`Block "${e}" overflows the 12-column grid (x + w = ${t+i})`}}let r=n.filter(([e])=>t.exempt?.has(e)!==!0);for(let[e,[t,n]]of r.entries())for(let[i,a]of r.slice(e+1))if(overlaps(n,a))return{path:[i],message:`Blocks "${t}" and "${i}" overlap`}}function groupedMembers(e){let t=new Set(e.filter(e=>e.type!==`group`).map(e=>e.name)),n=/* @__PURE__ */ new Set;for(let r of e)if(r.type===`group`)for(let e of r.members)t.has(e)&&n.add(e);return n}function memberlessGroups(e){let t=new Set(e.filter(e=>e.type!==`group`).map(e=>e.name));return new Set(e.flatMap(e=>e.type===`group`&&!e.members.some(e=>t.has(e))?[e.name]:[]))}function groupSizeMessage(e){return e>=2&&e<=N.membersPerGroup?void 0:`A group holds 2 to ${N.membersPerGroup} blocks, not ${e}`}function findGroupViolation(e){let t=new Map(e.map(e=>[e.name,e])),n=/* @__PURE__ */ new Map;for(let r of e)if(r.type===`group`)for(let e of r.members){let i=t.get(e);if(i===void 0)return{path:[r.name],message:`Group "${r.name}" names "${e}", which is not a content of this page`};if(i.type===`group`)return{path:[r.name],message:`Group "${r.name}" cannot hold the group "${e}"`};let a=n.get(e);if(a!==void 0)return{path:[r.name],message:a===r.name?`Group "${r.name}" names "${e}" twice`:`"${e}" already belongs to the group "${a}"`};n.set(e,r.name)}}function boundsOf(e){let{minHeight:t,maxHeight:n}=e;return t!==void 0&&n!==void 0?`${t} to ${n} rows`:t===void 0?`at most ${String(n)} rows`:`at least ${t} rows`}function findRowLimitViolation(e){let t=Object.entries(e).find(([,e])=>e.y+e.h>N.pageRows);if(t===void 0)return;let[n,r]=t;return{path:[n],message:`Block "${n}" ends at row ${r.y+r.h}, past the page's ${N.pageRows} rows`}}function cellViolation(e,t,n){if(!X.includes(t.w))return{path:[e],message:`Block "${e}" width ${t.w} is not one of ${X.join(`, `)}`};if(t.w<n.minWidth)return{path:[e],message:`Block "${e}" width ${t.w} is below its minimum width ${n.minWidth}`};if(n.height===`flexible`&&(n.minHeight!==void 0&&t.h<n.minHeight||n.maxHeight!==void 0&&t.h>n.maxHeight))return{path:[e],message:`Block "${e}" height ${t.h} is outside its bounds (${boundsOf(n)})`}}function sharesRows(e,t){return e.y<t.y+t.h&&t.y<e.y+e.h}function findLayoutRuleViolation(e,t,n,r=/* @__PURE__ */ new Set){let i=findRowLimitViolation(e);if(i!==void 0)return i;let a=groupedMembers(t),o=Object.entries(e).filter(([e])=>!a.has(e));for(let[e,t]of o){if(r.has(e))continue;let i=cellViolation(e,t,n(e));if(i!==void 0)return i}let[s,c]=o.filter(([e])=>!r.has(e)&&n(e).height===`fill`);if(s!==void 0&&c!==void 0)return{path:[c[0]],message:`Only one block may fill the page: "${s[0]}" and "${c[0]}" both do`};if(s===void 0)return;let[l,u]=s,d=o.find(([e,t])=>e!==l&&sharesRows(t,u));if(d!==void 0)return{path:[l],message:`Block "${l}" fills the page and must be alone in its rows; "${d[0]}" shares them`}}function findRelationAttribute(e,t){return e.attributes.find(e=>e.name===t&&e.type===`relation`)}function relationAcceptsObject(e,t){return e.targets.some(e=>e.object===t||e.object===`*`)}function singleRelationTarget(e){let[t,...n]=e.targets;return t&&n.length===0&&t.object!==`*`?t.object:void 0}function requireSingleRelationTarget(e,t=[e.name,`targets`]){let n=singleRelationTarget(e);if(n===void 0){let n=`Relation "${e.name}" requires one concrete collection target`;throw new r(n,[{path:t,message:n}])}return n}function isCollectionContent(e){return e.type===`collection`}function collectionSourceAddress(e){return e.relation===void 0?{kind:`object`,object:e.object}:e.object===void 0?{kind:`related`,relation:e.relation}:{kind:`relatedFrom`,object:e.object,relation:e.relation}}function collectionSourceAddressOf(e){if(!e||typeof e!=`object`)return;let t=`object`in e?e.object:void 0,n=`relation`in e?e.relation:void 0;if(typeof t==`string`&&typeof n==`string`)return{kind:`relatedFrom`,object:t,relation:n};if(typeof t==`string`&&n===void 0)return{kind:`object`,object:t};if(typeof n==`string`&&t===void 0)return{kind:`related`,relation:n}}function sourcedAttributeOf(e,t){if(t.type===`richtext`)return typeof t.attribute==`string`&&e!==void 0?{object:e,attribute:t.attribute}:void 0;if(t.type!==`collection`)return;let n=collectionSourceAddressOf(t.source);if(n?.kind===`related`)return e===void 0?void 0:{object:e,attribute:n.relation};if(n?.kind===`relatedFrom`)return{object:n.object,attribute:n.relation}}function requireRecordContentContext(e,t,n){if(t!==`record`){let i=`Content "${e}" requires record context. In ${t===`page`?`a standalone page`:`a collection view`} only a collection that lists a whole object, or a custom content that does not require a record, is allowed.`;throw new r(i,[{path:n,message:i}])}}function resolveContentNavigation(e){let t=e.openMode??`page`;return{openMode:t,createMode:e.createMode??t}}function resolveCollectionActions(e,t){return[...new Set(t)].filter(t=>e.actions===void 0||e.actions.includes(t))}const Jt={collection:[`page`,`record`,`display`],group:[`page`,`record`],form:[`record`],activity:[`record`],richtext:[`record`],documents:[`record`],forms:[`record`],emails:[`record`],meetings:[`record`]},Yt={collection:{size:{w:12,h:8},minWidth:6,height:`flexible`,minHeight:4,maxHeight:20},activity:{size:{w:12,h:8},minWidth:6,height:`flexible`},page:{size:{w:12,h:8},minWidth:6,height:`flexible`},group:{size:{w:6,h:4},minWidth:6,height:`flexible`}};function contentReadObjects(e,t,n){if(e.type!==`group`)return[...n(e)];let r=/* @__PURE__ */ new Set;for(let i of e.members){let e=t.get(i);if(e!==void 0&&e.type!==`group`)for(let t of n(e))r.add(t)}return[...r]}function contentPlacementContexts(e,t){return e.type===`custom`?t?.contexts:e.type===`page`||e.type===`collection`&&collectionSourceAddress(e.source).kind!==`object`?[`record`]:Jt[e.type]}function requireContentPlacement(e,t,n,r,i){let a=contentPlacementContexts(e,t);a&&!a.includes(hostPlacementContext(r))&&(requireRecordContentContext(n,r,i),reject(i,`Content "${n}" cannot be placed in a record view or a record page`))}function hostPlacementContext(e){return e===`record`?`record`:`page`}function contentContextOf(e){return e.context===`page`&&e.object!==void 0?`record`:e.context}const Xt=/* @__PURE__ */ new WeakSet;function violationOf(e,n,i,a){if(!(e instanceof t))throw e;let o=e instanceof r?e.errors[0]:void 0;return{key:JSON.stringify([n,i,e.code,Xt.has(e)?`Invalid content view`:e.message]),contentName:i,path:o?.path??a,message:e.message,code:e.code,error:e}}const Zt=systemAttributeMap({name:``});function systemAttributeMap(e){return new Map(getObjectSystemAttributes(e).map(e=>[e.name,e]))}function reject(e,t){throw new r(t,[{path:e,message:t}])}function requireName(e,t){e.trim().length===0&&reject(t,`API name must not be empty`)}function indexUnique(t,n,r){let i=/* @__PURE__ */ new Map;return t.forEach((t,a)=>{if(requireName(t.name,[...r,String(a),`name`]),i.has(t.name))throw new e(n,t.name);i.set(t.name,t)}),i}const Qt=30;function capped(e,t){let n=e.slice(0,t).join(`, `);return e.length>t?`${n} … and ${e.length-t} more`:n}function attributeInventory(e,t){return t.length===0?`Object "${e}" has no attributes yet.`:`Attributes of "${e}": ${capped(t,30)}`}function requireAttribute(e,t,n,r,i){if(requireName(t,n),!e)return;let a=e.attributes?.get(t)??(e.system??Zt).get(t);if(!a){if(!e.attributes||we.has(t))return;let r=attributeInventory(e.name,[...e.attributes.keys()]);reject(n,`Unknown attribute "${e.name}.${t}". ${r}${i?.()??``}`)}let o=r===void 0?[]:[r].flat();return o.length>0&&!o.includes(a.type)&&reject(n,`Attribute "${e.name}.${t}" must have type ${o.join(` or `)}`),a}function collectContentViewCatalogue(t,n=`authoring`){let i=t.mode??`published`,a=/* @__PURE__ */ new Map;t.objects.forEach((t,n)=>{if(requireName(t.name,[`objects`,String(n),`name`]),a.has(t.name))throw new e(`object`,t.name);a.set(t.name,{name:t.name,system:systemAttributeMap(t),attributes:indexUnique(t.attributes,`attribute`,[`objects`,String(n),`attributes`])})});let o=/* @__PURE__ */ new Set;(t.reservedObjects??[]).forEach((e,t)=>{let n=[`reservedObjects`,String(t)];requireName(e,n),a.has(e)||(i!==`draft`&&reject(n,`Unresolved reserved object "${e}"`),o.add(e),a.set(e,{name:e}))});let s=indexUnique(t.extensions??[],`extension`,[`extensions`]);function resolveObject(e,t){requireName(e,t);let n=a.get(e);return n||reject(t,`Unknown object "${e}"`),n}function inverseAddresses(e){let t=[];for(let[n,r]of a)if(n!==e)for(let i of r.attributes?.values()??[])i.type===`relation`&&relationAcceptsObject(i,e)&&t.push(`relatedFrom("${n}", "${i.name}")`);return t.sort().slice(0,3)}let authoringSchemaWith=e=>i===`draft`?draftContentViewDefinitionSchemaFor():contentViewDefinitionSchemaFor({traits:n===`structural`?null:(e,t)=>layoutTraitsOf(e,s,t),viewerFiltered:t.viewerFiltered,...e===void 0?{}:{statics:e}}),c=authoringSchemaWith(),l=i===`draft`||n===`structural`?c:contentViewDefinitionSchemaFor({traits:null,viewerFiltered:t.viewerFiltered}),schemaFor=e=>{if(t.authoringViews!==void 0&&!t.authoringViews.has(e))return l;let n=t.staticsOf?.(e);return n===void 0||n.size===0?c:authoringSchemaWith(n)},u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Map,f=[],p=[];function parseView(t,n,i){let a=schemaFor(i).safeParse(t);if(!a.success){let e=new r(invalidViewMessage(t,a.error.issues[0]),a.error.issues.map(e=>({path:[...n,...e.path.map(String)],message:e.message,code:e.code})));throw Xt.add(e),e}let o=a.data;requireName(o.name,[...n,`name`]);let s=o.object??``,c=u.get(s)??/* @__PURE__ */ new Set;if(c.has(o.name))throw new e(`view`,`${s}.${o.name}`);if(c.add(o.name),u.set(s,c),o.context!==`page`&&o.default){let t=d.get(o.object)??/* @__PURE__ */ new Set;if(t.has(o.context))throw new e(`default view`,`${o.object}.${o.context}`);t.add(o.context),d.set(o.object,t)}return o}return t.views.forEach((e,n)=>{let r=[`views`,String(n)],i=e,a=`${String(i?.object??`?`)}.${String(i?.name??n)}`,o,c;try{o=parseView(e,r,n),c=o.object===void 0?void 0:resolveObject(o.object,[...r,`object`])}catch(e){f.push(violationOf(e,a,null,r));return}o.contents.forEach((e,i)=>{let l=[...r,`contents`,String(i)];try{requireName(e.name,[...l,`name`]),validateContent(e,l,c,contentContextOf(o),s,resolveObject,inverseAddresses,t.authoringViews?.has(n)===!0)}catch(t){f.push(violationOf(t,a,e.name,l))}}),p.push(o)}),p.forEach((e,n)=>{e.contents.forEach((i,a)=>{if(i.type!==`page`)return;let o=[`views`,String(n),`contents`,String(a),`page`],s=p.find(e=>e.context===`page`&&e.object===i.page.object&&e.name===i.page.name),c=e.context===`page`?`Content "${i.name}" cannot reference a page from a page`:e.object===i.page.object?s||t.complete!==!0?void 0:`Unknown page "${i.page.object}.${i.page.name}"`:`Content "${i.name}" must reference a page of "${String(e.object)}", not of "${i.page.object}"`;c!==void 0&&f.push(violationOf(new r(c,[{path:o,message:c}]),`${String(e.object)}.${e.name}`,i.name,o))})}),{views:p,unresolvedObjects:[...o].sort(),violations:f}}function validateStoredViews(e){let t=collectContentViewCatalogue(e,`structural`).violations[0];if(t)throw t.error}function describeViewIssue(e){let t=e.path.length>0?` (${e.path.map(String).join(`.`)})`:``;return`${e.message}${t}`}function invalidViewMessage(e,t){let n=typeof e==`object`&&e?e:{},r=typeof n.name==`string`?` "${n.name}"`:``,i=typeof n.object==`string`?` of "${n.object}"`:``;return t?`Invalid content view${r}${i}: ${describeViewIssue(t)}`:`Invalid content view${r}${i}`}function validateContentViewCatalogue(e){let{views:t,unresolvedObjects:n,violations:r}=collectContentViewCatalogue(e),i=r[0];if(i)throw i.error;return{views:t,unresolvedObjects:n}}function resolveStoredQuery(e,t,n,{owner:r,requireRecord:i,resolveObject:a,inverseAddresses:o}){let s=collectionSourceAddress(e.source),c,l;if(s.kind===`object`)c=a(s.object,[...t,`source`,`object`]);else if(s.kind===`related`){i();let e=[...t,`source`,`relation`],hint=()=>{if(!r)return``;let e=o(r.name);return e.length===0?``:`. Records pointing at "${r.name}" are addressed from the other side: ${e.join(`, `)}`},n=requireAttribute(r,s.relation,e,`relation`,hint);n?.type===`relation`&&(l=n,c=a(requireSingleRelationTarget(n,e),e))}else{i(),c=a(s.object,[...t,`source`,`object`]);let o=[...t,`source`,`relation`],l=requireAttribute(c,s.relation,o,`relation`);if(l?.type===`relation`&&r&&!relationAcceptsObject(l,r.name)){let e=l.targets.map(e=>`"${e.object}"`).join(`, `);reject(o,`Relation "${s.object}.${s.relation}" targets ${e}, not "${r.name}"`)}e.filters?.combinator===`or`&&reject([...t,`filters`,`combinator`],`${n} addresses "${s.object}" from the far side, so its filters must use the "and" combinator`)}return e.sorts?.forEach((e,n)=>requireAttribute(c,e.attribute,[...t,`sorts`,String(n),`attribute`])),e.filters?.rules.forEach((e,n)=>requireAttribute(c,e.attribute,[...t,`filters`,`rules`,String(n),`attribute`])),{target:c,relationAttribute:l}}function validateBlockReferences(e,t,n,r){let i=Object.entries(e.inputs),a;for(let[o,s]of i){let i=t[o];s.kind===`query`&&i!==void 0&&(a=resolveStoredQuery(i,[...n,o],`Block "${e.name}"`,r).target)}function attributeScope(o){if(o===void 0)return;if(o===`$query`)return a;if(o!==`$record`)return r.resolveObject(o,n);let s=i.find(([,e])=>e.kind===`object`)?.[0],c=s===void 0?void 0:t[s];return typeof c==`string`?r.resolveObject(c,[...n,s??`object`]):(r.owner||reject(n,`Block "${e.name}" names attributes, so it needs an object or a record host`),r.owner)}for(let[e,r]of i){let i=t[e];if(r.kind!==`attribute`||i===void 0)continue;let a=attributeScope(r.of);(Array.isArray(i)?i:[i]).forEach((t,o)=>{if(typeof t!=`string`)return;let s=Array.isArray(i)?[...n,e,String(o)]:[...n,e];requireAttribute(a,t,s,r.options?.types)})}for(let[r,a]of i){let i=a.when?.key,o=i===void 0?void 0:e.inputs[i],s=i===void 0?void 0:t[i];a.kind===`period`&&t[r]!==void 0&&o?.kind===`attribute`&&typeof s==`string`&&requireAttribute(attributeScope(o.of),s,[...n,i??r],[`date`])}}function isBoardGrouping(e){return(e?.type===`status`||e?.type===`select`)&&!e.hidden}function requireBoardGrouping(e,t,n){let r=t.type===`status`||t.type===`select`?`is hidden`:`is a ${t.type}`;isBoardGrouping(t)||reject(n,`A board groups by a visible status or select attribute: "${e}.${t.name}" ${r}`)}function validateContent(e,t,n,i,a,o,s,c){function requireRecord(){requireRecordContentContext(e.name,i,t)}let l={owner:n,requireRecord,resolveObject:o,inverseAddresses:s},u=hostPlacementContext(i);if(e.type===`custom`){let n=a.get(e.extension);n||reject([...t,`extension`],`Unknown extension "${e.extension}"`),contentPlacementContexts(e,n)?.includes(u)||reject([...t,`extension`],`${e.extension} cannot be placed here`);let i=n.parameters.safeParse(structuredClone(e.parameters??{}));if(!i.success)throw new r(`Invalid extension parameters`,i.error.issues.map(e=>({path:[...t,`parameters`,...e.path.map(String)],message:e.message,code:e.code})));let o=i.data,s=n.refine?.(o,u);s&&reject([...t,`parameters`,s.input],s.message),validateBlockReferences(n,o,[...t,`parameters`],l)}else if(requireContentPlacement(e,void 0,e.name,i,t),e.type!==`page`&&e.type!==`group`){if(e.type===`collection`){let{target:n,relationAttribute:r}=resolveStoredQuery(e,t,`Collection "${e.name}"`,l);if(e.columns?.forEach((e,i)=>{let a=[...t,`columns`,String(i)];if(typeof e==`string`){requireAttribute(n,e,a);return}let o=[...a,`relationProperty`];r||reject(o,`Relation property columns require a relation source`),r.properties?.definitions.some(t=>t.name===e.relationProperty)||reject(o,`Unknown relation property "${e.relationProperty}"`)}),e.displayAttributes?.forEach((e,r)=>requireAttribute(n,e,[...t,`displayAttributes`,String(r)])),c&&e.layout!==`table`&&(e.displayAttributes?.length??0)>N.displayAttributesPerCard&&reject([...t,`displayAttributes`],`A ${e.layout} shows at most ${N.displayAttributesPerCard} displayed attributes`),e.descriptionAttribute!==void 0&&requireAttribute(n,e.descriptionAttribute,[...t,`descriptionAttribute`]),e.layout===`kanban`&&e.groupByAttribute!==void 0){let r=[...t,`groupByAttribute`],i=requireAttribute(n,e.groupByAttribute,r);c&&i&&n&&requireBoardGrouping(n.name,i,r)}}else switch(e.type){case`form`:e.groups.forEach((e,r)=>{let i=[...t,`groups`,String(r)];requireName(e.name,[...i,`name`]),e.fields.forEach((e,t)=>requireAttribute(n,e.attribute,[...i,`fields`,String(t),`attribute`]))});break;case`richtext`:requireAttribute(n,e.attribute,[...t,`attribute`],`richtext`),e.titleAttribute!==void 0&&requireAttribute(n,e.titleAttribute,[...t,`titleAttribute`],`text`);break;case`emails`:case`meetings`:e.emailAttributes.forEach((e,r)=>requireAttribute(n,e,[...t,`emailAttributes`,String(r)],`text`));break;case`documents`:e.relations?.forEach((e,r)=>requireAttribute(n,e,[...t,`relations`,String(r)],`relation`));break;case`forms`:e.objectName!==void 0&&o(e.objectName,[...t,`objectName`]);break;case`activity`:break;default:reject(t,`Unknown content type: ${String(e)}`)}}}const Z=Object.freeze({size:Object.freeze({w:4,h:4}),minWidth:3,height:`flexible`,minHeight:2,figure:!1});function resolveLayout(e){return e===void 0?Z:{size:e.size??Z.size,minWidth:e.minWidth??Z.minWidth,height:e.height??Z.height,...e.minHeight===void 0?{}:{minHeight:e.minHeight},...e.maxHeight===void 0?{}:{maxHeight:e.maxHeight},figure:e.figure??!1}}function baseTraitsOf(e,t){return e.type===`custom`?resolveLayout(t.get(e.extension)?.layout):e.type in Yt?resolveLayout(Yt[e.type]):Z}function widthCovering(e){return X.find(t=>t>=e)??12}function boundOf(e,t){let n=e.filter(e=>e!==void 0);return n.length===0?void 0:t(...n)}function groupTraitsOf(e){if(e.length===0)return resolveLayout(Yt.group);let sum=t=>e.reduce((e,n)=>e+t(n),0),t={w:widthCovering(sum(e=>e.size.w)),h:Math.max(...e.map(e=>e.size.h))},n=widthCovering(sum(e=>e.minWidth)),r=e.every(e=>e.figure);if(e.every(e=>e.height===`fit`)){let i=boundOf(e.map(e=>e.maxHeight),Math.max);return{size:t,minWidth:n,height:`fit`,...i===void 0?{}:{maxHeight:i},figure:r}}let i=e.filter(e=>e.height!==`fit`),a=boundOf(i.map(e=>e.minHeight),Math.max),o=boundOf(i.map(e=>e.maxHeight),Math.min),s=o===void 0?void 0:Math.max(o,a??o);return{size:t,minWidth:n,height:`flexible`,...a===void 0?{}:{minHeight:a},...s===void 0?{}:{maxHeight:s},figure:r}}function layoutTraitsOf(e,t,n){let r=e.type===`group`?groupTraitsOf(e.members.flatMap(e=>{let r=n?.get(e);return r===void 0||r.type===`group`?[]:[layoutTraitsOf(r,t)]})):baseTraitsOf(e,t);return e.height===void 0?r:{...r,height:e.height}}function pageTraitsOf(e,t){return n=>{let r=e.get(n);return r?layoutTraitsOf(r,t,e):Z}}const $t=1e4;function isPlainJsonObject(e){let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype||Object.getPrototypeOf(t)===null&&t.constructor?.name===`Object`}function addJsonIssue(e,t,n=[]){e.addIssue({code:`custom`,message:t,path:n})}function pushJsonArrayChildren(e,t,n,r){for(let n of Reflect.ownKeys(e))n!==`length`&&(n===`__proto__`?addJsonIssue(r,`The __proto__ key is not allowed in custom props`,[...t.path,n]):typeof n!=`symbol`&&/^(0|[1-9]\d*)$/.test(n)||addJsonIssue(r,`Arrays cannot contain non-index JSON properties`,[...t.path,n]));for(let i=e.length-1;i>=0;i--){let a=Object.getOwnPropertyDescriptor(e,String(i)),o=[...t.path,i];a&&`value`in a?n.push({kind:`enter`,value:a.value,path:o,depth:t.depth+1}):addJsonIssue(r,`Sparse arrays are not valid JSON values`,o)}}function pushJsonObjectChildren(e,t,n,r){let i=Reflect.ownKeys(e);for(let a=i.length-1;a>=0;a--){let o=i[a],s=[...t.path,o];if(o===`__proto__`){addJsonIssue(r,`The __proto__ key is not allowed in custom props`,s);continue}if(typeof o==`symbol`){addJsonIssue(r,`Symbol keys are not valid JSON keys`,s);continue}let c=Object.getOwnPropertyDescriptor(e,o);c?.enumerable&&`value`in c?n.push({kind:`enter`,value:c.value,path:s,depth:t.depth+1}):addJsonIssue(r,`Custom props must contain enumerable data properties only`,s)}}function validateJsonProps(e,t){if(typeof e!=`object`||!e){addJsonIssue(t,`Expected a plain JSON object`);return}try{if(Array.isArray(e)||!isPlainJsonObject(e)){addJsonIssue(t,`Expected a plain JSON object`);return}}catch{addJsonIssue(t,`Custom props contain an object that cannot be safely inspected`);return}let n=/* @__PURE__ */ new WeakSet,r=[{kind:`enter`,value:e,path:[],depth:0}],i=0;for(;r.length>0;){let e=r.pop();if(!e)break;if(e.kind===`exit`){n.delete(e.value);continue}if(i++,i>$t){addJsonIssue(t,`Custom props cannot exceed ${$t.toLocaleString(`en-US`)} total JSON nodes`,e.path);return}if(e.depth>64){addJsonIssue(t,`Custom props cannot exceed depth 64`,e.path);continue}let a=e.value;if(!(a===null||typeof a==`string`||typeof a==`boolean`||typeof a==`number`&&Number.isFinite(a))){if(typeof a!=`object`)addJsonIssue(t,`Expected a JSON value`,e.path);else if(n.has(a))addJsonIssue(t,`Custom props cannot contain circular references`,e.path);else try{if(Array.isArray(a)){n.add(a),r.push({kind:`exit`,value:a}),pushJsonArrayChildren(a,e,r,t);continue}if(!isPlainJsonObject(a)){addJsonIssue(t,`Expected an array or plain JSON object`,e.path);continue}n.add(a),r.push({kind:`exit`,value:a}),pushJsonObjectChildren(a,e,r,t)}catch{addJsonIssue(t,`Custom props contain an object that cannot be safely inspected`,e.path)}}}}const en=i.unknown().superRefine(validateJsonProps).transform(e=>e),tn={span:i.union([i.literal(1),i.literal(2),i.literal(3),i.literal(4),i.literal(5),i.literal(6),i.literal(7),i.literal(8),i.literal(9),i.literal(10),i.literal(11),i.literal(12)]).optional().describe(`Columns of 12 this field occupies`),label:i.string().optional().describe(`Overrides the attribute's label`),readOnly:i.boolean().optional().describe(`Shows the value, not editable`)},nn=i.object({attribute:i.string().describe(`Attribute API name shown by this field`),...tn}).strict(),rn=i.object({name:i.string().describe(`Group API name, unique in the form`),label:i.string().describe(`Label people see`),description:i.string().optional().describe(`Extra context under the label`),collapsible:i.boolean().optional().describe(`Whether the group can be collapsed`),collapsed:i.boolean().optional().describe(`Whether the group starts collapsed`),fields:i.array(nn).max(N.fieldsPerGroup).describe(`Fields in this group, in order`)}).strict();function refineFormContent(e,t){e.groups.reduce((e,t)=>e+t.fields.length,0)>N.fieldsPerFormTab&&t.addIssue({code:`too_big`,origin:`array`,maximum:N.fieldsPerFormTab,inclusive:!0,message:`A form content can contain at most ${N.fieldsPerFormTab} fields`,path:[`groups`]});let n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Set;e.groups.forEach((e,i)=>{n.has(e.name)&&t.addIssue({code:`custom`,message:`Duplicate group name "${e.name}"`,path:[`groups`,i,`name`]}),n.add(e.name),e.fields.forEach((e,n)=>{r.has(e.attribute)&&t.addIssue({code:`custom`,message:`Duplicate field attribute "${e.attribute}"`,path:[`groups`,i,`fields`,n,`attribute`]}),r.add(e.attribute)})})}const Q={name:i.string().describe(`Content API name, unique in the view`),label:i.string().optional().describe(`Label people see`),icon:P.optional().describe(`Icon name`),placement:i.enum([`main`,`aside`,`grid`]).describe(`main: the tab strip. aside: the side panel. grid: a page block`),height:i.enum([`fit`,`flexible`,`fill`]).optional().describe(`Page block height: fit (content), flexible (between bounds) or fill (whole page, one per page)`)},an={...Q,type:i.literal(`collection`),source:W.describe(`object: every record; relation: records linked to this record; both: records of object whose relation points at this record`),visibility:i.enum(Be).optional().describe(`all: no scope; workspace: every member; private: viewer's own; shared: private records other members shared with the viewer`),columns:i.array(i.union([i.string(),i.object({relationProperty:i.string().refine(e=>e.trim().length>0).describe(`Qualified edge property shown as a column`)}).strict()])).max(N.columnsPerTab).optional().describe(`Table columns, in order`),descriptionAttribute:i.string().optional().describe(`Secondary line under each row's title (list layout)`),displayAttributes:mt.optional().describe(`Attributes shown on each card`),filters:U.optional().describe(`Restricts which records show`),sorts:H.optional().describe(`Sort order`),actions:i.enum([`create`,`update`,`delete`,`attach`,`detach`]).array().optional().describe(`Offered actions; absent = every action, [] = none`),openMode:i.enum([`page`,`peek`]).optional().describe(`page or peek (the record panel)`),createMode:i.enum([`page`,`peek`,`inline`]).optional().describe(`page, peek, or inline (creates without opening)`)},on=i.object({...an,layout:i.enum([`table`,`list`,`kanban`]).describe(`table columns, list cards, kanban board grouped by a select/status attribute`),columnSizing:i.record(i.string(),i.number()).optional().describe(`Column widths in pixels, by attribute name`),groupByAttribute:i.string().optional().describe(`Kanban only: the select or status attribute that names the columns`),kanbanColumnOrder:i.array(i.string()).optional().describe(`Kanban: column order by option value`),kanbanColumnVisibility:i.record(i.string(),i.boolean()).optional().describe(`Kanban: which columns are shown`),kanbanPinnedColumns:i.array(i.string()).optional().describe(`Kanban: columns pinned first`)}).strict().superRefine((e,t)=>{let n=[`groupByAttribute`,`kanbanColumnOrder`,`kanbanColumnVisibility`,`kanbanPinnedColumns`];if(e.layout===`kanban`)e.groupByAttribute===void 0&&t.addIssue({code:`custom`,path:[`groupByAttribute`],message:`A kanban layout requires groupByAttribute`});else for(let r of n)e[r]!==void 0&&t.addIssue({code:`custom`,path:[r],message:`Only a kanban layout groups by an attribute`})}),$={...Q,type:i.literal(`form`),groups:i.array(rn).max(N.groupsPerFormTab).describe(`Field groups, in order`),formColumns:i.union([i.literal(1),i.literal(2),i.literal(3)]).optional().describe(`Grid columns, 1-3`),density:i.enum([`compact`,`comfortable`,`spacious`]).optional().describe(`Vertical spacing between fields`)},sn=i.object($).strict().superRefine(refineFormContent),cn=i.object({...$,groups:$.groups.min(1,`A published form content requires at least one group`)}).strict().superRefine(refineFormContent),ln=[on,i.object({...Q,type:i.literal(`group`),placement:i.literal(`grid`).describe(`Always grid`),members:i.array(i.string()).min(1).max(N.membersPerGroup).describe(`Contents side by side`)}).strict(),i.object({...Q,type:i.literal(`custom`),extension:i.string().describe(`Name of a registered extension`),parameters:i.lazy(()=>en).optional().describe(`Extension parameters`)}).strict(),i.object({...Q,type:i.literal(`activity`)}).strict(),i.object({...Q,type:i.literal(`richtext`),attribute:i.string().describe(`Richtext attribute edited in place`),titleAttribute:i.string().optional().describe(`Text attribute shown as the title`)}).strict(),i.object({...Q,type:i.literal(`documents`),allowUpload:i.boolean().optional().describe(`Lets people add files here`),allowRemove:i.boolean().optional().describe(`Lets people remove files here`),hideAttachments:i.boolean().optional().describe(`Hides files attached elsewhere (e.g. emails)`),relations:i.array(i.string()).optional().describe(`Document relations shown; the record's own files if absent`)}).strict(),i.object({...Q,type:i.literal(`forms`),objectName:i.string().optional().describe(`Limits to this object's published forms`)}).strict(),i.object({...Q,type:i.literal(`emails`),emailAttributes:i.array(i.string()).max(N.emailAttributesPerTab).describe(`Addresses`)}).strict(),i.object({...Q,type:i.literal(`meetings`),emailAttributes:i.array(i.string()).max(N.emailAttributesPerTab).describe(`Addresses`)}).strict(),i.object({...Q,type:i.literal(`page`),page:i.object({object:i.string().describe(`Its object`),name:i.string().describe(`Its name`)}).strict().describe(`The record page this tab renders`)}).strict()],un=i.discriminatedUnion(`type`,[sn,...ln]),dn=i.discriminatedUnion(`type`,[cn,...ln]),fn={name:i.string(),label:i.string(),description:i.string().optional(),icon:P.optional()},pn=i.object({x:i.number().describe(`Column`),y:i.number().describe(`Row`),w:i.number().describe(`Width: 3, 4, 6, 8, 9 or 12; x + w ≤ 12`),h:i.number().describe(`Height`)}),mn=pn.strict();function contentViewBaseSchemaFor(e){let t=i.array(e).max(N.tabsPerView);return i.discriminatedUnion(`context`,[i.object({...fn,object:i.string(),context:i.enum([`collection`,`record`]),default:i.boolean().optional(),anchors:i.record(i.string(),i.object({after:i.string()}).strict()).optional(),contents:t}).strict(),i.object({...fn,object:i.string().optional(),context:i.literal(`page`),home:i.boolean().optional(),grid:i.record(i.string(),mn).refine(e=>Object.keys(e).length<=N.tabsPerView,{message:`A page holds at most ${N.tabsPerView} blocks`}),contents:t}).strict()])}const hn=contentViewBaseSchemaFor(un),gn=contentViewBaseSchemaFor(dn);function registryTraits(e,t){return layoutTraitsOf(e,Kt,t)}function addGroupSizeIssues(e,t){for(let n of e.contents){let e=n.type===`group`?groupSizeMessage(n.members.length):void 0;e&&t.addIssue({code:`custom`,message:e,path:[`contents`]})}}function addDuplicateContentNameIssues(e,t){let n=/* @__PURE__ */ new Set;e.contents.forEach((e,r)=>{n.has(e.name)&&t.addIssue({code:`custom`,message:`Duplicate content name "${e.name}"`,path:[`contents`,r,`name`]}),n.add(e.name)})}function addPlacementIssues(e,t){e.contents.forEach((n,r)=>{let i=n.placement===`grid`;e.context===`page`&&!i&&t.addIssue({code:`custom`,message:`Content "${n.name}" of a page must be placed on the grid`,path:[`contents`,r,`placement`]}),e.context!==`page`&&i&&t.addIssue({code:`custom`,message:`Content "${n.name}" cannot be placed on a grid outside a page`,path:[`contents`,r,`placement`]})})}function addIssue(e,t){e.addIssue({code:`custom`,message:t.message,path:[`grid`,...t.path]})}function addGridIssues(e,t,n,r){if(e.context!==`page`||!e.grid)return;let i=new Set(e.contents.map(e=>e.name)),a=groupedMembers(e.contents);for(let n of i)a.has(n)||Object.hasOwn(e.grid,n)||t.addIssue({code:`custom`,message:`Content "${n}" has no grid position`,path:[`grid`]});let o=Object.keys(e.grid).filter(e=>!i.has(e));for(let e of o)t.addIssue({code:`custom`,message:`Grid position "${e}" matches no content`,path:[`grid`,e]});if(e.home&&e.object!==void 0&&t.addIssue({code:`custom`,message:`Only a standalone page can be the home`,path:[`home`]}),o.length>0)return;let s=findGridViolation(e.grid,{exempt:a});if(s){addIssue(t,s);return}if(n===null)return;let c=findGroupViolation(e.contents);if(c){t.addIssue({code:`custom`,message:c.message,path:[`contents`]});return}let l=new Map(e.contents.map(e=>[e.name,e])),u=findLayoutRuleViolation(e.grid,e.contents,e=>n(l.get(e),l),r);u&&addIssue(t,u)}function draftContentViewDefinitionSchemaFor(){return hn.superRefine((e,t)=>{let n=e;addDuplicateContentNameIssues(n,t),addPlacementIssues(n,t),addGridIssues(n,t,null)})}function contentViewDefinitionSchemaFor(e={}){let t=e.traits===void 0?registryTraits:e.traits;return gn.superRefine((n,r)=>{let i=n;addDuplicateContentNameIssues(i,r),addPlacementIssues(i,r),addGridIssues(i,r,t,e.statics),e.viewerFiltered||addGroupSizeIssues(i,r),n.context!==`page`&&!n.contents.some(e=>e.placement===`main`)&&r.addIssue({code:`custom`,message:`A published view requires at least one main content`,path:[`contents`]})})}const _n=draftContentViewDefinitionSchemaFor(),vn=contentViewDefinitionSchemaFor();function isPlainRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const yn=new Set(o),bn=/^[a-zA-Z_][a-zA-Z0-9_]*$/,xn=/^[a-z][a-z0-9-]*$/,Sn=N.labelLength,Cn=i.string().min(1,`Object name cannot be empty`).max(63,`Object name is too long (max 63 characters)`).regex(/^[a-z][a-z0-9-]*$/,{message:`Invalid object name format.
|
|
3
|
+
Name must be in kebab-case (slug format):
|
|
4
|
+
✅ Valid: 'products', 'user-profiles', 'order-items'
|
|
5
|
+
❌ Invalid: 'Products', 'userProfiles', 'user_profiles'`});function validateObjectName(e){try{Cn.parse(e)}catch(e){throw e instanceof i.ZodError?new t(e.issues[0].message,n.INVALID_OBJECT_NAME):e}}function validateViewName(e){if(!e||e.length===0)throw new r(`View name cannot be empty`,[{path:[`name`],message:`View name cannot be empty`}]);if(e.length>63)throw new r(`View name is too long`,[{path:[`name`],message:`View name is too long (max 63 characters)`}]);if(!xn.test(e))throw new r(`Invalid view name format`,[{path:[`name`],message:`View name must be in kebab-case (e.g., 'detail', 'list-view')`}])}function assertUniqueBy(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e){let e=t(i);if(r.has(e))throw n(e);r.add(e)}}const wn=i.string().min(1,`Attribute name cannot be empty`).max(63,`Attribute name is too long (max 63 characters)`).regex(bn,{message:`Invalid attribute name format.
|
|
6
|
+
Name must be a valid variable identifier:
|
|
7
|
+
✅ Valid: 'firstName', 'first_name', 'FirstName', 'FIRST_NAME'
|
|
8
|
+
❌ Invalid: 'first-name', 'first name', '123name', 'first.name'`}).refine(e=>!M.includes(e),{message:`This is a reserved attribute name. Reserved names: ${M.join(`, `)}`});function validateAttributeName(e){if(!e||e.length===0)throw Error(`[AttributeBuilder] Attribute name cannot be empty`);if(e.length>63)throw Error(`[AttributeBuilder] Attribute name is too long (max 63 characters)`);if(!bn.test(e))throw Error(`[AttributeBuilder] Invalid attribute name format.
|
|
9
|
+
Name must be a valid variable identifier:
|
|
10
|
+
✅ Valid: 'firstName', 'first_name', 'FirstName', 'FIRST_NAME'
|
|
11
|
+
❌ Invalid: 'first-name', 'first name', '123name', 'first.name'`);if(M.includes(e))throw Error(`[AttributeBuilder] "${e}" is a reserved name and cannot be used as an attribute name.\nReserved names: ${M.join(`, `)}`)}function validateLabel(e){if(!e||e.length===0)throw Error(`[AttributeBuilder] Attribute label cannot be empty`);if(e.length>Sn)throw Error(`[AttributeBuilder] Attribute label is too long (max ${Sn} characters)`)}function validateIconName(e,t){if(!yn.has(e))throw Error(`[AttributeBuilder] Invalid icon "${e}" in ${t}.\nIcon must be one of the predefined icons from @standards/constants.`)}function validateOptions(e,t){let n=/* @__PURE__ */ new Set;for(let r of t){if(!r.value?.trim())throw Error(`[AttributeBuilder] Option in "${e}" has an empty or missing value.`);if(!r.label?.trim())throw Error(`[AttributeBuilder] Option "${r.value}" in "${e}" has an empty or missing label.`);if(n.has(r.value))throw Error(`[AttributeBuilder] Duplicate option value "${r.value}" in "${e}".`);n.add(r.value)}for(let n of t){if(n.inverse===void 0)continue;let r=t.find(e=>e.value===n.inverse);if(!r)throw Error(`[AttributeBuilder] Option "${n.value}" in "${e}" has inverse "${n.inverse}" which does not match any option value.`);if(r.inverse!==n.value)throw Error(`[AttributeBuilder] Inverse mismatch in "${e}": "${n.value}" points to "${n.inverse}", but "${n.inverse}" points to "${r.inverse??`(none)`}". Inverse pairs must be symmetric.`)}}export{se as ACTIONABLE_DECISION_KINDS,Ft as AGENDA_BLOCK,Ge as AGGREGATE_BUCKETS,We as AGGREGATE_MEASURES,Dt as ARTIFACT_PREVIEW_EXTENSION,D as ATTRIBUTE_FILTER_OPERATORS,wn as ATTRIBUTE_NAME_SCHEMA,Ie as ATTRIBUTE_TYPES,O as ATTRIBUTE_TYPE_DESCRIPTORS,F as BLOCK_CONTEXTS,G as BLOCK_PERIODS,X as BLOCK_WIDTHS,It as CARD_BLOCK,Pt as CHART_BLOCK,At as CHART_KINDS,jt as CHART_ORDERS,Jt as CONTENT_PLACEMENT_CONTEXTS,zt as DECISIONS_BLOCK,l as DECISION_INBOX_STATES,c as DECISION_KINDS,m as DECISION_LINE_MAX_LENGTH,f as DECISION_LINK_TARGET_TYPES,d as DECISION_LIST_STATES,ve as DECISION_READ_STATES,ue as DECISION_SENDER_KINDS,ce as DECISION_SETTINGS_AREAS,ee as DECISION_TITLE_MAX_LENGTH,he as DECISION_TRANSFERS_KEY,oe as DECISION_TYPES_V1,ne as DECISION_TYPE_ACCESS_GRANTED,g as DECISION_TYPE_AGENT_APPROVAL,b as DECISION_TYPE_AGENT_MESSAGE,h as DECISION_TYPE_AGENT_QUESTION,_ as DECISION_TYPE_AGENT_REVIEW,y as DECISION_TYPE_AGENT_ROUTINE_RUN_FAILED,v as DECISION_TYPE_AGENT_SETUP,ae as DECISION_TYPE_BUNDLE_SETUP,S as DECISION_TYPE_CONNECTOR_CONNECTION_ERROR,x as DECISION_TYPE_CONNECTOR_CONNECTION_REAUTH_REQUIRED,C as DECISION_TYPE_CONNECTOR_CONNECTION_SEND_NOT_GRANTED,re as DECISION_TYPE_ENVIRONMENT_BUILD_FAILED,le as DECISION_TYPE_KINDS,ie as DECISION_TYPE_PERSON,w as DECISION_TYPE_RECORD_ASSIGNED,te as DECISION_TYPE_RECORD_MENTIONED,u as DECISION_WORK_STATES,Z as DEFAULT_LAYOUT_TRAITS,kt as GROUPABLE_ATTRIBUTE_TYPES,Rt as HEADING_BLOCK,T as HIERARCHY_ATTRIBUTE_IDS,we as HIERARCHY_ATTRIBUTE_NAMES,Te as HIERARCHY_CHILD_IDS_LIMIT,Qt as INVENTORY_LIMIT,Be as LIST_VIEW_TAB_VISIBILITIES,E as LOCATION_FILTER_PROPERTIES,Vt as MAILBOX_BLOCK,Ue as MAX_AGGREGATE_GROUPS,Ot as MEASURABLE_ATTRIBUTE_TYPES,Bt as MEETINGS_UPCOMING_BLOCK,Nt as METRIC_BLOCK,Ut as NATIVE_BLOCKS,k as NATIVE_OBJECT_NAMES,ze as NO_VALUE_OPERATORS,Cn as OBJECT_NAME_SCHEMA,Re as OPERATORS_BY_TYPE,qt as PAGE_GRID_COLUMNS,et as QUALIFIED_SEPARATOR,K as QUERY_OBJECT,Y as RECORD_LINKS_BLOCK,Ht as RECORD_LINKS_CONTENT,j as RECORD_LIST_SCOPES,Et as RECORD_OBJECT,Le as RELATION_TARGET_ANY,B as REMOVED_OPERATOR_REPLACEMENTS,M as RESERVED_ATTRIBUTE_NAMES,He as RESERVED_OBJECT_NAMES,A as RESOURCE_VISIBILITIES,RecordQuery,N as SCHEMA_LIMITS,it as SYNONYM_ALIASES,Ce as SYSTEM_ATTRIBUTES,Se as SYSTEM_ATTRIBUTE_I18N_KEYS,Ve as SYSTEM_FIELD_NAMES,ct as SYSTEM_FILTER_ATTRIBUTE_TYPES,Lt as TEXT_BLOCK,Mt as UNORDERED_CHART_KINDS,assertUniqueBy,attributeFilterTarget,attributeInventory,blockObjectInputs,brandedString,buildQualifiedAttribute,canonicalizeFilterValue,capped,collectContentViewCatalogue,collectQualifiedRuleIssues,W as collectionContentSourceSchema,collectionSourceAddress,collectionSourceAddressOf,Je as colorIdSchema,pt as columnsSchema,Kt as contentExtensionRegistry,contentReadObjects,vn as contentViewDefinitionSchema,contentViewDefinitionSchemaFor,currentActor,be as decisionArchiveAllResultSchema,pe as decisionAttachmentSchema,ye as decisionCountsSchema,decisionHandedBy,p as decisionLinkSchema,_e as decisionListResultSchema,me as decisionRecipientSchema,fe as decisionSchema,de as decisionSenderSchema,decisionThreadKey,decisionTransferBy,xe as decisionTransferTargetsSchema,decisionTransferTo,decisionTransfersOf,ge as decisionWithRecipientSchema,decodeOperationOutput,defineBlock,describeViewIssue,mt as displayAttributesSchema,_n as draftContentViewDefinitionSchema,draftContentViewDefinitionSchemaFor,edgePropertyFilterTarget,extractCurrencyFilterValue,extractFilterValue,filterOperatorsOfType,U as filterStateSchema,filterTargetsOf,findGridViolation,findGroupViolation,findLayoutRuleViolation,findRelationAttribute,findRowLimitViolation,formatDecisionLink,getAttributeCapabilities,getAttributeFilterOperators,getHierarchyAttributes,getObjectSystemAttributes,getOperatorPolarity,getRollupFilterOperators,getSystemAttributeI18nKey,getSystemAttributeList,pn as gridPositionReadSchema,mn as gridPositionSchema,groupSizeMessage,groupedMembers,hasTypeTrait,hasValueKind,P as iconNameSchema,inferInverseCardinality,q as input,invalidViewMessage,isActionableDecisionKind,isAttributeFilterable,isAttributeGroupable,isAttributeKanbanGroupable,isAttributeSearchable,isAttributeSortable,isBilateralRelation,isBoardGrouping,isCalendarDay,isCollectionContent,isDynamicValue,isHierarchyAttribute,isLocationFilterProperty,isLocationPartOperator,isManagedSystemAttribute,isNativeObjectName,isNoValueOperator,isPlainRecord,isRelativeDateValue,isSetMembershipOperator,isUniversalRelation,isValueKindType,s as isoDateTime,layoutTraitsOf,locationPartFilterTarget,memberlessGroups,metricComparePeriod,normalizeFilterRule,normalizeForEdgeRpc,normalizeOperator,now,outputSchemaOf,overlaps,pageTraitsOf,parseBlockParameters,parseDecisionLink,parseQualifiedAttribute,parseRecordListScope,parseResourceVisibility,dn as publishedViewContentDefinitionSchema,query,Tt as recordQueryDefinitionSchema,relationAcceptsObject,relationTargetsOf,requireContentPlacement,requireRecordContentContext,requireSingleRelationTarget,resolveCollectionActions,resolveContentNavigation,resolveEffectiveFilterType,resolveIsWithinBounds,resolveUtcDayBounds,singleRelationTarget,H as sortsSchema,sourcedAttributeOf,systemColumnFilterTarget,toMultiValueOperator,toUtcDayString,today,unchecked,validateAttributeName,validateContentViewCatalogue,validateIconName,validateLabel,validateObjectName,validateOptions,validateQualifiedRule,validateStoredViews,validateViewName};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
|
|
2
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,__exportAll=(e,n)=>{let r=Object.setPrototypeOf({},null);for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n&1||t(r,Symbol.toStringTag,{value:`Module`}),n&2?r:Object.preventExtensions(r)},__copyProps=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},__toESM=(n,r,o)=>(o=n==null?{}:e(i(n)),__copyProps(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));require("./zod-locale.js");const o=require("./exceptions.js");let s=require("zod");s=__toESM(s);let c=require("@standards/constants");const l=s.codec(s.iso.datetime({offset:!0}),s.date(),{decode:e=>new Date(e),encode:e=>e.toISOString()});function brandedString(){return s.string()}function outputSchemaOf(e){return`_zod`in e.output?e.output:void 0}function decodeOperationOutput(e,t){let n=outputSchemaOf(e);if(n===void 0)return t;let r=s.safeDecode(n,t);return r.success?r.data:t}function unchecked(){return s.custom()}const u=[`question`,`approval`,`review`,`handoff`,`report`,`fyi`],d=[`unread`,`read`,`archived`],f=[`none`,`pending`,`completed`,`dismissed`,`expired`],ee=[`open`,`snoozed`,`closed`,`answered`,`withdrawn`,`expired`,`unread`,`read`,`archived`],p=[`record`,`session`,`document`,`agent`,`routine`,`page`,`email_thread`,`url`],m=s.object({targetType:s.enum(p),targetId:s.string(),objectName:s.string().optional(),label:s.string().optional()});function formatDecisionLink(e){return e.targetType===`record`?`record:${e.objectName??``}:${e.targetId}`:`${e.targetType}:${e.targetId}`}function parseDecisionLink(e){let[t,...n]=e.split(`:`);if(!p.includes(t??``))return null;let r=t;if(r===`record`){let[e,t]=n;return n.length===2&&e&&t?{targetType:r,targetId:t,objectName:e}:null}let i=n.join(`:`);return i?{targetType:r,targetId:i}:null}function decisionThreadKey(e){return`decision:${e}`}const h=`agent.question`,g=`agent.approval`,_=`agent.review`,v=`agent.setup`,y=`agent.routine_run.failed`,b=`agent.message`,x=`connector.connection.reauth_required`,S=`connector.connection.error`,C=`connector.connection.send_not_granted`,w=`record.assigned`,te=`record.mentioned`,ne=`access.granted`,re=`environment.build.failed`,ie=`person.decision`,ae=`bundle.setup`,oe=[h,g,_,v,y,b,x,S,C,w,te,ne,re,ie,ae],se=[`question`,`approval`,`review`,`handoff`];function isActionableDecisionKind(e){return se.includes(e)}const ce=[`agents`,`connectors`,`assignment`,`mentions`,`sharing`],le={[h]:{kind:`question`,area:null},[g]:{kind:`approval`,area:null},[_]:{kind:`review`,area:null},[v]:{kind:`handoff`,area:null},[y]:{kind:`question`,area:`agents`},[b]:{kind:`report`,area:`agents`},[x]:{kind:`handoff`,area:`connectors`},[S]:{kind:`handoff`,area:`connectors`},[C]:{kind:`handoff`,area:`connectors`},[w]:{kind:`fyi`,area:`assignment`},[te]:{kind:`fyi`,area:`mentions`},[ne]:{kind:`fyi`,area:`sharing`},[re]:{kind:`fyi`,area:`agents`},[ie]:{kind:`question`,area:null},[ae]:{kind:`handoff`,area:null}},ue=[`person`,`agent`,`system`],de=s.object({actorId:s.string(),kind:s.enum(ue),label:s.string()}),fe=s.object({id:s.string(),tenantId:s.string(),senderActorId:s.string().optional(),rootActorId:s.string().optional(),triggeredByActorId:s.string().optional(),kind:s.enum(u),type:s.string(),title:s.string(),summary:s.string().optional(),questions:unchecked().optional(),answer:unchecked().optional(),answeredBy:s.string().optional(),effect:s.string().optional(),links:s.array(m),sender:de.optional(),recipientActorIds:s.array(s.string()).optional(),payload:s.record(s.string(),s.unknown()),threadKey:s.string(),idempotencyKey:s.string().optional(),createdAt:l,updatedAt:l}),pe=s.object({documentId:s.string(),fileId:s.string(),name:s.string(),mimeType:s.string(),size:s.number(),url:s.string()}),me=s.object({id:s.string(),tenantId:s.string(),decisionId:s.string(),recipientActorId:s.string(),inboxState:s.enum(d),workState:s.enum(f),readAt:l.optional(),archivedAt:l.optional(),snoozedUntil:l.optional(),completedAt:l.optional(),dismissedAt:l.optional(),createdAt:l,updatedAt:l}),he=`transfers`;function isDecisionTransfer(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.fromActorId==`string`&&typeof t.toActorId==`string`&&typeof t.toLabel==`string`&&typeof t.at==`string`}function decisionTransfersOf(e){let t=e.payload[he];return Array.isArray(t)?t.filter(isDecisionTransfer):[]}function decisionTransferBy(e,t){return decisionTransfersOf(e).filter(e=>e.fromActorId===t).at(-1)}function decisionTransferTo(e,t){return decisionTransfersOf(e).filter(e=>e.toActorId===t).at(-1)}function decisionHandedBy(e,t){return decisionTransferTo(e,t)?.fromActorId}const ge=s.object({decision:fe,recipient:me,testLink:s.object({link:unchecked(),canOpen:s.boolean()}).optional()}),_e=s.object({items:s.array(ge),nextCursor:s.string().optional()}),ve=[`open`,`answered`,`withdrawn`,`expired`,`info`],ye=s.object({open:s.number(),unread:s.number()}),be=s.object({archivedCount:s.number()}),xe=s.object({to:s.array(s.string()).nullable()}),Se={createdAt:`createdAt`,updatedAt:`updatedAt`,createdBy:`createdBy`,lastUpdatedBy:`lastUpdatedBy`,attachments:`attachments`,parentId:`parentId`,childIds:`childIds`};function getSystemAttributeI18nKey(e){return Se[e]}const Ce={createdAt:{id:`system:createdAt`,name:`createdAt`,label:`Created time`,type:`date`,required:!1,system:!0,icon:`clock-circle`,description:`When this record was created`},updatedAt:{id:`system:updatedAt`,name:`updatedAt`,label:`Last edited time`,type:`date`,required:!1,system:!0,icon:`clock-circle`,description:`When this record was last modified`},createdBy:{id:`system:createdBy`,name:`createdBy`,label:`Created by`,type:`user`,required:!1,system:!0,multiple:!1,actors:!0,icon:`user`,description:`Actor who created this record`},lastUpdatedBy:{id:`system:lastUpdatedBy`,name:`lastUpdatedBy`,label:`Last edited by`,type:`user`,required:!1,system:!0,multiple:!1,actors:!0,icon:`user`,description:`Actor who last modified this record`},attachments:{id:`system:attachments`,name:`attachments`,label:`Attachments`,type:`document`,required:!1,system:!0,hidden:!0,icon:`paperclip`,description:`Free-form document attachments`}};function getSystemAttributeList(){return Object.values(Ce)}function isManagedSystemAttribute(e){return e.id?.startsWith(`system:`)??!1}const T=[`hierarchy:parentId`,`hierarchy:childIds`],we=/* @__PURE__ */ new Set([`parentId`,`childIds`]);function getHierarchyAttributes(e){if(!e.hierarchical)return[];let t=[{object:e.name}];return[{id:T[0],name:`parentId`,label:`Parent`,type:`relation`,cardinality:`one`,targets:t,required:!1,system:!0,icon:`corner-left-up`,description:`The record this one sits under`},{id:T[1],name:`childIds`,label:`Sub-items`,type:`relation`,cardinality:`many`,targets:t,required:!1,system:!0,icon:`corner-down-right`,description:`The records that sit under this one`}]}function isHierarchyAttribute(e){return e.id?.startsWith(`hierarchy:`)??!1}function getObjectSystemAttributes(e){return[...getSystemAttributeList(),...getHierarchyAttributes(e)]}const Te=[`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`is_empty`,`is_not_empty`],Ee=[`is`,`is_not`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`is_empty`,`is_not_empty`],De=[`is`],Oe=[`is`,`is_not`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`is_within`,`on_day_month`,`is_empty`,`is_not_empty`],ke=[`is`,`is_not`,`any_of`,`none_of`,`is_empty`,`is_not_empty`],Ae=[`any_of`,`none_of`,`is_empty`,`is_not_empty`],je=[`is`,`is_not`,`any_of`,`none_of`,`is_empty`,`is_not_empty`],Me=[`is_empty`,`is_not_empty`],Ne=[`is`,`is_not`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`contains`,`not_contains`,`is_empty`,`is_not_empty`],E=[`city`,`postalCode`,`country`];function isLocationFilterProperty(e){return E.includes(e)}const D={text:Te,richtext:[],number:Ee,checkbox:De,date:Oe,phone:[`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`is_empty`,`is_not_empty`],currency:Ee,status:ke,select:ke,multiselect:Ae,location:[],user:je,relation:je,formula:Ne,document:Me},O={text:{value:`plain`,traits:[`placeholder`,`searchable`,`sortable`]},richtext:{value:`plain`,traits:[`searchable`,`content`]},number:{value:`plain`,traits:[`placeholder`,`sortable`]},checkbox:{value:`boolean`,traits:[`sortable`]},date:{value:`plain`,traits:[`placeholder`,`sortable`]},phone:{value:`plain`,traits:[`placeholder`,`searchable`,`sortable`]},currency:{value:`plain`,traits:[`placeholder`,`sortable`,`groupable`]},status:{value:`options`,traits:[`searchable`,`sortable`,`groupable`]},location:{value:`plain`,traits:[]},select:{value:`options`,traits:[`placeholder`,`searchable`,`sortable`]},multiselect:{value:`options`,traits:[`placeholder`,`searchable`]},user:{value:`reference`,traits:[]},relation:{value:`reference`,traits:[`qualified`]},formula:{value:`computed`,traits:[]},rollup:{value:`computed`,traits:[]},document:{value:`reference`,traits:[`content`,`qualified`]}};function descriptorOf(e){return Object.prototype.hasOwnProperty.call(O,e)?O[e]:void 0}function isValueKindType(e,t){return descriptorOf(e)?.value===t}function hasValueKind(e,t){return isValueKindType(e.type,t)}function hasTypeTrait(e,t){return descriptorOf(e)?.traits.includes(t)??!1}const Pe={plain:`static`,boolean:`automatic`,options:`static`,reference:`static`,computed:`forbidden`};function getAttributeCapabilities(e){let t=!!(e.hidden||e.archived),n=!e.archived,r=descriptorOf(e.type)?.value,i=r===`computed`,a=e.type===`document`,o=r===`reference`&&!isHierarchyAttribute(e),s=getAttributeCardinality(e),c=t?[]:getRawFilterOperators(e),l=c.length>0&&!t,u=!t&&hasTypeTrait(e.type,`searchable`),d=!t&&hasTypeTrait(e.type,`sortable`),f=!t&&hasTypeTrait(e.type,`groupable`),ee=!t&&(e.type===`status`||e.type===`select`),p=isManagedSystemAttribute(e),m=i||a||p,h=!(t||m),g=r===void 0?`forbidden`:Pe[r],_=r===`boolean`||i?`forbidden`:`allowed`,v=supportsMaxItems(e),y=hasTypeTrait(e.type,`placeholder`),b=hasTypeTrait(e.type,`content`),x=!(!e.deprecated||t),S=resolveEditMode(e);return{lifecycle:{active:n,deprecated:!!e.deprecated,visibleInArchitect:!0,visibleInRuntime:!t,warningWhenDeprecated:x},storage:{mode:i?`computed`:o?`edge`:`value`,cardinality:s,edgeBacked:o,preservesExistingValues:!!e.archived,qualifiedProperties:hasTypeTrait(e.type,`qualified`),polymorphic:getPolymorphicCapability(e),maxItems:v},authoring:{editable:h,readOnly:m,directEdit:h&&S===`inline`,required:_,defaultValue:g,placeholder:y,maxItems:v},presentation:{formField:!t&&e.type!==`richtext`,tableCell:!(t||b),defaultColumn:!(t||b),compactDisplay:!t,popoverEditor:!t&&S===`popover`,placeholder:y,warningWhenDeprecated:x},query:{filterable:l,searchable:u,sortable:d,groupable:f,kanbanGroupable:ee,operators:c},agent:{readable:!t,writable:h&&!a,compactReadable:!t,contentReadable:!t&&b,requiresDedicatedTool:a},exchange:{importable:!t,exportable:!t,schemaExportable:!0,metadataExportable:!1}}}function getAttributeFilterOperators(e){return getAttributeCapabilities(e).query.operators}function isAttributeFilterable(e){return getAttributeCapabilities(e).query.filterable}function isAttributeSearchable(e){return getAttributeCapabilities(e).query.searchable}function isAttributeSortable$1(e){return getAttributeCapabilities(e).query.sortable}function isAttributeGroupable(e){return getAttributeCapabilities(e).query.groupable}function isAttributeKanbanGroupable(e){return getAttributeCapabilities(e).query.kanbanGroupable}function resolveEffectiveFilterType(e){if(e.type!==`rollup`)return e.type;let t=e;if(t.function===`earliest`||t.function===`latest`)return`date`;if(t.function===`original`){let e=t.targetAttributeType;if(e&&hasFilterOperatorEntry(e))return e}return`number`}function getRollupFilterOperators$1(e){let t=resolveEffectiveFilterType(e);return hasFilterOperatorEntry(t)?D[t]:D.number}function getRawFilterOperators(e){return e.type===`rollup`?getRollupFilterOperators$1(e):D[e.type]??[]}function getAttributeCardinality(e){return e.type===`multiselect`||e.type===`document`||e.type===`user`&&e.multiple===!0||e.type===`relation`&&e.cardinality===`many`?`many`:`one`}function getPolymorphicCapability(e){if(e.type!==`relation`)return`none`;let t=e.targets??[];return t.length===1&&t[0]?.object===`*`?`internal`:t.length>1?`code-only`:`none`}function supportsMaxItems(e){return e.type===`multiselect`||e.type===`relation`&&e.cardinality===`many`}function resolveEditMode(e){switch(e.type){case`checkbox`:return`inline`;case`number`:return e.renderAs===`rating`?`inline`:`default`;case`select`:case`multiselect`:return e.renderAs===`badges`?`inline`:`popover`;case`status`:case`relation`:case`user`:case`date`:return`popover`;default:return`default`}}function hasFilterOperatorEntry(e){return Object.prototype.hasOwnProperty.call(D,e)}const Fe=[`text`,`richtext`,`number`,`checkbox`,`date`,`phone`,`currency`,`status`,`location`,`select`,`multiselect`,`user`,`relation`,`formula`,`rollup`,`document`];function relationTargetsOf(e){return e.type!==`relation`||!Array.isArray(e.targets)?[]:e.targets.map(e=>e.object).filter(e=>e!==`*`)}function isUniversalRelation(e){return e.targets.length===1&&e.targets[0].object===`*`}function isBilateralRelation(e){return e.bilateral!==void 0}function inferInverseCardinality(e){return`many`}function isAttributeSortable(e){return isAttributeSortable$1(e)}const Ie=D,Le=[`is_empty`,`is_not_empty`];function isNoValueOperator(e){return Le.includes(e)}function getRollupFilterOperators(e){return getRollupFilterOperators$1(e)}const k=[`skill`,`memory`,`drives`,`artifact`,`meeting`];function isNativeObjectName(e){return k.includes(e)}const A=[`workspace`,`private`],Re=[`all`,...A,`shared`],j=[...A,`shared`];function parseRecordListScope(e){if(typeof e==`string`&&j.includes(e))return e;throw new o.ValidationError(`visibility must be one of: ${j.join(`, `)} (received: ${String(e)})`,[])}function parseResourceVisibility(e){if(typeof e==`string`&&A.includes(e))return e;throw new o.ValidationError(`visibility must be one of: ${A.join(`, `)} (received: ${String(e)})`,[])}const ze=[`id`,`createdAt`,`updatedAt`,`createdBy`,`lastUpdatedBy`,`visibility`,`ownedBy`],M=[...ze,`objectId`,`label`,`embeddingText`,`values`,`metadata`,`deletedAt`,`deletedBy`,`schemaVersion`,`appearance`,`owned_by`,`parentId`,`childIds`],Be=k,N={attributesPerObject:300,tabsPerView:24,membersPerGroup:4,pageRows:1e3,groupsPerFormTab:12,fieldsPerGroup:60,fieldsPerFormTab:150,columnsPerTab:50,displayAttributesPerCard:8,optionsPerAttribute:200,sidePanelAttributes:100,sidePanelPanes:20,filterRulesPerTab:50,sortsPerTab:20,emailAttributesPerTab:30,objectsPerPlan:20,mutationsPerPlan:500,planBytes:524288,historyDefault:20,historyMax:50,iconQueries:5,iconResults:20,labelLength:128},Ve=[`count`,`sum`,`cumulative`,`avg`,`min`,`max`],He=[`day`,`week`,`month`,`quarter`,`year`],Ue=Object.keys(c.COLORS),We=new Set(c.ICONS),Ge=s.enum(Ue).describe(`A color id from the palette`),P=s.string().superRefine((e,t)=>{We.has(e)||t.addIssue({code:`custom`,message:`Invalid icon name`})}).transform(e=>e),F=[`page`,`record`,`display`];function defineBlock(e){let t=Object.fromEntries(Object.entries(e.inputs).map(([e,t])=>[e,t.isOptional?t.schema.optional():t.schema]));return Object.freeze({name:e.name,label:e.label,icon:e.icon,family:e.family,contexts:Object.freeze([...e.contexts]),inputs:Object.freeze({...e.inputs}),...e.layout===void 0?{}:{layout:Object.freeze({...e.layout})},parameters:s.object(t).strict().superRefine((t,n)=>{let r=e.refine?.(t);r&&n.addIssue({code:`custom`,path:[r.input],message:r.message})}),...e.refine===void 0?{}:{refine:(t,n)=>e.refine?.(t,n)}})}function parseBlockParameters(e,t,n){let r=e.parameters.safeParse(structuredClone(t??{}));if(!r.success)throw o.ValidationError.fromZodErrors(r.error.issues.map(e=>({path:[...n,...e.path.map(String)],message:e.message})));return r.data}function blockObjectInputs(e,t,n){return Object.entries(e.inputs).flatMap(([e,r])=>{let i=t[e];if(r.kind===`object`&&typeof i==`string`)return[i];if(r.kind===`query`&&typeof i==`object`&&i){let e=i.source;if(!e)return[];if(`object`in e&&typeof e.object==`string`)return[e.object];let t=n?.attributes.find(t=>t.name===e.relation);return t?relationTargetsOf(t):[]}return[]})}const Ke=/^\d{4}-\d{2}-\d{2}$/u;function isCalendarDay(e){if(!Ke.test(e))return!1;let t=/* @__PURE__ */ new Date(`${e}T00:00:00Z`);return!Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===e}function isDynamicValue(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&`dynamic`in e}function currentActor(){return{dynamic:`actor`,ref:`current`}}function today(){return{dynamic:`date`,anchor:`today`}}function now(){return{dynamic:`date`,anchor:`now`}}function toAmount(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);return Number.isFinite(t)?t:null}return null}function extractCurrencyFilterValue(e){return typeof e==`object`&&e?`value`in e?toAmount(e.value):null:toAmount(e)}function extractFilterValue(e){return e==null?null:typeof e==`object`&&`value`in e?e.value??null:e}const qe=/* @__PURE__ */ new Set([`is_not`,`not_contains`,`none_of`,`is_empty`]),Je={is_not:`is`,not_contains:`contains`,none_of:`any_of`,is_empty:`is_not_empty`};function getOperatorPolarity(e){return qe.has(e)?`none`:`any`}function normalizeForEdgeRpc(e){return Je[e]??e}const Ye={is:`any_of`,is_not:`none_of`};function toMultiValueOperator(e){return Ye[e]??e}const Xe=new Set(Object.values(Ye).filter(e=>e!==void 0));function isSetMembershipOperator(e){return Xe.has(e)}function canonicalizeFilterValue(e,t){let n=e.value;if(isNoValueOperator(e.operator)||n==null||isDynamicValue(n))return;if(isSetMembershipOperator(e.operator)){Array.isArray(n)||(e.value=[n]);return}if(t!==`currency`)return;let r=extractCurrencyFilterValue(n);if(r!==null){e.value=r;return}if(!hasCurrencyAmount(n))return;let i=`Filter on a currency attribute expected a numeric amount, received ${JSON.stringify(n)}`;throw new o.ValidationError(i,[{path:[`value`],message:i}])}function hasCurrencyAmount(e){return typeof e!=`object`||`value`in e&&e.value!=null}function parseQualifiedAttribute(e){let t=e.indexOf(`__`);return t<=0||t+2>=e.length?{kind:`scalar`,attribute:e}:{kind:`qualified`,root:e.slice(0,t),property:e.slice(t+2)}}function buildQualifiedAttribute(e,t){return`${e}__${t}`}const I=D.text,Ze=[`is`,`is_not`,`is_empty`,`is_not_empty`],L=[`is`,`is_not`,`any_of`,`none_of`,`is_empty`,`is_not_empty`],R={id:L,objectId:L,tenantId:L,label:D.text,createdAt:D.date,updatedAt:D.date,deletedAt:D.date,createdBy:D.user,lastUpdatedBy:D.user,parentId:L,childIds:[`is_empty`,`is_not_empty`]},Qe=/* @__PURE__ */ new Set([`createdAt`,`updatedAt`,`deletedAt`]);function offeredOn(e,t){return Qe.has(e)?t.filter(e=>e!==`on_day_month`):t}function fullyOffered(e,t,n,r){return{target:e,attribute:t,...r?{property:r}:{},operators:n,offered:n}}function attributeFilterTarget(e){let t=isHierarchyAttribute(e)?systemColumnFilterTarget(e.name):void 0;if(t)return t;let n=getAttributeFilterOperators(e);return{target:e.name,attribute:e.name,operators:n,offered:offeredOn(e.name,n)}}function locationPartFilterTarget(e,t){return{target:buildQualifiedAttribute(e,t),attribute:e,property:t,operators:I,offered:t===`country`?Ze:I}}function edgePropertyFilterTarget(e,t){let n=hasOperatorEntry(t.type)?D[t.type]:[];return fullyOffered(buildQualifiedAttribute(e,t.name),e,n,t.name)}function hasOperatorEntry(e){return Object.prototype.hasOwnProperty.call(D,e)}const $e=[`is`,`is_not`,`is_empty`,`is_not_empty`];function isMetadataKeyPath(e){return e.startsWith(`metadata.`)?e.slice(9).split(`.`).every(e=>e.length>0):!1}function systemColumnFilterTarget(e){if(isMetadataKeyPath(e))return{target:e,attribute:e,operators:$e,offered:[]};let t=Object.prototype.hasOwnProperty.call(R,e)?R[e]:void 0;return t?{target:e,attribute:e,operators:t,offered:offeredOn(e,t)}:void 0}function filterOperatorsOfType(e){return isAttributeType(e)?getAttributeFilterOperators({type:e}):[]}function isAttributeType(e){return Fe.includes(e)}function isLocationPartOperator(e){return I.includes(e)}function carriesEdgeProperties(e){return hasTypeTrait(e.type,`qualified`)}function filterTargetsOf(e){let t=[];for(let n of e){if(n.type===`location`){for(let e of E)t.push(locationPartFilterTarget(n.name,e));continue}if(t.push(attributeFilterTarget(n)),!carriesEdgeProperties(n))continue;let e=n.properties?.definitions;for(let r of e??[])t.push(edgePropertyFilterTarget(n.name,r))}let n=new Set(e.map(e=>e.name));for(let e of Object.keys(R)){if(n.has(e))continue;let r=systemColumnFilterTarget(e);r&&t.push(r)}return t.filter(e=>e.operators.length>0)}const et={eq:`is`,equals:`is`,equal:`is`,"==":`is`,"=":`is`,neq:`is_not`,notEqual:`is_not`,isNot:`is_not`,"!=":`is_not`,"<>":`is_not`,lt:`less_than`,"<":`less_than`,gt:`greater_than`,">":`greater_than`,lte:`less_or_equal`,"<=":`less_or_equal`,gte:`greater_or_equal`,">=":`greater_or_equal`,in:`any_of`,isAnyOf:`any_of`,anyOf:`any_of`,oneOf:`any_of`,notIn:`none_of`,not_in:`none_of`,isNoneOf:`none_of`,noneOf:`none_of`,notOneOf:`none_of`,startsWith:`starts_with`,beginsWith:`starts_with`,endsWith:`ends_with`,doesNotContain:`not_contains`,notContain:`not_contains`,isEmpty:`is_empty`,isNotEmpty:`is_not_empty`};function normalizeOperator(e){return et[e]??e}function normalizeFilterRule(e){let t=normalizeOperator(e.operator);return t===e.operator?e:{...e,operator:t}}const z=864e5,tt=/* @__PURE__ */ new Set([`days`,`weeks`,`months`,`years`]),nt=/* @__PURE__ */ new Set([`past`,`future`]);function isRelativeDateValue(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.amount==`number`&&Number.isFinite(t.amount)&&t.amount>0&&typeof t.unit==`string`&&tt.has(t.unit)&&typeof t.direction==`string`&&nt.has(t.direction)}function utcDayStart(e){return Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())}function shiftUtcDay(e,t,n){if(n===`days`)return e+t*z;if(n===`weeks`)return e+t*7*z;let r=new Date(e),i=r.getUTCFullYear()+(n===`years`?t:0),a=r.getUTCMonth()+(n===`months`?t:0),o=new Date(Date.UTC(i,a+1,0)).getUTCDate();return Date.UTC(i,a,Math.min(r.getUTCDate(),o))}function resolveIsWithinBounds(e,t=/* @__PURE__ */ new Date){if(!isRelativeDateValue(e))return null;let n=utcDayStart(t),r=Math.trunc(e.amount),i=e.direction===`past`?{startMs:shiftUtcDay(n,-r,e.unit),endMs:n+z}:{startMs:n,endMs:shiftUtcDay(n,r,e.unit)+z};return Number.isFinite(i.startMs)&&Number.isFinite(i.endMs)?i:null}function resolveUtcDayBounds(e){if(!Number.isFinite(e))return null;let t=utcDayStart(new Date(e));return Number.isFinite(t)?{startMs:t,endMs:t+z}:null}function toUtcDayString(e){return new Date(e).toISOString().slice(0,10)}const rt=/* @__PURE__ */ new Set([`relation`,`document`,`user`]),it={id:`text`,objectId:`text`,objectName:`text`,tenantId:`text`,label:`text`,createdAt:`date`,updatedAt:`date`,deletedAt:`date`,deletedBy:`user`,createdBy:`user`,lastUpdatedBy:`user`,visibility:`select`,ownedBy:`user`,parentId:`text`,childIds:`relation`},B={before:`"less_than"`,after:`"greater_than"`,on_or_before:`"less_or_equal"`,on_or_after:`"greater_or_equal"`,is_checked:`"is" with value true`,is_not_checked:`"is" with value false`,day_month_eq:`"on_day_month"`},at=new Set(Object.entries(D).filter(([,e])=>e.includes(`any_of`)&&!e.includes(`contains`)).map(([e])=>e)),ot={contains:`any_of`,not_contains:`none_of`};function resolveCanonicalOperator(e,t){let n=B[e];if(n){let t=`Unknown filter operator "${e}" — use ${n}`;throw new o.ValidationError(t,[{path:[`operator`],message:t}])}let r=normalizeOperator(e),i=ot[r];if(i&&at.has(t)){let e=`Operator "${r}" is not valid for type "${t}" — use "${i}"`;throw new o.ValidationError(e,[{path:[`operator`],message:e}])}return r}function assertPropertyOperator(e,t,n){let r=resolveCanonicalOperator(e,t);if(!n.includes(r)){let r=`Operator "${e}" is not valid for property type "${t}". Valid operators: ${n.length?n.join(`, `):`(no operators registered for this type)`}.`;throw new o.ValidationError(r,[{path:[`operator`],message:r}])}return r}function assertRelativeDateValue(e){if(e.operator===`is_within`&&!isRelativeDateValue(e.value)){let e=`Operator "is_within" requires a relative-date value { amount: positive number, unit: days|weeks|months|years, direction: past|future }`;throw new o.ValidationError(e,[{path:[`value`],message:e}])}}const st=/^(\d{4}-\d{2}-\d{2})(?:[T ](?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|[+-](?:(?:0\d|1[0-3])(?::[0-5]\d)?|14(?::00)?))?)?$/,ct=/* @__PURE__ */ new Set([`is`,`is_not`,`less_than`,`less_or_equal`,`greater_than`,`greater_or_equal`]);function assertAbsoluteDateValue(e,t){if(t!==`date`||!ct.has(e.operator))return;let n=e.value;if(n==null||isDynamicValue(n)||typeof n==`string`&&isCastableDay(n))return;let r=`Filter on a date attribute expected a YYYY-MM-DD day, optionally followed by a time, received ${JSON.stringify(n)}`;throw new o.ValidationError(r,[{path:[`value`],message:r}])}function isCastableDay(e){let t=st.exec(e)?.[1];return!t||t.startsWith(`0000-`)?!1:isCalendarDay(t)}function resolveComparandType(e){return e.type===`formula`&&e.returnType===`date`?`date`:resolveEffectiveFilterType(e)}function applyCanonicalForm(e,t,n){e.operator=t,canonicalizeFilterValue(e,n),assertRelativeDateValue(e),assertAbsoluteDateValue(e,n)}function assertDynamicValueForAttribute(e,t){if(!isDynamicValue(e.value))return;let n=e.value;if(n.dynamic===`actor`&&t!==`user`){let e=`actor token (@me) is only valid on user attributes, not "${t}"`;throw new o.ValidationError(e,[{path:[`value`],message:e}])}if(n.dynamic===`date`&&t!==`date`){let e=`date token (@today/@now) is only valid on date attributes, not "${t}"`;throw new o.ValidationError(e,[{path:[`value`],message:e}])}}const V=E.map(e=>`"${e}"`).join(`, `);function operatorList(e){return e.length?e.join(`, `):`(not filterable)`}function qualifyWithSchema(e){if(rt.has(e.type))return e.properties}function locationPartsHint(e){return e===`location`?` A location is filtered on one of its parts: set "property" to one of ${V} and use a text operator (e.g. contains).`:``}function dottedPathHint(e,t,n){let r=` Dotted paths are not supported — `;if(n.type===`location`)return`${r}set "attribute" to "${e}" and "property" to ${isLocationFilterProperty(t)?`"${t}"`:`one of ${V}`}.`;let i=qualifyWithSchema(n);if(i){let n=i.definitions.map(e=>`"${e.name}"`).join(`, `);return`${r}set "attribute" to "${e}" and "property" to ${i.definitions.some(e=>e.name===t)?`"${t}"`:`one of ${n}`} to filter on the edge property.`}let a=attributeFilterTarget(n).operators;return`${r}${a.length?`set "attribute" to "${e}" and use one of ${a.join(`, `)}`:`"${e}" is not filterable`}; the full-text "query" parameter matches tokens by relevance, not values.`}function collectQualifiedRuleIssues(e,t){try{return validateQualifiedRule({...e},t),[]}catch(e){if(!(e instanceof o.ValidationError))throw e;return e.errors.map(e=>({...e,path:[...e.path]}))}}function validateQualifiedRule(e,t){if(typeof e.attribute!=`string`){let e=`A filter rule needs an attribute: filters are one combinator and a flat list of rules`;throw new o.ValidationError(e,[{path:[`attribute`],message:e}])}let n=t.attributes.find(t=>t.name===e.attribute),r=n?[]:systemColumnFilterTarget(e.attribute)?.operators??[];if(!n&&r.length===0){let[n,...r]=e.attribute.split(`.`),i=r.length>0?t.attributes.find(e=>e.name===n):void 0,a=i?dottedPathHint(n??``,r[0]??``,i):e.attribute.includes(`.`)?` Dotted paths are not supported — filter on the attribute name alone with a structured operator (contains, any_of, …); the full-text "query" parameter matches tokens by relevance, not values.`:``,s=`Unknown attribute: ${e.attribute}${a}`;throw new o.ValidationError(s,[{path:[`attribute`],message:s}])}if(e.quantifier!==void 0&&!e.property){let e=`quantifier is only valid on qualified edge rules (set "property")`;throw new o.ValidationError(e,[{path:[`quantifier`],message:e}])}if(!n){if(e.property)throw new o.ValidationError(`Cannot qualify system attribute "${e.attribute}"`,[{path:[`property`],message:`"${e.attribute}" is a system column, not a reference`}]);let t=it[e.attribute]??`text`,n=resolveCanonicalOperator(e.operator,t);if(!r.includes(n)){let t=`Operator "${e.operator}" is not valid for system attribute "${e.attribute}". Valid operators: ${r.join(`, `)}.`;throw new o.ValidationError(t,[{path:[`operator`],message:t}])}applyCanonicalForm(e,n,t);return}if(!e.property){assertDynamicValueForAttribute(e,n.type);let t=attributeFilterTarget(n).operators,r=resolveCanonicalOperator(e.operator,n.type);if(!t.includes(r)){let r=`Operator "${e.operator}" is not valid for attribute "${n.name}". Valid operators: ${operatorList(t)}.${locationPartsHint(n.type)}`;throw new o.ValidationError(r,[{path:[`operator`],message:r}])}applyCanonicalForm(e,r,resolveComparandType(n));return}if(n.type===`location`){if(e.quantifier!==void 0){let e=`quantifier is not valid on a location part — a location is one value, not a set of edges`;throw new o.ValidationError(e,[{path:[`quantifier`],message:e}])}if(!isLocationFilterProperty(e.property)){let t=`Property "${e.property}" is not a part of location "${e.attribute}". Valid parts: ${V}.`;throw new o.ValidationError(t,[{path:[`property`],message:t}])}assertDynamicValueForAttribute(e,`text`);let{operators:t}=locationPartFilterTarget(n.name,e.property);applyCanonicalForm(e,assertPropertyOperator(e.operator,`text`,t),`text`);return}if(!rt.has(n.type))throw new o.ValidationError(`Cannot qualify ${n.type} attribute "${e.attribute}"`,[{path:[`property`],message:`Attribute "${e.attribute}" is not a reference type`}]);let i=n.properties;if(!i)throw new o.ValidationError(`Attribute "${e.attribute}" has no qualifyWith schema`,[{path:[`property`],message:`"${e.attribute}" has no qualifyWith`}]);let a=i.definitions.find(t=>t.name===e.property);if(!a)throw new o.ValidationError(`Property "${e.property}" not defined on "${e.attribute}".qualifyWith()`,[{path:[`property`],message:`Unknown property: ${e.property}`}]);let{operators:s}=edgePropertyFilterTarget(n.name,a);applyCanonicalForm(e,assertPropertyOperator(e.operator,a.type,s),a.type)}const lt=s.array(s.string()).max(N.columnsPerTab),ut=s.array(s.string().min(1)).max(N.columnsPerTab).refine(e=>new Set(e).size===e.length,{message:`Displayed attribute names must be unique`}),dt=s.object({attribute:s.string().describe(`Attribute to sort by`),direction:s.enum([`asc`,`desc`]).describe(`asc or desc`)}).strict(),H=s.array(dt).max(N.sortsPerTab),ft=s.object({amount:s.number().describe(`Count`),unit:s.enum([`days`,`weeks`,`months`,`years`]).describe(`Unit`),direction:s.enum([`past`,`future`]).describe(`Past or future`)}).strict(),pt=s.object({value:s.number().nullable().describe(`Amount`),code:s.array(s.string()).optional().describe(`Currency codes`)}).strict(),mt=s.object({phoneNumber:s.string().nullable().describe(`Number`),countryCode:s.string().optional().describe(`ISO country code`)}).strict(),ht=s.discriminatedUnion(`dynamic`,[s.object({dynamic:s.literal(`actor`).describe(`Resolved at filter time`),ref:s.literal(`current`).describe(`The current actor`)}).strict(),s.object({dynamic:s.literal(`date`).describe(`Resolved at filter time`),anchor:s.enum([`today`,`now`]).describe(`Anchor`)}).strict()]),gt=s.object({month:s.number().describe(`1-12`),day:s.number().describe(`Day`)}).strict(),_t=s.union([s.string(),s.number(),s.boolean(),s.array(s.string()),ft,pt,mt,gt,ht,s.null()]),vt=s.enum([`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`is_empty`,`is_not_empty`,`less_than`,`greater_than`,`less_or_equal`,`greater_or_equal`,`is_within`,`on_day_month`,`any_of`,`none_of`],{error:e=>{let t=e.input,n=typeof t==`string`?B[t]:void 0;return n?`Unknown filter operator "${t}" — use ${n}`:void 0}}),yt=s.object({attribute:s.string().describe(`Attribute to filter on`),property:s.string().optional().describe(`Qualified edge property`),quantifier:s.enum([`any`,`none`]).optional().describe(`For a multi-value attribute`),operator:vt.describe(`Comparison`),value:_t.describe(`Comparison value, by attribute type`)}).strict(),bt=s.array(yt).max(N.filterRulesPerTab),U=s.object({combinator:s.enum([`and`,`or`]).describe(`Match every rule or any rule`),rules:bt.describe(`The rules`)}).strict(),W=s.object({object:s.string().optional().describe(`Every record of this object`),relation:s.string().optional().describe(`Records linked through this relation`)}).strict().superRefine((e,t)=>{e.object===void 0&&e.relation===void 0&&t.addIssue({code:`custom`,message:`Collection source must define an object, a relation, or both`})}).transform(e=>e.relation===void 0?{object:e.object}:e.object===void 0?{relation:e.relation}:{object:e.object,relation:e.relation}),xt=s.object({source:W,filters:U.optional(),sorts:H.optional(),limit:s.number().int().nonnegative().optional()}).strict();var RecordQuery=class{constructor(e){this.state=e}with(e){return new this.constructor({...this.state,...e})}rule(e,t,n){return this.with({rules:[...this.state.rules,{attribute:e,operator:t,value:n}]})}eq(e,t){return this.rule(e,`is`,t)}neq(e,t){return this.rule(e,`is_not`,t)}gt(e,t){return this.rule(e,`greater_than`,t)}gte(e,t){return this.rule(e,`greater_or_equal`,t)}lt(e,t){return this.rule(e,`less_than`,t)}lte(e,t){return this.rule(e,`less_or_equal`,t)}contains(e,t){return this.rule(e,`contains`,t)}notContains(e,t){return this.rule(e,`not_contains`,t)}startsWith(e,t){return this.rule(e,`starts_with`,t)}endsWith(e,t){return this.rule(e,`ends_with`,t)}in(e,t){return this.rule(e,`any_of`,t)}notIn(e,t){return this.rule(e,`none_of`,t)}isEmpty(e){return this.rule(e,`is_empty`,null)}isNotEmpty(e){return this.rule(e,`is_not_empty`,null)}where(...e){return this.with({rules:[...this.state.rules,...e.map(e=>({...e}))]})}or(){return this.with({combinator:`or`})}orderBy(e,t=`asc`){return this.with({sorts:[...this.state.sorts,{attribute:e,direction:t}]})}limit(e){return this.with({limit:e})}offset(e){return this.with({offset:e})}search(e){return this.with({search:e})}related(e){return this.with({scope:{kind:`related`,relation:e}})}relatedFrom(e){return this.with({scope:{kind:`relatedFrom`,relation:e}})}toDefinition(){let{object:e,scope:t,rules:n,combinator:r,sorts:i,limit:a}=this.state;return{source:t?.kind===`related`?{relation:t.relation}:t?.kind===`relatedFrom`?{object:e,relation:t.relation}:{object:e},...n.length>0?{filters:{combinator:r,rules:n.map(e=>({...e}))}}:{},...i.length>0?{sorts:i.map(e=>({...e}))}:{},...a===void 0?{}:{limit:a}}}};function query(e){return new RecordQuery({object:typeof e==`string`?e:e.build().name,combinator:`and`,rules:[],sorts:[]})}const G=[`day`,`week`,`month`,`quarter`,`year`],K=`$query`,St=`$record`;function createInput(e){return Object.freeze({...e,optional:()=>createInput({...e,isOptional:!0}),inSection:t=>createInput({...e,section:t}),showWhen:(t,n)=>createInput({...e,when:{key:t,...n}}),many:()=>createInput({...e,isMany:!0,schema:s.array(e.schema).min(1)})})}function objectNameOf(e){return e===void 0||typeof e==`string`?e:e.build().name}function scalar(e,t,n){return createInput({kind:e,of:objectNameOf(n),isOptional:!1,isMany:!1,schema:t})}function name(){return s.string().min(1)}const q={object:e=>scalar(`object`,name(),e),attribute:(e,t)=>createInput({kind:`attribute`,of:objectNameOf(e),options:t,isOptional:!1,isMany:!1,schema:name()}),query:e=>scalar(`query`,xt,e),record:e=>scalar(`record`,name(),e),agent:()=>scalar(`agent`,name()),routine:()=>scalar(`routine`,name()),view:()=>scalar(`view`,name()),url:()=>scalar(`url`,s.url().refine(e=>/^https?:\/\//.test(e),`Only http(s) links`)),emailCategory:()=>scalar(`emailCategory`,name()),enum:e=>createInput({kind:`enum`,isOptional:!1,isMany:!1,schema:s.enum(e)}),text:()=>scalar(`text`,name()),number:()=>scalar(`number`,s.number()),boolean:()=>scalar(`boolean`,s.boolean()),period:()=>scalar(`period`,s.enum(G))},J={size:{w:4,h:4},minWidth:3,height:`flexible`,minHeight:3,maxHeight:10},Ct=defineBlock({name:`artifact_preview`,label:`Preview`,icon:`eye`,family:`context`,contexts:[`record`],layout:{size:{w:6,h:8},minWidth:4,height:`flexible`,minHeight:4,maxHeight:20},inputs:{}}),wt=[`number`,`currency`],Tt=[`status`,`select`,`user`,`relation`,`date`],Et=[`bar`,`horizontal_bar`,`line`,`area`,`donut`,`funnel`,`treemap`,`calendar`],Dt=[`value_desc`,`value_asc`,`label`],Ot=[`line`,`area`,`funnel`,`calendar`];function measureIssue({measure:e,attribute:t}){return e===`count`?t===void 0?void 0:{input:`attribute`,message:`count measures records; it takes no attribute`}:t===void 0?{input:`attribute`,message:`${String(e)} needs a number or currency attribute`}:void 0}function requires(e,t,n){return e[t]!==void 0&&e[n]===void 0?{input:t,message:`${t} needs ${n}`}:void 0}function together(e,t,n){return requires(e,t,n)??requires(e,n,t)}function kindIssue(e){let{kind:t,by:n,byBucket:r,by2:i,measure:a}=e;if(i!==void 0&&i===n)return{input:`by2`,message:`by2 must differ from by`};if((t===`donut`||t===`funnel`)&&i!==void 0)return{input:`kind`,message:`a ${String(t)} splits one grouping (by), and no second`};if(t===`funnel`&&a!==`count`&&a!==`sum`)return{input:`kind`,message:`a funnel adds stages up: its measure is count or sum`};if(t===`area`&&i===void 0)return{input:`kind`,message:`an area stacks a second grouping (by2); one series is a line`};if(t===`treemap`&&(n===void 0||i!==void 0))return{input:`kind`,message:`a treemap needs one grouping (by), and no second`};if(t===`calendar`&&(r!==`day`||i!==void 0))return{input:`kind`,message:`a calendar needs a date grouping by day, and no second`};let o=Ot;if(e.order!==void 0&&o.includes(t))return{input:`order`,message:`order applies to bar, horizontal_bar, donut or treemap`}}function measuredInputs(){return{query:q.query(),measure:q.enum(Ve).inSection(`data`),attribute:q.attribute(K,{types:wt}).optional().showWhen(`measure`,{not:[`count`]}),label:q.text().optional()}}function metricComparePeriod(e){if(e.period)return e.period;if(!e.trendBucket)return`month`;let t=G.indexOf(e.trendBucket);return G[Math.min(t+1,G.length-1)]??`month`}function comparedSpanIssue(e){let{trendBucket:t,compare:n}=e;if(n===void 0||typeof t!=`string`)return;let r=t;if(r===G.at(-1))return{input:`compare`,message:`compare needs a trendBucket finer than year`};let i=metricComparePeriod({trendBucket:r,period:e.period});return G.indexOf(i)>G.indexOf(r)?void 0:{input:`period`,message:`period must be wider than trendBucket (unset, it is one step above)`}}const kt=defineBlock({name:`metric`,label:`Indicateur`,icon:`trending-up`,family:`data`,contexts:[`page`,`record`,`display`],layout:{size:{w:3,h:2},minWidth:3,height:`fit`,maxHeight:4,figure:!0},inputs:{...measuredInputs(),trend:q.attribute(K,{types:[`date`]}).optional().inSection(`display`),trendBucket:q.period().optional().showWhen(`trend`),compare:q.enum([`previous_period`]).optional(),period:q.period().optional().showWhen(`compare`),target:q.number().optional()},refine:e=>measureIssue(e)??together(e,`trend`,`trendBucket`)??requires(e,`period`,`compare`)??comparedSpanIssue(e)??(e.target!==void 0&&e.target<=0?{input:`target`,message:`target must be above zero`}:void 0)}),At=defineBlock({name:`chart`,label:`Graphique`,icon:`chart-bar`,family:`data`,contexts:[`page`,`record`,`display`],layout:{size:{w:4,h:6},minWidth:4,height:`flexible`,minHeight:4,maxHeight:12},inputs:{...measuredInputs(),kind:q.enum(Et),by:q.attribute(K,{types:Tt}).optional(),byBucket:q.period().optional().inSection(`data`).showWhen(`by`),by2:q.attribute(K,{types:Tt}).optional().showWhen(`by`),by2Bucket:q.period().optional().inSection(`data`).showWhen(`by2`),order:q.enum(Dt).optional().inSection(`display`).showWhen(`kind`,{not:Ot})},refine:e=>measureIssue(e)??requires(e,`byBucket`,`by`)??requires(e,`by2`,`by`)??requires(e,`by2Bucket`,`by2`)??kindIssue(e)}),jt=defineBlock({name:`agenda`,label:`Agenda`,icon:`calendar`,family:`data`,contexts:[`page`,`record`,`display`],layout:J,inputs:{query:q.query(),attribute:q.attribute(K,{types:[`date`]}),next:q.number().optional(),yearly:q.boolean().optional(),label:q.text().optional()}}),Mt=defineBlock({name:`card`,label:`Fiche`,icon:`user-square`,family:`data`,contexts:[`page`,`record`,`display`],layout:{size:{w:4,h:4},minWidth:3,height:`fit`,maxHeight:10},inputs:{object:q.object().optional(),record:q.record().optional(),fields:q.attribute(St).many().optional()},refine:(e,t)=>requires(e,`record`,`object`)??(t===`page`&&e.record===void 0?{input:`record`,message:`A card outside a record shows a chosen record: content.card(object).record(id)`}:void 0)}),Nt=defineBlock({name:`text_block`,label:`Texte`,icon:`type-text`,family:`layout`,contexts:[`page`,`record`,`display`],layout:{size:{w:12,h:2},minWidth:3,height:`fit`,maxHeight:16},inputs:{markdown:q.text()}}),Pt=defineBlock({name:`heading`,label:`Titre`,icon:`type-text`,family:`layout`,contexts:[`page`,`record`],layout:{size:{w:12,h:1},minWidth:6,height:`fit`,maxHeight:3},inputs:{title:q.text(),description:q.text().optional(),icon:q.text().optional()}}),Ft=defineBlock({name:`decisions`,label:`Décisions`,icon:`inbox`,family:`people`,contexts:[`page`],layout:J,inputs:{kinds:q.enum(u).inSection(`data`).many().optional(),limit:q.number().optional()}}),It=defineBlock({name:`meetings_upcoming`,label:`Réunions à venir`,icon:`video`,family:`people`,contexts:[`page`],layout:J,inputs:{limit:q.number().optional()},refine:({limit:e})=>e===void 0||Number.isInteger(e)&&e>=1&&e<=50?void 0:{input:`limit`,message:`limit is a whole number from 1 to 50`}}),Lt=defineBlock({name:`mailbox`,label:`E-mails`,icon:`envelope`,family:`people`,contexts:[`page`],layout:J,inputs:{category:q.emailCategory().optional(),important:q.boolean().optional().inSection(`data`),unread:q.boolean().optional().inSection(`data`),limit:q.number().optional(),label:q.text().optional()},refine:({limit:e})=>e===void 0||Number.isInteger(e)&&e>=1&&e<=50?void 0:{input:`limit`,message:`limit is a whole number from 1 to 50`}}),Y=defineBlock({name:`record_links`,label:`Bubble`,icon:`share`,family:`context`,contexts:[`record`,`page`],layout:{size:{w:6,h:8},minWidth:6,height:`flexible`,minHeight:6,maxHeight:16},inputs:{center:q.enum([`record`,`me`]).optional().inSection(`data`),object:q.object().optional(),record:q.record().optional(),depth:q.enum([`1`,`2`,`3`,`4`,`5`]).optional()},refine:(e,t)=>requires(e,`record`,`object`)??(t===`page`&&e.center!==`me`&&e.record===void 0?{input:`record`,message:`Links outside a record centre on a chosen record or on the viewer: { object, record } or { center: "me" }`}:void 0)}),Rt={name:`bubble`,type:`custom`,extension:Y.name,placement:`main`,label:Y.label,icon:Y.icon,parameters:{}},zt=[Ct,kt,At,jt,Mt,Nt,Pt,Ft,It,Lt,Y],Bt=/* @__PURE__ */ new Set([`name`,`label`,`icon`,`family`,`contexts`,`inputs`,`parameters`,`layout`,`refine`]),Vt=zt;var ContentExtensionRegistry=class{constructor(){this.extensions=/* @__PURE__ */ new Map,this.seed()}register(e){let t=Array.isArray(e)?e:[e],n=/* @__PURE__ */ new Set;t.forEach((e,t)=>{if(this.prepare(e,t),n.has(e.name))throw new o.DuplicateError(`content extension`,e.name);n.add(e.name)});for(let e of t)this.extensions.set(e.name,e);return this}prepare(e,t){let n=[`extensions`,String(t)],reject=e=>{throw new o.ValidationError(e,[{path:n,message:e}])};if((typeof e!=`object`||!e||Array.isArray(e))&&reject(`Expected a content extension declaration`),Object.keys(e).some(e=>!Bt.has(e))&&reject(`Expected only ${[...Bt].join(`, `)}`),(typeof e.name!=`string`||e.name.trim().length===0)&&reject(`API name must not be empty`),(!Array.isArray(e.contexts)||e.contexts.length===0||e.contexts.some(e=>!F.includes(e)))&&reject(`contexts must be a non-empty list of ${F.join(`, `)}`),typeof e.parameters?.safeParse!=`function`&&reject(`parameters must be a Zod schema`),this.extensions.has(e.name))throw new o.DuplicateError(`content extension`,e.name)}get(e){return this.extensions.get(e)}has(e){return this.extensions.has(e)}getAll(){return[...this.extensions.values()]}get size(){return this.extensions.size}clear(){this.extensions.clear(),this.seed()}seed(){for(let e of Vt)this.extensions.set(e.name,e)}};const Ht=new ContentExtensionRegistry,X=[3,4,6,8,9,12];function overlaps(e,t){return e.x<t.x+t.w&&t.x<e.x+e.w&&e.y<t.y+t.h&&t.y<e.y+e.h}function findGridViolation(e,t={}){let n=Object.entries(e);for(let[e,{x:t,y:r,w:i,h:a}]of n){if(![t,r,i,a].every(Number.isInteger))return{path:[e],message:`Block "${e}" needs integer grid coordinates`};if(t<0||r<0||i<1||a<1)return{path:[e],message:`Block "${e}" needs x >= 0, y >= 0, w >= 1 and h >= 1`};if(t+i>12)return{path:[e],message:`Block "${e}" overflows the 12-column grid (x + w = ${t+i})`}}let r=n.filter(([e])=>t.exempt?.has(e)!==!0);for(let[e,[t,n]]of r.entries())for(let[i,a]of r.slice(e+1))if(overlaps(n,a))return{path:[i],message:`Blocks "${t}" and "${i}" overlap`}}function groupedMembers(e){let t=new Set(e.filter(e=>e.type!==`group`).map(e=>e.name)),n=/* @__PURE__ */ new Set;for(let r of e)if(r.type===`group`)for(let e of r.members)t.has(e)&&n.add(e);return n}function memberlessGroups(e){let t=new Set(e.filter(e=>e.type!==`group`).map(e=>e.name));return new Set(e.flatMap(e=>e.type===`group`&&!e.members.some(e=>t.has(e))?[e.name]:[]))}function groupSizeMessage(e){return e>=2&&e<=N.membersPerGroup?void 0:`A group holds 2 to ${N.membersPerGroup} blocks, not ${e}`}function findGroupViolation(e){let t=new Map(e.map(e=>[e.name,e])),n=/* @__PURE__ */ new Map;for(let r of e)if(r.type===`group`)for(let e of r.members){let i=t.get(e);if(i===void 0)return{path:[r.name],message:`Group "${r.name}" names "${e}", which is not a content of this page`};if(i.type===`group`)return{path:[r.name],message:`Group "${r.name}" cannot hold the group "${e}"`};let a=n.get(e);if(a!==void 0)return{path:[r.name],message:a===r.name?`Group "${r.name}" names "${e}" twice`:`"${e}" already belongs to the group "${a}"`};n.set(e,r.name)}}function boundsOf(e){let{minHeight:t,maxHeight:n}=e;return t!==void 0&&n!==void 0?`${t} to ${n} rows`:t===void 0?`at most ${String(n)} rows`:`at least ${t} rows`}function findRowLimitViolation(e){let t=Object.entries(e).find(([,e])=>e.y+e.h>N.pageRows);if(t===void 0)return;let[n,r]=t;return{path:[n],message:`Block "${n}" ends at row ${r.y+r.h}, past the page's ${N.pageRows} rows`}}function cellViolation(e,t,n){if(!X.includes(t.w))return{path:[e],message:`Block "${e}" width ${t.w} is not one of ${X.join(`, `)}`};if(t.w<n.minWidth)return{path:[e],message:`Block "${e}" width ${t.w} is below its minimum width ${n.minWidth}`};if(n.height===`flexible`&&(n.minHeight!==void 0&&t.h<n.minHeight||n.maxHeight!==void 0&&t.h>n.maxHeight))return{path:[e],message:`Block "${e}" height ${t.h} is outside its bounds (${boundsOf(n)})`}}function sharesRows(e,t){return e.y<t.y+t.h&&t.y<e.y+e.h}function findLayoutRuleViolation(e,t,n,r=/* @__PURE__ */ new Set){let i=findRowLimitViolation(e);if(i!==void 0)return i;let a=groupedMembers(t),o=Object.entries(e).filter(([e])=>!a.has(e));for(let[e,t]of o){if(r.has(e))continue;let i=cellViolation(e,t,n(e));if(i!==void 0)return i}let[s,c]=o.filter(([e])=>!r.has(e)&&n(e).height===`fill`);if(s!==void 0&&c!==void 0)return{path:[c[0]],message:`Only one block may fill the page: "${s[0]}" and "${c[0]}" both do`};if(s===void 0)return;let[l,u]=s,d=o.find(([e,t])=>e!==l&&sharesRows(t,u));if(d!==void 0)return{path:[l],message:`Block "${l}" fills the page and must be alone in its rows; "${d[0]}" shares them`}}function findRelationAttribute(e,t){return e.attributes.find(e=>e.name===t&&e.type===`relation`)}function relationAcceptsObject(e,t){return e.targets.some(e=>e.object===t||e.object===`*`)}function singleRelationTarget(e){let[t,...n]=e.targets;return t&&n.length===0&&t.object!==`*`?t.object:void 0}function requireSingleRelationTarget(e,t=[e.name,`targets`]){let n=singleRelationTarget(e);if(n===void 0){let n=`Relation "${e.name}" requires one concrete collection target`;throw new o.ValidationError(n,[{path:t,message:n}])}return n}function isCollectionContent(e){return e.type===`collection`}function collectionSourceAddress(e){return e.relation===void 0?{kind:`object`,object:e.object}:e.object===void 0?{kind:`related`,relation:e.relation}:{kind:`relatedFrom`,object:e.object,relation:e.relation}}function collectionSourceAddressOf(e){if(!e||typeof e!=`object`)return;let t=`object`in e?e.object:void 0,n=`relation`in e?e.relation:void 0;if(typeof t==`string`&&typeof n==`string`)return{kind:`relatedFrom`,object:t,relation:n};if(typeof t==`string`&&n===void 0)return{kind:`object`,object:t};if(typeof n==`string`&&t===void 0)return{kind:`related`,relation:n}}function sourcedAttributeOf(e,t){if(t.type===`richtext`)return typeof t.attribute==`string`&&e!==void 0?{object:e,attribute:t.attribute}:void 0;if(t.type!==`collection`)return;let n=collectionSourceAddressOf(t.source);if(n?.kind===`related`)return e===void 0?void 0:{object:e,attribute:n.relation};if(n?.kind===`relatedFrom`)return{object:n.object,attribute:n.relation}}function requireRecordContentContext(e,t,n){if(t!==`record`){let r=`Content "${e}" requires record context. In ${t===`page`?`a standalone page`:`a collection view`} only a collection that lists a whole object, or a custom content that does not require a record, is allowed.`;throw new o.ValidationError(r,[{path:n,message:r}])}}function resolveContentNavigation(e){let t=e.openMode??`page`;return{openMode:t,createMode:e.createMode??t}}function resolveCollectionActions(e,t){return[...new Set(t)].filter(t=>e.actions===void 0||e.actions.includes(t))}const Ut={collection:[`page`,`record`,`display`],group:[`page`,`record`],form:[`record`],activity:[`record`],richtext:[`record`],documents:[`record`],forms:[`record`],emails:[`record`],meetings:[`record`]},Wt={collection:{size:{w:12,h:8},minWidth:6,height:`flexible`,minHeight:4,maxHeight:20},activity:{size:{w:12,h:8},minWidth:6,height:`flexible`},page:{size:{w:12,h:8},minWidth:6,height:`flexible`},group:{size:{w:6,h:4},minWidth:6,height:`flexible`}};function contentReadObjects(e,t,n){if(e.type!==`group`)return[...n(e)];let r=/* @__PURE__ */ new Set;for(let i of e.members){let e=t.get(i);if(e!==void 0&&e.type!==`group`)for(let t of n(e))r.add(t)}return[...r]}function contentPlacementContexts(e,t){return e.type===`custom`?t?.contexts:e.type===`page`||e.type===`collection`&&collectionSourceAddress(e.source).kind!==`object`?[`record`]:Ut[e.type]}function requireContentPlacement(e,t,n,r,i){let a=contentPlacementContexts(e,t);a&&!a.includes(hostPlacementContext(r))&&(requireRecordContentContext(n,r,i),reject(i,`Content "${n}" cannot be placed in a record view or a record page`))}function hostPlacementContext(e){return e===`record`?`record`:`page`}function contentContextOf(e){return e.context===`page`&&e.object!==void 0?`record`:e.context}const Gt=/* @__PURE__ */ new WeakSet;function violationOf(e,t,n,r){if(!(e instanceof o.SchemaError))throw e;let i=e instanceof o.ValidationError?e.errors[0]:void 0;return{key:JSON.stringify([t,n,e.code,Gt.has(e)?`Invalid content view`:e.message]),contentName:n,path:i?.path??r,message:e.message,code:e.code,error:e}}const Kt=systemAttributeMap({name:``});function systemAttributeMap(e){return new Map(getObjectSystemAttributes(e).map(e=>[e.name,e]))}function reject(e,t){throw new o.ValidationError(t,[{path:e,message:t}])}function requireName(e,t){e.trim().length===0&&reject(t,`API name must not be empty`)}function indexUnique(e,t,n){let r=/* @__PURE__ */ new Map;return e.forEach((e,i)=>{if(requireName(e.name,[...n,String(i),`name`]),r.has(e.name))throw new o.DuplicateError(t,e.name);r.set(e.name,e)}),r}function capped(e,t){let n=e.slice(0,t).join(`, `);return e.length>t?`${n} … and ${e.length-t} more`:n}function attributeInventory(e,t){return t.length===0?`Object "${e}" has no attributes yet.`:`Attributes of "${e}": ${capped(t,30)}`}function requireAttribute(e,t,n,r,i){if(requireName(t,n),!e)return;let a=e.attributes?.get(t)??(e.system??Kt).get(t);if(!a){if(!e.attributes||we.has(t))return;let r=attributeInventory(e.name,[...e.attributes.keys()]);reject(n,`Unknown attribute "${e.name}.${t}". ${r}${i?.()??``}`)}let o=r===void 0?[]:[r].flat();return o.length>0&&!o.includes(a.type)&&reject(n,`Attribute "${e.name}.${t}" must have type ${o.join(` or `)}`),a}function collectContentViewCatalogue(e,t=`authoring`){let n=e.mode??`published`,r=/* @__PURE__ */ new Map;e.objects.forEach((e,t)=>{if(requireName(e.name,[`objects`,String(t),`name`]),r.has(e.name))throw new o.DuplicateError(`object`,e.name);r.set(e.name,{name:e.name,system:systemAttributeMap(e),attributes:indexUnique(e.attributes,`attribute`,[`objects`,String(t),`attributes`])})});let i=/* @__PURE__ */ new Set;(e.reservedObjects??[]).forEach((e,t)=>{let a=[`reservedObjects`,String(t)];requireName(e,a),r.has(e)||(n!==`draft`&&reject(a,`Unresolved reserved object "${e}"`),i.add(e),r.set(e,{name:e}))});let a=indexUnique(e.extensions??[],`extension`,[`extensions`]);function resolveObject(e,t){requireName(e,t);let n=r.get(e);return n||reject(t,`Unknown object "${e}"`),n}function inverseAddresses(e){let t=[];for(let[n,i]of r)if(n!==e)for(let r of i.attributes?.values()??[])r.type===`relation`&&relationAcceptsObject(r,e)&&t.push(`relatedFrom("${n}", "${r.name}")`);return t.sort().slice(0,3)}let authoringSchemaWith=r=>n===`draft`?draftContentViewDefinitionSchemaFor():contentViewDefinitionSchemaFor({traits:t===`structural`?null:(e,t)=>layoutTraitsOf(e,a,t),viewerFiltered:e.viewerFiltered,...r===void 0?{}:{statics:r}}),s=authoringSchemaWith(),c=n===`draft`||t===`structural`?s:contentViewDefinitionSchemaFor({traits:null,viewerFiltered:e.viewerFiltered}),schemaFor=t=>{if(e.authoringViews!==void 0&&!e.authoringViews.has(t))return c;let n=e.staticsOf?.(t);return n===void 0||n.size===0?s:authoringSchemaWith(n)},l=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=[],f=[];function parseView(e,t,n){let r=schemaFor(n).safeParse(e);if(!r.success){let n=new o.ValidationError(invalidViewMessage(e,r.error.issues[0]),r.error.issues.map(e=>({path:[...t,...e.path.map(String)],message:e.message,code:e.code})));throw Gt.add(n),n}let i=r.data;requireName(i.name,[...t,`name`]);let a=i.object??``,s=l.get(a)??/* @__PURE__ */ new Set;if(s.has(i.name))throw new o.DuplicateError(`view`,`${a}.${i.name}`);if(s.add(i.name),l.set(a,s),i.context!==`page`&&i.default){let e=u.get(i.object)??/* @__PURE__ */ new Set;if(e.has(i.context))throw new o.DuplicateError(`default view`,`${i.object}.${i.context}`);e.add(i.context),u.set(i.object,e)}return i}return e.views.forEach((t,n)=>{let r=[`views`,String(n)],i=t,o=`${String(i?.object??`?`)}.${String(i?.name??n)}`,s,c;try{s=parseView(t,r,n),c=s.object===void 0?void 0:resolveObject(s.object,[...r,`object`])}catch(e){d.push(violationOf(e,o,null,r));return}s.contents.forEach((t,i)=>{let l=[...r,`contents`,String(i)];try{requireName(t.name,[...l,`name`]),validateContent(t,l,c,contentContextOf(s),a,resolveObject,inverseAddresses,e.authoringViews?.has(n)===!0)}catch(e){d.push(violationOf(e,o,t.name,l))}}),f.push(s)}),f.forEach((t,n)=>{t.contents.forEach((r,i)=>{if(r.type!==`page`)return;let a=[`views`,String(n),`contents`,String(i),`page`],s=f.find(e=>e.context===`page`&&e.object===r.page.object&&e.name===r.page.name),c=t.context===`page`?`Content "${r.name}" cannot reference a page from a page`:t.object===r.page.object?s||e.complete!==!0?void 0:`Unknown page "${r.page.object}.${r.page.name}"`:`Content "${r.name}" must reference a page of "${String(t.object)}", not of "${r.page.object}"`;c!==void 0&&d.push(violationOf(new o.ValidationError(c,[{path:a,message:c}]),`${String(t.object)}.${t.name}`,r.name,a))})}),{views:f,unresolvedObjects:[...i].sort(),violations:d}}function validateStoredViews(e){let t=collectContentViewCatalogue(e,`structural`).violations[0];if(t)throw t.error}function describeViewIssue(e){let t=e.path.length>0?` (${e.path.map(String).join(`.`)})`:``;return`${e.message}${t}`}function invalidViewMessage(e,t){let n=typeof e==`object`&&e?e:{},r=typeof n.name==`string`?` "${n.name}"`:``,i=typeof n.object==`string`?` of "${n.object}"`:``;return t?`Invalid content view${r}${i}: ${describeViewIssue(t)}`:`Invalid content view${r}${i}`}function validateContentViewCatalogue(e){let{views:t,unresolvedObjects:n,violations:r}=collectContentViewCatalogue(e),i=r[0];if(i)throw i.error;return{views:t,unresolvedObjects:n}}function resolveStoredQuery(e,t,n,{owner:r,requireRecord:i,resolveObject:a,inverseAddresses:o}){let s=collectionSourceAddress(e.source),c,l;if(s.kind===`object`)c=a(s.object,[...t,`source`,`object`]);else if(s.kind===`related`){i();let e=[...t,`source`,`relation`],hint=()=>{if(!r)return``;let e=o(r.name);return e.length===0?``:`. Records pointing at "${r.name}" are addressed from the other side: ${e.join(`, `)}`},n=requireAttribute(r,s.relation,e,`relation`,hint);n?.type===`relation`&&(l=n,c=a(requireSingleRelationTarget(n,e),e))}else{i(),c=a(s.object,[...t,`source`,`object`]);let o=[...t,`source`,`relation`],l=requireAttribute(c,s.relation,o,`relation`);if(l?.type===`relation`&&r&&!relationAcceptsObject(l,r.name)){let e=l.targets.map(e=>`"${e.object}"`).join(`, `);reject(o,`Relation "${s.object}.${s.relation}" targets ${e}, not "${r.name}"`)}e.filters?.combinator===`or`&&reject([...t,`filters`,`combinator`],`${n} addresses "${s.object}" from the far side, so its filters must use the "and" combinator`)}return e.sorts?.forEach((e,n)=>requireAttribute(c,e.attribute,[...t,`sorts`,String(n),`attribute`])),e.filters?.rules.forEach((e,n)=>requireAttribute(c,e.attribute,[...t,`filters`,`rules`,String(n),`attribute`])),{target:c,relationAttribute:l}}function validateBlockReferences(e,t,n,r){let i=Object.entries(e.inputs),a;for(let[o,s]of i){let i=t[o];s.kind===`query`&&i!==void 0&&(a=resolveStoredQuery(i,[...n,o],`Block "${e.name}"`,r).target)}function attributeScope(o){if(o===void 0)return;if(o===`$query`)return a;if(o!==`$record`)return r.resolveObject(o,n);let s=i.find(([,e])=>e.kind===`object`)?.[0],c=s===void 0?void 0:t[s];return typeof c==`string`?r.resolveObject(c,[...n,s??`object`]):(r.owner||reject(n,`Block "${e.name}" names attributes, so it needs an object or a record host`),r.owner)}for(let[e,r]of i){let i=t[e];if(r.kind!==`attribute`||i===void 0)continue;let a=attributeScope(r.of);(Array.isArray(i)?i:[i]).forEach((t,o)=>{if(typeof t!=`string`)return;let s=Array.isArray(i)?[...n,e,String(o)]:[...n,e];requireAttribute(a,t,s,r.options?.types)})}for(let[r,a]of i){let i=a.when?.key,o=i===void 0?void 0:e.inputs[i],s=i===void 0?void 0:t[i];a.kind===`period`&&t[r]!==void 0&&o?.kind===`attribute`&&typeof s==`string`&&requireAttribute(attributeScope(o.of),s,[...n,i??r],[`date`])}}function isBoardGrouping(e){return(e?.type===`status`||e?.type===`select`)&&!e.hidden}function requireBoardGrouping(e,t,n){let r=t.type===`status`||t.type===`select`?`is hidden`:`is a ${t.type}`;isBoardGrouping(t)||reject(n,`A board groups by a visible status or select attribute: "${e}.${t.name}" ${r}`)}function validateContent(e,t,n,r,i,a,s,c){function requireRecord(){requireRecordContentContext(e.name,r,t)}let l={owner:n,requireRecord,resolveObject:a,inverseAddresses:s},u=hostPlacementContext(r);if(e.type===`custom`){let n=i.get(e.extension);n||reject([...t,`extension`],`Unknown extension "${e.extension}"`),contentPlacementContexts(e,n)?.includes(u)||reject([...t,`extension`],`${e.extension} cannot be placed here`);let r=n.parameters.safeParse(structuredClone(e.parameters??{}));if(!r.success)throw new o.ValidationError(`Invalid extension parameters`,r.error.issues.map(e=>({path:[...t,`parameters`,...e.path.map(String)],message:e.message,code:e.code})));let a=r.data,s=n.refine?.(a,u);s&&reject([...t,`parameters`,s.input],s.message),validateBlockReferences(n,a,[...t,`parameters`],l)}else if(requireContentPlacement(e,void 0,e.name,r,t),e.type!==`page`&&e.type!==`group`){if(e.type===`collection`){let{target:n,relationAttribute:r}=resolveStoredQuery(e,t,`Collection "${e.name}"`,l);if(e.columns?.forEach((e,i)=>{let a=[...t,`columns`,String(i)];if(typeof e==`string`){requireAttribute(n,e,a);return}let o=[...a,`relationProperty`];r||reject(o,`Relation property columns require a relation source`),r.properties?.definitions.some(t=>t.name===e.relationProperty)||reject(o,`Unknown relation property "${e.relationProperty}"`)}),e.displayAttributes?.forEach((e,r)=>requireAttribute(n,e,[...t,`displayAttributes`,String(r)])),c&&e.layout!==`table`&&(e.displayAttributes?.length??0)>N.displayAttributesPerCard&&reject([...t,`displayAttributes`],`A ${e.layout} shows at most ${N.displayAttributesPerCard} displayed attributes`),e.descriptionAttribute!==void 0&&requireAttribute(n,e.descriptionAttribute,[...t,`descriptionAttribute`]),e.layout===`kanban`&&e.groupByAttribute!==void 0){let r=[...t,`groupByAttribute`],i=requireAttribute(n,e.groupByAttribute,r);c&&i&&n&&requireBoardGrouping(n.name,i,r)}}else switch(e.type){case`form`:e.groups.forEach((e,r)=>{let i=[...t,`groups`,String(r)];requireName(e.name,[...i,`name`]),e.fields.forEach((e,t)=>requireAttribute(n,e.attribute,[...i,`fields`,String(t),`attribute`]))});break;case`richtext`:requireAttribute(n,e.attribute,[...t,`attribute`],`richtext`),e.titleAttribute!==void 0&&requireAttribute(n,e.titleAttribute,[...t,`titleAttribute`],`text`);break;case`emails`:case`meetings`:e.emailAttributes.forEach((e,r)=>requireAttribute(n,e,[...t,`emailAttributes`,String(r)],`text`));break;case`documents`:e.relations?.forEach((e,r)=>requireAttribute(n,e,[...t,`relations`,String(r)],`relation`));break;case`forms`:e.objectName!==void 0&&a(e.objectName,[...t,`objectName`]);break;case`activity`:break;default:reject(t,`Unknown content type: ${String(e)}`)}}}const Z=Object.freeze({size:Object.freeze({w:4,h:4}),minWidth:3,height:`flexible`,minHeight:2,figure:!1});function resolveLayout(e){return e===void 0?Z:{size:e.size??Z.size,minWidth:e.minWidth??Z.minWidth,height:e.height??Z.height,...e.minHeight===void 0?{}:{minHeight:e.minHeight},...e.maxHeight===void 0?{}:{maxHeight:e.maxHeight},figure:e.figure??!1}}function baseTraitsOf(e,t){return e.type===`custom`?resolveLayout(t.get(e.extension)?.layout):e.type in Wt?resolveLayout(Wt[e.type]):Z}function widthCovering(e){return X.find(t=>t>=e)??12}function boundOf(e,t){let n=e.filter(e=>e!==void 0);return n.length===0?void 0:t(...n)}function groupTraitsOf(e){if(e.length===0)return resolveLayout(Wt.group);let sum=t=>e.reduce((e,n)=>e+t(n),0),t={w:widthCovering(sum(e=>e.size.w)),h:Math.max(...e.map(e=>e.size.h))},n=widthCovering(sum(e=>e.minWidth)),r=e.every(e=>e.figure);if(e.every(e=>e.height===`fit`)){let i=boundOf(e.map(e=>e.maxHeight),Math.max);return{size:t,minWidth:n,height:`fit`,...i===void 0?{}:{maxHeight:i},figure:r}}let i=e.filter(e=>e.height!==`fit`),a=boundOf(i.map(e=>e.minHeight),Math.max),o=boundOf(i.map(e=>e.maxHeight),Math.min),s=o===void 0?void 0:Math.max(o,a??o);return{size:t,minWidth:n,height:`flexible`,...a===void 0?{}:{minHeight:a},...s===void 0?{}:{maxHeight:s},figure:r}}function layoutTraitsOf(e,t,n){let r=e.type===`group`?groupTraitsOf(e.members.flatMap(e=>{let r=n?.get(e);return r===void 0||r.type===`group`?[]:[layoutTraitsOf(r,t)]})):baseTraitsOf(e,t);return e.height===void 0?r:{...r,height:e.height}}function pageTraitsOf(e,t){return n=>{let r=e.get(n);return r?layoutTraitsOf(r,t,e):Z}}const qt=1e4;function isPlainJsonObject(e){let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype||Object.getPrototypeOf(t)===null&&t.constructor?.name===`Object`}function addJsonIssue(e,t,n=[]){e.addIssue({code:`custom`,message:t,path:n})}function pushJsonArrayChildren(e,t,n,r){for(let n of Reflect.ownKeys(e))n!==`length`&&(n===`__proto__`?addJsonIssue(r,`The __proto__ key is not allowed in custom props`,[...t.path,n]):typeof n!=`symbol`&&/^(0|[1-9]\d*)$/.test(n)||addJsonIssue(r,`Arrays cannot contain non-index JSON properties`,[...t.path,n]));for(let i=e.length-1;i>=0;i--){let a=Object.getOwnPropertyDescriptor(e,String(i)),o=[...t.path,i];a&&`value`in a?n.push({kind:`enter`,value:a.value,path:o,depth:t.depth+1}):addJsonIssue(r,`Sparse arrays are not valid JSON values`,o)}}function pushJsonObjectChildren(e,t,n,r){let i=Reflect.ownKeys(e);for(let a=i.length-1;a>=0;a--){let o=i[a],s=[...t.path,o];if(o===`__proto__`){addJsonIssue(r,`The __proto__ key is not allowed in custom props`,s);continue}if(typeof o==`symbol`){addJsonIssue(r,`Symbol keys are not valid JSON keys`,s);continue}let c=Object.getOwnPropertyDescriptor(e,o);c?.enumerable&&`value`in c?n.push({kind:`enter`,value:c.value,path:s,depth:t.depth+1}):addJsonIssue(r,`Custom props must contain enumerable data properties only`,s)}}function validateJsonProps(e,t){if(typeof e!=`object`||!e){addJsonIssue(t,`Expected a plain JSON object`);return}try{if(Array.isArray(e)||!isPlainJsonObject(e)){addJsonIssue(t,`Expected a plain JSON object`);return}}catch{addJsonIssue(t,`Custom props contain an object that cannot be safely inspected`);return}let n=/* @__PURE__ */ new WeakSet,r=[{kind:`enter`,value:e,path:[],depth:0}],i=0;for(;r.length>0;){let e=r.pop();if(!e)break;if(e.kind===`exit`){n.delete(e.value);continue}if(i++,i>qt){addJsonIssue(t,`Custom props cannot exceed ${qt.toLocaleString(`en-US`)} total JSON nodes`,e.path);return}if(e.depth>64){addJsonIssue(t,`Custom props cannot exceed depth 64`,e.path);continue}let a=e.value;if(!(a===null||typeof a==`string`||typeof a==`boolean`||typeof a==`number`&&Number.isFinite(a))){if(typeof a!=`object`)addJsonIssue(t,`Expected a JSON value`,e.path);else if(n.has(a))addJsonIssue(t,`Custom props cannot contain circular references`,e.path);else try{if(Array.isArray(a)){n.add(a),r.push({kind:`exit`,value:a}),pushJsonArrayChildren(a,e,r,t);continue}if(!isPlainJsonObject(a)){addJsonIssue(t,`Expected an array or plain JSON object`,e.path);continue}n.add(a),r.push({kind:`exit`,value:a}),pushJsonObjectChildren(a,e,r,t)}catch{addJsonIssue(t,`Custom props contain an object that cannot be safely inspected`,e.path)}}}}const Jt=s.unknown().superRefine(validateJsonProps).transform(e=>e),Yt={span:s.union([s.literal(1),s.literal(2),s.literal(3),s.literal(4),s.literal(5),s.literal(6),s.literal(7),s.literal(8),s.literal(9),s.literal(10),s.literal(11),s.literal(12)]).optional().describe(`Columns of 12 this field occupies`),label:s.string().optional().describe(`Overrides the attribute's label`),readOnly:s.boolean().optional().describe(`Shows the value, not editable`)},Xt=s.object({attribute:s.string().describe(`Attribute API name shown by this field`),...Yt}).strict(),Zt=s.object({name:s.string().describe(`Group API name, unique in the form`),label:s.string().describe(`Label people see`),description:s.string().optional().describe(`Extra context under the label`),collapsible:s.boolean().optional().describe(`Whether the group can be collapsed`),collapsed:s.boolean().optional().describe(`Whether the group starts collapsed`),fields:s.array(Xt).max(N.fieldsPerGroup).describe(`Fields in this group, in order`)}).strict();function refineFormContent(e,t){e.groups.reduce((e,t)=>e+t.fields.length,0)>N.fieldsPerFormTab&&t.addIssue({code:`too_big`,origin:`array`,maximum:N.fieldsPerFormTab,inclusive:!0,message:`A form content can contain at most ${N.fieldsPerFormTab} fields`,path:[`groups`]});let n=/* @__PURE__ */ new Set,r=/* @__PURE__ */ new Set;e.groups.forEach((e,i)=>{n.has(e.name)&&t.addIssue({code:`custom`,message:`Duplicate group name "${e.name}"`,path:[`groups`,i,`name`]}),n.add(e.name),e.fields.forEach((e,n)=>{r.has(e.attribute)&&t.addIssue({code:`custom`,message:`Duplicate field attribute "${e.attribute}"`,path:[`groups`,i,`fields`,n,`attribute`]}),r.add(e.attribute)})})}const Q={name:s.string().describe(`Content API name, unique in the view`),label:s.string().optional().describe(`Label people see`),icon:P.optional().describe(`Icon name`),placement:s.enum([`main`,`aside`,`grid`]).describe(`main: the tab strip. aside: the side panel. grid: a page block`),height:s.enum([`fit`,`flexible`,`fill`]).optional().describe(`Page block height: fit (content), flexible (between bounds) or fill (whole page, one per page)`)},Qt={...Q,type:s.literal(`collection`),source:W.describe(`object: every record; relation: records linked to this record; both: records of object whose relation points at this record`),visibility:s.enum(Re).optional().describe(`all: no scope; workspace: every member; private: viewer's own; shared: private records other members shared with the viewer`),columns:s.array(s.union([s.string(),s.object({relationProperty:s.string().refine(e=>e.trim().length>0).describe(`Qualified edge property shown as a column`)}).strict()])).max(N.columnsPerTab).optional().describe(`Table columns, in order`),descriptionAttribute:s.string().optional().describe(`Secondary line under each row's title (list layout)`),displayAttributes:ut.optional().describe(`Attributes shown on each card`),filters:U.optional().describe(`Restricts which records show`),sorts:H.optional().describe(`Sort order`),actions:s.enum([`create`,`update`,`delete`,`attach`,`detach`]).array().optional().describe(`Offered actions; absent = every action, [] = none`),openMode:s.enum([`page`,`peek`]).optional().describe(`page or peek (the record panel)`),createMode:s.enum([`page`,`peek`,`inline`]).optional().describe(`page, peek, or inline (creates without opening)`)},$t=s.object({...Qt,layout:s.enum([`table`,`list`,`kanban`]).describe(`table columns, list cards, kanban board grouped by a select/status attribute`),columnSizing:s.record(s.string(),s.number()).optional().describe(`Column widths in pixels, by attribute name`),groupByAttribute:s.string().optional().describe(`Kanban only: the select or status attribute that names the columns`),kanbanColumnOrder:s.array(s.string()).optional().describe(`Kanban: column order by option value`),kanbanColumnVisibility:s.record(s.string(),s.boolean()).optional().describe(`Kanban: which columns are shown`),kanbanPinnedColumns:s.array(s.string()).optional().describe(`Kanban: columns pinned first`)}).strict().superRefine((e,t)=>{let n=[`groupByAttribute`,`kanbanColumnOrder`,`kanbanColumnVisibility`,`kanbanPinnedColumns`];if(e.layout===`kanban`)e.groupByAttribute===void 0&&t.addIssue({code:`custom`,path:[`groupByAttribute`],message:`A kanban layout requires groupByAttribute`});else for(let r of n)e[r]!==void 0&&t.addIssue({code:`custom`,path:[r],message:`Only a kanban layout groups by an attribute`})}),$={...Q,type:s.literal(`form`),groups:s.array(Zt).max(N.groupsPerFormTab).describe(`Field groups, in order`),formColumns:s.union([s.literal(1),s.literal(2),s.literal(3)]).optional().describe(`Grid columns, 1-3`),density:s.enum([`compact`,`comfortable`,`spacious`]).optional().describe(`Vertical spacing between fields`)},en=s.object($).strict().superRefine(refineFormContent),tn=s.object({...$,groups:$.groups.min(1,`A published form content requires at least one group`)}).strict().superRefine(refineFormContent),nn=[$t,s.object({...Q,type:s.literal(`group`),placement:s.literal(`grid`).describe(`Always grid`),members:s.array(s.string()).min(1).max(N.membersPerGroup).describe(`Contents side by side`)}).strict(),s.object({...Q,type:s.literal(`custom`),extension:s.string().describe(`Name of a registered extension`),parameters:s.lazy(()=>Jt).optional().describe(`Extension parameters`)}).strict(),s.object({...Q,type:s.literal(`activity`)}).strict(),s.object({...Q,type:s.literal(`richtext`),attribute:s.string().describe(`Richtext attribute edited in place`),titleAttribute:s.string().optional().describe(`Text attribute shown as the title`)}).strict(),s.object({...Q,type:s.literal(`documents`),allowUpload:s.boolean().optional().describe(`Lets people add files here`),allowRemove:s.boolean().optional().describe(`Lets people remove files here`),hideAttachments:s.boolean().optional().describe(`Hides files attached elsewhere (e.g. emails)`),relations:s.array(s.string()).optional().describe(`Document relations shown; the record's own files if absent`)}).strict(),s.object({...Q,type:s.literal(`forms`),objectName:s.string().optional().describe(`Limits to this object's published forms`)}).strict(),s.object({...Q,type:s.literal(`emails`),emailAttributes:s.array(s.string()).max(N.emailAttributesPerTab).describe(`Addresses`)}).strict(),s.object({...Q,type:s.literal(`meetings`),emailAttributes:s.array(s.string()).max(N.emailAttributesPerTab).describe(`Addresses`)}).strict(),s.object({...Q,type:s.literal(`page`),page:s.object({object:s.string().describe(`Its object`),name:s.string().describe(`Its name`)}).strict().describe(`The record page this tab renders`)}).strict()],rn=s.discriminatedUnion(`type`,[en,...nn]),an=s.discriminatedUnion(`type`,[tn,...nn]),on={name:s.string(),label:s.string(),description:s.string().optional(),icon:P.optional()},sn=s.object({x:s.number().describe(`Column`),y:s.number().describe(`Row`),w:s.number().describe(`Width: 3, 4, 6, 8, 9 or 12; x + w ≤ 12`),h:s.number().describe(`Height`)}),cn=sn.strict();function contentViewBaseSchemaFor(e){let t=s.array(e).max(N.tabsPerView);return s.discriminatedUnion(`context`,[s.object({...on,object:s.string(),context:s.enum([`collection`,`record`]),default:s.boolean().optional(),anchors:s.record(s.string(),s.object({after:s.string()}).strict()).optional(),contents:t}).strict(),s.object({...on,object:s.string().optional(),context:s.literal(`page`),home:s.boolean().optional(),grid:s.record(s.string(),cn).refine(e=>Object.keys(e).length<=N.tabsPerView,{message:`A page holds at most ${N.tabsPerView} blocks`}),contents:t}).strict()])}const ln=contentViewBaseSchemaFor(rn),un=contentViewBaseSchemaFor(an);function registryTraits(e,t){return layoutTraitsOf(e,Ht,t)}function addGroupSizeIssues(e,t){for(let n of e.contents){let e=n.type===`group`?groupSizeMessage(n.members.length):void 0;e&&t.addIssue({code:`custom`,message:e,path:[`contents`]})}}function addDuplicateContentNameIssues(e,t){let n=/* @__PURE__ */ new Set;e.contents.forEach((e,r)=>{n.has(e.name)&&t.addIssue({code:`custom`,message:`Duplicate content name "${e.name}"`,path:[`contents`,r,`name`]}),n.add(e.name)})}function addPlacementIssues(e,t){e.contents.forEach((n,r)=>{let i=n.placement===`grid`;e.context===`page`&&!i&&t.addIssue({code:`custom`,message:`Content "${n.name}" of a page must be placed on the grid`,path:[`contents`,r,`placement`]}),e.context!==`page`&&i&&t.addIssue({code:`custom`,message:`Content "${n.name}" cannot be placed on a grid outside a page`,path:[`contents`,r,`placement`]})})}function addIssue(e,t){e.addIssue({code:`custom`,message:t.message,path:[`grid`,...t.path]})}function addGridIssues(e,t,n,r){if(e.context!==`page`||!e.grid)return;let i=new Set(e.contents.map(e=>e.name)),a=groupedMembers(e.contents);for(let n of i)a.has(n)||Object.hasOwn(e.grid,n)||t.addIssue({code:`custom`,message:`Content "${n}" has no grid position`,path:[`grid`]});let o=Object.keys(e.grid).filter(e=>!i.has(e));for(let e of o)t.addIssue({code:`custom`,message:`Grid position "${e}" matches no content`,path:[`grid`,e]});if(e.home&&e.object!==void 0&&t.addIssue({code:`custom`,message:`Only a standalone page can be the home`,path:[`home`]}),o.length>0)return;let s=findGridViolation(e.grid,{exempt:a});if(s){addIssue(t,s);return}if(n===null)return;let c=findGroupViolation(e.contents);if(c){t.addIssue({code:`custom`,message:c.message,path:[`contents`]});return}let l=new Map(e.contents.map(e=>[e.name,e])),u=findLayoutRuleViolation(e.grid,e.contents,e=>n(l.get(e),l),r);u&&addIssue(t,u)}function draftContentViewDefinitionSchemaFor(){return ln.superRefine((e,t)=>{let n=e;addDuplicateContentNameIssues(n,t),addPlacementIssues(n,t),addGridIssues(n,t,null)})}function contentViewDefinitionSchemaFor(e={}){let t=e.traits===void 0?registryTraits:e.traits;return un.superRefine((n,r)=>{let i=n;addDuplicateContentNameIssues(i,r),addPlacementIssues(i,r),addGridIssues(i,r,t,e.statics),e.viewerFiltered||addGroupSizeIssues(i,r),n.context!==`page`&&!n.contents.some(e=>e.placement===`main`)&&r.addIssue({code:`custom`,message:`A published view requires at least one main content`,path:[`contents`]})})}const dn=draftContentViewDefinitionSchemaFor(),fn=contentViewDefinitionSchemaFor();function isPlainRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const pn=new Set(c.ICONS),mn=/^[a-zA-Z_][a-zA-Z0-9_]*$/,hn=/^[a-z][a-z0-9-]*$/,gn=N.labelLength,_n=s.string().min(1,`Object name cannot be empty`).max(63,`Object name is too long (max 63 characters)`).regex(/^[a-z][a-z0-9-]*$/,{message:`Invalid object name format.
|
|
3
|
+
Name must be in kebab-case (slug format):
|
|
4
|
+
✅ Valid: 'products', 'user-profiles', 'order-items'
|
|
5
|
+
❌ Invalid: 'Products', 'userProfiles', 'user_profiles'`});function validateObjectName(e){try{_n.parse(e)}catch(e){throw e instanceof s.ZodError?new o.SchemaError(e.issues[0].message,o.SchemaErrorCode.INVALID_OBJECT_NAME):e}}function validateViewName(e){if(!e||e.length===0)throw new o.ValidationError(`View name cannot be empty`,[{path:[`name`],message:`View name cannot be empty`}]);if(e.length>63)throw new o.ValidationError(`View name is too long`,[{path:[`name`],message:`View name is too long (max 63 characters)`}]);if(!hn.test(e))throw new o.ValidationError(`Invalid view name format`,[{path:[`name`],message:`View name must be in kebab-case (e.g., 'detail', 'list-view')`}])}function assertUniqueBy(e,t,n){let r=/* @__PURE__ */ new Set;for(let i of e){let e=t(i);if(r.has(e))throw n(e);r.add(e)}}const vn=s.string().min(1,`Attribute name cannot be empty`).max(63,`Attribute name is too long (max 63 characters)`).regex(mn,{message:`Invalid attribute name format.
|
|
6
|
+
Name must be a valid variable identifier:
|
|
7
|
+
✅ Valid: 'firstName', 'first_name', 'FirstName', 'FIRST_NAME'
|
|
8
|
+
❌ Invalid: 'first-name', 'first name', '123name', 'first.name'`}).refine(e=>!M.includes(e),{message:`This is a reserved attribute name. Reserved names: ${M.join(`, `)}`});function validateAttributeName(e){if(!e||e.length===0)throw Error(`[AttributeBuilder] Attribute name cannot be empty`);if(e.length>63)throw Error(`[AttributeBuilder] Attribute name is too long (max 63 characters)`);if(!mn.test(e))throw Error(`[AttributeBuilder] Invalid attribute name format.
|
|
9
|
+
Name must be a valid variable identifier:
|
|
10
|
+
✅ Valid: 'firstName', 'first_name', 'FirstName', 'FIRST_NAME'
|
|
11
|
+
❌ Invalid: 'first-name', 'first name', '123name', 'first.name'`);if(M.includes(e))throw Error(`[AttributeBuilder] "${e}" is a reserved name and cannot be used as an attribute name.\nReserved names: ${M.join(`, `)}`)}function validateLabel(e){if(!e||e.length===0)throw Error(`[AttributeBuilder] Attribute label cannot be empty`);if(e.length>gn)throw Error(`[AttributeBuilder] Attribute label is too long (max ${gn} characters)`)}function validateIconName(e,t){if(!pn.has(e))throw Error(`[AttributeBuilder] Invalid icon "${e}" in ${t}.\nIcon must be one of the predefined icons from @standards/constants.`)}function validateOptions(e,t){let n=/* @__PURE__ */ new Set;for(let r of t){if(!r.value?.trim())throw Error(`[AttributeBuilder] Option in "${e}" has an empty or missing value.`);if(!r.label?.trim())throw Error(`[AttributeBuilder] Option "${r.value}" in "${e}" has an empty or missing label.`);if(n.has(r.value))throw Error(`[AttributeBuilder] Duplicate option value "${r.value}" in "${e}".`);n.add(r.value)}for(let n of t){if(n.inverse===void 0)continue;let r=t.find(e=>e.value===n.inverse);if(!r)throw Error(`[AttributeBuilder] Option "${n.value}" in "${e}" has inverse "${n.inverse}" which does not match any option value.`);if(r.inverse!==n.value)throw Error(`[AttributeBuilder] Inverse mismatch in "${e}": "${n.value}" points to "${n.inverse}", but "${n.inverse}" points to "${r.inverse??`(none)`}". Inverse pairs must be symmetric.`)}}Object.defineProperty(exports,"ACTIONABLE_DECISION_KINDS",{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,"AGENDA_BLOCK",{enumerable:!0,get:function(){return jt}}),Object.defineProperty(exports,"AGGREGATE_BUCKETS",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"AGGREGATE_MEASURES",{enumerable:!0,get:function(){return Ve}}),Object.defineProperty(exports,"ARTIFACT_PREVIEW_EXTENSION",{enumerable:!0,get:function(){return Ct}}),Object.defineProperty(exports,"ATTRIBUTE_FILTER_OPERATORS",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"ATTRIBUTE_NAME_SCHEMA",{enumerable:!0,get:function(){return vn}}),Object.defineProperty(exports,"ATTRIBUTE_TYPES",{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,"ATTRIBUTE_TYPE_DESCRIPTORS",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"BLOCK_CONTEXTS",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"BLOCK_PERIODS",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"BLOCK_WIDTHS",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"CARD_BLOCK",{enumerable:!0,get:function(){return Mt}}),Object.defineProperty(exports,"CHART_BLOCK",{enumerable:!0,get:function(){return At}}),Object.defineProperty(exports,"CHART_KINDS",{enumerable:!0,get:function(){return Et}}),Object.defineProperty(exports,"CHART_ORDERS",{enumerable:!0,get:function(){return Dt}}),Object.defineProperty(exports,"CONTENT_PLACEMENT_CONTEXTS",{enumerable:!0,get:function(){return Ut}}),Object.defineProperty(exports,"DECISIONS_BLOCK",{enumerable:!0,get:function(){return Ft}}),Object.defineProperty(exports,"DECISION_INBOX_STATES",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"DECISION_KINDS",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"DECISION_LINE_MAX_LENGTH",{enumerable:!0,get:function(){return 200}}),Object.defineProperty(exports,"DECISION_LINK_TARGET_TYPES",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"DECISION_LIST_STATES",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,"DECISION_READ_STATES",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"DECISION_SENDER_KINDS",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,"DECISION_SETTINGS_AREAS",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,"DECISION_TITLE_MAX_LENGTH",{enumerable:!0,get:function(){return 120}}),Object.defineProperty(exports,"DECISION_TRANSFERS_KEY",{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,"DECISION_TYPES_V1",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,"DECISION_TYPE_ACCESS_GRANTED",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,"DECISION_TYPE_AGENT_APPROVAL",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"DECISION_TYPE_AGENT_MESSAGE",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"DECISION_TYPE_AGENT_QUESTION",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"DECISION_TYPE_AGENT_REVIEW",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"DECISION_TYPE_AGENT_ROUTINE_RUN_FAILED",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"DECISION_TYPE_AGENT_SETUP",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"DECISION_TYPE_BUNDLE_SETUP",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,"DECISION_TYPE_CONNECTOR_CONNECTION_ERROR",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"DECISION_TYPE_CONNECTOR_CONNECTION_REAUTH_REQUIRED",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"DECISION_TYPE_CONNECTOR_CONNECTION_SEND_NOT_GRANTED",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"DECISION_TYPE_ENVIRONMENT_BUILD_FAILED",{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,"DECISION_TYPE_KINDS",{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,"DECISION_TYPE_PERSON",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,"DECISION_TYPE_RECORD_ASSIGNED",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"DECISION_TYPE_RECORD_MENTIONED",{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,"DECISION_WORK_STATES",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"DEFAULT_LAYOUT_TRAITS",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"GROUPABLE_ATTRIBUTE_TYPES",{enumerable:!0,get:function(){return Tt}}),Object.defineProperty(exports,"HEADING_BLOCK",{enumerable:!0,get:function(){return Pt}}),Object.defineProperty(exports,"HIERARCHY_ATTRIBUTE_IDS",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"HIERARCHY_ATTRIBUTE_NAMES",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"HIERARCHY_CHILD_IDS_LIMIT",{enumerable:!0,get:function(){return 6}}),Object.defineProperty(exports,"INVENTORY_LIMIT",{enumerable:!0,get:function(){return 30}}),Object.defineProperty(exports,"LIST_VIEW_TAB_VISIBILITIES",{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,"LOCATION_FILTER_PROPERTIES",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"MAILBOX_BLOCK",{enumerable:!0,get:function(){return Lt}}),Object.defineProperty(exports,"MAX_AGGREGATE_GROUPS",{enumerable:!0,get:function(){return 100}}),Object.defineProperty(exports,"MEASURABLE_ATTRIBUTE_TYPES",{enumerable:!0,get:function(){return wt}}),Object.defineProperty(exports,"MEETINGS_UPCOMING_BLOCK",{enumerable:!0,get:function(){return It}}),Object.defineProperty(exports,"METRIC_BLOCK",{enumerable:!0,get:function(){return kt}}),Object.defineProperty(exports,"NATIVE_BLOCKS",{enumerable:!0,get:function(){return zt}}),Object.defineProperty(exports,"NATIVE_OBJECT_NAMES",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"NO_VALUE_OPERATORS",{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,"OBJECT_NAME_SCHEMA",{enumerable:!0,get:function(){return _n}}),Object.defineProperty(exports,"OPERATORS_BY_TYPE",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"PAGE_GRID_COLUMNS",{enumerable:!0,get:function(){return 12}}),Object.defineProperty(exports,"QUALIFIED_SEPARATOR",{enumerable:!0,get:function(){return`__`}}),Object.defineProperty(exports,"QUERY_OBJECT",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"RECORD_LINKS_BLOCK",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"RECORD_LINKS_CONTENT",{enumerable:!0,get:function(){return Rt}}),Object.defineProperty(exports,"RECORD_LIST_SCOPES",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"RECORD_OBJECT",{enumerable:!0,get:function(){return St}}),Object.defineProperty(exports,"RELATION_TARGET_ANY",{enumerable:!0,get:function(){return`*`}}),Object.defineProperty(exports,"REMOVED_OPERATOR_REPLACEMENTS",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"RESERVED_ATTRIBUTE_NAMES",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"RESERVED_OBJECT_NAMES",{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,"RESOURCE_VISIBILITIES",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"RecordQuery",{enumerable:!0,get:function(){return RecordQuery}}),Object.defineProperty(exports,"SCHEMA_LIMITS",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"SYNONYM_ALIASES",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"SYSTEM_ATTRIBUTES",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"SYSTEM_ATTRIBUTE_I18N_KEYS",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"SYSTEM_FIELD_NAMES",{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,"SYSTEM_FILTER_ATTRIBUTE_TYPES",{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,"TEXT_BLOCK",{enumerable:!0,get:function(){return Nt}}),Object.defineProperty(exports,"UNORDERED_CHART_KINDS",{enumerable:!0,get:function(){return Ot}}),Object.defineProperty(exports,"__exportAll",{enumerable:!0,get:function(){return __exportAll}}),Object.defineProperty(exports,"__toESM",{enumerable:!0,get:function(){return __toESM}}),Object.defineProperty(exports,"assertUniqueBy",{enumerable:!0,get:function(){return assertUniqueBy}}),Object.defineProperty(exports,"attributeFilterTarget",{enumerable:!0,get:function(){return attributeFilterTarget}}),Object.defineProperty(exports,"attributeInventory",{enumerable:!0,get:function(){return attributeInventory}}),Object.defineProperty(exports,"blockObjectInputs",{enumerable:!0,get:function(){return blockObjectInputs}}),Object.defineProperty(exports,"brandedString",{enumerable:!0,get:function(){return brandedString}}),Object.defineProperty(exports,"buildQualifiedAttribute",{enumerable:!0,get:function(){return buildQualifiedAttribute}}),Object.defineProperty(exports,"canonicalizeFilterValue",{enumerable:!0,get:function(){return canonicalizeFilterValue}}),Object.defineProperty(exports,"capped",{enumerable:!0,get:function(){return capped}}),Object.defineProperty(exports,"collectContentViewCatalogue",{enumerable:!0,get:function(){return collectContentViewCatalogue}}),Object.defineProperty(exports,"collectQualifiedRuleIssues",{enumerable:!0,get:function(){return collectQualifiedRuleIssues}}),Object.defineProperty(exports,"collectionContentSourceSchema",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"collectionSourceAddress",{enumerable:!0,get:function(){return collectionSourceAddress}}),Object.defineProperty(exports,"collectionSourceAddressOf",{enumerable:!0,get:function(){return collectionSourceAddressOf}}),Object.defineProperty(exports,"colorIdSchema",{enumerable:!0,get:function(){return Ge}}),Object.defineProperty(exports,"columnsSchema",{enumerable:!0,get:function(){return lt}}),Object.defineProperty(exports,"contentExtensionRegistry",{enumerable:!0,get:function(){return Ht}}),Object.defineProperty(exports,"contentReadObjects",{enumerable:!0,get:function(){return contentReadObjects}}),Object.defineProperty(exports,"contentViewDefinitionSchema",{enumerable:!0,get:function(){return fn}}),Object.defineProperty(exports,"contentViewDefinitionSchemaFor",{enumerable:!0,get:function(){return contentViewDefinitionSchemaFor}}),Object.defineProperty(exports,"currentActor",{enumerable:!0,get:function(){return currentActor}}),Object.defineProperty(exports,"decisionArchiveAllResultSchema",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"decisionAttachmentSchema",{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,"decisionCountsSchema",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"decisionHandedBy",{enumerable:!0,get:function(){return decisionHandedBy}}),Object.defineProperty(exports,"decisionLinkSchema",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"decisionListResultSchema",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"decisionRecipientSchema",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"decisionSchema",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,"decisionSenderSchema",{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,"decisionThreadKey",{enumerable:!0,get:function(){return decisionThreadKey}}),Object.defineProperty(exports,"decisionTransferBy",{enumerable:!0,get:function(){return decisionTransferBy}}),Object.defineProperty(exports,"decisionTransferTargetsSchema",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"decisionTransferTo",{enumerable:!0,get:function(){return decisionTransferTo}}),Object.defineProperty(exports,"decisionTransfersOf",{enumerable:!0,get:function(){return decisionTransfersOf}}),Object.defineProperty(exports,"decisionWithRecipientSchema",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,"decodeOperationOutput",{enumerable:!0,get:function(){return decodeOperationOutput}}),Object.defineProperty(exports,"defineBlock",{enumerable:!0,get:function(){return defineBlock}}),Object.defineProperty(exports,"describeViewIssue",{enumerable:!0,get:function(){return describeViewIssue}}),Object.defineProperty(exports,"displayAttributesSchema",{enumerable:!0,get:function(){return ut}}),Object.defineProperty(exports,"draftContentViewDefinitionSchema",{enumerable:!0,get:function(){return dn}}),Object.defineProperty(exports,"draftContentViewDefinitionSchemaFor",{enumerable:!0,get:function(){return draftContentViewDefinitionSchemaFor}}),Object.defineProperty(exports,"edgePropertyFilterTarget",{enumerable:!0,get:function(){return edgePropertyFilterTarget}}),Object.defineProperty(exports,"extractCurrencyFilterValue",{enumerable:!0,get:function(){return extractCurrencyFilterValue}}),Object.defineProperty(exports,"extractFilterValue",{enumerable:!0,get:function(){return extractFilterValue}}),Object.defineProperty(exports,"filterOperatorsOfType",{enumerable:!0,get:function(){return filterOperatorsOfType}}),Object.defineProperty(exports,"filterStateSchema",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"filterTargetsOf",{enumerable:!0,get:function(){return filterTargetsOf}}),Object.defineProperty(exports,"findGridViolation",{enumerable:!0,get:function(){return findGridViolation}}),Object.defineProperty(exports,"findGroupViolation",{enumerable:!0,get:function(){return findGroupViolation}}),Object.defineProperty(exports,"findLayoutRuleViolation",{enumerable:!0,get:function(){return findLayoutRuleViolation}}),Object.defineProperty(exports,"findRelationAttribute",{enumerable:!0,get:function(){return findRelationAttribute}}),Object.defineProperty(exports,"findRowLimitViolation",{enumerable:!0,get:function(){return findRowLimitViolation}}),Object.defineProperty(exports,"formatDecisionLink",{enumerable:!0,get:function(){return formatDecisionLink}}),Object.defineProperty(exports,"getAttributeCapabilities",{enumerable:!0,get:function(){return getAttributeCapabilities}}),Object.defineProperty(exports,"getAttributeFilterOperators",{enumerable:!0,get:function(){return getAttributeFilterOperators}}),Object.defineProperty(exports,"getHierarchyAttributes",{enumerable:!0,get:function(){return getHierarchyAttributes}}),Object.defineProperty(exports,"getObjectSystemAttributes",{enumerable:!0,get:function(){return getObjectSystemAttributes}}),Object.defineProperty(exports,"getOperatorPolarity",{enumerable:!0,get:function(){return getOperatorPolarity}}),Object.defineProperty(exports,"getRollupFilterOperators",{enumerable:!0,get:function(){return getRollupFilterOperators}}),Object.defineProperty(exports,"getSystemAttributeI18nKey",{enumerable:!0,get:function(){return getSystemAttributeI18nKey}}),Object.defineProperty(exports,"getSystemAttributeList",{enumerable:!0,get:function(){return getSystemAttributeList}}),Object.defineProperty(exports,"gridPositionReadSchema",{enumerable:!0,get:function(){return sn}}),Object.defineProperty(exports,"gridPositionSchema",{enumerable:!0,get:function(){return cn}}),Object.defineProperty(exports,"groupSizeMessage",{enumerable:!0,get:function(){return groupSizeMessage}}),Object.defineProperty(exports,"groupedMembers",{enumerable:!0,get:function(){return groupedMembers}}),Object.defineProperty(exports,"hasTypeTrait",{enumerable:!0,get:function(){return hasTypeTrait}}),Object.defineProperty(exports,"hasValueKind",{enumerable:!0,get:function(){return hasValueKind}}),Object.defineProperty(exports,"iconNameSchema",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"inferInverseCardinality",{enumerable:!0,get:function(){return inferInverseCardinality}}),Object.defineProperty(exports,"input",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"invalidViewMessage",{enumerable:!0,get:function(){return invalidViewMessage}}),Object.defineProperty(exports,"isActionableDecisionKind",{enumerable:!0,get:function(){return isActionableDecisionKind}}),Object.defineProperty(exports,"isAttributeFilterable",{enumerable:!0,get:function(){return isAttributeFilterable}}),Object.defineProperty(exports,"isAttributeGroupable",{enumerable:!0,get:function(){return isAttributeGroupable}}),Object.defineProperty(exports,"isAttributeKanbanGroupable",{enumerable:!0,get:function(){return isAttributeKanbanGroupable}}),Object.defineProperty(exports,"isAttributeSearchable",{enumerable:!0,get:function(){return isAttributeSearchable}}),Object.defineProperty(exports,"isAttributeSortable",{enumerable:!0,get:function(){return isAttributeSortable}}),Object.defineProperty(exports,"isBilateralRelation",{enumerable:!0,get:function(){return isBilateralRelation}}),Object.defineProperty(exports,"isBoardGrouping",{enumerable:!0,get:function(){return isBoardGrouping}}),Object.defineProperty(exports,"isCalendarDay",{enumerable:!0,get:function(){return isCalendarDay}}),Object.defineProperty(exports,"isCollectionContent",{enumerable:!0,get:function(){return isCollectionContent}}),Object.defineProperty(exports,"isDynamicValue",{enumerable:!0,get:function(){return isDynamicValue}}),Object.defineProperty(exports,"isHierarchyAttribute",{enumerable:!0,get:function(){return isHierarchyAttribute}}),Object.defineProperty(exports,"isLocationFilterProperty",{enumerable:!0,get:function(){return isLocationFilterProperty}}),Object.defineProperty(exports,"isLocationPartOperator",{enumerable:!0,get:function(){return isLocationPartOperator}}),Object.defineProperty(exports,"isManagedSystemAttribute",{enumerable:!0,get:function(){return isManagedSystemAttribute}}),Object.defineProperty(exports,"isNativeObjectName",{enumerable:!0,get:function(){return isNativeObjectName}}),Object.defineProperty(exports,"isNoValueOperator",{enumerable:!0,get:function(){return isNoValueOperator}}),Object.defineProperty(exports,"isPlainRecord",{enumerable:!0,get:function(){return isPlainRecord}}),Object.defineProperty(exports,"isRelativeDateValue",{enumerable:!0,get:function(){return isRelativeDateValue}}),Object.defineProperty(exports,"isSetMembershipOperator",{enumerable:!0,get:function(){return isSetMembershipOperator}}),Object.defineProperty(exports,"isUniversalRelation",{enumerable:!0,get:function(){return isUniversalRelation}}),Object.defineProperty(exports,"isValueKindType",{enumerable:!0,get:function(){return isValueKindType}}),Object.defineProperty(exports,"isoDateTime",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"layoutTraitsOf",{enumerable:!0,get:function(){return layoutTraitsOf}}),Object.defineProperty(exports,"locationPartFilterTarget",{enumerable:!0,get:function(){return locationPartFilterTarget}}),Object.defineProperty(exports,"memberlessGroups",{enumerable:!0,get:function(){return memberlessGroups}}),Object.defineProperty(exports,"metricComparePeriod",{enumerable:!0,get:function(){return metricComparePeriod}}),Object.defineProperty(exports,"normalizeFilterRule",{enumerable:!0,get:function(){return normalizeFilterRule}}),Object.defineProperty(exports,"normalizeForEdgeRpc",{enumerable:!0,get:function(){return normalizeForEdgeRpc}}),Object.defineProperty(exports,"normalizeOperator",{enumerable:!0,get:function(){return normalizeOperator}}),Object.defineProperty(exports,"now",{enumerable:!0,get:function(){return now}}),Object.defineProperty(exports,"outputSchemaOf",{enumerable:!0,get:function(){return outputSchemaOf}}),Object.defineProperty(exports,"overlaps",{enumerable:!0,get:function(){return overlaps}}),Object.defineProperty(exports,"pageTraitsOf",{enumerable:!0,get:function(){return pageTraitsOf}}),Object.defineProperty(exports,"parseBlockParameters",{enumerable:!0,get:function(){return parseBlockParameters}}),Object.defineProperty(exports,"parseDecisionLink",{enumerable:!0,get:function(){return parseDecisionLink}}),Object.defineProperty(exports,"parseQualifiedAttribute",{enumerable:!0,get:function(){return parseQualifiedAttribute}}),Object.defineProperty(exports,"parseRecordListScope",{enumerable:!0,get:function(){return parseRecordListScope}}),Object.defineProperty(exports,"parseResourceVisibility",{enumerable:!0,get:function(){return parseResourceVisibility}}),Object.defineProperty(exports,"publishedViewContentDefinitionSchema",{enumerable:!0,get:function(){return an}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return query}}),Object.defineProperty(exports,"recordQueryDefinitionSchema",{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,"relationAcceptsObject",{enumerable:!0,get:function(){return relationAcceptsObject}}),Object.defineProperty(exports,"relationTargetsOf",{enumerable:!0,get:function(){return relationTargetsOf}}),Object.defineProperty(exports,"requireContentPlacement",{enumerable:!0,get:function(){return requireContentPlacement}}),Object.defineProperty(exports,"requireRecordContentContext",{enumerable:!0,get:function(){return requireRecordContentContext}}),Object.defineProperty(exports,"requireSingleRelationTarget",{enumerable:!0,get:function(){return requireSingleRelationTarget}}),Object.defineProperty(exports,"resolveCollectionActions",{enumerable:!0,get:function(){return resolveCollectionActions}}),Object.defineProperty(exports,"resolveContentNavigation",{enumerable:!0,get:function(){return resolveContentNavigation}}),Object.defineProperty(exports,"resolveEffectiveFilterType",{enumerable:!0,get:function(){return resolveEffectiveFilterType}}),Object.defineProperty(exports,"resolveIsWithinBounds",{enumerable:!0,get:function(){return resolveIsWithinBounds}}),Object.defineProperty(exports,"resolveUtcDayBounds",{enumerable:!0,get:function(){return resolveUtcDayBounds}}),Object.defineProperty(exports,"singleRelationTarget",{enumerable:!0,get:function(){return singleRelationTarget}}),Object.defineProperty(exports,"sortsSchema",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"sourcedAttributeOf",{enumerable:!0,get:function(){return sourcedAttributeOf}}),Object.defineProperty(exports,"systemColumnFilterTarget",{enumerable:!0,get:function(){return systemColumnFilterTarget}}),Object.defineProperty(exports,"toMultiValueOperator",{enumerable:!0,get:function(){return toMultiValueOperator}}),Object.defineProperty(exports,"toUtcDayString",{enumerable:!0,get:function(){return toUtcDayString}}),Object.defineProperty(exports,"today",{enumerable:!0,get:function(){return today}}),Object.defineProperty(exports,"unchecked",{enumerable:!0,get:function(){return unchecked}}),Object.defineProperty(exports,"validateAttributeName",{enumerable:!0,get:function(){return validateAttributeName}}),Object.defineProperty(exports,"validateContentViewCatalogue",{enumerable:!0,get:function(){return validateContentViewCatalogue}}),Object.defineProperty(exports,"validateIconName",{enumerable:!0,get:function(){return validateIconName}}),Object.defineProperty(exports,"validateLabel",{enumerable:!0,get:function(){return validateLabel}}),Object.defineProperty(exports,"validateObjectName",{enumerable:!0,get:function(){return validateObjectName}}),Object.defineProperty(exports,"validateOptions",{enumerable:!0,get:function(){return validateOptions}}),Object.defineProperty(exports,"validateQualifiedRule",{enumerable:!0,get:function(){return validateQualifiedRule}}),Object.defineProperty(exports,"validateStoredViews",{enumerable:!0,get:function(){return validateStoredViews}}),Object.defineProperty(exports,"validateViewName",{enumerable:!0,get:function(){return validateViewName}});
|
|
@@ -96,6 +96,11 @@ export declare const SchemaErrorCode: {
|
|
|
96
96
|
readonly CONNECTOR_API_FAILED: "SCHEMA_CONNECTOR_API_FAILED";
|
|
97
97
|
readonly CONNECTOR_AUTH_FAILED: "SCHEMA_CONNECTOR_AUTH_FAILED";
|
|
98
98
|
readonly CONNECTOR_INVALID_STATE: "SCHEMA_CONNECTOR_INVALID_STATE";
|
|
99
|
+
/**
|
|
100
|
+
* A reconnect came back signed in with another account than the connection
|
|
101
|
+
* it targets: nothing is stored, the person signs in with the right one.
|
|
102
|
+
*/
|
|
103
|
+
readonly CONNECTOR_ACCOUNT_MISMATCH: "SCHEMA_CONNECTOR_ACCOUNT_MISMATCH";
|
|
99
104
|
/**
|
|
100
105
|
* The provider issued tokens and the flow failed AFTER that — resolving the
|
|
101
106
|
* connected address. Distinct from CONNECTOR_AUTH_FAILED because the user is
|
|
@@ -116,6 +121,7 @@ export declare const SchemaErrorCode: {
|
|
|
116
121
|
readonly SYNC_CASCADE: "SCHEMA_SYNC_CASCADE";
|
|
117
122
|
readonly ORPHAN_SYSTEM_ATTRIBUTE: "SCHEMA_ORPHAN_SYSTEM_ATTRIBUTE";
|
|
118
123
|
readonly MIGRATIONS_PENDING: "SCHEMA_MIGRATIONS_PENDING";
|
|
124
|
+
readonly BUILD_MISMATCH: "SCHEMA_BUILD_MISMATCH";
|
|
119
125
|
readonly SYSTEM_ENTITY_IMMUTABLE: "SCHEMA_SYSTEM_ENTITY_IMMUTABLE";
|
|
120
126
|
readonly AMBIGUOUS_CHANGE: "SCHEMA_AMBIGUOUS_CHANGE";
|
|
121
127
|
readonly RECORD_GRANT_ON_WORKSPACE: "RECORD_GRANT_ON_WORKSPACE";
|
|
@@ -284,6 +290,8 @@ export declare const SchemaErrorCode: {
|
|
|
284
290
|
readonly EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED";
|
|
285
291
|
readonly EMAIL_SEND_FAILED: "EMAIL_SEND_FAILED";
|
|
286
292
|
readonly EMAIL_SENT_NOT_STORED: "EMAIL_SENT_NOT_STORED";
|
|
293
|
+
/** The mailbox's grant does not cover sending: nothing left, the owner reconnects it. */
|
|
294
|
+
readonly EMAIL_SEND_NOT_GRANTED: "EMAIL_SEND_NOT_GRANTED";
|
|
287
295
|
readonly EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED";
|
|
288
296
|
/** A read or write a mailbox-scoped EmailService cannot narrow to its granted mailboxes: refused rather than served tenant-wide. */
|
|
289
297
|
readonly EMAIL_SCOPE_UNSUPPORTED: "EMAIL_SCOPE_UNSUPPORTED";
|
|
@@ -95,6 +95,11 @@ export declare const SchemaErrorCode: {
|
|
|
95
95
|
readonly CONNECTOR_API_FAILED: "SCHEMA_CONNECTOR_API_FAILED";
|
|
96
96
|
readonly CONNECTOR_AUTH_FAILED: "SCHEMA_CONNECTOR_AUTH_FAILED";
|
|
97
97
|
readonly CONNECTOR_INVALID_STATE: "SCHEMA_CONNECTOR_INVALID_STATE";
|
|
98
|
+
/**
|
|
99
|
+
* A reconnect came back signed in with another account than the connection
|
|
100
|
+
* it targets: nothing is stored, the person signs in with the right one.
|
|
101
|
+
*/
|
|
102
|
+
readonly CONNECTOR_ACCOUNT_MISMATCH: "SCHEMA_CONNECTOR_ACCOUNT_MISMATCH";
|
|
98
103
|
/**
|
|
99
104
|
* The provider issued tokens and the flow failed AFTER that — resolving the
|
|
100
105
|
* connected address. Distinct from CONNECTOR_AUTH_FAILED because the user is
|
|
@@ -115,6 +120,7 @@ export declare const SchemaErrorCode: {
|
|
|
115
120
|
readonly SYNC_CASCADE: "SCHEMA_SYNC_CASCADE";
|
|
116
121
|
readonly ORPHAN_SYSTEM_ATTRIBUTE: "SCHEMA_ORPHAN_SYSTEM_ATTRIBUTE";
|
|
117
122
|
readonly MIGRATIONS_PENDING: "SCHEMA_MIGRATIONS_PENDING";
|
|
123
|
+
readonly BUILD_MISMATCH: "SCHEMA_BUILD_MISMATCH";
|
|
118
124
|
readonly SYSTEM_ENTITY_IMMUTABLE: "SCHEMA_SYSTEM_ENTITY_IMMUTABLE";
|
|
119
125
|
readonly AMBIGUOUS_CHANGE: "SCHEMA_AMBIGUOUS_CHANGE";
|
|
120
126
|
readonly RECORD_GRANT_ON_WORKSPACE: "RECORD_GRANT_ON_WORKSPACE";
|
|
@@ -283,6 +289,8 @@ export declare const SchemaErrorCode: {
|
|
|
283
289
|
readonly EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED";
|
|
284
290
|
readonly EMAIL_SEND_FAILED: "EMAIL_SEND_FAILED";
|
|
285
291
|
readonly EMAIL_SENT_NOT_STORED: "EMAIL_SENT_NOT_STORED";
|
|
292
|
+
/** The mailbox's grant does not cover sending: nothing left, the owner reconnects it. */
|
|
293
|
+
readonly EMAIL_SEND_NOT_GRANTED: "EMAIL_SEND_NOT_GRANTED";
|
|
286
294
|
readonly EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED";
|
|
287
295
|
/** A read or write a mailbox-scoped EmailService cannot narrow to its granted mailboxes: refused rather than served tenant-wide. */
|
|
288
296
|
readonly EMAIL_SCOPE_UNSUPPORTED: "EMAIL_SCOPE_UNSUPPORTED";
|
package/dist/exceptions.d.mts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
import { AccessDeniedError, AggregateErrorCode, AggregateValidationError, AmbiguousSchemaChangeError, AttributeInUseError, AttributeNotFoundError, AttributeRetypeRefusal, AttributeUsage, ConcurrentModificationError, DuplicateError, ExportTooLargeError, ForbiddenError, InvalidPermissionGrantError, LogoProviderUnavailableError, LogoSearchRateLimitedError, MemoryNotFoundError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, PageReference, PageReferencedError, ProtectedResourceError, ProtectedRoleError, QueryTimeoutError, RealtimeDeliveryError, RealtimeRateLimitedError, RealtimeSubscriptionError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, ReservedObjectNameError, RetypeRefuseReason, RoleNotFoundError, SCHEMA_ERROR_HTTP_STATUS, SchemaError, SchemaErrorCode, SchemaErrorJson, SearchBackendError, SearchBackendErrorOptions, SearchBackendFailureKind, SearchPathNotIndexedError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ToolGroupGrantError, ToolGroupGrantErrorCode, ValidationError, ValidationErrorDetail, WorkspaceInvariantReason, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from "./exceptions-
|
|
2
|
+
import { AccessDeniedError, AggregateErrorCode, AggregateValidationError, AmbiguousSchemaChangeError, AttributeInUseError, AttributeNotFoundError, AttributeRetypeRefusal, AttributeUsage, ConcurrentModificationError, DuplicateError, ExportTooLargeError, ForbiddenError, InvalidPermissionGrantError, LogoProviderUnavailableError, LogoSearchRateLimitedError, MemoryNotFoundError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, PageReference, PageReferencedError, ProtectedResourceError, ProtectedRoleError, QueryTimeoutError, RealtimeDeliveryError, RealtimeRateLimitedError, RealtimeSubscriptionError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, ReservedObjectNameError, RetypeRefuseReason, RoleNotFoundError, SCHEMA_ERROR_HTTP_STATUS, SchemaError, SchemaErrorCode, SchemaErrorJson, SearchBackendError, SearchBackendErrorOptions, SearchBackendFailureKind, SearchPathNotIndexedError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ToolGroupGrantError, ToolGroupGrantErrorCode, ValidationError, ValidationErrorDetail, WorkspaceInvariantReason, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from "./exceptions-zQlC2r1F.mjs";
|
|
3
3
|
export { AccessDeniedError, AggregateErrorCode, AggregateValidationError, AmbiguousSchemaChangeError, AttributeInUseError, AttributeNotFoundError, AttributeRetypeRefusal, AttributeUsage, ConcurrentModificationError, DuplicateError, ExportTooLargeError, ForbiddenError, InvalidPermissionGrantError, LogoProviderUnavailableError, LogoSearchRateLimitedError, MemoryNotFoundError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, PageReference, PageReferencedError, ProtectedResourceError, ProtectedRoleError, QueryTimeoutError, RealtimeDeliveryError, RealtimeRateLimitedError, RealtimeSubscriptionError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, ReservedObjectNameError, RetypeRefuseReason, RoleNotFoundError, SCHEMA_ERROR_HTTP_STATUS, SchemaError, SchemaErrorCode, SchemaErrorJson, SearchBackendError, SearchBackendErrorOptions, SearchBackendFailureKind, SearchPathNotIndexedError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ToolGroupGrantError, ToolGroupGrantErrorCode, ValidationError, ValidationErrorDetail, WorkspaceInvariantReason, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError };
|
package/dist/exceptions.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
import { AccessDeniedError, AggregateErrorCode, AggregateValidationError, AmbiguousSchemaChangeError, AttributeInUseError, AttributeNotFoundError, AttributeRetypeRefusal, AttributeUsage, ConcurrentModificationError, DuplicateError, ExportTooLargeError, ForbiddenError, InvalidPermissionGrantError, LogoProviderUnavailableError, LogoSearchRateLimitedError, MemoryNotFoundError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, PageReference, PageReferencedError, ProtectedResourceError, ProtectedRoleError, QueryTimeoutError, RealtimeDeliveryError, RealtimeRateLimitedError, RealtimeSubscriptionError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, ReservedObjectNameError, RetypeRefuseReason, RoleNotFoundError, SCHEMA_ERROR_HTTP_STATUS, SchemaError, SchemaErrorCode, SchemaErrorJson, SearchBackendError, SearchBackendErrorOptions, SearchBackendFailureKind, SearchPathNotIndexedError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ToolGroupGrantError, ToolGroupGrantErrorCode, ValidationError, ValidationErrorDetail, WorkspaceInvariantReason, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from "./exceptions-
|
|
2
|
+
import { AccessDeniedError, AggregateErrorCode, AggregateValidationError, AmbiguousSchemaChangeError, AttributeInUseError, AttributeNotFoundError, AttributeRetypeRefusal, AttributeUsage, ConcurrentModificationError, DuplicateError, ExportTooLargeError, ForbiddenError, InvalidPermissionGrantError, LogoProviderUnavailableError, LogoSearchRateLimitedError, MemoryNotFoundError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, PageReference, PageReferencedError, ProtectedResourceError, ProtectedRoleError, QueryTimeoutError, RealtimeDeliveryError, RealtimeRateLimitedError, RealtimeSubscriptionError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, ReservedObjectNameError, RetypeRefuseReason, RoleNotFoundError, SCHEMA_ERROR_HTTP_STATUS, SchemaError, SchemaErrorCode, SchemaErrorJson, SearchBackendError, SearchBackendErrorOptions, SearchBackendFailureKind, SearchPathNotIndexedError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ToolGroupGrantError, ToolGroupGrantErrorCode, ValidationError, ValidationErrorDetail, WorkspaceInvariantReason, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from "./exceptions-YHdKk5N8.js";
|
|
3
3
|
export { AccessDeniedError, AggregateErrorCode, AggregateValidationError, AmbiguousSchemaChangeError, AttributeInUseError, AttributeNotFoundError, AttributeRetypeRefusal, AttributeUsage, ConcurrentModificationError, DuplicateError, ExportTooLargeError, ForbiddenError, InvalidPermissionGrantError, LogoProviderUnavailableError, LogoSearchRateLimitedError, MemoryNotFoundError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, PageReference, PageReferencedError, ProtectedResourceError, ProtectedRoleError, QueryTimeoutError, RealtimeDeliveryError, RealtimeRateLimitedError, RealtimeSubscriptionError, RecordNotFoundError, RecordReference, RecordReferencedError, RepositoryError, RepositoryOperation, ReservedObjectNameError, RetypeRefuseReason, RoleNotFoundError, SCHEMA_ERROR_HTTP_STATUS, SchemaError, SchemaErrorCode, SchemaErrorJson, SearchBackendError, SearchBackendErrorOptions, SearchBackendFailureKind, SearchPathNotIndexedError, StorageError, StorageOperation, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ToolGroupGrantError, ToolGroupGrantErrorCode, ValidationError, ValidationErrorDetail, WorkspaceInvariantReason, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError };
|