Skip to content

Mint the neutral box container and retire JSON-authored div from the schema catalog - #6878

Merged
os-sam merged 5 commits into
mainfrom
claude/issue-3965-mint-box-retire-div
Aug 30, 2026
Merged

os-sam merged 5 commits into
mainfrom
claude/issue-3965-mint-box-retire-div

Conversation

@claude

@claude claude Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Fixes #3965

Executes the 2026-08-29T14:52 maintainer ruling (方案 A, verbatim 「同意」) — mint a neutral box type, migrate the catalog off JSON-authored div, close the #6732 ratchet — and no earlier superseded ruling. Base: origin/main @ 2c1c967.

Re-derived counts, both units, with the control (measured on 2c1c967)

query (structural walk, not text grep) files nodes
"type": "div" under examples/schema-catalog/src/schemas 27 85
positive control, identical query shape: "type": "card" 53 93

The control's 93 nodes / 53 files matches every prior reading (08-10, 08-18, 08-28, 08-29), so the population is a measurement, not a broken pattern. The card's original "48" was a FILE count; both units are stated everywhere below. Union of keys across all 85 div nodes: type, className, children, body — re-verified structurally; exactly 4 nodes author body (all of components-basic-sidebar, at path .body[1].body[0]).

⚠️ Not claimed as motivation: the card's "one deprecation warning per thumbnail" symptom was already false before this PR — #3998 made the notice once-per-module-load and #4000 scoped it by provenance. What this PR closes is the authoring-contract cost: catalog exemplars teaching a deprecated type to the corpus AI generation copies from.

1. Mint (ruling point 1) — landed as one stroke

The three ruled contract clauses are pinned in packages/components/src/renderers/__tests__/box-neutral-container.test.tsx: renders children; authored className emitted verbatim (string equality on the DOM class attribute, not containment); zero injected classes (the no-className arm asserts no class attribute at all). A fourth pin makes the sharp edge deliberate: box reads children ONLY — never body — with a div control render proving the fixture shape is renderable and the difference is the read, not a broken fixture.

Zod runtime reverse-verification against the rebuilt dist: admits a well-formed box node; refuses type: 'div' against BoxSchema and a non-string className (path ["className"]); LayoutSchema union admits box.

2. Migration (ruling point 2) — 25 files / 80 nodes; 2 files / 5 nodes stay under a standing exemption

Mechanical retype "type": "div" → "type": "box" across 25 files / 80 nodes. The 4 body-authoring sidebar nodes moved their content into children in the same stroke (the #6771 B-ruling direction) — each a 2-line diff, formatting preserved.

Zero render difference, verified by the ruled per-fixture method (element count + text content dual assertion, through the real SchemaRenderer, per fixture, before vs after): a temporary vitest harness rendered each of the 25 pre-migration snapshots and its migrated counterpart — 26/26 assertions green: 25/25 pairs equal on BOTH element count and text content, and the 4 body-moved fixtures additionally pinned their "Main content area" sentinel on the page after migration (the exact content the superseded rulings would have silently dropped at an unchanged element count). The harness was deleted after the measurement; log excerpt below.

Deviation from the ruling's literal figure, called out rather than silently chosen: the ruling says "27 文件 / 85 节点". This PR migrates 25 / 80 and leaves components-basic-div/ (custom-card.json, nested-divs.json — 2 files / 5 nodes) authoring div, per the standing 2026-08-09 exemption ("div.mdx 的 2 个刻意 legacy 示例在任何选项下永久豁免", recorded on PR #3998 and carried by #6732's gate): that category IS the documentation of the deprecated type — its fixtures render the Legacy Examples on div.mdx — and retyping them to box would make the deprecated component's own docs page demonstrate the wrong component. The governing ruling explicitly superseded two named rulings and did not name this exemption; I read the gross 27/85 as the population figure (with its own "recount on the day's ref" caveat) rather than as a revocation. Flagged in the report's open questions; converting those 2 files is a 5-minute follow-up if the maintainer rules the exemption dead — and their guidance-staleness is filed as #6877 either way.

3. Ratchet close-out (ruling point 3)

examples/schema-catalog/test/deprecated-component-types.test.ts drops the frozen-stock BASELINE machinery and now refuses ANY JSON-authored div or span outside the documentation exemption — zero tolerance, both types. Kept: the premise arm (deprecation still declared, asked of the registry), the omission arm (a third deprecated type cannot go unguarded), the exemption non-vacuity pin (exactly 2 files / 5 nodes), the counter-probe.

Red-arm proof on unfixed fixtures (each mutation confirmed on disk by anchored grep counts before reading any result; restores pinned to HEAD and proven — probe file absent / git diff HEAD empty + HEAD-blob hash equality, empty hash treated as failure):

  • new fixture authoring 1 div + 1 span outside the exemption → gate exit 1, offender named with both types;
  • exempt category grown 5 → 6 nodes → gate exit 1, "expected 6 to be 5".

4. box joins both DOM-leak instruments as a converged renderer

  • layout-dom-leak-5574 census: box: 84 rendered / 0 noElement (the migrated 80 + 4 exemplar nodes — every node proves it renders its element and leaks nothing); text 699 → 702 (the exemplars author 3 text nodes).
  • widget-dom-leak-sweep (packages/app-shell): ui:box added to COMPONENTS_PLAIN_TYPES; it sweeps clean with no ledger entry — unlike its predecessor div, which sits in the BARE_SPREAD ledger row. ⚠️ This file is outside the claim's declared surface; the edit was mechanically forced by the sweep's own parity arm ("every widget it registers is swept — a new one cannot slip past" fails on any new ui:* registration). Declared here and in the report as the same-round file-face amendment.

Verification at final HEAD 1bcb1f7 (all exits captured before any pipe; gate-printed verdict lines quoted)

  • Suites: pnpm exec vitest run examples/schema-catalog/ packages/types/ packages/app-shell/src/__tests__/widget-dom-leak-sweep.test.tsx — "Test Files 92 passed (92)", "Tests 2952 passed (2952)". pnpm exec vitest run packages/components/ — "Test Files 217 passed (217)", "Tests 1999 passed (1999)". Lock verdicts "command-exit 0".
  • Type-checks (script name echoed for each): @object-ui/types, @object-ui/components, @object-ui/app-shell, @object-ui/example-schema-catalog — exit 0, zero "error TS" lines; tsc -p tsconfig.test.json --listFiles confirms the new/edited test files are inside their programs (1 hit each — not silently excluded).
  • Gates, each with its own verdict: check:doc-types "Every documented component type is registered"; check:doc-snippets OK after building its declared closure (first run was exit 2 "PRECONDITION NOT MET" — treated as not-measured, built, re-run); check:doc-fences OK (the new page is ts-fenced; the plaintext form was rejected by the ratchet and fixed); check:docs-route-closure, check:sdui-registration-pins "All 14 registration(s) … present" (console built first), check:eager-closure "chunk ui-components 386.1 KB / 389.6 KB ceiling", check:side-effects-array, check:control-bytes "OK (scanned 5732 tracked text files)", check:spec-symbols, check:phantom-deps, check:self-import, check:readme-exports OK (after building plugin-ai — same not-measured class), regenerate:check "index.ts is up to date (433 entries)"; check-changeset-presence "8 source file(s) of 2 released package(s) changed … declares 1 changeset(s)"; check-changeset-no-major "No changeset declares a major bump".
  • Lint, CI-parity: turbo run lint on the four touched packages — "Tasks: 5 successful, 5 total", 0 errors. A separate --no-inline-config --format json reading of the 13 changed files: 0 new errors (the single error shown pre-exists byte-identically at BASE behind a deliberate inline exemption; box.tsx's two warnings equal the div.tsx sibling control).
  • Declared narrowing: repo-wide pnpm lint not run locally (population = per-package eslint via turbo; the four touched packages were run exactly as CI runs them; eslint.config.js declares no project/projectService, so this diff cannot move any untouched file's verdict). CI runs the full farm regardless.

Changeset: .changeset/3965-mint-box-neutral-container.md (minor, @object-ui/types + @object-ui/components).

Out of scope, filed after a full-enumeration dedup (251 open issues via repo-scoped REST, positive controls hit): #6877 — the div/span deprecation guidance still teaches the measured-non-drop-in replacements and never names box; every surface involved is pinned by the #4000 ruling and the #6823 agreement test, so it is a judged follow-up, not a rider here.

The kind:'html' tier and landmark conversions were not touched (ruling point 4). skills/** untouched.


Generated by Claude Code

claude added 4 commits August 30, 2026 08:40
…ract faces

Per the 2026-08-29 maintainer ruling (方案 A): `box` renders `children`,
passes the authored `className` through verbatim, and injects zero classes.
Interface + zod mirror land together with the zod-mirror-parity pairing;
registry registration is `namespace: 'ui'`, `isContainer: true`. Deliberately
reads `children` only — never `body` (the div fallback that made mechanical
swaps unsafe). Ships with the layout docs page and the components-layout-box
catalog exemplars.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hfmP9hoMd3dJwTh85J4yB
…odes) to box

Mechanical retype "type": "div" -> "type": "box" across 21 fixtures; the 4
components-basic-sidebar fixtures whose div node authored `body` additionally
move that content into `children` (box reads children only). Zero render
difference verified per fixture through the real SchemaRenderer with the
ruled dual assertion — element count AND text content — 25/25 pairs equal,
and the 4 body-moved fixtures keep their 'Main content area' sentinel on the
page. The components-basic-div doc category (2 files / 5 nodes) stays as
authored under its standing 2026-08-09 exemption: it documents the deprecated
type itself.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hfmP9hoMd3dJwTh85J4yB
With the stock drained (80 div nodes migrated to box), the BASELINE table and
its freeze/no-growth/no-slack arms retire; the gate now refuses ANY
JSON-authored div or span outside the components-basic-div documentation
exemption, whose non-vacuity stays pinned at 2 files / 5 nodes. The premise
arm (deprecation still declared, via ComponentRegistry.deprecationFor), the
omission arm and the counter-probe are carried over unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hfmP9hoMd3dJwTh85J4yB
layout-dom-leak-5574 census: text 699 -> 702 (the two components-layout-box
exemplars author 3 text nodes) and box measured at 84 rendered / 0 noElement
— the migrated population plus exemplars, every node expected to render its
element and leak nothing. widget-dom-leak-sweep: ui:box added to
COMPONENTS_PLAIN_TYPES; it sweeps CLEAN with no ledger entry (born on
toDomProps), unlike the BARE_SPREAD row its predecessor div carries.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hfmP9hoMd3dJwTh85J4yB
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 45 chunks) 3176.8 KB 3222.7 KB
Main entry chunk (gzip) 143.6 KB 350 KB
Entry file index-E5Z6J432.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) 12.46KB 4.71KB
app-shell (runtime-config.js) 20.61KB 7.35KB
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) 512.13KB 116.43KB
core (index.js) 5.30KB 2.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 173.17KB 47.98KB
fields (index.js) 243.36KB 61.51KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
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.44KB 1.39KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 33.40KB 8.71KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.95KB 10.97KB
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.55KB 0.62KB
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 (useResponsiveConfig.js) 1.37KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
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) 46.92KB 12.93KB
plugin-charts (index.js) 64.68KB 18.35KB
plugin-chatbot (index.js) 190.53KB 45.18KB
plugin-dashboard (index.js) 133.48KB 34.51KB
plugin-designer (index.js) 212.87KB 43.19KB
plugin-detail (index.js) 245.43KB 62.46KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 133.32KB 32.69KB
plugin-gantt (index.js) 165.23KB 40.37KB
plugin-grid (index.js) 201.72KB 54.58KB
plugin-kanban (index.js) 53.14KB 14.64KB
plugin-list (index.js) 113.15KB 27.59KB
plugin-map (index.js) 20.20KB 6.66KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 43.51KB 11.94KB
plugin-timeline (index.js) 28.95KB 8.33KB
plugin-tree (index.js) 9.00KB 3.08KB
plugin-view (index.js) 85.83KB 21.11KB
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) 76.75KB 25.49KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 3.11KB 1.48KB
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 0.99KB
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 (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.72KB 2.24KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
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 (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) 3.40KB 1.71KB
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

node scripts/regenerate-known-schema-types.mjs — two lines: box and ui:box
join the derived list. Repairs the shard-1 red on
scripts/__tests__/known-schema-types-derivation-5115.test.ts (the derived
artifact lives outside every path the diff touched: registering a component
type has a gate consequence path-based derivation cannot see).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013hfmP9hoMd3dJwTh85J4yB
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 45 chunks) 3176.8 KB 3222.7 KB
Main entry chunk (gzip) 143.6 KB 350 KB
Entry file index-qETeoOTg.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) 12.46KB 4.71KB
app-shell (runtime-config.js) 20.61KB 7.35KB
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) 512.13KB 116.43KB
core (index.js) 5.30KB 2.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 173.17KB 47.98KB
fields (index.js) 243.36KB 61.51KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
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.44KB 1.39KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 33.40KB 8.71KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.95KB 10.97KB
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.55KB 0.62KB
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 (useResponsiveConfig.js) 1.37KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
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) 46.92KB 12.93KB
plugin-charts (index.js) 64.68KB 18.35KB
plugin-chatbot (index.js) 190.53KB 45.18KB
plugin-dashboard (index.js) 133.48KB 34.51KB
plugin-designer (index.js) 212.87KB 43.19KB
plugin-detail (index.js) 245.43KB 62.46KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 133.32KB 32.69KB
plugin-gantt (index.js) 165.23KB 40.37KB
plugin-grid (index.js) 201.69KB 54.58KB
plugin-kanban (index.js) 53.14KB 14.64KB
plugin-list (index.js) 113.15KB 27.59KB
plugin-map (index.js) 20.20KB 6.66KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 43.51KB 11.94KB
plugin-timeline (index.js) 28.95KB 8.33KB
plugin-tree (index.js) 9.00KB 3.08KB
plugin-view (index.js) 85.83KB 21.11KB
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) 76.75KB 25.49KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 3.11KB 1.48KB
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 0.99KB
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 (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.72KB 2.24KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
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 (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) 3.40KB 1.71KB
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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

examples/schema-catalog: 48 个示例仍用已废弃的 div 组件类型,docs 站每张缩略图都刷一条 deprecation warning

1 participant