@jfrader/ui 0.5.0 → 0.5.1

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 (179) hide show
  1. package/dist/accordion-DLul6vIl.js +205 -0
  2. package/dist/accordion.js +1 -1
  3. package/dist/{announcement-bar-B58xempt.js → announcement-bar-Dlbq5-9D.js} +1 -1
  4. package/dist/announcement-bar.js +1 -1
  5. package/dist/avatar-CaGJHy1N.js +145 -0
  6. package/dist/{avatar-group-DOQQuV51.js → avatar-group-M1opAQEG.js} +1 -1
  7. package/dist/avatar-group.js +1 -1
  8. package/dist/avatar.js +1 -1
  9. package/dist/badge-CjM5Agqk.js +119 -0
  10. package/dist/badge.js +1 -1
  11. package/dist/{bottom-sheet-DPJBFkie.js → bottom-sheet-DjZOPq4k.js} +10 -9
  12. package/dist/bottom-sheet.js +1 -1
  13. package/dist/{breadcrumbs-Cfw_hgt2.js → breadcrumbs-BDK_LiwH.js} +10 -3
  14. package/dist/breadcrumbs.js +1 -1
  15. package/dist/{button-C92uYFJW.js → button-NLY0h6EJ.js} +7 -7
  16. package/dist/button.js +1 -1
  17. package/dist/{calendar-B3Svu0X2.js → calendar-BzJdv_SZ.js} +3 -1
  18. package/dist/calendar.js +1 -1
  19. package/dist/card-Ca4KQKYQ.js +154 -0
  20. package/dist/card.js +1 -1
  21. package/dist/carousel-B7OrvD6J.js +474 -0
  22. package/dist/carousel.js +1 -1
  23. package/dist/{checkbox-cFquiSdy.js → checkbox-DKSzExj2.js} +16 -15
  24. package/dist/checkbox.js +1 -1
  25. package/dist/{chip-group-DTQd_M-G.js → chip-group-DjQ0_6Y9.js} +2 -1
  26. package/dist/chip-group.js +1 -1
  27. package/dist/{code-block-ahnRi-g8.js → code-block-B5we2lZa.js} +75 -74
  28. package/dist/code-block.js +1 -1
  29. package/dist/{combobox-Bhzvu9ma.js → combobox-DFFqOBCi.js} +114 -109
  30. package/dist/combobox.js +1 -1
  31. package/dist/command-palette-BmQu2w4H.js +391 -0
  32. package/dist/command-palette.js +1 -1
  33. package/dist/comment-thread-ASaXDcGo.js +1410 -0
  34. package/dist/comment-thread.js +2 -0
  35. package/dist/context-menu-__1c2Dk9.js +370 -0
  36. package/dist/context-menu.js +2 -0
  37. package/dist/{copy-button-ByiA6D3R.js → copy-button-DCSLcYS-.js} +1 -1
  38. package/dist/copy-button.js +1 -1
  39. package/dist/{date-picker-5zKSSuFF.js → date-picker-BiPN7yeK.js} +4 -4
  40. package/dist/date-picker.js +1 -1
  41. package/dist/date-range-picker-DQpUeKqV.js +570 -0
  42. package/dist/date-range-picker.js +1 -1
  43. package/dist/{dialog-ciiv9H2b.js → dialog-BX1zYMs-.js} +2 -1
  44. package/dist/dialog.js +1 -1
  45. package/dist/{divider-DYoJf0I_.js → divider-Cp7aNbhM.js} +21 -20
  46. package/dist/divider.js +1 -1
  47. package/dist/elastic-slider-BG6K019r.js +395 -0
  48. package/dist/elastic-slider.js +2 -0
  49. package/dist/{expandable-card-C-qJcZ14.js → expandable-card-rUATve0o.js} +8 -1
  50. package/dist/expandable-card.js +1 -1
  51. package/dist/expanding-search-BxOwtdwt.js +238 -0
  52. package/dist/expanding-search.js +2 -0
  53. package/dist/file-dropzone-BuXm3Tea.js +457 -0
  54. package/dist/file-dropzone.js +1 -1
  55. package/dist/{filter-toolbar-D5KEKTSe.js → filter-toolbar-Cy5Hqur-.js} +4 -2
  56. package/dist/filter-toolbar.js +1 -1
  57. package/dist/{hover-card-B-nrCIy2.js → hover-card-CoMJKg1g.js} +7 -7
  58. package/dist/hover-card.js +1 -1
  59. package/dist/{image-compare-ciuhPtQZ.js → image-compare-BxY8Ykzt.js} +1 -1
  60. package/dist/image-compare.js +1 -1
  61. package/dist/index.js +81 -76
  62. package/dist/{json-viewer-BcySQfjZ.js → json-viewer-DgWqyU75.js} +7 -3
  63. package/dist/json-viewer.js +1 -1
  64. package/dist/mention-input-sq61si9L.js +600 -0
  65. package/dist/mention-input.js +1 -1
  66. package/dist/menu-DDKgmK2F.js +295 -0
  67. package/dist/menu.js +1 -1
  68. package/dist/{metric-card-Bh9K4fZs.js → metric-card--lVTz5Wn.js} +2 -2
  69. package/dist/metric-card.js +1 -1
  70. package/dist/{multi-select-Pce_IYnz.js → multi-select-DG1BCFX7.js} +14 -6
  71. package/dist/multi-select.js +1 -1
  72. package/dist/{navigation-sP5fiuQS.js → navigation-CC26JDr-.js} +20 -14
  73. package/dist/navigation.js +1 -1
  74. package/dist/{overlay-layer-SeUyyEPD.js → overlay-layer-qEbpEtb8.js} +16 -2
  75. package/dist/{pagination-DmXZ8E85.js → pagination-BfkeWbmP.js} +23 -22
  76. package/dist/pagination.js +1 -1
  77. package/dist/pill-BaS-uIbn.js +58 -0
  78. package/dist/pill.js +1 -1
  79. package/dist/popover-CErIw2q3.js +125 -0
  80. package/dist/popover.js +1 -1
  81. package/dist/{progress-CbOWBUdA.js → progress-DAQkfhPd.js} +1 -1
  82. package/dist/progress.js +1 -1
  83. package/dist/{radio-cards-D2QZENI_.js → radio-cards-Cu9cBssN.js} +35 -34
  84. package/dist/radio-cards.js +1 -1
  85. package/dist/{radio-group-E6mMRgo7.js → radio-group-TIK0-iPX.js} +18 -15
  86. package/dist/radio-group.js +1 -1
  87. package/dist/{resizable-panels-BhjUVXZZ.js → resizable-panels-DUpQEpwG.js} +3 -2
  88. package/dist/resizable-panels.js +1 -1
  89. package/dist/{search-field-IxF0IJXm.js → search-field-DMvho0KQ.js} +2 -2
  90. package/dist/search-field.js +1 -1
  91. package/dist/{segmented-control-yO1K1nbi.js → segmented-control-8ZUGnsZm.js} +2 -1
  92. package/dist/segmented-control.js +1 -1
  93. package/dist/{select-n_H52W1Z.js → select-D5rhJ8gi.js} +3 -2
  94. package/dist/select.js +1 -1
  95. package/dist/{signature-pad-q2SAsrdD.js → signature-pad-_bTeguN9.js} +256 -251
  96. package/dist/signature-pad.js +1 -1
  97. package/dist/slider-DVG6-Awh.js +308 -0
  98. package/dist/slider.js +1 -1
  99. package/dist/{sortable-data-table-tirqlLY2.js → sortable-data-table-CYKT_Ng7.js} +2 -2
  100. package/dist/sortable-data-table.js +1 -1
  101. package/dist/{split-button-Cb3EHs64.js → split-button-BCw4zZom.js} +75 -81
  102. package/dist/split-button.js +1 -1
  103. package/dist/{swipe-actions-DiZC57-3.js → swipe-actions-CBuJREU1.js} +4 -2
  104. package/dist/swipe-actions.js +1 -1
  105. package/dist/switch-C1WrKrf-.js +145 -0
  106. package/dist/switch.js +1 -1
  107. package/dist/tabs-XluwRjgg.js +210 -0
  108. package/dist/tabs.js +1 -1
  109. package/dist/{text-field-C8TWG-tY.js → text-field-hU72iSVS.js} +15 -13
  110. package/dist/text-field.js +1 -1
  111. package/dist/{textarea-BrW0XcG_.js → textarea-3k4Y0QQ3.js} +18 -16
  112. package/dist/textarea.js +1 -1
  113. package/dist/theme-root.js +1 -1
  114. package/dist/theme-switch-C505TtU8.js +166 -0
  115. package/dist/theme-switch.js +2 -0
  116. package/dist/{time-picker-Db8D49cP.js → time-picker-CPlhW0tr.js} +26 -20
  117. package/dist/time-picker.js +1 -1
  118. package/dist/{timeline-k3nURuCP.js → timeline-B0uAAVfT.js} +8 -2
  119. package/dist/timeline.js +1 -1
  120. package/dist/{toast-BHxI32ZA.js → toast-B7wo3sX1.js} +98 -79
  121. package/dist/{toast-stack-DqrAzdg5.js → toast-stack-B40VpS4M.js} +18 -4
  122. package/dist/toast-stack.js +1 -1
  123. package/dist/toast.js +1 -1
  124. package/dist/{toggle-group-fcjzpifI.js → toggle-group-B2fpFZwV.js} +1 -1
  125. package/dist/toggle-group.js +1 -1
  126. package/dist/tooltip-BvgVTCTN.js +120 -0
  127. package/dist/tooltip.js +1 -1
  128. package/dist/{tree-view-C2liIxqy.js → tree-view-j8qLqkb_.js} +5 -1
  129. package/dist/tree-view.js +1 -1
  130. package/dist/types/components/checkbox/checkbox.d.ts +1 -1
  131. package/dist/types/components/command-palette/command-palette.d.ts +1 -1
  132. package/dist/types/components/comment-thread/comment-thread.d.ts +118 -0
  133. package/dist/types/components/comment-thread/index.d.ts +1 -0
  134. package/dist/types/components/comment-thread/thread-core.d.ts +96 -0
  135. package/dist/types/components/comment-thread/thread-parts.d.ts +114 -0
  136. package/dist/types/components/context-menu/context-menu.d.ts +55 -0
  137. package/dist/types/components/context-menu/index.d.ts +2 -0
  138. package/dist/types/components/date-range-picker/date-range-picker.d.ts +1 -1
  139. package/dist/types/components/elastic-slider/elastic-slider.d.ts +53 -0
  140. package/dist/types/components/elastic-slider/index.d.ts +1 -0
  141. package/dist/types/components/expanding-search/expanding-search.d.ts +22 -0
  142. package/dist/types/components/expanding-search/index.d.ts +1 -0
  143. package/dist/types/components/menu/menu.d.ts +50 -7
  144. package/dist/types/components/pagination/pagination.d.ts +1 -1
  145. package/dist/types/components/radio-cards/radio-cards.d.ts +1 -1
  146. package/dist/types/components/radio-group/radio-group.d.ts +1 -1
  147. package/dist/types/components/slider/slider-style.d.ts +14 -0
  148. package/dist/types/components/slider/slider.d.ts +2 -10
  149. package/dist/types/components/slider/use-slider-interaction.d.ts +79 -0
  150. package/dist/types/components/split-button/split-button.d.ts +2 -2
  151. package/dist/types/components/tabs/tabs.d.ts +1 -1
  152. package/dist/types/components/text-field/text-field.d.ts +1 -1
  153. package/dist/types/components/textarea/textarea.d.ts +1 -1
  154. package/dist/types/components/theme-switch/index.d.ts +1 -0
  155. package/dist/types/components/theme-switch/theme-switch.d.ts +33 -0
  156. package/dist/types/components/tooltip/tooltip.d.ts +1 -1
  157. package/dist/types/index.d.ts +5 -0
  158. package/dist/types/overlay/overlay-layer.d.ts +20 -0
  159. package/dist/types/overlay/use-overlay-floating.d.ts +9 -2
  160. package/dist/{use-overlay-floating-DvJifLpF.js → use-overlay-floating-Bx2jBKAA.js} +8 -6
  161. package/dist/use-slider-interaction-ChL-208h.js +234 -0
  162. package/package.json +22 -2
  163. package/dist/accordion-xCI_u0BV.js +0 -198
  164. package/dist/avatar-BahDVO9t.js +0 -132
  165. package/dist/badge-B_sLygxU.js +0 -108
  166. package/dist/card-D-aI2QHx.js +0 -158
  167. package/dist/carousel-IvPqN-oM.js +0 -472
  168. package/dist/command-palette-BQ5LleGb.js +0 -384
  169. package/dist/date-range-picker-B5uFWsm-.js +0 -562
  170. package/dist/file-dropzone-pR4v7owg.js +0 -457
  171. package/dist/mention-input-BcQKX2EJ.js +0 -599
  172. package/dist/menu-xwOOUtWP.js +0 -275
  173. package/dist/pill-DO2gHzMb.js +0 -56
  174. package/dist/popover-QHcEvf9c.js +0 -119
  175. package/dist/slider-t0B5cecO.js +0 -477
  176. package/dist/switch-qwv8jQnR.js +0 -142
  177. package/dist/tabs-CAVJndX1.js +0 -203
  178. package/dist/tooltip-CkeiW9C1.js +0 -113
  179. package/dist/{theme-root-BbTBuLMQ.js → theme-root-Bs1U3uPA.js} +2 -2
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { r as e, t } from "./sx-Dx9JUKp5.js";
3
3
  import { r as n } from "./media-8yrN85VT.js";
4
- import { t as r } from "./button-C92uYFJW.js";
5
- import { i, o as a, r as o, t as s } from "./toast-BHxI32ZA.js";
4
+ import { t as r } from "./button-NLY0h6EJ.js";
5
+ import { i, o as a, r as o, t as s } from "./toast-B7wo3sX1.js";
6
6
  import { useEffect as c, useId as l, useLayoutEffect as u, useRef as d, useState as f } from "react";
7
7
  import { vars as p } from "@jfrader/tokens/vars";
8
8
  import { jsx as m, jsxs as h } from "@emotion/react/jsx-runtime";
@@ -98,8 +98,22 @@ function b({ ref: e, className: n, sx: i, variant: s = "stacked", position: b =
98
98
  Z.forEach((e, t) => W.current.set(t, e));
99
99
  for (let e of W.current.keys()) G.some((t) => t.id === e) || W.current.delete(e);
100
100
  }), K.length && (X = J ? `calc(${Q}px + ${K.length - 1} * ${p.space[2]})` : `calc(${H[K[0].id] ?? 0}px + ${Math.min(K.length, q) - 1} * ${p.space[3]})`);
101
- let $ = Math.max(0, K.length - q);
102
- return /* @__PURE__ */ m(t, {
101
+ let $ = Math.max(0, K.length - q), re = K[0]?.id;
102
+ return c(() => {
103
+ let e = N.current, t = P.current;
104
+ if (!e || !t || R) return;
105
+ let n = !1, r = typeof t.getAnimations == "function" ? t.getAnimations() : [];
106
+ return Promise.allSettled(r.map((e) => e.finished)).then(() => {
107
+ n || (e.scrollTop = e.scrollHeight);
108
+ }), () => {
109
+ n = !0;
110
+ };
111
+ }, [
112
+ X,
113
+ re,
114
+ J,
115
+ R
116
+ ]), /* @__PURE__ */ m(t, {
103
117
  className: n,
104
118
  styles: g,
105
119
  sx: i,
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- export { t as ToastStack } from "./toast-stack-DqrAzdg5.js";
2
+ export { t as ToastStack } from "./toast-stack-B40VpS4M.js";
package/dist/toast.js CHANGED
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- export { n as Toast, a as useToast } from "./toast-BHxI32ZA.js";
2
+ export { n as Toast, a as useToast } from "./toast-B7wo3sX1.js";
@@ -123,7 +123,7 @@ function D({ ref: e, type: n = "single", value: r, defaultValue: i, onValueChang
123
123
  ref: P,
124
124
  role: "group",
125
125
  "aria-label": b ?? C,
126
- "aria-disabled": g || void 0,
126
+ "aria-disabled": g ? !0 : k["aria-disabled"],
127
127
  "data-ui": "toggle-group-root",
128
128
  "data-type": n,
129
129
  "data-orientation": u,
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- export { t as ToggleGroup } from "./toggle-group-fcjzpifI.js";
2
+ export { t as ToggleGroup } from "./toggle-group-B2fpFZwV.js";
@@ -0,0 +1,120 @@
1
+ 'use client';
2
+ import { r as e, t } from "./sx-Dx9JUKp5.js";
3
+ import { t as n } from "./use-controlled-state-DpeVQZNR.js";
4
+ import { t as r } from "./trigger-style-B1KVC8O1.js";
5
+ import { t as i } from "./overlay-layer-qEbpEtb8.js";
6
+ import { t as a } from "./overlay-portal-C4JZFq2M.js";
7
+ import { t as o } from "./use-overlay-floating-Bx2jBKAA.js";
8
+ import { createContext as s, useContext as c, useMemo as l, useState as u } from "react";
9
+ import { vars as d } from "@jfrader/tokens/vars";
10
+ import { jsx as f } from "@emotion/react/jsx-runtime";
11
+ import { useDismiss as p, useFocus as m, useHover as h, useInteractions as g, useMergeRefs as _, useRole as v } from "@floating-ui/react";
12
+ //#region src/components/tooltip/tooltip.tsx
13
+ var y = 300, b = 100, x = s(null);
14
+ function S(e) {
15
+ let t = c(x);
16
+ if (!t) throw Error(`Tooltip.${e} must be rendered inside <Tooltip>.`);
17
+ return t;
18
+ }
19
+ var C = e({
20
+ boxSizing: "border-box",
21
+ backgroundColor: d.color.bgSoft,
22
+ border: `1px solid ${d.color.border}`,
23
+ borderRadius: d.radius.sm,
24
+ boxShadow: d.shadow.raised,
25
+ padding: `${d.space[1]} ${d.space[2]}`,
26
+ maxInlineSize: `min(260px, calc(100vw - 2 * ${d.space[4]}))`,
27
+ overflowWrap: "anywhere",
28
+ color: d.color.text,
29
+ fontFamily: d.font.sans,
30
+ fontSize: d.textSize.sm,
31
+ lineHeight: d.lineHeight.base
32
+ });
33
+ function w({ open: e, defaultOpen: t = !1, onOpenChange: r, placement: i = "top", openDelay: a = y, closeDelay: s = b, children: c }) {
34
+ let [u = !1, d] = n(e, t, r), { refs: _, floatingStyles: S, context: C } = o({
35
+ open: u,
36
+ placement: i,
37
+ onOpenChange: d
38
+ }), w = h(C, {
39
+ delay: {
40
+ open: a,
41
+ close: s
42
+ },
43
+ move: !1
44
+ }), T = m(C), E = p(C, { escapeKey: !0 }), D = v(C, { role: "tooltip" }), { getReferenceProps: O, getFloatingProps: k } = g([
45
+ w,
46
+ T,
47
+ E,
48
+ D
49
+ ]), A = l(() => ({
50
+ open: u,
51
+ refs: _,
52
+ floatingStyles: S,
53
+ getReferenceProps: O,
54
+ getFloatingProps: k
55
+ }), [
56
+ u,
57
+ _,
58
+ S,
59
+ O,
60
+ k
61
+ ]);
62
+ return /* @__PURE__ */ f(x.Provider, {
63
+ value: A,
64
+ children: c
65
+ });
66
+ }
67
+ function T(e) {
68
+ return /* @__PURE__ */ f(i, { children: /* @__PURE__ */ f(w, { ...e }) });
69
+ }
70
+ T.displayName = "Tooltip";
71
+ function E({ ref: e, "aria-describedby": n, className: i, sx: a, ...o }) {
72
+ let { refs: s, getReferenceProps: c } = S("Trigger"), l = _([s.setReference, e]), u = c(o), d = [n, u["aria-describedby"]].filter(Boolean).join(" ") || void 0;
73
+ return /* @__PURE__ */ f(t, {
74
+ className: i,
75
+ styles: r,
76
+ sx: a,
77
+ children: (e) => /* @__PURE__ */ f("button", {
78
+ type: "button",
79
+ ...u,
80
+ ref: l,
81
+ "aria-describedby": d,
82
+ "data-ui": "tooltip-trigger",
83
+ className: e
84
+ })
85
+ });
86
+ }
87
+ E.displayName = "Tooltip.Trigger";
88
+ function D({ ref: e, style: n, className: r, sx: i, dir: a, ...o }) {
89
+ let { refs: s, floatingStyles: c, getFloatingProps: l } = S("Content"), d = _([s.setFloating, e]), [p] = u(() => {
90
+ let e = s.domReference.current;
91
+ return e?.ownerDocument.defaultView?.getComputedStyle(e).direction;
92
+ }), { tabIndex: m, ...h } = l(o);
93
+ return /* @__PURE__ */ f(t, {
94
+ className: r,
95
+ styles: C,
96
+ sx: i,
97
+ children: (e) => /* @__PURE__ */ f("div", {
98
+ ...h,
99
+ ref: d,
100
+ dir: a ?? p,
101
+ "data-ui": "tooltip",
102
+ style: {
103
+ ...n,
104
+ ...c
105
+ },
106
+ className: e
107
+ })
108
+ });
109
+ }
110
+ function O(e) {
111
+ let { open: t } = S("Content");
112
+ return t ? /* @__PURE__ */ f(a, { children: /* @__PURE__ */ f(D, { ...e }) }) : null;
113
+ }
114
+ O.displayName = "Tooltip.Content";
115
+ var k = Object.assign(T, {
116
+ Trigger: E,
117
+ Content: O
118
+ });
119
+ //#endregion
120
+ export { k as t };
package/dist/tooltip.js CHANGED
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- export { t as Tooltip } from "./tooltip-CkeiW9C1.js";
2
+ export { t as Tooltip } from "./tooltip-BvgVTCTN.js";
@@ -84,7 +84,11 @@ var re = 500, ie = {
84
84
  },
85
85
  "&[data-open=\"true\"]::after": { transform: "rotate(90deg)" },
86
86
  "&:dir(rtl)[data-open=\"true\"]::after": { transform: "rotate(-90deg)" },
87
- [a]: { "&[data-branch=\"true\"]::after": { transitionDuration: "0s" } }
87
+ [a]: { "&[data-branch=\"true\"]::after": { transitionDuration: "0s" } },
88
+ [i]: { "&[data-branch=\"true\"]::after": {
89
+ forcedColorAdjust: "none",
90
+ color: "CanvasText"
91
+ } }
88
92
  }), fe = e({
89
93
  listStyle: "none",
90
94
  margin: 0,
package/dist/tree-view.js CHANGED
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- export { t as TreeView } from "./tree-view-C2liIxqy.js";
2
+ export { t as TreeView } from "./tree-view-j8qLqkb_.js";
@@ -19,7 +19,7 @@ export interface CheckboxProps extends Omit<ComponentPropsWithRef<'input'>, 'siz
19
19
  description?: CheckboxPartProps;
20
20
  };
21
21
  }
22
- export declare function Checkbox({ ref, label, description, indeterminate, size, onChange, onCheckedChange, slotProps, className, sx, 'aria-labelledby': ariaLabelledByProp, 'aria-describedby': ariaDescribedByProp, ...rest }: CheckboxProps): import("@emotion/react/jsx-runtime").JSX.Element;
22
+ export declare function Checkbox({ ref, label, description, indeterminate, size, onChange, onCheckedChange, slotProps, className, sx, dir, 'aria-labelledby': ariaLabelledByProp, 'aria-describedby': ariaDescribedByProp, ...rest }: CheckboxProps): import("@emotion/react/jsx-runtime").JSX.Element;
23
23
  export declare namespace Checkbox {
24
24
  var displayName: string;
25
25
  }
@@ -42,7 +42,7 @@ declare function CommandPaletteInput({ ref, onChange, onKeyDown, className, sx,
42
42
  declare function CommandPaletteList({ ref, onMouseDown, children, className, sx, ...rest }: CommandPaletteListProps): import("@emotion/react/jsx-runtime").JSX.Element;
43
43
  declare function CommandPaletteEmpty({ ref, children, className, sx, ...rest }: CommandPaletteEmptyProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
44
44
  declare function CommandPaletteGroup({ ref, label, children, 'aria-labelledby': externalLabelledBy, className, sx, ...rest }: CommandPaletteGroupProps): import("@emotion/react/jsx-runtime").JSX.Element;
45
- declare function CommandPaletteItem({ ref, value, onSelect, keywords, onClick, children, className, sx, ...rest }: CommandPaletteItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
45
+ declare function CommandPaletteItem({ ref, value, onSelect, keywords, 'aria-disabled': ariaDisabled, onClick, children, className, sx, ...rest }: CommandPaletteItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
46
46
  export declare const CommandPalette: typeof CommandPaletteRoot & {
47
47
  Trigger: typeof CommandPaletteTrigger;
48
48
  Content: typeof CommandPaletteContent;
@@ -0,0 +1,118 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import { type SxProps } from '../../styling/sx';
3
+ import { type ThreadAuthor, type ThreadComment, type ThreadReaction } from './thread-core';
4
+ import { type ThreadButtonProps, type ThreadPartProps, type ThreadReactionLabels, type ThreadSize, type ThreadTextareaProps } from './thread-parts';
5
+ export type { ThreadComment } from './thread-core';
6
+ export type CommentAuthor = ThreadAuthor;
7
+ export type CommentReaction = ThreadReaction;
8
+ export type CommentThreadSize = ThreadSize;
9
+ export type CommentThreadHeadingLevel = 2 | 3 | 4 | 5 | 6;
10
+ export type CommentThreadPartProps = ThreadPartProps;
11
+ /** What a proposed tree changes; `parentId` is where a reply actually attached after `maxDepth`. */
12
+ export type CommentThreadEvent = {
13
+ type: 'reply';
14
+ comment: ThreadComment;
15
+ parentId: string | null;
16
+ } | {
17
+ type: 'edit';
18
+ id: string;
19
+ body: string;
20
+ } | {
21
+ type: 'delete';
22
+ id: string;
23
+ } | {
24
+ type: 'react';
25
+ id: string;
26
+ emoji: string;
27
+ added: boolean;
28
+ };
29
+ export interface CommentThreadLabels extends ThreadReactionLabels {
30
+ /** Region name when there is no `title`, `aria-label` or `aria-labelledby`. */
31
+ thread: string;
32
+ /** Accessible name of the new-comment field. */
33
+ composer: string;
34
+ placeholder: string;
35
+ resolve: string;
36
+ resolved: string;
37
+ reopen: string;
38
+ empty: string;
39
+ reply: string;
40
+ edit: string;
41
+ delete: string;
42
+ cancel: string;
43
+ send: string;
44
+ save: string;
45
+ edited: string;
46
+ /** Accessible name of the edit field. */
47
+ editComment: string;
48
+ /** Prompt that names the inline delete confirmation. */
49
+ deleteConfirm: string;
50
+ deletedText: string;
51
+ /** Name of a deleted comment's article. */
52
+ deletedComment: string;
53
+ hideReplies: string;
54
+ cancelReply: string;
55
+ /** Name of the mention suggestions list. */
56
+ mentions: string;
57
+ invalidTime: string;
58
+ /** Accessible name of a reply field. */
59
+ replyingTo: (name: string) => string;
60
+ showReplies: (count: number) => string;
61
+ commentCount: (count: number) => string;
62
+ peopleCount: (count: number) => string;
63
+ /** Announced when comments from others arrive. */
64
+ newComments: (count: number) => string;
65
+ }
66
+ type CommentThreadPart = 'header' | 'title' | 'list' | 'item' | 'article' | 'time' | 'body' | 'replies' | 'actions' | 'reaction' | 'composer' | 'resolved' | 'status';
67
+ export type CommentThreadSlotProps = Partial<Record<CommentThreadPart, CommentThreadPartProps>> & {
68
+ /** Extra Textarea props for every composer and editor; handlers are composed with the thread's. */
69
+ textarea?: ThreadTextareaProps;
70
+ /** Extra Button props for every Send/Save button; `onClick` runs first and may `preventDefault()`. */
71
+ send?: ThreadButtonProps;
72
+ };
73
+ export interface CommentThreadProps extends Omit<ComponentPropsWithRef<'section'>, 'defaultValue' | 'onChange' | 'children' | 'title'>, SxProps {
74
+ /** Comment tree (controlled). Treated as immutable. */
75
+ value?: readonly ThreadComment[];
76
+ defaultValue?: readonly ThreadComment[];
77
+ /** The full proposed tree plus what changed. */
78
+ onValueChange?: (next: ThreadComment[], event: CommentThreadEvent) => void;
79
+ /** Whose comments are editable; authorization stays on the server. */
80
+ currentUser: CommentAuthor;
81
+ /** Mention candidates; defaults to every author plus `currentUser`. Deduped by id. */
82
+ people?: readonly CommentAuthor[];
83
+ resolvedValue?: boolean;
84
+ defaultResolvedValue?: boolean;
85
+ onResolvedValueChange?: (resolved: boolean) => void;
86
+ /** Ids whose replies are shown (controlled). */
87
+ expandedValue?: readonly string[];
88
+ /** Defaults to every comment that has replies at first render. */
89
+ defaultExpandedValue?: readonly string[];
90
+ onExpandedValueChange?: (ids: string[]) => void;
91
+ title?: ReactNode;
92
+ headingLevel?: CommentThreadHeadingLevel;
93
+ /** Emoji offered by the picker, deduped; `[]` removes the picker. */
94
+ reactions?: readonly string[];
95
+ /** Maximum reply edges below a root comment; deeper replies attach to the deepest allowed ancestor. */
96
+ maxDepth?: number;
97
+ /** Reference instant in epoch ms for relative times. Pass the same value on server and client. */
98
+ now: number;
99
+ locale?: Intl.LocalesArgument;
100
+ /** IANA zone for full dates. */
101
+ timeZone?: string;
102
+ /** Id for a newly submitted comment; called once per accepted submit interaction. */
103
+ getNewId?: () => string;
104
+ placeholder?: string;
105
+ /** Accessible name of the new-comment field; defaults to `labels.composer`. */
106
+ composerLabel?: string;
107
+ /** Blocks every mutation. */
108
+ disabled?: boolean;
109
+ /** Hides mutation controls; reply disclosure still works. */
110
+ readOnly?: boolean;
111
+ size?: CommentThreadSize;
112
+ labels?: Partial<CommentThreadLabels>;
113
+ slotProps?: CommentThreadSlotProps;
114
+ }
115
+ export declare function CommentThread({ ref, value, defaultValue, onValueChange, currentUser, people: peopleProp, resolvedValue, defaultResolvedValue, onResolvedValueChange, expandedValue, defaultExpandedValue, onExpandedValueChange, title, headingLevel, reactions: offeredProp, maxDepth: maxDepthProp, now, locale, timeZone, getNewId, placeholder, composerLabel, disabled, readOnly, size, labels: labelProps, slotProps, className, sx, onFocus, onBlur, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, ...rest }: CommentThreadProps): import("@emotion/react/jsx-runtime").JSX.Element;
116
+ export declare namespace CommentThread {
117
+ var displayName: string;
118
+ }
@@ -0,0 +1 @@
1
+ export { CommentThread, type CommentAuthor, type CommentReaction, type CommentThreadEvent, type CommentThreadHeadingLevel, type CommentThreadLabels, type CommentThreadPartProps, type CommentThreadProps, type CommentThreadSize, type CommentThreadSlotProps, type ThreadComment, } from './comment-thread';
@@ -0,0 +1,96 @@
1
+ export interface ThreadAuthor {
2
+ /** Stable identity: ownership, reactions and mention candidates compare it. */
3
+ id: string;
4
+ name: string;
5
+ /** Portrait URL; initials are shown without it. */
6
+ avatar?: string;
7
+ }
8
+ export interface ThreadReaction {
9
+ emoji: string;
10
+ /** Ids of the people who reacted. */
11
+ users: readonly string[];
12
+ }
13
+ /** Epoch ms, a Date, or an ISO date-time with `Z` or an explicit offset. */
14
+ export type ThreadTimestamp = Date | string | number;
15
+ export interface ThreadMessage {
16
+ /** Unique, stable identity across updates. */
17
+ id: string;
18
+ author: ThreadAuthor;
19
+ /** Plain text, rendered as escaped text with its line breaks. */
20
+ body: string;
21
+ createdAt: ThreadTimestamp;
22
+ edited?: boolean;
23
+ deleted?: boolean;
24
+ reactions?: readonly ThreadReaction[];
25
+ }
26
+ export interface ThreadComment extends ThreadMessage {
27
+ replies?: readonly ThreadComment[];
28
+ }
29
+ export interface ThreadEntry {
30
+ comment: ThreadComment;
31
+ parentId: string | null;
32
+ /** Reply edges below a root comment; roots are 0. */
33
+ depth: number;
34
+ }
35
+ export interface ThreadIndex {
36
+ entries: ReadonlyMap<string, ThreadEntry>;
37
+ /** Ids in reading (depth-first) order. */
38
+ order: readonly string[];
39
+ duplicates: readonly string[];
40
+ /** True when a comment appears among its own replies; the repeat is skipped. */
41
+ cyclic: boolean;
42
+ }
43
+ export interface ThreadFormatters {
44
+ relative: Intl.RelativeTimeFormat;
45
+ full: Intl.DateTimeFormat;
46
+ number: Intl.NumberFormat;
47
+ plural: Intl.PluralRules;
48
+ /** Joins names ("Ada and Grace"). */
49
+ people: Intl.ListFormat;
50
+ /** Joins short facts ("4 comments, 2 people"). */
51
+ facts: Intl.ListFormat;
52
+ }
53
+ export declare const DEFAULT_TIME_ZONE = "UTC";
54
+ export declare const validEpoch: (epoch: number) => boolean;
55
+ export declare function toEpoch(value: ThreadTimestamp): number | null;
56
+ /** Signed relative text ("5 minutes ago", "in 2 days", "now") from the caller-owned clock. */
57
+ export declare function relativeTime(epoch: number, now: number, format: Intl.RelativeTimeFormat): string;
58
+ /** Formatters for the requested locale and zone; unusable values fall back and are reported. */
59
+ export declare function resolveFormatters(owner: string, locale: Intl.LocalesArgument, timeZone: string): {
60
+ formatters: ThreadFormatters;
61
+ problems: string[];
62
+ };
63
+ /** "1 reply" / "3 replies" through the locale's plural rules and digits. */
64
+ export declare const formatCount: (format: ThreadFormatters, count: number, one: string, other: string) => string;
65
+ /** Every comment by id with its parent and depth; repeated ids keep their first occurrence. */
66
+ export declare function indexThread(roots: readonly ThreadComment[]): ThreadIndex;
67
+ /**
68
+ * Replaces (or, for `null`, removes) the first comment with `id`, copying only the path to it.
69
+ * Returns the same array when nothing changed, so callers can skip no-op events.
70
+ */
71
+ export declare function updateComment(comments: readonly ThreadComment[], id: string, update: (comment: ThreadComment) => ThreadComment | null, path?: ReadonlySet<ThreadComment>): readonly ThreadComment[];
72
+ /**
73
+ * The comment a reply to `parentId` attaches to: the parent itself while the reply stays within
74
+ * `maxDepth` reply edges, otherwise its ancestor at depth `maxDepth - 1`; `null` adds a root
75
+ * comment (always for `maxDepth` 0). `undefined` when the parent is unknown.
76
+ */
77
+ export declare function resolveReplyParent(index: ThreadIndex, parentId: string | null, maxDepth: number): string | null | undefined;
78
+ export declare function appendComment(comments: readonly ThreadComment[], parentId: string | null, comment: ThreadComment): readonly ThreadComment[];
79
+ /** New body for a live comment; unchanged or deleted comments are left alone. */
80
+ export declare function editComment(comments: readonly ThreadComment[], id: string, body: string): readonly ThreadComment[];
81
+ /**
82
+ * A leaf disappears; a comment with replies becomes a tombstone that keeps its id, author, time
83
+ * and replies but drops its body and reactions.
84
+ */
85
+ export declare function deleteComment(comments: readonly ThreadComment[], id: string): readonly ThreadComment[];
86
+ /** Adds or removes `userId` from the `emoji` reaction; empty reactions are dropped. */
87
+ export declare function toggleReaction(reactions: readonly ThreadReaction[], emoji: string, userId: string): {
88
+ reactions: ThreadReaction[];
89
+ added: boolean;
90
+ };
91
+ export declare function reactToComment(comments: readonly ThreadComment[], id: string, emoji: string, userId: string): {
92
+ comments: readonly ThreadComment[];
93
+ added: boolean;
94
+ };
95
+ /** First occurrence of each value, keyed by `key`. */
96
+ export declare function uniqueBy<T>(items: readonly T[], key: (item: T) => string): T[];
@@ -0,0 +1,114 @@
1
+ import { type KeyboardEvent, type ReactNode } from 'react';
2
+ import { type Interpolation, type SerializedStyles, type Theme } from '../../styling/css';
3
+ import { type ButtonProps } from '../button';
4
+ import { type TextareaProps } from '../textarea';
5
+ import { type ThreadAuthor, type ThreadFormatters, type ThreadReaction } from './thread-core';
6
+ export type ThreadSize = 'sm' | 'md';
7
+ export interface ThreadPartProps {
8
+ className?: string;
9
+ css?: Interpolation<Theme>;
10
+ }
11
+ /** Textarea props a consumer may add; the thread owns value, change and mention wiring. */
12
+ export type ThreadTextareaProps = Omit<TextareaProps, 'value' | 'defaultValue' | 'onValueChange' | 'label' | 'children'>;
13
+ /** Button props a consumer may add to a submit button; the thread owns its label and state. */
14
+ export type ThreadButtonProps = Omit<ButtonProps, 'children' | 'loading' | 'type' | 'render'>;
15
+ export declare const isComposing: (event: KeyboardEvent<HTMLElement>) => boolean;
16
+ export interface ThreadTimeProps {
17
+ epoch: number | null;
18
+ /** Caller-owned clock; `null` shows the full date instead of a relative one. */
19
+ now: number | null;
20
+ formatters: ThreadFormatters;
21
+ invalidLabel: string;
22
+ id: string;
23
+ /** Id of the hidden full date, for the message's `aria-describedby`. */
24
+ fullId: string;
25
+ ui: string;
26
+ part?: ThreadPartProps;
27
+ }
28
+ export declare function ThreadTime({ epoch, now, formatters, invalidLabel, id, fullId, ui: owner, part }: ThreadTimeProps): import("@emotion/react/jsx-runtime").JSX.Element;
29
+ export interface ThreadMessageViewProps {
30
+ ui: string;
31
+ author: ThreadAuthor;
32
+ /** Replaces the author/time name, e.g. for a deleted message. */
33
+ label?: string;
34
+ epoch: number | null;
35
+ now: number | null;
36
+ formatters: ThreadFormatters;
37
+ invalidTimeLabel: string;
38
+ /** Text after the time, e.g. "(edited)". */
39
+ meta?: ReactNode;
40
+ size: ThreadSize;
41
+ baseId: string;
42
+ messageId: string;
43
+ /** Body, editor and footer rows. */
44
+ children: ReactNode;
45
+ slots?: {
46
+ article?: ThreadPartProps;
47
+ time?: ThreadPartProps;
48
+ };
49
+ }
50
+ export declare function ThreadMessageView({ ui: owner, author, label, epoch, now, formatters, invalidTimeLabel, meta, size, baseId, messageId, children, slots, }: ThreadMessageViewProps): import("@emotion/react/jsx-runtime").JSX.Element;
51
+ export interface ThreadReactionLabels {
52
+ addReaction: string;
53
+ closeReactions: string;
54
+ reactions: string;
55
+ reactWith: (emoji: string) => string;
56
+ reactionCount: (emoji: string, count: number, mine: boolean) => string;
57
+ }
58
+ export interface ThreadReactionsProps {
59
+ ui: string;
60
+ reactions: readonly ThreadReaction[];
61
+ /** Emoji offered by the picker; empty hides the picker. */
62
+ offered: readonly string[];
63
+ currentUserId: string;
64
+ formatters: ThreadFormatters;
65
+ labels: ThreadReactionLabels;
66
+ /** Mutations hidden: chips render as text. */
67
+ readOnly: boolean;
68
+ disabled: boolean;
69
+ pickerOpen: boolean;
70
+ onPickerOpenChange: (open: boolean) => void;
71
+ onToggle: (emoji: string) => void;
72
+ pickerId: string;
73
+ part?: ThreadPartProps;
74
+ }
75
+ /**
76
+ * Picker keyboard: Left/Right (mirrored in RTL) wrap across the emoji, Home/End jump; Escape and
77
+ * a chosen emoji close it and return focus to the add button. Pressing outside leaves it open.
78
+ */
79
+ export declare function ThreadReactions({ ui: owner, reactions, offered, currentUserId, formatters, labels, readOnly, disabled, pickerOpen, onPickerOpenChange, onToggle, pickerId, part, }: ThreadReactionsProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
80
+ export interface ThreadComposerProps {
81
+ ui: string;
82
+ draft: string;
83
+ onDraftChange: (draft: string) => void;
84
+ /** Called with the trimmed text for a non-empty, non-pending submit. */
85
+ onSubmit: (text: string, container: HTMLElement) => void;
86
+ /** The cancel button, and Escape (with no suggestions open) unless `cancelOnEscape` is false. */
87
+ onCancel?: (container: HTMLElement) => void;
88
+ cancelOnEscape?: boolean;
89
+ /** Shows the cancel button. */
90
+ cancelable: boolean;
91
+ label: string;
92
+ placeholder?: string;
93
+ submitLabel: string;
94
+ cancelLabel: string;
95
+ mentionsLabel: string;
96
+ people: readonly ThreadAuthor[];
97
+ locale: Intl.LocalesArgument;
98
+ disabled: boolean;
99
+ /** A submit is waiting for its parent to accept it; further submits are ignored. */
100
+ pending: boolean;
101
+ /** Focus the field on mount; only set when a user action opened this composer. */
102
+ autoFocus?: boolean;
103
+ size: ThreadSize;
104
+ /** Decorative portrait shown at inline-start. */
105
+ author?: ThreadAuthor;
106
+ textareaProps?: ThreadTextareaProps;
107
+ submitProps?: ThreadButtonProps;
108
+ part?: ThreadPartProps;
109
+ /** Distinguishes composers inside one thread (`data-composer`). */
110
+ kind: string;
111
+ }
112
+ /** Per-size layout variables read by the parts; the owning root applies them. */
113
+ export declare const threadSizeStyles: Record<ThreadSize, SerializedStyles>;
114
+ export declare function ThreadComposer({ ui: owner, draft, onDraftChange, onSubmit, onCancel, cancelOnEscape, cancelable, label, placeholder, submitLabel, cancelLabel, mentionsLabel, people, locale, disabled, pending, autoFocus, size, author, textareaProps, submitProps, part, kind, }: ThreadComposerProps): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,55 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import { type SxProps } from '../../styling/sx';
3
+ import { type MenuItemTone } from '../menu/menu';
4
+ export type ContextMenuItemTone = MenuItemTone;
5
+ export interface ContextMenuProps {
6
+ open?: boolean;
7
+ defaultOpen?: boolean;
8
+ onOpenChange?: (open: boolean) => void;
9
+ children?: ReactNode;
10
+ }
11
+ export interface ContextMenuTargetProps extends ComponentPropsWithRef<'div'>, SxProps {
12
+ /** Also open on a plain click or tap (and Enter/Space on the Target). Only for inert objects:
13
+ * interactive children would lose their own click. */
14
+ openOnClick?: boolean;
15
+ /** Leave the browser's native context menu alone. */
16
+ disabled?: boolean;
17
+ }
18
+ export interface ContextMenuTriggerProps extends ComponentPropsWithRef<'button'>, SxProps {
19
+ }
20
+ export interface ContextMenuContentProps extends ComponentPropsWithRef<'div'>, SxProps {
21
+ }
22
+ export interface ContextMenuItemProps extends Omit<ComponentPropsWithRef<'button'>, 'onSelect'>, SxProps {
23
+ /** Called once when the item is activated. The menu then closes unless a click handler called
24
+ * `event.preventDefault()`. */
25
+ onSelect?: () => void;
26
+ disabled?: boolean;
27
+ tone?: ContextMenuItemTone;
28
+ /** Decorative icon before the label. */
29
+ icon?: ReactNode;
30
+ }
31
+ export interface ContextMenuCheckboxItemProps extends Omit<ContextMenuItemProps, 'value' | 'defaultValue'> {
32
+ value?: boolean;
33
+ defaultValue?: boolean;
34
+ onValueChange?: (checked: boolean) => void;
35
+ /** Close the menu after toggling. Off by default so several options can be toggled in a row. */
36
+ closeOnSelect?: boolean;
37
+ }
38
+ export interface ContextMenuSeparatorProps extends ComponentPropsWithRef<'div'>, SxProps {
39
+ }
40
+ declare function ContextMenuRoot({ open, defaultOpen, onOpenChange, children }: ContextMenuProps): import("@emotion/react/jsx-runtime").JSX.Element;
41
+ declare function ContextMenuTarget({ ref, id, openOnClick, disabled, 'aria-labelledby': ariaLabelledBy, className, sx, ...rest }: ContextMenuTargetProps): import("@emotion/react/jsx-runtime").JSX.Element;
42
+ declare function ContextMenuTrigger({ ref, id, className, sx, ...rest }: ContextMenuTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
43
+ declare function ContextMenuContent({ ref, style, dir, onKeyDown, ...props }: ContextMenuContentProps): import("@emotion/react/jsx-runtime").JSX.Element;
44
+ declare function ContextMenuItem({ tone, icon, children, ...props }: ContextMenuItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
45
+ declare function ContextMenuCheckboxItem({ value, defaultValue, onValueChange, onSelect, closeOnSelect, tone, icon, children, ...props }: ContextMenuCheckboxItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
46
+ declare function ContextMenuSeparator(props: ContextMenuSeparatorProps): import("@emotion/react/jsx-runtime").JSX.Element;
47
+ export declare const ContextMenu: typeof ContextMenuRoot & {
48
+ Target: typeof ContextMenuTarget;
49
+ Trigger: typeof ContextMenuTrigger;
50
+ Content: typeof ContextMenuContent;
51
+ Item: typeof ContextMenuItem;
52
+ CheckboxItem: typeof ContextMenuCheckboxItem;
53
+ Separator: typeof ContextMenuSeparator;
54
+ };
55
+ export {};
@@ -0,0 +1,2 @@
1
+ export { ContextMenu } from './context-menu';
2
+ export type { ContextMenuCheckboxItemProps, ContextMenuContentProps, ContextMenuItemProps, ContextMenuItemTone, ContextMenuProps, ContextMenuSeparatorProps, ContextMenuTargetProps, ContextMenuTriggerProps, } from './context-menu';
@@ -94,7 +94,7 @@ export interface DateRangePickerContentProps extends Omit<ComponentPropsWithRef<
94
94
  };
95
95
  }
96
96
  declare function DateRangePickerRoot(props: DateRangePickerProps): import("@emotion/react/jsx-runtime").JSX.Element;
97
- declare function DateRangePickerTrigger({ ref, id: idProp, size, icon, placeholder, className, sx, onKeyDown, onKeyUp, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalidProp, ...rest }: DateRangePickerTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
97
+ declare function DateRangePickerTrigger({ ref, id: idProp, form, size, icon, placeholder, className, sx, onKeyDown, onKeyUp, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalidProp, ...rest }: DateRangePickerTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
98
98
  declare function DateRangePickerContent(props: DateRangePickerContentProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
99
99
  export declare const DateRangePicker: typeof DateRangePickerRoot & {
100
100
  Trigger: typeof DateRangePickerTrigger;