@trebired/frontend 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/CHANGELOG.md +5 -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 +22 -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 +76 -3
  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 +7 -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 +115 -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 +203 -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 +22 -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 +76 -3
  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 +7 -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 +115 -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 +203 -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,203 @@
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 ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
6
+ actionButton?: SubmitActionButtonOptions;
7
+ actionTrigger?: BindActionTriggerOptions;
8
+ variant?: "solid";
9
+ };
10
+ type CardProps = HTMLAttributes<HTMLDivElement> & {
11
+ actionTrigger?: BindActionTriggerOptions;
12
+ };
13
+ type ActionFormProps = Omit<FormHTMLAttributes<HTMLFormElement>, "action" | "children" | "method"> & {
14
+ action: string;
15
+ body?: "json";
16
+ children?: ReactNode;
17
+ ignoreResponseAction?: boolean;
18
+ lifecycle?: boolean;
19
+ method?: string;
20
+ success?: "soft-reload";
21
+ successTab?: string;
22
+ };
23
+ type CsrfInputProps = {
24
+ optional?: boolean;
25
+ token: unknown;
26
+ };
27
+ type AvatarProps = {
28
+ alt?: string;
29
+ className?: string;
30
+ height?: string | number;
31
+ size?: string;
32
+ src?: string;
33
+ style?: CSSProperties;
34
+ width?: string | number;
35
+ };
36
+ type PillProps = HTMLAttributes<HTMLSpanElement> & {
37
+ children?: ReactNode;
38
+ };
39
+ type SeparatorProps = {
40
+ className?: string;
41
+ orientation?: "horizontal" | "vertical";
42
+ visible?: boolean;
43
+ };
44
+ type list_props<T = unknown> = {
45
+ className?: string;
46
+ getItemProps?: (item: T, index: number) => Record<string, unknown>;
47
+ getKey?: (item: T, index: number) => string | number;
48
+ itemClassName?: string;
49
+ items?: T[];
50
+ renderItem: (item: T, index: number) => ReactNode;
51
+ style?: CSSProperties;
52
+ };
53
+ type key_value_row = {
54
+ attributes?: string;
55
+ format?: "time";
56
+ id?: string;
57
+ label?: string;
58
+ label_attributes?: string;
59
+ value?: unknown;
60
+ value_attributes?: string;
61
+ value_html?: string;
62
+ value_node?: ReactNode;
63
+ };
64
+ type key_value_group = {
65
+ rows?: key_value_row[];
66
+ title?: string;
67
+ };
68
+ type key_value_props = {
69
+ card?: boolean;
70
+ className?: string;
71
+ groups?: key_value_group[];
72
+ layout?: "column" | "inline";
73
+ rowClassName?: string;
74
+ rows?: key_value_row[];
75
+ rowsClassName?: string;
76
+ separated?: boolean;
77
+ };
78
+ type masonry_props = HTMLAttributes<HTMLDivElement> & {
79
+ columns?: ReactNode[];
80
+ };
81
+ type bar_props = {
82
+ card?: boolean;
83
+ hidden?: boolean;
84
+ label?: string;
85
+ meta?: string;
86
+ percent?: number;
87
+ wrapperAttributes?: string;
88
+ };
89
+ type circle_props = {
90
+ size?: string;
91
+ };
92
+ type StatusDotTone = "blue" | "cyan" | "error" | "gray" | "green" | "info" | "muted" | "purple" | "red" | "success" | "warning" | "yellow";
93
+ type StatusDotSize = "xs" | "sm" | "md" | "lg";
94
+ type StatusDotProps = {
95
+ ariaHidden?: boolean;
96
+ className?: string;
97
+ size?: StatusDotSize;
98
+ title?: string;
99
+ tone?: StatusDotTone;
100
+ };
101
+ type TimeCounterProps = {
102
+ alwaysRender?: boolean;
103
+ bare?: boolean;
104
+ className?: string;
105
+ count?: number | string;
106
+ end?: string;
107
+ id?: string;
108
+ live?: boolean;
109
+ mode?: "count";
110
+ reloadOnZero?: boolean;
111
+ remaining?: boolean;
112
+ start?: string;
113
+ unstyled?: boolean;
114
+ };
115
+ type CardSegment = {
116
+ className?: string;
117
+ kind?: string;
118
+ value?: ReactNode;
119
+ };
120
+ type CardSegmentRow = {
121
+ className?: string;
122
+ dataAttrs?: Record<string, string>;
123
+ segments?: CardSegment[];
124
+ };
125
+ type CardSegmentsProps = {
126
+ rows?: CardSegmentRow[];
127
+ };
128
+ type BodyProps = {
129
+ actionTrigger?: BindActionTriggerOptions;
130
+ actions?: ReactNode;
131
+ actionsClassName?: string;
132
+ bodyClassName?: string;
133
+ className?: string;
134
+ dataAttrs?: Record<string, unknown>;
135
+ extra?: ReactNode;
136
+ icon?: ReactNode;
137
+ live?: {
138
+ id: string;
139
+ kind: string;
140
+ };
141
+ meta?: ReactNode;
142
+ search?: Record<string, unknown>;
143
+ segments?: ReactNode;
144
+ select?: {
145
+ buttonType?: "button" | "reset" | "submit";
146
+ disabled?: boolean;
147
+ selected?: boolean;
148
+ value?: string;
149
+ };
150
+ showDivider?: boolean;
151
+ subtitle?: ReactNode;
152
+ subtitleClassName?: string;
153
+ title: ReactNode;
154
+ titleAttrs?: Record<string, string>;
155
+ titleClassName?: string;
156
+ titleWidthFit?: boolean;
157
+ type?: {
158
+ actions?: boolean;
159
+ divider?: boolean;
160
+ icon?: boolean;
161
+ segments?: boolean;
162
+ titleMeta?: boolean;
163
+ };
164
+ width?: "fit" | "full";
165
+ };
166
+ type SelectCardItem = {
167
+ attrs?: Record<string, unknown>;
168
+ buttonType?: "button" | "reset" | "submit";
169
+ className?: string;
170
+ content?: ReactNode;
171
+ description?: ReactNode;
172
+ details?: ReactNode;
173
+ disabled?: boolean;
174
+ iconSpec?: string;
175
+ id?: string;
176
+ selected?: boolean;
177
+ title?: ReactNode;
178
+ titleMeta?: ReactNode;
179
+ value?: string;
180
+ };
181
+ type SelectCardsProps = {
182
+ attrs?: Record<string, unknown>;
183
+ className?: string;
184
+ icon?: boolean;
185
+ items: SelectCardItem[];
186
+ layout?: "column" | "grid";
187
+ };
188
+ type CardItemProps = {
189
+ actionTrigger?: BindActionTriggerOptions;
190
+ className?: string;
191
+ dataAttrs?: Record<string, string>;
192
+ extraHtml?: string;
193
+ search?: Record<string, unknown>;
194
+ segmentRows?: CardSegmentRow[];
195
+ statusHtml?: string;
196
+ title?: ReactNode;
197
+ titleMetaHtml?: string;
198
+ };
199
+ type primitive_action_form_props = ActionFormProps;
200
+ type primitive_button_props = ButtonProps;
201
+ type primitive_card_props = CardProps;
202
+ 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, };
203
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/primitives/components/types.ts"],"names":[],"mappings":"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"}
@@ -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
+ }