Skip to content

fix(components): an expanded offcanvas sidebar is drawn inside the viewport (objectui#11464) - #11481

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-11464-offcanvas-expanded-geometry
Oct 2, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-11464-offcanvas-expanded-geometry

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #11464

Clause-②: no

What this changes

The Shadcn Sidebar in its offcanvas form (the default) drew its expanded panel one sidebar-width past the edge it is anchored to, out of the viewport. It also reserved no width beside the page, and its rail took the collapsed styling. Expanded and collapsed drew the same thing, so a user could not tell the two states apart.

Root cause. Upstream blanks data-collapsible while the sidebar is expanded, so its group-data-[collapsible=offcanvas]: rules can only match a collapsed sidebar. objectui's copy keeps the attribute in every state (local edit (3) in packages/components/shadcn-components.json). The icon rules were qualified with group-data-[state=collapsed]: to match, and the offcanvas rules were not.

Fix: one declared patch family, sidebarOffcanvasStateQualifierPatches, in scripts/shadcn-local-patches.mjs. It has one anchored edit per upstream line, and each one qualifies its line by the collapsed state:

patch id line (quoted from the registry bytes)
sidebar-offcanvas-gap-collapsed-only the gap: group-data-[collapsible=offcanvas]:w-0
sidebar-offcanvas-left-offset-collapsed-only left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]
sidebar-offcanvas-right-offset-collapsed-only right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]
sidebar-offcanvas-rail-collapsed-only the rail: translate-x-0, after:left-full, hover:bg-sidebar
sidebar-offcanvas-rail-left-edge-collapsed-only [[data-side=left][data-collapsible=offcanvas]_&]:-right-2
sidebar-offcanvas-rail-right-edge-collapsed-only [[data-side=right][data-collapsible=offcanvas]_&]:-left-2
  • The group-data-* rules take the group-data-[state=collapsed]: prefix the icon rules already carry. The two arbitrary-selector rail rules take [data-state=collapsed] inside the selector, the spelling the rail's collapsed cursor rules beside them already use.
  • Every find was written from scripts/__tests__/fixtures/shadcn-registry/sidebar.registry.txt. All 10 sidebar anchors apply to the registry bytes (the offline round-trip test).
  • Every marker is the whole patched string, so verifyLocalPatches requires the shipped file to carry the payload byte for byte. The shipped src/ui/sidebar.tsx change was written by applyLocalPatches itself, not by hand.
  • On upstream bytes, where the attribute is blank while expanded, every qualifier is redundant, so the patched registry file draws exactly what upstream draws.
  • shadcn-components.json's edit (3) note no longer claims "same result". It now says which rules are qualified by hand (icon), and which by the declared family (offcanvas).
  • A changeset, @object-ui/components patch.

Geometry: BASE 6007dd4e4 vs this branch

Instrument: Chromium (the pre-installed /opt/pw-browsers/chromium, driven by the repo's Playwright 1.62.1) at 1280x800. The markup comes from the real components, server-rendered from source by Vite: the primitive, the SDUI sidebar node's renderer, and SidebarNav. The CSS is real Tailwind 4.3.3, compiled for exactly the classes that markup carries. x ranges are in px.

case BASE panel x after panel x BASE gap / page left after gap / page left
offcanvas, left, expanded -256 to 0 (off-screen) 0 to 256 0 / 0 256 / 256
offcanvas, right, expanded 1280 to 1536 (off-screen) 1024 to 1280 0 / page 0 to 1280 256 / page 0 to 1024
offcanvas, left, collapsed -256 to 0 -256 to 0 (unchanged) 0 / 0 0 / 0
offcanvas, right, collapsed 1280 to 1536 1280 to 1536 (unchanged) 0 0
icon, left, expanded (control) 0 to 256 0 to 256 256 / 256 256 / 256
icon, left, collapsed (control) 0 to 48 0 to 48 48 / 48 48 / 48
sidebar node, collapsible omitted, bare host -256 to 0 0 to 256 0 256
SidebarNav collapsible="offcanvas", expanded -256 to 0 0 to 256 0 / 0 256 / 256
SidebarNav collapsible="offcanvas", collapsed -256 to 0 -256 to 0 (unchanged) 0 / 0 0 / 0

The rail, offcanvas, left, expanded: at BASE it had translate 0px, right -8px and ::after left 16px, the collapsed styling. After the fix it has translate -50%, right -16px and ::after left 8px, identical to the expanded icon rail. After the fix, every expanded offcanvas reading equals the expanded icon reading on both sides.

The pin: e2e/sidebar-offcanvas-geometry.spec.ts

Option (a), a real engine, for three reasons:

  • jsdom and happy-dom have no layout, and the triage pins are positions ("inside / outside the viewport").
  • The repo already runs a geometry spec in the same lane: e2e/record-header-title-width.spec.ts, which uses page.setContent plus real Tailwind.
  • CI's Build & E2E job runs pnpm test:e2e --project=chromium over e2e/, and a sidebar.tsx change triggers it.

The spec has six tests:

  1. An expanded offcanvas sidebar sits inside the viewport, on either side.
  2. An expanded offcanvas sidebar draws exactly as an expanded icon sidebar does: panel, gap, page edge, and the rail's box, translate, offset and hover line, on both sides.
  3. A collapsed offcanvas sidebar sits wholly outside the viewport, and the page takes the full width.
  4. The icon form is the control: 256px expanded, the 48px strip collapsed.
  5. The sidebar node with collapsible omitted draws on-screen in a bare host.
  6. SidebarNav's offcanvas form is on-screen when expanded and off-screen when collapsed.

Declared fixtures, also stated in the spec header:

  • @object-ui/core is a stub that records register(), so the node's component comes from its real registration.
  • @object-ui/react and @object-ui/i18n are stubs. Neither is on the geometry path: the child list is empty here, and i18n is reached only through the mobile sheet's close label.
  • @object-ui/components, as SidebarNav imports it, re-exports the same primitive files the barrel re-exports.

The workspace packages are stubbed because this lane builds no workspace dist/. That the real SchemaRenderer maps an omitted collapsible to offcanvas is already pinned through the real renderer by sidebar-node-provider-10859.test.tsx. The spec imports no workspace package by name, which is the premise scripts/__tests__/e2e-type-check.test.ts pins.

Reverse verification (prediction written first, every leg from a committed state)

  • BASE leg (HEAD 0ce9adf7c). sidebar.tsx and shadcn-local-patches.mjs were swapped to their BASE blobs (7eb315438 and 9c6218b6b), and the new tests kept.
    • e2e: 4 failed / 2 passed, as predicted. Tests 1, 2, 5 and 6 were red; 3 (collapsed) and 4 (icon control) were green.
    • shadcn-local-patches.test.ts: 2 failed / 51 passed, as predicted: the new family-ids test and "no patch outside those three families".
    • Restored: both blobs equal HEAD, and git diff HEAD is 0 bytes.
  • Six per-line ablations through objectstack's ablation-replace.mjs. Each reverted one patched line in the shipped file to its registry anchor; the anchor hit 1 to 0, the blob moved, and the file was restored to blob 15cca6101 == HEAD with an empty git diff HEAD. Each leg landed exactly as predicted:
    • gap: e2e 3 failed (tests 2, 5, 6);
    • left offset: e2e 4 failed (1, 2, 5, 6);
    • right offset: e2e 2 failed (1, 2);
    • rail: e2e 1 failed (2);
    • rail left edge: e2e 1 failed (2);
    • rail right edge: e2e 1 failed (2);
    • in all six legs, the offline sidebar.tsx carries its declared patches went red (1 failed / 52 passed).
  • Declaration ablation. The family was removed from LOCAL_PATCHES.sidebar and the shipped bytes kept. e2e: 6 passed (geometry reads the shipped bytes). The local-patches suite: 2 failed (family ids, three families). Restored to blob bc7e528aa == HEAD.

Measured against the dispatch's mechanism assumptions

  1. Confirmed, with the line positions shifted by objectui#11463: the attribute is set unconditionally, and the gap, the two offsets and the rail were unqualified. The rail also has two arbitrary-selector offcanvas rules (-right-2 / -left-2) after the line triage named. They are the same defect on the same element, so they are in the family. Without them, an expanded offcanvas rail took right: -8px (measured above).
  2. Instrument (a), for the reasons above.
  3. The patch follows the existing family shape (find / replace / marker / occurrences: 1). The repo enforces the payload by marker containment (verifyLocalPatches, in the "shipped primitives still carry every declared patch" block). The markers are the whole replacement strings, and a new test asserts marker === replace, and that each replacement minus the qualifier is its anchor.
  4. Note corrected. shadcn-components.json does not ship: @object-ui/components' files is dist, README.md, CHANGELOG.md and LICENSE. So the changeset describes the behaviour, not the note.
  5. SidebarNav collapsible="offcanvas" was reached at BASE (expanded -256 to 0). The same patch fixes it, and it is pinned (test 6). SidebarNav.tsx is not edited.
  6. The collapsed offcanvas sidebar is still wholly off-screen (test 3).
    • Mobile, a one-off vitest render at innerWidth 375: the desktop .group.peer is not rendered, and the trigger opens the [data-mobile="true"] sheet.
    • Every hunk of the sidebar.tsx diff sits in the desktop return and in SidebarRail, none in the isMobile branch.

Gates (final head 0e7b02c2d)

  • e2e spec (local runner: a scratch config without the console webServer, with executablePath: '/opt/pw-browsers/chromium'): 6 passed.
  • vitest, from the worktree root, through os-verify-lock. Three slices, 84 test files in total, all passed:
    • the 17 scripts/__tests__ files that read the changed files or e2e/: Test Files 17 passed (17), Tests 427 passed (427);
    • components, layout, schema-catalog and reader tests: Test Files 44 passed (44), Tests 1178 passed (1178);
    • app-shell: Test Files 23 passed (23), Tests 406 passed (406).
    • The 84 files are every test naming ui/sidebar, SidebarProvider, SidebarNav or collapsible in components, layout, app-shell and schema-catalog, plus the readers of the changed files, plus both phase-2d pins.
  • pnpm --filter @object-ui/components type-check exit 0 (after building its dependency closure), pnpm type-check:scripts exit 0, pnpm type-check:e2e exit 0.
  • pnpm check:control-bytes: OK. pnpm check:new-line-citations: 0 new citation(s). node scripts/check-changeset-presence.mjs: 1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s).
  • pnpm check:changeset-claims: 3 pending changesets name a touched file (10859-sidebar-node-provider-collapsible, 7397-remove-duplicate-chart-primitives, 9569-components-stylesheet-source-none). Each was read, and each is still true. None claims edit (3)'s "same result" or an offcanvas position, so no note was appended.
  • Also exit 0:
    • check:phantom-deps, check:self-import, check:unreferenced-sources, check:esm-specifiers, check:entry-guard, check:pre-install-import-graph;
    • check-test-path-roots, check-type-check-coverage, check-lint-coverage, check-changeset-fixed, check-changeset-no-major;
    • check-governed-queue-guard --test on the 6 paths: NOT GOVERNED.
  • ESLint, narrowed:
    • The population was read from ESLint's own config (isPathIgnored / calculateConfigForFile): all 4 changed lintable files are in it.
    • eslint --format json over those 4 files: 4 files, 0 errors, 2 warnings. Both warnings are react-refresh/only-export-components on the export block of sidebar.tsx, and the BASE blob carries the same 2.
    • No config object sets parserOptions.project or projectService, so the diff cannot move a verdict on an untouched file.
  • NOT MEASURED, and why:
    • pnpm shadcn:check: ui.shadcn.com is not in this container's egress allowlist (44 of 44 fetches answered 403). The offline anchor suite covers the new anchors.
    • Repo-wide pnpm lint and full pnpm test: owned by CI.
    • The spec under the real playwright.config.ts: owned by CI's Build & E2E job.

Acceptance notes

  • .github/workflows/ci.yml carries a dated snapshot comment ("Both readings are a SNAPSHOT") whose static complement says no e2e/ spec except record-header-title-width.spec.ts names node:fs. This spec does too: it reads pnpm-workspace.yaml and Tailwind's own CSS. It opens no markdown, which is the fact that comment's reading is about. Not edited here: outside this card's file surface. carrier: none.
  • shadcn-components.json's sidebar note still does not mention the two earlier declared sidebar families (cookie read, optional context). This note is about the undeclared edits, so it is left as it is. carrier: none.

Generated by Claude Code

claude added 2 commits October 2, 2026 15:18
…ewport (objectui#11464)

Local edit (3) keeps `data-collapsible` set while the sidebar is expanded,
where upstream blanks it. The icon rules were qualified by the collapsed
state to match; the offcanvas rules were not, so an expanded offcanvas
panel was pushed one sidebar-width off its edge, its gap reserved no width,
and its rail took the collapsed styling.

The six offcanvas lines (the gap, the left and right offsets, the rail's
three) are now qualified by the collapsed state through a declared patch
family, sidebarOffcanvasStateQualifierPatches, anchored on registry bytes,
so a sync re-applies them. The shadcn-components.json note for edit (3)
now says what qualifies which rules.

Pinned in Chromium by e2e/sidebar-offcanvas-geometry.spec.ts: the real
primitive, the sidebar node's renderer and SidebarNav server-rendered from
source, real Tailwind, measured at 1280px.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
… private name (objectui#11464)

The virtual entry's import of the registry stub was spelled with the
workspace package name, which the e2e type-check pin reads as a workspace
import. It now uses its own alias, mapped to the same stub.

Claude-Session: https://claude.ai/code/session_01YLg8XqWGJ785fwQ5v4pH37
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 3 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/10859-sidebar-node-provider-collapsible.md

  • names scripts/shadcn-local-patches.mjs → scripts/shadcn-local-patches.mjs — edited by this change

    • Provider. shadcn's Sidebar throws outside a SidebarProvider, so a sidebar node used to render the error panel in any host that did not mount one. Now the node reads the provider context without throwing. In a host that already mounts a provider (the app shell, through @object-ui/layout's AppShell), the node uses that one: the tree keeps exactly one provider, and the host's open state drives the node. In a host without one, the node mounts its own around itself. - collapsible. The spec types SidebarSchema.collapsible as a boolean, but the node forwarded it into shadcn's 'offcanvas' | 'icon' | 'none' prop, so true and false reached the DOM as data-collapsible="true" / "false", which no rule matches. Now false draws shadcn's in-flow, fixed-width form, which ignores the open state. true, or leaving the key out, keeps the default the node applied before (offcanvas). Any other value is forwarded unchanged, as before; objectui validate refuses it at collapsible. The registration's collapsible input is now declared as a boolean, and its defaultProps no longer name collapsible: that 'icon' was never read at render. - useOptionalSidebar(). A new export next to useSidebar(), added to the Shadcn primitive as a declared local patch (scripts/shadcn-local-patches.mjs). It returns the sidebar context, or null where useSidebar() would throw.

.changeset/7397-remove-duplicate-chart-primitives.md

  • names packages/components/shadcn-components.json → packages/components/shadcn-components.json — edited by this change

    packages/components/shadcn-components.json records chart under customComponents with movedToPlugin: "@object-ui/plugin-charts", which is what keeps pnpm shadcn:update-all from re-fetching the primitive and silently undoing this.

.changeset/9569-components-stylesheet-source-none.md

  • names shadcn-components.json → packages/components/shadcn-components.json — edited by this change

    @object-ui/components' Tailwind entry opened with a bare @import 'tailwindcss' — the only one of this repository's four stylesheet entries without a source(none) pin. Tailwind v4's automatic source detection was therefore ON, and it roots at the PROCESS working directory, so it scanned every non-ignored file in the package: CHANGELOG.md, README.md, the markdown beside the renderers, shadcn-components.json, even an English sentence in a comment inside tsconfig.test.json. Every class-shaped token in that prose compiled into a real rule in the published dist/index.css.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with 2c0ddf226 (merge-base with origin/main): 5 file(s) changed outside .changeset/, read against 2026 pending declaration(s) that publish a body (2655 pending in total). · run

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 330 chunks) 3550.7 KB 3574.6 KB
Main entry chunk (gzip) 150.4 KB 350 KB
Entry file index-vnVW5Poe.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) 16.88KB 6.25KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.17KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.70KB 10.94KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 569.83KB 136.77KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 230.46KB 63.94KB
fields (index.js) 261.25KB 66.11KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.49KB 9.23KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 39.36KB 11.18KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 53.17KB 15.46KB
plugin-charts (index.js) 83.53KB 22.84KB
plugin-chatbot (index.js) 198.22KB 46.97KB
plugin-dashboard (index.js) 141.23KB 38.00KB
plugin-designer (index.js) 231.28KB 48.76KB
plugin-detail (index.js) 245.27KB 64.47KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 172.73KB 44.50KB
plugin-gantt (index.js) 179.14KB 45.06KB
plugin-grid (index.js) 232.66KB 63.77KB
plugin-kanban (index.js) 49.51KB 15.54KB
plugin-list (index.js) 116.60KB 28.96KB
plugin-map (index.js) 25.60KB 8.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.04KB 12.21KB
plugin-timeline (index.js) 38.80KB 11.71KB
plugin-tree (index.js) 14.51KB 5.15KB
plugin-view (index.js) 90.23KB 22.73KB
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.81KB 3.58KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 6.06KB 2.68KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 21.42KB 7.05KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 3.19KB 1.62KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 5.07KB 2.39KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 21.59KB 7.71KB
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