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..85d6abb688 --- /dev/null +++ b/.changeset/lucide-react-1-43-0-retired-trash2.md @@ -0,0 +1,61 @@ +--- +'@object-ui/app-shell': patch +'@object-ui/cli': patch +'@object-ui/components': patch +'@object-ui/console': patch +'@object-ui/fields': patch +'@object-ui/layout': patch +'@object-ui/plugin-ai': patch +'@object-ui/plugin-calendar': patch +'@object-ui/plugin-charts': patch +'@object-ui/plugin-chatbot': patch +'@object-ui/plugin-dashboard': patch +'@object-ui/plugin-designer': patch +'@object-ui/plugin-detail': patch +'@object-ui/plugin-form': patch +'@object-ui/plugin-gantt': patch +'@object-ui/plugin-grid': patch +'@object-ui/plugin-kanban': patch +'@object-ui/plugin-list': patch +'@object-ui/plugin-report': patch +'@object-ui/plugin-tree': patch +'@object-ui/plugin-view': patch +'@object-ui/runner': patch +'@object-ui/types': patch +--- + +Move `lucide-react` from `^1.31.0` to `^1.43.0` in every package that declares it, and +repair what the jump breaks, so icons resolved from a STRING keep drawing a glyph. + +Measured once against the installed 1.43.0 artifact when this change was made; nothing in +the repository re-derives these readings. Across the jump lucide removes no runtime export, +no public type name and no `lucide-react/dynamic.mjs` name, and every name this repository +imports from `lucide-react` resolves. Exactly one key leaves the runtime `icons` record: +`Trash2`, retired in favour of `trash`. + +What a user sees change: + +- Icons the lazy icon seam draws (`resolveIcon`, objectui#9251) get their path data again. + lucide 1.43.0 icon modules export their path data inside `__iconData` and no longer + export `__iconNode`; the seam now reads both. Reading only `__iconNode` against 1.43.0 + leaves every such glyph an empty box, with nothing thrown or logged. +- `DetailView`'s delete action and three schema-catalog examples spell their icon + `trash`, not `trash-2`, so they keep resolving. The glyph is unchanged: 1.43.0's `trash` + path data is byte-identical to the `trash-2` path data of 1.31.0 and 1.35.0. Anything + that already authored `trash` now draws that same artwork, because lucide moved it under + the `trash` name; a few other glyphs were also redrawn upstream. +- Icons imported as COMPONENTS carry lucide 1.43.0's own classes: one class per declared + alias (a spinner renders `class="lucide lucide-loader-circle lucide-loader-2 ..."`), and + no longer the class lucide used to derive from the PascalCase key where that differs + (`ArrowDown01` no longer carries `lucide-arrow-down01`). The canonical + `lucide-` class is still there, so a `.lucide-loader-circle` selector still + matches. +- Icons resolved from a STRING through the seam keep the classes they had: `lucide`, the + canonical `lucide-` class and the key-derived class. They do not carry + lucide's per-alias classes. That is a maintainer ruling (objectui#8941, option C): the + alias list lives only inside each lazily loaded icon module, and it was not moved into + the eager name list. A selector that targets an alias class matches a component-imported + icon and not a string-resolved one. This also dates the example in the objectui#9251 + entry: `trash-2` no longer resolves as a string, so no seam-drawn glyph carries + `lucide-trash2 lucide-trash-2`; a digit-bearing name that still resolves, such as + `arrow-down-0-1`, carries `lucide-arrow-down01 lucide-arrow-down-0-1`. diff --git a/apps/console/package.json b/apps/console/package.json index cc83644e79..ab23b4d2e2 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 bc605b6f7a..5f281fc653 100644 --- a/content/docs/api/schema-reference.md +++ b/content/docs/api/schema-reference.md @@ -687,7 +687,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 98af994e66..1c6c02b156 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 8d124f553f..50ae1ff976 100644 --- a/packages/app-shell/package.json +++ b/packages/app-shell/package.json @@ -86,7 +86,7 @@ "@objectstack/spec": "^17.3.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 2cf41a753b..cc202c9a0a 100644 --- a/packages/cli/src/utils/app-generator.ts +++ b/packages/cli/src/utils/app-generator.ts @@ -205,7 +205,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 b7713ff0e8..0b1195034c 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/lib/lucide-record-icon-names.ts b/packages/components/src/lib/lucide-record-icon-names.ts index c4704a906e..6ae4f17df7 100644 --- a/packages/components/src/lib/lucide-record-icon-names.ts +++ b/packages/components/src/lib/lucide-record-icon-names.ts @@ -20,8 +20,9 @@ * Each entry is `PascalCaseKey:kebab-module-name`. The first is what the seam * looks a tokenised author-supplied name up by; the second is what * `DynamicIcon` loads. ⛔ The second is NOT derivable from the first by a - * regex — 95 of these keys carry digits that lucide splits and a conversion - * does not (`Trash2` is `trash-2`, `ArrowDown01` is `arrow-down-0-1`). + * regex — many of these keys carry digits or leading initials that lucide + * splits and a conversion does not (`ArrowDown01` is `arrow-down-0-1`, + * `Axis3d` is `axis-3d`). * * ⛔ This list is deliberately NOT `Object.keys(icons)`. That derivation is the * eager record written a second way: indexing the record pulls every icon @@ -29,4 +30,4 @@ */ export const LUCIDE_RECORD_ICON_NAME_TABLE = - 'AArrowDown:a-arrow-down,AArrowUp:a-arrow-up,ALargeSmall:a-large-small,Accessibility:accessibility,Activity:activity,Ad:ad,AirVent:air-vent,Airplay:airplay,AlarmClock:alarm-clock,AlarmClockCheck:alarm-clock-check,AlarmClockMinus:alarm-clock-minus,AlarmClockOff:alarm-clock-off,AlarmClockPlus:alarm-clock-plus,AlarmSmoke:alarm-smoke,Album:album,AlignCenterHorizontal:align-center-horizontal,AlignCenterVertical:align-center-vertical,AlignEndHorizontal:align-end-horizontal,AlignEndVertical:align-end-vertical,AlignHorizontalDistributeCenter:align-horizontal-distribute-center,AlignHorizontalDistributeEnd:align-horizontal-distribute-end,AlignHorizontalDistributeStart:align-horizontal-distribute-start,AlignHorizontalJustifyCenter:align-horizontal-justify-center,AlignHorizontalJustifyEnd:align-horizontal-justify-end,AlignHorizontalJustifyStart:align-horizontal-justify-start,AlignHorizontalSpaceAround:align-horizontal-space-around,AlignHorizontalSpaceBetween:align-horizontal-space-between,AlignStartHorizontal:align-start-horizontal,AlignStartVertical:align-start-vertical,AlignVerticalDistributeCenter:align-vertical-distribute-center,AlignVerticalDistributeEnd:align-vertical-distribute-end,AlignVerticalDistributeStart:align-vertical-distribute-start,AlignVerticalJustifyCenter:align-vertical-justify-center,AlignVerticalJustifyEnd:align-vertical-justify-end,AlignVerticalJustifyStart:align-vertical-justify-start,AlignVerticalSpaceAround:align-vertical-space-around,AlignVerticalSpaceBetween:align-vertical-space-between,Ambulance:ambulance,Ampersand:ampersand,Ampersands:ampersands,Amphora:amphora,Anchor:anchor,Angle:angle,Antenna:antenna,Anvil:anvil,Aperture:aperture,AppWindow:app-window,AppWindowMac:app-window-mac,Apple:apple,Archive:archive,ArchiveRestore:archive-restore,ArchiveX:archive-x,Armchair:armchair,ArrowBigDown:arrow-big-down,ArrowBigDownDash:arrow-big-down-dash,ArrowBigLeft:arrow-big-left,ArrowBigLeftDash:arrow-big-left-dash,ArrowBigRight:arrow-big-right,ArrowBigRightDash:arrow-big-right-dash,ArrowBigUp:arrow-big-up,ArrowBigUpDash:arrow-big-up-dash,ArrowDown:arrow-down,ArrowDown01:arrow-down-0-1,ArrowDown10:arrow-down-1-0,ArrowDownAZ:arrow-down-a-z,ArrowDownFromLine:arrow-down-from-line,ArrowDownLeft:arrow-down-left,ArrowDownNarrowWide:arrow-down-narrow-wide,ArrowDownRight:arrow-down-right,ArrowDownToDot:arrow-down-to-dot,ArrowDownToLine:arrow-down-to-line,ArrowDownUp:arrow-down-up,ArrowDownWideNarrow:arrow-down-wide-narrow,ArrowDownZA:arrow-down-z-a,ArrowLeft:arrow-left,ArrowLeftFromLine:arrow-left-from-line,ArrowLeftRight:arrow-left-right,ArrowLeftToLine:arrow-left-to-line,ArrowRight:arrow-right,ArrowRightFromLine:arrow-right-from-line,ArrowRightLeft:arrow-right-left,ArrowRightToLine:arrow-right-to-line,ArrowUp:arrow-up,ArrowUp01:arrow-up-0-1,ArrowUp10:arrow-up-1-0,ArrowUpAZ:arrow-up-a-z,ArrowUpDown:arrow-up-down,ArrowUpFromDot:arrow-up-from-dot,ArrowUpFromLine:arrow-up-from-line,ArrowUpLeft:arrow-up-left,ArrowUpNarrowWide:arrow-up-narrow-wide,ArrowUpRight:arrow-up-right,ArrowUpToLine:arrow-up-to-line,ArrowUpWideNarrow:arrow-up-wide-narrow,ArrowUpZA:arrow-up-z-a,ArrowsUpFromLine:arrows-up-from-line,Asterisk:asterisk,Astroid:astroid,AtSign:at-sign,Atom:atom,AudioLines:audio-lines,AudioLinesOff:audio-lines-off,AudioLinesX:audio-lines-x,AudioWaveform:audio-waveform,Award:award,Axe:axe,Axis3d:axis-3d,Baby:baby,Backpack:backpack,Badge:badge,BadgeAlert:badge-alert,BadgeCent:badge-cent,BadgeCheck:badge-check,BadgeDollarSign:badge-dollar-sign,BadgeEuro:badge-euro,BadgeIndianRupee:badge-indian-rupee,BadgeInfo:badge-info,BadgeJapaneseYen:badge-japanese-yen,BadgeMinus:badge-minus,BadgePercent:badge-percent,BadgePlus:badge-plus,BadgePoundSterling:badge-pound-sterling,BadgeQuestionMark:badge-question-mark,BadgeRussianRuble:badge-russian-ruble,BadgeSwissFranc:badge-swiss-franc,BadgeTurkishLira:badge-turkish-lira,BadgeX:badge-x,BaggageClaim:baggage-claim,Balloon:balloon,Ban:ban,Banana:banana,Bandage:bandage,Banknote:banknote,BanknoteArrowDown:banknote-arrow-down,BanknoteArrowUp:banknote-arrow-up,BanknoteCheck:banknote-check,BanknoteX:banknote-x,Barcode:barcode,Barrel:barrel,Baseline:baseline,Bath:bath,Battery:battery,BatteryCharging:battery-charging,BatteryFull:battery-full,BatteryLow:battery-low,BatteryMedium:battery-medium,BatteryPlus:battery-plus,BatteryWarning:battery-warning,Beaker:beaker,Bean:bean,BeanOff:bean-off,Bed:bed,BedDouble:bed-double,BedSingle:bed-single,Beef:beef,BeefOff:beef-off,Beer:beer,BeerOff:beer-off,Bell:bell,BellCheck:bell-check,BellDot:bell-dot,BellElectric:bell-electric,BellMinus:bell-minus,BellOff:bell-off,BellPlus:bell-plus,BellRing:bell-ring,BetweenHorizontalEnd:between-horizontal-end,BetweenHorizontalStart:between-horizontal-start,BetweenVerticalEnd:between-vertical-end,BetweenVerticalStart:between-vertical-start,BicepsFlexed:biceps-flexed,Bike:bike,Binary:binary,Binoculars:binoculars,Biohazard:biohazard,Bird:bird,Birdhouse:birdhouse,Bitcoin:bitcoin,Blend:blend,Blender:blender,Blinds:blinds,Blocks:blocks,Bluetooth:bluetooth,BluetoothConnected:bluetooth-connected,BluetoothOff:bluetooth-off,BluetoothSearching:bluetooth-searching,Bold:bold,Bolt:bolt,Bomb:bomb,Bone:bone,BoneFracture:bone-fracture,Book:book,BookA:book-a,BookAlert:book-alert,BookAudio:book-audio,BookCheck:book-check,BookCopy:book-copy,BookDashed:book-dashed,BookDown:book-down,BookHeadphones:book-headphones,BookHeart:book-heart,BookImage:book-image,BookKey:book-key,BookLock:book-lock,BookMarked:book-marked,BookMinus:book-minus,BookOpen:book-open,BookOpenCheck:book-open-check,BookOpenText:book-open-text,BookPlus:book-plus,BookSearch:book-search,BookText:book-text,BookType:book-type,BookUp:book-up,BookUp2:book-up-2,BookUser:book-user,BookX:book-x,Bookmark:bookmark,BookmarkCheck:bookmark-check,BookmarkMinus:bookmark-minus,BookmarkOff:bookmark-off,BookmarkPlus:bookmark-plus,BookmarkX:bookmark-x,BoomBox:boom-box,Bot:bot,BotMessageSquare:bot-message-square,BotOff:bot-off,BottleWine:bottle-wine,BowArrow:bow-arrow,Box:box,Boxes:boxes,Braces:braces,Brackets:brackets,Brain:brain,BrainCircuit:brain-circuit,BrainCog:brain-cog,BrickWall:brick-wall,BrickWallFire:brick-wall-fire,BrickWallShield:brick-wall-shield,Briefcase:briefcase,BriefcaseBusiness:briefcase-business,BriefcaseConveyorBelt:briefcase-conveyor-belt,BriefcaseMedical:briefcase-medical,BringToFront:bring-to-front,Broccoli:broccoli,Broom:broom,BroomSparkles:broom-sparkles,Brush:brush,BrushCleaning:brush-cleaning,Bubbles:bubbles,Bug:bug,BugOff:bug-off,BugPlay:bug-play,Building:building,Building2:building-2,Bus:bus,BusFront:bus-front,Cable:cable,CableCar:cable-car,Cake:cake,CakeSlice:cake-slice,Calculator:calculator,Calendar:calendar,Calendar1:calendar-1,CalendarArrowDown:calendar-arrow-down,CalendarArrowUp:calendar-arrow-up,CalendarCheck:calendar-check,CalendarCheck2:calendar-check-2,CalendarClock:calendar-clock,CalendarCog:calendar-cog,CalendarDays:calendar-days,CalendarFold:calendar-fold,CalendarHeart:calendar-heart,CalendarMinus:calendar-minus,CalendarMinus2:calendar-minus-2,CalendarOff:calendar-off,CalendarPlus:calendar-plus,CalendarPlus2:calendar-plus-2,CalendarRange:calendar-range,CalendarSearch:calendar-search,CalendarSync:calendar-sync,CalendarX:calendar-x,CalendarX2:calendar-x-2,Calendars:calendars,Camera:camera,CameraOff:camera-off,Candy:candy,CandyCane:candy-cane,CandyOff:candy-off,Cannabis:cannabis,CannabisOff:cannabis-off,Captions:captions,CaptionsOff:captions-off,Car:car,CarBattery:car-battery,CarFront:car-front,CarTaxiFront:car-taxi-front,Caravan:caravan,CardSim:card-sim,Carrot:carrot,CaseLower:case-lower,CaseSensitive:case-sensitive,CaseUpper:case-upper,CassetteTape:cassette-tape,Cast:cast,Castle:castle,Cat:cat,Cctv:cctv,CctvOff:cctv-off,ChartArea:chart-area,ChartBar:chart-bar,ChartBarBig:chart-bar-big,ChartBarDecreasing:chart-bar-decreasing,ChartBarIncreasing:chart-bar-increasing,ChartBarStacked:chart-bar-stacked,ChartCandlestick:chart-candlestick,ChartColumn:chart-column,ChartColumnBig:chart-column-big,ChartColumnDecreasing:chart-column-decreasing,ChartColumnIncreasing:chart-column-increasing,ChartColumnStacked:chart-column-stacked,ChartGantt:chart-gantt,ChartLine:chart-line,ChartNetwork:chart-network,ChartNoAxesColumn:chart-no-axes-column,ChartNoAxesColumnDecreasing:chart-no-axes-column-decreasing,ChartNoAxesColumnIncreasing:chart-no-axes-column-increasing,ChartNoAxesCombined:chart-no-axes-combined,ChartNoAxesGantt:chart-no-axes-gantt,ChartPie:chart-pie,ChartScatter:chart-scatter,ChartSpline:chart-spline,Check:check,CheckCheck:check-check,CheckLine:check-line,ChefHat:chef-hat,Cherry:cherry,ChessBishop:chess-bishop,ChessKing:chess-king,ChessKnight:chess-knight,ChessPawn:chess-pawn,ChessQueen:chess-queen,ChessRook:chess-rook,ChevronDown:chevron-down,ChevronFirst:chevron-first,ChevronLast:chevron-last,ChevronLeft:chevron-left,ChevronRight:chevron-right,ChevronUp:chevron-up,ChevronsDown:chevrons-down,ChevronsDownUp:chevrons-down-up,ChevronsLeft:chevrons-left,ChevronsLeftRight:chevrons-left-right,ChevronsLeftRightEllipsis:chevrons-left-right-ellipsis,ChevronsRight:chevrons-right,ChevronsRightLeft:chevrons-right-left,ChevronsUp:chevrons-up,ChevronsUpDown:chevrons-up-down,Church:church,Cigarette:cigarette,CigaretteOff:cigarette-off,Circle:circle,CircleAlert:circle-alert,CircleArrowDown:circle-arrow-down,CircleArrowLeft:circle-arrow-left,CircleArrowOutDownLeft:circle-arrow-out-down-left,CircleArrowOutDownRight:circle-arrow-out-down-right,CircleArrowOutUpLeft:circle-arrow-out-up-left,CircleArrowOutUpRight:circle-arrow-out-up-right,CircleArrowRight:circle-arrow-right,CircleArrowUp:circle-arrow-up,CircleCheck:circle-check,CircleCheckBig:circle-check-big,CircleChevronDown:circle-chevron-down,CircleChevronLeft:circle-chevron-left,CircleChevronRight:circle-chevron-right,CircleChevronUp:circle-chevron-up,CircleDashed:circle-dashed,CircleDivide:circle-divide,CircleDollarSign:circle-dollar-sign,CircleDot:circle-dot,CircleDotDashed:circle-dot-dashed,CircleEllipsis:circle-ellipsis,CircleEqual:circle-equal,CircleEuro:circle-euro,CircleFadingArrowUp:circle-fading-arrow-up,CircleFadingPlus:circle-fading-plus,CircleGauge:circle-gauge,CircleMinus:circle-minus,CircleOff:circle-off,CircleParking:circle-parking,CircleParkingOff:circle-parking-off,CirclePause:circle-pause,CirclePercent:circle-percent,CirclePile:circle-pile,CirclePlay:circle-play,CirclePlus:circle-plus,CirclePoundSterling:circle-pound-sterling,CirclePower:circle-power,CircleQuestionMark:circle-question-mark,CircleSlash:circle-slash,CircleSlash2:circle-slash-2,CircleSmall:circle-small,CircleStar:circle-star,CircleStop:circle-stop,CircleUser:circle-user,CircleUserRound:circle-user-round,CircleX:circle-x,CircuitBoard:circuit-board,Citrus:citrus,Clapperboard:clapperboard,Clipboard:clipboard,ClipboardCheck:clipboard-check,ClipboardClock:clipboard-clock,ClipboardCopy:clipboard-copy,ClipboardList:clipboard-list,ClipboardMinus:clipboard-minus,ClipboardPaste:clipboard-paste,ClipboardPen:clipboard-pen,ClipboardPenLine:clipboard-pen-line,ClipboardPlus:clipboard-plus,ClipboardType:clipboard-type,ClipboardX:clipboard-x,Clock:clock,Clock1:clock-1,Clock10:clock-10,Clock11:clock-11,Clock12:clock-12,Clock2:clock-2,Clock3:clock-3,Clock4:clock-4,Clock5:clock-5,Clock6:clock-6,Clock7:clock-7,Clock8:clock-8,Clock9:clock-9,ClockAlert:clock-alert,ClockArrowDown:clock-arrow-down,ClockArrowLeft:clock-arrow-left,ClockArrowRight:clock-arrow-right,ClockArrowUp:clock-arrow-up,ClockCheck:clock-check,ClockFading:clock-fading,ClockPlus:clock-plus,ClosedCaption:closed-caption,Cloud:cloud,CloudAlert:cloud-alert,CloudBackup:cloud-backup,CloudCheck:cloud-check,CloudCog:cloud-cog,CloudDownload:cloud-download,CloudDrizzle:cloud-drizzle,CloudFog:cloud-fog,CloudHail:cloud-hail,CloudLightning:cloud-lightning,CloudMoon:cloud-moon,CloudMoonRain:cloud-moon-rain,CloudOff:cloud-off,CloudRain:cloud-rain,CloudRainWind:cloud-rain-wind,CloudSnow:cloud-snow,CloudSun:cloud-sun,CloudSunRain:cloud-sun-rain,CloudSync:cloud-sync,CloudUpload:cloud-upload,Cloudy:cloudy,Clover:clover,Club:club,Code:code,CodeXml:code-xml,Coffee:coffee,Cog:cog,Coins:coins,Columns2:columns-2,Columns3:columns-3,Columns3Cog:columns-3-cog,Columns4:columns-4,Combine:combine,Command:command,Compass:compass,Component:component,Computer:computer,ConciergeBell:concierge-bell,Cone:cone,Construction:construction,Contact:contact,ContactRound:contact-round,Container:container,Contrast:contrast,Cookie:cookie,CookingPot:cooking-pot,Copy:copy,CopyCheck:copy-check,CopyMinus:copy-minus,CopyPlus:copy-plus,CopySlash:copy-slash,CopyX:copy-x,Copyleft:copyleft,Copyright:copyright,CornerDownLeft:corner-down-left,CornerDownRight:corner-down-right,CornerLeftDown:corner-left-down,CornerLeftUp:corner-left-up,CornerRightDown:corner-right-down,CornerRightUp:corner-right-up,CornerUpLeft:corner-up-left,CornerUpRight:corner-up-right,Cpu:cpu,CreativeCommons:creative-commons,CreditCard:credit-card,Croissant:croissant,Crop:crop,Cross:cross,Crosshair:crosshair,Crown:crown,Cuboid:cuboid,CupSoda:cup-soda,Currency:currency,Cylinder:cylinder,Dam:dam,Database:database,DatabaseArrowDown:database-arrow-down,DatabaseArrowUp:database-arrow-up,DatabaseBackup:database-backup,DatabaseCheck:database-check,DatabaseMinus:database-minus,DatabasePlus:database-plus,DatabaseSearch:database-search,DatabaseX:database-x,DatabaseZap:database-zap,DecimalsArrowLeft:decimals-arrow-left,DecimalsArrowRight:decimals-arrow-right,Delete:delete,Dessert:dessert,Diameter:diameter,Diamond:diamond,DiamondMinus:diamond-minus,DiamondPercent:diamond-percent,DiamondPlus:diamond-plus,Dice1:dice-1,Dice2:dice-2,Dice3:dice-3,Dice4:dice-4,Dice5:dice-5,Dice6:dice-6,Dices:dices,Diff:diff,Disc:disc,Disc2:disc-2,Disc3:disc-3,DiscAlbum:disc-album,Divide:divide,Dna:dna,DnaOff:dna-off,Dock:dock,Dog:dog,DollarSign:dollar-sign,Donut:donut,DoorClosed:door-closed,DoorClosedLocked:door-closed-locked,DoorOpen:door-open,Dot:dot,Download:download,DraftingCompass:drafting-compass,Drama:drama,Drill:drill,Drone:drone,Droplet:droplet,DropletOff:droplet-off,Droplets:droplets,Drum:drum,Drumstick:drumstick,Dumbbell:dumbbell,Ear:ear,EarOff:ear-off,Earth:earth,EarthLock:earth-lock,Eclipse:eclipse,Egg:egg,EggFried:egg-fried,EggOff:egg-off,Eject:eject,Ellipse:ellipse,Ellipsis:ellipsis,EllipsisVertical:ellipsis-vertical,Equal:equal,EqualApproximately:equal-approximately,EqualNot:equal-not,Eraser:eraser,EthernetPort:ethernet-port,Euro:euro,EvCharger:ev-charger,Expand:expand,ExternalLink:external-link,Eye:eye,EyeClosed:eye-closed,EyeDashed:eye-dashed,EyeOff:eye-off,FaceAngry:face-angry,FaceExpressionless:face-expressionless,FaceGrinning:face-grinning,FaceNeutral:face-neutral,FaceSlightlyFrowning:face-slightly-frowning,FaceSlightlySmiling:face-slightly-smiling,FaceSlightlySmilingPlus:face-slightly-smiling-plus,Factory:factory,Fan:fan,FastForward:fast-forward,Feather:feather,Fence:fence,FerrisWheel:ferris-wheel,File:file,FileArchive:file-archive,FileAxis3d:file-axis-3d,FileBadge:file-badge,FileBox:file-box,FileBraces:file-braces,FileBracesCorner:file-braces-corner,FileChartColumn:file-chart-column,FileChartColumnIncreasing:file-chart-column-increasing,FileChartLine:file-chart-line,FileChartPie:file-chart-pie,FileCheck:file-check,FileCheckCorner:file-check-corner,FileClock:file-clock,FileCode:file-code,FileCodeCorner:file-code-corner,FileCog:file-cog,FileDiff:file-diff,FileDigit:file-digit,FileDown:file-down,FileExclamationPoint:file-exclamation-point,FileHeadphone:file-headphone,FileHeart:file-heart,FileImage:file-image,FileInput:file-input,FileKey:file-key,FileLock:file-lock,FileMinus:file-minus,FileMinusCorner:file-minus-corner,FileMusic:file-music,FileOutput:file-output,FilePen:file-pen,FilePenLine:file-pen-line,FilePlay:file-play,FilePlus:file-plus,FilePlusCorner:file-plus-corner,FileQuestionMark:file-question-mark,FileScan:file-scan,FileSearch:file-search,FileSearchCorner:file-search-corner,FileSignal:file-signal,FileSliders:file-sliders,FileSpreadsheet:file-spreadsheet,FileStack:file-stack,FileSymlink:file-symlink,FileTerminal:file-terminal,FileText:file-text,FileType:file-type,FileTypeCorner:file-type-corner,FileUp:file-up,FileUser:file-user,FileVideoCamera:file-video-camera,FileVolume:file-volume,FileX:file-x,FileXCorner:file-x-corner,Files:files,Film:film,FingerprintPattern:fingerprint-pattern,FireExtinguisher:fire-extinguisher,Fish:fish,FishOff:fish-off,FishSymbol:fish-symbol,FishingHook:fishing-hook,FishingRod:fishing-rod,Flag:flag,FlagOff:flag-off,FlagTriangleLeft:flag-triangle-left,FlagTriangleRight:flag-triangle-right,Flame:flame,FlameKindling:flame-kindling,Flashlight:flashlight,FlashlightOff:flashlight-off,FlaskConical:flask-conical,FlaskConicalOff:flask-conical-off,FlaskRound:flask-round,FlipHorizontal2:flip-horizontal-2,FlipVertical2:flip-vertical-2,Flower:flower,Flower2:flower-2,Focus:focus,FoldHorizontal:fold-horizontal,FoldVertical:fold-vertical,Folder:folder,FolderArchive:folder-archive,FolderBookmark:folder-bookmark,FolderCheck:folder-check,FolderClock:folder-clock,FolderClosed:folder-closed,FolderCode:folder-code,FolderCog:folder-cog,FolderDot:folder-dot,FolderDown:folder-down,FolderGit:folder-git,FolderGit2:folder-git-2,FolderHeart:folder-heart,FolderInput:folder-input,FolderKanban:folder-kanban,FolderKey:folder-key,FolderLock:folder-lock,FolderMinus:folder-minus,FolderOpen:folder-open,FolderOpenDot:folder-open-dot,FolderOutput:folder-output,FolderPen:folder-pen,FolderPlus:folder-plus,FolderRoot:folder-root,FolderSearch:folder-search,FolderSearch2:folder-search-2,FolderSymlink:folder-symlink,FolderSync:folder-sync,FolderTree:folder-tree,FolderUp:folder-up,FolderX:folder-x,Folders:folders,Footprints:footprints,Forklift:forklift,Form:form,Forward:forward,Frame:frame,Fuel:fuel,Fullscreen:fullscreen,Funnel:funnel,FunnelPlus:funnel-plus,FunnelX:funnel-x,Galaxy:galaxy,GalleryHorizontal:gallery-horizontal,GalleryHorizontalEnd:gallery-horizontal-end,GalleryThumbnails:gallery-thumbnails,GalleryVertical:gallery-vertical,GalleryVerticalEnd:gallery-vertical-end,Gamepad:gamepad,Gamepad2:gamepad-2,GamepadDirectional:gamepad-directional,Gauge:gauge,Gavel:gavel,Gem:gem,GeorgianLari:georgian-lari,Ghost:ghost,Gift:gift,GitBranch:git-branch,GitBranchMinus:git-branch-minus,GitBranchPlus:git-branch-plus,GitCommitHorizontal:git-commit-horizontal,GitCommitVertical:git-commit-vertical,GitCompare:git-compare,GitCompareArrows:git-compare-arrows,GitFork:git-fork,GitGraph:git-graph,GitMerge:git-merge,GitMergeConflict:git-merge-conflict,GitPullRequest:git-pull-request,GitPullRequestArrow:git-pull-request-arrow,GitPullRequestClosed:git-pull-request-closed,GitPullRequestCreate:git-pull-request-create,GitPullRequestCreateArrow:git-pull-request-create-arrow,GitPullRequestDraft:git-pull-request-draft,GlassWater:glass-water,Glasses:glasses,Globe:globe,GlobeCheck:globe-check,GlobeLock:globe-lock,GlobeOff:globe-off,GlobeX:globe-x,Goal:goal,Gpu:gpu,GraduationCap:graduation-cap,Grape:grape,Grid2x2:grid-2x2,Grid2x2Check:grid-2x2-check,Grid2x2Plus:grid-2x2-plus,Grid2x2X:grid-2x2-x,Grid3x2:grid-3x2,Grid3x3:grid-3x3,Grip:grip,GripHorizontal:grip-horizontal,GripVertical:grip-vertical,Group:group,Guitar:guitar,Ham:ham,Hamburger:hamburger,Hammer:hammer,Hand:hand,HandCoins:hand-coins,HandFist:hand-fist,HandGrab:hand-grab,HandHeart:hand-heart,HandHelping:hand-helping,HandMetal:hand-metal,HandPlatter:hand-platter,Handbag:handbag,Handshake:handshake,HardDrive:hard-drive,HardDriveDownload:hard-drive-download,HardDriveUpload:hard-drive-upload,HardHat:hard-hat,Hash:hash,HatGlasses:hat-glasses,Haze:haze,Hd:hd,HdmiPort:hdmi-port,Heading:heading,Heading1:heading-1,Heading2:heading-2,Heading3:heading-3,Heading4:heading-4,Heading5:heading-5,Heading6:heading-6,HeadphoneOff:headphone-off,Headphones:headphones,Headset:headset,Heart:heart,HeartCrack:heart-crack,HeartHandshake:heart-handshake,HeartMinus:heart-minus,HeartOff:heart-off,HeartPlus:heart-plus,HeartPulse:heart-pulse,HeartX:heart-x,Heater:heater,Helicopter:helicopter,Hexagon:hexagon,Highlighter:highlighter,Hop:hop,HopOff:hop-off,Hospital:hospital,Hotel:hotel,Hourglass:hourglass,House:house,HouseHeart:house-heart,HousePlug:house-plug,HousePlus:house-plus,HouseWifi:house-wifi,IceCreamBowl:ice-cream-bowl,IceCreamCone:ice-cream-cone,IdCard:id-card,IdCardLanyard:id-card-lanyard,Image:image,ImageDown:image-down,ImageMinus:image-minus,ImageOff:image-off,ImagePlay:image-play,ImagePlus:image-plus,ImageUp:image-up,ImageUpscale:image-upscale,Images:images,Import:import,Inbox:inbox,IndianRupee:indian-rupee,Infinity:infinity,Info:info,InspectionPanel:inspection-panel,Italic:italic,IterationCcw:iteration-ccw,IterationCw:iteration-cw,JapaneseYen:japanese-yen,Joystick:joystick,Kanban:kanban,Kayak:kayak,Key:key,KeyRound:key-round,KeySquare:key-square,Keyboard:keyboard,KeyboardMusic:keyboard-music,KeyboardOff:keyboard-off,Lamp:lamp,LampCeiling:lamp-ceiling,LampDesk:lamp-desk,LampFloor:lamp-floor,LampWallDown:lamp-wall-down,LampWallUp:lamp-wall-up,LandPlot:land-plot,Landmark:landmark,Languages:languages,Laptop:laptop,LaptopMinimal:laptop-minimal,LaptopMinimalCheck:laptop-minimal-check,Lasso:lasso,LassoSelect:lasso-select,LayerArrowDown:layer-arrow-down,LayerArrowUp:layer-arrow-up,Layers:layers,Layers2:layers-2,LayersArrowDown:layers-arrow-down,LayersArrowUp:layers-arrow-up,LayersMinus:layers-minus,LayersPlus:layers-plus,LayoutDashboard:layout-dashboard,LayoutFreeform:layout-freeform,LayoutGrid:layout-grid,LayoutList:layout-list,LayoutPanelLeft:layout-panel-left,LayoutPanelTop:layout-panel-top,LayoutTemplate:layout-template,Leaf:leaf,LeafyGreen:leafy-green,Lectern:lectern,LensConcave:lens-concave,LensConvex:lens-convex,Library:library,LibraryBig:library-big,LifeBuoy:life-buoy,Ligature:ligature,Lightbulb:lightbulb,LightbulbOff:lightbulb-off,LineDotRightHorizontal:line-dot-right-horizontal,LineSquiggle:line-squiggle,LineStyle:line-style,Link:link,Link2:link-2,Link2Off:link-2-off,List:list,ListCheck:list-check,ListChecks:list-checks,ListChevronsDownUp:list-chevrons-down-up,ListChevronsUpDown:list-chevrons-up-down,ListClock:list-clock,ListCollapse:list-collapse,ListEnd:list-end,ListFilter:list-filter,ListFilterPlus:list-filter-plus,ListIndentDecrease:list-indent-decrease,ListIndentIncrease:list-indent-increase,ListMinus:list-minus,ListMusic:list-music,ListOrdered:list-ordered,ListPlus:list-plus,ListRestart:list-restart,ListSortAscending:list-sort-ascending,ListSortDescending:list-sort-descending,ListStart:list-start,ListTodo:list-todo,ListTree:list-tree,ListVideo:list-video,ListX:list-x,Loader:loader,LoaderCircle:loader-circle,LoaderPinwheel:loader-pinwheel,Locate:locate,LocateFixed:locate-fixed,LocateOff:locate-off,Lock:lock,LockKeyhole:lock-keyhole,LockKeyholeOpen:lock-keyhole-open,LockOpen:lock-open,LogIn:log-in,LogOut:log-out,Logs:logs,Lollipop:lollipop,Luggage:luggage,Magnet:magnet,Mail:mail,MailBadge:mail-badge,MailCheck:mail-check,MailClock:mail-clock,MailMinus:mail-minus,MailOpen:mail-open,MailPlus:mail-plus,MailQuestionMark:mail-question-mark,MailSearch:mail-search,MailWarning:mail-warning,MailX:mail-x,Mailbox:mailbox,Mails:mails,Map:map,MapMinus:map-minus,MapPin:map-pin,MapPinCheck:map-pin-check,MapPinCheckInside:map-pin-check-inside,MapPinHouse:map-pin-house,MapPinMinus:map-pin-minus,MapPinMinusInside:map-pin-minus-inside,MapPinOff:map-pin-off,MapPinPen:map-pin-pen,MapPinPlus:map-pin-plus,MapPinPlusInside:map-pin-plus-inside,MapPinSearch:map-pin-search,MapPinX:map-pin-x,MapPinXInside:map-pin-x-inside,MapPinned:map-pinned,MapPlus:map-plus,Mars:mars,MarsStroke:mars-stroke,Martini:martini,Maximize:maximize,Maximize2:maximize-2,Medal:medal,Megaphone:megaphone,MegaphoneOff:megaphone-off,MemoryStick:memory-stick,Menu:menu,Merge:merge,MessageCircle:message-circle,MessageCircleCheck:message-circle-check,MessageCircleCode:message-circle-code,MessageCircleDashed:message-circle-dashed,MessageCircleHeart:message-circle-heart,MessageCircleMore:message-circle-more,MessageCircleOff:message-circle-off,MessageCirclePlus:message-circle-plus,MessageCircleQuestionMark:message-circle-question-mark,MessageCircleReply:message-circle-reply,MessageCircleWarning:message-circle-warning,MessageCircleX:message-circle-x,MessageSquare:message-square,MessageSquareCheck:message-square-check,MessageSquareCode:message-square-code,MessageSquareDashed:message-square-dashed,MessageSquareDiff:message-square-diff,MessageSquareDot:message-square-dot,MessageSquareHeart:message-square-heart,MessageSquareLock:message-square-lock,MessageSquareMore:message-square-more,MessageSquareOff:message-square-off,MessageSquarePlus:message-square-plus,MessageSquareQuote:message-square-quote,MessageSquareReply:message-square-reply,MessageSquareShare:message-square-share,MessageSquareText:message-square-text,MessageSquareWarning:message-square-warning,MessageSquareX:message-square-x,MessagesSquare:messages-square,Metronome:metronome,Mic:mic,MicAudioLines:mic-audio-lines,MicOff:mic-off,MicSignal:mic-signal,MicVocal:mic-vocal,Microchip:microchip,Microscope:microscope,Microwave:microwave,MidiPort:midi-port,Milestone:milestone,Milk:milk,MilkOff:milk-off,Minimize:minimize,Minimize2:minimize-2,Minus:minus,MirrorRectangular:mirror-rectangular,MirrorRound:mirror-round,Monitor:monitor,MonitorCheck:monitor-check,MonitorCloud:monitor-cloud,MonitorCog:monitor-cog,MonitorDot:monitor-dot,MonitorDown:monitor-down,MonitorOff:monitor-off,MonitorPause:monitor-pause,MonitorPlay:monitor-play,MonitorSmartphone:monitor-smartphone,MonitorSpeaker:monitor-speaker,MonitorStop:monitor-stop,MonitorUp:monitor-up,MonitorX:monitor-x,Moon:moon,MoonStar:moon-star,Mop:mop,MopSparkles:mop-sparkles,Mosque:mosque,Motorbike:motorbike,Mountain:mountain,MountainSnow:mountain-snow,Mouse:mouse,MouseLeft:mouse-left,MouseOff:mouse-off,MousePointer:mouse-pointer,MousePointer2:mouse-pointer-2,MousePointer2Off:mouse-pointer-2-off,MousePointerBan:mouse-pointer-ban,MousePointerClick:mouse-pointer-click,MouseRight:mouse-right,Move:move,Move3d:move-3d,MoveDiagonal:move-diagonal,MoveDiagonal2:move-diagonal-2,MoveDown:move-down,MoveDownLeft:move-down-left,MoveDownRight:move-down-right,MoveHorizontal:move-horizontal,MoveLeft:move-left,MoveRight:move-right,MoveUp:move-up,MoveUpLeft:move-up-left,MoveUpRight:move-up-right,MoveVertical:move-vertical,Music:music,Music2:music-2,Music3:music-3,Music4:music-4,Navigation:navigation,Navigation2:navigation-2,Navigation2Off:navigation-2-off,NavigationOff:navigation-off,Network:network,Newspaper:newspaper,Nfc:nfc,NonBinary:non-binary,Notebook:notebook,NotebookPen:notebook-pen,NotebookTabs:notebook-tabs,NotebookText:notebook-text,NotepadText:notepad-text,NotepadTextDashed:notepad-text-dashed,Nut:nut,NutOff:nut-off,Octagon:octagon,OctagonAlert:octagon-alert,OctagonMinus:octagon-minus,OctagonPause:octagon-pause,OctagonX:octagon-x,Omega:omega,Option:option,Orbit:orbit,Origami:origami,Package:package,Package2:package-2,PackageCheck:package-check,PackageMinus:package-minus,PackageOpen:package-open,PackagePlus:package-plus,PackageSearch:package-search,PackageX:package-x,PaintBucket:paint-bucket,PaintRoller:paint-roller,Paintbrush:paintbrush,PaintbrushVertical:paintbrush-vertical,Palette:palette,Panda:panda,PanelBottom:panel-bottom,PanelBottomClose:panel-bottom-close,PanelBottomDashed:panel-bottom-dashed,PanelBottomOpen:panel-bottom-open,PanelLeft:panel-left,PanelLeftClose:panel-left-close,PanelLeftDashed:panel-left-dashed,PanelLeftOpen:panel-left-open,PanelLeftRightDashed:panel-left-right-dashed,PanelRight:panel-right,PanelRightClose:panel-right-close,PanelRightDashed:panel-right-dashed,PanelRightOpen:panel-right-open,PanelTop:panel-top,PanelTopBottomDashed:panel-top-bottom-dashed,PanelTopClose:panel-top-close,PanelTopDashed:panel-top-dashed,PanelTopOpen:panel-top-open,PanelsLeftBottom:panels-left-bottom,PanelsRightBottom:panels-right-bottom,PanelsTopLeft:panels-top-left,PaperBag:paper-bag,Paperclip:paperclip,Parasol:parasol,Parentheses:parentheses,ParkingMeter:parking-meter,PartyPopper:party-popper,Pause:pause,PawPrint:paw-print,PcCase:pc-case,Pen:pen,PenLine:pen-line,PenOff:pen-off,PenTool:pen-tool,Pencil:pencil,PencilLine:pencil-line,PencilOff:pencil-off,PencilRuler:pencil-ruler,PencilSparkles:pencil-sparkles,Pentagon:pentagon,Percent:percent,PersonStanding:person-standing,Phi:phi,PhilippinePeso:philippine-peso,Phone:phone,PhoneCall:phone-call,PhoneForwarded:phone-forwarded,PhoneIncoming:phone-incoming,PhoneMissed:phone-missed,PhoneOff:phone-off,PhoneOutgoing:phone-outgoing,Pi:pi,Piano:piano,Pickaxe:pickaxe,PictureInPicture:picture-in-picture,PictureInPicture2:picture-in-picture-2,PiggyBank:piggy-bank,Pilcrow:pilcrow,PilcrowLeft:pilcrow-left,PilcrowRight:pilcrow-right,Pill:pill,PillBottle:pill-bottle,Pin:pin,PinOff:pin-off,Pipette:pipette,Pizza:pizza,Plane:plane,PlaneLanding:plane-landing,PlaneTakeoff:plane-takeoff,Play:play,PlayOff:play-off,Plug:plug,Plug2:plug-2,PlugZap:plug-zap,Plus:plus,PocketKnife:pocket-knife,Podium:podium,Pointer:pointer,PointerOff:pointer-off,Popcorn:popcorn,Popsicle:popsicle,PoundSterling:pound-sterling,Power:power,PowerOff:power-off,Presentation:presentation,Printer:printer,PrinterCheck:printer-check,PrinterX:printer-x,Projector:projector,Proportions:proportions,Puzzle:puzzle,Pyramid:pyramid,QrCode:qr-code,Quote:quote,Rabbit:rabbit,Radar:radar,Radiation:radiation,Radical:radical,Radio:radio,RadioOff:radio-off,RadioReceiver:radio-receiver,RadioTower:radio-tower,Radius:radius,Rainbow:rainbow,Rat:rat,Ratio:ratio,Receipt:receipt,ReceiptCent:receipt-cent,ReceiptEuro:receipt-euro,ReceiptIndianRupee:receipt-indian-rupee,ReceiptJapaneseYen:receipt-japanese-yen,ReceiptPoundSterling:receipt-pound-sterling,ReceiptRussianRuble:receipt-russian-ruble,ReceiptSwissFranc:receipt-swiss-franc,ReceiptText:receipt-text,ReceiptTurkishLira:receipt-turkish-lira,RectangleCircle:rectangle-circle,RectangleEllipsis:rectangle-ellipsis,RectangleGoggles:rectangle-goggles,RectangleHorizontal:rectangle-horizontal,RectangleVertical:rectangle-vertical,Recycle:recycle,Redo:redo,Redo2:redo-2,RedoDot:redo-dot,RefreshCcw:refresh-ccw,RefreshCcwDot:refresh-ccw-dot,RefreshCw:refresh-cw,RefreshCwOff:refresh-cw-off,Refrigerator:refrigerator,Regex:regex,RemoveFormatting:remove-formatting,Repeat:repeat,Repeat1:repeat-1,Repeat2:repeat-2,RepeatOff:repeat-off,Replace:replace,ReplaceAll:replace-all,Reply:reply,ReplyAll:reply-all,Rewind:rewind,Ribbon:ribbon,Road:road,RobotArm:robot-arm,Rocket:rocket,RockingChair:rocking-chair,RollerCoaster:roller-coaster,Rose:rose,Rotate3d:rotate-3d,RotateCcw:rotate-ccw,RotateCcwClock:rotate-ccw-clock,RotateCcwKey:rotate-ccw-key,RotateCcwSquare:rotate-ccw-square,RotateCw:rotate-cw,RotateCwFadingClock:rotate-cw-fading-clock,RotateCwSquare:rotate-cw-square,Route:route,RouteOff:route-off,Router:router,Rows2:rows-2,Rows3:rows-3,Rows4:rows-4,Rss:rss,Ruler:ruler,RulerDimensionLine:ruler-dimension-line,RussianRuble:russian-ruble,Sailboat:sailboat,Salad:salad,Sandwich:sandwich,Satellite:satellite,SatelliteDish:satellite-dish,SaudiRiyal:saudi-riyal,Save:save,SaveAll:save-all,SaveCheck:save-check,SaveOff:save-off,SavePen:save-pen,SavePlus:save-plus,Scale:scale,Scale3d:scale-3d,Scaling:scaling,Scan:scan,ScanBarcode:scan-barcode,ScanBox:scan-box,ScanEye:scan-eye,ScanFace:scan-face,ScanHeart:scan-heart,ScanLine:scan-line,ScanQrCode:scan-qr-code,ScanSearch:scan-search,ScanSquare:scan-square,ScanText:scan-text,School:school,Scissors:scissors,ScissorsLineDashed:scissors-line-dashed,Scooter:scooter,ScreenShare:screen-share,ScreenShareOff:screen-share-off,Scroll:scroll,ScrollText:scroll-text,Search:search,SearchAlert:search-alert,SearchCheck:search-check,SearchCode:search-code,SearchSlash:search-slash,SearchX:search-x,Section:section,Send:send,SendHorizontal:send-horizontal,SendToBack:send-to-back,SeparatorHorizontal:separator-horizontal,SeparatorVertical:separator-vertical,Server:server,ServerCog:server-cog,ServerCrash:server-crash,ServerOff:server-off,ServerPlus:server-plus,Settings:settings,Settings2:settings-2,Shapes:shapes,Share:share,Share2:share-2,Sheet:sheet,Shell:shell,ShelvingUnit:shelving-unit,Shield:shield,ShieldAlert:shield-alert,ShieldBan:shield-ban,ShieldCheck:shield-check,ShieldCog:shield-cog,ShieldCogCorner:shield-cog-corner,ShieldEllipsis:shield-ellipsis,ShieldHalf:shield-half,ShieldKeyhole:shield-keyhole,ShieldLock:shield-lock,ShieldMinus:shield-minus,ShieldOff:shield-off,ShieldPlus:shield-plus,ShieldQuestionMark:shield-question-mark,ShieldUser:shield-user,ShieldX:shield-x,Ship:ship,ShipCargo:ship-cargo,ShipWheel:ship-wheel,Shirt:shirt,ShoppingBag:shopping-bag,ShoppingBasket:shopping-basket,ShoppingCart:shopping-cart,Shovel:shovel,ShowerHead:shower-head,Shredder:shredder,Shrimp:shrimp,Shrink:shrink,Shrub:shrub,Shuffle:shuffle,Sigma:sigma,Signal:signal,SignalHigh:signal-high,SignalLow:signal-low,SignalMedium:signal-medium,SignalZero:signal-zero,Signature:signature,Signpost:signpost,SignpostBig:signpost-big,Siren:siren,SkipBack:skip-back,SkipForward:skip-forward,Skull:skull,Slash:slash,Slice:slice,SlidersHorizontal:sliders-horizontal,SlidersVertical:sliders-vertical,Smartphone:smartphone,SmartphoneCharging:smartphone-charging,SmartphoneNfc:smartphone-nfc,Snail:snail,Snowflake:snowflake,SoapDispenserDroplet:soap-dispenser-droplet,Sofa:sofa,SolarPanel:solar-panel,Soup:soup,Space:space,Spade:spade,Sparkle:sparkle,Sparkles:sparkles,Speaker:speaker,Speech:speech,SpellCheck:spell-check,SpellCheck2:spell-check-2,Spline:spline,SplinePointer:spline-pointer,Split:split,Spool:spool,SportShoe:sport-shoe,Spotlight:spotlight,SprayCan:spray-can,Sprout:sprout,Square:square,SquareActivity:square-activity,SquareArrowDown:square-arrow-down,SquareArrowDownLeft:square-arrow-down-left,SquareArrowDownRight:square-arrow-down-right,SquareArrowLeft:square-arrow-left,SquareArrowOutDownLeft:square-arrow-out-down-left,SquareArrowOutDownRight:square-arrow-out-down-right,SquareArrowOutUpLeft:square-arrow-out-up-left,SquareArrowOutUpRight:square-arrow-out-up-right,SquareArrowRight:square-arrow-right,SquareArrowRightEnter:square-arrow-right-enter,SquareArrowRightExit:square-arrow-right-exit,SquareArrowUp:square-arrow-up,SquareArrowUpLeft:square-arrow-up-left,SquareArrowUpRight:square-arrow-up-right,SquareAsterisk:square-asterisk,SquareBottomDashedScissors:square-bottom-dashed-scissors,SquareCenterlineDashedHorizontal:square-centerline-dashed-horizontal,SquareCenterlineDashedVertical:square-centerline-dashed-vertical,SquareChartGantt:square-chart-gantt,SquareCheck:square-check,SquareCheckBig:square-check-big,SquareChevronDown:square-chevron-down,SquareChevronLeft:square-chevron-left,SquareChevronRight:square-chevron-right,SquareChevronUp:square-chevron-up,SquareCode:square-code,SquareDashed:square-dashed,SquareDashedBottom:square-dashed-bottom,SquareDashedBottomCode:square-dashed-bottom-code,SquareDashedKanban:square-dashed-kanban,SquareDashedMousePointer:square-dashed-mouse-pointer,SquareDashedText:square-dashed-text,SquareDashedTopSolid:square-dashed-top-solid,SquareDimensions:square-dimensions,SquareDivide:square-divide,SquareDot:square-dot,SquareEqual:square-equal,SquareFunction:square-function,SquareKanban:square-kanban,SquareLibrary:square-library,SquareM:square-m,SquareMenu:square-menu,SquareMinus:square-minus,SquareMousePointer:square-mouse-pointer,SquareOff:square-off,SquareParking:square-parking,SquareParkingOff:square-parking-off,SquarePause:square-pause,SquarePen:square-pen,SquarePercent:square-percent,SquarePi:square-pi,SquarePilcrow:square-pilcrow,SquarePlay:square-play,SquarePlus:square-plus,SquarePower:square-power,SquareRadical:square-radical,SquareRoundCorner:square-round-corner,SquareScissors:square-scissors,SquareSigma:square-sigma,SquareSlash:square-slash,SquareSplitHorizontal:square-split-horizontal,SquareSplitVertical:square-split-vertical,SquareSquare:square-square,SquareStack:square-stack,SquareStar:square-star,SquareStop:square-stop,SquareTerminal:square-terminal,SquareText:square-text,SquareUser:square-user,SquareUserRound:square-user-round,SquareX:square-x,SquaresExclude:squares-exclude,SquaresIntersect:squares-intersect,SquaresSubtract:squares-subtract,SquaresUnite:squares-unite,Squircle:squircle,SquircleDashed:squircle-dashed,Squirrel:squirrel,Stamp:stamp,Star:star,StarCheck:star-check,StarHalf:star-half,StarMinus:star-minus,StarOff:star-off,StarPlus:star-plus,StarX:star-x,StepBack:step-back,StepForward:step-forward,Stethoscope:stethoscope,Sticker:sticker,StickyNote:sticky-note,StickyNoteCheck:sticky-note-check,StickyNoteMinus:sticky-note-minus,StickyNoteOff:sticky-note-off,StickyNotePlus:sticky-note-plus,StickyNoteX:sticky-note-x,StickyNotes:sticky-notes,Stone:stone,Store:store,StretchHorizontal:stretch-horizontal,StretchVertical:stretch-vertical,Strikethrough:strikethrough,Subscript:subscript,Summary:summary,Sun:sun,SunDim:sun-dim,SunMedium:sun-medium,SunMoon:sun-moon,SunSnow:sun-snow,Sunrise:sunrise,Sunset:sunset,Superscript:superscript,SwatchBook:swatch-book,SwissFranc:swiss-franc,SwitchCamera:switch-camera,Sword:sword,Swords:swords,Syringe:syringe,Table:table,Table2:table-2,TableCellsMerge:table-cells-merge,TableCellsSplit:table-cells-split,TableColumnsSplit:table-columns-split,TableOfContents:table-of-contents,TableProperties:table-properties,TableRowsSplit:table-rows-split,Tablet:tablet,TabletSmartphone:tablet-smartphone,Tablets:tablets,Tag:tag,TagPlus:tag-plus,TagX:tag-x,Tags:tags,Tally1:tally-1,Tally2:tally-2,Tally3:tally-3,Tally4:tally-4,Tally5:tally-5,Tangent:tangent,Target:target,Telescope:telescope,Tent:tent,TentTree:tent-tree,Terminal:terminal,TestTube:test-tube,TestTubeDiagonal:test-tube-diagonal,TestTubes:test-tubes,TextAlignCenter:text-align-center,TextAlignEnd:text-align-end,TextAlignJustify:text-align-justify,TextAlignStart:text-align-start,TextCursor:text-cursor,TextCursorInput:text-cursor-input,TextInitial:text-initial,TextQuote:text-quote,TextSearch:text-search,TextWrap:text-wrap,Theater:theater,Thermometer:thermometer,ThermometerSnowflake:thermometer-snowflake,ThermometerSun:thermometer-sun,ThumbsDown:thumbs-down,ThumbsUp:thumbs-up,Ticket:ticket,TicketCheck:ticket-check,TicketMinus:ticket-minus,TicketPercent:ticket-percent,TicketPlus:ticket-plus,TicketSlash:ticket-slash,TicketX:ticket-x,Tickets:tickets,TicketsPlane:tickets-plane,Timeline:timeline,Timer:timer,TimerOff:timer-off,TimerReset:timer-reset,ToggleLeft:toggle-left,ToggleRight:toggle-right,Toilet:toilet,ToolCase:tool-case,Toolbox:toolbox,Tornado:tornado,Torus:torus,Touchpad:touchpad,TouchpadOff:touchpad-off,TowelRack:towel-rack,TowerControl:tower-control,ToyBrick:toy-brick,Tractor:tractor,TrafficCone:traffic-cone,Trailer:trailer,TrainFront:train-front,TrainFrontTunnel:train-front-tunnel,TrainTrack:train-track,TramFront:tram-front,Transgender:transgender,Trash:trash,Trash2:trash-2,TreeDeciduous:tree-deciduous,TreePalm:tree-palm,TreePine:tree-pine,Trees:trees,TrendingDown:trending-down,TrendingUp:trending-up,TrendingUpDown:trending-up-down,Triangle:triangle,TriangleAlert:triangle-alert,TriangleDashed:triangle-dashed,TriangleRight:triangle-right,Trophy:trophy,Truck:truck,TruckElectric:truck-electric,TurkishLira:turkish-lira,Turntable:turntable,Turtle:turtle,Tv:tv,TvMinimal:tv-minimal,TvMinimalPlay:tv-minimal-play,Type:type,TypeOutline:type-outline,Umbrella:umbrella,UmbrellaOff:umbrella-off,Underline:underline,Undo:undo,Undo2:undo-2,UndoDot:undo-dot,UnfoldHorizontal:unfold-horizontal,UnfoldVertical:unfold-vertical,Ungroup:ungroup,University:university,Unlink:unlink,Unlink2:unlink-2,Unplug:unplug,Upload:upload,Usb:usb,UsbCPort:usb-c-port,User:user,UserCheck:user-check,UserCog:user-cog,UserKey:user-key,UserLock:user-lock,UserMinus:user-minus,UserPen:user-pen,UserPlus:user-plus,UserRound:user-round,UserRoundArrowLeft:user-round-arrow-left,UserRoundCheck:user-round-check,UserRoundCog:user-round-cog,UserRoundKey:user-round-key,UserRoundMinus:user-round-minus,UserRoundPen:user-round-pen,UserRoundPlus:user-round-plus,UserRoundSearch:user-round-search,UserRoundX:user-round-x,UserSearch:user-search,UserShield:user-shield,UserStar:user-star,UserX:user-x,Users:users,UsersRound:users-round,Utensils:utensils,UtensilsCrossed:utensils-crossed,UtilityPole:utility-pole,Van:van,Variable:variable,Vault:vault,VectorSquare:vector-square,Vegan:vegan,VenetianMask:venetian-mask,Venus:venus,VenusAndMars:venus-and-mars,Vibrate:vibrate,VibrateOff:vibrate-off,Video:video,VideoOff:video-off,Videotape:videotape,View:view,Voicemail:voicemail,Volleyball:volleyball,Volume:volume,Volume1:volume-1,Volume2:volume-2,VolumeOff:volume-off,VolumeX:volume-x,Vote:vote,Wallet:wallet,WalletCards:wallet-cards,WalletMinimal:wallet-minimal,Wallpaper:wallpaper,Wand:wand,WandSparkles:wand-sparkles,Warehouse:warehouse,WashingMachine:washing-machine,Watch:watch,WavesArrowDown:waves-arrow-down,WavesArrowUp:waves-arrow-up,WavesHorizontal:waves-horizontal,WavesLadder:waves-ladder,WavesVertical:waves-vertical,Waypoints:waypoints,Webcam:webcam,WebcamOff:webcam-off,Webhook:webhook,WebhookOff:webhook-off,Weight:weight,WeightTilde:weight-tilde,Wheat:wheat,WheatOff:wheat-off,WholeWord:whole-word,Wifi:wifi,WifiCog:wifi-cog,WifiHigh:wifi-high,WifiLow:wifi-low,WifiOff:wifi-off,WifiPen:wifi-pen,WifiSync:wifi-sync,WifiZero:wifi-zero,Wind:wind,WindArrowDown:wind-arrow-down,Wine:wine,WineOff:wine-off,Workflow:workflow,Worm:worm,Wrench:wrench,WrenchOff:wrench-off,X:x,XLineTop:x-line-top,Zap:zap,ZapOff:zap-off,ZodiacAquarius:zodiac-aquarius,ZodiacAries:zodiac-aries,ZodiacCancer:zodiac-cancer,ZodiacCapricorn:zodiac-capricorn,ZodiacGemini:zodiac-gemini,ZodiacLeo:zodiac-leo,ZodiacLibra:zodiac-libra,ZodiacOphiuchus:zodiac-ophiuchus,ZodiacPisces:zodiac-pisces,ZodiacSagittarius:zodiac-sagittarius,ZodiacScorpio:zodiac-scorpio,ZodiacTaurus:zodiac-taurus,ZodiacVirgo:zodiac-virgo,ZoomIn:zoom-in,ZoomOut:zoom-out'; + 'AArrowDown:a-arrow-down,AArrowUp:a-arrow-up,ALargeSmall:a-large-small,Accessibility:accessibility,Activity:activity,Ad:ad,AirVent:air-vent,Airplay:airplay,AlarmClock:alarm-clock,AlarmClockCheck:alarm-clock-check,AlarmClockMinus:alarm-clock-minus,AlarmClockOff:alarm-clock-off,AlarmClockPlus:alarm-clock-plus,AlarmSmoke:alarm-smoke,Album:album,AlignCenterHorizontal:align-center-horizontal,AlignCenterVertical:align-center-vertical,AlignEndHorizontal:align-end-horizontal,AlignEndVertical:align-end-vertical,AlignHorizontalDistributeCenter:align-horizontal-distribute-center,AlignHorizontalDistributeEnd:align-horizontal-distribute-end,AlignHorizontalDistributeStart:align-horizontal-distribute-start,AlignHorizontalJustifyCenter:align-horizontal-justify-center,AlignHorizontalJustifyEnd:align-horizontal-justify-end,AlignHorizontalJustifyStart:align-horizontal-justify-start,AlignHorizontalSpaceAround:align-horizontal-space-around,AlignHorizontalSpaceBetween:align-horizontal-space-between,AlignStartHorizontal:align-start-horizontal,AlignStartVertical:align-start-vertical,AlignVerticalDistributeCenter:align-vertical-distribute-center,AlignVerticalDistributeEnd:align-vertical-distribute-end,AlignVerticalDistributeStart:align-vertical-distribute-start,AlignVerticalJustifyCenter:align-vertical-justify-center,AlignVerticalJustifyEnd:align-vertical-justify-end,AlignVerticalJustifyStart:align-vertical-justify-start,AlignVerticalSpaceAround:align-vertical-space-around,AlignVerticalSpaceBetween:align-vertical-space-between,Ambulance:ambulance,Ampersand:ampersand,Ampersands:ampersands,Amphora:amphora,Anchor:anchor,Angle:angle,Antenna:antenna,Anvil:anvil,Aperture:aperture,AppWindow:app-window,AppWindowMac:app-window-mac,Apple:apple,Archive:archive,ArchiveRestore:archive-restore,ArchiveX:archive-x,Armchair:armchair,ArrowBigDown:arrow-big-down,ArrowBigDownDash:arrow-big-down-dash,ArrowBigLeft:arrow-big-left,ArrowBigLeftDash:arrow-big-left-dash,ArrowBigRight:arrow-big-right,ArrowBigRightDash:arrow-big-right-dash,ArrowBigUp:arrow-big-up,ArrowBigUpDash:arrow-big-up-dash,ArrowDown:arrow-down,ArrowDown01:arrow-down-0-1,ArrowDown10:arrow-down-1-0,ArrowDownAZ:arrow-down-a-z,ArrowDownFromLine:arrow-down-from-line,ArrowDownLeft:arrow-down-left,ArrowDownNarrowWide:arrow-down-narrow-wide,ArrowDownRight:arrow-down-right,ArrowDownToDot:arrow-down-to-dot,ArrowDownToLine:arrow-down-to-line,ArrowDownUp:arrow-down-up,ArrowDownWideNarrow:arrow-down-wide-narrow,ArrowDownZA:arrow-down-z-a,ArrowLeft:arrow-left,ArrowLeftFromLine:arrow-left-from-line,ArrowLeftRight:arrow-left-right,ArrowLeftToLine:arrow-left-to-line,ArrowRight:arrow-right,ArrowRightFromLine:arrow-right-from-line,ArrowRightLeft:arrow-right-left,ArrowRightToLine:arrow-right-to-line,ArrowUp:arrow-up,ArrowUp01:arrow-up-0-1,ArrowUp10:arrow-up-1-0,ArrowUpAZ:arrow-up-a-z,ArrowUpDown:arrow-up-down,ArrowUpFromDot:arrow-up-from-dot,ArrowUpFromLine:arrow-up-from-line,ArrowUpLeft:arrow-up-left,ArrowUpNarrowWide:arrow-up-narrow-wide,ArrowUpRight:arrow-up-right,ArrowUpToLine:arrow-up-to-line,ArrowUpWideNarrow:arrow-up-wide-narrow,ArrowUpZA:arrow-up-z-a,ArrowsUpFromLine:arrows-up-from-line,Asterisk:asterisk,Astroid:astroid,AtSign:at-sign,Atom:atom,AudioLines:audio-lines,AudioLinesOff:audio-lines-off,AudioLinesX:audio-lines-x,AudioWaveform:audio-waveform,Award:award,Axe:axe,Axis3d:axis-3d,Baby:baby,Backpack:backpack,Badge:badge,BadgeAlert:badge-alert,BadgeCent:badge-cent,BadgeCheck:badge-check,BadgeDollarSign:badge-dollar-sign,BadgeEuro:badge-euro,BadgeIndianRupee:badge-indian-rupee,BadgeInfo:badge-info,BadgeJapaneseYen:badge-japanese-yen,BadgeMinus:badge-minus,BadgePercent:badge-percent,BadgePlus:badge-plus,BadgePoundSterling:badge-pound-sterling,BadgeQuestionMark:badge-question-mark,BadgeRussianRuble:badge-russian-ruble,BadgeSwissFranc:badge-swiss-franc,BadgeTurkishLira:badge-turkish-lira,BadgeX:badge-x,BaggageClaim:baggage-claim,Balloon:balloon,Ban:ban,Banana:banana,Bandage:bandage,Banknote:banknote,BanknoteArrowDown:banknote-arrow-down,BanknoteArrowUp:banknote-arrow-up,BanknoteCheck:banknote-check,BanknoteX:banknote-x,Barcode:barcode,Barrel:barrel,Baseline:baseline,Bath:bath,Battery:battery,BatteryCharging:battery-charging,BatteryFull:battery-full,BatteryLow:battery-low,BatteryMedium:battery-medium,BatteryPlus:battery-plus,BatteryWarning:battery-warning,Beaker:beaker,Bean:bean,BeanOff:bean-off,Bed:bed,BedDouble:bed-double,BedSingle:bed-single,Beef:beef,BeefOff:beef-off,Beer:beer,BeerOff:beer-off,Bell:bell,BellCheck:bell-check,BellDot:bell-dot,BellElectric:bell-electric,BellMinus:bell-minus,BellOff:bell-off,BellPlus:bell-plus,BellRing:bell-ring,BetweenHorizontalEnd:between-horizontal-end,BetweenHorizontalStart:between-horizontal-start,BetweenVerticalEnd:between-vertical-end,BetweenVerticalStart:between-vertical-start,BicepsFlexed:biceps-flexed,Bike:bike,Binary:binary,Binoculars:binoculars,Biohazard:biohazard,Bird:bird,Birdhouse:birdhouse,Bitcoin:bitcoin,Blend:blend,Blender:blender,Blinds:blinds,Blocks:blocks,Bluetooth:bluetooth,BluetoothConnected:bluetooth-connected,BluetoothOff:bluetooth-off,BluetoothSearching:bluetooth-searching,Bold:bold,Bolt:bolt,Bomb:bomb,Bone:bone,BoneFracture:bone-fracture,Book:book,BookA:book-a,BookAlert:book-alert,BookAudio:book-audio,BookCheck:book-check,BookCopy:book-copy,BookDashed:book-dashed,BookDown:book-down,BookHeadphones:book-headphones,BookHeart:book-heart,BookImage:book-image,BookKey:book-key,BookLock:book-lock,BookMarked:book-marked,BookMinus:book-minus,BookOpen:book-open,BookOpenCheck:book-open-check,BookOpenText:book-open-text,BookPlus:book-plus,BookSearch:book-search,BookText:book-text,BookType:book-type,BookUp:book-up,BookUp2:book-up-2,BookUser:book-user,BookX:book-x,Bookmark:bookmark,BookmarkCheck:bookmark-check,BookmarkMinus:bookmark-minus,BookmarkOff:bookmark-off,BookmarkPlus:bookmark-plus,BookmarkX:bookmark-x,BoomBox:boom-box,Bot:bot,BotMessageSquare:bot-message-square,BotOff:bot-off,BottleWine:bottle-wine,BowArrow:bow-arrow,Box:box,Boxes:boxes,Braces:braces,Brackets:brackets,Brain:brain,BrainCircuit:brain-circuit,BrainCog:brain-cog,BrickWall:brick-wall,BrickWallFire:brick-wall-fire,BrickWallShield:brick-wall-shield,Bridge:bridge,Briefcase:briefcase,BriefcaseBusiness:briefcase-business,BriefcaseConveyorBelt:briefcase-conveyor-belt,BriefcaseMedical:briefcase-medical,BringToFront:bring-to-front,Broccoli:broccoli,Broom:broom,BroomSparkles:broom-sparkles,Brush:brush,BrushCleaning:brush-cleaning,Bubbles:bubbles,Bug:bug,BugOff:bug-off,BugPlay:bug-play,Building:building,Building2:building-2,Bus:bus,BusFront:bus-front,Cable:cable,CableCar:cable-car,Cake:cake,CakeSlice:cake-slice,Calculator:calculator,Calendar:calendar,Calendar1:calendar-1,CalendarArrowDown:calendar-arrow-down,CalendarArrowUp:calendar-arrow-up,CalendarCheck:calendar-check,CalendarCheck2:calendar-check-2,CalendarClock:calendar-clock,CalendarCog:calendar-cog,CalendarDays:calendar-days,CalendarFold:calendar-fold,CalendarHeart:calendar-heart,CalendarMinus:calendar-minus,CalendarMinus2:calendar-minus-2,CalendarOff:calendar-off,CalendarPlus:calendar-plus,CalendarPlus2:calendar-plus-2,CalendarRange:calendar-range,CalendarSearch:calendar-search,CalendarSync:calendar-sync,CalendarX:calendar-x,CalendarX2:calendar-x-2,Calendars:calendars,Camera:camera,CameraOff:camera-off,Can:can,CanSoda:can-soda,Candy:candy,CandyCane:candy-cane,CandyOff:candy-off,Cannabis:cannabis,CannabisOff:cannabis-off,Captions:captions,CaptionsOff:captions-off,Car:car,CarBattery:car-battery,CarFront:car-front,CarTaxiFront:car-taxi-front,Caravan:caravan,CardSim:card-sim,Carrot:carrot,Carton:carton,CartonOff:carton-off,CaseLower:case-lower,CaseSensitive:case-sensitive,CaseUpper:case-upper,CassetteTape:cassette-tape,Cast:cast,Castle:castle,Cat:cat,Cctv:cctv,CctvOff:cctv-off,ChartArea:chart-area,ChartBar:chart-bar,ChartBarBig:chart-bar-big,ChartBarDecreasing:chart-bar-decreasing,ChartBarIncreasing:chart-bar-increasing,ChartBarStacked:chart-bar-stacked,ChartCandlestick:chart-candlestick,ChartColumn:chart-column,ChartColumnBig:chart-column-big,ChartColumnDecreasing:chart-column-decreasing,ChartColumnIncreasing:chart-column-increasing,ChartColumnStacked:chart-column-stacked,ChartGantt:chart-gantt,ChartLine:chart-line,ChartNetwork:chart-network,ChartNoAxesColumn:chart-no-axes-column,ChartNoAxesColumnDecreasing:chart-no-axes-column-decreasing,ChartNoAxesColumnIncreasing:chart-no-axes-column-increasing,ChartNoAxesCombined:chart-no-axes-combined,ChartNoAxesGantt:chart-no-axes-gantt,ChartPie:chart-pie,ChartScatter:chart-scatter,ChartSpline:chart-spline,Check:check,CheckCheck:check-check,CheckLine:check-line,ChefHat:chef-hat,Cherry:cherry,ChessBishop:chess-bishop,ChessKing:chess-king,ChessKnight:chess-knight,ChessPawn:chess-pawn,ChessQueen:chess-queen,ChessRook:chess-rook,ChevronDown:chevron-down,ChevronFirst:chevron-first,ChevronLast:chevron-last,ChevronLeft:chevron-left,ChevronRight:chevron-right,ChevronUp:chevron-up,ChevronsDown:chevrons-down,ChevronsDownUp:chevrons-down-up,ChevronsLeft:chevrons-left,ChevronsLeftRight:chevrons-left-right,ChevronsLeftRightEllipsis:chevrons-left-right-ellipsis,ChevronsRight:chevrons-right,ChevronsRightLeft:chevrons-right-left,ChevronsUp:chevrons-up,ChevronsUpDown:chevrons-up-down,Church:church,Cigarette:cigarette,CigaretteOff:cigarette-off,Circle:circle,CircleAlert:circle-alert,CircleArrowDown:circle-arrow-down,CircleArrowLeft:circle-arrow-left,CircleArrowOutDownLeft:circle-arrow-out-down-left,CircleArrowOutDownRight:circle-arrow-out-down-right,CircleArrowOutUpLeft:circle-arrow-out-up-left,CircleArrowOutUpRight:circle-arrow-out-up-right,CircleArrowRight:circle-arrow-right,CircleArrowUp:circle-arrow-up,CircleCheck:circle-check,CircleCheckBig:circle-check-big,CircleChevronDown:circle-chevron-down,CircleChevronLeft:circle-chevron-left,CircleChevronRight:circle-chevron-right,CircleChevronUp:circle-chevron-up,CircleDashed:circle-dashed,CircleDashedCheck:circle-dashed-check,CircleDivide:circle-divide,CircleDollarSign:circle-dollar-sign,CircleDot:circle-dot,CircleDotDashed:circle-dot-dashed,CircleEllipsis:circle-ellipsis,CircleEqual:circle-equal,CircleEuro:circle-euro,CircleFadingArrowUp:circle-fading-arrow-up,CircleFadingPlus:circle-fading-plus,CircleGauge:circle-gauge,CircleMinus:circle-minus,CircleOff:circle-off,CircleParking:circle-parking,CircleParkingOff:circle-parking-off,CirclePause:circle-pause,CirclePercent:circle-percent,CirclePile:circle-pile,CirclePlay:circle-play,CirclePlus:circle-plus,CirclePoundSterling:circle-pound-sterling,CirclePower:circle-power,CircleQuestionMark:circle-question-mark,CircleSlash:circle-slash,CircleSlash2:circle-slash-2,CircleSmall:circle-small,CircleStar:circle-star,CircleStop:circle-stop,CircleUser:circle-user,CircleUserRound:circle-user-round,CircleX:circle-x,CircuitBoard:circuit-board,Citrus:citrus,Clapperboard:clapperboard,Clipboard:clipboard,ClipboardCheck:clipboard-check,ClipboardClock:clipboard-clock,ClipboardCopy:clipboard-copy,ClipboardList:clipboard-list,ClipboardMinus:clipboard-minus,ClipboardPaste:clipboard-paste,ClipboardPen:clipboard-pen,ClipboardPenLine:clipboard-pen-line,ClipboardPlus:clipboard-plus,ClipboardType:clipboard-type,ClipboardX:clipboard-x,Clock:clock,Clock1:clock-1,Clock10:clock-10,Clock11:clock-11,Clock12:clock-12,Clock2:clock-2,Clock3:clock-3,Clock4:clock-4,Clock5:clock-5,Clock6:clock-6,Clock7:clock-7,Clock8:clock-8,Clock9:clock-9,ClockAlert:clock-alert,ClockArrowDown:clock-arrow-down,ClockArrowLeft:clock-arrow-left,ClockArrowRight:clock-arrow-right,ClockArrowUp:clock-arrow-up,ClockCheck:clock-check,ClockFading:clock-fading,ClockPlus:clock-plus,ClosedCaption:closed-caption,Cloud:cloud,CloudAlert:cloud-alert,CloudBackup:cloud-backup,CloudCheck:cloud-check,CloudCog:cloud-cog,CloudDownload:cloud-download,CloudDrizzle:cloud-drizzle,CloudFog:cloud-fog,CloudHail:cloud-hail,CloudLightning:cloud-lightning,CloudMoon:cloud-moon,CloudMoonRain:cloud-moon-rain,CloudOff:cloud-off,CloudRain:cloud-rain,CloudRainWind:cloud-rain-wind,CloudSnow:cloud-snow,CloudSun:cloud-sun,CloudSunRain:cloud-sun-rain,CloudSync:cloud-sync,CloudUpload:cloud-upload,Cloudy:cloudy,Clover:clover,Club:club,Code:code,CodeXml:code-xml,Coffee:coffee,Cog:cog,Coins:coins,Columns2:columns-2,Columns3:columns-3,Columns3Cog:columns-3-cog,Columns4:columns-4,Combine:combine,Command:command,Compass:compass,Component:component,Computer:computer,ConciergeBell:concierge-bell,Cone:cone,Construction:construction,Contact:contact,ContactRound:contact-round,Container:container,Contrast:contrast,Cookie:cookie,CookingPot:cooking-pot,Copy:copy,CopyCheck:copy-check,CopyMinus:copy-minus,CopyPlus:copy-plus,CopySlash:copy-slash,CopyX:copy-x,Copyleft:copyleft,Copyright:copyright,CornerDownLeft:corner-down-left,CornerDownRight:corner-down-right,CornerLeftDown:corner-left-down,CornerLeftUp:corner-left-up,CornerRightDown:corner-right-down,CornerRightUp:corner-right-up,CornerUpLeft:corner-up-left,CornerUpRight:corner-up-right,Cpu:cpu,CreativeCommons:creative-commons,CreditCard:credit-card,CreditCardCheck:credit-card-check,CreditCardMinus:credit-card-minus,CreditCardPlus:credit-card-plus,CreditCardReader:credit-card-reader,CreditCardX:credit-card-x,Croissant:croissant,Crop:crop,Cross:cross,Crosshair:crosshair,Crown:crown,Cuboid:cuboid,CupSoda:cup-soda,Currency:currency,Cylinder:cylinder,Dam:dam,Database:database,DatabaseArrowDown:database-arrow-down,DatabaseArrowUp:database-arrow-up,DatabaseBackup:database-backup,DatabaseCheck:database-check,DatabaseMinus:database-minus,DatabasePlus:database-plus,DatabaseSearch:database-search,DatabaseX:database-x,DatabaseZap:database-zap,DecimalsArrowLeft:decimals-arrow-left,DecimalsArrowRight:decimals-arrow-right,Delete:delete,Dessert:dessert,Diameter:diameter,Diamond:diamond,DiamondMinus:diamond-minus,DiamondPercent:diamond-percent,DiamondPlus:diamond-plus,Dice1:dice-1,Dice2:dice-2,Dice3:dice-3,Dice4:dice-4,Dice5:dice-5,Dice6:dice-6,Dices:dices,Diff:diff,Disc:disc,Disc2:disc-2,Disc3:disc-3,DiscAlbum:disc-album,Divide:divide,Dna:dna,DnaOff:dna-off,Dock:dock,Dog:dog,DollarSign:dollar-sign,Dome:dome,Donut:donut,DoorClosed:door-closed,DoorClosedLocked:door-closed-locked,DoorOpen:door-open,DoorStairwell:door-stairwell,Dot:dot,Download:download,DraftingCompass:drafting-compass,Drama:drama,Drill:drill,Drone:drone,Droplet:droplet,DropletOff:droplet-off,Droplets:droplets,Drum:drum,Drumstick:drumstick,Dumbbell:dumbbell,Ear:ear,EarOff:ear-off,Earth:earth,EarthLock:earth-lock,Eclipse:eclipse,Egg:egg,EggFried:egg-fried,EggOff:egg-off,Eject:eject,Ellipse:ellipse,Ellipsis:ellipsis,EllipsisVertical:ellipsis-vertical,Engine:engine,Equal:equal,EqualApproximately:equal-approximately,EqualApproximatelyNot:equal-approximately-not,EqualNot:equal-not,Eraser:eraser,EthernetPort:ethernet-port,Euro:euro,EvCharger:ev-charger,Expand:expand,ExternalLink:external-link,Eye:eye,EyeClosed:eye-closed,EyeDashed:eye-dashed,EyeOff:eye-off,FaceAngry:face-angry,FaceExpressionless:face-expressionless,FaceGrinning:face-grinning,FaceNeutral:face-neutral,FaceSlightlyFrowning:face-slightly-frowning,FaceSlightlySmiling:face-slightly-smiling,FaceSlightlySmilingPlus:face-slightly-smiling-plus,Factory:factory,Fan:fan,FastForward:fast-forward,Feather:feather,Fence:fence,FerrisWheel:ferris-wheel,File:file,FileArchive:file-archive,FileAxis3d:file-axis-3d,FileBadge:file-badge,FileBox:file-box,FileBraces:file-braces,FileBracesCorner:file-braces-corner,FileChartColumn:file-chart-column,FileChartColumnIncreasing:file-chart-column-increasing,FileChartLine:file-chart-line,FileChartPie:file-chart-pie,FileCheck:file-check,FileCheckCorner:file-check-corner,FileClock:file-clock,FileCode:file-code,FileCodeCorner:file-code-corner,FileCog:file-cog,FileDiff:file-diff,FileDigit:file-digit,FileDown:file-down,FileExclamationPoint:file-exclamation-point,FileHeadphone:file-headphone,FileHeart:file-heart,FileImage:file-image,FileInput:file-input,FileKey:file-key,FileLock:file-lock,FileMinus:file-minus,FileMinusCorner:file-minus-corner,FileMusic:file-music,FileOutput:file-output,FilePen:file-pen,FilePenLine:file-pen-line,FilePlay:file-play,FilePlus:file-plus,FilePlusCorner:file-plus-corner,FileQuestionMark:file-question-mark,FileScan:file-scan,FileSearch:file-search,FileSearchCorner:file-search-corner,FileSignal:file-signal,FileSliders:file-sliders,FileSpreadsheet:file-spreadsheet,FileStack:file-stack,FileSymlink:file-symlink,FileTerminal:file-terminal,FileText:file-text,FileType:file-type,FileTypeCorner:file-type-corner,FileUp:file-up,FileUser:file-user,FileVideoCamera:file-video-camera,FileVolume:file-volume,FileX:file-x,FileXCorner:file-x-corner,Files:files,Film:film,FingerprintPattern:fingerprint-pattern,FireExtinguisher:fire-extinguisher,Fish:fish,FishOff:fish-off,FishSymbol:fish-symbol,FishingHook:fishing-hook,FishingRod:fishing-rod,Flag:flag,FlagOff:flag-off,FlagTriangleLeft:flag-triangle-left,FlagTriangleRight:flag-triangle-right,Flame:flame,FlameKindling:flame-kindling,Flashlight:flashlight,FlashlightOff:flashlight-off,FlaskConical:flask-conical,FlaskConicalOff:flask-conical-off,FlaskRound:flask-round,FlipHorizontal2:flip-horizontal-2,FlipVertical2:flip-vertical-2,Flower:flower,Flower2:flower-2,Focus:focus,FoldHorizontal:fold-horizontal,FoldVertical:fold-vertical,Folder:folder,FolderArchive:folder-archive,FolderBookmark:folder-bookmark,FolderCheck:folder-check,FolderClock:folder-clock,FolderClosed:folder-closed,FolderCode:folder-code,FolderCog:folder-cog,FolderDot:folder-dot,FolderDown:folder-down,FolderGit:folder-git,FolderGit2:folder-git-2,FolderHeart:folder-heart,FolderInput:folder-input,FolderKanban:folder-kanban,FolderKey:folder-key,FolderLock:folder-lock,FolderMinus:folder-minus,FolderOpen:folder-open,FolderOpenDot:folder-open-dot,FolderOutput:folder-output,FolderPen:folder-pen,FolderPlus:folder-plus,FolderRoot:folder-root,FolderSearch:folder-search,FolderSearch2:folder-search-2,FolderSymlink:folder-symlink,FolderSync:folder-sync,FolderTree:folder-tree,FolderUp:folder-up,FolderX:folder-x,Folders:folders,Footprints:footprints,Forklift:forklift,Form:form,Forward:forward,Frame:frame,Fuel:fuel,Fullscreen:fullscreen,Funnel:funnel,FunnelPlus:funnel-plus,FunnelX:funnel-x,Galaxy:galaxy,GalleryHorizontal:gallery-horizontal,GalleryHorizontalEnd:gallery-horizontal-end,GalleryThumbnails:gallery-thumbnails,GalleryVertical:gallery-vertical,GalleryVerticalEnd:gallery-vertical-end,Gamepad:gamepad,Gamepad2:gamepad-2,GamepadDirectional:gamepad-directional,GapHorizontal:gap-horizontal,GapVertical:gap-vertical,Gauge:gauge,Gavel:gavel,Gem:gem,GeorgianLari:georgian-lari,Germ:germ,GermOff:germ-off,Ghost:ghost,Gift:gift,GitBranch:git-branch,GitBranchMinus:git-branch-minus,GitBranchPlus:git-branch-plus,GitCommitHorizontal:git-commit-horizontal,GitCommitVertical:git-commit-vertical,GitCompare:git-compare,GitCompareArrows:git-compare-arrows,GitFork:git-fork,GitGraph:git-graph,GitMerge:git-merge,GitMergeConflict:git-merge-conflict,GitPullRequest:git-pull-request,GitPullRequestArrow:git-pull-request-arrow,GitPullRequestClosed:git-pull-request-closed,GitPullRequestCreate:git-pull-request-create,GitPullRequestCreateArrow:git-pull-request-create-arrow,GitPullRequestDraft:git-pull-request-draft,GlassWater:glass-water,Glasses:glasses,Globe:globe,GlobeCheck:globe-check,GlobeLock:globe-lock,GlobeOff:globe-off,GlobeX:globe-x,Goal:goal,Gpu:gpu,GraduationCap:graduation-cap,Grape:grape,Grid2x2:grid-2x2,Grid2x2Check:grid-2x2-check,Grid2x2Plus:grid-2x2-plus,Grid2x2X:grid-2x2-x,Grid3x2:grid-3x2,Grid3x3:grid-3x3,Grip:grip,GripHorizontal:grip-horizontal,GripVertical:grip-vertical,Group:group,Guitar:guitar,Ham:ham,Hamburger:hamburger,Hammer:hammer,Hand:hand,HandCoins:hand-coins,HandFist:hand-fist,HandGrab:hand-grab,HandHeart:hand-heart,HandHelping:hand-helping,HandMetal:hand-metal,HandPlatter:hand-platter,Handbag:handbag,Handshake:handshake,HardDrive:hard-drive,HardDriveDownload:hard-drive-download,HardDriveUpload:hard-drive-upload,HardHat:hard-hat,Hash:hash,HatGlasses:hat-glasses,Haze:haze,Hd:hd,HdmiPort:hdmi-port,Heading:heading,Heading1:heading-1,Heading2:heading-2,Heading3:heading-3,Heading4:heading-4,Heading5:heading-5,Heading6:heading-6,HeadphoneOff:headphone-off,Headphones:headphones,Headset:headset,Heart:heart,HeartCrack:heart-crack,HeartHandshake:heart-handshake,HeartMinus:heart-minus,HeartOff:heart-off,HeartPlus:heart-plus,HeartPulse:heart-pulse,HeartX:heart-x,Heater:heater,Helicopter:helicopter,Hexagon:hexagon,Highlighter:highlighter,Hop:hop,HopOff:hop-off,Hospital:hospital,Hotel:hotel,Hourglass:hourglass,House:house,HouseHeart:house-heart,HousePlug:house-plug,HousePlus:house-plus,HouseWifi:house-wifi,IceCreamBowl:ice-cream-bowl,IceCreamCone:ice-cream-cone,IdCard:id-card,IdCardLanyard:id-card-lanyard,Image:image,ImageDown:image-down,ImageMinus:image-minus,ImageOff:image-off,ImagePlay:image-play,ImagePlus:image-plus,ImageUp:image-up,ImageUpscale:image-upscale,Images:images,Import:import,Inbox:inbox,IndianRupee:indian-rupee,Infinity:infinity,Info:info,InspectionPanel:inspection-panel,Italic:italic,IterationCcw:iteration-ccw,IterationCw:iteration-cw,JapaneseYen:japanese-yen,Joystick:joystick,Kanban:kanban,Kayak:kayak,Key:key,KeyRound:key-round,KeySquare:key-square,Keyboard:keyboard,KeyboardMusic:keyboard-music,KeyboardOff:keyboard-off,Lamp:lamp,LampCeiling:lamp-ceiling,LampDesk:lamp-desk,LampFloor:lamp-floor,LampWallDown:lamp-wall-down,LampWallUp:lamp-wall-up,LandPlot:land-plot,Landmark:landmark,Languages:languages,Laptop:laptop,LaptopMinimal:laptop-minimal,LaptopMinimalCheck:laptop-minimal-check,Lasso:lasso,LassoSelect:lasso-select,LayerArrowDown:layer-arrow-down,LayerArrowUp:layer-arrow-up,Layers:layers,Layers2:layers-2,LayersArrowDown:layers-arrow-down,LayersArrowUp:layers-arrow-up,LayersMinus:layers-minus,LayersPlus:layers-plus,LayoutDashboard:layout-dashboard,LayoutFreeform:layout-freeform,LayoutGrid:layout-grid,LayoutList:layout-list,LayoutPanelLeft:layout-panel-left,LayoutPanelTop:layout-panel-top,LayoutTemplate:layout-template,Leaf:leaf,LeafyGreen:leafy-green,Lectern:lectern,LensConcave:lens-concave,LensConvex:lens-convex,Library:library,LibraryBig:library-big,LifeBuoy:life-buoy,Ligature:ligature,Lightbulb:lightbulb,LightbulbOff:lightbulb-off,Lighthouse:lighthouse,LineDotRightHorizontal:line-dot-right-horizontal,LineSquiggle:line-squiggle,LineStyle:line-style,Link:link,Link2:link-2,Link2Off:link-2-off,List:list,ListCheck:list-check,ListChecks:list-checks,ListChevronsDownUp:list-chevrons-down-up,ListChevronsUpDown:list-chevrons-up-down,ListClock:list-clock,ListCollapse:list-collapse,ListEnd:list-end,ListFilter:list-filter,ListFilterPlus:list-filter-plus,ListIndentDecrease:list-indent-decrease,ListIndentIncrease:list-indent-increase,ListMinus:list-minus,ListMusic:list-music,ListOrdered:list-ordered,ListPlus:list-plus,ListRestart:list-restart,ListSortAscending:list-sort-ascending,ListSortDescending:list-sort-descending,ListStart:list-start,ListTodo:list-todo,ListTree:list-tree,ListVideo:list-video,ListX:list-x,Loader:loader,LoaderCircle:loader-circle,LoaderPinwheel:loader-pinwheel,Locate:locate,LocateFixed:locate-fixed,LocateOff:locate-off,Lock:lock,LockKeyhole:lock-keyhole,LockKeyholeOpen:lock-keyhole-open,LockOpen:lock-open,LogIn:log-in,LogOut:log-out,Logs:logs,Lollipop:lollipop,Luggage:luggage,Magnet:magnet,Mail:mail,MailBadge:mail-badge,MailCheck:mail-check,MailClock:mail-clock,MailMinus:mail-minus,MailOpen:mail-open,MailPen:mail-pen,MailPlus:mail-plus,MailQuestionMark:mail-question-mark,MailSearch:mail-search,MailWarning:mail-warning,MailX:mail-x,Mailbox:mailbox,Mails:mails,Map:map,MapMinus:map-minus,MapPin:map-pin,MapPinCheck:map-pin-check,MapPinCheckInside:map-pin-check-inside,MapPinHouse:map-pin-house,MapPinMinus:map-pin-minus,MapPinMinusInside:map-pin-minus-inside,MapPinOff:map-pin-off,MapPinPen:map-pin-pen,MapPinPlus:map-pin-plus,MapPinPlusInside:map-pin-plus-inside,MapPinSearch:map-pin-search,MapPinX:map-pin-x,MapPinXInside:map-pin-x-inside,MapPinned:map-pinned,MapPlus:map-plus,Mars:mars,MarsStroke:mars-stroke,Martini:martini,Maximize:maximize,Maximize2:maximize-2,Medal:medal,Megaphone:megaphone,MegaphoneOff:megaphone-off,MemoryStick:memory-stick,Menu:menu,Merge:merge,MessageCircle:message-circle,MessageCircleCheck:message-circle-check,MessageCircleCode:message-circle-code,MessageCircleDashed:message-circle-dashed,MessageCircleDashedCheck:message-circle-dashed-check,MessageCircleHeart:message-circle-heart,MessageCircleMore:message-circle-more,MessageCircleOff:message-circle-off,MessageCirclePlus:message-circle-plus,MessageCircleQuestionMark:message-circle-question-mark,MessageCircleReply:message-circle-reply,MessageCircleWarning:message-circle-warning,MessageCircleX:message-circle-x,MessageSquare:message-square,MessageSquareCheck:message-square-check,MessageSquareCode:message-square-code,MessageSquareDashed:message-square-dashed,MessageSquareDiff:message-square-diff,MessageSquareDot:message-square-dot,MessageSquareHeart:message-square-heart,MessageSquareLock:message-square-lock,MessageSquareMore:message-square-more,MessageSquareOff:message-square-off,MessageSquarePlus:message-square-plus,MessageSquareQuote:message-square-quote,MessageSquareReply:message-square-reply,MessageSquareShare:message-square-share,MessageSquareText:message-square-text,MessageSquareWarning:message-square-warning,MessageSquareX:message-square-x,MessagesSquare:messages-square,Metronome:metronome,Mic:mic,MicAudioLines:mic-audio-lines,MicOff:mic-off,MicSignal:mic-signal,MicVocal:mic-vocal,Microchip:microchip,Microscope:microscope,Microwave:microwave,MidiPort:midi-port,Milestone:milestone,Milk:milk,MilkOff:milk-off,Minimize:minimize,Minimize2:minimize-2,Minus:minus,MirrorRectangular:mirror-rectangular,MirrorRound:mirror-round,Monitor:monitor,MonitorCheck:monitor-check,MonitorCloud:monitor-cloud,MonitorCog:monitor-cog,MonitorDot:monitor-dot,MonitorDown:monitor-down,MonitorOff:monitor-off,MonitorPause:monitor-pause,MonitorPlay:monitor-play,MonitorSmartphone:monitor-smartphone,MonitorSpeaker:monitor-speaker,MonitorStop:monitor-stop,MonitorUp:monitor-up,MonitorX:monitor-x,Moon:moon,MoonStar:moon-star,Mop:mop,MopSparkles:mop-sparkles,Mosque:mosque,Motorbike:motorbike,Mountain:mountain,MountainSnow:mountain-snow,Mouse:mouse,MouseLeft:mouse-left,MouseOff:mouse-off,MousePointer:mouse-pointer,MousePointer2:mouse-pointer-2,MousePointer2Off:mouse-pointer-2-off,MousePointerBan:mouse-pointer-ban,MousePointerClick:mouse-pointer-click,MouseRight:mouse-right,Move:move,Move3d:move-3d,MoveDiagonal:move-diagonal,MoveDiagonal2:move-diagonal-2,MoveDown:move-down,MoveDownLeft:move-down-left,MoveDownRight:move-down-right,MoveHorizontal:move-horizontal,MoveLeft:move-left,MoveRight:move-right,MoveUp:move-up,MoveUpLeft:move-up-left,MoveUpRight:move-up-right,MoveVertical:move-vertical,Music:music,Music2:music-2,Music3:music-3,Music4:music-4,Navigation:navigation,Navigation2:navigation-2,Navigation2Off:navigation-2-off,NavigationOff:navigation-off,Network:network,Newspaper:newspaper,Nfc:nfc,NonBinary:non-binary,Notebook:notebook,NotebookPen:notebook-pen,NotebookTabs:notebook-tabs,NotebookText:notebook-text,NotepadText:notepad-text,NotepadTextDashed:notepad-text-dashed,Nut:nut,NutOff:nut-off,Octagon:octagon,OctagonAlert:octagon-alert,OctagonMinus:octagon-minus,OctagonPause:octagon-pause,OctagonX:octagon-x,Omega:omega,Option:option,Orbit:orbit,Origami:origami,Package:package,Package2:package-2,PackageCheck:package-check,PackageMinus:package-minus,PackageOpen:package-open,PackagePlus:package-plus,PackageSearch:package-search,PackageX:package-x,PaintBucket:paint-bucket,PaintRoller:paint-roller,Paintbrush:paintbrush,PaintbrushVertical:paintbrush-vertical,Palette:palette,Panda:panda,PanelBottom:panel-bottom,PanelBottomClose:panel-bottom-close,PanelBottomDashed:panel-bottom-dashed,PanelBottomOpen:panel-bottom-open,PanelLeft:panel-left,PanelLeftClose:panel-left-close,PanelLeftDashed:panel-left-dashed,PanelLeftOpen:panel-left-open,PanelLeftRightDashed:panel-left-right-dashed,PanelRight:panel-right,PanelRightClose:panel-right-close,PanelRightDashed:panel-right-dashed,PanelRightOpen:panel-right-open,PanelTop:panel-top,PanelTopBottomDashed:panel-top-bottom-dashed,PanelTopClose:panel-top-close,PanelTopDashed:panel-top-dashed,PanelTopOpen:panel-top-open,PanelsLeftBottom:panels-left-bottom,PanelsRightBottom:panels-right-bottom,PanelsTopLeft:panels-top-left,PaperBag:paper-bag,Paperclip:paperclip,Parasol:parasol,Parentheses:parentheses,ParkingMeter:parking-meter,PartyPopper:party-popper,Pause:pause,PawPrint:paw-print,PcCase:pc-case,Pen:pen,PenLine:pen-line,PenOff:pen-off,PenTool:pen-tool,Pencil:pencil,PencilLine:pencil-line,PencilOff:pencil-off,PencilRuler:pencil-ruler,PencilSparkles:pencil-sparkles,Pentagon:pentagon,Percent:percent,PersonStanding:person-standing,Phi:phi,PhilippinePeso:philippine-peso,Phone:phone,PhoneCall:phone-call,PhoneForwarded:phone-forwarded,PhoneIncoming:phone-incoming,PhoneMissed:phone-missed,PhoneOff:phone-off,PhoneOutgoing:phone-outgoing,Pi:pi,Piano:piano,Pickaxe:pickaxe,PictureInPicture:picture-in-picture,PictureInPicture2:picture-in-picture-2,PiggyBank:piggy-bank,Pilcrow:pilcrow,PilcrowLeft:pilcrow-left,PilcrowRight:pilcrow-right,Pill:pill,PillBottle:pill-bottle,Pin:pin,PinOff:pin-off,Pipette:pipette,Pizza:pizza,Plane:plane,PlaneLanding:plane-landing,PlaneTakeoff:plane-takeoff,Play:play,PlayOff:play-off,PlayingCard:playing-card,PlayingCards:playing-cards,PlayingCardsFan:playing-cards-fan,Plug:plug,Plug2:plug-2,PlugZap:plug-zap,Plus:plus,PocketKnife:pocket-knife,Podium:podium,Pointer:pointer,PointerOff:pointer-off,Popcorn:popcorn,Popsicle:popsicle,PoundSterling:pound-sterling,Power:power,PowerOff:power-off,Presentation:presentation,Printer:printer,PrinterCheck:printer-check,PrinterX:printer-x,Projector:projector,Proportions:proportions,Puzzle:puzzle,Pyramid:pyramid,QrCode:qr-code,Quote:quote,Rabbit:rabbit,Radar:radar,Radiation:radiation,Radical:radical,Radio:radio,RadioOff:radio-off,RadioReceiver:radio-receiver,RadioTower:radio-tower,Radius:radius,Rainbow:rainbow,Rat:rat,Ratio:ratio,Receipt:receipt,ReceiptCent:receipt-cent,ReceiptEuro:receipt-euro,ReceiptIndianRupee:receipt-indian-rupee,ReceiptJapaneseYen:receipt-japanese-yen,ReceiptPoundSterling:receipt-pound-sterling,ReceiptRussianRuble:receipt-russian-ruble,ReceiptSwissFranc:receipt-swiss-franc,ReceiptText:receipt-text,ReceiptTurkishLira:receipt-turkish-lira,RectangleCircle:rectangle-circle,RectangleEllipsis:rectangle-ellipsis,RectangleGoggles:rectangle-goggles,RectangleHorizontal:rectangle-horizontal,RectangleVertical:rectangle-vertical,Recycle:recycle,Redo:redo,Redo2:redo-2,RedoDot:redo-dot,RefreshCcw:refresh-ccw,RefreshCcwDot:refresh-ccw-dot,RefreshCw:refresh-cw,RefreshCwOff:refresh-cw-off,Refrigerator:refrigerator,Regex:regex,RemoveFormatting:remove-formatting,Repeat:repeat,Repeat1:repeat-1,Repeat2:repeat-2,RepeatOff:repeat-off,Replace:replace,ReplaceAll:replace-all,Reply:reply,ReplyAll:reply-all,Rewind:rewind,Ribbon:ribbon,Road:road,RobotArm:robot-arm,RobotVacuum:robot-vacuum,Rocket:rocket,RockingChair:rocking-chair,RollerCoaster:roller-coaster,Rose:rose,Rotate3d:rotate-3d,RotateCcw:rotate-ccw,RotateCcwClock:rotate-ccw-clock,RotateCcwKey:rotate-ccw-key,RotateCcwSquare:rotate-ccw-square,RotateCw:rotate-cw,RotateCwFadingClock:rotate-cw-fading-clock,RotateCwSquare:rotate-cw-square,Route:route,RouteOff:route-off,Router:router,Rows2:rows-2,Rows3:rows-3,Rows4:rows-4,Rss:rss,Ruler:ruler,RulerDimensionLine:ruler-dimension-line,RussianRuble:russian-ruble,Sailboat:sailboat,Salad:salad,Sandwich:sandwich,Satellite:satellite,SatelliteDish:satellite-dish,SaudiRiyal:saudi-riyal,Save:save,SaveAll:save-all,SaveCheck:save-check,SaveOff:save-off,SavePen:save-pen,SavePlus:save-plus,Scale:scale,Scale3d:scale-3d,Scaling:scaling,Scan:scan,ScanBarcode:scan-barcode,ScanBox:scan-box,ScanEye:scan-eye,ScanFace:scan-face,ScanHeart:scan-heart,ScanLine:scan-line,ScanQrCode:scan-qr-code,ScanSearch:scan-search,ScanSquare:scan-square,ScanText:scan-text,School:school,Scissors:scissors,ScissorsLineDashed:scissors-line-dashed,Scooter:scooter,ScreenShare:screen-share,ScreenShareOff:screen-share-off,Scroll:scroll,ScrollText:scroll-text,Search:search,SearchAlert:search-alert,SearchCheck:search-check,SearchCode:search-code,SearchSlash:search-slash,SearchX:search-x,Section:section,Send:send,SendHorizontal:send-horizontal,SendToBack:send-to-back,SeparatorHorizontal:separator-horizontal,SeparatorVertical:separator-vertical,Server:server,ServerCog:server-cog,ServerCrash:server-crash,ServerOff:server-off,ServerPlus:server-plus,Settings:settings,Settings2:settings-2,Shapes:shapes,Share:share,Share2:share-2,Sheet:sheet,Shell:shell,ShelvingUnit:shelving-unit,Shield:shield,ShieldAlert:shield-alert,ShieldBan:shield-ban,ShieldCheck:shield-check,ShieldCog:shield-cog,ShieldCogCorner:shield-cog-corner,ShieldEllipsis:shield-ellipsis,ShieldHalf:shield-half,ShieldKeyhole:shield-keyhole,ShieldLock:shield-lock,ShieldMinus:shield-minus,ShieldOff:shield-off,ShieldPlus:shield-plus,ShieldQuestionMark:shield-question-mark,ShieldUser:shield-user,ShieldX:shield-x,Ship:ship,ShipCargo:ship-cargo,ShipWheel:ship-wheel,Shirt:shirt,ShoppingBag:shopping-bag,ShoppingBasket:shopping-basket,ShoppingCart:shopping-cart,ShoppingCartMinus:shopping-cart-minus,ShoppingCartPlus:shopping-cart-plus,Shovel:shovel,ShowerHead:shower-head,Shredder:shredder,Shrimp:shrimp,ShrimpOff:shrimp-off,Shrink:shrink,Shrub:shrub,Shuffle:shuffle,Sigma:sigma,Signal:signal,SignalHigh:signal-high,SignalLow:signal-low,SignalMedium:signal-medium,SignalZero:signal-zero,Signature:signature,Signpost:signpost,SignpostBig:signpost-big,Siren:siren,SkipBack:skip-back,SkipForward:skip-forward,Skull:skull,Slash:slash,Slice:slice,SlidersHorizontal:sliders-horizontal,SlidersVertical:sliders-vertical,Smartphone:smartphone,SmartphoneCharging:smartphone-charging,SmartphoneNfc:smartphone-nfc,Snail:snail,Snowflake:snowflake,SoapDispenserDroplet:soap-dispenser-droplet,Sofa:sofa,SolarPanel:solar-panel,Soup:soup,Space:space,Spade:spade,Sparkle:sparkle,Sparkles:sparkles,Speaker:speaker,Speech:speech,SpellCheck:spell-check,SpellCheck2:spell-check-2,Spline:spline,SplinePointer:spline-pointer,Split:split,Spool:spool,SportShoe:sport-shoe,Spotlight:spotlight,SprayCan:spray-can,Sprout:sprout,Square:square,SquareActivity:square-activity,SquareArrowDown:square-arrow-down,SquareArrowDownLeft:square-arrow-down-left,SquareArrowDownRight:square-arrow-down-right,SquareArrowLeft:square-arrow-left,SquareArrowOutDownLeft:square-arrow-out-down-left,SquareArrowOutDownRight:square-arrow-out-down-right,SquareArrowOutUpLeft:square-arrow-out-up-left,SquareArrowOutUpRight:square-arrow-out-up-right,SquareArrowRight:square-arrow-right,SquareArrowRightEnter:square-arrow-right-enter,SquareArrowRightExit:square-arrow-right-exit,SquareArrowUp:square-arrow-up,SquareArrowUpLeft:square-arrow-up-left,SquareArrowUpRight:square-arrow-up-right,SquareAsterisk:square-asterisk,SquareBottomDashedScissors:square-bottom-dashed-scissors,SquareCenterlineDashedHorizontal:square-centerline-dashed-horizontal,SquareCenterlineDashedVertical:square-centerline-dashed-vertical,SquareChartGantt:square-chart-gantt,SquareCheck:square-check,SquareCheckBig:square-check-big,SquareChevronDown:square-chevron-down,SquareChevronLeft:square-chevron-left,SquareChevronRight:square-chevron-right,SquareChevronUp:square-chevron-up,SquareCode:square-code,SquareDashed:square-dashed,SquareDashedBottom:square-dashed-bottom,SquareDashedBottomCode:square-dashed-bottom-code,SquareDashedKanban:square-dashed-kanban,SquareDashedMousePointer:square-dashed-mouse-pointer,SquareDashedText:square-dashed-text,SquareDashedTopSolid:square-dashed-top-solid,SquareDimensions:square-dimensions,SquareDivide:square-divide,SquareDot:square-dot,SquareEqual:square-equal,SquareExclamationPoint:square-exclamation-point,SquareFunction:square-function,SquareKanban:square-kanban,SquareLibrary:square-library,SquareM:square-m,SquareMenu:square-menu,SquareMinus:square-minus,SquareMousePointer:square-mouse-pointer,SquareOff:square-off,SquareParking:square-parking,SquareParkingOff:square-parking-off,SquarePause:square-pause,SquarePen:square-pen,SquarePercent:square-percent,SquarePi:square-pi,SquarePilcrow:square-pilcrow,SquarePlay:square-play,SquarePlus:square-plus,SquarePower:square-power,SquareRadical:square-radical,SquareRoundCorner:square-round-corner,SquareScissors:square-scissors,SquareSigma:square-sigma,SquareSlash:square-slash,SquareSplitHorizontal:square-split-horizontal,SquareSplitVertical:square-split-vertical,SquareSquare:square-square,SquareStack:square-stack,SquareStar:square-star,SquareStop:square-stop,SquareTerminal:square-terminal,SquareText:square-text,SquareUser:square-user,SquareUserRound:square-user-round,SquareX:square-x,SquaresExclude:squares-exclude,SquaresIntersect:squares-intersect,SquaresSubtract:squares-subtract,SquaresUnite:squares-unite,Squircle:squircle,SquircleDashed:squircle-dashed,Squirrel:squirrel,Stamp:stamp,Star:star,StarCheck:star-check,StarHalf:star-half,StarMinus:star-minus,StarOff:star-off,StarPlus:star-plus,StarX:star-x,StepBack:step-back,StepForward:step-forward,Stethoscope:stethoscope,Sticker:sticker,StickyNote:sticky-note,StickyNoteCheck:sticky-note-check,StickyNoteMinus:sticky-note-minus,StickyNoteOff:sticky-note-off,StickyNotePlus:sticky-note-plus,StickyNoteX:sticky-note-x,StickyNotes:sticky-notes,Stone:stone,Store:store,StretchHorizontal:stretch-horizontal,StretchVertical:stretch-vertical,Strikethrough:strikethrough,Subscript:subscript,Summary:summary,Sun:sun,SunDim:sun-dim,SunMedium:sun-medium,SunMoon:sun-moon,SunSnow:sun-snow,Sunrise:sunrise,Sunset:sunset,Superscript:superscript,SwatchBook:swatch-book,SwissFranc:swiss-franc,SwitchCamera:switch-camera,Sword:sword,Swords:swords,Syringe:syringe,Table:table,Table2:table-2,TableCellsMerge:table-cells-merge,TableCellsSplit:table-cells-split,TableColumnsSplit:table-columns-split,TableOfContents:table-of-contents,TableProperties:table-properties,TableRowsSplit:table-rows-split,Tablet:tablet,TabletSmartphone:tablet-smartphone,Tablets:tablets,Tag:tag,TagPlus:tag-plus,TagX:tag-x,Tags:tags,Tally1:tally-1,Tally2:tally-2,Tally3:tally-3,Tally4:tally-4,Tally5:tally-5,Tangent:tangent,Target:target,Telescope:telescope,Tent:tent,TentTree:tent-tree,Terminal:terminal,TestTube:test-tube,TestTubeDiagonal:test-tube-diagonal,TestTubes:test-tubes,TextAlignCenter:text-align-center,TextAlignEnd:text-align-end,TextAlignJustify:text-align-justify,TextAlignStart:text-align-start,TextCursor:text-cursor,TextCursorInput:text-cursor-input,TextInitial:text-initial,TextQuote:text-quote,TextSearch:text-search,TextWrap:text-wrap,Theater:theater,Thermometer:thermometer,ThermometerSnowflake:thermometer-snowflake,ThermometerSun:thermometer-sun,ThumbsDown:thumbs-down,ThumbsUp:thumbs-up,TicTacToe:tic-tac-toe,Ticket:ticket,TicketCheck:ticket-check,TicketMinus:ticket-minus,TicketPercent:ticket-percent,TicketPlus:ticket-plus,TicketSlash:ticket-slash,TicketX:ticket-x,Tickets:tickets,TicketsPlane:tickets-plane,Timeline:timeline,Timer:timer,TimerOff:timer-off,TimerReset:timer-reset,ToggleLeft:toggle-left,ToggleRight:toggle-right,Toilet:toilet,ToolCase:tool-case,Toolbox:toolbox,Tornado:tornado,Torus:torus,Touchpad:touchpad,TouchpadOff:touchpad-off,TowelRack:towel-rack,TowerControl:tower-control,ToyBrick:toy-brick,Tractor:tractor,TrafficCone:traffic-cone,Trailer:trailer,TrainFront:train-front,TrainFrontTunnel:train-front-tunnel,TrainTrack:train-track,TramFront:tram-front,Transgender:transgender,Trash:trash,TrashOff:trash-off,TreeDeciduous:tree-deciduous,TreePalm:tree-palm,TreePine:tree-pine,Trees:trees,TrendingDown:trending-down,TrendingUp:trending-up,TrendingUpDown:trending-up-down,Triangle:triangle,TriangleAlert:triangle-alert,TriangleDashed:triangle-dashed,TriangleRight:triangle-right,Trophy:trophy,Truck:truck,TruckElectric:truck-electric,TurkishLira:turkish-lira,Turntable:turntable,Turtle:turtle,Tv:tv,TvMinimal:tv-minimal,TvMinimalPlay:tv-minimal-play,Type:type,TypeOutline:type-outline,Umbrella:umbrella,UmbrellaOff:umbrella-off,Underline:underline,Undo:undo,Undo2:undo-2,UndoDot:undo-dot,UnfoldHorizontal:unfold-horizontal,UnfoldVertical:unfold-vertical,Ungroup:ungroup,University:university,Unlink:unlink,Unlink2:unlink-2,Unplug:unplug,Upload:upload,Usb:usb,UsbCPort:usb-c-port,User:user,UserCheck:user-check,UserCog:user-cog,UserGroup:user-group,UserKey:user-key,UserLock:user-lock,UserMinus:user-minus,UserPen:user-pen,UserPlus:user-plus,UserRound:user-round,UserRoundArrowLeft:user-round-arrow-left,UserRoundCheck:user-round-check,UserRoundCog:user-round-cog,UserRoundGroup:user-round-group,UserRoundKey:user-round-key,UserRoundMinus:user-round-minus,UserRoundPen:user-round-pen,UserRoundPlus:user-round-plus,UserRoundSearch:user-round-search,UserRoundX:user-round-x,UserSearch:user-search,UserShield:user-shield,UserStar:user-star,UserX:user-x,Users:users,UsersRound:users-round,Utensils:utensils,UtensilsCrossed:utensils-crossed,UtilityPole:utility-pole,Van:van,Variable:variable,Vault:vault,VectorPolygon:vector-polygon,VectorSquare:vector-square,Vegan:vegan,VenetianMask:venetian-mask,Venus:venus,VenusAndMars:venus-and-mars,Vibrate:vibrate,VibrateOff:vibrate-off,Video:video,VideoOff:video-off,Videotape:videotape,View:view,Virus:virus,VirusOff:virus-off,Voicemail:voicemail,Volleyball:volleyball,Volume:volume,Volume1:volume-1,Volume2:volume-2,VolumeOff:volume-off,VolumeX:volume-x,Vote:vote,Wallet:wallet,WalletCards:wallet-cards,WalletMinimal:wallet-minimal,Wallpaper:wallpaper,Wand:wand,WandSparkles:wand-sparkles,Warehouse:warehouse,WashingMachine:washing-machine,Watch:watch,WavesArrowDown:waves-arrow-down,WavesArrowUp:waves-arrow-up,WavesHorizontal:waves-horizontal,WavesLadder:waves-ladder,WavesVertical:waves-vertical,Waypoints:waypoints,Webcam:webcam,WebcamOff:webcam-off,Webhook:webhook,WebhookOff:webhook-off,Weight:weight,WeightTilde:weight-tilde,Wheat:wheat,WheatOff:wheat-off,Whistle:whistle,WholeWord:whole-word,Wifi:wifi,WifiCog:wifi-cog,WifiHigh:wifi-high,WifiLow:wifi-low,WifiOff:wifi-off,WifiPen:wifi-pen,WifiSync:wifi-sync,WifiZero:wifi-zero,Wind:wind,WindArrowDown:wind-arrow-down,Wine:wine,WineOff:wine-off,Workflow:workflow,Worm:worm,Wrench:wrench,WrenchOff:wrench-off,X:x,XLineTop:x-line-top,Zap:zap,ZapOff:zap-off,ZodiacAquarius:zodiac-aquarius,ZodiacAries:zodiac-aries,ZodiacCancer:zodiac-cancer,ZodiacCapricorn:zodiac-capricorn,ZodiacGemini:zodiac-gemini,ZodiacLeo:zodiac-leo,ZodiacLibra:zodiac-libra,ZodiacOphiuchus:zodiac-ophiuchus,ZodiacPisces:zodiac-pisces,ZodiacSagittarius:zodiac-sagittarius,ZodiacScorpio:zodiac-scorpio,ZodiacTaurus:zodiac-taurus,ZodiacVirgo:zodiac-virgo,ZoomIn:zoom-in,ZoomOut:zoom-out'; diff --git a/packages/components/src/renderers/action/__tests__/resolve-icon-lazy-9251.test.tsx b/packages/components/src/renderers/action/__tests__/resolve-icon-lazy-9251.test.tsx index 4dbc6436e8..ebbc559164 100644 --- a/packages/components/src/renderers/action/__tests__/resolve-icon-lazy-9251.test.tsx +++ b/packages/components/src/renderers/action/__tests__/resolve-icon-lazy-9251.test.tsx @@ -90,14 +90,27 @@ describe('objectui#9251 — the seam draws lazily without moving what renders', expect(renderIcon(resolveIcon('house')!, { size: 32 })!.getAttribute('width')).toBe('32'); }); - it('reproduces lucide\'s per-icon class names over the WHOLE record vocabulary', () => { - // ⚠️ The class names are the part a conversion rule gets wrong silently: 95 - // of the record's keys pack digits that lucide splits in the module name and - // not in the class derived from the key, so `Trash2` renders BOTH - // `lucide-trash2` and `lucide-trash-2`. `createLucideIcon` is what builds - // them and the seam no longer calls it, so every name is compared against - // the record's own component here — not a sample, and not a copy of the - // rule. + it('carries lucide\'s CANONICAL per-icon class over the WHOLE record vocabulary', () => { + // ⚠️ RELAXED under the maintainer's ruling C on objectui#8941 (comment + // 5750512894, verbatim 「8941 C」). This row USED TO REFUSE any seam glyph + // whose complete class set differed from lucide's own component's. It NO + // LONGER DOES, because lucide-react 1.43.0 emits one class per DECLARED + // ALIAS (`house` renders `lucide-house lucide-home`) and no longer emits the + // class it used to derive from the key, and the alias list exists only + // inside each icon module — the modules objectui#9251 made lazy — while the + // seam has to put its classes on the FIRST frame. The ruling chose the bump + // over carrying every alias in the eager static name list (option A), and + // it was taken knowing that it weakens this row. So a seam glyph missing + // lucide's alias classes, or carrying the key-derived class lucide no longer + // emits, now passes here. + // + // What it still refuses: a seam glyph without `lucide` or without lucide's + // CANONICAL class, `lucide-`, which lucide emits first after the + // bare `lucide`. That is the class a conversion rule gets wrong silently, + // because many keys pack digits that lucide splits in the module name + // (`ArrowDown01` is `lucide-arrow-down-0-1`, never `lucide-arrow-down01`). + // Every name is still compared against the record's own component — not a + // sample, and not a copy of the rule. const keys = Object.keys(icons); expect(keys.length).toBeGreaterThan(1000); const mismatches: string[] = []; @@ -106,9 +119,13 @@ describe('objectui#9251 — the seam draws lazily without moving what renders', if (/\d/.test(key)) digitKeysChecked += 1; const reference = renderIcon((icons as Record)[key], {}); const seam = renderIcon(resolveIcon(key)!, {}); - const want = classesOf(reference).join(' '); - const got = classesOf(seam).join(' '); - if (want !== got) mismatches.push(`${key}: expected "${want}", got "${got}"`); + // Read in lucide's own order: `lucide`, then the canonical class, then + // one class per alias. Only the first two are required of the seam. + const [base, canonical] = (reference?.getAttribute('class') ?? '').split(/\s+/).filter(Boolean); + const got = classesOf(seam); + if (base !== 'lucide' || !canonical?.startsWith('lucide-') || !got.includes(base) || !got.includes(canonical)) { + mismatches.push(`${key}: expected "${base} ${canonical}" among "${got.join(' ')}"`); + } } expect(mismatches.slice(0, 10)).toEqual([]); // Non-vacuity, both ways: the loop ran, and it ran over the class of name diff --git a/packages/components/src/renderers/action/action-bar.tsx b/packages/components/src/renderers/action/action-bar.tsx index dd60d8a9d2..60f3d08c97 100644 --- a/packages/components/src/renderers/action/action-bar.tsx +++ b/packages/components/src/renderers/action/action-bar.tsx @@ -41,7 +41,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/action/resolve-icon.ts b/packages/components/src/renderers/action/resolve-icon.ts index 7dc71026ce..99c47bc103 100644 --- a/packages/components/src/renderers/action/resolve-icon.ts +++ b/packages/components/src/renderers/action/resolve-icon.ts @@ -180,25 +180,33 @@ function recordIconName(key: string): string | undefined { } /** - * The two `lucide-*` class names lucide's own `createLucideIcon` puts on every - * glyph, rebuilt here because they are added by `createLucideIcon`, which builds the - * per-icon components this seam no longer loads. `Icon` — the component every - * lucide glyph ultimately renders, and the one used below — contributes only - * the bare `lucide` class. + * The per-icon `lucide-*` class names, rebuilt here because lucide derives them + * from the icon's own module, which this seam does not have on the first frame. + * `Icon` — the component every lucide glyph ultimately renders, and the one + * used below — contributes only the bare `lucide` class when it is handed a + * bare `iconNode`. * * ⚠️ Without this, `svg.lucide-house` would stop matching anywhere in the * product and in 194 lines of this repo's own assertions, and it would stop * matching SILENTLY: the glyph still draws, so nothing looks broken until a * stylesheet or a query that selects by icon identity quietly matches nothing. * - * Both spellings are derived the way lucide derives them — - * `lucide-${toKebabCase(toPascalCase(kebab))}` and `lucide-${kebab}` — which is - * one class for most icons and two for the 95 whose PascalCase key packs digits - * (`Trash2` gives `lucide-trash2 lucide-trash-2`). The PascalCase key is - * already in hand here, so only the kebab-casing of it is re-implemented; - * `resolve-icon-classnames.test.ts` pins the result against the record's own - * components over the WHOLE vocabulary, so a lucide change to either derivation - * fails rather than drifts. + * Two spellings are emitted: `lucide-${kebab}`, lucide's CANONICAL class for + * the icon, and `lucide-${toKebabCase(toPascalCase(kebab))}`, the class lucide + * derived from the PascalCase key up to 1.35.0 — one class for most icons and + * two for the keys that pack digits or a leading initial (`ArrowDown01` also + * gives `lucide-arrow-down01`). The PascalCase key is already in hand here, so + * only the kebab-casing of it is re-implemented. + * + * ⚠️ That is NOT the set lucide-react 1.43.0 puts on its own component, which + * no longer carries the key-derived class and carries one class per DECLARED + * ALIAS instead (`house` also renders `lucide-home`). The alias list + * exists only inside each lazily loaded icon module, and the maintainer's + * ruling C on objectui#8941 (comment 5750512894, 「8941 C」) accepted that the + * seam reproduces the canonical class and not the aliases, rather than carry + * every alias in the eager static name list. `resolve-icon-lazy-9251.test.tsx` + * pins exactly that much — `lucide` plus the canonical class — against the + * record's own components over the WHOLE vocabulary. */ function lucideClassNames(recordKey: string, kebab: string, className?: string): string { const fromKey = `lucide-${recordKey.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()}`; @@ -208,8 +216,18 @@ function lucideClassNames(recordKey: string, kebab: string, className?: string): .trim(); } -/** lucide's own path-data shape, taken from the component that consumes it. */ -type IconNode = React.ComponentProps['iconNode']; +/** + * lucide's own path-data shape, taken from the component that consumes it. + * + * ⛔ `NonNullable` is load-bearing, not decoration. lucide 1.43.0 split `Icon`'s + * props into a UNION — one arm takes `iconNode` and forbids `icon`, the other + * takes `icon` and forbids `iconNode` — and indexing a union yields the union + * of the members, so this alias silently picked up the second arm's + * `iconNode?: undefined`. That widened {@link EMPTY_ICON_NODE} to include + * `undefined`, which is the one value NEITHER arm accepts, so the placeholder + * written to guarantee a box stopped type-checking as a box. + */ +type IconNode = NonNullable['iconNode']>; /** * What the glyph holds before its module arrives: the same `` lucide @@ -258,8 +276,15 @@ function lazyIconComponent(recordKey: string, kebab: string): LucideIcon { // better answer than a thrown render. if (!load) return undefined; void load() - .then((module: { __iconNode?: IconNode }) => { - const node = module.__iconNode; + .then((module: { __iconNode?: IconNode; __iconData?: { node?: IconNode } }) => { + // lucide moved the path data between these two exports: an icon + // module used to expose `__iconNode` directly and now wraps it in + // `__iconData` alongside `name`, `size` and `aliases`. Both are read + // because the failure mode of reading only one is invisible — the + // placeholder `` below is already mounted with the right classes + // and the right box, so a glyph that never arrives looks exactly like + // one that has not arrived YET. Nothing throws and nothing logs. + const node = module.__iconData?.node ?? module.__iconNode; if (!node) return; loadedIconNodes.set(kebab, node); if (live) setIconNode(node); 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..34c0577b11 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 @@ -143,7 +143,23 @@ describe('ui:button icon resolution (objectui#5993)', () => { // 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(); + // ⚠️ RELAXED under the maintainer's ruling C on objectui#8941 (comment + // 5750512894, verbatim 「8941 C」). This row USED TO REFUSE a house glyph + // that did not also carry lucide's `lucide-home` ALIAS class on the same + // element: `querySelector('svg.lucide-home')` had to BE the house svg. It + // NO LONGER DOES, because this button draws through the objectui#9251 + // seam, which emits lucide's canonical class and not lucide-react + // 1.43.0's per-alias classes, and the ruling accepted that rather than + // put every icon's aliases into the eager static name list. + // + // ⛔ Nor does it go back to the older form, `svg.lucide-home` is null: + // lucide 1.43.0 itself puts `lucide-home` on the house glyph, so that + // class no longer says which glyph was drawn, and pinning its absence + // would pin the seam's divergence from lucide. `lucide-home` is neither + // required nor forbidden here. What still discriminates is the count: + // `Home` is not a key of the runtime record, so had the rename been + // dropped this button would render NO glyph at all. + expect(button.querySelectorAll('svg')).toHaveLength(1); }); 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 564873eccd..2c868e482f 100644 --- a/packages/fields/package.json +++ b/packages/fields/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", "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 8997c4a753..3a878102a2 100644 --- a/packages/layout/package.json +++ b/packages/layout/package.json @@ -32,7 +32,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-ai/package.json b/packages/plugin-ai/package.json index cd25b30bd8..c8e6189f20 100644 --- a/packages/plugin-ai/package.json +++ b/packages/plugin-ai/package.json @@ -34,7 +34,7 @@ "@object-ui/core": "workspace:*", "@object-ui/i18n": "workspace:*", "@object-ui/types": "workspace:*", - "lucide-react": "^1.31.0" + "lucide-react": "^1.43.0" }, "devDependencies": { "@object-ui/test-support": "workspace:*", diff --git a/packages/plugin-calendar/package.json b/packages/plugin-calendar/package.json index 389b1665e6..2d8f7ed0f0 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 fab7a1a006..3e1b047f8d 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" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", diff --git a/packages/plugin-designer/package.json b/packages/plugin-designer/package.json index 9c99d541ef..7aa6ba7d73 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 7430a08df4..7c60a84360 100644 --- a/packages/plugin-detail/src/DetailView.tsx +++ b/packages/plugin-detail/src/DetailView.tsx @@ -978,7 +978,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 b3ee17dbf6..e8dbc9b11e 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 98af882ed5..f76a7baa44 100644 --- a/packages/plugin-grid/package.json +++ b/packages/plugin-grid/package.json @@ -34,7 +34,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 d36da81807..8815aed300 100644 --- a/packages/plugin-kanban/package.json +++ b/packages/plugin-kanban/package.json @@ -43,7 +43,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-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 8de4d015ff..6f982e60e9 100644 --- a/packages/plugin-tree/package.json +++ b/packages/plugin-tree/package.json @@ -39,7 +39,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 9e9514bd04..b511ab98fc 100644 --- a/packages/types/src/objectql.ts +++ b/packages/types/src/objectql.ts @@ -525,7 +525,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 3d15e781e5..57860e9ad6 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.35.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 @@ -420,16 +420,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.35.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.35.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.35.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.35.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) @@ -789,8 +789,8 @@ importers: specifier: ^3.3.1 version: 3.3.1 lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -1102,8 +1102,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.35.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) @@ -1292,8 +1292,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.35.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 @@ -1396,8 +1396,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.35.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react-dom: specifier: 19.2.8 version: 19.2.8(react@19.2.8) @@ -1483,8 +1483,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -1544,8 +1544,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -1599,8 +1599,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -1672,8 +1672,8 @@ importers: specifier: ^0.7.1 version: 0.7.1 lucide-react: - specifier: ^1.31.0 - version: 1.35.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) @@ -1748,8 +1748,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.0(react@19.2.8) + specifier: ^1.43.0 + version: 1.43.0(react@19.2.8) react-dom: specifier: 19.2.8 version: 19.2.8(react@19.2.8) @@ -1818,8 +1818,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -1867,8 +1867,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.35.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 @@ -1992,8 +1992,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.35.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 @@ -2053,8 +2053,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.35.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 @@ -2129,8 +2129,8 @@ importers: specifier: ^4.4.0 version: 4.4.0 lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -2208,8 +2208,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -2257,8 +2257,8 @@ importers: packages/plugin-list: dependencies: lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -2458,8 +2458,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -2586,8 +2586,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.35.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 @@ -2659,8 +2659,8 @@ importers: specifier: ^0.7.1 version: 0.7.1 lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -2770,8 +2770,8 @@ importers: specifier: workspace:* version: link:../types lucide-react: - specifier: ^1.31.0 - version: 1.35.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 @@ -8584,8 +8584,8 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - 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 @@ -15853,7 +15853,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.35.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 @@ -15881,7 +15881,7 @@ snapshots: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 '@types/react': 19.2.18 - lucide-react: 1.35.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) @@ -15890,14 +15890,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.35.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.35.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 @@ -15923,7 +15923,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.35.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) @@ -15939,8 +15939,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.35.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.2.0(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 @@ -16831,7 +16831,7 @@ snapshots: dependencies: yallist: 4.0.0 - 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/__tests__/lucide-record-icon-names-generated-9251.test.ts b/scripts/__tests__/lucide-record-icon-names-generated-9251.test.ts index d55d8007a1..bab93a5969 100644 --- a/scripts/__tests__/lucide-record-icon-names-generated-9251.test.ts +++ b/scripts/__tests__/lucide-record-icon-names-generated-9251.test.ts @@ -96,11 +96,16 @@ describe('the generated legal icon-name list (objectui#9251)', () => { // The plain cases, so the rows below are not only about the exceptions. expect(pairs.get('House')).toBe('house'); expect(pairs.get('AirVent')).toBe('air-vent'); - // The 95 that a PascalCase-to-kebab regex gets wrong. Each of these would - // become `trash2` / `arrow-down01` / `axis3d`, none of which lucide can - // load — and the failure is an icon that draws nothing, with no error. - expect(pairs.get('Trash2')).toBe('trash-2'); + // The ones a PascalCase-to-kebab regex gets wrong. Each of these would + // become `arrow-down01` / `arrow-down10` / `axis3d`, none of which lucide + // can load — and the failure is an icon that draws nothing, with no error. + // + // ⛔ The row here was `Trash2 -> trash-2` until lucide retired that + // spelling out of the manifest this list is derived from. A row pinned to a + // name the library can drop fails on an upgrade that broke nothing, so the + // three below are live names carrying the same digit split. expect(pairs.get('ArrowDown01')).toBe('arrow-down-0-1'); + expect(pairs.get('ArrowDown10')).toBe('arrow-down-1-0'); expect(pairs.get('Axis3d')).toBe('axis-3d'); const naive = (key: string) => key.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase(); const diverging = [...pairs].filter(([key, kebab]) => naive(key) !== kebab); diff --git a/scripts/regenerate-lucide-record-icon-names.mjs b/scripts/regenerate-lucide-record-icon-names.mjs index ab944077f5..90b60c48c5 100644 --- a/scripts/regenerate-lucide-record-icon-names.mjs +++ b/scripts/regenerate-lucide-record-icon-names.mjs @@ -26,7 +26,7 @@ * lucide's OWN export manifest, `lucide-react/dist/esm/icons/index.mjs`, which * is the file the `icons` record is built from: * - * export { default as Trash2 } from './trash-2.mjs'; + * export { default as ArrowDown01 } from './arrow-down-0-1.mjs'; * * Each line carries BOTH spellings this repo needs — the PascalCase key the * seam looks names up by, and the kebab-case module name `DynamicIcon` loads. @@ -35,11 +35,13 @@ * into anybody's bundle. * * ⚠️ The second spelling is not decoration and ⛔ must not be replaced by a - * conversion rule at the call site. 95 of the 1,781 keys do not survive one: - * `Trash2` is `trash-2`, `ArrowDown01` is `arrow-down-0-1`, `Axis3d` is - * `axis-3d`. A PascalCase-to-kebab regex silently produces `trash2`, - * `arrow-down01` and `axis3d`, none of which `dynamicIconImports` can load — - * and the failure surfaces as an icon that renders nothing, with no error. + * conversion rule at the call site. The keys that do not survive one — + * however many the `carries the kebab spelling lucide ships` pin re-derives on + * the installed release — include `ArrowDown01`, which is `arrow-down-0-1`, + * and `Axis3d`, which is `axis-3d`. A PascalCase-to-kebab regex silently + * produces `arrow-down01` and `axis3d`, neither of which `dynamicIconImports` + * can load — and the failure surfaces as an icon that renders nothing, with no + * error. * * ── The three preconditions it refuses to write without ──────────────────── * @@ -97,8 +99,18 @@ const EXPORT_LINE = /^export \{ default as ([A-Za-z0-9]+) \} from '\.\/([a-z0-9] */ const CONTROL_PAIR = ['House', 'house']; -/** One of the 95 keys a PascalCase-to-kebab conversion gets wrong. */ -const DIGIT_CONTROL_PAIR = ['Trash2', 'trash-2']; +/** + * One of the keys a PascalCase-to-kebab conversion gets wrong, used as the + * second FIRING CONTROL on precondition 1. + * + * ⛔ It must be a name lucide still carries in the manifest. This control was + * `Trash2 -> trash-2`, and that is a spelling lucide RETIRED — so the control + * began failing on an upgrade that had broken nothing, reporting a refusal to + * write where the derivation was in fact intact. A control that fires on the + * library's own vocabulary moving is measuring the wrong thing; it has to fire + * only on the PARSE breaking. + */ +const DIGIT_CONTROL_PAIR = ['ArrowDown01', 'arrow-down-0-1']; /** * Every `Pascal -> kebab` pair lucide's own export manifest declares, sorted by @@ -221,8 +233,9 @@ export function renderModule(pairs) { * Each entry is \`PascalCaseKey:kebab-module-name\`. The first is what the seam * looks a tokenised author-supplied name up by; the second is what * \`DynamicIcon\` loads. ⛔ The second is NOT derivable from the first by a - * regex — 95 of these keys carry digits that lucide splits and a conversion - * does not (\`Trash2\` is \`trash-2\`, \`ArrowDown01\` is \`arrow-down-0-1\`). + * regex — many of these keys carry digits or leading initials that lucide + * splits and a conversion does not (\`ArrowDown01\` is \`arrow-down-0-1\`, + * \`Axis3d\` is \`axis-3d\`). * * ⛔ This list is deliberately NOT \`Object.keys(icons)\`. That derivation is the * eager record written a second way: indexing the record pulls every icon diff --git a/skills/objectui/guides/plugin-development.md b/skills/objectui/guides/plugin-development.md index 001c4653b3..de8ad29dfd 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",