@object-ui/components 17.6.0 → 17.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8750 -0
- package/README.md +5 -3
- package/dist/custom/button-group.d.ts +1 -1
- package/dist/custom/combobox.d.ts +2 -4
- package/dist/custom/empty.d.ts +16 -4
- package/dist/custom/field.d.ts +1 -1
- package/dist/custom/filter-builder.d.ts +198 -66
- package/dist/custom/index.d.ts +0 -1
- package/dist/custom/item.d.ts +1 -1
- package/dist/custom/kbd.d.ts +1 -1
- package/dist/custom/mobile-dialog-content.d.ts +22 -1
- package/dist/custom/navigation-overlay.d.ts +105 -0
- package/dist/custom/refresh-indicator.d.ts +8 -2
- package/dist/custom/view-states.d.ts +74 -1
- package/dist/hooks/related-count-store.d.ts +26 -28
- package/dist/index.css +157 -363
- package/dist/index.d.ts +3 -3
- package/dist/index.js +6603 -5987
- package/dist/index.umd.cjs +10 -15
- package/dist/lib/close-label.d.ts +1 -2
- package/dist/lib/date-fns-locale.d.ts +41 -0
- package/dist/lib/lazy-icon.d.ts +32 -1
- package/dist/lib/lucide-record-icon-names.d.ts +30 -0
- package/dist/lib/utils.d.ts +113 -0
- package/dist/renderers/action/action-bar.d.ts +8 -36
- package/dist/renderers/action/action-button.d.ts +15 -4
- package/dist/renderers/action/action-group.d.ts +5 -4
- package/dist/renderers/action/action-icon.d.ts +12 -2
- package/dist/renderers/action/action-menu.d.ts +5 -2
- package/dist/renderers/action/auto-trigger.d.ts +19 -4
- package/dist/renderers/action/resolve-icon.d.ts +27 -2
- package/dist/renderers/action/static-params.d.ts +79 -0
- package/dist/renderers/action/visibility-gate.d.ts +11 -3
- package/dist/renderers/basic/elements.d.ts +3 -0
- package/dist/renderers/basic/html-elements.d.ts +7 -3
- package/dist/renderers/basic/readProps.d.ts +60 -0
- package/dist/renderers/complex/data-table.d.ts +31 -14
- package/dist/renderers/complex/dataTableBindDiagnostic.d.ts +187 -0
- package/dist/renderers/layout/box.d.ts +8 -0
- package/dist/renderers/layout/containers.d.ts +1 -10
- package/dist/renderers/layout/react-page.d.ts +4 -0
- package/dist/renderers/navigation/sidebar.d.ts +31 -0
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/calendar.d.ts +2 -1
- package/dist/ui/command.d.ts +7 -7
- package/dist/ui/index.d.ts +0 -1
- package/dist/ui/input-otp.d.ts +2 -2
- package/dist/ui/sheet.d.ts +1 -1
- package/dist/ui/sidebar.d.ts +2 -1
- package/package.json +13 -14
- package/dist/SchemaRenderer.d.ts +0 -4
- package/dist/custom/export-progress-dialog.d.ts +0 -43
- package/dist/hooks/use-export-job.d.ts +0 -34
- package/dist/ui/chart.d.ts +0 -56
- package/dist/ui/toast.d.ts +0 -22
|
@@ -31,8 +31,7 @@
|
|
|
31
31
|
* The no-provider path must stay English. A large number of existing unit
|
|
32
32
|
* tests and e2e specs address dialogs and drawers by their English accessible
|
|
33
33
|
* name with no `I18nProvider` mounted (e.g.
|
|
34
|
-
* `packages/plugin-form/src/discardGuard.test.tsx
|
|
35
|
-
* `packages/plugin-detail/src/__tests__/InlineCreateRelated.closeButtonName.test.tsx`),
|
|
34
|
+
* `packages/plugin-form/src/discardGuard.test.tsx`),
|
|
36
35
|
* and a primitive that rendered a raw `common.close` key there would break all
|
|
37
36
|
* of them. `createSafeTranslation` probes its test key and falls back to the
|
|
38
37
|
* defaults map below when translations are not configured, so "no provider"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Locale } from 'date-fns';
|
|
2
|
+
/** Every locale code this module can answer with: the loaders' keys, and `en-US`. */
|
|
3
|
+
export declare const DATE_LOCALE_KEYS: readonly string[];
|
|
4
|
+
/**
|
|
5
|
+
* The date-fns locale code a BCP-47 tag reads, by the chain in the header:
|
|
6
|
+
* the tag as given, its language with the region, then with the script, that
|
|
7
|
+
* `maximize()` gives it, then its bare language, then `en-US`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function dateLocaleKeyFor(tag: string): string;
|
|
10
|
+
/** The locale for `key` if it has been loaded, without loading it. */
|
|
11
|
+
export declare function loadedDateLocale(key: string): Locale | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Load the locale for `key`. Memoised: a loaded locale is returned without a
|
|
14
|
+
* second import, and concurrent callers share one promise. ⛔ A rejected load
|
|
15
|
+
* is not memoised, so a chunk that failed to download can be fetched again.
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadDateLocale(key: string): Promise<Locale>;
|
|
18
|
+
/**
|
|
19
|
+
* `Calendar`'s input that names its locale as a BCP-47 TAG (objectui#10747).
|
|
20
|
+
*
|
|
21
|
+
* Declared here, beside the resolver it feeds, so the patch that adds it to the
|
|
22
|
+
* No-Touch `ui/calendar.tsx` stays a one-line reference.
|
|
23
|
+
*/
|
|
24
|
+
export interface CalendarLocaleTagProps {
|
|
25
|
+
/**
|
|
26
|
+
* The BCP-47 tag this calendar's caption, weekday heads and week start read,
|
|
27
|
+
* in place of the session's display locale: the tag a host already formats
|
|
28
|
+
* its own dates with, such as `CalendarView`'s `effectiveLocale`. It is
|
|
29
|
+
* resolved by the chain in this module's header, so `de-CH` reads date-fns
|
|
30
|
+
* `de`, and a tag date-fns has no locale for, or a malformed one, reads
|
|
31
|
+
* `enUS`. Absent, the calendar reads the display locale. A date-fns `locale`
|
|
32
|
+
* object passed to `Calendar` still wins over both.
|
|
33
|
+
*/
|
|
34
|
+
localeTag?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The date-fns `Locale` for `tag`, or for the session's display locale when no
|
|
38
|
+
* tag is given (objectui#10747): an explicit tag wins. It reads `enUS` until
|
|
39
|
+
* that locale has loaded, then re-renders its caller with it.
|
|
40
|
+
*/
|
|
41
|
+
export declare function useDisplayDateLocale(tag?: string): Locale;
|
package/dist/lib/lazy-icon.d.ts
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Convert PascalCase / camelCase / mixed names to kebab-case for DynamicIcon.
|
|
4
|
+
*
|
|
5
|
+
* The transform is the INVERSE of lucide's own `toPascalCase`, which is what
|
|
6
|
+
* builds every exported component name out of a canonical icon name: it drops
|
|
7
|
+
* each hyphen and upper-cases the character that followed it. So the job here
|
|
8
|
+
* is to put a boundary back wherever `toPascalCase` removed one, and nowhere
|
|
9
|
+
* else. Three rules do it, and each one answers a different shape of boundary:
|
|
10
|
+
*
|
|
11
|
+
* 1. `lower-or-digit -> Upper` — the ordinary word boundary (`ChevronRight`).
|
|
12
|
+
* 2. `acronym-run -> Word` — a run of capitals followed by a word
|
|
13
|
+
* (`SVGIcon`), where rule 1 would swallow the last capital.
|
|
14
|
+
* 3. `letter -> digit` — the boundary a digit-suffixed name carries
|
|
15
|
+
* (`Building2` -> `building-2`). ⚠️ It is NOT unconditional: the negative
|
|
16
|
+
* lookbehind holds the rule off when the letter is itself preceded by a
|
|
17
|
+
* digit, because that is lucide's grid spelling — `Grid2x2` is the Pascal
|
|
18
|
+
* form of `grid-2x2`, where the `x` sits INSIDE a segment rather than
|
|
19
|
+
* starting one. Splitting there produces `grid-2x-2`, which is not a name.
|
|
20
|
+
*
|
|
21
|
+
* ⛔ Rule 3 is the boundary the seam went without until objectui#9414, and the
|
|
22
|
+
* cost was not visible anywhere: `Building2` — the spelling `lucide-react`
|
|
23
|
+
* exports and lucide's own site shows — tokenised to `building2`, matched no
|
|
24
|
+
* canonical name, and `getLazyIcon` degraded it to the `Database` glyph with no
|
|
25
|
+
* error, no warning and no log. The author saw *an* icon and no signal that it
|
|
26
|
+
* was not theirs.
|
|
27
|
+
*
|
|
28
|
+
* ⛔ Do not write down how many names rule 3 recovers. The property that matters
|
|
29
|
+
* is re-derived from the installed lucide on every run by
|
|
30
|
+
* `__tests__/lazy-icon-digit-boundary-9414.test.ts`: every canonical icon name
|
|
31
|
+
* is reachable from its own exported PascalCase spelling, and every name the
|
|
32
|
+
* pre-#9414 tokeniser resolved still resolves to the byte-identical result.
|
|
33
|
+
*/
|
|
3
34
|
export declare function toKebabIconName(name: string): string;
|
|
4
35
|
/**
|
|
5
36
|
* Whether `name` (kebab-case or PascalCase) resolves to a real Lucide icon.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* GENERATED FILE — do not edit by hand.
|
|
10
|
+
*
|
|
11
|
+
* Regenerate: node scripts/regenerate-lucide-record-icon-names.mjs
|
|
12
|
+
* Verified by: scripts/check-lucide-icon-record-names.mjs (part 4), which also
|
|
13
|
+
* proves this list is the same vocabulary as lucide's runtime
|
|
14
|
+
* `icons` record.
|
|
15
|
+
*
|
|
16
|
+
* The legal icon-name set for `renderers/action/resolve-icon.ts`, as read out
|
|
17
|
+
* of lucide's own export manifest at generation time.
|
|
18
|
+
*
|
|
19
|
+
* Each entry is `PascalCaseKey:kebab-module-name`. The first is what the seam
|
|
20
|
+
* looks a tokenised author-supplied name up by; the second is what
|
|
21
|
+
* `DynamicIcon` loads. ⛔ The second is NOT derivable from the first by a
|
|
22
|
+
* regex — many of these keys carry digits or leading initials that lucide
|
|
23
|
+
* splits and a conversion does not (`ArrowDown01` is `arrow-down-0-1`,
|
|
24
|
+
* `Axis3d` is `axis-3d`).
|
|
25
|
+
*
|
|
26
|
+
* ⛔ This list is deliberately NOT `Object.keys(icons)`. That derivation is the
|
|
27
|
+
* eager record written a second way: indexing the record pulls every icon
|
|
28
|
+
* module into the eager closure, which is the payload objectui#9251 removed.
|
|
29
|
+
*/
|
|
30
|
+
export declare 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,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";
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,4 +1,117 @@
|
|
|
1
1
|
import { ClassValue } from 'clsx';
|
|
2
2
|
import { default as React } from 'react';
|
|
3
3
|
export declare function cn(...inputs: ClassValue[]): string;
|
|
4
|
+
/**
|
|
5
|
+
* The ONE emptiness predicate for a `SchemaNode` slot (objectui#9162).
|
|
6
|
+
*
|
|
7
|
+
* A node slot's published zod face carries a `z.number()` arm
|
|
8
|
+
* (`nodeUnionOptions`, `packages/types/src/zod/base.zod.ts`), so `children: 0`
|
|
9
|
+
* is legal authored input — and React RENDERS numbers. Truthiness is therefore
|
|
10
|
+
* the rule a node slot states: every falsy value (`0`, `-0`, `NaN`, `''`,
|
|
11
|
+
* `false`, `null`, `undefined`) means "this slot has no content", plus the
|
|
12
|
+
* empty array, which has no content either.
|
|
13
|
+
*
|
|
14
|
+
* ⛔ Not a nullish test. `0` is not "absent"; it is present and renders
|
|
15
|
+
* nothing, which is the distinction objectui#8331 kept deliberately and
|
|
16
|
+
* objectui#9033 kept again: truthiness makes the slot's answer independent of
|
|
17
|
+
* `toRenderableSchema`, and that independence is what kept the sibling slot out
|
|
18
|
+
* of the defect while the bridge was wrong.
|
|
19
|
+
*
|
|
20
|
+
* ⛔ Not a `typeof === 'object'` test either. objectui#7105 ruled that node
|
|
21
|
+
* slots RELAX the renderer rather than narrow the declaration — a bare string
|
|
22
|
+
* is a legal node and renders as its own text.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isEmptyNodeSlot(slot: unknown): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Render a `SchemaNode` slot that lives inside chrome which must disappear
|
|
27
|
+
* along with it — `<CardFooter>`, `<DialogFooter>`, a wrapping `<div>`.
|
|
28
|
+
*
|
|
29
|
+
* This exists because the obvious spelling is a trap:
|
|
30
|
+
*
|
|
31
|
+
* ```tsx
|
|
32
|
+
* {schema.footer && <CardFooter>{renderChildren(schema.footer)}</CardFooter>}
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* `&&` does not evaluate to `false` when the slot is falsy — it evaluates to
|
|
36
|
+
* the SLOT, and React paints `0`. Worse, `&&` short-circuits, so
|
|
37
|
+
* `renderChildren`'s own `if (isEmptyNodeSlot) return null` first leg is never
|
|
38
|
+
* reached and the bridge repair of objectui#8908 cannot help either. The class
|
|
39
|
+
* was patched one instance at a time three times (objectui#8331 →
|
|
40
|
+
* objectui#9033 → the eleven of objectui#9162) before it was closed here.
|
|
41
|
+
*
|
|
42
|
+
* `render` receives the slot itself, not a pre-rendered node, because some
|
|
43
|
+
* call sites render it with extra context (`<SchemaRenderer schema={…}
|
|
44
|
+
* data={data} />` in `plugin-detail`). It is invoked ONLY when the slot has
|
|
45
|
+
* content, so the chrome and the content appear and disappear together.
|
|
46
|
+
*
|
|
47
|
+
* A slot with NO chrome does not need this — call `renderChildren(slot)`
|
|
48
|
+
* directly, which is the same guard with nothing wrapped around it. The rule
|
|
49
|
+
* `object-ui/no-bare-node-slot-guard` refuses the `&&` spelling so that these
|
|
50
|
+
* two remain the only two.
|
|
51
|
+
*/
|
|
52
|
+
export declare function renderNodeSlot<T>(slot: T, render: (slot: NonNullable<T>) => React.ReactNode): React.ReactNode;
|
|
4
53
|
export declare function renderChildren(children: any): React.ReactNode;
|
|
54
|
+
/**
|
|
55
|
+
* Render a Radix primitive's `*Trigger` around an authored node slot — or
|
|
56
|
+
* render NOTHING when that slot is empty (objectui#9710; the same defect was
|
|
57
|
+
* repaired one instance at a time on objectui#9701).
|
|
58
|
+
*
|
|
59
|
+
* Two rules live here together, because a call site that reaches for one and
|
|
60
|
+
* forgets the other reintroduces a defect this seam exists to close.
|
|
61
|
+
*
|
|
62
|
+
* ## 1. The trigger is chrome, and chrome disappears with its slot
|
|
63
|
+
*
|
|
64
|
+
* `trigger` is `.optional()` on most of these keys, so a document that omits it
|
|
65
|
+
* is LEGAL. The primitive must then render nothing at all: a `*Trigger` with no
|
|
66
|
+
* content still paints its own element, and an empty `button` is an unlabeled
|
|
67
|
+
* tab stop that a keyboard user lands on with nothing to read. That is
|
|
68
|
+
* {@link renderNodeSlot}'s contract — chrome that appears and disappears with
|
|
69
|
+
* its content — and it is why the emptiness guard is INSIDE this seam rather
|
|
70
|
+
* than at each call site.
|
|
71
|
+
*
|
|
72
|
+
* ⚠️ Radix's `Slot` never objected to the empty case: read from the
|
|
73
|
+
* lockfile-pinned `@radix-ui/react-slot`, the branch that throws is guarded by
|
|
74
|
+
* `if (children || children === 0)`, so a `null` child is returned as-is. The
|
|
75
|
+
* empty arm was never broken by the defect below, and must not be broken by its
|
|
76
|
+
* repair.
|
|
77
|
+
*
|
|
78
|
+
* ## 2. `asChild` asks Radix's structural question, not a `typeof` question
|
|
79
|
+
*
|
|
80
|
+
* `asChild` resolves the primitive to that same `Slot`, which merges its props
|
|
81
|
+
* onto a SINGLE React element and throws on anything else it is actually given.
|
|
82
|
+
* A node slot admits far more: the published `SchemaNode` union names `string`,
|
|
83
|
+
* `number`, `boolean`, `null` and `undefined` beside `BaseSchema`, and the
|
|
84
|
+
* trigger keys add an ARRAY of nodes on top. So an unconditional `asChild`
|
|
85
|
+
* asserted a precondition neither published face ever promised, and the values
|
|
86
|
+
* that missed it THREW: `trigger: 'Open it'` — the most natural thing to write
|
|
87
|
+
* for something called a trigger — validated on both faces and then landed the
|
|
88
|
+
* whole node in `SchemaRenderer`'s error boundary, with no diagnostic naming
|
|
89
|
+
* the key. A multi-node array threw the same way, for the same reason.
|
|
90
|
+
*
|
|
91
|
+
* Where `Slot` cannot serve, the primitive renders its OWN element around the
|
|
92
|
+
* content, so a bare string paints as the trigger's text and stays a real
|
|
93
|
+
* trigger; where it CAN serve, the merge is unchanged.
|
|
94
|
+
*
|
|
95
|
+
* ⛔ Widens no published face. `packages/types` states the accept set and is
|
|
96
|
+
* untouched; the implementation is catching up to a declaration that already
|
|
97
|
+
* said yes — the direction objectui#7105 ruled for node slots, which RELAX the
|
|
98
|
+
* renderer rather than narrow the declaration.
|
|
99
|
+
*
|
|
100
|
+
* ```tsx
|
|
101
|
+
* {renderTriggerSlot(DialogTrigger, schema.trigger)}
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* ⚠️ A helper is only reached by an author who calls it, so it is not what
|
|
105
|
+
* keeps the next overlay key out of either defect. That is
|
|
106
|
+
* `overlay-trigger-bare-string-9710.test.tsx`, which enumerates the REGISTRY
|
|
107
|
+
* for blocks declaring a `trigger` slot rather than naming files, and reads the
|
|
108
|
+
* zod faces for which of them may legally omit one — so a ninth key is covered
|
|
109
|
+
* on the day it registers, whatever spelling it reached for. ⚠️ That pin is
|
|
110
|
+
* also the ONLY live instrument for this class: a repaired call site carries no
|
|
111
|
+
* `asChild` attribute and no `*Trigger` tag, so a source grep can no longer
|
|
112
|
+
* tell a repaired renderer from a deleted one.
|
|
113
|
+
*/
|
|
114
|
+
export declare function renderTriggerSlot(Trigger: React.ComponentType<{
|
|
115
|
+
asChild?: boolean;
|
|
116
|
+
children?: React.ReactNode;
|
|
117
|
+
}>, slot: unknown): React.ReactNode;
|
|
@@ -1,36 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* {@link maxVisible}. They share a single overflow button with any business
|
|
10
|
-
* actions that spilled past {@link maxVisible}, guaranteeing at most one
|
|
11
|
-
* "More" menu per bar.
|
|
12
|
-
*
|
|
13
|
-
* The first system action is automatically separated from business-overflow
|
|
14
|
-
* entries by a menu separator.
|
|
15
|
-
*/
|
|
16
|
-
systemActions?: UIActionSchema[];
|
|
17
|
-
/** Filter actions by this location */
|
|
18
|
-
location?: ActionLocation;
|
|
19
|
-
/** Maximum visible inline actions before overflow into "More" menu (default: 3) */
|
|
20
|
-
maxVisible?: number;
|
|
21
|
-
/** Maximum visible inline actions on mobile devices (default: 1). Desktop uses maxVisible instead. */
|
|
22
|
-
mobileMaxVisible?: number;
|
|
23
|
-
/** Visibility condition expression */
|
|
24
|
-
visible?: string;
|
|
25
|
-
/** Layout direction */
|
|
26
|
-
direction?: 'horizontal' | 'vertical';
|
|
27
|
-
/** Gap between items (Tailwind gap class, default: 'gap-2') */
|
|
28
|
-
gap?: string;
|
|
29
|
-
/** Button variant for all actions (can be overridden per-action) */
|
|
30
|
-
variant?: string;
|
|
31
|
-
/** Button size for all actions (can be overridden per-action) */
|
|
32
|
-
size?: string;
|
|
33
|
-
/** Custom CSS class */
|
|
34
|
-
className?: string;
|
|
35
|
-
[key: string]: any;
|
|
36
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
@@ -5,11 +5,14 @@ import { UIActionSchema } from '@object-ui/types';
|
|
|
5
5
|
* `bodyShape`, `locations`, `enabled`, `size` — is declared by the modern type
|
|
6
6
|
* and by no other, and the legacy `crud.ts` `ActionSchema` it used to name is
|
|
7
7
|
* `@deprecated` and requires `type: 'action'` (this renderer serves
|
|
8
|
-
* `'script' | 'url' | 'modal' | 'flow' | 'api'`).
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* `'script' | 'url' | 'modal' | 'flow' | 'api'`).
|
|
9
|
+
*
|
|
10
|
+
* `actionType` is the DECLARED input carrying the action's execution type
|
|
11
|
+
* (objectui#7415, objectstack#14490 ruling A). `type` stays on the intersection
|
|
12
|
+
* as the SDUI envelope's component discriminator — `'action:button'` on every
|
|
13
|
+
* authored path — and is no longer read as an action type by anything here.
|
|
11
14
|
*/
|
|
12
|
-
export interface
|
|
15
|
+
export interface ActionButtonRendererProps {
|
|
13
16
|
schema: UIActionSchema & {
|
|
14
17
|
type: string;
|
|
15
18
|
className?: string;
|
|
@@ -18,5 +21,13 @@ export interface ActionButtonProps {
|
|
|
18
21
|
className?: string;
|
|
19
22
|
/** Override context for this specific action */
|
|
20
23
|
context?: Record<string, any>;
|
|
24
|
+
/**
|
|
25
|
+
* The host-EVALUATED enablement verdict, declared rather than left to the
|
|
26
|
+
* index signature (objectui#9131). `SchemaRenderer` evaluates the node's
|
|
27
|
+
* `disabled` / `disabledOn` and forwards the answer under this name as
|
|
28
|
+
* `disabled: __disabled || undefined`. It is consumed by name below and
|
|
29
|
+
* therefore never reaches the DOM spread — see the destructure.
|
|
30
|
+
*/
|
|
31
|
+
disabled?: boolean;
|
|
21
32
|
[key: string]: any;
|
|
22
33
|
}
|
|
@@ -2,8 +2,6 @@ import { default as React } from 'react';
|
|
|
2
2
|
import { UIActionSchema, ActionLocation } from '@object-ui/types';
|
|
3
3
|
export interface ActionGroupSchema {
|
|
4
4
|
type: 'action:group';
|
|
5
|
-
/** Group name */
|
|
6
|
-
name?: string;
|
|
7
5
|
/** Group label */
|
|
8
6
|
label?: string;
|
|
9
7
|
/** Group icon */
|
|
@@ -14,8 +12,11 @@ export interface ActionGroupSchema {
|
|
|
14
12
|
display?: 'dropdown' | 'inline';
|
|
15
13
|
/** Filter actions by location */
|
|
16
14
|
location?: ActionLocation;
|
|
17
|
-
/** Group visibility
|
|
18
|
-
visible?: string
|
|
15
|
+
/** Group visibility predicate: a boolean, a CEL string, or a `{ dialect, source }` envelope */
|
|
16
|
+
visible?: boolean | string | {
|
|
17
|
+
dialect: string;
|
|
18
|
+
source?: string;
|
|
19
|
+
};
|
|
19
20
|
/** Button variant for inline actions */
|
|
20
21
|
variant?: string;
|
|
21
22
|
/** Button size for inline actions */
|
|
@@ -5,14 +5,24 @@ import { UIActionSchema } from '@object-ui/types';
|
|
|
5
5
|
* `locations`, `enabled` and `size` are all modern-only keys this renderer
|
|
6
6
|
* forwards, and the legacy `crud.ts` `ActionSchema` is `@deprecated` and pins
|
|
7
7
|
* `type: 'action'` where this renderer's own registry `inputs` declare
|
|
8
|
-
* `'script' | 'url' | 'modal' | 'flow' | 'api'`.
|
|
8
|
+
* `'script' | 'url' | 'modal' | 'flow' | 'api'`. `actionType` is the DECLARED
|
|
9
|
+
* input carrying that execution type (objectui#7415), for the same reason it is
|
|
10
|
+
* on `action:button`; `type` stays on the intersection as the SDUI envelope's
|
|
11
|
+
* component discriminator and is not read as an action type here.
|
|
9
12
|
*/
|
|
10
|
-
export interface
|
|
13
|
+
export interface ActionIconRendererProps {
|
|
11
14
|
schema: UIActionSchema & {
|
|
12
15
|
type: string;
|
|
13
16
|
className?: string;
|
|
17
|
+
actionType?: string;
|
|
14
18
|
};
|
|
15
19
|
className?: string;
|
|
16
20
|
context?: Record<string, any>;
|
|
21
|
+
/**
|
|
22
|
+
* The host-EVALUATED enablement verdict — see `ActionButtonRendererProps` for the
|
|
23
|
+
* mechanism (objectui#9131). Declared rather than left to the index
|
|
24
|
+
* signature, consumed by name below, never re-spread onto the DOM.
|
|
25
|
+
*/
|
|
26
|
+
disabled?: boolean;
|
|
17
27
|
[key: string]: any;
|
|
18
28
|
}
|
|
@@ -12,8 +12,11 @@ export interface ActionMenuSchema {
|
|
|
12
12
|
variant?: string;
|
|
13
13
|
/** Trigger size */
|
|
14
14
|
size?: string;
|
|
15
|
-
/** Visibility
|
|
16
|
-
visible?: string
|
|
15
|
+
/** Visibility predicate: a boolean, a CEL string, or a `{ dialect, source }` envelope */
|
|
16
|
+
visible?: boolean | string | {
|
|
17
|
+
dialect: string;
|
|
18
|
+
source?: string;
|
|
19
|
+
};
|
|
17
20
|
/** Custom CSS class */
|
|
18
21
|
className?: string;
|
|
19
22
|
[key: string]: any;
|
|
@@ -11,10 +11,25 @@
|
|
|
11
11
|
* another. Deliberately strict: only the literal `true` arms it.
|
|
12
12
|
*/
|
|
13
13
|
export declare function hasAutoTrigger(action: unknown): boolean;
|
|
14
|
+
/** The fields of an action this module reads. */
|
|
15
|
+
export interface AutoTriggerSubject {
|
|
16
|
+
autoTrigger?: unknown;
|
|
17
|
+
visible?: unknown;
|
|
18
|
+
name?: string;
|
|
19
|
+
label?: string;
|
|
20
|
+
}
|
|
14
21
|
/**
|
|
15
|
-
* Run `run` at most once, as soon as `
|
|
22
|
+
* Run `run` at most once, as soon as `action` asks to be auto-triggered — unless
|
|
23
|
+
* the action's own declared `visible` gate hides it, in which case the trigger
|
|
24
|
+
* is refused and reported instead (objectui#4191).
|
|
16
25
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
26
|
+
* @param action The action the renderer received (read: `autoTrigger`,
|
|
27
|
+
* `visible`, `name`, `label`).
|
|
28
|
+
* @param isVisible The renderer's own evaluated `visible` verdict — the same
|
|
29
|
+
* value its early return consults. Only consulted when the
|
|
30
|
+
* action DECLARES a gate, exactly like that early return.
|
|
31
|
+
* @param run The renderer's click path. It may change identity freely (it
|
|
32
|
+
* is rebuilt from `schema` on most renders); the ref is what
|
|
33
|
+
* makes this once-only, so depending on it is safe.
|
|
19
34
|
*/
|
|
20
|
-
export declare function useAutoTriggerOnce(
|
|
35
|
+
export declare function useAutoTriggerOnce(action: AutoTriggerSubject, isVisible: boolean, run: () => void | Promise<void>): void;
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
import { LucideIcon } from 'lucide-react';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* The lookup this seam performs, exposed for DIAGNOSTICS only.
|
|
4
|
+
*
|
|
5
|
+
* `renderers/basic/icon.tsx` names both halves in its objectui#5631 warning
|
|
6
|
+
* (`lookup: "Home" -> "House"`), and that message is under a maintainer ruling
|
|
7
|
+
* 一字不动. Without this it would need its own copy of the tokeniser and the
|
|
8
|
+
* map to keep saying the same thing — which is precisely the duplication this
|
|
9
|
+
* card removed. ⛔ It decides nothing: no call site can change what resolves by
|
|
10
|
+
* reading it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function describeIconLookup(name: string): {
|
|
13
|
+
pascal: string;
|
|
14
|
+
key: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Resolve an authored Lucide icon name to its component.
|
|
18
|
+
*
|
|
19
|
+
* Accepts kebab-case, snake_case, space-separated and PascalCase spellings.
|
|
20
|
+
* Returns `null` when the name is absent or names no live glyph — deciding what
|
|
21
|
+
* to draw instead belongs to the caller (see the module docblock).
|
|
22
|
+
*
|
|
23
|
+
* ⚠️ The component this returns draws its `<svg>` — with lucide's own classes,
|
|
24
|
+
* box and attributes — SYNCHRONOUSLY, and fills in the path data when the
|
|
25
|
+
* icon's module arrives (objectui#9251). So `svg.lucide-house` matches on the
|
|
26
|
+
* first frame and nothing reflows, while the 1,781 icon modules stay off the
|
|
27
|
+
* eager path. ⛔ A test that asserts on the PATHS inside the svg must await
|
|
28
|
+
* them (`findBy*` / `waitFor`); everything that asks which icon this is —
|
|
29
|
+
* including `null` vs not — is answered in the same tick, as before.
|
|
5
30
|
*/
|
|
6
31
|
export declare function resolveIcon(name: string | undefined): LucideIcon | null;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObjectUI
|
|
3
|
+
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
/** The two keys this module reads off an action node. */
|
|
9
|
+
export interface StaticParamsSubject {
|
|
10
|
+
params?: unknown;
|
|
11
|
+
properties?: unknown;
|
|
12
|
+
name?: unknown;
|
|
13
|
+
label?: unknown;
|
|
14
|
+
}
|
|
15
|
+
/** Reset the warn-once memo. Exported for tests. */
|
|
16
|
+
export declare function resetStaticParamsWarnings(): void;
|
|
17
|
+
/**
|
|
18
|
+
* The static values to forward as the runner's `ActionDef.params`: the node's
|
|
19
|
+
* `properties.params` when it is an object bag, otherwise `undefined`.
|
|
20
|
+
*
|
|
21
|
+
* A node-level OBJECT `params` that is not the hoisted `properties.params` is
|
|
22
|
+
* never returned; it triggers the development warning above.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readStaticParamValues(subject: StaticParamsSubject, where: string): Record<string, unknown> | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Evaluates a config bag the way `SchemaRenderer` evaluates `properties`: the
|
|
27
|
+
* function `useConfigBagEvaluator()` (`@object-ui/react`) returns.
|
|
28
|
+
*/
|
|
29
|
+
export type ConfigBagEvaluator = (bag: unknown) => unknown;
|
|
30
|
+
/**
|
|
31
|
+
* A container MEMBER with its `properties` evaluated (objectui#10290).
|
|
32
|
+
*
|
|
33
|
+
* `action:bar`, `action:group` and `action:menu` draw their member actions
|
|
34
|
+
* themselves, so a member never passes through the `SchemaRenderer` memo that
|
|
35
|
+
* evaluates a node's `properties`. Its static values ride `properties.params`
|
|
36
|
+
* (objectui#10289), and they are templates (objectui#7867): on a record page,
|
|
37
|
+
* `"recordId": "${record.id}"` has to reach the handler as the record's id. The
|
|
38
|
+
* container evaluates the member's `properties` with the memo's own evaluator
|
|
39
|
+
* and scope (`evaluateBag`, from `useConfigBagEvaluator()`), once, where it
|
|
40
|
+
* composes or runs the member.
|
|
41
|
+
*
|
|
42
|
+
* Returns the member itself when it carries no `properties` bag. Only
|
|
43
|
+
* `properties` is evaluated. It is not copied onto the member (the memo's
|
|
44
|
+
* hoist), and the member's other keys are left as authored.
|
|
45
|
+
*/
|
|
46
|
+
export declare function withEvaluatedProperties<T extends object>(member: T, evaluateBag: ConfigBagEvaluator): T;
|
|
47
|
+
/**
|
|
48
|
+
* A container member's static values (objectui#10290): its `properties.params`,
|
|
49
|
+
* evaluated through {@link withEvaluatedProperties}, or `undefined`.
|
|
50
|
+
*
|
|
51
|
+
* For `action:group` / `action:menu` items, which run the member themselves.
|
|
52
|
+
* (`action:bar` hands an inline member to `action:button` / `action:icon` with
|
|
53
|
+
* its `properties` already evaluated, and `readStaticParamValues` reads it
|
|
54
|
+
* there.)
|
|
55
|
+
*/
|
|
56
|
+
export declare function readMemberStaticParamValues(member: StaticParamsSubject, evaluateBag: ConfigBagEvaluator): Record<string, unknown> | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* The same ruling on a spec ACTION ENTRY (objectui#10462): `element:button`'s
|
|
59
|
+
* inline `action`, `action:group` / `action:menu` items and `page:header`'s
|
|
60
|
+
* actions. `params` is an entry's `ActionParam[]` input list and nothing else.
|
|
61
|
+
* (An `action:group` / `action:menu` item is also a container member, so its
|
|
62
|
+
* static values are read from `properties.params` and evaluated by the
|
|
63
|
+
* container through {@link readMemberStaticParamValues} (objectui#10290).
|
|
64
|
+
* `UIActionSchema` declares no `properties`, so on a container member this bag
|
|
65
|
+
* is read off the authored object, not off a declared key. `element:button`'s
|
|
66
|
+
* inline `action` and `page:header`'s actions do not read
|
|
67
|
+
* `properties.params`.)
|
|
68
|
+
*
|
|
69
|
+
* One type is still different: `api`. The objectstack#5777 window keeps the
|
|
70
|
+
* runner reading an object `params` as the request payload (with its own
|
|
71
|
+
* development warning, naming `bodyExtra`) until 18, so for `api` the object is
|
|
72
|
+
* returned unchanged. For every other type it is not returned, and a
|
|
73
|
+
* development build says so once per action.
|
|
74
|
+
*
|
|
75
|
+
* `type` is the executor the surface dispatches the entry as. Call this on the
|
|
76
|
+
* non-array branch only; an array `params` is the input list, forwarded as
|
|
77
|
+
* `actionParams`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function readActionEntryParamValues(entry: StaticParamsSubject, type: unknown, where: string): Record<string, unknown> | undefined;
|