@heymantle/litho 0.0.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 (140) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/dist/cjs/components/ActionList.js +267 -0
  4. package/dist/cjs/components/AnnouncementBar.js +73 -0
  5. package/dist/cjs/components/AppProvider.js +245 -0
  6. package/dist/cjs/components/Autocomplete.js +351 -0
  7. package/dist/cjs/components/Badge.js +234 -0
  8. package/dist/cjs/components/Banner.js +264 -0
  9. package/dist/cjs/components/Box.js +247 -0
  10. package/dist/cjs/components/Button.js +1018 -0
  11. package/dist/cjs/components/ButtonGroup.js +196 -0
  12. package/dist/cjs/components/Card.js +593 -0
  13. package/dist/cjs/components/Checkbox.js +175 -0
  14. package/dist/cjs/components/ChoiceList.js +160 -0
  15. package/dist/cjs/components/Collapsible.js +42 -0
  16. package/dist/cjs/components/ColorField.js +159 -0
  17. package/dist/cjs/components/ContextualSaveBar.js +53 -0
  18. package/dist/cjs/components/DatePicker.js +547 -0
  19. package/dist/cjs/components/Divider.js +50 -0
  20. package/dist/cjs/components/DropZone.js +547 -0
  21. package/dist/cjs/components/EmptyState.js +111 -0
  22. package/dist/cjs/components/Filters.js +874 -0
  23. package/dist/cjs/components/FooterHelp.js +48 -0
  24. package/dist/cjs/components/Form.js +44 -0
  25. package/dist/cjs/components/Frame.js +386 -0
  26. package/dist/cjs/components/FrameSaveBar.js +239 -0
  27. package/dist/cjs/components/Grid.js +151 -0
  28. package/dist/cjs/components/HorizontalStack.js +180 -0
  29. package/dist/cjs/components/Icon.js +346 -0
  30. package/dist/cjs/components/Image.js +191 -0
  31. package/dist/cjs/components/InlineError.js +57 -0
  32. package/dist/cjs/components/Label.js +78 -0
  33. package/dist/cjs/components/Layout.js +228 -0
  34. package/dist/cjs/components/LayoutSection.js +133 -0
  35. package/dist/cjs/components/Link.js +128 -0
  36. package/dist/cjs/components/List.js +69 -0
  37. package/dist/cjs/components/Listbox.js +211 -0
  38. package/dist/cjs/components/Loading.js +103 -0
  39. package/dist/cjs/components/Modal.js +449 -0
  40. package/dist/cjs/components/Navigation.js +331 -0
  41. package/dist/cjs/components/Page.js +529 -0
  42. package/dist/cjs/components/Pagination.js +109 -0
  43. package/dist/cjs/components/Pane.js +128 -0
  44. package/dist/cjs/components/Popover.js +365 -0
  45. package/dist/cjs/components/PopoverManager.js +34 -0
  46. package/dist/cjs/components/ProgressBar.js +124 -0
  47. package/dist/cjs/components/RadioButton.js +172 -0
  48. package/dist/cjs/components/RadioButtonCard.js +193 -0
  49. package/dist/cjs/components/RangeSlider.js +235 -0
  50. package/dist/cjs/components/ResourceList.js +105 -0
  51. package/dist/cjs/components/Select.js +300 -0
  52. package/dist/cjs/components/SkeletonText.js +130 -0
  53. package/dist/cjs/components/Spinner.js +72 -0
  54. package/dist/cjs/components/Table.js +1184 -0
  55. package/dist/cjs/components/Tabs.js +421 -0
  56. package/dist/cjs/components/Tag.js +165 -0
  57. package/dist/cjs/components/Text.js +274 -0
  58. package/dist/cjs/components/TextField.js +584 -0
  59. package/dist/cjs/components/Thumbnail.js +73 -0
  60. package/dist/cjs/components/TimePicker.js +23 -0
  61. package/dist/cjs/components/Tip.js +220 -0
  62. package/dist/cjs/components/Tooltip.js +431 -0
  63. package/dist/cjs/components/TopBar.js +210 -0
  64. package/dist/cjs/components/VerticalStack.js +161 -0
  65. package/dist/cjs/index.js +308 -0
  66. package/dist/cjs/styles/Table.js +591 -0
  67. package/dist/cjs/utilities/dates.js +339 -0
  68. package/dist/cjs/utilities/useIndexResourceState.js +175 -0
  69. package/dist/cjs/utilities/useMounted.js +67 -0
  70. package/dist/cjs/utilities/useTableScrollState.js +142 -0
  71. package/dist/esm/components/ActionList.js +216 -0
  72. package/dist/esm/components/AnnouncementBar.js +63 -0
  73. package/dist/esm/components/AppProvider.js +185 -0
  74. package/dist/esm/components/Autocomplete.js +300 -0
  75. package/dist/esm/components/Badge.js +225 -0
  76. package/dist/esm/components/Banner.js +254 -0
  77. package/dist/esm/components/Box.js +238 -0
  78. package/dist/esm/components/Button.js +967 -0
  79. package/dist/esm/components/ButtonGroup.js +137 -0
  80. package/dist/esm/components/Card.js +537 -0
  81. package/dist/esm/components/Checkbox.js +165 -0
  82. package/dist/esm/components/ChoiceList.js +145 -0
  83. package/dist/esm/components/Collapsible.js +32 -0
  84. package/dist/esm/components/ColorField.js +149 -0
  85. package/dist/esm/components/ContextualSaveBar.js +43 -0
  86. package/dist/esm/components/DatePicker.js +532 -0
  87. package/dist/esm/components/Divider.js +41 -0
  88. package/dist/esm/components/DropZone.js +537 -0
  89. package/dist/esm/components/EmptyState.js +101 -0
  90. package/dist/esm/components/Filters.js +823 -0
  91. package/dist/esm/components/FooterHelp.js +38 -0
  92. package/dist/esm/components/Form.js +35 -0
  93. package/dist/esm/components/Frame.js +376 -0
  94. package/dist/esm/components/FrameSaveBar.js +229 -0
  95. package/dist/esm/components/Grid.js +142 -0
  96. package/dist/esm/components/HorizontalStack.js +171 -0
  97. package/dist/esm/components/Icon.js +296 -0
  98. package/dist/esm/components/Image.js +141 -0
  99. package/dist/esm/components/InlineError.js +43 -0
  100. package/dist/esm/components/Label.js +63 -0
  101. package/dist/esm/components/Layout.js +164 -0
  102. package/dist/esm/components/LayoutSection.js +82 -0
  103. package/dist/esm/components/Link.js +119 -0
  104. package/dist/esm/components/List.js +61 -0
  105. package/dist/esm/components/Listbox.js +201 -0
  106. package/dist/esm/components/Loading.js +93 -0
  107. package/dist/esm/components/Modal.js +390 -0
  108. package/dist/esm/components/Navigation.js +321 -0
  109. package/dist/esm/components/Page.js +473 -0
  110. package/dist/esm/components/Pagination.js +99 -0
  111. package/dist/esm/components/Pane.js +118 -0
  112. package/dist/esm/components/Popover.js +350 -0
  113. package/dist/esm/components/PopoverManager.js +24 -0
  114. package/dist/esm/components/ProgressBar.js +114 -0
  115. package/dist/esm/components/RadioButton.js +157 -0
  116. package/dist/esm/components/RadioButtonCard.js +178 -0
  117. package/dist/esm/components/RangeSlider.js +225 -0
  118. package/dist/esm/components/ResourceList.js +95 -0
  119. package/dist/esm/components/Select.js +285 -0
  120. package/dist/esm/components/SkeletonText.js +120 -0
  121. package/dist/esm/components/Spinner.js +63 -0
  122. package/dist/esm/components/Table.js +1129 -0
  123. package/dist/esm/components/Tabs.js +366 -0
  124. package/dist/esm/components/Tag.js +151 -0
  125. package/dist/esm/components/Text.js +265 -0
  126. package/dist/esm/components/TextField.js +533 -0
  127. package/dist/esm/components/Thumbnail.js +63 -0
  128. package/dist/esm/components/TimePicker.js +13 -0
  129. package/dist/esm/components/Tip.js +169 -0
  130. package/dist/esm/components/Tooltip.js +380 -0
  131. package/dist/esm/components/TopBar.js +200 -0
  132. package/dist/esm/components/VerticalStack.js +152 -0
  133. package/dist/esm/index.js +61 -0
  134. package/dist/esm/styles/Table.js +581 -0
  135. package/dist/esm/utilities/dates.js +289 -0
  136. package/dist/esm/utilities/useIndexResourceState.js +158 -0
  137. package/dist/esm/utilities/useMounted.js +57 -0
  138. package/dist/esm/utilities/useTableScrollState.js +132 -0
  139. package/index.css +1137 -0
  140. package/package.json +53 -0
@@ -0,0 +1,967 @@
1
+ "use client";
2
+ function _array_like_to_array(arr, len) {
3
+ if (len == null || len > arr.length) len = arr.length;
4
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5
+ return arr2;
6
+ }
7
+ function _array_with_holes(arr) {
8
+ if (Array.isArray(arr)) return arr;
9
+ }
10
+ function _define_property(obj, key, value) {
11
+ if (key in obj) {
12
+ Object.defineProperty(obj, key, {
13
+ value: value,
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true
17
+ });
18
+ } else {
19
+ obj[key] = value;
20
+ }
21
+ return obj;
22
+ }
23
+ function _iterable_to_array_limit(arr, i) {
24
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
25
+ if (_i == null) return;
26
+ var _arr = [];
27
+ var _n = true;
28
+ var _d = false;
29
+ var _s, _e;
30
+ try {
31
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
32
+ _arr.push(_s.value);
33
+ if (i && _arr.length === i) break;
34
+ }
35
+ } catch (err) {
36
+ _d = true;
37
+ _e = err;
38
+ } finally{
39
+ try {
40
+ if (!_n && _i["return"] != null) _i["return"]();
41
+ } finally{
42
+ if (_d) throw _e;
43
+ }
44
+ }
45
+ return _arr;
46
+ }
47
+ function _non_iterable_rest() {
48
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
49
+ }
50
+ function _object_spread(target) {
51
+ for(var i = 1; i < arguments.length; i++){
52
+ var source = arguments[i] != null ? arguments[i] : {};
53
+ var ownKeys = Object.keys(source);
54
+ if (typeof Object.getOwnPropertySymbols === "function") {
55
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
56
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
57
+ }));
58
+ }
59
+ ownKeys.forEach(function(key) {
60
+ _define_property(target, key, source[key]);
61
+ });
62
+ }
63
+ return target;
64
+ }
65
+ function ownKeys(object, enumerableOnly) {
66
+ var keys = Object.keys(object);
67
+ if (Object.getOwnPropertySymbols) {
68
+ var symbols = Object.getOwnPropertySymbols(object);
69
+ if (enumerableOnly) {
70
+ symbols = symbols.filter(function(sym) {
71
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
72
+ });
73
+ }
74
+ keys.push.apply(keys, symbols);
75
+ }
76
+ return keys;
77
+ }
78
+ function _object_spread_props(target, source) {
79
+ source = source != null ? source : {};
80
+ if (Object.getOwnPropertyDescriptors) {
81
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
82
+ } else {
83
+ ownKeys(Object(source)).forEach(function(key) {
84
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
85
+ });
86
+ }
87
+ return target;
88
+ }
89
+ function _object_without_properties(source, excluded) {
90
+ if (source == null) return {};
91
+ var target = _object_without_properties_loose(source, excluded);
92
+ var key, i;
93
+ if (Object.getOwnPropertySymbols) {
94
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
95
+ for(i = 0; i < sourceSymbolKeys.length; i++){
96
+ key = sourceSymbolKeys[i];
97
+ if (excluded.indexOf(key) >= 0) continue;
98
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
99
+ target[key] = source[key];
100
+ }
101
+ }
102
+ return target;
103
+ }
104
+ function _object_without_properties_loose(source, excluded) {
105
+ if (source == null) return {};
106
+ var target = {};
107
+ var sourceKeys = Object.keys(source);
108
+ var key, i;
109
+ for(i = 0; i < sourceKeys.length; i++){
110
+ key = sourceKeys[i];
111
+ if (excluded.indexOf(key) >= 0) continue;
112
+ target[key] = source[key];
113
+ }
114
+ return target;
115
+ }
116
+ function _sliced_to_array(arr, i) {
117
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
118
+ }
119
+ function _unsupported_iterable_to_array(o, minLen) {
120
+ if (!o) return;
121
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
122
+ var n = Object.prototype.toString.call(o).slice(8, -1);
123
+ if (n === "Object" && o.constructor) n = o.constructor.name;
124
+ if (n === "Map" || n === "Set") return Array.from(n);
125
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
126
+ }
127
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
128
+ import React, { useContext, useMemo, useState } from "react";
129
+ import { tv } from "tailwind-variants";
130
+ import { ButtonGroupContext } from "./ButtonGroup.js";
131
+ import { ActionList, Icon, Popover, Spinner, Tooltip } from "../index.js";
132
+ import { CaretDownMinor } from "@shopify/polaris-icons";
133
+ import { DarkModeContext } from "./AppProvider.js";
134
+ var styles = tv({
135
+ base: "Litho-Button relative flex items-center justify-center rounded-md border border-transparent overflow-hidden",
136
+ variants: {
137
+ disabled: {
138
+ true: "cursor-default",
139
+ false: ""
140
+ },
141
+ loading: {
142
+ true: "cursor-default",
143
+ false: ""
144
+ },
145
+ fullWidth: {
146
+ true: "w-full",
147
+ false: ""
148
+ },
149
+ align: {
150
+ left: "justify-start",
151
+ center: "justify-center",
152
+ right: "justify-end"
153
+ },
154
+ disclosureLeft: {
155
+ true: "border-r-0",
156
+ false: ""
157
+ },
158
+ disclosureRight: {
159
+ true: "border-l-0",
160
+ false: ""
161
+ },
162
+ plain: {
163
+ true: "",
164
+ false: ""
165
+ },
166
+ link: {
167
+ true: "",
168
+ false: ""
169
+ },
170
+ rounded: {
171
+ true: "rounded-full",
172
+ false: ""
173
+ },
174
+ size: {
175
+ stepper: "min-h-3.5 rounded-sm",
176
+ small: "min-h-7 min-w-7",
177
+ medium: "min-h-8",
178
+ large: "min-h-8"
179
+ },
180
+ shadow: {
181
+ true: "shadow-btn",
182
+ false: ""
183
+ },
184
+ darkMode: {
185
+ true: "",
186
+ false: ""
187
+ },
188
+ bordered: {
189
+ true: "border-tint-2",
190
+ false: ""
191
+ }
192
+ },
193
+ compoundVariants: [
194
+ {
195
+ bordered: true,
196
+ plain: true,
197
+ class: "border-tint-2 dark:border-tint-alt-4"
198
+ },
199
+ {
200
+ disabled: true,
201
+ plain: false,
202
+ link: false,
203
+ highlight: false,
204
+ class: "border-btn-secondary-border"
205
+ },
206
+ {
207
+ loading: true,
208
+ plain: false,
209
+ link: false,
210
+ highlight: false,
211
+ class: "border-btn-secondary-border"
212
+ },
213
+ {
214
+ loading: false,
215
+ disabled: false,
216
+ class: "cursor-pointer"
217
+ },
218
+ {
219
+ primary: true,
220
+ plain: false,
221
+ link: false,
222
+ disclosureLeft: true,
223
+ class: "rounded-r-none"
224
+ },
225
+ {
226
+ primary: false,
227
+ plain: false,
228
+ link: false,
229
+ disclosureLeft: true,
230
+ class: "rounded-r-none"
231
+ },
232
+ {
233
+ primary: true,
234
+ plain: false,
235
+ link: false,
236
+ disclosureRight: true,
237
+ class: "rounded-l-none"
238
+ },
239
+ {
240
+ disclosureRight: true,
241
+ destructive: true,
242
+ class: "rounded-l-none border-l border-l-tint-8!"
243
+ },
244
+ {
245
+ darkMode: false,
246
+ disclosureRight: true,
247
+ primary: false,
248
+ plain: false,
249
+ link: false,
250
+ destructive: false,
251
+ highlight: false,
252
+ class: "rounded-l-none border-l border-l-tint-4!"
253
+ },
254
+ {
255
+ darkMode: false,
256
+ disclosureRight: true,
257
+ highlight: true,
258
+ class: "rounded-l-none border-l border-l-tint-4!"
259
+ },
260
+ {
261
+ darkMode: false,
262
+ disclosureRight: true,
263
+ primary: true,
264
+ class: "rounded-l-none border-l border-l-tint-alt-10!"
265
+ },
266
+ {
267
+ darkMode: true,
268
+ disclosureRight: true,
269
+ primary: false,
270
+ plain: false,
271
+ link: false,
272
+ destructive: false,
273
+ highlight: false,
274
+ class: "rounded-l-none border-l border-l-tint-alt-4!"
275
+ },
276
+ {
277
+ darkMode: true,
278
+ disclosureRight: true,
279
+ highlight: true,
280
+ class: "rounded-l-none border-l border-l-tint-alt-3!"
281
+ },
282
+ {
283
+ darkMode: true,
284
+ disclosureRight: true,
285
+ primary: true,
286
+ class: "rounded-l-none border-l border-l-tint-6!"
287
+ },
288
+ // Primary buttons
289
+ {
290
+ primary: true,
291
+ disabled: false,
292
+ loading: false,
293
+ class: "bg-btn-primary hover:bg-btn-primary-low active:bg-btn-primary-lower text-btn-primary-fg hover:text-btn-primary-fg-alt border-btn-primary-border hover:border-btn-primary-border-low active:border-btn-primary-border-low\n dark:outline-hidden dark:border-transparent dark:shadow-btn-dark dark:border-t-tint-alt-6 dark:hover:border-t-tint-alt-7 dark:active:border-t-tint-alt-8"
294
+ },
295
+ {
296
+ primary: true,
297
+ disabled: true,
298
+ class: "bg-btn-primary-disabled text-btn-primary-disabled-fg"
299
+ },
300
+ {
301
+ primary: true,
302
+ loading: true,
303
+ class: "bg-btn-primary-disabled text-btn-primary-disabled-fg"
304
+ },
305
+ // Secondary buttons
306
+ {
307
+ disabled: false,
308
+ loading: false,
309
+ primary: false,
310
+ plain: false,
311
+ link: false,
312
+ destructive: false,
313
+ highlight: false,
314
+ pressed: false,
315
+ class: "bg-btn-secondary hover:bg-btn-secondary-low active:bg-btn-secondary-lower text-btn-secondary-fg hover:text-btn-secondary-fg-alt border-btn-secondary-border hover:border-btn-secondary-border-low active:border-btn-secondary-border-low\n dark:outline-hidden dark:border-transparent dark:shadow-btn-dark dark:border-t-tint-alt-3 dark:hover:border-t-tint-alt-2 dark:active:border-t-tint-alt-2"
316
+ },
317
+ {
318
+ disabled: false,
319
+ loading: false,
320
+ primary: false,
321
+ plain: false,
322
+ link: false,
323
+ destructive: false,
324
+ highlight: false,
325
+ pressed: true,
326
+ class: "bg-btn-secondary hover:bg-btn-secondary-low active:bg-btn-secondary-lower text-btn-secondary-fg hover:text-btn-secondary-fg-alt border-btn-secondary-border hover:border-btn-secondary-border-low active:border-btn-secondary-border-low\n dark:outline-hidden dark:border-tint-10 dark:shadow-btn-pressed-dark dark:hover:border-tint-10 dark:active:border-tint-10"
327
+ },
328
+ {
329
+ disabled: true,
330
+ primary: false,
331
+ plain: false,
332
+ link: false,
333
+ destructive: false,
334
+ highlight: false,
335
+ class: "bg-btn-secondary-disabled text-btn-secondary-disabled-fg"
336
+ },
337
+ {
338
+ loading: true,
339
+ primary: false,
340
+ plain: false,
341
+ link: false,
342
+ destructive: false,
343
+ highlight: false,
344
+ class: "bg-btn-secondary-disabled text-btn-secondary-disabled-fg"
345
+ },
346
+ // Plain buttons
347
+ {
348
+ plain: true,
349
+ disabled: false,
350
+ loading: false,
351
+ bordered: false,
352
+ class: "bg-btn-plain hover:bg-btn-plain-low active:bg-btn-plain-lower text-btn-plain-fg hover:text-btn-plain-fg-alt border-btn-plain-border hover:border-btn-plain-border-low active:border-btn-plain-border-low"
353
+ },
354
+ {
355
+ plain: true,
356
+ disabled: false,
357
+ loading: false,
358
+ bordered: true,
359
+ class: "bg-btn-plain hover:bg-btn-plain-low active:bg-btn-plain-lower text-btn-plain-fg hover:text-btn-plain-fg-alt border-tint-4 hover:border-tint-5 active:border-tint-6"
360
+ },
361
+ {
362
+ plain: true,
363
+ disabled: true,
364
+ class: "bg-btn-plain-disabled text-btn-plain-disabled-fg"
365
+ },
366
+ {
367
+ plain: true,
368
+ loading: true,
369
+ class: "bg-btn-plain-disabled text-btn-plain-disabled-fg"
370
+ },
371
+ // Link buttons
372
+ {
373
+ link: true,
374
+ disabled: false,
375
+ loading: false,
376
+ class: "bg-btn-link hover:bg-btn-link-low active:bg-btn-link-lower text-btn-link-fg hover:text-btn-link-fg-alt border-btn-link-border hover:border-btn-link-border-low active:border-btn-link-border-low"
377
+ },
378
+ {
379
+ link: true,
380
+ disabled: true,
381
+ class: "bg-btn-link-disabled text-btn-link-disabled-fg"
382
+ },
383
+ {
384
+ link: true,
385
+ loading: true,
386
+ class: "bg-btn-link-disabled text-btn-link-disabled-fg"
387
+ },
388
+ // Destructive buttons
389
+ {
390
+ destructive: true,
391
+ disabled: false,
392
+ loading: false,
393
+ class: "bg-btn-destructive hover:bg-btn-destructive-low active:bg-btn-destructive-lower text-btn-destructive-fg hover:text-btn-destructive-fg-alt border-btn-destructive-border hover:border-btn-destructive-border-low active:border-btn-destructive-border-low"
394
+ },
395
+ {
396
+ destructive: true,
397
+ disabled: true,
398
+ class: "bg-btn-destructive-disabled text-btn-destructive-disabled-fg"
399
+ },
400
+ {
401
+ destructive: true,
402
+ loading: true,
403
+ class: "bg-btn-destructive-disabled text-btn-destructive-disabled-fg"
404
+ },
405
+ // Highlight buttons
406
+ {
407
+ highlight: true,
408
+ disabled: false,
409
+ loading: false,
410
+ class: "bg-btn-highlight hover:bg-btn-highlight-low active:bg-btn-highlight-lower text-btn-highlight-fg hover:text-btn-highlight-fg-alt border-btn-highlight-border hover:border-btn-highlight-border-low active:border-btn-highlight-border-low"
411
+ },
412
+ {
413
+ highlight: true,
414
+ disabled: true,
415
+ class: "bg-btn-highlight-disabled text-btn-highlight-disabled-fg"
416
+ },
417
+ {
418
+ highlight: true,
419
+ loading: true,
420
+ class: "bg-btn-highlight-disabled text-btn-highlight-disabled-fg"
421
+ }
422
+ ],
423
+ defaultVariants: {
424
+ disclosureLeft: false,
425
+ disclosureRight: false,
426
+ insideButtonGroup: false,
427
+ shadow: false,
428
+ darkMode: false,
429
+ bordered: false
430
+ }
431
+ });
432
+ var contentStyles = tv({
433
+ base: "Litho-Button__Content relative flex items-center justify-center gap-1",
434
+ variants: {
435
+ hasIcon: {
436
+ true: "",
437
+ false: ""
438
+ },
439
+ hasChildren: {
440
+ true: "",
441
+ false: ""
442
+ },
443
+ disclosure: {
444
+ true: "",
445
+ false: ""
446
+ },
447
+ size: {
448
+ small: "py-0.5",
449
+ large: "py-3",
450
+ medium: "py-1"
451
+ }
452
+ },
453
+ compoundVariants: [
454
+ {
455
+ size: "small",
456
+ iconOnly: true,
457
+ class: "!px-0.5"
458
+ },
459
+ {
460
+ size: "small",
461
+ hasIcon: false,
462
+ iconOnly: false,
463
+ class: "px-2"
464
+ },
465
+ {
466
+ size: "small",
467
+ hasIcon: true,
468
+ iconOnly: false,
469
+ class: "pl-1.5 pr-2"
470
+ },
471
+ {
472
+ size: "medium",
473
+ iconOnly: true,
474
+ class: "!px-1.25"
475
+ },
476
+ {
477
+ size: "large",
478
+ iconOnly: true,
479
+ class: "!px-3"
480
+ },
481
+ {
482
+ hasIcon: true,
483
+ hasChildren: true,
484
+ disclosure: false,
485
+ size: "large",
486
+ class: "pl-3 pr-4"
487
+ },
488
+ {
489
+ hasIcon: true,
490
+ hasChildren: true,
491
+ disclosure: true,
492
+ class: "pl-2 pr-1"
493
+ },
494
+ {
495
+ hasIcon: true,
496
+ hasChildren: true,
497
+ disclosure: false,
498
+ size: "medium",
499
+ class: "pl-2 pr-3"
500
+ },
501
+ {
502
+ hasIcon: false,
503
+ hasChildren: true,
504
+ disclosure: false,
505
+ class: "px-3"
506
+ },
507
+ {
508
+ hasIcon: false,
509
+ hasChildren: true,
510
+ disclosure: true,
511
+ class: "pl-2.5 pr-1"
512
+ }
513
+ ],
514
+ defaultVariants: {
515
+ disclosure: false,
516
+ hasIcon: false,
517
+ iconOnly: false,
518
+ hasChildren: true,
519
+ size: "medium"
520
+ }
521
+ });
522
+ var iconStyles = tv({
523
+ base: "Litho-Button__Icon"
524
+ });
525
+ var textStyles = tv({
526
+ base: "Litho-Button__Text whitespace-nowrap leading-5 font-medium",
527
+ variants: {
528
+ loading: {
529
+ true: "invisible"
530
+ },
531
+ disabled: {
532
+ true: "",
533
+ false: ""
534
+ },
535
+ primary: {
536
+ true: "dark:font-semibold",
537
+ false: ""
538
+ },
539
+ link: {
540
+ true: "",
541
+ false: ""
542
+ },
543
+ destructive: {
544
+ true: "",
545
+ false: ""
546
+ },
547
+ plain: {
548
+ true: "",
549
+ false: ""
550
+ },
551
+ highlight: {
552
+ true: "",
553
+ false: ""
554
+ }
555
+ },
556
+ compoundVariants: [
557
+ {
558
+ primary: true,
559
+ loading: false,
560
+ disabled: false,
561
+ class: "text-btn-primary-fg"
562
+ },
563
+ {
564
+ primary: true,
565
+ loading: true,
566
+ class: "text-btn-primary-disabled-fg"
567
+ },
568
+ {
569
+ primary: true,
570
+ disabled: true,
571
+ class: "text-btn-primary-disabled-fg"
572
+ },
573
+ {
574
+ loading: false,
575
+ disabled: false,
576
+ destructive: false,
577
+ primary: false,
578
+ plain: false,
579
+ link: false,
580
+ class: "text-btn-secondary-fg"
581
+ },
582
+ {
583
+ loading: false,
584
+ disabled: true,
585
+ destructive: false,
586
+ primary: false,
587
+ plain: false,
588
+ link: false,
589
+ class: "text-btn-secondary-disabled-fg"
590
+ },
591
+ {
592
+ loading: true,
593
+ disabled: false,
594
+ destructive: false,
595
+ primary: false,
596
+ plain: false,
597
+ link: false,
598
+ class: "text-btn-secondary-disabled-fg"
599
+ },
600
+ {
601
+ plain: true,
602
+ loading: false,
603
+ disabled: false,
604
+ class: "text-btn-plain-fg"
605
+ },
606
+ {
607
+ plain: true,
608
+ loading: true,
609
+ class: "text-btn-plain-disabled-fg"
610
+ },
611
+ {
612
+ plain: true,
613
+ disabled: true,
614
+ class: "text-btn-plain-disabled-fg"
615
+ },
616
+ {
617
+ link: true,
618
+ loading: false,
619
+ disabled: false,
620
+ class: "text-btn-link-fg"
621
+ },
622
+ {
623
+ link: true,
624
+ loading: true,
625
+ class: "text-btn-link-disabled-fg"
626
+ },
627
+ {
628
+ link: true,
629
+ disabled: true,
630
+ class: "text-btn-link-disabled-fg"
631
+ },
632
+ {
633
+ destructive: true,
634
+ loading: false,
635
+ disabled: false,
636
+ class: "text-btn-destructive-fg"
637
+ },
638
+ {
639
+ destructive: true,
640
+ loading: true,
641
+ class: "text-btn-destructive-disabled-fg"
642
+ },
643
+ {
644
+ destructive: true,
645
+ disabled: true,
646
+ class: "text-btn-destructive-disabled-fg"
647
+ },
648
+ {
649
+ highlight: true,
650
+ loading: false,
651
+ disabled: false,
652
+ class: "text-btn-highlight-fg"
653
+ },
654
+ {
655
+ highlight: true,
656
+ loading: true,
657
+ class: "text-btn-highlight-disabled-fg"
658
+ },
659
+ {
660
+ highlight: true,
661
+ disabled: true,
662
+ class: "text-btn-highlight-disabled-fg"
663
+ }
664
+ ],
665
+ defaultVariants: {
666
+ primary: false,
667
+ plain: false,
668
+ link: false,
669
+ destructive: false,
670
+ highlight: false,
671
+ loading: false,
672
+ disabled: false,
673
+ rounded: false
674
+ }
675
+ });
676
+ var connectedDisclosureStyles = tv({
677
+ base: "Litho-Button__ConnectedDisclosure flex flex-wrap-nowrap"
678
+ });
679
+ /**
680
+ * A Button component that renders a customizable button or link with various styles and states.
681
+ * The button can be configured with different variants, sizes, and can include icons, loading states,
682
+ * and connected disclosure actions.
683
+ *
684
+ * @component
685
+ *
686
+ * @param {Object} props - The properties for configuring the Button component.
687
+ * @param {string} [props.id] - Unique identifier for the button.
688
+ * @param {React.ReactNode} [props.children] - The content to display within the button.
689
+ * @param {string} [props.url] - URL to navigate to when clicked. If provided, renders as an anchor tag.
690
+ * @param {boolean} [props.disabled=false] - Whether the button is disabled.
691
+ * @param {boolean} [props.external] - Whether the URL should open in a new tab.
692
+ * @param {string} [props.target] - Target attribute for the anchor tag when URL is provided.
693
+ * @param {boolean} [props.submit] - Whether the button should act as a form submit button.
694
+ * @param {boolean} [props.loading=false] - Whether to show a loading spinner.
695
+ * @param {boolean} [props.pressed=false] - Whether the button appears pressed.
696
+ * @param {string} [props.accessibilityLabel] - Accessible label for screen readers.
697
+ * @param {string} [props.role] - ARIA role for the button.
698
+ * @param {string} [props.ariaControls] - ID of the element controlled by the button.
699
+ * @param {boolean} [props.ariaExpanded] - Whether the controlled element is expanded.
700
+ * @param {string} [props.ariaDescribedBy] - ID of the element that describes the button.
701
+ * @param {boolean} [props.ariaChecked] - Whether the button is checked (for toggle buttons).
702
+ * @param {React.Component} [props.icon] - Icon component to display within the button.
703
+ * @param {string} [props.iconColor='default'] - Color of the icon.
704
+ * @param {boolean} [props.primary=false] - Whether to show the primary button style.
705
+ * @param {boolean} [props.highlight=false] - Whether to show the highlight button style.
706
+ * @param {boolean} [props.link=false] - Whether to show a link style.
707
+ * @param {boolean} [props.destructive=false] - Whether to show destructive styling.
708
+ * @param {boolean} [props.disclosure=false] - Whether to show a disclosure arrow.
709
+ * @param {boolean} [props.disclosureRight=false] - Whether to show the disclosure on the right.
710
+ * @param {boolean} [props.plain=false] - Whether to show plain styling without background.
711
+ * @param {string} [props.size='medium'] - Size of the button ('small', 'medium', 'large', 'stepper').
712
+ * @param {boolean} [props.fullWidth] - Whether the button should take full width.
713
+ * @param {string} [props.align='center'] - Alignment of the button content ('left', 'center', 'right').
714
+ * @param {string} [props.tooltip] - Tooltip to show when hovering over the button.
715
+ * @param {Object} [props.connectedDisclosure] - Configuration for connected disclosure menu.
716
+ * @param {Array} [props.connectedDisclosure.actions] - Actions to show in the disclosure menu.
717
+ * @param {string} [props.className] - Additional CSS classes for the button.
718
+ * @param {string} [props.contentClassName] - Additional CSS classes for the button content.
719
+ * @param {boolean} [props.rounded] - Whether to show fully rounded corners.
720
+ * @param {Function} [props.onClick] - Callback when the button is clicked.
721
+ * @param {Function} [props.onMouseDown] - Callback when the mouse is pressed on the button.
722
+ *
723
+ * @returns {JSX.Element} The rendered Button component.
724
+ *
725
+ * @example
726
+ * // Basic button
727
+ * <Button onClick={() => console.log('Clicked')}>
728
+ * Click me
729
+ * </Button>
730
+ *
731
+ * @example
732
+ * // Primary button with icon and loading state
733
+ * <Button
734
+ * primary
735
+ * loading={isLoading}
736
+ * icon={SaveMinor}
737
+ * onClick={handleSave}
738
+ * >
739
+ * Save changes
740
+ * </Button>
741
+ *
742
+ * @example
743
+ * // Button with connected disclosure
744
+ * <Button
745
+ * connectedDisclosure={{
746
+ * actions: [
747
+ * { content: 'Option 1', onAction: () => {} },
748
+ * { content: 'Option 2', onAction: () => {} }
749
+ * ]
750
+ * }}
751
+ * >
752
+ * More actions
753
+ * </Button>
754
+ */ function Button() {
755
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
756
+ var darkMode = useContext(DarkModeContext).darkMode;
757
+ var _useState = _sliced_to_array(useState(false), 2), showConnectedDisclosurePopover = _useState[0], setShowConnectedDisclosurePopover = _useState[1];
758
+ var id = props.id, children = props.children, url = props.url, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, external = props.external, target = props.target, submit = props.submit, _props_loading = props.loading, loading = _props_loading === void 0 ? false : _props_loading, _props_pressed = props.pressed, pressed = _props_pressed === void 0 ? false : _props_pressed, accessibilityLabel = props.accessibilityLabel, role = props.role, ariaControls = props.ariaControls, ariaExpanded = props.ariaExpanded, ariaDescribedBy = props.ariaDescribedBy, ariaChecked = props.ariaChecked, icon = props.icon, _iconColor = props.iconColor, _props_bordered = props.bordered, bordered = _props_bordered === void 0 ? false : _props_bordered, _props_primary = props.primary, primary = _props_primary === void 0 ? false : _props_primary, _props_highlight = props.highlight, highlight = _props_highlight === void 0 ? false : _props_highlight, _props_link = props.link, link = _props_link === void 0 ? false : _props_link, _props_destructive = props.destructive, destructive = _props_destructive === void 0 ? false : _props_destructive, _props_disclosure = props.disclosure, disclosure = _props_disclosure === void 0 ? false : _props_disclosure, _props_disclosureRight = props.disclosureRight, disclosureRight = _props_disclosureRight === void 0 ? false : _props_disclosureRight, _props_plain = props.plain, plain = _props_plain === void 0 ? false : _props_plain, _props_size = props.size, size = _props_size === void 0 ? "medium" : _props_size, fullWidth = props.fullWidth, _props_align = props.align, align = _props_align === void 0 ? "center" : _props_align, connectedDisclosure = props.connectedDisclosure, className = props.className, contentClassName = props.contentClassName, rounded = props.rounded, onClick = props.onClick, onMouseDown = props.onMouseDown, tooltip = props.tooltip, _props_tooltipAlignment = props.tooltipAlignment, tooltipAlignment = _props_tooltipAlignment === void 0 ? "right" : _props_tooltipAlignment, _props_tooltipPosition = props.tooltipPosition, tooltipPosition = _props_tooltipPosition === void 0 ? "above" : _props_tooltipPosition, shadow = props.shadow, restProps = _object_without_properties(props, [
759
+ "id",
760
+ "children",
761
+ "url",
762
+ "disabled",
763
+ "external",
764
+ "target",
765
+ "submit",
766
+ "loading",
767
+ "pressed",
768
+ "accessibilityLabel",
769
+ "role",
770
+ "ariaControls",
771
+ "ariaExpanded",
772
+ "ariaDescribedBy",
773
+ "ariaChecked",
774
+ "icon",
775
+ "iconColor",
776
+ "bordered",
777
+ "primary",
778
+ "highlight",
779
+ "link",
780
+ "destructive",
781
+ "disclosure",
782
+ "disclosureRight",
783
+ "plain",
784
+ "size",
785
+ "fullWidth",
786
+ "align",
787
+ "connectedDisclosure",
788
+ "className",
789
+ "contentClassName",
790
+ "rounded",
791
+ "onClick",
792
+ "onMouseDown",
793
+ "tooltip",
794
+ "tooltipAlignment",
795
+ "tooltipPosition",
796
+ "shadow"
797
+ ]);
798
+ var hasIcon = !!icon;
799
+ var hasChildren = !!children;
800
+ var insideButtonGroup = useContext(ButtonGroupContext);
801
+ var base = disabled || loading ? "-disabled-icon" : "-icon";
802
+ var iconColorMap = {
803
+ primary: "btn-primary".concat(base),
804
+ secondary: "btn-secondary".concat(base),
805
+ plain: "btn-plain".concat(base),
806
+ link: "btn-link".concat(base),
807
+ destructive: "btn-destructive".concat(base),
808
+ highlight: "btn-highlight".concat(base),
809
+ default: "btn-secondary".concat(base)
810
+ };
811
+ var iconColor = iconColorMap[primary ? "primary" : plain ? "plain" : link ? "link" : destructive ? "destructive" : highlight ? "highlight" : "default"];
812
+ var iconOnly = hasIcon && !hasChildren;
813
+ var connectedDisclosureActions = (connectedDisclosure === null || connectedDisclosure === void 0 ? void 0 : connectedDisclosure.actions) || [];
814
+ var showConnectedDisclosure = connectedDisclosure && connectedDisclosureActions.length > 0;
815
+ var classes = styles({
816
+ primary: primary,
817
+ plain: plain,
818
+ link: link,
819
+ destructive: destructive,
820
+ highlight: highlight,
821
+ insideButtonGroup: insideButtonGroup,
822
+ loading: loading,
823
+ disabled: disabled,
824
+ fullWidth: fullWidth,
825
+ pressed: pressed,
826
+ disclosureLeft: showConnectedDisclosure,
827
+ disclosureRight: disclosureRight,
828
+ rounded: rounded,
829
+ size: size,
830
+ shadow: shadow,
831
+ darkMode: darkMode,
832
+ bordered: bordered,
833
+ align: align
834
+ });
835
+ var contentClasses = contentStyles({
836
+ disclosure: disclosure,
837
+ hasIcon: hasIcon,
838
+ hasChildren: hasChildren,
839
+ size: size,
840
+ iconOnly: iconOnly
841
+ });
842
+ var iconClasses = iconStyles();
843
+ var textClasses = textStyles({
844
+ primary: primary,
845
+ plain: plain,
846
+ link: link,
847
+ destructive: destructive,
848
+ highlight: highlight,
849
+ pressed: pressed,
850
+ loading: loading,
851
+ disabled: disabled
852
+ });
853
+ var connectedDisclosureClasses = connectedDisclosureStyles({
854
+ primary: primary,
855
+ plain: plain,
856
+ link: link,
857
+ destructive: destructive,
858
+ highlight: highlight,
859
+ loading: loading,
860
+ disabled: disabled
861
+ });
862
+ var Element = url ? "a" : "button";
863
+ var ConnectedDisclosureWrapper = function(param) {
864
+ var condition = param.condition, wrapper = param.wrapper, children = param.children;
865
+ return condition ? wrapper(children) : children;
866
+ };
867
+ var memoizedIcon = useMemo(function() {
868
+ return icon;
869
+ }, [
870
+ icon
871
+ ]);
872
+ var content = /*#__PURE__*/ _jsxs(Element, _object_spread_props(_object_spread({
873
+ id: id,
874
+ href: url,
875
+ target: target ? target : external ? "_blank" : undefined,
876
+ className: "".concat(classes).concat(className ? " ".concat(className) : ""),
877
+ type: submit ? "submit" : undefined,
878
+ onClick: disabled || loading ? undefined : onClick,
879
+ onMouseDown: onMouseDown
880
+ }, restProps), {
881
+ children: [
882
+ pressed && /*#__PURE__*/ _jsx("div", {
883
+ className: "Litho-Button__Pressed absolute inset-0 bg-tint-10 pointer-events-none"
884
+ }),
885
+ /*#__PURE__*/ _jsxs("span", {
886
+ className: "".concat(contentClasses).concat(contentClassName ? " ".concat(contentClassName) : ""),
887
+ children: [
888
+ loading && /*#__PURE__*/ _jsx("span", {
889
+ className: "Litho-Button__Loading absolute inset-0 flex items-center justify-center",
890
+ children: /*#__PURE__*/ _jsx(Spinner, {
891
+ size: "small",
892
+ color: "subdued"
893
+ })
894
+ }),
895
+ memoizedIcon && /*#__PURE__*/ _jsx("span", {
896
+ className: iconClasses,
897
+ children: /*#__PURE__*/ _jsx(Icon, {
898
+ source: memoizedIcon,
899
+ color: disabled ? "disabled" : _iconColor || iconColor
900
+ })
901
+ }),
902
+ hasChildren && /*#__PURE__*/ _jsx("span", {
903
+ className: textClasses,
904
+ children: children
905
+ }),
906
+ disclosure && /*#__PURE__*/ _jsx("span", {
907
+ className: "Litho-Button__DisclosureIcon relative -left-0.5",
908
+ children: /*#__PURE__*/ _jsx(Icon, {
909
+ source: CaretDownMinor,
910
+ color: disabled ? "disabled" : _iconColor || iconColor
911
+ })
912
+ })
913
+ ]
914
+ })
915
+ ]
916
+ }));
917
+ var contentWithDisclosure = /*#__PURE__*/ _jsxs(ConnectedDisclosureWrapper, {
918
+ condition: showConnectedDisclosure,
919
+ wrapper: function(children) {
920
+ return /*#__PURE__*/ _jsx("div", {
921
+ className: connectedDisclosureClasses,
922
+ children: children
923
+ });
924
+ },
925
+ children: [
926
+ content,
927
+ showConnectedDisclosure && /*#__PURE__*/ _jsx(Popover, {
928
+ active: showConnectedDisclosurePopover,
929
+ onClose: function() {
930
+ return setShowConnectedDisclosurePopover(false);
931
+ },
932
+ preferredAlignment: "right",
933
+ preferredPosition: "below",
934
+ activator: /*#__PURE__*/ _jsx(Button, {
935
+ primary: primary,
936
+ plain: plain,
937
+ link: link,
938
+ destructive: destructive,
939
+ highlight: highlight,
940
+ icon: CaretDownMinor,
941
+ disclosureRight: true,
942
+ iconColor: _iconColor,
943
+ className: primary ? "border-l border-l-tint-alt-6!" : undefined,
944
+ onClick: function() {
945
+ return setShowConnectedDisclosurePopover(!showConnectedDisclosurePopover);
946
+ }
947
+ }),
948
+ children: /*#__PURE__*/ _jsx(ActionList, {
949
+ items: connectedDisclosureActions,
950
+ onActionAnyItem: function() {
951
+ return setShowConnectedDisclosurePopover(false);
952
+ }
953
+ })
954
+ })
955
+ ]
956
+ });
957
+ if (!!tooltip) {
958
+ return /*#__PURE__*/ _jsx(Tooltip, {
959
+ content: tooltip,
960
+ alignment: tooltipAlignment,
961
+ preferredPosition: tooltipPosition,
962
+ children: showConnectedDisclosure ? contentWithDisclosure : content
963
+ });
964
+ }
965
+ return showConnectedDisclosure ? contentWithDisclosure : content;
966
+ }
967
+ export default Button;