@mattermost/compass-ui 0.1.0-alpha.4 → 0.1.0-alpha.5
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.
- package/dist/compass-ui-standalone.css +10 -0
- package/dist/compass-ui.css +2 -0
- package/dist/components/action-button/ActionButton.cjs +1 -1
- package/dist/components/action-button/ActionButton.cjs.map +1 -1
- package/dist/components/action-button/ActionButton.d.ts +2 -1
- package/dist/components/action-button/ActionButton.d.ts.map +1 -1
- package/dist/components/action-button/ActionButton.js +22 -12
- package/dist/components/action-button/ActionButton.js.map +1 -1
- package/dist/components/action-button/ActionButton.module.css +1 -1
- package/dist/components/action-button/ActionButton.module.scss.cjs +1 -1
- package/dist/components/action-button/ActionButton.module.scss.js +5 -5
- package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
- package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.d.ts +3 -1
- package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.js +92 -82
- package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.css +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
- package/dist/components/attachment-card/AttachmentCard.module.scss.js +19 -18
- package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
- package/dist/components/button/Button.module.css +1 -1
- package/dist/components/button/Button.module.scss.cjs +1 -1
- package/dist/components/button/Button.module.scss.js +15 -15
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +4 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +112 -92
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.css +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +22 -20
- package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
- package/dist/components/checkbox/Checkbox.cjs +1 -1
- package/dist/components/checkbox/Checkbox.cjs.map +1 -1
- package/dist/components/checkbox/Checkbox.d.ts +3 -3
- package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/Checkbox.js +21 -20
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox.module.css +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
- package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
- package/dist/components/chip/Chip.cjs +1 -1
- package/dist/components/chip/Chip.cjs.map +1 -1
- package/dist/components/chip/Chip.d.ts +3 -5
- package/dist/components/chip/Chip.d.ts.map +1 -1
- package/dist/components/chip/Chip.js +90 -48
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/chip/Chip.module.css +1 -1
- package/dist/components/chip/Chip.module.scss.cjs +1 -1
- package/dist/components/chip/Chip.module.scss.js +9 -9
- package/dist/components/chip/ChipGroup.cjs +2 -0
- package/dist/components/chip/ChipGroup.cjs.map +1 -0
- package/dist/components/chip/ChipGroup.d.ts +16 -0
- package/dist/components/chip/ChipGroup.d.ts.map +1 -0
- package/dist/components/chip/ChipGroup.js +112 -0
- package/dist/components/chip/ChipGroup.js.map +1 -0
- package/dist/components/chip/ChipGroup.module.css +1 -0
- package/dist/components/chip/ChipGroup.module.scss.cjs +2 -0
- package/dist/components/chip/ChipGroup.module.scss.cjs.map +1 -0
- package/dist/components/chip/ChipGroup.module.scss.js +7 -0
- package/dist/components/chip/ChipGroup.module.scss.js.map +1 -0
- package/dist/components/chip/index.cjs +1 -1
- package/dist/components/chip/index.d.ts +2 -0
- package/dist/components/chip/index.d.ts.map +1 -1
- package/dist/components/chip/index.js +4 -2
- package/dist/components/chip/index.js.map +1 -1
- package/dist/components/combobox/Combobox.cjs +1 -1
- package/dist/components/combobox/Combobox.cjs.map +1 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +115 -109
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/Combobox.module.css +1 -1
- package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
- package/dist/components/combobox/Combobox.module.scss.js +27 -29
- package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js +154 -154
- package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.css +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
- package/dist/components/date-range-picker/DateRangePicker.module.scss.js +28 -45
- package/dist/components/dropdown/Dropdown.cjs +1 -1
- package/dist/components/dropdown/Dropdown.cjs.map +1 -1
- package/dist/components/dropdown/Dropdown.js +1 -1
- package/dist/components/dropdown/Dropdown.js.map +1 -1
- package/dist/components/dropdown/Dropdown.module.css +1 -1
- package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
- package/dist/components/dropdown/Dropdown.module.scss.js +15 -16
- package/dist/components/global-banner/GlobalBanner.module.css +1 -1
- package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
- package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
- package/dist/components/icon-button/IconButton.cjs +1 -1
- package/dist/components/icon-button/IconButton.cjs.map +1 -1
- package/dist/components/icon-button/IconButton.d.ts +1 -1
- package/dist/components/icon-button/IconButton.d.ts.map +1 -1
- package/dist/components/icon-button/IconButton.js +14 -14
- package/dist/components/icon-button/IconButton.js.map +1 -1
- package/dist/components/icon-button/IconButton.module.css +1 -1
- package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
- package/dist/components/icon-button/IconButton.module.scss.js +15 -15
- package/dist/components/image-preview/ImagePreview.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
- package/dist/components/image-preview/ImagePreview.d.ts +2 -1
- package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
- package/dist/components/image-preview/ImagePreview.js +70 -52
- package/dist/components/image-preview/ImagePreview.js.map +1 -1
- package/dist/components/image-preview/ImagePreview.module.css +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
- package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
- package/dist/components/menu-item/MenuItem.cjs +1 -1
- package/dist/components/menu-item/MenuItem.cjs.map +1 -1
- package/dist/components/menu-item/MenuItem.js +11 -11
- package/dist/components/menu-item/MenuItem.js.map +1 -1
- package/dist/components/menu-item/MenuItem.module.css +1 -1
- package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
- package/dist/components/menu-item/MenuItem.module.scss.js +16 -16
- package/dist/components/message/Message.module.css +1 -1
- package/dist/components/message/Message.module.scss.cjs +1 -1
- package/dist/components/message/Message.module.scss.js +20 -20
- package/dist/components/message-reactions/MessageReactions.module.css +1 -1
- package/dist/components/message-reactions/MessageReactions.module.scss.cjs +1 -1
- package/dist/components/message-reactions/MessageReactions.module.scss.js +12 -12
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.css +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
- package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +5 -5
- package/dist/components/pagination-dots/PaginationDots.module.css +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
- package/dist/components/pagination-dots/PaginationDots.module.scss.js +8 -8
- package/dist/components/radio/Radio.cjs +1 -1
- package/dist/components/radio/Radio.cjs.map +1 -1
- package/dist/components/radio/Radio.d.ts +3 -3
- package/dist/components/radio/Radio.d.ts.map +1 -1
- package/dist/components/radio/Radio.js +11 -11
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/radio/Radio.module.css +1 -1
- package/dist/components/radio/Radio.module.scss.cjs +1 -1
- package/dist/components/radio/Radio.module.scss.js +11 -11
- package/dist/components/search-input/SearchInput.cjs +1 -1
- package/dist/components/search-input/SearchInput.cjs.map +1 -1
- package/dist/components/search-input/SearchInput.d.ts +2 -0
- package/dist/components/search-input/SearchInput.d.ts.map +1 -1
- package/dist/components/search-input/SearchInput.js +78 -64
- package/dist/components/search-input/SearchInput.js.map +1 -1
- package/dist/components/search-input/SearchInput.module.css +1 -1
- package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
- package/dist/components/search-input/SearchInput.module.scss.js +16 -23
- package/dist/components/search-input/SearchInput.module.scss.js.map +1 -1
- package/dist/components/select/Select.cjs +1 -1
- package/dist/components/select/Select.cjs.map +1 -1
- package/dist/components/select/Select.d.ts.map +1 -1
- package/dist/components/select/Select.js +64 -64
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/select/Select.module.css +1 -1
- package/dist/components/select/Select.module.scss.cjs +1 -1
- package/dist/components/select/Select.module.scss.js +24 -26
- package/dist/components/switch/Switch.cjs +1 -1
- package/dist/components/switch/Switch.cjs.map +1 -1
- package/dist/components/switch/Switch.d.ts.map +1 -1
- package/dist/components/switch/Switch.js +2 -2
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/switch/Switch.module.css +1 -1
- package/dist/components/switch/Switch.module.scss.cjs +1 -1
- package/dist/components/switch/Switch.module.scss.js +15 -15
- package/dist/components/tabs/Tabs.cjs +1 -1
- package/dist/components/tabs/Tabs.cjs.map +1 -1
- package/dist/components/tabs/Tabs.d.ts +4 -0
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +47 -31
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/tabs/Tabs.module.css +1 -1
- package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
- package/dist/components/tabs/Tabs.module.scss.js +8 -7
- package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
- package/dist/components/tag/Tag.module.css +1 -1
- package/dist/components/tag/Tag.module.scss.cjs +1 -1
- package/dist/components/tag/Tag.module.scss.js +15 -15
- package/dist/components/text-area/TextArea.cjs +1 -1
- package/dist/components/text-area/TextArea.cjs.map +1 -1
- package/dist/components/text-area/TextArea.d.ts.map +1 -1
- package/dist/components/text-area/TextArea.js +57 -56
- package/dist/components/text-area/TextArea.js.map +1 -1
- package/dist/components/text-area/TextArea.module.css +1 -1
- package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
- package/dist/components/text-area/TextArea.module.scss.js +12 -17
- package/dist/components/text-input/TextInput.cjs +1 -1
- package/dist/components/text-input/TextInput.cjs.map +1 -1
- package/dist/components/text-input/TextInput.d.ts.map +1 -1
- package/dist/components/text-input/TextInput.js +59 -58
- package/dist/components/text-input/TextInput.js.map +1 -1
- package/dist/components/text-input/TextInput.module.css +1 -1
- package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
- package/dist/components/text-input/TextInput.module.scss.js +16 -24
- package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
- package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.d.ts +7 -8
- package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.js +59 -62
- package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.css +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
- package/dist/components/thread-footer/ThreadFooter.module.scss.js +17 -17
- package/dist/components/thread-footer/index.d.ts +7 -1
- package/dist/components/thread-footer/index.d.ts.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
- package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.d.ts +1 -1
- package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.js +102 -87
- package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.css +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
- package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -23
- package/dist/components/thread-list-item/ThreadListItem.module.scss.js.map +1 -1
- package/dist/components/toast/Toast.module.css +1 -1
- package/dist/components/toast/Toast.module.scss.cjs +1 -1
- package/dist/components/toast/Toast.module.scss.js +6 -6
- package/dist/components/tour-point/TourPoint.module.css +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
- package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
- package/dist/index.cjs +1 -1
- package/dist/index.css +31 -29
- package/dist/index.js +156 -154
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,101 +1,102 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import { toKebab as
|
|
1
|
+
import { jsxs as x, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as Z, useId as B, useRef as L, useCallback as r, useState as C } from "react";
|
|
3
|
+
import { toKebab as P } from "../../utils/string.js";
|
|
4
4
|
import t from "./TextInput.module.scss.js";
|
|
5
|
-
const
|
|
5
|
+
const it = Z(
|
|
6
6
|
function({
|
|
7
|
-
className:
|
|
7
|
+
className: I = "",
|
|
8
8
|
size: T = "medium",
|
|
9
9
|
label: d,
|
|
10
10
|
leadingIcon: p,
|
|
11
11
|
trailingIcon: f,
|
|
12
|
-
invalid:
|
|
13
|
-
maxLength:
|
|
12
|
+
invalid: v = !1,
|
|
13
|
+
maxLength: i,
|
|
14
14
|
showCharacterCount: _ = !1,
|
|
15
15
|
id: V,
|
|
16
|
-
value:
|
|
17
|
-
defaultValue:
|
|
16
|
+
value: m,
|
|
17
|
+
defaultValue: b,
|
|
18
18
|
placeholder: z,
|
|
19
|
-
onFocus:
|
|
20
|
-
onBlur:
|
|
21
|
-
onChange:
|
|
19
|
+
onFocus: a,
|
|
20
|
+
onBlur: c,
|
|
21
|
+
onChange: u,
|
|
22
22
|
disabled: $,
|
|
23
23
|
readOnly: g,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
"aria-describedby": k,
|
|
25
|
+
...w
|
|
26
|
+
}, l) {
|
|
27
|
+
const F = B(), h = V ?? F, N = L(null), K = r(
|
|
27
28
|
(e) => {
|
|
28
|
-
if (
|
|
29
|
-
const R =
|
|
29
|
+
if (N.current = e, typeof l == "function") {
|
|
30
|
+
const R = l(e);
|
|
30
31
|
return () => {
|
|
31
|
-
|
|
32
|
+
N.current = null, typeof R == "function" && R();
|
|
32
33
|
};
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
l && (l.current = e);
|
|
35
36
|
},
|
|
36
|
-
[
|
|
37
|
-
),
|
|
38
|
-
|
|
39
|
-
), o =
|
|
37
|
+
[l]
|
|
38
|
+
), s = m !== void 0, [S, U] = C(
|
|
39
|
+
b ?? ""
|
|
40
|
+
), o = s ? m : S, q = o != null && o !== "", [A, y] = C(!1), D = A || q, E = r(
|
|
40
41
|
(e) => {
|
|
41
|
-
|
|
42
|
+
y(!0), a == null || a(e);
|
|
42
43
|
},
|
|
43
|
-
[
|
|
44
|
-
),
|
|
44
|
+
[a]
|
|
45
|
+
), G = r(
|
|
45
46
|
(e) => {
|
|
46
|
-
|
|
47
|
+
y(!1), c == null || c(e);
|
|
47
48
|
},
|
|
48
|
-
[
|
|
49
|
-
),
|
|
49
|
+
[c]
|
|
50
|
+
), H = r(
|
|
50
51
|
(e) => {
|
|
51
|
-
|
|
52
|
+
s || U(e.target.value), u == null || u(e);
|
|
52
53
|
},
|
|
53
|
-
[
|
|
54
|
-
),
|
|
55
|
-
t
|
|
56
|
-
H,
|
|
54
|
+
[s, u]
|
|
55
|
+
), J = t[`text-input--size-${P(T)}`], M = v ? t["text-input--invalid"] : "", O = d != null && D ? t["text-input--label-floated"] : "", Q = p != null ? t["text-input--has-leading-icon"] : "", W = f != null ? t["text-input--has-trailing-icon"] : "", X = [
|
|
56
|
+
t["text-input"],
|
|
57
57
|
J,
|
|
58
58
|
M,
|
|
59
59
|
O,
|
|
60
60
|
Q,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
W,
|
|
62
|
+
I
|
|
63
|
+
].filter(Boolean).join(" "), Y = typeof o == "string" ? o.length : 0, j = _ && i != null ? `${h}-counter` : void 0;
|
|
64
|
+
return /* @__PURE__ */ x("div", { className: X, children: [
|
|
65
|
+
/* @__PURE__ */ n("div", { className: t["text-input__wrapper"], children: /* @__PURE__ */ x("label", { className: t["text-input__inner"], children: [
|
|
66
|
+
d != null && /* @__PURE__ */ n("span", { className: t["text-input__label"], children: d }),
|
|
67
|
+
p != null && /* @__PURE__ */ n("span", { className: t["text-input__leading-icon"], children: p }),
|
|
67
68
|
/* @__PURE__ */ n(
|
|
68
69
|
"input",
|
|
69
70
|
{
|
|
70
|
-
ref:
|
|
71
|
+
ref: K,
|
|
71
72
|
id: h,
|
|
72
|
-
className: t
|
|
73
|
-
value:
|
|
74
|
-
defaultValue:
|
|
73
|
+
className: t["text-input__input"],
|
|
74
|
+
value: s ? m : void 0,
|
|
75
|
+
defaultValue: s ? void 0 : b,
|
|
75
76
|
placeholder: z,
|
|
76
|
-
maxLength:
|
|
77
|
+
maxLength: i,
|
|
77
78
|
disabled: $,
|
|
78
79
|
readOnly: g,
|
|
79
|
-
"aria-invalid":
|
|
80
|
-
"aria-describedby":
|
|
81
|
-
onFocus:
|
|
82
|
-
onBlur:
|
|
83
|
-
onChange:
|
|
84
|
-
...
|
|
80
|
+
"aria-invalid": v ? !0 : void 0,
|
|
81
|
+
"aria-describedby": [k, j].filter(Boolean).join(" ") || void 0,
|
|
82
|
+
onFocus: E,
|
|
83
|
+
onBlur: G,
|
|
84
|
+
onChange: H,
|
|
85
|
+
...w
|
|
85
86
|
}
|
|
86
87
|
),
|
|
87
|
-
f != null && /* @__PURE__ */ n("span", { className: t
|
|
88
|
+
f != null && /* @__PURE__ */ n("span", { className: t["text-input__trailing-icon"], children: f })
|
|
88
89
|
] }) }),
|
|
89
|
-
_ &&
|
|
90
|
+
_ && i != null && /* @__PURE__ */ x(
|
|
90
91
|
"div",
|
|
91
92
|
{
|
|
92
|
-
id:
|
|
93
|
-
className: t
|
|
93
|
+
id: j,
|
|
94
|
+
className: t["text-input__counter"],
|
|
94
95
|
"aria-live": "polite",
|
|
95
96
|
children: [
|
|
96
|
-
|
|
97
|
+
Y,
|
|
97
98
|
" / ",
|
|
98
|
-
|
|
99
|
+
i
|
|
99
100
|
]
|
|
100
101
|
}
|
|
101
102
|
)
|
|
@@ -103,6 +104,6 @@ const nt = Y(
|
|
|
103
104
|
}
|
|
104
105
|
);
|
|
105
106
|
export {
|
|
106
|
-
|
|
107
|
+
it as default
|
|
107
108
|
};
|
|
108
109
|
//# sourceMappingURL=TextInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput.js","sources":["../../../src/components/text-input/TextInput.tsx"],"sourcesContent":["import type {\n InputHTMLAttributes,\n ReactNode,\n ChangeEvent,\n RefCallback,\n} from 'react';\nimport { forwardRef, useId, useState, useCallback, useRef } from 'react';\nimport { toKebab } from '@/utils/string';\nimport styles from './TextInput.module.scss';\n\nexport type TextInputSize = 'small' | 'medium' | 'large';\n\nexport interface TextInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /** Floating label content. When provided, label floats on focus or when value is non-empty. */\n label?: ReactNode;\n /** Leading icon (e.g. <Icon glyph={<SearchIcon />} size=\"16\" />). */\n leadingIcon?: ReactNode;\n /** Max length for the input; used with showCharacterCount for counter. */\n maxLength?: number;\n /** When true with maxLength, shows \"current / max\" character count below input. */\n showCharacterCount?: boolean;\n /** Size variant. Figma: Small (32px), Medium (40px), Large (48px). Default: Medium. */\n size?: TextInputSize;\n /** Trailing icon. */\n trailingIcon?: ReactNode;\n}\n\n/**\n * Text Inputs let people enter and edit a single line of text — names, emails, search\n * queries, channel titles. They're the workhorse of every form and modal in Mattermost.\n */\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n function TextInput(\n {\n className = '',\n size = 'medium',\n label,\n leadingIcon,\n trailingIcon,\n invalid = false,\n maxLength,\n showCharacterCount = false,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n readOnly,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n const cleanup = (ref as RefCallback<HTMLInputElement>)(node);\n return () => {\n inputRef.current = null;\n if (typeof cleanup === 'function') cleanup();\n };\n }\n if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const sizeClass = styles[`
|
|
1
|
+
{"version":3,"file":"TextInput.js","sources":["../../../src/components/text-input/TextInput.tsx"],"sourcesContent":["import type {\n InputHTMLAttributes,\n ReactNode,\n ChangeEvent,\n RefCallback,\n} from 'react';\nimport { forwardRef, useId, useState, useCallback, useRef } from 'react';\nimport { toKebab } from '@/utils/string';\nimport styles from './TextInput.module.scss';\n\nexport type TextInputSize = 'small' | 'medium' | 'large';\n\nexport interface TextInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /** Floating label content. When provided, label floats on focus or when value is non-empty. */\n label?: ReactNode;\n /** Leading icon (e.g. <Icon glyph={<SearchIcon />} size=\"16\" />). */\n leadingIcon?: ReactNode;\n /** Max length for the input; used with showCharacterCount for counter. */\n maxLength?: number;\n /** When true with maxLength, shows \"current / max\" character count below input. */\n showCharacterCount?: boolean;\n /** Size variant. Figma: Small (32px), Medium (40px), Large (48px). Default: Medium. */\n size?: TextInputSize;\n /** Trailing icon. */\n trailingIcon?: ReactNode;\n}\n\n/**\n * Text Inputs let people enter and edit a single line of text — names, emails, search\n * queries, channel titles. They're the workhorse of every form and modal in Mattermost.\n */\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n function TextInput(\n {\n className = '',\n size = 'medium',\n label,\n leadingIcon,\n trailingIcon,\n invalid = false,\n maxLength,\n showCharacterCount = false,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n readOnly,\n 'aria-describedby': describedBy,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n const cleanup = (ref as RefCallback<HTMLInputElement>)(node);\n return () => {\n inputRef.current = null;\n if (typeof cleanup === 'function') cleanup();\n };\n }\n if (ref) ref.current = node;\n },\n [ref],\n );\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const sizeClass = styles[`text-input--size-${toKebab(size)}`];\n const invalidClass = invalid ? styles['text-input--invalid'] : '';\n const labelFloatedClass =\n label != null && labelFloated ? styles['text-input--label-floated'] : '';\n const hasLeadingClass =\n leadingIcon != null ? styles['text-input--has-leading-icon'] : '';\n const hasTrailingClass =\n trailingIcon != null ? styles['text-input--has-trailing-icon'] : '';\n\n const rootClass = [\n styles['text-input'],\n sizeClass,\n invalidClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const currentLength = typeof value === 'string' ? value.length : 0;\n const counterId =\n showCharacterCount && maxLength != null ? `${id}-counter` : undefined;\n\n return (\n <div className={rootClass}>\n <div className={styles['text-input__wrapper']}>\n <label className={styles['text-input__inner']}>\n {label != null && (\n <span className={styles['text-input__label']}>{label}</span>\n )}\n {leadingIcon != null && (\n <span className={styles['text-input__leading-icon']}>\n {leadingIcon}\n </span>\n )}\n <input\n ref={setInputRef}\n id={id}\n className={styles['text-input__input']}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n maxLength={maxLength}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid ? true : undefined}\n aria-describedby={\n [describedBy, counterId].filter(Boolean).join(' ') || undefined\n }\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n {...rest}\n />\n {trailingIcon != null && (\n <span className={styles['text-input__trailing-icon']}>\n {trailingIcon}\n </span>\n )}\n </label>\n </div>\n {showCharacterCount && maxLength != null && (\n <div\n id={counterId}\n className={styles['text-input__counter']}\n aria-live=\"polite\"\n >\n {currentLength} / {maxLength}\n </div>\n )}\n </div>\n );\n },\n);\n\nexport default TextInput;\n"],"names":["TextInput","forwardRef","className","size","label","leadingIcon","trailingIcon","invalid","maxLength","showCharacterCount","idProp","valueProp","defaultValue","placeholder","onFocus","onBlur","onChange","disabled","readOnly","describedBy","rest","ref","generatedId","useId","id","inputRef","useRef","setInputRef","useCallback","node","cleanup","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","hasValue","isFocused","setIsFocused","labelFloated","handleFocus","handleBlur","handleChange","sizeClass","styles","toKebab","invalidClass","labelFloatedClass","hasLeadingClass","hasTrailingClass","rootClass","currentLength","counterId","jsxs","jsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.
|
|
1
|
+
._text-input_16ayx_2{display:flex;flex-direction:column;width:100%}._text-input__wrapper_16ayx_7{position:relative;display:flex;flex-direction:column;min-height:0;background-color:var(--center-channel-bg);border-radius:var(--radius-s);box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.16);transition:box-shadow var(--duration-quick) var(--ease-transition);cursor:text}._text-input_16ayx_2:has(._text-input__input_16ayx_18:not(:disabled)):hover:not(:focus-within) ._text-input__wrapper_16ayx_7{box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.24)}._text-input_16ayx_2:has(._text-input__input_16ayx_18:focus-visible) ._text-input__wrapper_16ayx_7{box-shadow:inset 0 0 0 1px var(--focus-ring-color),0 0 0 1px var(--focus-ring-color)}._text-input_16ayx_2:has(._text-input__input_16ayx_18:disabled) ._text-input__wrapper_16ayx_7{background-color:var(--center-channel-bg);opacity:.56;cursor:not-allowed}._text-input__label_16ayx_29{position:absolute;left:var(--spacing-xs);top:50%;padding:0 var(--spacing-xxxs);transform:translateY(-50%);margin:0;font-family:Open Sans,sans-serif;font-size:var(--font-size-75);line-height:var(--line-height-25);font-weight:var(--font-weight-regular);color:rgba(var(--center-channel-color-rgb),.64);background-color:var(--center-channel-bg);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 24px);transition:transform var(--duration-quick) var(--ease-transition),font-size var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition),top var(--duration-quick) var(--ease-transition),left var(--duration-quick) var(--ease-transition)}._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px;color:rgba(var(--center-channel-color-rgb),.64)}._text-input__inner_16ayx_56{display:flex;align-items:center;flex:1;width:100%;min-width:0;box-sizing:border-box;margin:0;cursor:text}._text-input__input_16ayx_18{flex:1 1 0;width:100%;min-width:0;min-height:100%;margin:0;padding:0;border:0;background:transparent;font-family:Open Sans,sans-serif;font-size:var(--font-size-75);line-height:var(--line-height-25);font-weight:var(--font-weight-regular);color:var(--center-channel-color)}._text-input__input_16ayx_18:focus{outline:none}._text-input__input_16ayx_18::placeholder{color:rgba(var(--center-channel-color-rgb),.64)}._text-input__leading-icon_16ayx_87,._text-input__trailing-icon_16ayx_87{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64)}._text-input__leading-icon_16ayx_87{margin-right:var(--spacing-xs)}._text-input__trailing-icon_16ayx_87{margin-left:var(--spacing-xs)}._text-input__counter_16ayx_100{margin-top:var(--spacing-xxxs);font-family:Open Sans,sans-serif;font-size:var(--font-size-25);line-height:14px;color:rgba(var(--center-channel-color-rgb),.64)}._text-input--size-small_16ayx_107 ._text-input__wrapper_16ayx_7{min-height:32px}._text-input--size-small_16ayx_107 ._text-input__inner_16ayx_56{padding:var(--spacing-xs) var(--spacing-m)}._text-input--size-small_16ayx_107 ._text-input__input_16ayx_18{font-size:var(--font-size-75);line-height:var(--line-height-25)}._text-input--size-small_16ayx_107._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._text-input--size-medium_16ayx_123 ._text-input__wrapper_16ayx_7{min-height:40px}._text-input--size-medium_16ayx_123 ._text-input__inner_16ayx_56{padding:var(--spacing-s) var(--spacing-l)}._text-input--size-medium_16ayx_123 ._text-input__input_16ayx_18{font-size:var(--font-size-100);line-height:var(--line-height-100)}._text-input--size-medium_16ayx_123 ._text-input__label_16ayx_29{font-size:var(--font-size-100);left:var(--spacing-m)}._text-input--size-medium_16ayx_123._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._text-input--size-large_16ayx_143 ._text-input__wrapper_16ayx_7{min-height:48px}._text-input--size-large_16ayx_143 ._text-input__inner_16ayx_56{padding:var(--spacing-m) var(--spacing-l)}._text-input--size-large_16ayx_143 ._text-input__input_16ayx_18{font-size:var(--font-size-200);line-height:var(--line-height-200)}._text-input--size-large_16ayx_143 ._text-input__label_16ayx_29{font-size:var(--font-size-200);line-height:var(--line-height-200);left:var(--spacing-m)}._text-input--size-large_16ayx_143._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._text-input--has-leading-icon_16ayx_164 ._text-input__label_16ayx_29{left:var(--spacing-xxxl)}._text-input--has-leading-icon_16ayx_164._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29{left:var(--spacing-xs)}._text-input--has-leading-icon_16ayx_164._text-input--size-medium_16ayx_123 ._text-input__label_16ayx_29,._text-input--has-leading-icon_16ayx_164._text-input--size-large_16ayx_143 ._text-input__label_16ayx_29{left:36px}._text-input--has-leading-icon_16ayx_164._text-input--size-medium_16ayx_123._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29,._text-input--has-leading-icon_16ayx_164._text-input--size-large_16ayx_143._text-input--label-floated_16ayx_49 ._text-input__label_16ayx_29{left:var(--spacing-m)}._text-input_16ayx_2:has(._text-input__input_16ayx_18:focus-visible) ._text-input__label_16ayx_29{color:var(--button-bg)}._text-input_16ayx_2:has(._text-input__label_16ayx_29):not(._text-input--label-floated_16ayx_49) ._text-input__input_16ayx_18::placeholder{color:transparent}._text-input--invalid_16ayx_182 ._text-input__wrapper_16ayx_7{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger))}._text-input--invalid_16ayx_182:has(._text-input__input_16ayx_18:focus-visible) ._text-input__wrapper_16ayx_7{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger)),0 0 0 1px var(--error-text, var(--color-danger))}._text-input--invalid_16ayx_182 ._text-input__label_16ayx_29{color:var(--error-text, var(--color-danger))}._text-input--invalid_16ayx_182:has(._text-input__input_16ayx_18:focus-visible) ._text-input__label_16ayx_29{color:var(--error-text, var(--color-danger))}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./TextInput.module.css');const t="
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./TextInput.module.css');const t={"text-input":"_text-input_16ayx_2","text-input__wrapper":"_text-input__wrapper_16ayx_7","text-input__input":"_text-input__input_16ayx_18","text-input__label":"_text-input__label_16ayx_29","text-input--label-floated":"_text-input--label-floated_16ayx_49","text-input__inner":"_text-input__inner_16ayx_56","text-input__leading-icon":"_text-input__leading-icon_16ayx_87","text-input__trailing-icon":"_text-input__trailing-icon_16ayx_87","text-input__counter":"_text-input__counter_16ayx_100","text-input--size-small":"_text-input--size-small_16ayx_107","text-input--size-medium":"_text-input--size-medium_16ayx_123","text-input--size-large":"_text-input--size-large_16ayx_143","text-input--has-leading-icon":"_text-input--has-leading-icon_16ayx_164","text-input--invalid":"_text-input--invalid_16ayx_182"};exports.default=t;
|
|
2
2
|
//# sourceMappingURL=TextInput.module.scss.cjs.map
|
|
@@ -1,28 +1,20 @@
|
|
|
1
|
-
import './TextInput.module.css';const t =
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
1
|
+
import './TextInput.module.css';const t = {
|
|
2
|
+
"text-input": "_text-input_16ayx_2",
|
|
3
|
+
"text-input__wrapper": "_text-input__wrapper_16ayx_7",
|
|
4
|
+
"text-input__input": "_text-input__input_16ayx_18",
|
|
5
|
+
"text-input__label": "_text-input__label_16ayx_29",
|
|
6
|
+
"text-input--label-floated": "_text-input--label-floated_16ayx_49",
|
|
7
|
+
"text-input__inner": "_text-input__inner_16ayx_56",
|
|
8
|
+
"text-input__leading-icon": "_text-input__leading-icon_16ayx_87",
|
|
9
|
+
"text-input__trailing-icon": "_text-input__trailing-icon_16ayx_87",
|
|
10
|
+
"text-input__counter": "_text-input__counter_16ayx_100",
|
|
11
|
+
"text-input--size-small": "_text-input--size-small_16ayx_107",
|
|
12
|
+
"text-input--size-medium": "_text-input--size-medium_16ayx_123",
|
|
13
|
+
"text-input--size-large": "_text-input--size-large_16ayx_143",
|
|
14
|
+
"text-input--has-leading-icon": "_text-input--has-leading-icon_16ayx_164",
|
|
15
|
+
"text-input--invalid": "_text-input--invalid_16ayx_182"
|
|
16
16
|
};
|
|
17
17
|
export {
|
|
18
|
-
|
|
19
|
-
t as textInput,
|
|
20
|
-
I as textInput__counter,
|
|
21
|
-
p as textInput__inner,
|
|
22
|
-
n as textInput__input,
|
|
23
|
-
e as textInput__label,
|
|
24
|
-
u as textInput__leadingIcon,
|
|
25
|
-
l as textInput__trailingIcon,
|
|
26
|
-
_ as textInput__wrapper
|
|
18
|
+
t as default
|
|
27
19
|
};
|
|
28
20
|
//# sourceMappingURL=TextInput.module.scss.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),u=require("../button/Button.cjs"),j=require("../icon/Icon.cjs"),__x=require("@mattermost/compass-icons/components/reply-outline.js"),x=__x?.default??__x,p=require("../mention-badge/MentionBadge.cjs"),v=require("../user-avatar-group/UserAvatarGroup.cjs"),a=require("./ThreadFooter.module.scss.cjs");function N({replyCount:r=3,avatars:d=[],badge:s="none",mentionCount:l=1,following:t=!1,lastReplyTime:o,onReply:f,onFollowToggle:c,hovered:i=!1,className:h="",..._}){const m=[a.default["thread-footer"],t?a.default["thread-footer--following"]:"",i?a.default["thread-footer--hovered"]:"",h].filter(Boolean).join(" "),n=s==="mention"?`${l} mention${l===1?"":"s"}`:s==="unread"?"Unread replies":void 0;return e.jsx("div",{className:m,..._,children:e.jsxs("div",{className:a.default["thread-footer__inner"],children:[e.jsxs("div",{className:a.default["thread-footer__avatars-group"],children:[n&&e.jsx("span",{className:a.default["thread-footer__status-hint"],children:n}),s==="unread"&&e.jsx("span",{className:a.default["thread-footer__unread-dot"],"aria-hidden":!0}),s==="mention"&&e.jsx("span",{className:a.default["thread-footer__mention-badge"],"aria-hidden":!0,children:e.jsx(p.default,{count:l,location:"channel",size:"medium"})}),d.length>0&&e.jsx(v.default,{avatars:d,max:3,size:"20"})]}),e.jsxs("div",{className:a.default["thread-footer__buttons"],children:[e.jsx(u.default,{emphasis:"quaternary",size:"x-small",className:[a.default["thread-footer__reply-btn"],i?a.default["thread-footer__reply-btn--hovered"]:""].filter(Boolean).join(" "),onClick:f,"aria-label":`${r} repl${r===1?"y":"ies"}`,leadingIcon:e.jsx(j.default,{size:"12",glyph:e.jsx(x,{})}),children:e.jsxs("span",{className:a.default["thread-footer__btn-label"],children:[r," ",r===1?"reply":"replies"]})}),e.jsx("div",{className:a.default["thread-footer__divider"],"aria-hidden":!0}),e.jsx(u.default,{emphasis:"quaternary",size:"x-small",className:[a.default["thread-footer__follow-btn"],t?a.default["thread-footer__follow-btn--following"]:""].filter(Boolean).join(" "),onClick:c,"aria-pressed":t,"aria-label":t?"Unfollow thread":"Follow thread",children:t?"Following":"Follow"}),t&&o&&e.jsxs("div",{className:a.default["thread-footer__last-reply-group"],children:[e.jsx("div",{className:a.default["thread-footer__divider"],"aria-hidden":!0}),e.jsx("span",{className:a.default["thread-footer__last-reply"],children:o})]})]})]})})}exports.default=N;
|
|
2
2
|
//# sourceMappingURL=ThreadFooter.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadFooter.cjs","sources":["../../../src/components/thread-footer/ThreadFooter.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"ThreadFooter.cjs","sources":["../../../src/components/thread-footer/ThreadFooter.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\nimport Button from '@/components/button/Button';\nimport Icon from '@/components/icon/Icon';\nimport ReplyOutlineIcon from '@mattermost/compass-icons/components/reply-outline';\nimport MentionBadge from '@/components/mention-badge/MentionBadge';\nimport UserAvatarGroup, {\n type UserAvatarGroupItem,\n} from '@/components/user-avatar-group/UserAvatarGroup';\nimport styles from './ThreadFooter.module.scss';\n\nexport type ThreadFooterBadge = 'none' | 'unread' | 'mention';\n\nexport interface ThreadFooterProps extends HTMLAttributes<HTMLDivElement> {\n /** Reply count. Default: 3. */\n replyCount?: number;\n /** Participant avatars. Rendered with User Avatar Group (first 3 shown, overflow as +N). */\n avatars?: UserAvatarGroupItem[];\n /** Badge variant. Default: None. */\n badge?: ThreadFooterBadge;\n /** Shown when `badge` is Mention. Default: 1. */\n mentionCount?: number;\n /** Whether the current user is following the thread. Default: false. */\n following?: boolean;\n /** Last reply timestamp label. Shown on row hover when following. */\n lastReplyTime?: string;\n /** Called when Reply is clicked. */\n onReply?: () => void;\n /** Called when Follow/Following is clicked. */\n onFollowToggle?: () => void;\n /** Hover / active state for button highlight. Default: false. */\n hovered?: boolean;\n /** Optional CSS class name. */\n className?: string;\n}\n\n/**\n * The Thread Footer is the reply summary bar at the bottom of a message. It shows\n * participants, reply count, follow state, and last-reply time — the information someone\n * needs to decide whether to dive in.\n */\nexport default function ThreadFooter({\n replyCount = 3,\n avatars = [],\n badge = 'none',\n mentionCount = 1,\n following = false,\n lastReplyTime,\n onReply,\n onFollowToggle,\n hovered = false,\n className = '',\n ...rest\n}: ThreadFooterProps) {\n const rootClass = [\n styles['thread-footer'],\n following ? styles['thread-footer--following'] : '',\n hovered ? styles['thread-footer--hovered'] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const badgeStatusHint =\n badge === 'mention'\n ? `${mentionCount} mention${mentionCount === 1 ? '' : 's'}`\n : badge === 'unread'\n ? 'Unread replies'\n : undefined;\n\n return (\n <div className={rootClass} {...rest}>\n <div className={styles['thread-footer__inner']}>\n <div className={styles['thread-footer__avatars-group']}>\n {badgeStatusHint && (\n <span className={styles['thread-footer__status-hint']}>\n {badgeStatusHint}\n </span>\n )}\n {badge === 'unread' && (\n <span\n className={styles['thread-footer__unread-dot']}\n aria-hidden\n />\n )}\n {badge === 'mention' && (\n <span\n className={styles['thread-footer__mention-badge']}\n aria-hidden\n >\n <MentionBadge\n count={mentionCount}\n location=\"channel\"\n size=\"medium\"\n />\n </span>\n )}\n\n {avatars.length > 0 && (\n <UserAvatarGroup avatars={avatars} max={3} size=\"20\" />\n )}\n </div>\n\n {/* Buttons */}\n <div className={styles['thread-footer__buttons']}>\n {/* Reply button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__reply-btn'],\n hovered ? styles['thread-footer__reply-btn--hovered'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onReply}\n aria-label={`${replyCount} repl${replyCount === 1 ? 'y' : 'ies'}`}\n leadingIcon={<Icon size=\"12\" glyph={<ReplyOutlineIcon />} />}\n >\n <span className={styles['thread-footer__btn-label']}>\n {replyCount} {replyCount === 1 ? 'reply' : 'replies'}\n </span>\n </Button>\n\n <div className={styles['thread-footer__divider']} aria-hidden />\n\n {/* Follow / Following button */}\n <Button\n emphasis=\"quaternary\"\n size=\"x-small\"\n className={[\n styles['thread-footer__follow-btn'],\n following ? styles['thread-footer__follow-btn--following'] : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={onFollowToggle}\n aria-pressed={following}\n aria-label={following ? 'Unfollow thread' : 'Follow thread'}\n >\n {following ? 'Following' : 'Follow'}\n </Button>\n\n {/* Last reply time — revealed on row hover when following */}\n {following && lastReplyTime && (\n <div className={styles['thread-footer__last-reply-group']}>\n <div className={styles['thread-footer__divider']} aria-hidden />\n <span className={styles['thread-footer__last-reply']}>\n {lastReplyTime}\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["ThreadFooter","replyCount","avatars","badge","mentionCount","following","lastReplyTime","onReply","onFollowToggle","hovered","className","rest","rootClass","styles","badgeStatusHint","jsx","jsxs","MentionBadge","UserAvatarGroup","Button","Icon","ReplyOutlineIcon"],"mappings":"+ZAwCA,SAAwBA,EAAa,CACnC,WAAAC,EAAa,EACb,QAAAC,EAAU,CAAA,EACV,MAAAC,EAAQ,OACR,aAAAC,EAAe,EACf,UAAAC,EAAY,GACZ,cAAAC,EACA,QAAAC,EACA,eAAAC,EACA,QAAAC,EAAU,GACV,UAAAC,EAAY,GACZ,GAAGC,CACL,EAAsB,CACpB,MAAMC,EAAY,CAChBC,EAAAA,QAAO,eAAe,EACtBR,EAAYQ,EAAAA,QAAO,0BAA0B,EAAI,GACjDJ,EAAUI,EAAAA,QAAO,wBAAwB,EAAI,GAC7CH,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAELI,EACJX,IAAU,UACN,GAAGC,CAAY,WAAWA,IAAiB,EAAI,GAAK,GAAG,GACvDD,IAAU,SACR,iBACA,OAER,OACEY,EAAAA,IAAC,MAAA,CAAI,UAAWH,EAAY,GAAGD,EAC7B,SAAAK,EAAAA,KAAC,MAAA,CAAI,UAAWH,EAAAA,QAAO,sBAAsB,EAC3C,SAAA,CAAAG,EAAAA,KAAC,MAAA,CAAI,UAAWH,EAAAA,QAAO,8BAA8B,EAClD,SAAA,CAAAC,SACE,OAAA,CAAK,UAAWD,EAAAA,QAAO,4BAA4B,EACjD,SAAAC,EACH,EAEDX,IAAU,UACTY,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,2BAA2B,EAC7C,cAAW,EAAA,CAAA,EAGdV,IAAU,WACTY,EAAAA,IAAC,OAAA,CACC,UAAWF,EAAAA,QAAO,8BAA8B,EAChD,cAAW,GAEX,SAAAE,EAAAA,IAACE,EAAAA,QAAA,CACC,MAAOb,EACP,SAAS,UACT,KAAK,QAAA,CAAA,CACP,CAAA,EAIHF,EAAQ,OAAS,GAChBa,EAAAA,IAACG,EAAAA,SAAgB,QAAAhB,EAAkB,IAAK,EAAG,KAAK,IAAA,CAAK,CAAA,EAEzD,EAGAc,EAAAA,KAAC,MAAA,CAAI,UAAWH,EAAAA,QAAO,wBAAwB,EAE7C,SAAA,CAAAE,EAAAA,IAACI,EAAAA,QAAA,CACC,SAAS,aACT,KAAK,UACL,UAAW,CACTN,EAAAA,QAAO,0BAA0B,EACjCJ,EAAUI,EAAAA,QAAO,mCAAmC,EAAI,EAAA,EAEvD,OAAO,OAAO,EACd,KAAK,GAAG,EACX,QAASN,EACT,aAAY,GAAGN,CAAU,QAAQA,IAAe,EAAI,IAAM,KAAK,GAC/D,kBAAcmB,UAAA,CAAK,KAAK,KAAK,MAAOL,MAACM,IAAiB,EAAI,EAE1D,SAAAL,EAAAA,KAAC,OAAA,CAAK,UAAWH,UAAO,0BAA0B,EAC/C,SAAA,CAAAZ,EAAW,IAAEA,IAAe,EAAI,QAAU,SAAA,CAAA,CAC7C,CAAA,CAAA,QAGD,MAAA,CAAI,UAAWY,EAAAA,QAAO,wBAAwB,EAAG,cAAW,GAAC,EAG9DE,EAAAA,IAACI,EAAAA,QAAA,CACC,SAAS,aACT,KAAK,UACL,UAAW,CACTN,EAAAA,QAAO,2BAA2B,EAClCR,EAAYQ,EAAAA,QAAO,sCAAsC,EAAI,EAAA,EAE5D,OAAO,OAAO,EACd,KAAK,GAAG,EACX,QAASL,EACT,eAAcH,EACd,aAAYA,EAAY,kBAAoB,gBAE3C,WAAY,YAAc,QAAA,CAAA,EAI5BA,GAAaC,GACZU,EAAAA,KAAC,OAAI,UAAWH,EAAAA,QAAO,iCAAiC,EACtD,SAAA,CAAAE,MAAC,OAAI,UAAWF,EAAAA,QAAO,wBAAwB,EAAG,cAAW,GAAC,QAC7D,OAAA,CAAK,UAAWA,EAAAA,QAAO,2BAA2B,EAChD,SAAAP,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,CAEJ"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { HTMLAttributes } from 'react';
|
|
2
|
+
import { UserAvatarGroupItem } from '../user-avatar-group/UserAvatarGroup';
|
|
2
3
|
export type ThreadFooterBadge = 'none' | 'unread' | 'mention';
|
|
3
|
-
export interface AvatarData {
|
|
4
|
-
src: string;
|
|
5
|
-
alt: string;
|
|
6
|
-
}
|
|
7
4
|
export interface ThreadFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
8
5
|
/** Reply count. Default: 3. */
|
|
9
6
|
replyCount?: number;
|
|
10
|
-
/** Participant avatars (first 3 shown, overflow as +N). */
|
|
11
|
-
avatars?:
|
|
7
|
+
/** Participant avatars. Rendered with User Avatar Group (first 3 shown, overflow as +N). */
|
|
8
|
+
avatars?: UserAvatarGroupItem[];
|
|
12
9
|
/** Badge variant. Default: None. */
|
|
13
10
|
badge?: ThreadFooterBadge;
|
|
11
|
+
/** Shown when `badge` is Mention. Default: 1. */
|
|
12
|
+
mentionCount?: number;
|
|
14
13
|
/** Whether the current user is following the thread. Default: false. */
|
|
15
14
|
following?: boolean;
|
|
16
|
-
/** Last reply timestamp label. Shown when following. */
|
|
15
|
+
/** Last reply timestamp label. Shown on row hover when following. */
|
|
17
16
|
lastReplyTime?: string;
|
|
18
17
|
/** Called when Reply is clicked. */
|
|
19
18
|
onReply?: () => void;
|
|
@@ -29,5 +28,5 @@ export interface ThreadFooterProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
29
28
|
* participants, reply count, follow state, and last-reply time — the information someone
|
|
30
29
|
* needs to decide whether to dive in.
|
|
31
30
|
*/
|
|
32
|
-
export default function ThreadFooter({ replyCount, avatars, badge, following, lastReplyTime, onReply, onFollowToggle, hovered, className, ...rest }: ThreadFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export default function ThreadFooter({ replyCount, avatars, badge, mentionCount, following, lastReplyTime, onReply, onFollowToggle, hovered, className, ...rest }: ThreadFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
33
32
|
//# sourceMappingURL=ThreadFooter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadFooter.d.ts","sourceRoot":"","sources":["../../../src/components/thread-footer/ThreadFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ThreadFooter.d.ts","sourceRoot":"","sources":["../../../src/components/thread-footer/ThreadFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,OAAwB,EACtB,KAAK,mBAAmB,EACzB,MAAM,8CAA8C,CAAC;AAGtD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACvE,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,oCAAoC;IACpC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,UAAc,EACd,OAAY,EACZ,KAAc,EACd,YAAgB,EAChB,SAAiB,EACjB,aAAa,EACb,OAAO,EACP,cAAc,EACd,OAAe,EACf,SAAc,EACd,GAAG,IAAI,EACR,EAAE,iBAAiB,2CAuGnB"}
|
|
@@ -1,103 +1,100 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import { jsx as r, jsxs as o } from "react/jsx-runtime";
|
|
2
|
+
import c from "../button/Button.js";
|
|
3
|
+
import N from "../icon/Icon.js";
|
|
4
|
+
import __v from "@mattermost/compass-icons/components/reply-outline.js";const v=__v&&__v.default?__v.default:__v;
|
|
5
|
+
import b from "../mention-badge/MentionBadge.js";
|
|
6
|
+
import y from "../user-avatar-group/UserAvatarGroup.js";
|
|
6
7
|
import e from "./ThreadFooter.module.scss.js";
|
|
7
|
-
function
|
|
8
|
+
function w({
|
|
8
9
|
replyCount: t = 3,
|
|
9
|
-
avatars:
|
|
10
|
-
badge:
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
avatars: l = [],
|
|
11
|
+
badge: s = "none",
|
|
12
|
+
mentionCount: i = 1,
|
|
13
|
+
following: a = !1,
|
|
14
|
+
lastReplyTime: d,
|
|
13
15
|
onReply: m,
|
|
14
16
|
onFollowToggle: f,
|
|
15
|
-
hovered:
|
|
16
|
-
className:
|
|
17
|
-
...
|
|
17
|
+
hovered: n = !1,
|
|
18
|
+
className: _ = "",
|
|
19
|
+
...p
|
|
18
20
|
}) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const u = [
|
|
22
|
+
e["thread-footer"],
|
|
23
|
+
a ? e["thread-footer--following"] : "",
|
|
24
|
+
n ? e["thread-footer--hovered"] : "",
|
|
25
|
+
_
|
|
26
|
+
].filter(Boolean).join(" "), h = s === "mention" ? `${i} mention${i === 1 ? "" : "s"}` : s === "unread" ? "Unread replies" : void 0;
|
|
27
|
+
return /* @__PURE__ */ r("div", { className: u, ...p, children: /* @__PURE__ */ o("div", { className: e["thread-footer__inner"], children: [
|
|
28
|
+
/* @__PURE__ */ o("div", { className: e["thread-footer__avatars-group"], children: [
|
|
29
|
+
h && /* @__PURE__ */ r("span", { className: e["thread-footer__status-hint"], children: h }),
|
|
30
|
+
s === "unread" && /* @__PURE__ */ r(
|
|
23
31
|
"span",
|
|
24
32
|
{
|
|
25
33
|
className: e["thread-footer__unread-dot"],
|
|
26
|
-
"aria-
|
|
34
|
+
"aria-hidden": !0
|
|
27
35
|
}
|
|
28
36
|
),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
] }),
|
|
46
|
-
i.length === 0 && /* @__PURE__ */ r("div", { className: e["thread-footer__avatars"], children: [
|
|
47
|
-
[0, 1, 2].map((l) => /* @__PURE__ */ a(
|
|
48
|
-
"span",
|
|
49
|
-
{
|
|
50
|
-
className: e["thread-footer__avatar-placeholder"]
|
|
51
|
-
},
|
|
52
|
-
l
|
|
53
|
-
)),
|
|
54
|
-
/* @__PURE__ */ a("span", { className: e["thread-footer__avatar-overflow"], children: "+2" })
|
|
55
|
-
] })
|
|
37
|
+
s === "mention" && /* @__PURE__ */ r(
|
|
38
|
+
"span",
|
|
39
|
+
{
|
|
40
|
+
className: e["thread-footer__mention-badge"],
|
|
41
|
+
"aria-hidden": !0,
|
|
42
|
+
children: /* @__PURE__ */ r(
|
|
43
|
+
b,
|
|
44
|
+
{
|
|
45
|
+
count: i,
|
|
46
|
+
location: "channel",
|
|
47
|
+
size: "medium"
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
l.length > 0 && /* @__PURE__ */ r(y, { avatars: l, max: 3, size: "20" })
|
|
56
53
|
] }),
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
|
|
54
|
+
/* @__PURE__ */ o("div", { className: e["thread-footer__buttons"], children: [
|
|
55
|
+
/* @__PURE__ */ r(
|
|
56
|
+
c,
|
|
60
57
|
{
|
|
61
58
|
emphasis: "quaternary",
|
|
62
59
|
size: "x-small",
|
|
63
60
|
className: [
|
|
64
61
|
e["thread-footer__reply-btn"],
|
|
65
|
-
|
|
62
|
+
n ? e["thread-footer__reply-btn--hovered"] : ""
|
|
66
63
|
].filter(Boolean).join(" "),
|
|
67
64
|
onClick: m,
|
|
68
65
|
"aria-label": `${t} repl${t === 1 ? "y" : "ies"}`,
|
|
69
|
-
leadingIcon: /* @__PURE__ */
|
|
70
|
-
children: /* @__PURE__ */
|
|
66
|
+
leadingIcon: /* @__PURE__ */ r(N, { size: "12", glyph: /* @__PURE__ */ r(v, {}) }),
|
|
67
|
+
children: /* @__PURE__ */ o("span", { className: e["thread-footer__btn-label"], children: [
|
|
71
68
|
t,
|
|
72
69
|
" ",
|
|
73
70
|
t === 1 ? "reply" : "replies"
|
|
74
71
|
] })
|
|
75
72
|
}
|
|
76
73
|
),
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
|
|
74
|
+
/* @__PURE__ */ r("div", { className: e["thread-footer__divider"], "aria-hidden": !0 }),
|
|
75
|
+
/* @__PURE__ */ r(
|
|
76
|
+
c,
|
|
80
77
|
{
|
|
81
78
|
emphasis: "quaternary",
|
|
82
79
|
size: "x-small",
|
|
83
80
|
className: [
|
|
84
81
|
e["thread-footer__follow-btn"],
|
|
85
|
-
|
|
82
|
+
a ? e["thread-footer__follow-btn--following"] : ""
|
|
86
83
|
].filter(Boolean).join(" "),
|
|
87
84
|
onClick: f,
|
|
88
|
-
"aria-pressed":
|
|
89
|
-
"aria-label":
|
|
90
|
-
children:
|
|
85
|
+
"aria-pressed": a,
|
|
86
|
+
"aria-label": a ? "Unfollow thread" : "Follow thread",
|
|
87
|
+
children: a ? "Following" : "Follow"
|
|
91
88
|
}
|
|
92
89
|
),
|
|
93
|
-
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
/* @__PURE__ */
|
|
90
|
+
a && d && /* @__PURE__ */ o("div", { className: e["thread-footer__last-reply-group"], children: [
|
|
91
|
+
/* @__PURE__ */ r("div", { className: e["thread-footer__divider"], "aria-hidden": !0 }),
|
|
92
|
+
/* @__PURE__ */ r("span", { className: e["thread-footer__last-reply"], children: d })
|
|
96
93
|
] })
|
|
97
94
|
] })
|
|
98
95
|
] }) });
|
|
99
96
|
}
|
|
100
97
|
export {
|
|
101
|
-
|
|
98
|
+
w as default
|
|
102
99
|
};
|
|
103
100
|
//# sourceMappingURL=ThreadFooter.js.map
|