@jfrader/ui 0.1.1 → 0.2.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 (167) hide show
  1. package/README.md +3 -1
  2. package/dist/accordion-CkOZ-tvs.js +178 -0
  3. package/dist/accordion.js +2 -1
  4. package/dist/alert-Dsjx14UW.js +131 -0
  5. package/dist/alert.js +2 -1
  6. package/dist/avatar-BRGKkoSr.js +127 -0
  7. package/dist/avatar.js +2 -1
  8. package/dist/badge-DLxUMsCx.js +104 -0
  9. package/dist/badge.js +2 -1
  10. package/dist/breadcrumbs-694hF_hm.js +131 -0
  11. package/dist/breadcrumbs.js +2 -1
  12. package/dist/button-CoaIcykB.js +190 -0
  13. package/dist/button.js +2 -1
  14. package/dist/calendar-Doj7PTdG.js +379 -0
  15. package/dist/calendar.js +2 -1
  16. package/dist/card-2IM71XZj.js +134 -0
  17. package/dist/card.js +2 -1
  18. package/dist/checkbox-B7xGNFzp.js +136 -0
  19. package/dist/checkbox.js +2 -1
  20. package/dist/{choice-control-DCyQ_hVw.js → choice-control-ByFogYcT.js} +2 -1
  21. package/dist/{collection-registry-C2jnQa7X.js → collection-registry-1l9f3XJZ.js} +3 -2
  22. package/dist/combobox-Bjhxv5U3.js +311 -0
  23. package/dist/combobox.js +2 -1
  24. package/dist/command-palette-BhJwm6cS.js +344 -0
  25. package/dist/command-palette.js +2 -1
  26. package/dist/container-BhnrGPu-.js +36 -0
  27. package/dist/container.js +2 -1
  28. package/dist/{css-CW_HG55W.js → css-Cgj6sCHn.js} +1 -0
  29. package/dist/date-picker-Jk8SpoiO.js +245 -0
  30. package/dist/date-picker.js +2 -1
  31. package/dist/dialog-fhS07G41.js +187 -0
  32. package/dist/dialog.js +2 -1
  33. package/dist/{disclosure-caret-BC6P8AsM.js → disclosure-caret-C5T3fcl6.js} +1 -0
  34. package/dist/divider-v_78HYF5.js +79 -0
  35. package/dist/divider.js +2 -1
  36. package/dist/{field-anatomy-DKkB268x.js → field-anatomy-BzGw1Ch9.js} +4 -3
  37. package/dist/flex-COZzFqI8.js +22 -0
  38. package/dist/flex.js +2 -1
  39. package/dist/{focus-ring-qOS3rPlM.js → focus-ring-BK5W5_NY.js} +1 -0
  40. package/dist/{icon-wrapper-BKo4FI-O.js → icon-wrapper-CFWzew5m.js} +2 -1
  41. package/dist/index.js +37 -36
  42. package/dist/kbd-CeP8Kfvp.js +61 -0
  43. package/dist/kbd.js +2 -1
  44. package/dist/{layout-style-B_6YHQ6Q.js → layout-style-7ZTOiWGR.js} +2 -1
  45. package/dist/{loading-ring-CTpT-IrT.js → loading-ring-BpdB0aFi.js} +2 -1
  46. package/dist/{media-8K3xDAxM.js → media-D_eA_I-e.js} +1 -0
  47. package/dist/menu-B6KCbLCr.js +196 -0
  48. package/dist/menu.js +2 -1
  49. package/dist/navigation-BDht6S2-.js +182 -0
  50. package/dist/navigation.js +2 -1
  51. package/dist/pagination-B50PCaDU.js +151 -0
  52. package/dist/pagination.js +2 -1
  53. package/dist/{part-id-Bg1LSlk7.js → part-id-D0zksy32.js} +1 -0
  54. package/dist/pill-2_XzBdkD.js +51 -0
  55. package/dist/pill.js +2 -1
  56. package/dist/popover-DRHbeIVq.js +103 -0
  57. package/dist/popover.js +2 -1
  58. package/dist/progress-CpsskKTD.js +85 -0
  59. package/dist/progress.js +2 -1
  60. package/dist/radio-group-DPI5KUCj.js +136 -0
  61. package/dist/radio-group.js +2 -1
  62. package/dist/{renderable-DwPvt1I8.js → renderable-DzcIj1Lo.js} +1 -0
  63. package/dist/{roving-focus-DeEZ55-T.js → roving-focus-CYlo_Kf8.js} +1 -0
  64. package/dist/select-C1xGrOhT.js +266 -0
  65. package/dist/select.js +2 -1
  66. package/dist/skeleton-DitdP-yz.js +49 -0
  67. package/dist/skeleton.js +2 -1
  68. package/dist/spinner-CFq5HPoo.js +51 -0
  69. package/dist/spinner.js +2 -1
  70. package/dist/stack-D_g6NJzo.js +21 -0
  71. package/dist/stack.js +2 -1
  72. package/dist/{surface-Bo_aSQOb.js → surface-DZ4d-2aL.js} +1 -0
  73. package/dist/switch-B5TTU-oJ.js +138 -0
  74. package/dist/switch.js +2 -1
  75. package/dist/tabs-C26PWl2c.js +183 -0
  76. package/dist/tabs.js +2 -1
  77. package/dist/text-field-8PQAqRpM.js +75 -0
  78. package/dist/text-field.js +2 -1
  79. package/dist/textarea-CcGWuntL.js +85 -0
  80. package/dist/textarea.js +2 -1
  81. package/dist/theme-root-BRLIA4eb.js +22 -0
  82. package/dist/theme-root.js +2 -1
  83. package/dist/toast-B1PXuwZ4.js +277 -0
  84. package/dist/toast.js +2 -1
  85. package/dist/toggle-group-N_owicT0.js +156 -0
  86. package/dist/toggle-group.js +2 -1
  87. package/dist/tooltip-BJPisf60.js +98 -0
  88. package/dist/tooltip.js +2 -1
  89. package/dist/{trigger-style-f54idgjT.js → trigger-style-B1GFmH7M.js} +2 -1
  90. package/dist/types/components/accordion/accordion.d.ts +13 -9
  91. package/dist/types/components/alert/alert.d.ts +6 -3
  92. package/dist/types/components/avatar/avatar.d.ts +6 -3
  93. package/dist/types/components/badge/badge.d.ts +6 -3
  94. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +8 -5
  95. package/dist/types/components/button/button.d.ts +6 -3
  96. package/dist/types/components/calendar/calendar.d.ts +11 -7
  97. package/dist/types/components/card/card.d.ts +20 -13
  98. package/dist/types/components/checkbox/checkbox.d.ts +6 -3
  99. package/dist/types/components/combobox/combobox.d.ts +12 -8
  100. package/dist/types/components/command-palette/command-palette.d.ts +22 -15
  101. package/dist/types/components/container/container.d.ts +6 -3
  102. package/dist/types/components/date-picker/date-picker.d.ts +6 -4
  103. package/dist/types/components/dialog/dialog.d.ts +16 -11
  104. package/dist/types/components/divider/divider.d.ts +6 -3
  105. package/dist/types/components/flex/flex.d.ts +6 -3
  106. package/dist/types/components/kbd/kbd.d.ts +8 -5
  107. package/dist/types/components/menu/menu.d.ts +13 -9
  108. package/dist/types/components/navigation/navigation.d.ts +11 -7
  109. package/dist/types/components/pagination/pagination.d.ts +6 -3
  110. package/dist/types/components/pill/pill.d.ts +6 -3
  111. package/dist/types/components/popover/popover.d.ts +7 -5
  112. package/dist/types/components/progress/progress.d.ts +6 -3
  113. package/dist/types/components/radio-group/radio-group.d.ts +8 -5
  114. package/dist/types/components/select/select.d.ts +13 -9
  115. package/dist/types/components/skeleton/skeleton.d.ts +6 -3
  116. package/dist/types/components/spinner/spinner.d.ts +6 -3
  117. package/dist/types/components/stack/stack.d.ts +4 -1
  118. package/dist/types/components/switch/switch.d.ts +6 -3
  119. package/dist/types/components/tabs/tabs.d.ts +14 -9
  120. package/dist/types/components/text-field/text-field.d.ts +6 -3
  121. package/dist/types/components/textarea/textarea.d.ts +6 -3
  122. package/dist/types/components/theme-root/theme-root.d.ts +6 -3
  123. package/dist/types/components/toast/toast.d.ts +6 -4
  124. package/dist/types/components/toggle-group/toggle-group.d.ts +7 -5
  125. package/dist/types/components/tooltip/tooltip.d.ts +7 -5
  126. package/dist/types/overlay/use-native-dialog.d.ts +2 -2
  127. package/dist/{use-controlled-state-DQXkiTQI.js → use-controlled-state-CVXDa-qM.js} +1 -0
  128. package/dist/{use-native-dialog-BCp1chwO.js → use-native-dialog-DWpIUVO1.js} +1 -0
  129. package/dist/{use-overlay-floating-CsZd3qxa.js → use-overlay-floating-efeqppiw.js} +1 -0
  130. package/dist/{visually-hidden-BXVyhj0y.js → visually-hidden-DCWhf0Cb.js} +2 -1
  131. package/package.json +4 -4
  132. package/dist/accordion-Dl-kvgPQ.js +0 -168
  133. package/dist/alert-BzntPa_5.js +0 -129
  134. package/dist/avatar-Dk2ES3ru.js +0 -124
  135. package/dist/badge-DZefC7rm.js +0 -102
  136. package/dist/breadcrumbs-5MCZ_Jr3.js +0 -125
  137. package/dist/button-qy-50NPd.js +0 -187
  138. package/dist/calendar-DcCAiN3b.js +0 -372
  139. package/dist/card-L-Z_1vZN.js +0 -120
  140. package/dist/checkbox-B7em7B-6.js +0 -134
  141. package/dist/combobox-DQcXR94r.js +0 -301
  142. package/dist/command-palette-BRJ8A5De.js +0 -328
  143. package/dist/container-COHiEjI8.js +0 -34
  144. package/dist/date-picker-D1GwiRB9.js +0 -239
  145. package/dist/dialog-CYf9fCZO.js +0 -175
  146. package/dist/divider-bi7OgCI5.js +0 -76
  147. package/dist/flex-CDFDDaiu.js +0 -21
  148. package/dist/kbd-DpiJgDJ2.js +0 -55
  149. package/dist/menu-A9fZUaAG.js +0 -186
  150. package/dist/navigation-Cemnmc_J.js +0 -174
  151. package/dist/pagination-orCjUsn_.js +0 -148
  152. package/dist/pill-Dg2JJHHW.js +0 -49
  153. package/dist/popover-D_YU34WS.js +0 -97
  154. package/dist/progress-XdvBG0Vv.js +0 -83
  155. package/dist/radio-group-CxMJ2Vq7.js +0 -130
  156. package/dist/select-mwFbmzsn.js +0 -256
  157. package/dist/skeleton-qas9ZKK9.js +0 -47
  158. package/dist/spinner-ros2CfIf.js +0 -49
  159. package/dist/stack-Hs8THnIL.js +0 -20
  160. package/dist/switch-E375Bz4X.js +0 -135
  161. package/dist/tabs-CBwRiuul.js +0 -173
  162. package/dist/text-field-BlP8qGn_.js +0 -73
  163. package/dist/textarea-CUG26CH2.js +0 -83
  164. package/dist/theme-root-CrdzwfSo.js +0 -20
  165. package/dist/toast-D_dnqnn-.js +0 -270
  166. package/dist/toggle-group-B7gXCea8.js +0 -150
  167. package/dist/tooltip-BJ2hLV1b.js +0 -92
package/README.md CHANGED
@@ -58,7 +58,9 @@ import { Dialog } from '@jfrader/ui/dialog';
58
58
  import { ThemeRoot } from '@jfrader/ui/theme-root';
59
59
  ```
60
60
 
61
- `react` and `react-dom` (`>=18.2`) are peer dependencies.
61
+ `react` and `react-dom` (`^19.0.0`) are peer dependencies.
62
+
63
+ Next.js App Router: see [Next.js App Router](https://github.com/jfrader/jfrader-ui/blob/master/docs/consuming-jfrader-ui.md#nextjs-app-router) for the required Emotion registry.
62
64
 
63
65
  ## Theming
64
66
 
@@ -0,0 +1,178 @@
1
+ 'use client';
2
+ import { t as e } from "./css-Cgj6sCHn.js";
3
+ import { t } from "./disclosure-caret-C5T3fcl6.js";
4
+ import { t as n } from "./focus-ring-BK5W5_NY.js";
5
+ import { n as r } from "./media-D_eA_I-e.js";
6
+ import { n as i } from "./roving-focus-CYlo_Kf8.js";
7
+ import { t as a } from "./use-controlled-state-CVXDa-qM.js";
8
+ import { createContext as o, useContext as s, useId as c, useMemo as l } from "react";
9
+ import { vars as u } from "@jfrader/tokens/vars";
10
+ import { jsx as d } from "@emotion/react/jsx-runtime";
11
+ //#region src/components/accordion/accordion.tsx
12
+ var f = o(null), p = o(null);
13
+ function m(e) {
14
+ let t = s(f);
15
+ if (!t) throw Error(`Accordion.${e} must be rendered inside <Accordion>.`);
16
+ return t;
17
+ }
18
+ function h(e) {
19
+ let t = s(p);
20
+ if (!t) throw Error(`Accordion.${e} must be rendered inside <Accordion.Item>.`);
21
+ return t;
22
+ }
23
+ var g = "", _ = {
24
+ itemSelector: "[data-ui=\"accordion-trigger\"]:not([disabled])",
25
+ ownerSelector: "[data-ui=\"accordion\"]"
26
+ }, v = (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 === g ? [] : [n];
30
+ }, y = e({
31
+ borderBlockEnd: `1px solid ${u.color.border}`,
32
+ "&:first-of-type": { borderBlockStart: `1px solid ${u.color.border}` }
33
+ }), b = e({
34
+ margin: 0,
35
+ font: "inherit"
36
+ }), x = e({
37
+ appearance: "none",
38
+ display: "flex",
39
+ alignItems: "center",
40
+ justifyContent: "space-between",
41
+ gap: u.space[3],
42
+ inlineSize: "100%",
43
+ border: 0,
44
+ background: "transparent",
45
+ cursor: "pointer",
46
+ paddingBlock: u.space[3],
47
+ paddingInline: u.space[4],
48
+ font: "inherit",
49
+ fontSize: u.textSize.sm,
50
+ fontWeight: u.fontWeight.medium,
51
+ color: u.color.text,
52
+ textAlign: "start",
53
+ transitionProperty: "background-color",
54
+ transitionDuration: u.motion.duration.fast,
55
+ transitionTimingFunction: u.motion.easeStandard,
56
+ "&::after": { ...t },
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: u.color.surfaceHover },
60
+ "&[aria-disabled=\"true\"]": { cursor: "default" },
61
+ "&:disabled": {
62
+ opacity: .55,
63
+ cursor: "not-allowed"
64
+ },
65
+ "&:focus-visible": { ...n },
66
+ [r]: {
67
+ transitionDuration: "0s",
68
+ "&::after": { transitionDuration: "0s" }
69
+ }
70
+ }), S = e({
71
+ paddingBlock: u.space[3],
72
+ paddingInline: u.space[4],
73
+ color: u.color.textMuted,
74
+ lineHeight: u.lineHeight.relaxed,
75
+ "&[hidden]": { display: "none" }
76
+ });
77
+ function C({ ref: e, value: t, defaultValue: n, onValueChange: r, type: o = "single", collapsible: s = !0, onKeyDown: c, ...u }) {
78
+ let [p, m] = a(t, n, r), h = l(() => {
79
+ let e = v(p, o), t = s || e.length > 1;
80
+ return {
81
+ openValues: e,
82
+ toggle: (n) => {
83
+ let r = e.includes(n);
84
+ (!r || t) && m(o === "multiple" ? r ? e.filter((e) => e !== n) : [...e, n] : r ? g : n);
85
+ },
86
+ canCollapse: t
87
+ };
88
+ }, [
89
+ p,
90
+ m,
91
+ o,
92
+ s
93
+ ]), y = (e) => {
94
+ c?.(e), !e.defaultPrevented && i(e, e.currentTarget, "vertical", _);
95
+ };
96
+ return /* @__PURE__ */ d(f.Provider, {
97
+ value: h,
98
+ children: /* @__PURE__ */ d("div", {
99
+ ...u,
100
+ ref: e,
101
+ "data-ui": "accordion",
102
+ onKeyDown: y
103
+ })
104
+ });
105
+ }
106
+ C.displayName = "Accordion";
107
+ function w({ ref: e, value: t, disabled: n = !1, ...r }) {
108
+ let { openValues: i } = m("Item"), a = c(), o = i.includes(t), s = l(() => ({
109
+ value: t,
110
+ disabled: n,
111
+ expanded: o,
112
+ triggerId: `${a}-trigger`,
113
+ panelId: `${a}-panel`
114
+ }), [
115
+ t,
116
+ n,
117
+ o,
118
+ a
119
+ ]);
120
+ return /* @__PURE__ */ d(p.Provider, {
121
+ value: s,
122
+ children: /* @__PURE__ */ d("div", {
123
+ ...r,
124
+ ref: e,
125
+ "data-ui": "accordion-item",
126
+ "data-state": o ? "open" : "closed",
127
+ "data-disabled": n ? "" : void 0,
128
+ css: y
129
+ })
130
+ });
131
+ }
132
+ w.displayName = "Accordion.Item";
133
+ function T({ ref: e, onClick: t, disabled: n, ...r }) {
134
+ let { toggle: i, canCollapse: a } = m("Trigger"), { value: o, disabled: s, expanded: c, triggerId: l, panelId: u } = h("Trigger"), f = c && !a, p = (e) => {
135
+ t?.(e), !e.defaultPrevented && i(o);
136
+ };
137
+ return /* @__PURE__ */ d("h3", {
138
+ "data-ui": "accordion-heading",
139
+ css: b,
140
+ children: /* @__PURE__ */ d("button", {
141
+ ...r,
142
+ ref: e,
143
+ type: "button",
144
+ id: l,
145
+ "data-ui": "accordion-trigger",
146
+ "data-state": c ? "open" : "closed",
147
+ "aria-expanded": c,
148
+ "aria-controls": u,
149
+ "aria-disabled": f || void 0,
150
+ disabled: s || n,
151
+ onClick: p,
152
+ css: x
153
+ })
154
+ });
155
+ }
156
+ T.displayName = "Accordion.Trigger";
157
+ function E({ ref: e, "aria-labelledby": t, ...n }) {
158
+ let { expanded: r, triggerId: i, panelId: a } = h("Panel"), o = [t, i].filter(Boolean).join(" ");
159
+ return /* @__PURE__ */ d("div", {
160
+ ...n,
161
+ ref: e,
162
+ role: "region",
163
+ id: a,
164
+ "aria-labelledby": o,
165
+ hidden: !r,
166
+ "data-ui": "accordion-panel",
167
+ "data-state": r ? "open" : "closed",
168
+ css: S
169
+ });
170
+ }
171
+ E.displayName = "Accordion.Panel";
172
+ var D = Object.assign(C, {
173
+ Item: w,
174
+ Trigger: T,
175
+ Panel: E
176
+ });
177
+ //#endregion
178
+ export { D as t };
package/dist/accordion.js CHANGED
@@ -1 +1,2 @@
1
- export { t as Accordion } from "./accordion-Dl-kvgPQ.js";
1
+ 'use client';
2
+ export { t as Accordion } from "./accordion-CkOZ-tvs.js";
@@ -0,0 +1,131 @@
1
+ 'use client';
2
+ import { t as e } from "./css-Cgj6sCHn.js";
3
+ import { n as t } from "./focus-ring-BK5W5_NY.js";
4
+ import { n } from "./media-D_eA_I-e.js";
5
+ import { t as r } from "./visually-hidden-DCWhf0Cb.js";
6
+ import { t as i } from "./renderable-DzcIj1Lo.js";
7
+ import { vars as a } from "@jfrader/tokens/vars";
8
+ import { jsx as o, jsxs as s } from "@emotion/react/jsx-runtime";
9
+ //#region src/components/alert/alert.tsx
10
+ var c = {
11
+ info: "Information",
12
+ success: "Success",
13
+ warning: "Warning",
14
+ danger: "Error"
15
+ }, l = e({
16
+ display: "grid",
17
+ gap: a.space[1],
18
+ boxSizing: "border-box",
19
+ backgroundColor: a.color.surfaceRaised,
20
+ border: `1px solid ${a.color.border}`,
21
+ borderInlineStartWidth: "3px",
22
+ borderInlineStartStyle: "solid",
23
+ borderRadius: a.radius.md,
24
+ paddingBlock: a.space[3],
25
+ paddingInline: a.space[4],
26
+ fontFamily: a.font.sans,
27
+ lineHeight: a.lineHeight.base
28
+ }), u = e({
29
+ gridTemplateColumns: "minmax(0, 1fr) auto",
30
+ columnGap: a.space[3]
31
+ }), d = e({
32
+ display: "grid",
33
+ gap: a.space[1],
34
+ minInlineSize: 0,
35
+ gridColumn: 1,
36
+ gridRow: 1
37
+ }), f = {
38
+ info: e({ borderInlineStartColor: a.color.info }),
39
+ success: e({ borderInlineStartColor: a.color.success }),
40
+ warning: e({ borderInlineStartColor: a.color.warning }),
41
+ danger: e({ borderInlineStartColor: a.color.dangerText })
42
+ }, p = e({
43
+ gridColumn: 1,
44
+ fontSize: a.textSize.sm,
45
+ fontWeight: a.fontWeight.semibold,
46
+ color: a.color.text
47
+ }), m = e({
48
+ gridColumn: 1,
49
+ fontSize: a.textSize.sm,
50
+ color: a.color.textMuted
51
+ }), h = e({
52
+ gridColumn: 2,
53
+ gridRow: 1,
54
+ alignSelf: "start",
55
+ appearance: "none",
56
+ display: "inline-flex",
57
+ alignItems: "center",
58
+ justifyContent: "center",
59
+ minInlineSize: "24px",
60
+ minBlockSize: "24px",
61
+ margin: 0,
62
+ padding: 0,
63
+ border: "1px solid transparent",
64
+ borderRadius: a.radius.sm,
65
+ backgroundColor: "transparent",
66
+ fontFamily: "inherit",
67
+ fontSize: a.textSize.md,
68
+ lineHeight: 1,
69
+ color: a.color.textMuted,
70
+ cursor: "pointer",
71
+ transitionProperty: "background-color, color",
72
+ transitionDuration: a.motion.duration.fast,
73
+ transitionTimingFunction: a.motion.easeStandard,
74
+ "&:hover": {
75
+ backgroundColor: a.color.surfaceHover,
76
+ color: a.color.text
77
+ },
78
+ "&:focus-visible": { ...t },
79
+ [n]: { transitionDuration: "0s" }
80
+ });
81
+ function g({ ref: e, tone: t = "info", toneLabel: n = c[t], title: a, children: g, onDismiss: _, dismissLabel: v = "Dismiss", slotProps: y, className: b, ...x }) {
82
+ let S = _ !== void 0;
83
+ return /* @__PURE__ */ s("div", {
84
+ ...x,
85
+ ref: e,
86
+ "data-ui": "alert",
87
+ "data-tone": t,
88
+ className: [b, y?.root?.className].filter(Boolean).join(" ") || void 0,
89
+ css: [
90
+ l,
91
+ f[t],
92
+ S && u,
93
+ y?.root?.css
94
+ ],
95
+ children: [/* @__PURE__ */ s("div", {
96
+ role: t === "danger" ? "alert" : "status",
97
+ "aria-atomic": "true",
98
+ css: d,
99
+ children: [
100
+ /* @__PURE__ */ o("span", {
101
+ css: r,
102
+ children: n
103
+ }),
104
+ i(a) && /* @__PURE__ */ o("div", {
105
+ className: y?.title?.className,
106
+ css: [p, y?.title?.css],
107
+ children: a
108
+ }),
109
+ i(g) && /* @__PURE__ */ o("div", {
110
+ className: y?.body?.className,
111
+ css: [m, y?.body?.css],
112
+ children: g
113
+ })
114
+ ]
115
+ }), S && /* @__PURE__ */ o("button", {
116
+ type: "button",
117
+ "data-ui": "alert-dismiss",
118
+ "aria-label": v,
119
+ onClick: () => _?.(),
120
+ className: y?.dismiss?.className,
121
+ css: [h, y?.dismiss?.css],
122
+ children: /* @__PURE__ */ o("span", {
123
+ "aria-hidden": !0,
124
+ children: "×"
125
+ })
126
+ })]
127
+ });
128
+ }
129
+ g.displayName = "Alert";
130
+ //#endregion
131
+ export { g as t };
package/dist/alert.js CHANGED
@@ -1 +1,2 @@
1
- export { t as Alert } from "./alert-BzntPa_5.js";
1
+ 'use client';
2
+ export { t as Alert } from "./alert-Dsjx14UW.js";
@@ -0,0 +1,127 @@
1
+ 'use client';
2
+ import { t as e } from "./css-Cgj6sCHn.js";
3
+ import { useState as t } from "react";
4
+ import { vars as n } from "@jfrader/tokens/vars";
5
+ import { jsx as r, jsxs as i } from "@emotion/react/jsx-runtime";
6
+ //#region src/components/avatar/avatar.tsx
7
+ var a = 2, o = new Intl.Segmenter(void 0, { granularity: "grapheme" });
8
+ function s(e) {
9
+ let t = Array.from(o.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 c(e) {
19
+ return e.trim().split(/\s+/).filter(Boolean).slice(0, a).map(s).join("").toLocaleUpperCase();
20
+ }
21
+ var l = e({
22
+ position: "relative",
23
+ display: "inline-flex",
24
+ alignItems: "center",
25
+ justifyContent: "center",
26
+ flexShrink: 0,
27
+ boxSizing: "border-box",
28
+ borderRadius: n.radius.full,
29
+ backgroundColor: n.color.surfaceHover,
30
+ color: n.color.text,
31
+ fontWeight: n.fontWeight.medium,
32
+ lineHeight: 1,
33
+ userSelect: "none",
34
+ verticalAlign: "middle"
35
+ }), u = {
36
+ sm: e({
37
+ inlineSize: n.space[6],
38
+ blockSize: n.space[6],
39
+ fontSize: n.textSize.xs
40
+ }),
41
+ md: e({
42
+ inlineSize: n.space[8],
43
+ blockSize: n.space[8],
44
+ fontSize: n.textSize.sm
45
+ }),
46
+ lg: e({
47
+ inlineSize: n.space[10],
48
+ blockSize: n.space[10],
49
+ fontSize: n.textSize.md
50
+ })
51
+ }, d = e({
52
+ display: "block",
53
+ inlineSize: "100%",
54
+ blockSize: "100%",
55
+ borderRadius: n.radius.full,
56
+ objectFit: "cover"
57
+ }), f = 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: n.radius.full,
72
+ boxShadow: `0 0 0 2px ${n.color.bg}`
73
+ }
74
+ }), p = {
75
+ online: e({ "&::before": { backgroundColor: n.color.success } }),
76
+ away: e({ "&::before": {
77
+ border: `2px solid ${n.color.warning}`,
78
+ backgroundColor: "transparent"
79
+ } }),
80
+ busy: e({ "&::before": {
81
+ backgroundColor: n.color.danger,
82
+ blockSize: "30%",
83
+ insetBlockStart: "35%"
84
+ } }),
85
+ offline: e({ "&::before": {
86
+ backgroundColor: n.color.textSubtle,
87
+ inlineSize: "60%",
88
+ blockSize: "60%",
89
+ insetBlockStart: "20%",
90
+ insetInlineStart: "20%"
91
+ } })
92
+ };
93
+ function m({ ref: e, name: n, src: a, size: o = "md", status: s, statusLabel: m, slotProps: h, ...g }) {
94
+ let [_, v] = t(), y = a !== void 0 && a !== "" && a !== _, b = s === void 0 ? n : `${n}, ${m ?? s}`;
95
+ return /* @__PURE__ */ i("span", {
96
+ ...g,
97
+ ref: e,
98
+ "data-ui": "avatar",
99
+ role: "img",
100
+ "aria-label": b,
101
+ css: [l, u[o]],
102
+ children: [y ? /* @__PURE__ */ r("img", {
103
+ src: a,
104
+ alt: "",
105
+ onError: () => v(a),
106
+ className: h?.image?.className,
107
+ css: [d, h?.image?.css]
108
+ }) : /* @__PURE__ */ r("span", {
109
+ "aria-hidden": "true",
110
+ className: h?.fallback?.className,
111
+ css: h?.fallback?.css,
112
+ children: c(n)
113
+ }), s !== void 0 && /* @__PURE__ */ r("span", {
114
+ "aria-hidden": "true",
115
+ "data-status": s,
116
+ className: h?.status?.className,
117
+ css: [
118
+ f,
119
+ p[s],
120
+ h?.status?.css
121
+ ]
122
+ })]
123
+ });
124
+ }
125
+ m.displayName = "Avatar";
126
+ //#endregion
127
+ export { m as t };
package/dist/avatar.js CHANGED
@@ -1 +1,2 @@
1
- export { t as Avatar } from "./avatar-Dk2ES3ru.js";
1
+ 'use client';
2
+ export { t as Avatar } from "./avatar-BRGKkoSr.js";
@@ -0,0 +1,104 @@
1
+ 'use client';
2
+ import { t as e } from "./css-Cgj6sCHn.js";
3
+ import { vars as t } from "@jfrader/tokens/vars";
4
+ import { jsx as n, jsxs as r } from "@emotion/react/jsx-runtime";
5
+ //#region src/components/badge/badge.tsx
6
+ var i = 99, a = e({
7
+ position: "relative",
8
+ display: "inline-flex",
9
+ flexShrink: 0,
10
+ verticalAlign: "middle"
11
+ }), o = e({
12
+ position: "absolute",
13
+ display: "flex",
14
+ alignItems: "center",
15
+ justifyContent: "center",
16
+ boxSizing: "border-box",
17
+ boxShadow: `0 0 0 2px ${t.color.bg}`,
18
+ fontWeight: t.fontWeight.medium,
19
+ lineHeight: 1,
20
+ whiteSpace: "nowrap",
21
+ pointerEvents: "none"
22
+ }), s = {
23
+ standard: e({
24
+ blockSize: t.space[5],
25
+ minInlineSize: t.space[5],
26
+ paddingInline: t.space[1],
27
+ fontSize: t.textSize.xs
28
+ }),
29
+ dot: e({
30
+ blockSize: t.space[2],
31
+ inlineSize: t.space[2],
32
+ borderRadius: t.radius.full
33
+ })
34
+ }, c = {
35
+ rectangular: e({ borderRadius: t.radius.sm }),
36
+ circular: e({ borderRadius: t.radius.full })
37
+ }, l = {
38
+ "top-start": e({
39
+ insetBlockStart: 0,
40
+ insetInlineStart: 0,
41
+ transform: "translate(-50%, -50%)",
42
+ "&:dir(rtl)": { transform: "translate(50%, -50%)" }
43
+ }),
44
+ "top-end": e({
45
+ insetBlockStart: 0,
46
+ insetInlineEnd: 0,
47
+ transform: "translate(50%, -50%)",
48
+ "&:dir(rtl)": { transform: "translate(-50%, -50%)" }
49
+ }),
50
+ "bottom-start": e({
51
+ insetBlockEnd: 0,
52
+ insetInlineStart: 0,
53
+ transform: "translate(-50%, 50%)",
54
+ "&:dir(rtl)": { transform: "translate(50%, 50%)" }
55
+ }),
56
+ "bottom-end": e({
57
+ insetBlockEnd: 0,
58
+ insetInlineEnd: 0,
59
+ transform: "translate(50%, 50%)",
60
+ "&:dir(rtl)": { transform: "translate(-50%, 50%)" }
61
+ })
62
+ }, u = {
63
+ accent: e({
64
+ backgroundColor: t.color.accent,
65
+ color: t.color.accentContrast
66
+ }),
67
+ danger: e({
68
+ backgroundColor: t.color.danger,
69
+ color: t.color.dangerContrast
70
+ }),
71
+ neutral: e({
72
+ backgroundColor: t.color.textMuted,
73
+ color: t.color.bg
74
+ })
75
+ };
76
+ function d({ ref: e, children: t, badgeContent: d, max: f = i, showZero: p = !1, invisible: m = !1, variant: h = "standard", tone: g = "accent", anchor: _, overlap: v = "rectangular", slotProps: y, className: b, ...x }) {
77
+ let S = h === "dot", C = m || h !== "dot" && (d == null || d === !1 || d === 0 && !p), w = typeof d == "number" && d > f ? `${f}+` : d, T = `${_?.vertical ?? "top"}-${_?.horizontal ?? "end"}`, E = [b, y?.root?.className].filter(Boolean).join(" ") || void 0;
78
+ return /* @__PURE__ */ r("span", {
79
+ ...x,
80
+ ref: e,
81
+ "data-ui": "badge",
82
+ className: E,
83
+ css: [a, y?.root?.css],
84
+ children: [t, !C && /* @__PURE__ */ n("span", {
85
+ "data-ui": "badge-marker",
86
+ "data-variant": h,
87
+ "data-tone": g,
88
+ "aria-hidden": S ? "true" : void 0,
89
+ className: y?.badge?.className,
90
+ css: [
91
+ o,
92
+ s[h],
93
+ !S && c[v],
94
+ l[T],
95
+ u[g],
96
+ y?.badge?.css
97
+ ],
98
+ children: S ? null : w
99
+ })]
100
+ });
101
+ }
102
+ d.displayName = "Badge";
103
+ //#endregion
104
+ export { d as t };
package/dist/badge.js CHANGED
@@ -1 +1,2 @@
1
- export { t as Badge } from "./badge-DZefC7rm.js";
1
+ 'use client';
2
+ export { t as Badge } from "./badge-DLxUMsCx.js";
@@ -0,0 +1,131 @@
1
+ 'use client';
2
+ import { t as e } from "./css-Cgj6sCHn.js";
3
+ import { n as t } from "./focus-ring-BK5W5_NY.js";
4
+ import { n } from "./media-D_eA_I-e.js";
5
+ import { createContext as r, useCallback as i, useContext as a, useId as o, useImperativeHandle as s, useLayoutEffect as c, useMemo as l, useRef as u, useState as d } from "react";
6
+ import { vars as f } from "@jfrader/tokens/vars";
7
+ import { jsx as p, jsxs as m } from "@emotion/react/jsx-runtime";
8
+ //#region src/components/breadcrumbs/breadcrumbs.tsx
9
+ var h = r(null);
10
+ function g(e) {
11
+ let t = a(h);
12
+ if (!t) throw Error(`Breadcrumbs.${e} must be rendered inside <Breadcrumbs>.`);
13
+ return t;
14
+ }
15
+ var _ = ([, e], [, t]) => e.node.compareDocumentPosition(t.node) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1, v = e({
16
+ display: "flex",
17
+ flexWrap: "wrap",
18
+ alignItems: "center",
19
+ gap: f.space[2],
20
+ margin: 0,
21
+ padding: 0,
22
+ listStyle: "none",
23
+ fontFamily: f.font.sans,
24
+ fontSize: f.textSize.sm,
25
+ lineHeight: f.lineHeight.tight
26
+ }), y = e({
27
+ display: "inline-flex",
28
+ alignItems: "center",
29
+ gap: f.space[2],
30
+ color: f.color.textMuted,
31
+ "&:first-of-type > [data-ui=\"breadcrumbs-separator\"]": { display: "none" }
32
+ }), b = e({ display: "inline-flex" }), x = e({
33
+ display: "inline-flex",
34
+ alignItems: "center",
35
+ gap: f.space[1],
36
+ minBlockSize: "24px",
37
+ borderRadius: f.radius.sm,
38
+ color: "inherit",
39
+ "& svg": {
40
+ inlineSize: "1em",
41
+ blockSize: "1em",
42
+ flexShrink: 0
43
+ },
44
+ "&[aria-current=\"page\"]": {
45
+ color: f.color.text,
46
+ fontWeight: f.fontWeight.medium
47
+ }
48
+ }), S = e({
49
+ textDecoration: "underline",
50
+ textDecorationColor: "transparent",
51
+ textUnderlineOffset: "0.2em",
52
+ transitionProperty: "color, text-decoration-color",
53
+ transitionDuration: f.motion.duration.fast,
54
+ transitionTimingFunction: f.motion.easeStandard,
55
+ "&:hover": {
56
+ color: f.color.text,
57
+ textDecorationColor: "currentColor"
58
+ },
59
+ "&:focus-visible": { ...t },
60
+ [n]: { transitionDuration: "0s" }
61
+ });
62
+ function C({ ref: e, label: t = "Breadcrumb", separator: n = "/", children: r, ...a }) {
63
+ let o = u(/* @__PURE__ */ new Map()), [s, c] = d(null), f = u(null), m = i(() => {
64
+ let e = Array.from(o.current).sort(_), t = e.some(([, e]) => e.current === !0) ? null : e.at(-1)?.[0] ?? null;
65
+ f.current !== t && (f.current = t, c(t));
66
+ }, []), g = i((e, t) => {
67
+ o.current.set(e, t), m();
68
+ }, [m]), y = i((e) => {
69
+ o.current.delete(e), m();
70
+ }, [m]), b = l(() => ({
71
+ separator: n,
72
+ autoCurrentId: s,
73
+ register: g,
74
+ unregister: y
75
+ }), [
76
+ n,
77
+ s,
78
+ g,
79
+ y
80
+ ]);
81
+ return /* @__PURE__ */ p(h.Provider, {
82
+ value: b,
83
+ children: /* @__PURE__ */ p("nav", {
84
+ ...a,
85
+ ref: e,
86
+ "aria-label": t,
87
+ "data-ui": "breadcrumbs",
88
+ children: /* @__PURE__ */ p("ol", {
89
+ css: v,
90
+ children: r
91
+ })
92
+ })
93
+ });
94
+ }
95
+ C.displayName = "Breadcrumbs";
96
+ function w({ ref: e, href: t, current: n, children: r, ...i }) {
97
+ let { separator: a, autoCurrentId: l, register: d, unregister: f } = g("Item"), h = o(), _ = u(null);
98
+ s(e, () => _.current, []), c(() => {
99
+ let e = _.current;
100
+ e && d(h, {
101
+ node: e,
102
+ current: n
103
+ });
104
+ }), c(() => () => f(h), [h, f]);
105
+ let v = n ?? l === h ? "page" : void 0;
106
+ return /* @__PURE__ */ m("li", {
107
+ ...i,
108
+ ref: _,
109
+ "data-ui": "breadcrumbs-item",
110
+ css: y,
111
+ children: [/* @__PURE__ */ p("span", {
112
+ "aria-hidden": "true",
113
+ "data-ui": "breadcrumbs-separator",
114
+ css: b,
115
+ children: a
116
+ }), t === void 0 ? /* @__PURE__ */ p("span", {
117
+ "aria-current": v,
118
+ css: x,
119
+ children: r
120
+ }) : /* @__PURE__ */ p("a", {
121
+ href: t,
122
+ "aria-current": v,
123
+ css: [x, S],
124
+ children: r
125
+ })]
126
+ });
127
+ }
128
+ w.displayName = "Breadcrumbs.Item";
129
+ var T = Object.assign(C, { Item: w });
130
+ //#endregion
131
+ export { T as t };