Skip to content

fix(types,plugin-charts): DrillDownConfig 只声明有人读的键,ObjectChart 补 target: 'navigate' (#3354) - #3382

Merged
yinlianghui merged 3 commits into
mainfrom
claude/issue-3354-drilldown-declared-enforced
Aug 5, 2026
Merged

fix(types,plugin-charts): DrillDownConfig 只声明有人读的键,ObjectChart 补 target: 'navigate' (#3354)#3382
yinlianghui merged 3 commits into
mainfrom
claude/issue-3354-drilldown-declared-enforced

Conversation

@yinlianghui

@yinlianghuiyinlianghui commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Fixes#3354

结论先说:三项前提独立复核,全部成立

origin/main 为准逐项核过,没有一项已经过期:

  1. view 零消费者 —— 全仓 drillDown?.view / config.view 类读取点 0 命中。
  2. sort 零消费者 —— 同样 0 命中。仅有的两处 cfg.sort / config.sort别的类型:packages/app-shell/src/views/InterfaceListPage.tsx:362(页面 list-view 配置)与 packages/core/src/data-scope/ViewDataProvider.ts:276(ElementDataSourceConfig),与 DrillDownConfig 无关。
  3. 扫描面有效性(邻近词反查) —— 同一条 grep 形状对确实活着的邻键立刻命中:maxRows 命中 ObjectChart.tsx:781ObjectPivotTable.tsx:251;columns 命中 ObjectChart.tsx:782ObjectDataTable.tsx:439ObjectPivotTable.tsx:250。所以「0 命中」是真的没人读,不是扫描面写坏了。
  4. chart 的分支结构 —— ObjectChart.tsx 自绘抽屉当时确实只有 if (target === 'dialog') 与默认 return Sheet 两支,'navigate' 落进 Sheet。

改了什么

一、view / sortDrillDownConfig 删除(declared = enforced)

两个键自陈 reserved / 承诺排序,却没有任何渲染器读它们 —— 作者写了等于没写,而且没有任何提示。按 PM 裁定删除而非实现:现在没有需求方,而这个接口正是 objectstack#5022 反推 spec 声明形状的依据,留着就会从「渲染器里的死键」升级成「协议承诺的死键」。

同时在接口 JSDoc 上写下这条不变量(哪两个键被删、为什么、不要在没有读取方之前加回来)。

二、ObjectCharttarget: 'navigate' 分支

共享接口的 JSDoc 承诺 'navigate' 跳过就地视图、直接进对象完整列表页,host 未提供 navigation 时回落 drawer。走 DrillDownDrawer 的三个 widget(table / pivot / metric)都兑现了(navigateOnly),唯独 ObjectChart 自绘抽屉不兑现。

现在 ObjectChart 语义对齐 DrillDownDrawer.navigateOnly:

  • target: 'navigate' + host 提供 DrillNavigationContext.openRecordList ⇒ 直接跳列表页,不渲染抽屉,过滤条件与抽屉本会用的完全一致(widget filter ∧ 点击上下文);
  • host 未提供 ⇒ 文档化回退到抽屉,与 JSDoc 一致;
  • 'drawer' / 'dialog' 行为不变;表头的 "Open in list" escape hatch 仍独立于 target

实现上把 drill filter 从抽屉块里提升成一个 useMemo(抽屉块位于本组件的条件式早返回之后,effect 不能放在那里),两条路径因此共用同一个 filter,不会各算一份。

packages/plugin-dashboard/** 全程只读:只读它对齐语义,没有改它、没有搬它。

三、registry input 描述:维持 spec 声明的 'drawer' | 'dialog',不擅自加 'navigate'

这一条我先写反了,自查后改了回来,把过程留在这里以免下一个人往错的方向「修」:

我一度把 'navigate' 加进了 object-chartdrillDown input 描述,理由是「渲染器兑现了就该声明」。ChartDrillDownSchema 已经在 @objectstack/spec 落地,把 chart drill 的 target 声明成 'drawer' | 'dialog',strict,而且 packages/lint/src/validate-react-page-props.ts真的 parse 它来校验作者写的 drillDown={{…}} 字面量。所以在面板里列出 'navigate',等于把平台权威递给一个发布闸门随后会拒绝的值 —— 正是 objectstack#5022 开单要消灭的失效模式,方向刚好相反。

所以:组件兑现 'navigate',面板不广告它。协议的联合先动,面板再跟,顺序不能反。这处不对称在读取点、registry 注释、parity 测试三处都写明了原因,免得被当成疏漏「顺手补上」。

四、由此产生的 spec 侧缺口(已另立单,不在本 PR 修)

objectstack#5022 第二轮裁决把 target 定为两个成员,理由是「每键有 ObjectChart 读取点」——一条测量,而本 PR 正好把这条测量改掉了。于是渲染器交付 3 个 target、协议声明 2 个,react 页面上写 'navigate' 会被发布闸门拒绝。

已按 Prime Directive #10objectstack#5435(未指派),并在 objectstack#5022 留了知会。本 PR 不碰 spec。

测试与反向验证

新增 / 更新

  • packages/plugin-charts/src/ObjectChart.drillNavigate.test.tsx(新,4 例):navigate 跳转 + 不渲染抽屉、无 host 回退抽屉、默认 drawer 不回归、dialog 不回归。Sheet 与 Dialog 在 Radix 下同为 role="dialog",用两者各自的定位 class 区分,避免「断言通过是因为什么都没渲染」。
  • packages/types/src/__tests__/drill-down-config-declared-keys.test.ts(新):编译期钉住 view / sort 不再是 DrillDownConfig 的键,并保留活键(filter / columns / maxRows / target)与 target 三元联合作为对照,防止接口被整体改坏时上面两条空过。
  • packages/plugin-charts/src/index.test.ts:parity 测试的断言维持原样(navigate 仍在「不得广告」侧),但把理由换成上面第三节的那条 —— 原理由「chart 不读它」已经随本 PR 失效,不换就成了一条钉着正确结论的错误注释。

反向验证(方向先判后跑)

  • 删除键 —— 预判 :把 view / sort 加回接口,pnpm --filter @object-ui/types type-checkdrill-down-config-declared-keys.test.ts(62,31)(63,31)error TS2344: Type 'false' does not satisfy the constraint 'true'。跑出来就是红,方向一致。(这两条是纯编译期钉子 —— vitest 只剥类型不检查类型,靠的是本包 tsconfig.test.jsontype-check 串起来。)
  • navigate 分支 —— 预判 只有第 1 例红,另外 3 例保持绿(它们钉的是不回归)。把 navigateOnly 强制成 false(等价于本 PR 前的行为)后:第 1 例 AssertionError: expected "vi.fn()" to be called with arguments: [ 'opportunity', …(1) ],其余 3 例 passed。方向完全一致。

正向

  • pnpm exec vitest run packages/plugin-charts/ packages/plugin-dashboard/ packages/core/ packages/types/(仓根,即 CI 的配置)⇒ 133 files / 2127 tests passed, 0 failed
  • drill 全量面(8 个文件 53 例)在第三节的修正之后再跑一遍仍全绿,含 plugin-dashboard 的 DrillDownDrawer.escapeHatch / ObjectDataTable.drill / PivotTable.drill 与 core 的 drill-down 工具测试。
  • type-check:@object-ui/types / @object-ui/core / @object-ui/plugin-charts / @object-ui/plugin-dashboard 全部 Done。
  • lint:两个改动包 0 errors
  • changeset 门禁:check-changeset-no-major / check-changeset-fixed 均通过(本 changeset 标 minor,按仓库版本政策 —— objectui 自身的破坏性变更也走 minor,破坏语义写在正文里)。

🤖 Generated with Claude Code

https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt

…er reads (#3354)
`DrillDownConfig` is shared by five widgets and is the shape the protocol's
own `drillDown` declaration is being derived from (objectstack#5022). Three
of its promises were not delivered.
- `view?: string` ("reserved") and `sort?: Array<{ field; dir? }>` had zero
read sites repo-wide. Removed rather than implemented: nothing asked for
them, and left in place they were about to become dead keys with protocol
authority. A compile-time pin in `@object-ui/types` keeps them from
drifting back without a reader.
- `target: 'navigate'` was honoured by `DrillDownDrawer` (table / pivot /
metric) but ObjectChart draws its own drawer and branched on `'dialog'`
only, so `'navigate'` fell through to the default Sheet even with host
navigation wired. ObjectChart now routes it through
`DrillNavigationContext.openRecordList` with the same merged filter, and
keeps the documented fallback to the drawer when no host handler exists.
The registry input advertises `'navigate'` so the palette matches.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
@vercel

vercelBot commented Aug 5, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectuiIgnoredIgnoredAug 5, 2026 11:47am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)28.1 KB350 KB
Entry fileindex-CyTSqzJL.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)8.47KB3.09KB
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)18.38KB4.49KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)3.65KB1.42KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.25KB0.53KB
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)477.30KB104.75KB
core (index.js)2.25KB0.80KB
create-plugin (index.js)9.28KB2.98KB
data-objectstack (index.js)136.23KB34.75KB
fields (index.js)227.18KB55.72KB
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)26.14KB6.07KB
i18n (useSafeTranslation.js)3.26KB1.44KB
layout (index.js)38.53KB10.71KB
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.05KB1.53KB
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)44.98KB12.37KB
plugin-charts (index.js)61.15KB17.36KB
plugin-chatbot (index.js)180.09KB42.72KB
plugin-dashboard (index.js)112.01KB28.86KB
plugin-designer (index.js)210.51KB42.51KB
plugin-detail (index.js)231.17KB56.99KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)111.54KB26.97KB
plugin-gantt (index.js)162.25KB39.55KB
plugin-grid (index.js)185.08KB49.04KB
plugin-kanban (index.js)47.89KB13.18KB
plugin-list (index.js)105.02KB25.36KB
plugin-map (index.js)16.81KB5.24KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)40.55KB10.59KB
plugin-timeline (index.js)25.76KB7.33KB
plugin-tree (index.js)8.34KB2.82KB
plugin-view (index.js)83.67KB20.43KB
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)19.28KB6.38KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.02KB0.55KB
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.46KB1.21KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)0.20KB0.18KB
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

…get union
`ChartDrillDownSchema` landed in `@objectstack/spec` declaring the chart drill
target as `'drawer' | 'dialog'`, strictly, and `validate-react-page-props`
parses that schema against the authored `drillDown={{…}}` literal at publish
time. Advertising `'navigate'` in the `object-chart` registry input would
therefore hand an author a value the publish gate then rejects — the exact
failure framework#5022 was opened to stop.
The component still HONOURS `'navigate'`: the asymmetry is the protocol union
being narrower than the renderer, and the fix for that belongs in the spec.
Recorded at the read site, in the registry comment and in the parity test so
the next reader does not "fix" the palette in the wrong direction.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
…jectstack#5435
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)28.1 KB350 KB
Entry fileindex-DsOj7nje.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)8.47KB3.09KB
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)18.38KB4.49KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)3.65KB1.42KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.25KB0.53KB
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)477.32KB104.75KB
core (index.js)2.25KB0.80KB
create-plugin (index.js)9.28KB2.98KB
data-objectstack (index.js)136.23KB34.75KB
fields (index.js)227.18KB55.72KB
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)26.14KB6.07KB
i18n (useSafeTranslation.js)3.26KB1.44KB
layout (index.js)38.53KB10.71KB
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.05KB1.53KB
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)44.98KB12.37KB
plugin-charts (index.js)61.04KB17.31KB
plugin-chatbot (index.js)180.09KB42.72KB
plugin-dashboard (index.js)112.01KB28.86KB
plugin-designer (index.js)210.51KB42.51KB
plugin-detail (index.js)231.29KB57.04KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)111.54KB26.97KB
plugin-gantt (index.js)162.25KB39.55KB
plugin-grid (index.js)185.08KB49.04KB
plugin-kanban (index.js)47.89KB13.18KB
plugin-list (index.js)105.02KB25.36KB
plugin-map (index.js)16.81KB5.24KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)40.55KB10.59KB
plugin-timeline (index.js)25.76KB7.33KB
plugin-tree (index.js)8.34KB2.82KB
plugin-view (index.js)83.67KB20.43KB
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)19.28KB6.38KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.02KB0.55KB
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.46KB1.21KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)0.20KB0.18KB
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

@yinlianghui
yinlianghui marked this pull request as ready for review August 5, 2026 11:53
@yinlianghui
yinlianghui added this pull request to the merge queueAug 5, 2026
Merged via the queue into main with commit 9e9e9a9Aug 5, 2026
16 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-3354-drilldown-declared-enforced branch August 5, 2026 11:53
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

DrillDownConfig 声明了三个渲染器不读的键:view / sort 全局无消费者,target: 'navigate' 在 ObjectChart 上被静默降级

2 participants

@yinlianghui@claude