@object-ui/components 17.6.0 → 18.0.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +9618 -0
  2. package/README.md +27 -3
  3. package/dist/custom/RecordTitleChip.d.ts +4 -3
  4. package/dist/custom/button-group.d.ts +1 -1
  5. package/dist/custom/combobox.d.ts +2 -4
  6. package/dist/custom/dialog-viewport-gutter.d.ts +37 -0
  7. package/dist/custom/empty-state-link.d.ts +63 -0
  8. package/dist/custom/empty.d.ts +16 -4
  9. package/dist/custom/field.d.ts +1 -1
  10. package/dist/custom/filter-builder.d.ts +225 -77
  11. package/dist/custom/grouping-editor.d.ts +4 -0
  12. package/dist/custom/horizontal-overflow.d.ts +18 -0
  13. package/dist/custom/index.d.ts +4 -1
  14. package/dist/custom/item.d.ts +1 -1
  15. package/dist/custom/kbd.d.ts +1 -1
  16. package/dist/custom/mobile-dialog-content.d.ts +22 -1
  17. package/dist/custom/navigation-overlay.d.ts +105 -0
  18. package/dist/custom/refresh-indicator.d.ts +8 -2
  19. package/dist/custom/sort-builder.d.ts +8 -0
  20. package/dist/custom/use-horizontal-overflow.d.ts +36 -0
  21. package/dist/custom/view-states.d.ts +74 -1
  22. package/dist/hooks/related-count-store.d.ts +81 -28
  23. package/dist/index.css +345 -361
  24. package/dist/index.d.ts +11 -3
  25. package/dist/index.js +8480 -6628
  26. package/dist/index.umd.cjs +11 -15
  27. package/dist/lib/close-label.d.ts +1 -2
  28. package/dist/lib/date-fns-locale.d.ts +41 -0
  29. package/dist/lib/inline-markdown.d.ts +64 -0
  30. package/dist/lib/lazy-icon.d.ts +32 -1
  31. package/dist/lib/lucide-record-icon-names.d.ts +30 -0
  32. package/dist/lib/utils.d.ts +113 -0
  33. package/dist/renderers/action/action-bar.d.ts +8 -36
  34. package/dist/renderers/action/action-button.d.ts +15 -4
  35. package/dist/renderers/action/action-group.d.ts +5 -4
  36. package/dist/renderers/action/action-icon.d.ts +12 -2
  37. package/dist/renderers/action/action-menu.d.ts +5 -2
  38. package/dist/renderers/action/auto-trigger.d.ts +19 -4
  39. package/dist/renderers/action/disabled-reason.d.ts +49 -0
  40. package/dist/renderers/action/resolve-icon.d.ts +27 -2
  41. package/dist/renderers/action/static-params.d.ts +71 -0
  42. package/dist/renderers/action/visibility-gate.d.ts +11 -3
  43. package/dist/renderers/basic/data-list.d.ts +2 -1
  44. package/dist/renderers/basic/elements.d.ts +2 -0
  45. package/dist/renderers/basic/html-elements.d.ts +7 -3
  46. package/dist/renderers/basic/readProps.d.ts +60 -0
  47. package/dist/renderers/basic/record-picker.d.ts +3 -2
  48. package/dist/renderers/complex/data-table.d.ts +31 -14
  49. package/dist/renderers/complex/dataTableBindDiagnostic.d.ts +187 -0
  50. package/dist/renderers/layout/box.d.ts +8 -0
  51. package/dist/renderers/layout/containers.d.ts +28 -23
  52. package/dist/renderers/layout/page-block-grid.d.ts +29 -0
  53. package/dist/renderers/layout/page-block-span.d.ts +50 -0
  54. package/dist/renderers/layout/page-description-context.d.ts +14 -0
  55. package/dist/renderers/layout/page-print.d.ts +14 -0
  56. package/dist/renderers/layout/page-region-posture.d.ts +82 -0
  57. package/dist/renderers/layout/react-page.d.ts +4 -0
  58. package/dist/renderers/navigation/sidebar.d.ts +31 -0
  59. package/dist/ui/badge.d.ts +1 -1
  60. package/dist/ui/button.d.ts +1 -1
  61. package/dist/ui/calendar.d.ts +2 -1
  62. package/dist/ui/command.d.ts +7 -7
  63. package/dist/ui/index.d.ts +0 -1
  64. package/dist/ui/input-otp.d.ts +2 -2
  65. package/dist/ui/sheet.d.ts +1 -1
  66. package/dist/ui/sidebar.d.ts +2 -1
  67. package/package.json +14 -15
  68. package/dist/SchemaRenderer.d.ts +0 -4
  69. package/dist/custom/export-progress-dialog.d.ts +0 -43
  70. package/dist/hooks/use-export-job.d.ts +0 -34
  71. package/dist/ui/chart.d.ts +0 -56
  72. 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;
@@ -0,0 +1,64 @@
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 one inline Markdown renderer (objectui#12778): `**bold**`, `*italic*`,
9
+ * `` `code` `` and `[text](url)`, drawn as React elements, never as an HTML
10
+ * string. Two surfaces read it: `element:text`, whose spec declares its
11
+ * `content` as "Text or Markdown content", and the console's marketplace
12
+ * README renderer (`MarkdownText` in `@object-ui/app-shell`), which owns the
13
+ * block half (headings, lists, fences) and hands each block's text here.
14
+ *
15
+ * Raw HTML (objectui#12146) is recognised by CommonMark's "Raw HTML" grammar
16
+ * and skipped: neither rendered nor printed. The grammar pieces are exported
17
+ * because `MarkdownText`'s "HTML blocks" rules are spelled from the same open
18
+ * and closing tag.
19
+ *
20
+ * A link keeps its `href` only for `http:`, `https:`, `mailto:` and `tel:`, or
21
+ * for a scheme-less reference (a path, a query, a fragment). Anything else —
22
+ * `javascript:`, `data:`, `vbscript:`, in any case — prints its text with no
23
+ * anchor. React 19 blocks `javascript:` URLs itself; this package's peer range
24
+ * admits React 18, which does not. An `href` carrying whitespace or a control
25
+ * character is refused outright, because browsers strip those before reading
26
+ * the scheme (`java\tscript:` runs as `javascript:`).
27
+ *
28
+ * Emphasis follows CommonMark's flanking rule in its simplest form: the
29
+ * delimiter run may not sit against whitespace on its inner side, so a lone
30
+ * `*` or `2 * 3 * 4` prints as typed. A code span is a single backtick pair;
31
+ * a run of two or more backticks (a fence typed into inline text) prints as
32
+ * typed.
33
+ */
34
+ import * as React from 'react';
35
+ /** CommonMark "open tag", as a RegExp source. */
36
+ export declare const RAW_HTML_OPEN_TAG = "<[A-Za-z][A-Za-z0-9-]*(?:\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:\\s*=\\s*(?:[^\"'=<>`\\s]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>";
37
+ /** CommonMark "closing tag", as a RegExp source. */
38
+ export declare const RAW_HTML_CLOSING_TAG = "<\\/[A-Za-z][A-Za-z0-9-]*\\s*>";
39
+ /**
40
+ * The `href` a Markdown link may carry, or `null` when it may not carry one.
41
+ * Allow-list, not deny-list: a scheme this does not name is refused.
42
+ */
43
+ export declare function safeLinkHref(raw: string): string | null;
44
+ export interface InlineMarkdownOptions {
45
+ /** Classes for the drawn elements; each defaults to none. */
46
+ classNames?: {
47
+ code?: string;
48
+ strong?: string;
49
+ em?: string;
50
+ link?: string;
51
+ };
52
+ /**
53
+ * Which links open in a new tab (`target="_blank" rel="noopener noreferrer"`):
54
+ * `'all'`, or `'external'` — `http:` / `https:` and protocol-relative URLs,
55
+ * leaving a same-site path, `mailto:` and `tel:` in the same tab.
56
+ */
57
+ newTab?: 'all' | 'external';
58
+ }
59
+ /**
60
+ * Renders one run of text through the inline subset. Every pattern is tried
61
+ * at each step and the earliest match wins, so the order below only breaks
62
+ * ties at the same position.
63
+ */
64
+ export declare function renderInlineMarkdown(input: string, options?: InlineMarkdownOptions): React.ReactNode;
@@ -1,5 +1,36 @@
1
1
  import { default as React } from 'react';
2
- /** Convert PascalCase / camelCase / mixed names to kebab-case for DynamicIcon. */
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";
@@ -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
- import { UIActionSchema, ActionLocation } from '@object-ui/types';
2
- export interface ActionBarSchema {
3
- type: 'action:bar';
4
- /** Business actions to render — subject to inline/overflow split via {@link maxVisible} */
5
- actions?: UIActionSchema[];
6
- /**
7
- * System/chrome actions (Duplicate, Export, View History, Delete, etc.) that
8
- * are *always* placed in the overflow menu — never inline — regardless of
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'`). `actionType` stays on the
9
- * intersection: it is the legacy-shaped override this renderer reads FIRST
10
- * (`schema.actionType || schema.type`), and it is not a `UIActionSchema` key.
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 ActionButtonProps {
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 condition */
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 ActionIconProps {
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 condition */
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 `armed` is true.
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
- * `run` may change identity freely (it is rebuilt from `schema` on most
18
- * renders); the ref is what makes this once-only, so depending on it is safe.
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(armed: boolean, run: () => void | Promise<void>): void;
35
+ export declare function useAutoTriggerOnce(action: AutoTriggerSubject, isVisible: boolean, run: () => void | Promise<void>): void;
@@ -0,0 +1,49 @@
1
+ import { default as React } from 'react';
2
+ /** A reason to show, with the ids the control's ARIA attributes point at. */
3
+ export interface DisabledReason {
4
+ /** The localized reason text. */
5
+ text: string;
6
+ /** Id of the element holding the reason — the control's description. */
7
+ id: string;
8
+ /** Id of a menu item's label element — the item's name when it shows a reason. */
9
+ labelId: string;
10
+ }
11
+ /**
12
+ * The reason for a control, or `undefined` when it gives none.
13
+ *
14
+ * `disabledByPredicate` is the caller's DECLARED-`disabled` verdict alone, never
15
+ * the OR it hands the control's `disabled` prop. A hook, so call it with the
16
+ * other hooks, ahead of any early return.
17
+ */
18
+ export declare function useDisabledReason(disabledByPredicate: boolean): DisabledReason | undefined;
19
+ /**
20
+ * The control's `aria-describedby`: an id it already carries (an authored
21
+ * `ariaDescribedBy` reaches `action:button` and `action:icon` through their DOM
22
+ * pass-through) followed by the reason's, or `undefined` when there is neither.
23
+ */
24
+ export declare function describedByWithReason(existing: unknown, reason: DisabledReason | undefined): string | undefined;
25
+ /**
26
+ * Wraps a disabled button in the tooltip trigger that carries its reason, or
27
+ * returns the button alone when there is no reason. `heading` is shown above
28
+ * the reason inside the tooltip; `action:icon` passes its label there, since an
29
+ * icon-only control has no visible name and its own label tooltip cannot open
30
+ * while it is disabled.
31
+ */
32
+ export declare function DisabledReasonTrigger({ reason, heading, children, }: {
33
+ reason: DisabledReason | undefined;
34
+ heading?: React.ReactNode;
35
+ children: React.ReactElement;
36
+ }): React.ReactElement;
37
+ /** The ARIA a menu item carries while it shows a reason; none otherwise. */
38
+ export declare function menuItemReasonAria(reason: DisabledReason | undefined): {
39
+ 'aria-labelledby'?: string;
40
+ 'aria-describedby'?: string;
41
+ };
42
+ /**
43
+ * A menu item's label, with the reason as a visible second line under it when
44
+ * there is one. Pair it with `menuItemReasonAria` on the item.
45
+ */
46
+ export declare function DisabledReasonMenuLabel({ reason, children, }: {
47
+ reason: DisabledReason | undefined;
48
+ children: React.ReactNode;
49
+ }): React.ReactElement;