@trebired/frontend 1.6.0 → 1.7.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 (159) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/actions/buttons.d.ts.map +1 -1
  3. package/dist/actions/buttons.js +43 -5
  4. package/dist/actions/buttons.js.map +1 -1
  5. package/dist/actions/components/index.d.ts +9 -0
  6. package/dist/actions/components/index.d.ts.map +1 -1
  7. package/dist/actions/components/index.js +10 -5
  8. package/dist/actions/components/index.js.map +1 -1
  9. package/dist/actions/forms.d.ts.map +1 -1
  10. package/dist/actions/forms.js +26 -4
  11. package/dist/actions/forms.js.map +1 -1
  12. package/dist/actions/index.d.ts +1 -1
  13. package/dist/actions/index.d.ts.map +1 -1
  14. package/dist/actions/index.js +1 -1
  15. package/dist/actions/index.js.map +1 -1
  16. package/dist/actions/response.d.ts +14 -1
  17. package/dist/actions/response.d.ts.map +1 -1
  18. package/dist/actions/response.js +77 -4
  19. package/dist/actions/response.js.map +1 -1
  20. package/dist/actions/triggers.d.ts +1 -0
  21. package/dist/actions/triggers.d.ts.map +1 -1
  22. package/dist/actions/triggers.js +11 -2
  23. package/dist/actions/triggers.js.map +1 -1
  24. package/dist/actions/types.d.ts +8 -0
  25. package/dist/actions/types.d.ts.map +1 -1
  26. package/dist/config/normalize.d.ts.map +1 -1
  27. package/dist/config/normalize.js +1 -0
  28. package/dist/config/normalize.js.map +1 -1
  29. package/dist/config/scss.d.ts.map +1 -1
  30. package/dist/config/scss.js +1 -0
  31. package/dist/config/scss.js.map +1 -1
  32. package/dist/config/types.d.ts +1 -1
  33. package/dist/config/types.d.ts.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/primitives/components/card/body.d.ts +11 -0
  39. package/dist/primitives/components/card/body.d.ts.map +1 -0
  40. package/dist/primitives/components/card/body.js +138 -0
  41. package/dist/primitives/components/card/body.js.map +1 -0
  42. package/dist/primitives/components/card/parts.d.ts +10 -0
  43. package/dist/primitives/components/card/parts.d.ts.map +1 -0
  44. package/dist/primitives/components/card/parts.js +46 -0
  45. package/dist/primitives/components/card/parts.js.map +1 -0
  46. package/dist/primitives/components/controls.d.ts +15 -0
  47. package/dist/primitives/components/controls.d.ts.map +1 -0
  48. package/dist/primitives/components/controls.js +86 -0
  49. package/dist/primitives/components/controls.js.map +1 -0
  50. package/dist/primitives/components/index.d.ts +8 -0
  51. package/dist/primitives/components/index.d.ts.map +1 -0
  52. package/dist/primitives/components/index.js +7 -0
  53. package/dist/primitives/components/index.js.map +1 -0
  54. package/dist/primitives/components/key_value.d.ts +10 -0
  55. package/dist/primitives/components/key_value.d.ts.map +1 -0
  56. package/dist/primitives/components/key_value.js +120 -0
  57. package/dist/primitives/components/key_value.js.map +1 -0
  58. package/dist/primitives/components/shared.d.ts +44 -0
  59. package/dist/primitives/components/shared.d.ts.map +1 -0
  60. package/dist/primitives/components/shared.js +56 -0
  61. package/dist/primitives/components/shared.js.map +1 -0
  62. package/dist/primitives/components/time_counter.d.ts +7 -0
  63. package/dist/primitives/components/time_counter.d.ts.map +1 -0
  64. package/dist/primitives/components/time_counter.js +103 -0
  65. package/dist/primitives/components/time_counter.js.map +1 -0
  66. package/dist/primitives/components/types.d.ts +206 -0
  67. package/dist/primitives/components/types.d.ts.map +1 -0
  68. package/dist/primitives/components/types.js +2 -0
  69. package/dist/primitives/components/types.js.map +1 -0
  70. package/dist/primitives/index.d.ts +21 -0
  71. package/dist/primitives/index.d.ts.map +1 -0
  72. package/dist/primitives/index.js +127 -0
  73. package/dist/primitives/index.js.map +1 -0
  74. package/dist/primitives/styles/_card.scss +106 -0
  75. package/dist/primitives/styles/_controls.scss +195 -0
  76. package/dist/primitives/styles/_indicators.scss +165 -0
  77. package/dist/primitives/styles/_variables.scss +68 -0
  78. package/dist/primitives/styles/index.scss +3 -0
  79. package/dist/react/index.d.ts +1 -0
  80. package/dist/react/index.d.ts.map +1 -1
  81. package/dist/react/index.js +1 -0
  82. package/dist/react/index.js.map +1 -1
  83. package/dist/src/actions/buttons.d.ts.map +1 -1
  84. package/dist/src/actions/buttons.js +43 -5
  85. package/dist/src/actions/buttons.js.map +1 -1
  86. package/dist/src/actions/components/index.d.ts +9 -0
  87. package/dist/src/actions/components/index.d.ts.map +1 -1
  88. package/dist/src/actions/components/index.js +10 -5
  89. package/dist/src/actions/components/index.js.map +1 -1
  90. package/dist/src/actions/forms.d.ts.map +1 -1
  91. package/dist/src/actions/forms.js +26 -4
  92. package/dist/src/actions/forms.js.map +1 -1
  93. package/dist/src/actions/index.d.ts +1 -1
  94. package/dist/src/actions/index.d.ts.map +1 -1
  95. package/dist/src/actions/index.js +1 -1
  96. package/dist/src/actions/index.js.map +1 -1
  97. package/dist/src/actions/response.d.ts +14 -1
  98. package/dist/src/actions/response.d.ts.map +1 -1
  99. package/dist/src/actions/response.js +77 -4
  100. package/dist/src/actions/response.js.map +1 -1
  101. package/dist/src/actions/triggers.d.ts +1 -0
  102. package/dist/src/actions/triggers.d.ts.map +1 -1
  103. package/dist/src/actions/triggers.js +11 -2
  104. package/dist/src/actions/triggers.js.map +1 -1
  105. package/dist/src/actions/types.d.ts +8 -0
  106. package/dist/src/actions/types.d.ts.map +1 -1
  107. package/dist/src/config/normalize.d.ts.map +1 -1
  108. package/dist/src/config/normalize.js +1 -0
  109. package/dist/src/config/normalize.js.map +1 -1
  110. package/dist/src/config/scss.d.ts.map +1 -1
  111. package/dist/src/config/scss.js +1 -0
  112. package/dist/src/config/scss.js.map +1 -1
  113. package/dist/src/config/types.d.ts +1 -1
  114. package/dist/src/config/types.d.ts.map +1 -1
  115. package/dist/src/index.d.ts +1 -0
  116. package/dist/src/index.d.ts.map +1 -1
  117. package/dist/src/index.js +3 -0
  118. package/dist/src/index.js.map +1 -1
  119. package/dist/src/primitives/components/card/body.d.ts +11 -0
  120. package/dist/src/primitives/components/card/body.d.ts.map +1 -0
  121. package/dist/src/primitives/components/card/body.js +138 -0
  122. package/dist/src/primitives/components/card/body.js.map +1 -0
  123. package/dist/src/primitives/components/card/parts.d.ts +10 -0
  124. package/dist/src/primitives/components/card/parts.d.ts.map +1 -0
  125. package/dist/src/primitives/components/card/parts.js +46 -0
  126. package/dist/src/primitives/components/card/parts.js.map +1 -0
  127. package/dist/src/primitives/components/controls.d.ts +15 -0
  128. package/dist/src/primitives/components/controls.d.ts.map +1 -0
  129. package/dist/src/primitives/components/controls.js +86 -0
  130. package/dist/src/primitives/components/controls.js.map +1 -0
  131. package/dist/src/primitives/components/index.d.ts +8 -0
  132. package/dist/src/primitives/components/index.d.ts.map +1 -0
  133. package/dist/src/primitives/components/index.js +7 -0
  134. package/dist/src/primitives/components/index.js.map +1 -0
  135. package/dist/src/primitives/components/key_value.d.ts +10 -0
  136. package/dist/src/primitives/components/key_value.d.ts.map +1 -0
  137. package/dist/src/primitives/components/key_value.js +120 -0
  138. package/dist/src/primitives/components/key_value.js.map +1 -0
  139. package/dist/src/primitives/components/shared.d.ts +44 -0
  140. package/dist/src/primitives/components/shared.d.ts.map +1 -0
  141. package/dist/src/primitives/components/shared.js +56 -0
  142. package/dist/src/primitives/components/shared.js.map +1 -0
  143. package/dist/src/primitives/components/time_counter.d.ts +7 -0
  144. package/dist/src/primitives/components/time_counter.d.ts.map +1 -0
  145. package/dist/src/primitives/components/time_counter.js +103 -0
  146. package/dist/src/primitives/components/time_counter.js.map +1 -0
  147. package/dist/src/primitives/components/types.d.ts +206 -0
  148. package/dist/src/primitives/components/types.d.ts.map +1 -0
  149. package/dist/src/primitives/components/types.js +2 -0
  150. package/dist/src/primitives/components/types.js.map +1 -0
  151. package/dist/src/primitives/index.d.ts +21 -0
  152. package/dist/src/primitives/index.d.ts.map +1 -0
  153. package/dist/src/primitives/index.js +127 -0
  154. package/dist/src/primitives/index.js.map +1 -0
  155. package/dist/src/react/index.d.ts +1 -0
  156. package/dist/src/react/index.d.ts.map +1 -1
  157. package/dist/src/react/index.js +1 -0
  158. package/dist/src/react/index.js.map +1 -1
  159. package/package.json +1 -1
@@ -0,0 +1,206 @@
1
+ import type { ButtonHTMLAttributes, CSSProperties, FormHTMLAttributes, HTMLAttributes, ReactNode } from "react";
2
+ import type { BindActionTriggerOptions } from "../../actions/triggers.d.ts";
3
+ import type { SubmitActionButtonOptions } from "../../actions/types.d.ts";
4
+ type attr_map = Record<string, unknown>;
5
+ type PrimitiveAttrs = {
6
+ [key: string]: unknown;
7
+ };
8
+ type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & PrimitiveAttrs & {
9
+ actionButton?: SubmitActionButtonOptions;
10
+ actionTrigger?: BindActionTriggerOptions;
11
+ variant?: "solid";
12
+ };
13
+ type CardProps = HTMLAttributes<HTMLDivElement> & PrimitiveAttrs & {
14
+ actionTrigger?: BindActionTriggerOptions;
15
+ };
16
+ type ActionFormProps = Omit<FormHTMLAttributes<HTMLFormElement>, "action" | "children" | "method"> & {
17
+ action: string;
18
+ body?: "json";
19
+ children?: ReactNode;
20
+ ignoreResponseAction?: boolean;
21
+ lifecycle?: boolean;
22
+ method?: string;
23
+ success?: "soft-reload";
24
+ successTab?: string;
25
+ } & PrimitiveAttrs;
26
+ type CsrfInputProps = {
27
+ optional?: boolean;
28
+ token: unknown;
29
+ };
30
+ type AvatarProps = {
31
+ alt?: string;
32
+ className?: string;
33
+ height?: string | number;
34
+ size?: string;
35
+ src?: string;
36
+ style?: CSSProperties;
37
+ width?: string | number;
38
+ };
39
+ type PillProps = HTMLAttributes<HTMLSpanElement> & PrimitiveAttrs & {
40
+ children?: ReactNode;
41
+ };
42
+ type SeparatorProps = {
43
+ className?: string;
44
+ orientation?: "horizontal" | "vertical";
45
+ visible?: boolean;
46
+ };
47
+ type list_props<T = unknown> = {
48
+ className?: string;
49
+ getItemProps?: (item: T, index: number) => Record<string, unknown>;
50
+ getKey?: (item: T, index: number) => string | number;
51
+ itemClassName?: string;
52
+ items?: T[];
53
+ renderItem: (item: T, index: number) => ReactNode;
54
+ style?: CSSProperties;
55
+ };
56
+ type key_value_row = {
57
+ attributes?: string;
58
+ format?: "time";
59
+ id?: string;
60
+ label?: string;
61
+ label_attributes?: string;
62
+ value?: unknown;
63
+ value_attributes?: string;
64
+ value_html?: string;
65
+ value_node?: ReactNode;
66
+ };
67
+ type key_value_group = {
68
+ rows?: key_value_row[];
69
+ title?: string;
70
+ };
71
+ type key_value_props = {
72
+ card?: boolean;
73
+ className?: string;
74
+ groups?: key_value_group[];
75
+ layout?: "column" | "inline";
76
+ rowClassName?: string;
77
+ rows?: key_value_row[];
78
+ rowsClassName?: string;
79
+ separated?: boolean;
80
+ };
81
+ type masonry_props = HTMLAttributes<HTMLDivElement> & PrimitiveAttrs & {
82
+ columns?: ReactNode[];
83
+ };
84
+ type bar_props = {
85
+ card?: boolean;
86
+ hidden?: boolean;
87
+ label?: string;
88
+ meta?: string;
89
+ percent?: number;
90
+ wrapperAttributes?: string;
91
+ };
92
+ type circle_props = {
93
+ size?: string;
94
+ };
95
+ type StatusDotTone = "blue" | "cyan" | "error" | "gray" | "green" | "info" | "muted" | "purple" | "red" | "success" | "warning" | "yellow";
96
+ type StatusDotSize = "xs" | "sm" | "md" | "lg";
97
+ type StatusDotProps = {
98
+ ariaHidden?: boolean;
99
+ className?: string;
100
+ size?: StatusDotSize;
101
+ title?: string;
102
+ tone?: StatusDotTone;
103
+ };
104
+ type TimeCounterProps = {
105
+ alwaysRender?: boolean;
106
+ bare?: boolean;
107
+ className?: string;
108
+ count?: number | string;
109
+ end?: string;
110
+ id?: string;
111
+ live?: boolean;
112
+ mode?: "count";
113
+ reloadOnZero?: boolean;
114
+ remaining?: boolean;
115
+ start?: string;
116
+ unstyled?: boolean;
117
+ };
118
+ type CardSegment = {
119
+ className?: string;
120
+ kind?: string;
121
+ value?: ReactNode;
122
+ };
123
+ type CardSegmentRow = {
124
+ className?: string;
125
+ dataAttrs?: Record<string, string>;
126
+ segments?: CardSegment[];
127
+ };
128
+ type CardSegmentsProps = {
129
+ rows?: CardSegmentRow[];
130
+ };
131
+ type BodyProps = {
132
+ actionTrigger?: BindActionTriggerOptions;
133
+ actions?: ReactNode;
134
+ actionsClassName?: string;
135
+ bodyClassName?: string;
136
+ className?: string;
137
+ dataAttrs?: Record<string, unknown>;
138
+ extra?: ReactNode;
139
+ icon?: ReactNode;
140
+ live?: {
141
+ id: string;
142
+ kind: string;
143
+ };
144
+ meta?: ReactNode;
145
+ search?: Record<string, unknown>;
146
+ segments?: ReactNode;
147
+ select?: {
148
+ buttonType?: "button" | "reset" | "submit";
149
+ disabled?: boolean;
150
+ selected?: boolean;
151
+ value?: string;
152
+ };
153
+ showDivider?: boolean;
154
+ subtitle?: ReactNode;
155
+ subtitleClassName?: string;
156
+ title: ReactNode;
157
+ titleAttrs?: Record<string, string>;
158
+ titleClassName?: string;
159
+ titleWidthFit?: boolean;
160
+ type?: {
161
+ actions?: boolean;
162
+ divider?: boolean;
163
+ icon?: boolean;
164
+ segments?: boolean;
165
+ titleMeta?: boolean;
166
+ };
167
+ width?: "fit" | "full";
168
+ };
169
+ type SelectCardItem = {
170
+ attrs?: Record<string, unknown>;
171
+ buttonType?: "button" | "reset" | "submit";
172
+ className?: string;
173
+ content?: ReactNode;
174
+ description?: ReactNode;
175
+ details?: ReactNode;
176
+ disabled?: boolean;
177
+ iconSpec?: string;
178
+ id?: string;
179
+ selected?: boolean;
180
+ title?: ReactNode;
181
+ titleMeta?: ReactNode;
182
+ value?: string;
183
+ };
184
+ type SelectCardsProps = {
185
+ attrs?: Record<string, unknown>;
186
+ className?: string;
187
+ icon?: boolean;
188
+ items: SelectCardItem[];
189
+ layout?: "column" | "grid";
190
+ };
191
+ type CardItemProps = {
192
+ actionTrigger?: BindActionTriggerOptions;
193
+ className?: string;
194
+ dataAttrs?: Record<string, string>;
195
+ extraHtml?: string;
196
+ search?: Record<string, unknown>;
197
+ segmentRows?: CardSegmentRow[];
198
+ statusHtml?: string;
199
+ title?: ReactNode;
200
+ titleMetaHtml?: string;
201
+ };
202
+ type primitive_action_form_props = ActionFormProps;
203
+ type primitive_button_props = ButtonProps;
204
+ type primitive_card_props = CardProps;
205
+ export type { ActionFormProps, AvatarProps, BodyProps, ButtonProps, CardItemProps, CardProps, CardSegment, CardSegmentRow, CardSegmentsProps, CsrfInputProps, PillProps, SelectCardItem, SelectCardsProps, SeparatorProps, StatusDotProps, StatusDotSize, StatusDotTone, TimeCounterProps, attr_map, bar_props, circle_props, key_value_group, key_value_props, key_value_row, list_props, masonry_props, primitive_action_form_props, primitive_button_props, primitive_card_props, };
206
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/primitives/components/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,SAAS,EACV,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxC,KAAK,cAAc,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG,cAAc,GAAG;IAC5E,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG;IACjE,aAAa,CAAC,EAAE,wBAAwB,CAAC;CAC1C,CAAC;AAEF,KAAK,eAAe,GAAG,IAAI,CACzB,kBAAkB,CAAC,eAAe,CAAC,EACnC,QAAQ,GAAG,UAAU,GAAG,QAAQ,CACjC,GAAG;IACF,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,cAAc,CAAC;AAEnB,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,SAAS,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG,cAAc,GAAG;IAClE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAClD,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,KAAK,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG;IACrE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,aAAa,GACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,KAAK,GACL,SAAS,GACT,SAAS,GACT,QAAQ,CAAC;AAEb,KAAK,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,KAAK,cAAc,GAAG;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,2BAA2B,GAAG,eAAe,CAAC;AACnD,KAAK,sBAAsB,GAAG,WAAW,CAAC;AAC1C,KAAK,oBAAoB,GAAG,SAAS,CAAC;AAEtC,YAAY,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,WAAW,EACX,aAAa,EACb,SAAS,EACT,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,GACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/primitives/components/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { type BindRoot } from "../dom/index.d.ts";
2
+ type TimeCounterConfig = {
3
+ count?: number | string | null;
4
+ end?: string;
5
+ live?: boolean;
6
+ mode?: "count" | "remaining";
7
+ reloadOnZero?: boolean;
8
+ start?: string;
9
+ };
10
+ declare const TIME_COUNTER_SELECTOR = "[data-tbf-time-counter]";
11
+ declare const TIME_COUNTER_CONFIG_SELECTOR = "script[type=\"application/json\"][data-tbf-time-counter-config]";
12
+ declare function refreshTimeCounter(el: HTMLElement | null): boolean;
13
+ declare function setTimeCounterConfig(el: HTMLElement | null, config: TimeCounterConfig | null): boolean;
14
+ declare function bindTimeCounter(host: HTMLElement | null): boolean;
15
+ declare function bindTimeCounters(root?: BindRoot): void;
16
+ declare function bindPrimitiveControllers(root?: BindRoot): void;
17
+ declare function refreshTimeCounters(root?: BindRoot): void;
18
+ export { TIME_COUNTER_CONFIG_SELECTOR, TIME_COUNTER_SELECTOR, bindPrimitiveControllers, bindTimeCounter, bindTimeCounters, refreshTimeCounter, refreshTimeCounters, setTimeCounterConfig, };
19
+ export type { TimeCounterConfig };
20
+ export * from "./components/index.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzE,KAAK,iBAAiB,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,QAAA,MAAM,qBAAqB,4BAA4B,CAAC;AACxD,QAAA,MAAM,4BAA4B,oEAC+B,CAAC;AA8DlE,iBAAS,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,WAQjD;AAkBD,iBAAS,oBAAoB,CAC3B,EAAE,EAAE,WAAW,GAAG,IAAI,EACtB,MAAM,EAAE,iBAAiB,GAAG,IAAI,WAajC;AAED,iBAAS,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,WAQhD;AAED,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,QAIlD;AAED,iBAAS,wBAAwB,CAAC,IAAI,GAAE,QAAmB,QAE1D;AAED,iBAAS,mBAAmB,CAAC,IAAI,GAAE,QAAmB,QAMrD;AAED,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,CAAC;AACF,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { queryAll, readElementJson } from "../dom/index.js";
2
+ import { formatDuration, formatWrappedCount, parseCountValue, } from "./components/index.js";
3
+ const TIME_COUNTER_SELECTOR = "[data-tbf-time-counter]";
4
+ const TIME_COUNTER_CONFIG_SELECTOR = 'script[type="application/json"][data-tbf-time-counter-config]';
5
+ const configs = new WeakMap();
6
+ const positiveRemainingCounters = new WeakSet();
7
+ const activeCounters = new Set();
8
+ let intervalStarted = false;
9
+ let reloadTriggered = false;
10
+ function parseDateMsOrNull(value) {
11
+ const text = String(value || "").trim();
12
+ if (!text)
13
+ return null;
14
+ const parsed = Date.parse(text);
15
+ return Number.isFinite(parsed) ? parsed : null;
16
+ }
17
+ function timeCounterTarget(host) {
18
+ const child = Array.from(host.children).find((entry) => {
19
+ return entry instanceof HTMLElement && entry.tagName.toLowerCase() !== "script";
20
+ });
21
+ return child instanceof HTMLElement ? child : host;
22
+ }
23
+ function renderCount(el, config) {
24
+ el.textContent = formatWrappedCount(parseCountValue(config.count));
25
+ }
26
+ function renderForward(el, config) {
27
+ const from = parseDateMsOrNull(config.start);
28
+ const to = parseDateMsOrNull(config.end);
29
+ el.textContent = from == null || to == null ? "-" : formatDuration(to - from);
30
+ }
31
+ function renderRemaining(el, config) {
32
+ const to = parseDateMsOrNull(config.end);
33
+ if (to == null) {
34
+ el.textContent = "-";
35
+ return;
36
+ }
37
+ const remainingMs = to - Date.now();
38
+ el.textContent = formatDuration(remainingMs);
39
+ if (remainingMs > 0) {
40
+ positiveRemainingCounters.add(el);
41
+ return;
42
+ }
43
+ if (positiveRemainingCounters.has(el) &&
44
+ config.reloadOnZero === true &&
45
+ !reloadTriggered) {
46
+ reloadTriggered = true;
47
+ window.location.reload();
48
+ }
49
+ }
50
+ function tickLive(el, config) {
51
+ if (config.mode === "remaining") {
52
+ renderRemaining(el, config);
53
+ return;
54
+ }
55
+ const from = parseDateMsOrNull(config.start);
56
+ el.textContent = from == null ? "-" : formatDuration(Date.now() - from);
57
+ }
58
+ function refreshTimeCounter(el) {
59
+ if (!(el instanceof HTMLElement))
60
+ return false;
61
+ const config = configs.get(el) || {};
62
+ if (config.mode === "count")
63
+ renderCount(el, config);
64
+ else if (config.mode === "remaining")
65
+ renderRemaining(el, config);
66
+ else if (config.live === true)
67
+ tickLive(el, config);
68
+ else
69
+ renderForward(el, config);
70
+ return true;
71
+ }
72
+ function tickActiveCounters() {
73
+ activeCounters.forEach((el) => {
74
+ if (!el.isConnected) {
75
+ activeCounters.delete(el);
76
+ return;
77
+ }
78
+ refreshTimeCounter(el);
79
+ });
80
+ }
81
+ function ensureInterval() {
82
+ if (intervalStarted)
83
+ return;
84
+ intervalStarted = true;
85
+ window.setInterval(tickActiveCounters, 1000);
86
+ }
87
+ function setTimeCounterConfig(el, config) {
88
+ if (!(el instanceof HTMLElement))
89
+ return false;
90
+ const next = config && typeof config === "object" ? { ...config } : {};
91
+ configs.set(el, next);
92
+ if (next.live === true || next.mode === "remaining") {
93
+ activeCounters.add(el);
94
+ ensureInterval();
95
+ }
96
+ else {
97
+ activeCounters.delete(el);
98
+ }
99
+ refreshTimeCounter(el);
100
+ return true;
101
+ }
102
+ function bindTimeCounter(host) {
103
+ if (!(host instanceof HTMLElement))
104
+ return false;
105
+ const target = timeCounterTarget(host);
106
+ if (!(target instanceof HTMLElement))
107
+ return false;
108
+ return setTimeCounterConfig(target, readElementJson(host, TIME_COUNTER_CONFIG_SELECTOR, {}));
109
+ }
110
+ function bindTimeCounters(root = document) {
111
+ queryAll(root, TIME_COUNTER_SELECTOR).forEach((host) => {
112
+ bindTimeCounter(host);
113
+ });
114
+ }
115
+ function bindPrimitiveControllers(root = document) {
116
+ bindTimeCounters(root);
117
+ }
118
+ function refreshTimeCounters(root = document) {
119
+ if (root instanceof HTMLElement && configs.has(root)) {
120
+ refreshTimeCounter(root);
121
+ return;
122
+ }
123
+ bindTimeCounters(root);
124
+ }
125
+ export { TIME_COUNTER_CONFIG_SELECTOR, TIME_COUNTER_SELECTOR, bindPrimitiveControllers, bindTimeCounter, bindTimeCounters, refreshTimeCounter, refreshTimeCounters, setTimeCounterConfig, };
126
+ export * from "./components/index.js";
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/primitives/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ .card {
2
+ min-height: var(--height-xs4, 35px);
3
+ border-radius: var(--radius-lg, var(--tbf-radius, 0));
4
+ border: var(--border-width) solid var(--border-surface-1);
5
+ background: var(--background-page);
6
+ padding: 14px 14px 12px 14px;
7
+ overflow: hidden;
8
+
9
+ h2 {
10
+ margin: 0 0 10px 0;
11
+ font-size: 15px;
12
+ font-weight: 700;
13
+ }
14
+ }
15
+
16
+ .card-row {
17
+ min-height: 0;
18
+ border-radius: var(--radius-lg, var(--tbf-radius, 0));
19
+ border: var(--border-width) solid var(--border-surface-1);
20
+ background: transparent;
21
+ overflow: hidden;
22
+ display: flex;
23
+ flex-direction: column;
24
+ min-width: 0;
25
+ padding: 9px 12px;
26
+ transition: all var(--transition-2) ease;
27
+
28
+ &.excluded {
29
+ border-color: var(--border-surface-1);
30
+ }
31
+
32
+ &.selected {
33
+ background: var(--background-surface-1);
34
+ }
35
+
36
+ > * {
37
+ min-width: 0;
38
+ }
39
+ }
40
+
41
+ @media (hover: hover) and (pointer: fine) {
42
+ .card-row:hover {
43
+ background: var(--gray-900);
44
+ }
45
+ }
46
+
47
+ .card-body {
48
+ align-items: stretch;
49
+ min-width: 0;
50
+
51
+ > * {
52
+ min-width: 0;
53
+ }
54
+
55
+ > [aria-hidden="true"] {
56
+ flex: 0 0 auto;
57
+ }
58
+
59
+ > .column {
60
+ min-width: 0;
61
+ }
62
+
63
+ > .column > .inline-row:first-child {
64
+ align-items: flex-start;
65
+ flex-wrap: wrap;
66
+ min-width: 0;
67
+ }
68
+
69
+ > .column > .inline-row:first-child > :last-child:not(:first-child) {
70
+ flex: 0 0 auto;
71
+ }
72
+ }
73
+
74
+ .card-body-divider {
75
+ display: block;
76
+ align-self: stretch;
77
+ flex: 0 0 auto;
78
+ width: 1px;
79
+ min-width: 1px;
80
+ background: var(--border-surface-1);
81
+ border-radius: 999px;
82
+ opacity: 0.9;
83
+ }
84
+
85
+ .card-description {
86
+ align-items: center;
87
+ flex-wrap: wrap;
88
+ min-width: 0;
89
+
90
+ > * {
91
+ max-width: 100%;
92
+ }
93
+
94
+ > span:not(.pill),
95
+ > a:not(.pill) {
96
+ overflow-wrap: anywhere;
97
+ word-break: break-word;
98
+ }
99
+ }
100
+
101
+
102
+ @media (max-width: 640px) {
103
+ .card-description {
104
+ align-items: flex-start;
105
+ }
106
+ }
@@ -0,0 +1,195 @@
1
+ @use "sass:list";
2
+ @use "./variables" as *;
3
+
4
+ .btn {
5
+ --button-icon-color: var(--gray-300);
6
+ box-sizing: border-box;
7
+ height: 28px;
8
+ min-height: 28px;
9
+ width: auto;
10
+ max-width: 100%;
11
+ display: inline-flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ gap: 8px;
15
+ padding: 0 12px;
16
+ padding-block: 0;
17
+ border-radius: var(--radius-md, var(--tbf-radius, 0));
18
+ border: var(--border-width) solid var(--border-surface-2);
19
+ background: var(--gray-900);
20
+ color: var(--text-color);
21
+ cursor: pointer;
22
+ appearance: none;
23
+ -webkit-appearance: none;
24
+ font-family: inherit;
25
+ white-space: nowrap;
26
+ text-decoration: none;
27
+ font-size: 12px;
28
+ font-weight: 600;
29
+ line-height: 1.15;
30
+ vertical-align: middle;
31
+ transition:
32
+ color var(--transition-1) ease,
33
+ background var(--transition-1) ease,
34
+ border-color var(--transition-1) ease,
35
+ opacity var(--transition-1) ease;
36
+
37
+ &:hover,
38
+ &.active {
39
+ --button-icon-color: currentColor;
40
+ background: var(--gray-800);
41
+ border-color: var(--gray-700);
42
+ color: var(--gray-200);
43
+ }
44
+
45
+ &:disabled,
46
+ &[disabled],
47
+ &.disabled {
48
+ opacity: 0.55;
49
+ pointer-events: none;
50
+ }
51
+
52
+ &:not(.icon) {
53
+ > i,
54
+ > svg,
55
+ > i svg,
56
+ > [data-icon],
57
+ > [data-icon] svg {
58
+ color: var(--button-icon-color);
59
+ flex: 0 0 auto;
60
+ }
61
+
62
+ @each $name, $size in $tbf-primitive-button-sizes {
63
+ &.#{$name} {
64
+ height: list.nth($size, 1);
65
+ min-height: list.nth($size, 1);
66
+ padding-inline: list.nth($size, 2);
67
+ padding-block: 0;
68
+ font-size: list.nth($size, 3);
69
+ }
70
+ }
71
+ }
72
+
73
+ &.highlight {
74
+ --button-icon-color: var(--gray-800);
75
+ background: var(--gray-100);
76
+ color: var(--gray-950);
77
+ border-color: var(--gray-100);
78
+
79
+ &:hover,
80
+ &.active {
81
+ --button-icon-color: currentColor;
82
+ background: var(--gray-200);
83
+ border-color: var(--gray-100);
84
+ color: var(--gray-900);
85
+ }
86
+ }
87
+
88
+ &.red {
89
+ border-inline-color: var(--red-700);
90
+
91
+ &:hover,
92
+ &.active {
93
+ background: var(--red-800);
94
+ border-color: var(--red-700);
95
+ color: var(--gray-50-dark);
96
+ --button-icon-color: currentColor;
97
+ }
98
+ }
99
+
100
+ &.yellow {
101
+ border-inline-color: var(--yellow-700);
102
+
103
+ &:hover,
104
+ &.active {
105
+ --button-icon-color: currentColor;
106
+ background: var(--yellow-700);
107
+ border-color: var(--yellow-600);
108
+ color: var(--gray-50-dark);
109
+ }
110
+ }
111
+
112
+ &.green {
113
+ border-inline-color: var(--green-700);
114
+
115
+ &:hover,
116
+ &.active {
117
+ --button-icon-color: currentColor;
118
+ background: var(--green-800);
119
+ border-color: var(--green-700);
120
+ color: var(--gray-0-dark);
121
+ }
122
+ }
123
+
124
+ &.icon {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ width: 28px;
129
+ height: 28px;
130
+ min-width: 28px;
131
+ min-height: 28px;
132
+ gap: 0;
133
+ padding: 0;
134
+ font-size: 15px;
135
+ line-height: 1;
136
+ text-align: center;
137
+ position: relative;
138
+ overflow: visible;
139
+ flex-shrink: 0;
140
+
141
+ > i,
142
+ > svg,
143
+ > img {
144
+ display: block;
145
+ margin: 0;
146
+ flex: 0 0 auto;
147
+ font-size: inherit;
148
+ }
149
+
150
+ > svg,
151
+ > img,
152
+ > i svg {
153
+ width: 1em;
154
+ height: 1em;
155
+ }
156
+
157
+ > i::before {
158
+ display: block;
159
+ margin: 0;
160
+ line-height: 1;
161
+ text-align: center;
162
+ }
163
+
164
+ @each $name, $size in $tbf-primitive-icon-sizes {
165
+ &.#{$name} {
166
+ width: list.nth($size, 1);
167
+ height: list.nth($size, 1);
168
+ min-width: list.nth($size, 1);
169
+ min-height: list.nth($size, 1);
170
+ font-size: list.nth($size, 2);
171
+ }
172
+ }
173
+
174
+ &.transparent {
175
+ background-color: transparent;
176
+ }
177
+ }
178
+ }
179
+
180
+ .avatar {
181
+ border-radius: 50%;
182
+ object-fit: cover;
183
+ border: var(--border-width) solid var(--gray-700);
184
+
185
+ &.unknown {
186
+ background-color: var(--gray-700);
187
+ }
188
+
189
+ @each $name, $size in $tbf-primitive-avatar-sizes {
190
+ &.#{$name} {
191
+ width: $size;
192
+ height: $size;
193
+ }
194
+ }
195
+ }