Skip to content

fix(types): ObjectCalendarSchema declares the record-source ladder its renderer reads (objectui#7313) - #7777

Merged
os-justin merged 4 commits into
mainfrom
claude/issue-7313-object-calendar-record-source
Sep 5, 2026
Merged

fix(types): ObjectCalendarSchema declares the record-source ladder its renderer reads (objectui#7313)#7777
os-justin merged 4 commits into
mainfrom
claude/issue-7313-object-calendar-record-source

Conversation

@os-justin

Copy link
Copy Markdown
Collaborator

Fixes #7313

Tier CONTRACT_REVIEW_TIER (a published validator's accept set moves — clause 2 yes): the seat reviews at tier; left as draft. Session: https://claude.ai/code/session_01BAZFhALsQsGqxui8sNqM8s. Generic type parameters and placeholders below are spelled as words (the GitHub body sanitizer eats angle-bracket shapes).

What moved

ObjectCalendar resolves its records through the shared ladder resolveRecordSourceConfig(schema) in @object-ui/core (packages/core/src/utils/record-source.ts, lines 146-171: data at 151, staticData at 155, objectName at 162, null otherwise), called from packages/plugin-calendar/src/ObjectCalendar.tsx:242 with the memo keyed on the three. The published interface REQUIRED objectName and declared neither data nor staticData; the mirror did the same. Landed in the shape objectui#6939 gave object-map / object-gantt (PR #7471, 77cb489b):

  1. TS face (packages/types/src/objectql.ts, the ObjectCalendarSchema block only): objectName?: string with the gantt docblock (identifiers substituted, see deviations); data?: ViewData and staticData?: any[] with the gantt docblocks copied. Every other member and docblock untouched.
  2. zod face (packages/types/src/zod/objectql.zod.ts): requireRecordSource's type parameter widened to 'object-calendar' (its body does not branch on the type); the const declares objectName optional, data as ViewDataSchema.optional() and staticData as z.array(z.any()).optional() — spelled as the gantt const spells them — and ends in .superRefine(requireRecordSource('object-calendar')).
  3. Docs (content/docs/plugins/plugin-calendar.mdx): the two bare object-calendar blocks — "With Static Data" and "Value Provider (Static)" — annotated ObjectCalendarSchema with the type import in the neighbouring blocks' style. No prose rewrite.
  4. Pin packages/types/src/__tests__/object-calendar-record-source-7313.test.ts (15 tests): type-level Equal / IsOptionalKey pins on the three keys and parity with the gantt's types; the two documents as compile-time annotations; the four-document verdict table through safeParse and safeValidateSchema with the refusal message asserted verbatim; verdict-for-verdict parity with ObjectGanttSchema with a non-vacuity assertion on the vector; a BaseSchema control (accepts all four); data / staticData refused AT the key with the base as control; .shape still exposed; the renderer read and the ladder order off disk; the two doc annotations off disk; a ts-expect-error control that ObjectKanbanSchema still requires objectName.
  5. Changeset .changeset/7313-object-calendar-record-source.md: @object-ui/types: minor.

Verdict table (measured, pristine dist at 91f92768 for BEFORE; rebuilt dist for AFTER)

document calendar BEFORE calendar AFTER ObjectGanttSchema (before and after)
staticData only refused at objectName (invalid_type) accepted accepted
data only ({ provider: 'value', items }) refused at objectName (invalid_type) accepted accepted
none of the three refused at objectName (invalid_type) refused: one root-level issue, params.code = RECORD_SOURCE_REQUIRED, message object-calendar has no record source: declare one of data, staticData or objectName refused, same issue with object-gantt
objectName only accepted accepted accepted

Same verdicts through safeValidateSchema (pinned). objectName: '' still parses (presence is !== undefined), so the accept set only widens. BaseSchema accepts all four (control).

Kanban reading (triage boundary 3 — measured only, NOT edited; objectui#7322 holds the block)

ObjectKanbanSchema carries the same defect class, in a different ladder shape. packages/plugin-kanban/src/ObjectKanban.tsx:283 gates the fetch on schema.objectName && !boundData && !schema.data and :294 reads rawData = external || boundData || schema.data || fetchedDatadata is read ahead of the fetch and is UNDECLARED on ObjectKanbanSchema (it is an inline any[] on this schema, not ViewData; falls on the index signature / passthrough), while objectName: string is REQUIRED on both faces and every read of it is guarded (:185 ?? '', :205, :247, :283, :601, :630, :723, :768, :976). No staticData rung. The plugin's own KanbanSchema (packages/plugin-kanban/src/types.ts:89) already spells objectName?: string and data?: any[]. The ladder is external, bind, data, fetch, so a card for it is not a copy of this one. Left to the seat to file.

Ablation (red-first, both faces reverted to 4dfdcc3c, trap-restored, blob-hash proven)

Mutation: git checkout 4dfdcc3c -- objectql.ts objectql.zod.ts; on-disk proof: marker count 0 in the zod source, objectName: string; back in the calendar block, staticData count 0 in it; blobs 2714449… / b20e082… differ from HEAD's 19b4419… / f0e00a9…. Rebuilt; dist marker count 0 (absent preflight). Results: vitest 9 failed / 6 passed of 15 (the four-document, parity and declared-key groups red; the off-disk reads green as expected); type-check 10 errors — 8 x TS2344 on the Equal / IsOptionalKey pins, 2 x TS2741 on the two document annotations; the narrowed doc compile 2 x TS2741 (Property 'objectName' is missing) on both annotated blocks. The kanban ts-expect-error control stayed satisfied (no TS2578) in both states. Restore: git checkout HEAD -- both, blobs equal HEAD's, git diff HEAD empty, git status --porcelain empty; rebuilt, dist marker count 1, 15/15 green.

Gates on the merged head c458bfe3 (exit codes captured before any pipe)

  • pnpm exec turbo run build --filter="@object-ui/plugin-calendar^..." --filter="@object-ui/types" --concurrency=2 — 13/13 successful, exit 0 (under the shared verify lock)
  • pnpm exec vitest run --maxWorkers=2 packages/types/ — Test Files 125 passed (125), Tests 2209 passed (2209), exit 0; the new file alone: 15 passed (15) (verbose reporter)
  • pnpm --filter @object-ui/types type-check — exit 0, 0 error TS (script name echoed; tsconfig.test.json compiles the new test)
  • pnpm --filter @object-ui/plugin-calendar type-check — exit 0, 0 errors, against the rebuilt dist (read-only package; nothing changed there)
  • pnpm --filter @object-ui/types lint — exit 0, 0 errors; 272 warnings vs 270 before: the two new ones are no-explicit-any on staticData?: any[] (objectql.ts:2700, the rule the gantt/map lines 2277 / 2662 already carry) and the test's any[] pin
  • node scripts/check-changeset-presence.mjs / -fixed / -no-major / -overwrite — all exit 0
  • node scripts/check-control-bytes.mjs — exit 0; pnpm check:doc-fences — exit 0; node scripts/check-doc-links.mjs — exit 0; pnpm check:spec-symbols — exit 0; pnpm check:doc-types — exit 0
  • pnpm check:doc-snippets — NOT MEASURED locally: its --build-filter closure is 26 packages plus dependencies (app-shell, components and the rest), too heavy for the shared box. Substitute: the two annotated blocks extracted verbatim and compiled tsc --strict --noEmit (moduleResolution Bundler) with @object-ui/types mapped to the rebuilt packages/types/dist/index.d.ts (resolution self-check printed that path): 0 diagnostics; a control block with staticData: 'nope' refused with TS2322. CI's Doc Snippet Type Check is the measurement.
  • Governed-surface predicate (check-governed-merges.mjs --test on the final five paths) — 0 of 5 governed
  • zod-mirror-parity.test.ts — green with no ledger row: both faces moved together

Deviations and notes for the reviewer

Out of scope

🤖 Generated with Claude Code

https://claude.ai/code/session_01BAZFhALsQsGqxui8sNqM8s


Generated by Claude Code

…s renderer reads (objectui#7313)

ObjectCalendar resolves its records through the shared ladder in @object-ui/core
(resolveRecordSourceConfig: data, then staticData, then objectName), yet the
published interface REQUIRED objectName and declared neither data nor staticData;
the zod mirror did the same. A node authored on staticData — the route the plugin
page documents twice — rendered correctly, was refused by safeValidateSchema, and
could not be annotated with its own type (TS2741).

Landed in the shape objectui#6939 gave object-map / object-gantt:

- TS face: objectName optional with the gantt docblock (identifiers substituted);
  data (ViewData) and staticData (any[]) declared with the gantt docblocks copied.
- zod face: requireRecordSource widened to object-calendar; the member declares
  data / staticData exactly as ObjectGanttSchema spells them and ends in
  .superRefine(requireRecordSource('object-calendar')).
- Docs: the two static-data blocks on plugin-calendar.mdx are annotated
  ObjectCalendarSchema and compile against the built dist.
- Pin: object-calendar-record-source-7313.test.ts — type-level optionality and
  Equal pins on both faces, the four-document verdict table on safeParse and
  safeValidateSchema, verdict-for-verdict parity with ObjectGanttSchema with a
  non-vacuity assertion, a BaseSchema control, the renderer read set off disk,
  the doc annotations, and a ts-expect-error control that ObjectKanbanSchema
  still requires objectName (the class boundary, untouched).
- Changeset: @object-ui/types minor — a widening toward what already renders.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BAZFhALsQsGqxui8sNqM8s
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3187.1 KB 3191.4 KB
Main entry chunk (gzip) 143.2 KB 350 KB
Entry file index-DSHLSehx.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 510.60KB 116.20KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 182.08KB 50.62KB
fields (index.js) 242.44KB 61.25KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.98KB 10.98KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 47.87KB 13.31KB
plugin-charts (index.js) 70.92KB 19.75KB
plugin-chatbot (index.js) 196.19KB 46.37KB
plugin-dashboard (index.js) 132.88KB 34.69KB
plugin-designer (index.js) 212.86KB 43.19KB
plugin-detail (index.js) 250.55KB 64.06KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 132.87KB 32.66KB
plugin-gantt (index.js) 167.26KB 41.00KB
plugin-grid (index.js) 209.29KB 56.78KB
plugin-kanban (index.js) 52.71KB 14.55KB
plugin-list (index.js) 113.28KB 27.59KB
plugin-map (index.js) 20.44KB 6.78KB
plugin-markdown (index.js) 13.93KB 4.81KB
plugin-report (index.js) 43.59KB 11.97KB
plugin-timeline (index.js) 30.84KB 8.85KB
plugin-tree (index.js) 9.20KB 3.19KB
plugin-view (index.js) 85.24KB 20.94KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 5.41KB 2.34KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 4.93KB 2.24KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 10.35KB 3.60KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

… objectui#7322 landed

objectui#7322 (PR #7774, 669d71b) made groupBy the required lane key on
ObjectKanbanSchema and retired groupField as a never-typed tombstone. The
ts-expect-error control in object-calendar-record-source-7313.test.ts wrote
groupField: 'status', so after the merge the literal would miss two members and
carry a tombstone violation — the directive would be satisfied by omissions
unrelated to objectName and stop saying anything about it. It now supplies
groupBy so objectName is again the one member the literal is missing.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BAZFhALsQsGqxui8sNqM8s

Copy link
Copy Markdown
Collaborator Author

Merge round after PR #7774 (objectui#7322) landed: new head d130a4f71e1e37d6283647e6229edaa5bd7a04a5 (d130a4f7).

  • origin/main 669d71bf merged as b1e9592d — clean, no conflict markers (git's three-way merge kept the adjacent hunks apart); never rebased.
  • Contract-file delta c458bfe3..d130a4f7 on objectql.ts / objectql.zod.ts compared against 16a725f9..669d71bf on the same two files: identical hunk bodies, only the hunk offsets differ (the calendar block sits above the kanban block: +25 / +16 lines). The calendar block, the requireRecordSource('object-calendar') superRefine and the retirementTombstone import are all present; the kanban block's content is main's, untouched.
  • One follow-on commit in my own pin, d130a4f7 test(types): the kanban class-boundary control supplies groupBy after objectui#7322 landed: the kanban block now REQUIRES groupBy and types groupField as a never-tombstone, so the ts-expect-error control literal (groupField: 'status') would have been missing two members plus a tombstone violation and stopped discriminating on objectName. It now supplies groupBy: 'status', so objectName is again the one member missing. No other file changed; the PR file list is still the same five paths.

Gates on the merged tree (bytes identical to d130a4f7; exit codes captured before any pipe; heavy runs under the shared verify lock):

  • pnpm exec turbo run build --filter="@object-ui/plugin-calendar^..." --filter="@object-ui/types" --concurrency=2 — exit 0, Tasks 13 successful, 13 total
  • pnpm exec vitest run --maxWorkers=2 packages/types/ — exit 0, Test Files 126 passed (126), Tests 2238 passed (2238)
  • pnpm --filter @object-ui/types type-check — exit 0, 0 error TS (script echoed; the updated control compiles under tsconfig.test.json)
  • pnpm --filter @object-ui/plugin-calendar type-check — exit 0, 0 error TS (read-only package, against the rebuilt dist; script echoed)
  • pnpm --filter @object-ui/types lint — exit 0, 0 errors (272 warnings, unchanged from the previous head)
  • node scripts/check-changeset-presence.mjs / check-changeset-fixed.mjs / check-changeset-no-major.mjs / check-changeset-overwrite.mjs — exit 0 each
  • node scripts/check-control-bytes.mjs — exit 0 (6341 tracked text files); pnpm check:spec-symbols — exit 0; pnpm check:doc-fences — exit 0; node scripts/check-doc-links.mjs — exit 0; pnpm check:doc-types — exit 0
  • governed-surface predicate on the five paths — 0 of 5 governed, exit 0
  • narrowed doc-snippet substitute (the two annotated blocks, tsc --strict against the rebuilt dist/index.d.ts) — exit 0, 0 diagnostics; control block still refused with TS2322. pnpm check:doc-snippets itself remains NOT MEASURED locally; CI's Doc Snippet Type Check is the measurement.
  • dist proof: dist/zod/objectql.zod.js carries requireRecordSource('object-calendar') once.

Left as draft with needs:contract-review for the seat to clear.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

needs:contract-review cleared (2026-09-05T17:33Z) — provenance: in-seat contract review at tier PASSED on head c458bfe3 (objectui#7313 comment 5553491248) and the delta to the merged head d130a4f7 PASSED (objectui#7313 comment 5553558086: the two contract files' delta is byte-identical to PR #7774's kanban block; the one pin change re-points the class-boundary control at objectName). Cleared by the domain:spec execution seat, session session_01BAZFhALsQsGqxui8sNqM8s, via read-current → write-union-minus-target → read-back (read-back at 17:34Z: package: types, tests; the carrier absent; head d130a4f7). The flip waits for every check run on d130a4f7 to complete green (farm started 17:30Z; re-check armed). If this head moves, the label is re-hung and the delta re-reviewed before any flip.


Generated by Claude Code

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3187.4 KB 3191.4 KB
Main entry chunk (gzip) 143.2 KB 350 KB
Entry file index-CnaboxA9.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 510.60KB 116.20KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 182.08KB 50.62KB
fields (index.js) 242.44KB 61.25KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.98KB 10.98KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 47.87KB 13.31KB
plugin-charts (index.js) 70.92KB 19.75KB
plugin-chatbot (index.js) 196.19KB 46.37KB
plugin-dashboard (index.js) 132.88KB 34.69KB
plugin-designer (index.js) 212.86KB 43.19KB
plugin-detail (index.js) 250.55KB 64.06KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 132.87KB 32.66KB
plugin-gantt (index.js) 167.26KB 41.00KB
plugin-grid (index.js) 209.29KB 56.78KB
plugin-kanban (index.js) 52.71KB 14.55KB
plugin-list (index.js) 113.28KB 27.59KB
plugin-map (index.js) 20.44KB 6.78KB
plugin-markdown (index.js) 13.93KB 4.81KB
plugin-report (index.js) 43.59KB 11.97KB
plugin-timeline (index.js) 30.84KB 8.85KB
plugin-tree (index.js) 9.20KB 3.19KB
plugin-view (index.js) 85.24KB 20.94KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 5.41KB 2.34KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 4.93KB 2.24KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 10.35KB 3.60KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants