@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
@@ -0,0 +1,234 @@
1
+ 'use client';
2
+ import { r as e } from "./sx-Dx9JUKp5.js";
3
+ import { n as t } from "./focus-ring-BK5W5_NY.js";
4
+ import { n } from "./media-8yrN85VT.js";
5
+ import { t as r } from "./use-controlled-state-DpeVQZNR.js";
6
+ import { t as i } from "./renderable-DzcIj1Lo.js";
7
+ import { useEffect as a, useId as o, useMemo as s, useRef as c, useState as l } from "react";
8
+ import { vars as u } from "@jfrader/tokens/vars";
9
+ //#region src/components/slider/slider-style.ts
10
+ var d = e({
11
+ display: "grid",
12
+ gap: u.space[2],
13
+ minInlineSize: 0,
14
+ inlineSize: "100%",
15
+ fontFamily: u.font.sans,
16
+ fontSize: u.textSize.sm,
17
+ lineHeight: u.lineHeight.base,
18
+ color: u.color.text
19
+ }), f = e({
20
+ display: "flex",
21
+ flexWrap: "wrap",
22
+ justifyContent: "space-between",
23
+ gap: u.space[2],
24
+ alignItems: "baseline"
25
+ }), p = e({ fontWeight: u.fontWeight.medium }), m = e({
26
+ fontVariantNumeric: "tabular-nums",
27
+ overflowWrap: "anywhere"
28
+ }), h = e({ color: u.color.textMuted }), g = e({ color: u.color.dangerText }), _ = e({
29
+ display: "flex",
30
+ alignItems: "center",
31
+ gap: u.space[3],
32
+ minInlineSize: 0,
33
+ paddingBlockStart: u.space[8]
34
+ }), v = e({
35
+ position: "relative",
36
+ flex: 1,
37
+ minInlineSize: u.space[8],
38
+ marginInline: u.space[4],
39
+ touchAction: "pan-y",
40
+ userSelect: "none",
41
+ cursor: "pointer",
42
+ "&[data-disabled]": { cursor: "default" }
43
+ }), y = {
44
+ sm: e({ minBlockSize: u.space[8] }),
45
+ md: e({ minBlockSize: u.space[10] })
46
+ }, b = e({
47
+ display: "flex",
48
+ flexWrap: "wrap",
49
+ gap: u.space[2]
50
+ }), x = e({
51
+ minBlockSize: u.space[8],
52
+ minInlineSize: u.space[8],
53
+ paddingBlock: u.space[1],
54
+ paddingInline: u.space[2],
55
+ font: "inherit",
56
+ overflowWrap: "anywhere",
57
+ maxInlineSize: "100%",
58
+ color: u.color.text,
59
+ background: u.color.surfaceRaised,
60
+ border: `1px solid ${u.color.borderControl}`,
61
+ borderRadius: u.radius.md,
62
+ cursor: "pointer",
63
+ "&:focus-visible": t,
64
+ "&:disabled": { cursor: "default" },
65
+ [n]: { borderColor: "ButtonText" }
66
+ }), S = 1e-7, C = "data-slider-thumb";
67
+ function w(e, t) {
68
+ return typeof e == "number" ? e === t : typeof t != "number" && e[0] === t[0] && e[1] === t[1];
69
+ }
70
+ function T(...e) {
71
+ return e.filter(Boolean).join(" ") || void 0;
72
+ }
73
+ function E(e) {
74
+ return i(e) && e !== "";
75
+ }
76
+ function D(e, t) {
77
+ return typeof e == "function" ? e(t) : e;
78
+ }
79
+ function O(e, t, n) {
80
+ let r = s(() => new Intl.NumberFormat(e, t), [e, t]);
81
+ return {
82
+ formatter: r,
83
+ format: (e) => n ? n(e, r) : r.format(e)
84
+ };
85
+ }
86
+ function k(e) {
87
+ let { component: t, range: n, value: i, defaultValue: s, min: u, max: d, step: f, largeStep: p, minStepsBetweenThumbs: m, disabled: h, onValueChange: g, onValueCommit: _, onPointerSample: v, resolvePointer: y, onGestureEnd: b } = e, x = (d - u) / f;
88
+ if (![
89
+ u,
90
+ d,
91
+ f,
92
+ x
93
+ ].every(Number.isFinite) || d <= u || f <= 0 || !Number.isSafeInteger(Math.round(x)) || Math.abs(x - Math.round(x)) > S) throw Error(`${t} requires finite min < max, a positive step, and max aligned to min + n * step.`);
94
+ if (!Number.isInteger(m) || m < 0 || m > Math.round(x)) throw Error(`${t} minStepsBetweenThumbs must be a nonnegative integer that fits the domain.`);
95
+ if (p !== void 0 && (!Number.isFinite(p) || p <= 0)) throw Error(`${t} largeStep must be finite and positive.`);
96
+ let T = m * f, E = Math.max(1, Math.round((p ?? (d - u) / 10) / f)) * f, D = (e) => {
97
+ if (!Number.isFinite(e)) throw Error(`${t} values must be finite.`);
98
+ let n = Math.max(0, Math.min(Math.round(x), Math.round((e - u) / f))), r = u + n * f, i = Number(r.toPrecision(15));
99
+ return Math.abs(i - r) <= f * S ? i : r;
100
+ }, O = (e) => {
101
+ if (!n) {
102
+ if (typeof e != "number") throw Error(`${t} single mode requires a number.`);
103
+ return D(e);
104
+ }
105
+ if (typeof e == "number" || e.length !== 2 || e[0] > e[1]) throw Error(`${t} range requires an ordered [lower, upper] tuple.`);
106
+ let r = D(e[0]), i = D(e[1]);
107
+ if ((i - r) / f + S < m) throw Error(`${t} range values must respect minStepsBetweenThumbs.`);
108
+ return [r, i];
109
+ }, [k] = l(() => O(s ?? (n ? [u, d] : u))), [A, j, M] = r(i, k, g), N = O(A ?? k), P = typeof N == "number" ? [N] : N, F = o(), I = c(null), L = c(null), R = c(0), [z, B] = l(null), V = (e) => n ? [e === 0 ? u : D(P[0] + T), e === 0 ? D(P[1] - T) : d] : [u, d], H = (e, t) => {
110
+ let [r, i] = V(e), a = D(Math.max(r, Math.min(i, t)));
111
+ return n ? e === 0 ? [a, P[1]] : [P[0], a] : a;
112
+ }, U = (e) => {
113
+ w(N, e) || j(e);
114
+ }, W = (e) => {
115
+ let t = L.current;
116
+ t && (L.current = null, B(null), b?.(e), t.control.hasPointerCapture(t.pointerId) && t.control.releasePointerCapture(t.pointerId), e && !w(t.initial, t.candidate) && _(t.candidate));
117
+ };
118
+ a(() => {
119
+ h && W(!1);
120
+ }, [h]), a(() => () => {
121
+ let e = L.current;
122
+ L.current = null, e?.control.hasPointerCapture(e.pointerId) && e.control.releasePointerCapture(e.pointerId);
123
+ }, []), a(() => {
124
+ let e = I.current?.closest("form");
125
+ if (!e) return;
126
+ let t = (e) => {
127
+ queueMicrotask(() => {
128
+ e.defaultPrevented || (W(!1), M());
129
+ });
130
+ };
131
+ return e.addEventListener("reset", t), () => e.removeEventListener("reset", t);
132
+ }, [M]);
133
+ let G = (e) => I.current?.querySelector(`[${C}="${e}"]`)?.focus(), K = () => I.current?.matches(":dir(rtl)") ?? !1, q = (e) => {
134
+ let t = I.current.getBoundingClientRect(), n = t.width > 0 ? (e - t.left) / t.width : 0;
135
+ return u + (K() ? 1 - n : n) * (d - u);
136
+ }, J = (e) => n ? Math.abs(e - P[0]) === Math.abs(e - P[1]) ? R.current : Math.abs(e - P[0]) < Math.abs(e - P[1]) ? 0 : 1 : 0, Y = (e) => {
137
+ let t = L.current;
138
+ if (!t || e.pointerId !== t.pointerId || h) return;
139
+ t.coincident && e.clientX !== t.originX && (t.thumb = e.clientX > t.originX === K() ? 0 : 1, t.coincident = !1, B(t.thumb), G(t.thumb));
140
+ let [n, r] = V(t.thumb), i = I.current.getBoundingClientRect().width, a = {
141
+ raw: q(e.clientX - t.offset),
142
+ low: n,
143
+ high: r,
144
+ pxPerUnit: i / (d - u),
145
+ rtl: K(),
146
+ pointerType: e.pointerType
147
+ };
148
+ v?.(a);
149
+ let o = H(t.thumb, y ? y(a) : a.raw);
150
+ w(t.candidate, o) || (t.candidate = o, U(o));
151
+ }, X = (e) => {
152
+ if (e.defaultPrevented || h || L.current || !e.isPrimary || e.button !== 0) return;
153
+ let t = e.target.closest(`[${C}]`), r = t ? Number(t.getAttribute(C)) : J(q(e.clientX)), i = t?.getBoundingClientRect(), a = i ? e.clientX - (i.left + i.width / 2) : 0;
154
+ L.current = {
155
+ pointerId: e.pointerId,
156
+ thumb: r,
157
+ offset: a,
158
+ originX: e.clientX,
159
+ coincident: n && P[0] === P[1],
160
+ initial: N,
161
+ candidate: N,
162
+ control: e.currentTarget
163
+ }, e.currentTarget.setPointerCapture(e.pointerId), e.preventDefault(), B(r), G(r), t || Y(e);
164
+ }, Z = (e, t) => {
165
+ if (h || e.defaultPrevented) return;
166
+ let n = K() ? -1 : 1, r = e.shiftKey ? E : f, [i, a] = V(t), o = {
167
+ ArrowRight: P[t] + r * n,
168
+ ArrowLeft: P[t] - r * n,
169
+ ArrowUp: P[t] + r,
170
+ ArrowDown: P[t] - r,
171
+ PageUp: P[t] + E,
172
+ PageDown: P[t] - E,
173
+ Home: i,
174
+ End: a
175
+ }[e.key];
176
+ if (o === void 0) return;
177
+ e.preventDefault();
178
+ let s = H(t, o);
179
+ w(N, s) || (U(s), _(s));
180
+ };
181
+ return {
182
+ id: F,
183
+ controlRef: I,
184
+ current: N,
185
+ values: P,
186
+ active: z,
187
+ bounds: V,
188
+ percent: (e) => (e - u) / (d - u) * 100,
189
+ normalizeMarks: (e) => Array.from(new Map(e.flatMap((e) => {
190
+ let t = typeof e == "number" ? { value: e } : e;
191
+ return Number.isFinite(t.value) && t.value >= u && t.value <= d ? [[D(t.value), {
192
+ ...t,
193
+ value: D(t.value)
194
+ }]] : [];
195
+ })).values()),
196
+ controlHandlers: (e) => ({
197
+ ref: (t) => {
198
+ I.current = t;
199
+ let n = e?.ref;
200
+ if (typeof n == "function") return n(t);
201
+ n && (n.current = t);
202
+ },
203
+ onPointerDown: (t) => {
204
+ e?.onPointerDown?.(t), X(t);
205
+ },
206
+ onPointerMove: (t) => {
207
+ e?.onPointerMove?.(t), t.defaultPrevented || Y(t);
208
+ },
209
+ onPointerUp: (t) => {
210
+ e?.onPointerUp?.(t), L.current?.pointerId === t.pointerId && W(!0);
211
+ },
212
+ onPointerCancel: (t) => {
213
+ e?.onPointerCancel?.(t), L.current?.pointerId === t.pointerId && W(!1);
214
+ },
215
+ onLostPointerCapture: (t) => {
216
+ e?.onLostPointerCapture?.(t), L.current?.pointerId === t.pointerId && W(!1);
217
+ }
218
+ }),
219
+ handleRootKeyDown: (e) => {
220
+ let t = e.target.closest(`[${C}]`);
221
+ t && I.current?.contains(t) && Z(e, Number(t.getAttribute(C)));
222
+ },
223
+ selectMark: (e) => {
224
+ if (h) return;
225
+ let t = H(J(e), e);
226
+ w(N, t) || (U(t), _(t));
227
+ },
228
+ noteFocus: (e) => {
229
+ R.current = e;
230
+ }
231
+ };
232
+ }
233
+ //#endregion
234
+ export { k as a, g as c, x as d, b as f, y as g, _ as h, O as i, f as l, d as m, D as n, v as o, m as p, T as r, h as s, E as t, p as u };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jfrader/ui",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "React components styled with Emotion and themed through CSS custom properties.",
5
5
  "keywords": [
6
6
  "react",
@@ -98,10 +98,18 @@
98
98
  "types": "./dist/types/components/command-palette/index.d.ts",
99
99
  "import": "./dist/command-palette.js"
100
100
  },
101
+ "./comment-thread": {
102
+ "types": "./dist/types/components/comment-thread/index.d.ts",
103
+ "import": "./dist/comment-thread.js"
104
+ },
101
105
  "./container": {
102
106
  "types": "./dist/types/components/container/index.d.ts",
103
107
  "import": "./dist/container.js"
104
108
  },
109
+ "./context-menu": {
110
+ "types": "./dist/types/components/context-menu/index.d.ts",
111
+ "import": "./dist/context-menu.js"
112
+ },
105
113
  "./copy-button": {
106
114
  "types": "./dist/types/components/copy-button/index.d.ts",
107
115
  "import": "./dist/copy-button.js"
@@ -130,6 +138,10 @@
130
138
  "types": "./dist/types/components/drawer/index.d.ts",
131
139
  "import": "./dist/drawer.js"
132
140
  },
141
+ "./elastic-slider": {
142
+ "types": "./dist/types/components/elastic-slider/index.d.ts",
143
+ "import": "./dist/elastic-slider.js"
144
+ },
133
145
  "./empty-state": {
134
146
  "types": "./dist/types/components/empty-state/index.d.ts",
135
147
  "import": "./dist/empty-state.js"
@@ -138,6 +150,10 @@
138
150
  "types": "./dist/types/components/expandable-card/index.d.ts",
139
151
  "import": "./dist/expandable-card.js"
140
152
  },
153
+ "./expanding-search": {
154
+ "types": "./dist/types/components/expanding-search/index.d.ts",
155
+ "import": "./dist/expanding-search.js"
156
+ },
141
157
  "./file-dropzone": {
142
158
  "types": "./dist/types/components/file-dropzone/index.d.ts",
143
159
  "import": "./dist/file-dropzone.js"
@@ -302,6 +318,10 @@
302
318
  "types": "./dist/types/components/theme-root/index.d.ts",
303
319
  "import": "./dist/theme-root.js"
304
320
  },
321
+ "./theme-switch": {
322
+ "types": "./dist/types/components/theme-switch/index.d.ts",
323
+ "import": "./dist/theme-switch.js"
324
+ },
305
325
  "./time-picker": {
306
326
  "types": "./dist/types/components/time-picker/index.d.ts",
307
327
  "import": "./dist/time-picker.js"
@@ -343,7 +363,7 @@
343
363
  "@emotion/styled": "^11.14.0",
344
364
  "@floating-ui/react": "^0.27.20",
345
365
  "motion": "^14.1.0",
346
- "@jfrader/tokens": "0.5.0"
366
+ "@jfrader/tokens": "0.5.1"
347
367
  },
348
368
  "peerDependencies": {
349
369
  "react": "^19.0.0",
@@ -1,198 +0,0 @@
1
- 'use client';
2
- import { r as e, t } from "./sx-Dx9JUKp5.js";
3
- import { t as n } from "./disclosure-caret-C5T3fcl6.js";
4
- import { t as r } from "./focus-ring-BK5W5_NY.js";
5
- import { r as i } from "./media-8yrN85VT.js";
6
- import { n as a } from "./roving-focus-CYlo_Kf8.js";
7
- import { t as o } from "./use-controlled-state-DpeVQZNR.js";
8
- import { createContext as s, useContext as c, useId as l, useMemo as u } from "react";
9
- import { vars as d } from "@jfrader/tokens/vars";
10
- import { jsx as f } from "@emotion/react/jsx-runtime";
11
- //#region src/components/accordion/accordion.tsx
12
- var p = s(null), m = s(null);
13
- function h(e) {
14
- let t = c(p);
15
- if (!t) throw Error(`Accordion.${e} must be rendered inside <Accordion>.`);
16
- return t;
17
- }
18
- function g(e) {
19
- let t = c(m);
20
- if (!t) throw Error(`Accordion.${e} must be rendered inside <Accordion.Item>.`);
21
- return t;
22
- }
23
- var _ = "", v = {
24
- itemSelector: "[data-ui=\"accordion-trigger\"]:not([disabled])",
25
- ownerSelector: "[data-ui=\"accordion\"]"
26
- }, y = (e, t) => {
27
- if (t === "multiple" && Array.isArray(e)) return e;
28
- let n = Array.isArray(e) ? e[0] : e;
29
- return n === void 0 || n === _ ? [] : [n];
30
- }, b = e({
31
- borderBlockEnd: `1px solid ${d.color.border}`,
32
- "&:first-of-type": { borderBlockStart: `1px solid ${d.color.border}` }
33
- }), x = e({
34
- margin: 0,
35
- font: "inherit"
36
- }), S = e({
37
- appearance: "none",
38
- display: "flex",
39
- alignItems: "center",
40
- justifyContent: "space-between",
41
- gap: d.space[3],
42
- inlineSize: "100%",
43
- border: 0,
44
- background: "transparent",
45
- cursor: "pointer",
46
- paddingBlock: d.space[3],
47
- paddingInline: d.space[4],
48
- font: "inherit",
49
- fontSize: d.textSize.sm,
50
- fontWeight: d.fontWeight.medium,
51
- color: d.color.text,
52
- textAlign: "start",
53
- transitionProperty: "background-color",
54
- transitionDuration: d.motion.duration.fast,
55
- transitionTimingFunction: d.motion.easeStandard,
56
- "&::after": { ...n },
57
- "&[aria-expanded=\"true\"]::after": { transform: "rotate(90deg)" },
58
- "&[aria-expanded=\"true\"]:dir(rtl)::after": { transform: "rotate(-90deg)" },
59
- "&:hover:not(:disabled):not([aria-disabled=\"true\"])": { backgroundColor: d.color.surfaceHover },
60
- "&[aria-disabled=\"true\"]": { cursor: "default" },
61
- "&:disabled": {
62
- opacity: .55,
63
- cursor: "not-allowed"
64
- },
65
- "&:focus-visible": { ...r },
66
- [i]: {
67
- transitionDuration: "0s",
68
- "&::after": { transitionDuration: "0s" }
69
- }
70
- }), C = e({
71
- paddingBlock: d.space[3],
72
- paddingInline: d.space[4],
73
- color: d.color.textMuted,
74
- lineHeight: d.lineHeight.relaxed,
75
- "&[hidden]": { display: "none" }
76
- });
77
- function w({ ref: e, value: n, defaultValue: r, onValueChange: i, type: s = "single", collapsible: c = !0, onKeyDown: l, className: d, sx: m, ...h }) {
78
- let [g, b] = o(n, r, i), x = u(() => {
79
- let e = y(g, s), t = c || e.length > 1;
80
- return {
81
- openValues: e,
82
- toggle: (n) => {
83
- let r = e.includes(n);
84
- (!r || t) && b(s === "multiple" ? r ? e.filter((e) => e !== n) : [...e, n] : r ? _ : n);
85
- },
86
- canCollapse: t
87
- };
88
- }, [
89
- g,
90
- b,
91
- s,
92
- c
93
- ]), S = (e) => {
94
- l?.(e), !e.defaultPrevented && a(e, e.currentTarget, "vertical", v);
95
- };
96
- return /* @__PURE__ */ f(p.Provider, {
97
- value: x,
98
- children: /* @__PURE__ */ f(t, {
99
- className: d,
100
- sx: m,
101
- children: (t) => /* @__PURE__ */ f("div", {
102
- ...h,
103
- ref: e,
104
- "data-ui": "accordion",
105
- onKeyDown: S,
106
- className: t
107
- })
108
- })
109
- });
110
- }
111
- w.displayName = "Accordion";
112
- function T({ ref: e, value: n, disabled: r = !1, className: i, sx: a, ...o }) {
113
- let { openValues: s } = h("Item"), c = l(), d = s.includes(n), p = u(() => ({
114
- value: n,
115
- disabled: r,
116
- expanded: d,
117
- triggerId: `${c}-trigger`,
118
- panelId: `${c}-panel`
119
- }), [
120
- n,
121
- r,
122
- d,
123
- c
124
- ]);
125
- return /* @__PURE__ */ f(m.Provider, {
126
- value: p,
127
- children: /* @__PURE__ */ f(t, {
128
- className: i,
129
- styles: b,
130
- sx: a,
131
- children: (t) => /* @__PURE__ */ f("div", {
132
- ...o,
133
- ref: e,
134
- "data-ui": "accordion-item",
135
- "data-state": d ? "open" : "closed",
136
- "data-disabled": r ? "" : void 0,
137
- className: t
138
- })
139
- })
140
- });
141
- }
142
- T.displayName = "Accordion.Item";
143
- function E({ ref: e, onClick: n, disabled: r, className: i, sx: a, ...o }) {
144
- let { toggle: s, canCollapse: c } = h("Trigger"), { value: l, disabled: u, expanded: d, triggerId: p, panelId: m } = g("Trigger"), _ = d && !c, v = (e) => {
145
- n?.(e), !e.defaultPrevented && s(l);
146
- };
147
- return /* @__PURE__ */ f("h3", {
148
- "data-ui": "accordion-heading",
149
- css: x,
150
- children: /* @__PURE__ */ f(t, {
151
- className: i,
152
- styles: S,
153
- sx: a,
154
- children: (t) => /* @__PURE__ */ f("button", {
155
- ...o,
156
- ref: e,
157
- type: "button",
158
- id: p,
159
- "data-ui": "accordion-trigger",
160
- "data-state": d ? "open" : "closed",
161
- "aria-expanded": d,
162
- "aria-controls": m,
163
- "aria-disabled": _ || void 0,
164
- disabled: u || r,
165
- onClick: v,
166
- className: t
167
- })
168
- })
169
- });
170
- }
171
- E.displayName = "Accordion.Trigger";
172
- function D({ ref: e, "aria-labelledby": n, className: r, sx: i, ...a }) {
173
- let { expanded: o, triggerId: s, panelId: c } = g("Panel"), l = [n, s].filter(Boolean).join(" ");
174
- return /* @__PURE__ */ f(t, {
175
- className: r,
176
- styles: C,
177
- sx: i,
178
- children: (t) => /* @__PURE__ */ f("div", {
179
- ...a,
180
- ref: e,
181
- role: "region",
182
- id: c,
183
- "aria-labelledby": l,
184
- hidden: !o,
185
- "data-ui": "accordion-panel",
186
- "data-state": o ? "open" : "closed",
187
- className: t
188
- })
189
- });
190
- }
191
- D.displayName = "Accordion.Panel";
192
- var O = Object.assign(w, {
193
- Item: T,
194
- Trigger: E,
195
- Panel: D
196
- });
197
- //#endregion
198
- export { O as t };
@@ -1,132 +0,0 @@
1
- 'use client';
2
- import { r as e, t } from "./sx-Dx9JUKp5.js";
3
- import { useState as n } from "react";
4
- import { vars as r } from "@jfrader/tokens/vars";
5
- import { jsx as i, jsxs as a } from "@emotion/react/jsx-runtime";
6
- //#region src/components/avatar/avatar.tsx
7
- var o = 2, s = new Intl.Segmenter(void 0, { granularity: "grapheme" });
8
- function c(e) {
9
- let t = Array.from(s.segment(e), ({ segment: e }) => e), n = t[0] ?? "";
10
- if (!/\p{Extended_Pictographic}/u.test(n)) return n;
11
- let r = "";
12
- for (let e of t) {
13
- if (!/\p{Extended_Pictographic}/u.test(e)) break;
14
- r += e;
15
- }
16
- return r;
17
- }
18
- function l(e) {
19
- return e.trim().split(/\s+/).filter(Boolean).slice(0, o).map(c).join("").toLocaleUpperCase();
20
- }
21
- var u = e({
22
- position: "relative",
23
- display: "inline-flex",
24
- alignItems: "center",
25
- justifyContent: "center",
26
- flexShrink: 0,
27
- boxSizing: "border-box",
28
- borderRadius: r.radius.full,
29
- backgroundColor: r.color.surfaceHover,
30
- color: r.color.text,
31
- fontWeight: r.fontWeight.medium,
32
- lineHeight: 1,
33
- userSelect: "none",
34
- verticalAlign: "middle"
35
- }), d = {
36
- sm: e({
37
- inlineSize: r.space[6],
38
- blockSize: r.space[6],
39
- fontSize: r.textSize.xs
40
- }),
41
- md: e({
42
- inlineSize: r.space[8],
43
- blockSize: r.space[8],
44
- fontSize: r.textSize.sm
45
- }),
46
- lg: e({
47
- inlineSize: r.space[10],
48
- blockSize: r.space[10],
49
- fontSize: r.textSize.md
50
- })
51
- }, f = e({
52
- display: "block",
53
- inlineSize: "100%",
54
- blockSize: "100%",
55
- borderRadius: r.radius.full,
56
- objectFit: "cover"
57
- }), p = e({
58
- position: "absolute",
59
- insetBlockEnd: 0,
60
- insetInlineEnd: 0,
61
- inlineSize: "25%",
62
- blockSize: "25%",
63
- "&::before": {
64
- content: "\"\"",
65
- position: "absolute",
66
- insetBlockStart: 0,
67
- insetInlineStart: 0,
68
- inlineSize: "100%",
69
- blockSize: "100%",
70
- boxSizing: "border-box",
71
- borderRadius: r.radius.full,
72
- boxShadow: `0 0 0 2px ${r.color.bg}`
73
- }
74
- }), m = {
75
- online: e({ "&::before": { backgroundColor: r.color.success } }),
76
- away: e({ "&::before": {
77
- border: `2px solid ${r.color.warning}`,
78
- backgroundColor: "transparent"
79
- } }),
80
- busy: e({ "&::before": {
81
- backgroundColor: r.color.danger,
82
- blockSize: "30%",
83
- insetBlockStart: "35%"
84
- } }),
85
- offline: e({ "&::before": {
86
- backgroundColor: r.color.textSubtle,
87
- inlineSize: "60%",
88
- blockSize: "60%",
89
- insetBlockStart: "20%",
90
- insetInlineStart: "20%"
91
- } })
92
- };
93
- function h({ ref: e, name: r, src: o, size: s = "md", status: c, statusLabel: h, slotProps: g, className: _, sx: v, ...y }) {
94
- let [b, x] = n(), S = o !== void 0 && o !== "" && o !== b, C = c === void 0 ? r : `${r}, ${h ?? c}`;
95
- return /* @__PURE__ */ i(t, {
96
- className: _,
97
- styles: [u, d[s]],
98
- sx: v,
99
- children: (t) => /* @__PURE__ */ a("span", {
100
- ...y,
101
- ref: e,
102
- "data-ui": "avatar",
103
- role: "img",
104
- "aria-label": C,
105
- className: t,
106
- children: [S ? /* @__PURE__ */ i("img", {
107
- src: o,
108
- alt: "",
109
- onError: () => x(o),
110
- className: g?.image?.className,
111
- css: [f, g?.image?.css]
112
- }) : /* @__PURE__ */ i("span", {
113
- "aria-hidden": "true",
114
- className: g?.fallback?.className,
115
- css: g?.fallback?.css,
116
- children: l(r)
117
- }), c !== void 0 && /* @__PURE__ */ i("span", {
118
- "aria-hidden": "true",
119
- "data-status": c,
120
- className: g?.status?.className,
121
- css: [
122
- p,
123
- m[c],
124
- g?.status?.css
125
- ]
126
- })]
127
- })
128
- });
129
- }
130
- h.displayName = "Avatar";
131
- //#endregion
132
- export { h as t };