diff --git a/.changeset/lucide-react-1-43-0-retired-trash2.md b/.changeset/lucide-react-1-43-0-retired-trash2.md new file mode 100644 index 0000000000..6707804c7b --- /dev/null +++ b/.changeset/lucide-react-1-43-0-retired-trash2.md @@ -0,0 +1,38 @@ +--- +'@object-ui/plugin-detail': patch +'@object-ui/components': patch +'@object-ui/types': patch +'@object-ui/cli': patch +--- + +Move `lucide-react` from `^1.31.0` to `^1.43.0` and repair the one spelling the jump +retires, so the delete affordances that resolve their icon from a STRING keep drawing a +glyph. + +Measured against the installed artifact rather than the upstream changelog. Across the +whole 1.31.0 to 1.43.0 jump lucide removes **zero** public names — 6072 to 6230 names in +`lucide-react`'s type surface with none dropped, 6068 to 6224 runtime exports with none +dropped, and nothing at all removed from `lucide-react/dynamic.mjs`. Every one of the 333 +value names and the one type name this repository imports resolves in both versions +(controls: `Trash` resolves in both, a bogus name resolves in neither). So no import +breaks and no type breaks. + +Exactly one key leaves the runtime `icons` record: `Trash2`. lucide retired it in favour +of `trash`, and it survives as a DEPRECATED EXPORT of the same object — which is why +nothing goes red on the compiler or on a component render, and only STRING lookups +through `renderers/action/resolve-icon.ts` are affected, because those read record +MEMBERSHIP. Repaired at all four sites that reach that resolver, three schema-catalog +documents and `DetailView`'s system delete action. + +What a user sees change: + +- `DetailView`'s delete action (`icon: 'trash-2'` to `'trash'`) draws its icon again + instead of a label with nothing beside it. The glyph is unchanged: lucide 1.43.0's + `trash` icon node is byte-identical to 1.31.0's `trash-2` icon node. +- Icons that lucide has since renamed now carry an extra class per retired alias — a + spinner renders `class="lucide lucide-loader-circle lucide-loader-2 ..."`. This is + additive (248 of 1818 icon modules carry an alias), so a `.lucide-loader-circle` + selector still matches; a selector asserting the exact, complete class string does not. +- The workspace stops installing two copies of the icon library. `main` resolves + `lucide-react` twice — 1.31.0 for this workspace and 1.35.0 for `fumadocs-ui` — and + both collapse onto 1.43.0 here. diff --git a/apps/console/package.json b/apps/console/package.json index eeb86d7b08..ce45a7b21f 100644 --- a/apps/console/package.json +++ b/apps/console/package.json @@ -105,7 +105,7 @@ "@vitest/ui": "^4.1.10", "autoprefixer": "^10.5.4", "happy-dom": "^20.11.2", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "postcss": "^8.5.26", "react": "19.2.8", "react-dom": "19.2.8", diff --git a/apps/site/package.json b/apps/site/package.json index aed0b8b14a..39ff861282 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -36,7 +36,7 @@ "fumadocs-core": "16.15.4", "fumadocs-mdx": "15.2.3", "fumadocs-ui": "16.15.4", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "next": "16.3.3", "react": "19.2.8", "react-dom": "19.2.8", diff --git a/content/docs/api/schema-reference.md b/content/docs/api/schema-reference.md index 0f21bb0b87..34ee89b46c 100644 --- a/content/docs/api/schema-reference.md +++ b/content/docs/api/schema-reference.md @@ -683,7 +683,7 @@ A single-record detail view with grouped fields, actions, and tabs. ], "actions": [ { "type": "action", "label": "Edit", "icon": "Pencil", "level": "primary" }, - { "type": "action", "label": "Delete", "icon": "Trash2", "level": "danger", "actionType": "confirm" } + { "type": "action", "label": "Delete", "icon": "trash", "level": "danger", "actionType": "confirm" } ], "tabs": [ { diff --git a/content/docs/guide/schema-playground.md b/content/docs/guide/schema-playground.md index bcef234383..05bf9349cb 100644 --- a/content/docs/guide/schema-playground.md +++ b/content/docs/guide/schema-playground.md @@ -190,7 +190,7 @@ A data grid with sortable columns and row actions: ], "actions": [ { "label": "Edit", "icon": "pencil", "action": "edit" }, - { "label": "Delete", "icon": "trash-2", "action": "delete", "variant": "destructive" } + { "label": "Delete", "icon": "trash", "action": "delete", "variant": "destructive" } ], "pagination": { "pageSize": 10, diff --git a/examples/schema-catalog/src/schemas/actions/action-button-variants.json b/examples/schema-catalog/src/schemas/actions/action-button-variants.json index 708a50ed25..14968babe4 100644 --- a/examples/schema-catalog/src/schemas/actions/action-button-variants.json +++ b/examples/schema-catalog/src/schemas/actions/action-button-variants.json @@ -23,7 +23,7 @@ "type": "button", "label": "Delete", "variant": "destructive", - "icon": "trash-2" + "icon": "trash" }, { "type": "button", diff --git a/examples/schema-catalog/src/schemas/actions/confirmation-dialog.json b/examples/schema-catalog/src/schemas/actions/confirmation-dialog.json index f77db55016..3e840e2320 100644 --- a/examples/schema-catalog/src/schemas/actions/confirmation-dialog.json +++ b/examples/schema-catalog/src/schemas/actions/confirmation-dialog.json @@ -35,7 +35,7 @@ "type": "button", "label": "Yes, Delete", "variant": "destructive", - "icon": "trash-2" + "icon": "trash" } ] } diff --git a/examples/schema-catalog/src/schemas/components-layout-card/profile-detail-card.json b/examples/schema-catalog/src/schemas/components-layout-card/profile-detail-card.json index f084c90940..2fca357ef1 100644 --- a/examples/schema-catalog/src/schemas/components-layout-card/profile-detail-card.json +++ b/examples/schema-catalog/src/schemas/components-layout-card/profile-detail-card.json @@ -124,7 +124,7 @@ "label": "Delete", "variant": "destructive", "size": "sm", - "icon": "trash-2" + "icon": "trash" } ] } diff --git a/examples/schema-catalog/test/svg-host-dom-leak-5632.test.tsx b/examples/schema-catalog/test/svg-host-dom-leak-5632.test.tsx index eb4b4db607..0c4cf69d88 100644 --- a/examples/schema-catalog/test/svg-host-dom-leak-5632.test.tsx +++ b/examples/schema-catalog/test/svg-host-dom-leak-5632.test.tsx @@ -314,13 +314,23 @@ describe('schema-catalog — no SVG-hosted renderer leaks an authored prop to th // `SpinnerSchema.size` is an ENUM consumed through `sizeClasses`. Spreading // it handed the string to lucide's numeric `size` prop, which is how // `width="lg" height="lg"` reached every sized spinner in the catalog. - // `class` carries lucide's own two classes AND both of this renderer's — + // `class` carries lucide's own classes AND both of this renderer's — // `animate-spin` and the size class. Before this slice it carried ONLY // lucide's: the spread's `className` overrode the computed one, so a // `ui:spinner` rendered through `SchemaRenderer` did not spin. + // + // `lucide-loader-2` is lucide's own RETIRED-ALIAS class, not a leak. It + // appeared when `createLucideIcon` was reshaped to take an icon-data object + // carrying `aliases` (lucide-react 1.43.0; absent in 1.31.0, where icon + // modules have no `aliases` field at all) and it now emits one class per + // alias. Measured on the installed artifact: 248 of 1818 icon modules carry + // aliases, so any icon with one gains a class here. The assertion stays + // EXACT on purpose — this list is what catches an authored prop reaching + // the DOM, which is the whole point of objectui#5632; loosening it to a + // substring match would retire the check rather than update it. expect(attributesOf({ type: 'spinner', size: 'lg' })).toEqual([ 'aria-hidden="true"', - 'class="lucide lucide-loader-circle animate-spin h-8 w-8"', + 'class="lucide lucide-loader-circle lucide-loader-2 animate-spin h-8 w-8"', 'data-obj-type="spinner"', 'fill="none"', 'height="24"', diff --git a/packages/app-shell/package.json b/packages/app-shell/package.json index 040a7c5c90..75a219e2bc 100644 --- a/packages/app-shell/package.json +++ b/packages/app-shell/package.json @@ -86,7 +86,7 @@ "@objectstack/spec": "^17.0.0", "@sentry/react": "^10.70.0", "jsonc-parser": "^3.3.1", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "qrcode": "^1.5.4", "sonner": "^2.0.8", "zod": "^4.4.3" diff --git a/packages/cli/src/utils/app-generator.ts b/packages/cli/src/utils/app-generator.ts index 5e6c26238d..50706afdfa 100644 --- a/packages/cli/src/utils/app-generator.ts +++ b/packages/cli/src/utils/app-generator.ts @@ -201,7 +201,7 @@ function buildRoutedAppDependencies(): Record { react: REACT_RANGE, 'react-dom': REACT_RANGE, 'react-router-dom': '^7.18.2', - 'lucide-react': '^1.31.0', + 'lucide-react': '^1.43.0', ...Object.fromEntries(PLATFORM_RUNTIME_PACKAGES.map((name) => [name, range])) }; } diff --git a/packages/components/package.json b/packages/components/package.json index 97f1edb4f7..66f5b433c7 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -72,7 +72,7 @@ "date-fns": "^4.4.0", "embla-carousel-react": "^8.6.0", "input-otp": "^1.4.2", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "next-themes": "^0.4.6", "react-day-picker": "^10.0.1", "react-hook-form": "^7.85.0", diff --git a/packages/components/src/renderers/action/action-bar.tsx b/packages/components/src/renderers/action/action-bar.tsx index e986327a76..5cf73ec29d 100644 --- a/packages/components/src/renderers/action/action-bar.tsx +++ b/packages/components/src/renderers/action/action-bar.tsx @@ -30,7 +30,7 @@ * location: 'record_header', * actions: [ * { name: 'mark_complete', label: 'Mark Complete', type: 'script', icon: 'check', component: 'action:button' }, - * { name: 'delete', label: 'Delete', type: 'api', icon: 'trash-2', variant: 'destructive', component: 'action:button' }, + * { name: 'delete', label: 'Delete', type: 'api', icon: 'trash', variant: 'destructive', component: 'action:button' }, * ], * }} /> * ``` diff --git a/packages/components/src/renderers/form/__tests__/button-shared-icon-resolver.test.tsx b/packages/components/src/renderers/form/__tests__/button-shared-icon-resolver.test.tsx index 20090a0eb4..694a340c12 100644 --- a/packages/components/src/renderers/form/__tests__/button-shared-icon-resolver.test.tsx +++ b/packages/components/src/renderers/form/__tests__/button-shared-icon-resolver.test.tsx @@ -142,8 +142,21 @@ describe('ui:button icon resolution (objectui#5993)', () => { // The single entry both maps carried. It is the one input whose answer // would have changed had the dedupe dropped the alias on the floor. const button = renderButton({ icon: 'home' }); - expect(button.querySelector('svg.lucide-house')).not.toBeNull(); - expect(button.querySelector('svg.lucide-home')).toBeNull(); + const house = button.querySelector('svg.lucide-house'); + expect(house).not.toBeNull(); + // The negative half used to read `querySelector('svg.lucide-home')` is + // null. That form RETIRED on lucide-react 1.43.0, which reshaped + // `createLucideIcon` to take an icon-data object carrying `aliases` and + // to emit one class PER ALIAS: `house` now renders + // `class="lucide lucide-house lucide-home ..."` itself, so the class no + // longer says which glyph was drawn (measured: 248 of 1818 icon modules + // carry aliases; 1.31.0 icon modules have no `aliases` field at all). + // The discriminating form is below and still fires for the same defect: + // `Home` is not a key of the runtime record, so had the rename been + // dropped this button would render NO glyph at all, and any SECOND glyph + // would be a different element from `house`. + expect(button.querySelectorAll('svg')).toHaveLength(1); + expect(button.querySelector('svg.lucide-home')).toBe(house); }); it('renders NO glyph for a retired spelling — the RECORD surface, not a fallback', () => { diff --git a/packages/fields/package.json b/packages/fields/package.json index 8177869d7c..bce0c789fd 100644 --- a/packages/fields/package.json +++ b/packages/fields/package.json @@ -37,7 +37,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "@objectstack/spec": "^17.0.0", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "react-markdown": "^10.1.0", "rehype-sanitize": "^6.0.0", "remark-gfm": "^4.0.1" diff --git a/packages/layout/package.json b/packages/layout/package.json index e4a160cb43..36bd16acdc 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -31,7 +31,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "@objectstack/spec": "^17.0.0", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "react": "19.2.8" }, "peerDependencies": { diff --git a/packages/plugin-ai/package.json b/packages/plugin-ai/package.json index 6dbc065a9b..5e6cc52836 100644 --- a/packages/plugin-ai/package.json +++ b/packages/plugin-ai/package.json @@ -33,7 +33,7 @@ "@object-ui/components": "workspace:*", "@object-ui/core": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "devDependencies": { "@types/node": "^26.2.0", diff --git a/packages/plugin-calendar/package.json b/packages/plugin-calendar/package.json index 118b0d3358..de57bad09e 100644 --- a/packages/plugin-calendar/package.json +++ b/packages/plugin-calendar/package.json @@ -39,7 +39,7 @@ "@object-ui/plugin-detail": "workspace:*", "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-charts/package.json b/packages/plugin-charts/package.json index 8a6eabeddd..378af866e3 100644 --- a/packages/plugin-charts/package.json +++ b/packages/plugin-charts/package.json @@ -36,7 +36,7 @@ "@object-ui/i18n": "workspace:*", "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "recharts": "^3.10.1" }, "peerDependencies": { diff --git a/packages/plugin-chatbot/package.json b/packages/plugin-chatbot/package.json index 3af0bb33a4..811e2aba30 100644 --- a/packages/plugin-chatbot/package.json +++ b/packages/plugin-chatbot/package.json @@ -42,7 +42,7 @@ "@radix-ui/react-use-controllable-state": "^1.2.6", "ai": "^7.0.65", "class-variance-authority": "^0.7.1", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "motion": "^13.2.0", "nanoid": "^6.0.1", "shiki": "^4.4.2", diff --git a/packages/plugin-dashboard/package.json b/packages/plugin-dashboard/package.json index 688c9d7dbc..2c18eb57fa 100644 --- a/packages/plugin-dashboard/package.json +++ b/packages/plugin-dashboard/package.json @@ -31,7 +31,7 @@ "@object-ui/permissions": "workspace:*", "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "react": "19.2.8" }, "peerDependencies": { diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index c92439fe2a..90bb62c4ba 100644 --- a/packages/plugin-designer/package.json +++ b/packages/plugin-designer/package.json @@ -42,7 +42,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "clsx": "^2.1.1", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "sonner": "^2.0.8", "tailwind-merge": "^3.6.0" }, diff --git a/packages/plugin-detail/package.json b/packages/plugin-detail/package.json index b80090bc89..d59f3460f5 100644 --- a/packages/plugin-detail/package.json +++ b/packages/plugin-detail/package.json @@ -33,7 +33,7 @@ "dependencies": { "@object-ui/i18n": "workspace:*", "@objectstack/spec": "^17.1.0", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "@object-ui/components": "workspace:^", diff --git a/packages/plugin-detail/src/DetailView.tsx b/packages/plugin-detail/src/DetailView.tsx index 6e2fdb7215..76ef9d121c 100644 --- a/packages/plugin-detail/src/DetailView.tsx +++ b/packages/plugin-detail/src/DetailView.tsx @@ -926,7 +926,7 @@ export const DetailView: React.FC = ({ items.push({ name: 'sys_delete', label: t('detail.delete'), - icon: 'trash-2', + icon: 'trash', type: 'script', variant: 'destructive', tags: ['separator-before'], diff --git a/packages/plugin-form/package.json b/packages/plugin-form/package.json index c3b40d9de3..7e271c3b68 100644 --- a/packages/plugin-form/package.json +++ b/packages/plugin-form/package.json @@ -29,7 +29,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "@objectstack/spec": "^17.0.0", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-gantt/package.json b/packages/plugin-gantt/package.json index bfe2a7592e..6d3fe98911 100644 --- a/packages/plugin-gantt/package.json +++ b/packages/plugin-gantt/package.json @@ -40,7 +40,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "@objectstack/spec": "^17.0.0", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "sonner": "^2.0.8" }, "peerDependencies": { diff --git a/packages/plugin-grid/package.json b/packages/plugin-grid/package.json index 4cb92b5682..e56042c669 100644 --- a/packages/plugin-grid/package.json +++ b/packages/plugin-grid/package.json @@ -33,7 +33,7 @@ "@objectstack/spec": "^17.0.0", "@tanstack/react-virtual": "^3.14.9", "exceljs": "^4.4.0", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-kanban/package.json b/packages/plugin-kanban/package.json index f22f7bff86..117eeb3f86 100644 --- a/packages/plugin-kanban/package.json +++ b/packages/plugin-kanban/package.json @@ -44,7 +44,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "@tanstack/react-virtual": "^3.14.9", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-list/package.json b/packages/plugin-list/package.json index d4b415978e..48abb73fc9 100644 --- a/packages/plugin-list/package.json +++ b/packages/plugin-list/package.json @@ -31,7 +31,7 @@ "lint": "eslint ." }, "dependencies": { - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "@object-ui/components": "workspace:^", diff --git a/packages/plugin-report/package.json b/packages/plugin-report/package.json index e3857bed11..d84629393c 100644 --- a/packages/plugin-report/package.json +++ b/packages/plugin-report/package.json @@ -32,7 +32,7 @@ "@object-ui/i18n": "workspace:*", "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-tree/package.json b/packages/plugin-tree/package.json index 2419150c27..79bd7b6cc2 100644 --- a/packages/plugin-tree/package.json +++ b/packages/plugin-tree/package.json @@ -38,7 +38,7 @@ "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", "@objectstack/spec": "^17.0.0", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-view/package.json b/packages/plugin-view/package.json index e34a92e5e8..ae430ecce2 100644 --- a/packages/plugin-view/package.json +++ b/packages/plugin-view/package.json @@ -34,7 +34,7 @@ "@object-ui/types": "workspace:*", "@objectstack/spec": "^17.0.0", "class-variance-authority": "^0.7.1", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/runner/package.json b/packages/runner/package.json index aceca9209c..a2fe2f6439 100644 --- a/packages/runner/package.json +++ b/packages/runner/package.json @@ -28,7 +28,7 @@ "@object-ui/plugin-kanban": "workspace:*", "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0", + "lucide-react": "^1.43.0", "react": "19.2.8", "react-dom": "19.2.8", "tailwindcss-animate": "^1.0.7" diff --git a/packages/types/src/objectql.ts b/packages/types/src/objectql.ts index 9b32d3525d..7c92be7255 100644 --- a/packages/types/src/objectql.ts +++ b/packages/types/src/objectql.ts @@ -481,7 +481,7 @@ export interface BulkActionDef { name: string; /** Human-readable label shown on the button + dialog header. */ label?: string; - /** Lucide icon name (e.g. 'user-check', 'trash-2'); falls back to a generic icon. */ + /** Lucide icon name (e.g. 'user-check', 'trash'); falls back to a generic icon. */ icon?: string; /** Visual treatment of the action button. */ variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'outline'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db6de1c969..3652690fd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -317,8 +317,8 @@ importers: specifier: ^20.11.2 version: 20.11.2 lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) postcss: specifier: ^8.5.26 version: 8.5.28 @@ -417,16 +417,16 @@ importers: version: 17.4.0(ai@7.0.65(zod@4.4.3)) fumadocs-core: specifier: 16.15.4 - version: 16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3) + version: 16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3) fumadocs-mdx: specifier: 15.2.3 - version: 15.2.3(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(vite@8.2.2(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) + version: 15.2.3(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(vite@8.2.2(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) fumadocs-ui: specifier: 16.15.4 - version: 16.15.4(@types/mdx@2.0.14)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3) + version: 16.15.4(@types/mdx@2.0.14)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) next: specifier: 16.3.3 version: 16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -786,8 +786,8 @@ importers: specifier: ^3.3.1 version: 3.3.1 lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) qrcode: specifier: ^1.5.4 version: 1.5.4 @@ -1099,8 +1099,8 @@ importers: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -1283,8 +1283,8 @@ importers: specifier: ^17.0.0 version: 17.4.0(ai@7.0.65(zod@4.4.3)) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1387,8 +1387,8 @@ importers: specifier: ^17.0.0 version: 17.4.0(ai@7.0.65(zod@4.4.3)) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1471,8 +1471,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1529,8 +1529,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1581,8 +1581,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1654,8 +1654,8 @@ importers: specifier: ^0.7.1 version: 0.7.1 lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) motion: specifier: ^13.2.0 version: 13.2.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -1730,8 +1730,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1800,8 +1800,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1849,8 +1849,8 @@ importers: specifier: ^17.1.0 version: 17.4.0(ai@7.0.65(zod@4.4.3)) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -1974,8 +1974,8 @@ importers: specifier: ^17.0.0 version: 17.4.0(ai@7.0.65(zod@4.4.3)) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2035,8 +2035,8 @@ importers: specifier: ^17.0.0 version: 17.4.0(ai@7.0.65(zod@4.4.3)) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2102,8 +2102,8 @@ importers: specifier: ^4.4.0 version: 4.4.0 lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2184,8 +2184,8 @@ importers: specifier: ^3.14.9 version: 3.14.9(react-dom@19.2.8(react@19.2.8))(react@19.2.8) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2233,8 +2233,8 @@ importers: packages/plugin-list: dependencies: lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2431,8 +2431,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2556,8 +2556,8 @@ importers: specifier: ^17.0.0 version: 17.4.0(ai@7.0.65(zod@4.4.3)) lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2626,8 +2626,8 @@ importers: specifier: ^0.7.1 version: 0.7.1 lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -2737,8 +2737,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.31.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react: specifier: 19.2.8 version: 19.2.8 @@ -8739,13 +8739,8 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lucide-react@1.31.0: - resolution: {integrity: sha512-G8u2eEtoHUnUa9f8lbvqDhCiORMnYLdUEo06EEG9MQvHQrInKcX3Pa2TH39MM5qyzRcWETxB0+aOwAPI1g1kEg==} - peerDependencies: - react: 19.2.8 - - lucide-react@1.35.0: - resolution: {integrity: sha512-yXCCWxGFYT6bLIPYC4SY6fPQPRs/d797rRIue+J9XP2Td6vQvD53gaQRBCnIVT1kTQRHtAtxlfOQNWAuIF8ELg==} + lucide-react@1.43.0: + resolution: {integrity: sha512-ubtnda1fVK5ky0PNEpOmB0wiwhpZUyJiol4K14KCm+QKvuCkfUu54Et/rIjyupJpwiJ5Hg+BLQE86/GEsS+IgQ==} peerDependencies: react: 19.2.8 @@ -16251,7 +16246,7 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.7.1 - fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3): + fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3): dependencies: '@fumari/image-size': 0.1.0 estree-util-value-to-estree: 3.5.0 @@ -16279,7 +16274,7 @@ snapshots: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.18 - lucide-react: 1.31.0(react@19.2.8) + lucide-react: 1.43.0(react@19.2.8) next: 16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) @@ -16288,14 +16283,14 @@ snapshots: transitivePeerDependencies: - supports-color - fumadocs-mdx@15.2.3(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(vite@8.2.2(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)): + fumadocs-mdx@15.2.3(@types/mdast@4.0.4)(@types/mdx@2.0.14)(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(rolldown@1.2.7)(vite@8.2.2(@types/node@26.2.0)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 chokidar: 5.0.0 esbuild: 0.28.2 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3) + fumadocs-core: 16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3) github-slugger: 2.0.0 magic-string: 1.2.0 mdast-util-mdx: 3.0.0 @@ -16321,7 +16316,7 @@ snapshots: transitivePeerDependencies: - supports-color - fumadocs-ui@16.15.4(@types/mdx@2.0.14)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3): + fumadocs-ui@16.15.4(@types/mdx@2.0.14)(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(fumadocs-core@16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(tailwindcss@4.3.3): dependencies: '@fuma-translate/react': 1.0.2(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) '@fumadocs/tailwind': 0.1.1(tailwindcss@4.3.3) @@ -16337,8 +16332,8 @@ snapshots: '@radix-ui/react-tabs': 1.1.21(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) class-variance-authority: 0.7.1 cnfast: 0.1.0 - fumadocs-core: 16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.31.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3) - lucide-react: 1.35.0(react@19.2.8) + fumadocs-core: 16.15.4(@mdx-js/mdx@3.1.1)(@tanstack/react-router@1.170.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(@types/estree-jsx@1.0.5)(@types/hast@3.0.5)(@types/mdast@4.0.4)(@types/react@19.2.18)(lucide-react@1.43.0(react@19.2.8))(next@16.3.3(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(@playwright/test@1.62.1)(@types/node@26.2.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react-dom@19.2.8(react@19.2.8))(react-router@7.18.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(react@19.2.8)(zod@4.4.3) + lucide-react: 1.43.0(react@19.2.8) motion: 13.1.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8) next-themes: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 @@ -17229,11 +17224,7 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@1.31.0(react@19.2.8): - dependencies: - react: 19.2.8 - - lucide-react@1.35.0(react@19.2.8): + lucide-react@1.43.0(react@19.2.8): dependencies: react: 19.2.8 diff --git a/scripts/__tests__/doc-version-claims.test.ts b/scripts/__tests__/doc-version-claims.test.ts index 3b9b9ce4d6..90b49b9136 100644 --- a/scripts/__tests__/doc-version-claims.test.ts +++ b/scripts/__tests__/doc-version-claims.test.ts @@ -1175,7 +1175,7 @@ const KNOWN_CLAIMS: KnownClaim[] = [ // Reads as a `react` claim and is not one, for the same reason the plugins.md // `@vitejs/plugin-react` entry does: `React` is a TOOLCHAIN word and the `-` before it // is a word boundary, so the recorded literal is the TAIL of `lucide-react`. - claim: 'react": "^1.31.0', + claim: 'react": "^1.43.0', kind: 'anchored', skeletonDep: 'lucide-react', why: 'A runtime dependency of an IN-WORKSPACE plugin skeleton - the block is named @object-ui/plugin-my-widget, takes all four @object-ui dependencies at workspace:* and builds with vite build, so it resolves in this workspace and nowhere else. Anchor measured at the objectui#4981 cut: 16 of the 19 packages/plugin- manifests declare lucide-react and all 16 say ^1.31.0 (23 workspace-wide, unanimous). It read ^0.400.0, which is worse than an ordinary fossil: a 0.x caret cannot cross a minor, so that range resolves inside 0.400.x forever - the trap objectui#3755 removed from create-plugin\'s own dependency map. Recorded fork, not acted on here: #3755 DELETED its lucide entry rather than re-anchoring it, on the rule that this repo declares an icon library only where it imports one, and no code on this page imports one. Deleting the line is the alternative disposition; it would retire this entry with it.', diff --git a/scripts/check-eager-closure-budget.mjs b/scripts/check-eager-closure-budget.mjs index 1e108dfdbe..197723b68d 100644 --- a/scripts/check-eager-closure-budget.mjs +++ b/scripts/check-eager-closure-budget.mjs @@ -635,6 +635,48 @@ export const REGRESSION_THIS_GATE_MUST_CATCH_BYTES = 89 * 1024; * itself. Nothing else moved either — not the other three ceilings, not the * aggregate, not {@link BASELINE}. One ceiling and its baseline, in one commit. * + * ## Why `ui-components` moved UP — lucide-react 1.31.0 to 1.43.0 + * + * Measured on this branch's console build: 410,904 bytes, 11,904 over the + * 399,000 that stood. The cause is the icon library growing, and it was ruled + * out as a tree-shaking regression BEFORE this number moved, because "the + * bundler stopped shaking" and "the dependency got bigger" want opposite fixes + * and only one of them is a ceiling. + * + * What was measured, and the control that fired with it: + * + * - ALL 1,818 keys of lucide 1.43.0's runtime `icons` record appear verbatim + * in the built `ui-components` chunk. Not most — all. Of 1.31.0's 1,767 + * keys, 1,766 appear in that same chunk; the one absent is `Trash2`, the + * key lucide retired, which is what tells you the probe discriminates + * rather than matching everything. A fabricated key is not found. + * - So icons do not tree-shake here and did not tree-shake before either. + * That is DELIBERATE, not a defect: `renderers/action/resolve-icon.ts` + * imports the whole `icons` record because string lookups are resolved + * against record MEMBERSHIP, which is the seam objectui#5935 consolidated + * onto and `check-lucide-icon-record-names.mjs` enforces. Moving that seam + * to `lucide-react/dynamic.mjs` to shed the bytes would resolve names the + * record deliberately drops (`trash-2`, `edit`, `smile`), which is the + * exact failure that gate's header calls worse than having no gate. + * - The library itself is bigger, two independent ways. Same-artwork control: + * `pencil.mjs`, whose icon node is byte-identical across the two versions, + * goes 455 to 522 bytes, because 1.43.0 reshaped every icon module into an + * `__iconData` object carrying `name`, `size` and `aliases`. And there are + * more icons: the whole icon directory, licence headers stripped and + * gzipped, goes 166,705 to 176,968 bytes (+10,263, +6.2%) from 1.31.0 to + * 1.43.0 — the same order as the chunk delta this raise absorbs. + * + * ⇒ the bytes are not avoidable from the import side, so the ceiling moves. + * + * Headroom 9,096 bytes = 0.10x {@link REGRESSION_THIS_GATE_MUST_CATCH_BYTES} — + * the proportion objectui#7399 re-pinned THIS key to, chosen deliberately over + * "just enough to pass". A line left with almost no headroom is the defect + * objectui#8816 records, and this key was the tightest of the four before this + * raise. ⛔ {@link REGRESSION_THIS_GATE_MUST_CATCH_BYTES} did not move, and + * nothing else moved: not the other three ceilings, not the aggregate, not + * {@link BASELINE}. The aggregate was re-read on the same build and PASSES on + * its own — 3,589,068 of 3,597,000, headroom 7,932 bytes — so it is left alone. + * * ## Raising one * * Same discipline as {@link MAX_EAGER_CLOSURE_GZIP_BYTES}, and the same two @@ -663,7 +705,13 @@ export const PER_CHUNK_GZIP_CEILINGS = Object.freeze({ // REGRESSION_THIS_GATE_MUST_CATCH_BYTES on `3f775eeb8` — the loosest of the // four. See "Why `framework` moved UP" above for what that costs. framework: 100_000, - 'ui-components': 399_000, + // Raised for lucide-react 1.31.0 -> 1.43.0: the icons record ships whole by + // design and the library grew both in icon count and in per-icon metadata. + // Ruled out as a tree-shaking regression first — see "Why `ui-components` + // moved UP" above for the measurement and its controls. Headroom 9,096 bytes + // = 0.10x REGRESSION_THIS_GATE_MUST_CATCH_BYTES, the proportion objectui#7399 + // re-pinned this key to. + 'ui-components': 420_000, }); /** @@ -778,7 +826,10 @@ export const PER_CHUNK_BASELINE = Object.freeze({ // BASELINE's. Moved with the ceiling in the same commit, per the maintainer // ruling of 2026-09-08 and the rule stated under "Raising one". framework: 72_245, - 'ui-components': 391_095, + // Moved with its ceiling in the same commit, per the rule stated under + // "Raising one": this branch's own console build of the lucide-react 1.43.0 + // bump. ⛔ Not `2c8474c04`'s build, which measured the 1.31.0 icon set. + 'ui-components': 410_904, }); /** diff --git a/skills/objectui/guides/plugin-development.md b/skills/objectui/guides/plugin-development.md index 73cd506710..9f00484237 100644 --- a/skills/objectui/guides/plugin-development.md +++ b/skills/objectui/guides/plugin-development.md @@ -379,7 +379,7 @@ double-displays it. "@object-ui/core": "workspace:*", "@object-ui/react": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0",