Skip to content

fix(i18n): name the report config panel and the row-colour section (#4118) - #4137

Merged
yinlianghui merged 2 commits into
mainfrom
claude/issue-4118-wrong-slot-keys
Aug 10, 2026
Merged

fix(i18n): name the report config panel and the row-colour section (#4118)#4137
yinlianghui merged 2 commits into
mainfrom
claude/issue-4118-wrong-slot-keys

Conversation

@yinlianghui

@yinlianghuiyinlianghui commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Fixes#4118

Seven call sites were re-verified against the packs and against every other call site of the same key. Two were asking for a key written for another slot and are fixed; five turned out to be class 3 — the key IS the right one for that slot and only the pre-#3810 dead fallback was wrong. Evidence for each is below, so the five no-action verdicts can be challenged individually.

Re-verified a second time on the current branch tip after merging main (see "Rebase onto #4136" at the bottom): all seven verdicts stand, and one of the card's sub-defects has since been fixed upstream.

Fixed

1. ReportConfigPanel — the panel was titled "Title"

packages/app-shell/src/views/ReportConfigPanel.tsx asked report.editor.title for both the panel heading and the accessible name of its role="complementary" landmark. That key is the label of the report's Title field: in the pack it sits directly above report.editor.titlePlaceholder ('e.g. Pipeline by Quarter'), which is what makes the pairing unambiguous. So a sighted user read a heading saying "Title" and a screen-reader user got a landmark named "Title".

It is also the only consumer — report.editor.title had exactly two call sites repo-wide and both were these. New key report.editor.panelTitle = 'Edit report' in all ten packs. That value is not invented: it is what this call site's own fallback said until #3810 aligned it to the pack (0c9596355, the commit that introduced the panel).

2. ViewSettingsPopover — the colour section was titled "Color"

packages/plugin-list/src/components/ViewSettingsPopover.tsx asked list.color. ListView already uses both keys correctly for this one feature's two slots on the wide toolbar:

  • ListView.tsx:2409 — the compact Paintbrushbutton, hidden sm:inline-flex, so it is absent on the collapsed surface → list.color ('Color')
  • ListView.tsx:2415 — the panel that button opens → list.rowColor ('Row Color')

This popover is that same panel on the collapsed / compactToolbar surface — ListView.tsx:2396 marks the wide control "hidden on mobile (collapsed into ViewSettingsPopover)" — so it now takes list.rowColor. No pack change: the correct key already existed.

Triaged, no change — with the evidence

call sitekeyverdict
InterfaceListPage.tsx:436empty.objectNotFoundThree call sites, all "the object definition is missing" (also RecordDetailView:1838, RecordFormPage:227), and this one pairs the shared title with the purpose-built sibling empty.interfacePageSourceMissing for its description. The composition is coherent; the fallback 'Source object not found' was a paraphrase, not a different meaning.
InboxPopover.tsx:315sidebar.activityFeedThe key is literally the activity-feed key, and its two consumers are both activity-feed surfaces (this tab, and HomeRail:191's activity card). Its own pack neighbours sidebar.notifications / sidebar.approvals (en.ts:2447-2449, three adjacent lines) label the popover's other two tabs, so this IS the sibling key for this tab.
AppSidebar.tsx:647layout.appSwitcher.systemConsoleThe value names the System Console; both consumers render that name (:492 as the switcher label, :647 as the fallback nav group label). Namespace impurity only — the copy is right, layout.systemNav has no such entry, and duplicating a byte-identical string into ten packs buys nothing a user sees.
RecordDetailView.tsx:1796detail.unknownUserThe pack marks this block // Activity feed actors (en.ts:937) and pairs it with systemActor: 'System'. Both consumers are activity-feed actor slots (:1318 a comment author, :1796 a history entry). The key is purpose-built for exactly this slot, and 'Unknown' is the right register beside 'System'.
HomePage.tsx:337home.welcome'Build your business system with AI' is the AI-first admin empty-state title the call site's own comment describes, and it pairs with the home.welcomeAdminDescription* keys used beside it. The stale 'Welcome to {{product}}' fallback predates that redesign.

The card's second home.welcome defect is now fixed on main

#4118 noted that this call site also passed an inert product argument for a value with no {{product}} hole. That is #3845's class, and #3845 landed as #4136 while this branch was open — after the merge below, HomePage.tsx carries neither the argument nor the defect, and the new interpolation-parity gate enforces the rule generally. Nothing left for this PR to do there; the line is untouched here, so the two changes do not collide.

Tests

New: packages/app-shell/src/views/__tests__/ReportConfigPanel.panelTitle.test.tsx (5 cases) and packages/plugin-list/src/__tests__/ViewSettingsPopover.rowColorTitle.test.tsx (3 cases). Both assert through the real locale packs rather than a t-echoing mock — what is under test is the string a user reads, and a mock returning the key would confirm the same thing the broken code did correctly.

Reverse-verified on the merged tip, direction as predicted (red): reverting both call sites to their old keys via git checkout origin/main -- on the two call-site files — packs and tests untouched, and those two files differ from main by nothing but the fix — turns 6 of 8 cases red. The 2 that stay green are the deliberate pack-premise guards (panelTitle !== title, rowColor !== color), which assert only the pack and so are unaffected by a call-site revert; they exist to stop the other six passing vacuously if those pairs ever collapsed to one string. Restoring the fix returns 8/8 green.

× titles the colour section "Row Color"
× does not title it with the toolbar button label
× names the complementary landmark after the panel, not the Title field
× renders the panel name as the visible heading
× keeps the landmark name and the visible heading identical
× is translated, not English-by-fallback, in the other nine packs
Test Files 2 failed (2) Tests 6 failed | 2 passed (8)

Rebase onto #4136 (the interpolation-parity gate)

main moved while this branch was open; origin/main @ 5f40de7d4 is merged in here (clean, no conflicts). The relevant lander is #4136, which added the interpolation-parity class to check-i18n-call-site-keys.mjs. The new key satisfies it trivially — report.editor.panelTitle has no interpolation holes and its call sites pass no arguments — and the gate confirms it across the whole repo below.

Gates, re-run on the merged tip

gateresult
node scripts/check-i18n-call-site-keys.mjs (all classes)green — 2314/2314 literal keys resolve; 851 literal inline defaults, 847 match their en value; interpolation parity: 2291 call sites compared, 0 failures
node scripts/check-i18n-en-drift.mjsgreen — 0 en value(s) changed (1 key added, 0 removed)
pnpm exec vitest run packages/i18n/ (incl. all-locales-key-parity)35 files, 630 tests passed
pnpm exec vitest run packages/app-shell/319 files, 2974 passed, 1 skipped
pnpm exec vitest run packages/plugin-list/ scripts/54 files, 971 tests passed
turbo run type-check (app-shell, plugin-list, i18n)31 tasks successful
turbo run lint (same three)0 errors
node scripts/check-control-bytes.mjsOK, 3839 tracked text files
check-changeset-presence / check-changeset-no-majorgreen — 14 source files of 3 released packages, 1 changeset, no major

Out-of-scope finding

Filed #4145 (finding, unassigned): after this PR moves the panel's name to panelTitle, the rest of report.editor.*106 leaf keys across all ten packs — has no consumer left anywhere in the repo. The hand-rolled report-editor form those labels served was replaced by the spec-driven ReportDefaultInspector, and every i18n gate here runs call site → key, never key → call site, so a dormant namespace stays invisible. Observation class: nothing a user hits today. Not touched by this PR.


Generated by Claude Code

…4118)
Two call sites asked for a key whose value was written for another slot, so
today's rendered copy is wrong.
ReportConfigPanel used `report.editor.title` for both its heading and the
accessible name of its `role="complementary"` landmark. That key is the label
of the report's Title FIELD — `report.editor.titlePlaceholder` ('e.g. Pipeline
by Quarter') sits directly under it in the pack — so the panel was headed
"Title" and a screen reader announced a region called "Title". Adds
`report.editor.panelTitle` ('Edit report', which is what the call site's own
dead fallback said before #3810 aligned it to the pack) to all ten locale
packs and points both slots at it.
ViewSettingsPopover's colour section used `list.color`. ListView already uses
both keys correctly for this one feature's two slots on the wide toolbar: the
compact Paintbrush button is `list.color` ('Color'), the panel it opens is
headed `list.rowColor` ('Row Color'). This popover is that same panel on the
collapsed/compactToolbar surface, so it now takes `list.rowColor` — an
existing key, no pack change.
No `en` value of an existing key changed: check-i18n-en-drift reports 0 en
values changed, 1 key added.
Fixes#4118
@vercel

vercelBot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectuiIgnoredIgnoredAug 10, 2026 1:35pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)28.3 KB350 KB
Entry fileindex-Dzu8bjJ1.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)8.66KB3.13KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)7.57KB2.97KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)22.10KB4.37KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)35.76KB9.11KB
auth (createAuthenticatedFetch.js)4.37KB1.69KB
auth (index.js)2.35KB1.07KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)4.91KB0.87KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)485.06KB107.21KB
core (index.js)3.04KB1.15KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)140.66KB36.25KB
fields (index.js)229.40KB56.93KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.32KB1.77KB
i18n (index.js)2.65KB1.06KB
i18n (pickLocalized.js)1.70KB0.83KB
i18n (provider.js)9.48KB3.27KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)4.52KB1.96KB
layout (index.js)38.87KB10.80KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)8.75KB3.06KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)3.67KB1.12KB
permissions (evaluator.js)4.41KB1.44KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.55KB0.71KB
plugin-ai (index.js)15.71KB3.79KB
plugin-calendar (index.js)45.23KB12.45KB
plugin-charts (index.js)61.52KB17.49KB
plugin-chatbot (index.js)180.33KB42.79KB
plugin-dashboard (index.js)118.50KB30.66KB
plugin-designer (index.js)210.51KB42.51KB
plugin-detail (index.js)237.80KB59.48KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)114.58KB27.68KB
plugin-gantt (index.js)162.81KB39.67KB
plugin-grid (index.js)188.04KB49.91KB
plugin-kanban (index.js)48.60KB13.41KB
plugin-list (index.js)110.04KB26.67KB
plugin-map (index.js)17.00KB5.32KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)40.58KB10.58KB
plugin-timeline (index.js)26.21KB7.52KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)84.03KB20.55KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.71KB3.53KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.67KB2.37KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)23.71KB7.95KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.23KB0.66KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)4.09KB1.74KB
sdui-parser (index.js)4.47KB2.03KB
sdui-parser (parse.js)10.04KB2.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)4.69KB1.48KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-retry.js)4.32KB2.02KB
types (index.js)2.71KB1.34KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)28.3 KB350 KB
Entry fileindex-B0RJaW8v.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)8.66KB3.13KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)7.57KB2.97KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)22.10KB4.37KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)35.76KB9.11KB
auth (createAuthenticatedFetch.js)4.37KB1.69KB
auth (index.js)2.35KB1.07KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)4.91KB0.87KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)485.06KB107.21KB
core (index.js)3.04KB1.15KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)140.66KB36.25KB
fields (index.js)229.40KB56.93KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.32KB1.77KB
i18n (index.js)2.65KB1.06KB
i18n (pickLocalized.js)1.70KB0.83KB
i18n (provider.js)9.48KB3.27KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)4.52KB1.96KB
layout (index.js)38.87KB10.80KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)8.75KB3.06KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)3.67KB1.12KB
permissions (evaluator.js)4.41KB1.44KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.55KB0.71KB
plugin-ai (index.js)15.71KB3.79KB
plugin-calendar (index.js)45.23KB12.45KB
plugin-charts (index.js)61.52KB17.49KB
plugin-chatbot (index.js)180.33KB42.79KB
plugin-dashboard (index.js)118.52KB30.68KB
plugin-designer (index.js)210.51KB42.51KB
plugin-detail (index.js)237.80KB59.48KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)114.58KB27.68KB
plugin-gantt (index.js)162.81KB39.67KB
plugin-grid (index.js)188.04KB49.91KB
plugin-kanban (index.js)48.60KB13.41KB
plugin-list (index.js)110.04KB26.67KB
plugin-map (index.js)17.00KB5.32KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)40.58KB10.58KB
plugin-timeline (index.js)26.21KB7.52KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)84.03KB20.55KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.71KB3.53KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.67KB2.37KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)23.71KB7.95KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.23KB0.66KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)4.09KB1.74KB
sdui-parser (index.js)4.47KB2.03KB
sdui-parser (parse.js)10.04KB2.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)4.69KB1.48KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-retry.js)4.32KB2.02KB
types (index.js)2.71KB1.34KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

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

Labels

Projects

None yet

2 participants

@yinlianghui@claude