@object-ui/components 17.5.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +10155 -0
  2. package/README.md +20 -10
  3. package/dist/custom/button-group.d.ts +2 -2
  4. package/dist/custom/character-count.d.ts +56 -0
  5. package/dist/custom/combobox.d.ts +2 -4
  6. package/dist/custom/config-field-renderer.d.ts +1 -1
  7. package/dist/custom/config-panel-renderer.d.ts +3 -3
  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 +448 -36
  11. package/dist/custom/fullscreen-editor.d.ts +48 -2
  12. package/dist/custom/index.d.ts +27 -28
  13. package/dist/custom/item.d.ts +2 -2
  14. package/dist/custom/kbd.d.ts +1 -1
  15. package/dist/custom/mobile-dialog-content.d.ts +22 -1
  16. package/dist/custom/navigation-overlay.d.ts +105 -0
  17. package/dist/custom/refresh-indicator.d.ts +8 -2
  18. package/dist/custom/resizable.d.ts +1 -1
  19. package/dist/custom/view-states.d.ts +74 -1
  20. package/dist/debug/index.d.ts +2 -2
  21. package/dist/hooks/related-count-store.d.ts +26 -28
  22. package/dist/index.css +174 -364
  23. package/dist/index.d.ts +21 -21
  24. package/dist/index.js +7274 -6350
  25. package/dist/index.umd.cjs +12 -13
  26. package/dist/lib/close-label.d.ts +1 -2
  27. package/dist/lib/date-fns-locale.d.ts +41 -0
  28. package/dist/lib/form-control-dom-props.d.ts +77 -0
  29. package/dist/lib/lazy-icon.d.ts +32 -1
  30. package/dist/lib/lucide-record-icon-names.d.ts +30 -0
  31. package/dist/lib/slider-thumb.d.ts +86 -0
  32. package/dist/lib/utils.d.ts +113 -0
  33. package/dist/notifications/index.d.ts +5 -5
  34. package/dist/renderers/action/action-bar.d.ts +8 -36
  35. package/dist/renderers/action/action-button.d.ts +15 -4
  36. package/dist/renderers/action/action-group.d.ts +5 -4
  37. package/dist/renderers/action/action-icon.d.ts +12 -2
  38. package/dist/renderers/action/action-menu.d.ts +5 -2
  39. package/dist/renderers/action/auto-trigger.d.ts +19 -4
  40. package/dist/renderers/action/resolve-icon.d.ts +27 -2
  41. package/dist/renderers/action/static-params.d.ts +79 -0
  42. package/dist/renderers/action/visibility-gate.d.ts +11 -3
  43. package/dist/renderers/basic/elements.d.ts +6 -3
  44. package/dist/renderers/basic/html-elements.d.ts +8 -4
  45. package/dist/renderers/basic/readProps.d.ts +60 -0
  46. package/dist/renderers/complex/data-table.d.ts +31 -14
  47. package/dist/renderers/complex/dataTableBindDiagnostic.d.ts +187 -0
  48. package/dist/renderers/form/validationRuleKeys.d.ts +45 -0
  49. package/dist/renderers/layout/box.d.ts +8 -0
  50. package/dist/renderers/layout/containers.d.ts +1 -10
  51. package/dist/renderers/layout/react-page.d.ts +16 -2
  52. package/dist/renderers/navigation/sidebar.d.ts +31 -0
  53. package/dist/share/index.d.ts +2 -2
  54. package/dist/ui/badge.d.ts +1 -1
  55. package/dist/ui/button.d.ts +1 -1
  56. package/dist/ui/calendar.d.ts +3 -2
  57. package/dist/ui/carousel.d.ts +2 -2
  58. package/dist/ui/command.d.ts +8 -8
  59. package/dist/ui/form.d.ts +1 -1
  60. package/dist/ui/index.d.ts +46 -47
  61. package/dist/ui/input-otp.d.ts +2 -2
  62. package/dist/ui/pagination.d.ts +1 -1
  63. package/dist/ui/sheet.d.ts +1 -1
  64. package/dist/ui/sidebar.d.ts +4 -3
  65. package/dist/ui/slider.d.ts +2 -1
  66. package/package.json +17 -18
  67. package/dist/SchemaRenderer.d.ts +0 -4
  68. package/dist/custom/action-param-dialog.d.ts +0 -21
  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/renderers/data-display/table.d.ts +0 -2
  72. package/dist/ui/chart.d.ts +0 -56
  73. 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,77 @@
1
+ import { DomProps as CoreDomProps } from '@object-ui/core';
2
+ /**
3
+ * The DOM pass-through declaration for the `packages/components` renderers whose
4
+ * host element is a FORM CONTROL (objectui#5632).
5
+ *
6
+ * ## Why this exists at all, rather than a bare `toDomProps`
7
+ *
8
+ * `toDomProps` is the SDUI contract's executor and its key list is deliberately
9
+ * ELEMENT-AGNOSTIC — it cannot know what element the widget renders, so it
10
+ * carries only what is legal on every element. `name` and `disabled` are legal
11
+ * on form controls and nowhere else, which is exactly why `dom-props.ts` leaves
12
+ * them out: `name` on the `<div>` a container widget renders is one of the 14
13
+ * attributes objectui#4431 closed.
14
+ *
15
+ * The renderers in this group render the other case. Routing them through the
16
+ * bare SDUI list would strip `name` and `disabled` off real controls — and
17
+ * `packages/fields` already wrote down what that costs, in the same words, for
18
+ * the same two keys:
19
+ *
20
+ * > Withholding them would make this helper a silent styling- and
21
+ * > interactivity-dropper … That is a NEW silent failure of exactly the kind
22
+ * > the whitelist exists to prevent, so they are forwarded.
23
+ *
24
+ * It is worth being precise about how INVISIBLE that failure would be here.
25
+ * The gate that grades this change
26
+ * (`packages/app-shell/src/__tests__/widget-dom-leak-sweep.test.tsx`) reports
27
+ * attributes that ARRIVE illegitimately; it has no case for an attribute that
28
+ * stops arriving, and its canary node authors no `disabled` at all. So dropping
29
+ * `disabled` off every form control in the library would have moved not one
30
+ * number in this card's own acceptance evidence. The ledger predicted the same
31
+ * thing from the other side — its `BARE_SPREAD_MINUS_NAME` note says converging
32
+ * this group "will not change that attribute, only the thirteen around it" —
33
+ * and that prediction is only true if `name` is forwarded deliberately.
34
+ *
35
+ * ## One mechanism, three declarations
36
+ *
37
+ * This is the third declaration over the ONE mechanism in
38
+ * `@object-ui/core`'s `pickDomProps`, and it follows the pattern
39
+ * `@object-ui/fields` established rather than inventing one: the consuming
40
+ * package owns the key list its own contract implies, and calls the shared
41
+ * filter with it. The three, and what separates them:
42
+ *
43
+ * - `toDomProps` (`@object-ui/core`) — the SDUI baseline, element-agnostic.
44
+ * - `@object-ui/fields`' `toDomProps` — the baseline minus `role`, plus `name`
45
+ * and `disabled`; `FieldWidgetComponentProps` declares the closed set.
46
+ * - this one — the baseline PLUS `name` and `disabled`, nothing removed. It is
47
+ * a strict superset of the SDUI list, which the compile-time assertion below
48
+ * pins, so a key added to the shared set can never be quietly dropped here.
49
+ *
50
+ * Anything beyond this set is still the objectui#4435 route: DECLARE it and
51
+ * forward it by name. Do not reopen the spread (AGENTS.md #0.1 — fix the
52
+ * contract, never widen the consumer). `style` is the standing example, and it
53
+ * is forwarded by name at every call site for exactly that reason.
54
+ */
55
+ declare const FORM_CONTROL_DOM_PASS_THROUGH_KEYS: readonly ["id", "className", "role", "tabIndex", "autoFocus", "onClick", "onBlur", "onFocus", "name", "disabled"];
56
+ type FormControlDomPassThroughKey = (typeof FORM_CONTROL_DOM_PASS_THROUGH_KEYS)[number];
57
+ /** The subset of `P` this declaration forwards, with each key's declared type. */
58
+ export type FormControlDomProps<P> = CoreDomProps<P, FormControlDomPassThroughKey>;
59
+ /**
60
+ * Keep only what may legitimately become an attribute on a FORM CONTROL, and
61
+ * drop everything else — the injected `schema`, the data-source adapter, the
62
+ * authored node's SDUI metadata, the flattened `props` container, and every
63
+ * declared prop the renderer already consumed off `schema`.
64
+ *
65
+ * Replaces the bare `{...rest}` spread in a form-control registration:
66
+ *
67
+ * ```tsx
68
+ * // before — forwards whatever `SchemaRenderer` handed it
69
+ * const { style, ...rest } = props;
70
+ * return <Input name={schema.name} {...rest} />;
71
+ *
72
+ * // after
73
+ * return <Input name={schema.name} {...toFormControlDomProps(rest)} style={style} />;
74
+ * ```
75
+ */
76
+ export declare function toFormControlDomProps<P extends object>(props: P): FormControlDomProps<P>;
77
+ export {};
@@ -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";
@@ -0,0 +1,86 @@
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
+ import type * as React from 'react';
9
+ /**
10
+ * The payload of the `slider-thumb-pass-through` local patch
11
+ * (`scripts/shadcn-local-patches.mjs`, objectui#3318).
12
+ *
13
+ * ## The defect this exists for
14
+ *
15
+ * A Radix slider's focusable control is the THUMB — `span[role="slider"]`,
16
+ * `tabindex="0"`, the element that carries `aria-valuenow` and the one a
17
+ * keyboard user and their screen reader actually land on. `Slider.Root` renders
18
+ * a role-less wrapper `span` and forwards every unrecognised prop to it, so a
19
+ * host's control-channel facts (`id`, `aria-invalid`, `aria-describedby`,
20
+ * `aria-labelledby`, `aria-required`) landed on a wrapper assistive technology
21
+ * never visits. Measured on `origin/main`, a real form + a required slider that
22
+ * had just failed validation:
23
+ *
24
+ * ```
25
+ * slider ariaInvalidTrue=[] labelFor=…-form-item -> DANGLING
26
+ * descConsumers=0 focusable=[span[slider],input]
27
+ * ids=[] <- no element of the row carried an id at all
28
+ * ```
29
+ *
30
+ * This is the same shape objectui#3306 fixed for `select`, one step harder:
31
+ * there the focusable control is `SelectTrigger`, a component the primitive
32
+ * EXPORTS, so the widget could address it directly. `ui/slider.tsx` renders its
33
+ * thumb internally and exports only `Slider`, so the widget has no handle on
34
+ * the one element that must carry the state — hence a pass-through.
35
+ *
36
+ * ## Why a declared prop and not an implicit bridge
37
+ *
38
+ * The primitive could instead have COPIED a fixed list of `aria-*` keys from
39
+ * its own props down to the thumb. Rejected: the copy would leave the same keys
40
+ * on Root as well, and for `id` that is not a duplicate attribute but a
41
+ * duplicate DOM ID — `document.getElementById` answers with the wrapper, so a
42
+ * host `<label for>` would resolve to the non-focusable span and the bug would
43
+ * survive its own fix wearing a green test. Splitting is therefore mandatory,
44
+ * and once the caller must say which keys go where, saying it explicitly is
45
+ * strictly better than a list the caller cannot see (AGENTS.md #0.1: one strict
46
+ * contract, no consumer-side guessing).
47
+ *
48
+ * ## Where the split is decided
49
+ *
50
+ * Not here — this only routes. The widget decides, and `SliderField` mirrors
51
+ * `SelectField`'s #3306 split exactly: `name` and `disabled` stay on Root (Root
52
+ * owns the hidden form input and is the single disabled authority), everything
53
+ * else in the DOM pass-through whitelist goes to the thumb.
54
+ */
55
+ /** Props the `Slider` wrapper hands to its internal `SliderPrimitive.Thumb`. */
56
+ export interface SliderThumbPassThrough {
57
+ /**
58
+ * Forwarded verbatim onto the focusable `span[role="slider"]`.
59
+ *
60
+ * Deliberately typed as the DOM attribute surface rather than
61
+ * `ComponentPropsWithoutRef<typeof SliderPrimitive.Thumb>`: this module must
62
+ * not import the primitive (it is consumed BY the no-touch file, and a cycle
63
+ * through it would be a fragile thing to hang a sync patch on), and the thumb
64
+ * is a plain `span` as far as every key a host delivers is concerned.
65
+ */
66
+ thumbProps?: React.HTMLAttributes<HTMLSpanElement> & {
67
+ id?: string;
68
+ tabIndex?: number;
69
+ 'aria-label'?: string;
70
+ };
71
+ }
72
+ /**
73
+ * Route a `Slider`'s props to the two elements that need them.
74
+ *
75
+ * `thumbProps` is REMOVED from the root half — leaving it there would put
76
+ * `thumbprops="[object Object]"` on the wrapper span, which is exactly the leak
77
+ * objectui#3291's sweep exists to catch.
78
+ *
79
+ * The pre-existing `aria-label` bridge is preserved and applied FIRST, so a
80
+ * caller that passes both keeps the explicit `thumbProps` value; nothing about
81
+ * the attribute's previous behaviour changes for callers that pass neither.
82
+ */
83
+ export declare function splitSliderThumbProps<P extends Record<string, unknown>>(props: P): {
84
+ root: Omit<P, 'thumbProps'>;
85
+ thumb: Record<string, unknown>;
86
+ };
@@ -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;
@@ -19,8 +19,8 @@
19
19
  * Every one of these used to be handed to `onToast` regardless of type, so all
20
20
  * five looked identical (#3014).
21
21
  */
22
- export { NotificationBanners, type NotificationBannersProps } from './NotificationBanners';
23
- export { NotificationSnackbar, type NotificationSnackbarProps } from './NotificationSnackbar';
24
- export { NotificationAlerts, type NotificationAlertsProps } from './NotificationAlerts';
25
- export { NotificationInline, type NotificationInlineProps } from './NotificationInline';
26
- export { NOTIFICATION_ACTION_BUTTON_VARIANTS, NOTIFICATION_POSITION_CLASSES, NOTIFICATION_SEVERITY_STYLES, notificationActionVariant, notificationIcon, notificationSeverityStyle, type NotificationSeverityStyle, } from './severity';
22
+ export { NotificationBanners, type NotificationBannersProps } from './NotificationBanners.js';
23
+ export { NotificationSnackbar, type NotificationSnackbarProps } from './NotificationSnackbar.js';
24
+ export { NotificationAlerts, type NotificationAlertsProps } from './NotificationAlerts.js';
25
+ export { NotificationInline, type NotificationInlineProps } from './NotificationInline.js';
26
+ export { NOTIFICATION_ACTION_BUTTON_VARIANTS, NOTIFICATION_POSITION_CLASSES, NOTIFICATION_SEVERITY_STYLES, notificationActionVariant, notificationIcon, notificationSeverityStyle, type NotificationSeverityStyle, } from './severity.js';
@@ -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 */