@plastic-js/tsumiki 0.1.22 → 0.1.24

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 (199) hide show
  1. package/README.md +838 -65
  2. package/dist/components/Accordion.js +93 -4
  3. package/dist/components/Avatar.js +96 -4
  4. package/dist/components/BottomSheet.js +131 -0
  5. package/dist/components/Button.js +194 -0
  6. package/dist/components/CardNumberInput.js +28 -44
  7. package/dist/components/Carousel.js +71 -5
  8. package/dist/components/Checkbox.js +178 -4
  9. package/dist/components/Clipboard.js +135 -5
  10. package/dist/components/CloseButton.js +97 -0
  11. package/dist/components/Collapsible.js +22 -4
  12. package/dist/components/ColorPicker.js +327 -4
  13. package/dist/components/Combobox.js +86 -13
  14. package/dist/components/ConfirmDialog.js +174 -19
  15. package/dist/components/DateInput.js +437 -5
  16. package/dist/components/{DatePickerMobile/wheel.js → DateWheel.js} +1 -3
  17. package/dist/components/Dialog.js +214 -110
  18. package/dist/components/Drawer.js +169 -4
  19. package/dist/components/Field.js +121 -5
  20. package/dist/components/Fieldset.js +64 -5
  21. package/dist/components/FileUpload.js +181 -4
  22. package/dist/components/FocusTrap.js +0 -2
  23. package/dist/components/Icon.js +32 -17
  24. package/dist/components/Input.js +211 -0
  25. package/dist/components/Listbox.js +47 -4
  26. package/dist/components/Menu.js +99 -4
  27. package/dist/components/MoneyInput.js +33 -85
  28. package/dist/components/NumberInput.js +117 -4
  29. package/dist/components/Pagination.js +91 -5
  30. package/dist/components/Popover.js +123 -4
  31. package/dist/components/Portal.js +0 -2
  32. package/dist/components/Presence.js +0 -2
  33. package/dist/components/Progress.js +107 -4
  34. package/dist/components/RadioGroup.js +104 -4
  35. package/dist/components/RatingGroup.js +75 -4
  36. package/dist/components/SearchInput.js +60 -55
  37. package/dist/components/Select.js +428 -5
  38. package/dist/components/SelectPc.js +239 -0
  39. package/dist/components/SignaturePad.js +77 -4
  40. package/dist/components/Skeleton.js +2 -4
  41. package/dist/components/Slider.js +112 -4
  42. package/dist/components/Spinner.js +41 -0
  43. package/dist/components/Splitter.js +51 -4
  44. package/dist/components/Steps.js +259 -4
  45. package/dist/components/SwipeReveal.js +2 -4
  46. package/dist/components/Switch.js +147 -4
  47. package/dist/components/Tabs.js +80 -4
  48. package/dist/components/TagsInput.js +128 -4
  49. package/dist/components/Toast.js +174 -4
  50. package/dist/components/Toggle.js +39 -4
  51. package/dist/components/ToggleGroup.js +103 -4
  52. package/dist/components/Tour.js +63 -4
  53. package/dist/components/TreeView.js +113 -4
  54. package/dist/index.js +44 -45
  55. package/dist/tsumiki.css +1 -0
  56. package/docs/api.md +670 -0
  57. package/docs/component-api-pattern.md +362 -0
  58. package/package.json +16 -6
  59. package/src/styles/color.css +112 -0
  60. package/src/styles/index.css +1 -0
  61. package/src/styles/radius.css +27 -0
  62. package/src/styles/reset.css +111 -0
  63. package/src/styles/shadow.css +5 -0
  64. package/src/styles/sizing.css +59 -0
  65. package/src/styles/spacing.css +9 -0
  66. package/src/styles/theme.css +38 -0
  67. package/src/styles/tokens.css +22 -0
  68. package/src/styles/transition.css +5 -0
  69. package/src/styles/typography.css +8 -0
  70. package/dist/components/Accordion.js.map +0 -1
  71. package/dist/components/Avatar.js.map +0 -1
  72. package/dist/components/CardNumberInput.js.map +0 -1
  73. package/dist/components/Carousel.js.map +0 -1
  74. package/dist/components/Checkbox.js.map +0 -1
  75. package/dist/components/Clipboard.js.map +0 -1
  76. package/dist/components/Collapsible.js.map +0 -1
  77. package/dist/components/ColorPicker.js.map +0 -1
  78. package/dist/components/Combobox.js.map +0 -1
  79. package/dist/components/ConfirmDialog.js.map +0 -1
  80. package/dist/components/DateInput.js.map +0 -1
  81. package/dist/components/DatePicker.js +0 -7
  82. package/dist/components/DatePicker.js.map +0 -1
  83. package/dist/components/DatePickerMobile/index.js +0 -479
  84. package/dist/components/DatePickerMobile/index.js.map +0 -1
  85. package/dist/components/DatePickerMobile/wheel.js.map +0 -1
  86. package/dist/components/Dialog.js.map +0 -1
  87. package/dist/components/Drawer.js.map +0 -1
  88. package/dist/components/Field.js.map +0 -1
  89. package/dist/components/Fieldset.js.map +0 -1
  90. package/dist/components/FileUpload.js.map +0 -1
  91. package/dist/components/FilterableSelect.js +0 -210
  92. package/dist/components/FilterableSelect.js.map +0 -1
  93. package/dist/components/FilterableSelectMobile.js +0 -167
  94. package/dist/components/FilterableSelectMobile.js.map +0 -1
  95. package/dist/components/FocusTrap.js.map +0 -1
  96. package/dist/components/HoverCard.js +0 -7
  97. package/dist/components/HoverCard.js.map +0 -1
  98. package/dist/components/Icon.js.map +0 -1
  99. package/dist/components/Listbox.js.map +0 -1
  100. package/dist/components/Menu.js.map +0 -1
  101. package/dist/components/MoneyInput.js.map +0 -1
  102. package/dist/components/NumberInput.js.map +0 -1
  103. package/dist/components/Pagination.js.map +0 -1
  104. package/dist/components/Popover.js.map +0 -1
  105. package/dist/components/Portal.js.map +0 -1
  106. package/dist/components/Presence.js.map +0 -1
  107. package/dist/components/Progress.js.map +0 -1
  108. package/dist/components/RadioGroup.js.map +0 -1
  109. package/dist/components/RatingGroup.js.map +0 -1
  110. package/dist/components/SearchInput.js.map +0 -1
  111. package/dist/components/Select.js.map +0 -1
  112. package/dist/components/SelectMobile/anatomy.js +0 -10
  113. package/dist/components/SelectMobile/anatomy.js.map +0 -1
  114. package/dist/components/SelectMobile/index.js +0 -310
  115. package/dist/components/SelectMobile/index.js.map +0 -1
  116. package/dist/components/SignaturePad.js.map +0 -1
  117. package/dist/components/Skeleton.js.map +0 -1
  118. package/dist/components/Slider.js.map +0 -1
  119. package/dist/components/Splitter.js.map +0 -1
  120. package/dist/components/Steps.js.map +0 -1
  121. package/dist/components/SwipeReveal.js.map +0 -1
  122. package/dist/components/Switch.js.map +0 -1
  123. package/dist/components/Tabs.js.map +0 -1
  124. package/dist/components/TagsInput.js.map +0 -1
  125. package/dist/components/Toast.js.map +0 -1
  126. package/dist/components/Toggle.js.map +0 -1
  127. package/dist/components/ToggleGroup.js.map +0 -1
  128. package/dist/components/Tooltip.js +0 -7
  129. package/dist/components/Tooltip.js.map +0 -1
  130. package/dist/components/Tour.js.map +0 -1
  131. package/dist/components/TreeView.js.map +0 -1
  132. package/dist/node_modules/framesync/dist/es/create-render-step.js +0 -54
  133. package/dist/node_modules/framesync/dist/es/create-render-step.js.map +0 -1
  134. package/dist/node_modules/framesync/dist/es/index.js +0 -61
  135. package/dist/node_modules/framesync/dist/es/index.js.map +0 -1
  136. package/dist/node_modules/framesync/dist/es/on-next-frame.js +0 -8
  137. package/dist/node_modules/framesync/dist/es/on-next-frame.js.map +0 -1
  138. package/dist/node_modules/hey-listen/dist/hey-listen.es.js +0 -15
  139. package/dist/node_modules/hey-listen/dist/hey-listen.es.js.map +0 -1
  140. package/dist/node_modules/popmotion/dist/es/animations/generators/decay.js +0 -24
  141. package/dist/node_modules/popmotion/dist/es/animations/generators/decay.js.map +0 -1
  142. package/dist/node_modules/popmotion/dist/es/animations/generators/keyframes.js +0 -40
  143. package/dist/node_modules/popmotion/dist/es/animations/generators/keyframes.js.map +0 -1
  144. package/dist/node_modules/popmotion/dist/es/animations/generators/spring.js +0 -96
  145. package/dist/node_modules/popmotion/dist/es/animations/generators/spring.js.map +0 -1
  146. package/dist/node_modules/popmotion/dist/es/animations/index.js +0 -94
  147. package/dist/node_modules/popmotion/dist/es/animations/index.js.map +0 -1
  148. package/dist/node_modules/popmotion/dist/es/animations/inertia.js +0 -74
  149. package/dist/node_modules/popmotion/dist/es/animations/inertia.js.map +0 -1
  150. package/dist/node_modules/popmotion/dist/es/animations/utils/detect-animation-from-options.js +0 -21
  151. package/dist/node_modules/popmotion/dist/es/animations/utils/detect-animation-from-options.js.map +0 -1
  152. package/dist/node_modules/popmotion/dist/es/animations/utils/elapsed.js +0 -14
  153. package/dist/node_modules/popmotion/dist/es/animations/utils/elapsed.js.map +0 -1
  154. package/dist/node_modules/popmotion/dist/es/animations/utils/find-spring.js +0 -68
  155. package/dist/node_modules/popmotion/dist/es/animations/utils/find-spring.js.map +0 -1
  156. package/dist/node_modules/popmotion/dist/es/easing/index.js +0 -28
  157. package/dist/node_modules/popmotion/dist/es/easing/index.js.map +0 -1
  158. package/dist/node_modules/popmotion/dist/es/easing/utils.js +0 -13
  159. package/dist/node_modules/popmotion/dist/es/easing/utils.js.map +0 -1
  160. package/dist/node_modules/popmotion/dist/es/utils/clamp.js +0 -6
  161. package/dist/node_modules/popmotion/dist/es/utils/clamp.js.map +0 -1
  162. package/dist/node_modules/popmotion/dist/es/utils/hsla-to-rgba.js +0 -35
  163. package/dist/node_modules/popmotion/dist/es/utils/hsla-to-rgba.js.map +0 -1
  164. package/dist/node_modules/popmotion/dist/es/utils/inc.js +0 -6
  165. package/dist/node_modules/popmotion/dist/es/utils/inc.js.map +0 -1
  166. package/dist/node_modules/popmotion/dist/es/utils/interpolate.js +0 -69
  167. package/dist/node_modules/popmotion/dist/es/utils/interpolate.js.map +0 -1
  168. package/dist/node_modules/popmotion/dist/es/utils/mix-color.js +0 -45
  169. package/dist/node_modules/popmotion/dist/es/utils/mix-color.js.map +0 -1
  170. package/dist/node_modules/popmotion/dist/es/utils/mix-complex.js +0 -61
  171. package/dist/node_modules/popmotion/dist/es/utils/mix-complex.js.map +0 -1
  172. package/dist/node_modules/popmotion/dist/es/utils/mix.js +0 -6
  173. package/dist/node_modules/popmotion/dist/es/utils/mix.js.map +0 -1
  174. package/dist/node_modules/popmotion/dist/es/utils/pipe.js +0 -7
  175. package/dist/node_modules/popmotion/dist/es/utils/pipe.js.map +0 -1
  176. package/dist/node_modules/popmotion/dist/es/utils/progress.js +0 -9
  177. package/dist/node_modules/popmotion/dist/es/utils/progress.js.map +0 -1
  178. package/dist/node_modules/popmotion/dist/es/utils/velocity-per-second.js +0 -8
  179. package/dist/node_modules/popmotion/dist/es/utils/velocity-per-second.js.map +0 -1
  180. package/dist/node_modules/popmotion/node_modules/tslib/tslib.es6.js +0 -13
  181. package/dist/node_modules/popmotion/node_modules/tslib/tslib.es6.js.map +0 -1
  182. package/dist/node_modules/style-value-types/dist/es/color/hex.js +0 -39
  183. package/dist/node_modules/style-value-types/dist/es/color/hex.js.map +0 -1
  184. package/dist/node_modules/style-value-types/dist/es/color/hsla.js +0 -16
  185. package/dist/node_modules/style-value-types/dist/es/color/hsla.js.map +0 -1
  186. package/dist/node_modules/style-value-types/dist/es/color/index.js +0 -20
  187. package/dist/node_modules/style-value-types/dist/es/color/index.js.map +0 -1
  188. package/dist/node_modules/style-value-types/dist/es/color/rgba.js +0 -15
  189. package/dist/node_modules/style-value-types/dist/es/color/rgba.js.map +0 -1
  190. package/dist/node_modules/style-value-types/dist/es/color/utils.js +0 -19
  191. package/dist/node_modules/style-value-types/dist/es/color/utils.js.map +0 -1
  192. package/dist/node_modules/style-value-types/dist/es/complex/index.js +0 -58
  193. package/dist/node_modules/style-value-types/dist/es/complex/index.js.map +0 -1
  194. package/dist/node_modules/style-value-types/dist/es/numbers/index.js +0 -13
  195. package/dist/node_modules/style-value-types/dist/es/numbers/index.js.map +0 -1
  196. package/dist/node_modules/style-value-types/dist/es/numbers/units.js +0 -16
  197. package/dist/node_modules/style-value-types/dist/es/numbers/units.js.map +0 -1
  198. package/dist/node_modules/style-value-types/dist/es/utils.js +0 -13
  199. package/dist/node_modules/style-value-types/dist/es/utils.js.map +0 -1
@@ -1,52 +1,90 @@
1
1
  import Portal_default from "./Portal.js";
2
2
  import Icon from "./Icon.js";
3
- import { Dialog } from "@plastic-js/ark";
4
3
  import { insert, jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
5
- import { css } from "@emotion/css";
6
- import { mergeProps as mergeProps$1, splitProps } from "@plastic-js/plastic";
4
+ import { css, keyframes } from "@emotion/css";
5
+ import { Dialog } from "@plastic-js/ark";
6
+ import { mergeProps as mergeProps$2, splitProps } from "@plastic-js/plastic";
7
7
  //#region src/components/Dialog.jsx
8
- var _tmpl4 = template("<button type=\"button\"></button>");
9
- var _tmpl3 = template("<div><!><!></div>");
10
- var _tmpl2 = template("<div></div>");
11
- var _tmpl = template("<div><div><!><!></div><!></div>");
12
- var backdropClass = css({
8
+ var _tmpl4 = template("<div></div>");
9
+ var _tmpl3 = template("<div><div><!><!></div><!></div>");
10
+ var _tmpl2 = template("<button type=\"button\"></button>");
11
+ var _tmpl = template("<div><!><!></div>");
12
+ var backdropModalClass = css({
13
+ position: "fixed",
14
+ inset: 0,
15
+ background: "rgba(0, 0, 0, 0.45)",
16
+ backdropFilter: "blur(8px)",
17
+ WebkitBackdropFilter: "blur(8px)"
18
+ });
19
+ var backdropSheetClass = css({
13
20
  position: "fixed",
14
21
  inset: 0,
15
- background: "rgba(0, 0, 0, 0.6)",
16
- backdropFilter: "blur(4px)",
17
- "&[hidden]": { display: "none" }
22
+ background: "rgba(0, 0, 0, 0.35)",
23
+ backdropFilter: "blur(8px)",
24
+ WebkitBackdropFilter: "blur(8px)"
25
+ });
26
+ var positionerModalClass = css({
27
+ position: "fixed",
28
+ inset: 0,
29
+ display: "flex",
30
+ alignItems: "center",
31
+ justifyContent: "center",
32
+ padding: "var(--tsu-spacing-lg)"
18
33
  });
19
- var positionerClass = css({
34
+ var positionerSheetClass = css({
20
35
  position: "fixed",
21
36
  inset: 0,
22
37
  display: "flex",
23
38
  alignItems: "flex-end",
24
39
  justifyContent: "center",
25
- "@media (min-width: 640px)": {
26
- alignItems: "center",
27
- padding: "24px"
40
+ padding: 0
41
+ });
42
+ var modalContentIn = keyframes({
43
+ from: {
44
+ opacity: 0,
45
+ transform: "scale(0.95)"
46
+ },
47
+ to: {
48
+ opacity: 1,
49
+ transform: "scale(1)"
28
50
  }
29
51
  });
30
- var contentClass = css({
31
- background: "var(--surface)",
32
- border: "1px solid var(--border)",
33
- borderRadius: "20px 20px 0 0",
52
+ var sheetContentIn = keyframes({
53
+ from: { transform: "translateY(100%)" },
54
+ to: { transform: "translateY(0)" }
55
+ });
56
+ var contentModalClass = css({
57
+ background: "var(--tsu-bg)",
58
+ borderRadius: "var(--tsu-radius-l3-md)",
34
59
  width: "100%",
35
- maxWidth: "480px",
36
- maxHeight: "92vh",
60
+ maxWidth: "440px",
61
+ maxHeight: "calc(100vh - var(--tsu-spacing-lg) * 2)",
37
62
  display: "flex",
38
63
  flexDirection: "column",
39
- color: "var(--ink)",
40
- boxShadow: "0 -8px 32px rgba(0,0,0,0.4)",
41
- "&[hidden]": { display: "none" },
42
- "@media (min-width: 640px)": { borderRadius: "20px" }
64
+ color: "var(--tsu-fg)",
65
+ boxShadow: "var(--tsu-shadow-lg)",
66
+ overflowY: "auto",
67
+ animation: `${modalContentIn} 200ms ease`
43
68
  });
44
- var headClass = css({
69
+ var contentSheetClass = css({
70
+ background: "var(--tsu-bg)",
71
+ borderRadius: "var(--tsu-radius-l3-md) var(--tsu-radius-l3-md) 0 0",
72
+ width: "100%",
73
+ maxHeight: "70vh",
74
+ display: "flex",
75
+ flexDirection: "column",
76
+ color: "var(--tsu-fg)",
77
+ boxShadow: "var(--tsu-shadow-lg)",
78
+ overflowY: "auto",
79
+ animation: `${sheetContentIn} 250ms ease`
80
+ });
81
+ var headerClass = css({
45
82
  display: "flex",
46
83
  alignItems: "center",
47
84
  justifyContent: "space-between",
48
- padding: "18px 20px",
49
- borderBottom: "1px solid var(--border)"
85
+ padding: "18px var(--tsu-container-padding-lg)",
86
+ borderBottom: "1px solid var(--tsu-neutral-7)",
87
+ flexShrink: 0
50
88
  });
51
89
  var titleWrapClass = css({
52
90
  display: "flex",
@@ -56,7 +94,7 @@ var titleWrapClass = css({
56
94
  });
57
95
  var titleIconClass = css({
58
96
  flexShrink: 0,
59
- color: "var(--accent)"
97
+ color: "var(--tsu-accent-9)"
60
98
  });
61
99
  var titleClass = css({
62
100
  fontSize: "18px",
@@ -69,90 +107,168 @@ var closeBtnClass = css({
69
107
  borderRadius: "50%",
70
108
  background: "transparent",
71
109
  border: "none",
72
- color: "var(--muted)",
110
+ color: "var(--tsu-neutral-11)",
73
111
  fontSize: "22px",
74
112
  lineHeight: 1,
75
113
  cursor: "pointer",
76
114
  display: "flex",
77
115
  alignItems: "center",
78
116
  justifyContent: "center",
79
- "&:hover": {
80
- background: "rgba(255,255,255,0.06)",
81
- color: "var(--ink)"
82
- },
83
- "&[hidden]": { display: "none" }
117
+ flexShrink: 0
84
118
  });
85
119
  var bodyClass = css({
86
- padding: "20px",
87
- overflowY: "auto"
120
+ padding: "var(--tsu-container-padding-lg)",
121
+ flex: 1,
122
+ overflowY: "auto",
123
+ WebkitOverflowScrolling: "touch"
88
124
  });
89
- var footClass = css({
125
+ var bodySheetNoHeaderClass = css({ paddingTop: "calc(var(--tsu-container-padding-lg) * 2)" });
126
+ var footerClass = css({
90
127
  display: "flex",
91
- gap: "10px",
92
- padding: "14px 20px 20px",
93
- borderTop: "1px solid var(--border)"
128
+ gap: "var(--tsu-spacing-sm)",
129
+ padding: "0 var(--tsu-container-padding-lg) var(--tsu-container-padding-lg)",
130
+ flexShrink: 0
131
+ });
132
+ var footerBtnClass = css({
133
+ display: "flex",
134
+ gap: "var(--tsu-spacing-sm)",
135
+ width: "100%",
136
+ justifyContent: "space-between",
137
+ "&.tsu-dialog-footer--center": { justifyContent: "center" }
94
138
  });
95
139
  var btnClass = css({
96
140
  flex: 1,
97
- height: "46px",
98
- borderRadius: "10px",
99
- border: "1px solid var(--border)",
141
+ height: "var(--tsu-comp-height-xl)",
142
+ borderRadius: "var(--tsu-radius-l1-lg)",
143
+ border: "1px solid var(--tsu-neutral-7)",
100
144
  background: "transparent",
101
- color: "var(--ink)",
102
- fontSize: "15px",
145
+ color: "var(--tsu-fg)",
146
+ fontSize: "var(--tsu-comp-font-size-lg)",
103
147
  fontWeight: 600,
104
148
  fontFamily: "inherit",
105
- cursor: "pointer",
106
- "&:hover": { borderColor: "rgba(255,255,255,0.2)" }
149
+ cursor: "pointer"
107
150
  });
108
151
  var btnPrimaryClass = css({
109
- background: "var(--accent)",
110
- borderColor: "var(--accent)",
111
- color: "#fff",
112
- "&:hover": { filter: "brightness(1.08)" },
152
+ background: "var(--tsu-accent-9)",
153
+ borderColor: "var(--tsu-accent-9)",
154
+ color: "var(--tsu-bg)",
113
155
  "&:disabled": {
114
156
  opacity: .5,
115
157
  cursor: "not-allowed"
116
158
  }
117
159
  });
118
- var OriginalRoot = Dialog.Root;
119
- var Root = (props = {}) => {
120
- const [local, rest] = splitProps(props, [
160
+ var btnDangerClass = css({
161
+ background: "var(--tsu-danger-9)",
162
+ borderColor: "var(--tsu-danger-9)",
163
+ color: "var(--tsu-bg)",
164
+ "&:disabled": {
165
+ opacity: .5,
166
+ cursor: "not-allowed"
167
+ }
168
+ });
169
+ var read = (v) => typeof v === "function" ? v() : v;
170
+ var Dialog$1 = (props) => {
171
+ const [local, rest] = splitProps(mergeProps$2({
172
+ mode: "modal",
173
+ showCancel: true,
174
+ showConfirm: true,
175
+ cancelText: "Cancel",
176
+ confirmText: "Confirm",
177
+ loading: false,
178
+ danger: false,
179
+ closeable: true,
180
+ lazyMount: true,
181
+ unmountOnExit: true,
182
+ closeOnInteractOutside: false
183
+ }, props), [
184
+ "mode",
185
+ "open",
121
186
  "onOpen",
122
187
  "onClose",
123
188
  "onOpenChange",
124
- "closeOnInteractOutside",
125
- "lazyMount",
126
- "zIndex"
127
- ]);
128
- return jsx(OriginalRoot, mergeProps(() => mergeProps$1(rest, {
129
- zIndex: local.zIndex ?? null,
130
- closeOnInteractOutside: local.closeOnInteractOutside ?? false,
131
- lazyMount: local.lazyMount ?? true,
132
- onOpenChange: (open) => {
133
- local.onOpenChange?.(open);
134
- if (open) local.onOpen?.();
135
- else local.onClose?.();
136
- }
137
- })));
138
- };
139
- var Preset = (props) => {
140
- const [local, rootProps] = splitProps(props, [
141
189
  "title",
142
190
  "icon",
191
+ "showCancel",
192
+ "showConfirm",
143
193
  "cancelText",
144
194
  "confirmText",
195
+ "onCancel",
145
196
  "onConfirm",
146
197
  "loading",
198
+ "danger",
199
+ "closeable",
200
+ "lazyMount",
201
+ "unmountOnExit",
202
+ "closeOnInteractOutside",
203
+ "footer",
204
+ "class",
147
205
  "children"
148
206
  ]);
149
- return jsx(Root, mergeProps(rootProps, { children: jsx(Portal_default, mergeProps({ children: [jsx(Dialog.Backdrop, mergeProps({ className: backdropClass })), jsx(Dialog.Positioner, mergeProps({
150
- className: positionerClass,
207
+ const handleOpenChange = (open) => {
208
+ if (!open) {
209
+ local.onCancel?.();
210
+ local.onClose?.();
211
+ } else local.onOpen?.();
212
+ local.onOpenChange?.(open);
213
+ };
214
+ const handleCancel = () => {
215
+ if (read(local.loading)) return;
216
+ handleOpenChange(false);
217
+ };
218
+ const handleConfirm = () => {
219
+ local.onConfirm?.();
220
+ };
221
+ const isSheet = local.mode === "sheet";
222
+ const onlyOneBtn = (local.showCancel ? 1 : 0) + (local.showConfirm ? 1 : 0) === 1;
223
+ const footerContent = local.footer ? local.footer : local.showCancel || local.showConfirm ? () => {
224
+ const _el0 = _tmpl.cloneNode(true);
225
+ const _el1 = _el0.firstChild;
226
+ const _el2 = _el0.firstChild.nextSibling;
227
+ insert(_el0, () => local.showCancel && (() => {
228
+ const _el0 = _tmpl2.cloneNode(true);
229
+ insert(_el0, () => local.cancelText);
230
+ setProp(_el0, "className", () => btnClass);
231
+ setProp(_el0, "disabled", () => read(local.loading));
232
+ setProp(_el0, "onClick", () => handleCancel);
233
+ return _el0;
234
+ }), _el1);
235
+ insert(_el0, () => local.showConfirm && (() => {
236
+ const _el0 = _tmpl2.cloneNode(true);
237
+ insert(_el0, () => read(local.loading) ? "Loading…" : local.confirmText);
238
+ setProp(_el0, "className", () => `${btnClass} ${local.danger ? btnDangerClass : btnPrimaryClass}`);
239
+ setProp(_el0, "disabled", () => read(local.loading));
240
+ setProp(_el0, "onClick", () => handleConfirm);
241
+ return _el0;
242
+ }), _el2);
243
+ setProp(_el0, "className", () => onlyOneBtn ? `${footerBtnClass} tsu-dialog-footer--center` : footerBtnClass);
244
+ return _el0;
245
+ } : void 0;
246
+ const hasFooter = !!footerContent;
247
+ const hasHeader = local.title || !isSheet && (local.closeable ?? true);
248
+ return jsx(Dialog.Root, mergeProps({
249
+ get open() {
250
+ return read(local.open);
251
+ },
252
+ onOpenChange: handleOpenChange,
253
+ get lazyMount() {
254
+ return local.lazyMount;
255
+ },
256
+ get unmountOnExit() {
257
+ return local.unmountOnExit;
258
+ },
259
+ get closeOnInteractOutside() {
260
+ return local.closeOnInteractOutside;
261
+ },
262
+ modal: true
263
+ }, rest, { children: jsx(Portal_default, mergeProps({ children: [jsx(Dialog.Backdrop, mergeProps({ className: isSheet ? backdropSheetClass : backdropModalClass })), jsx(Dialog.Positioner, mergeProps({
264
+ className: isSheet ? positionerSheetClass : positionerModalClass,
151
265
  children: jsx(Dialog.Content, mergeProps({
152
- className: contentClass,
266
+ get className() {
267
+ return local.class ? `${isSheet ? contentSheetClass : contentModalClass} ${local.class}` : isSheet ? contentSheetClass : contentModalClass;
268
+ },
153
269
  children: [
154
- () => {
155
- const _el0 = _tmpl.cloneNode(true);
270
+ () => hasHeader && (() => {
271
+ const _el0 = _tmpl3.cloneNode(true);
156
272
  const _el1 = _el0.firstChild;
157
273
  const _el2 = _el1.firstChild;
158
274
  const _el3 = _el1.firstChild.nextSibling;
@@ -164,56 +280,44 @@ var Preset = (props) => {
164
280
  return local.icon;
165
281
  }
166
282
  })), _el2);
167
- insert(_el1, () => jsx(Dialog.Title, mergeProps({
283
+ insert(_el1, () => local.title && jsx(Dialog.Title, mergeProps({
168
284
  className: titleClass,
169
285
  children: () => local.title
170
286
  })), _el3);
171
287
  setProp(_el1, "className", () => titleWrapClass);
172
- insert(_el0, () => jsx(Dialog.CloseTrigger, mergeProps({
288
+ insert(_el0, () => !isSheet && (local.closeable ?? true) && jsx(Dialog.CloseTrigger, mergeProps({
173
289
  "aria-label": "Close",
174
290
  className: closeBtnClass,
175
- hidden: true,
176
291
  children: "×"
177
292
  })), _el4);
178
- setProp(_el0, "className", () => headClass);
293
+ setProp(_el0, "className", () => headerClass);
179
294
  return _el0;
180
- },
295
+ }),
181
296
  () => {
182
- const _el0 = _tmpl2.cloneNode(true);
297
+ const _el0 = _tmpl4.cloneNode(true);
183
298
  insert(_el0, () => local.children);
184
- setProp(_el0, "className", () => bodyClass);
299
+ setProp(_el0, "className", () => isSheet && !local.title && !(local.closeable ?? true) ? `${bodyClass} ${bodySheetNoHeaderClass}` : bodyClass);
185
300
  return _el0;
186
301
  },
187
- () => ((local.cancelText ?? "Cancel") || (local.confirmText ?? "Confirm")) && (() => {
188
- const _el0 = _tmpl3.cloneNode(true);
189
- const _el1 = _el0.firstChild;
190
- const _el2 = _el0.firstChild.nextSibling;
191
- insert(_el0, () => jsx(Dialog.CloseTrigger, mergeProps({
192
- className: btnClass,
193
- type: "button",
194
- children: () => local.cancelText ?? "Cancel"
195
- })), _el1);
196
- insert(_el0, () => (local.confirmText ?? "Confirm") && (() => {
197
- const _el0 = _tmpl4.cloneNode(true);
198
- insert(_el0, () => local.loading?.() ? "Loading…" : local.confirmText ?? "Confirm");
199
- setProp(_el0, "className", () => `${btnClass} ${btnPrimaryClass}`);
200
- setProp(_el0, "disabled", () => local.loading?.());
201
- setProp(_el0, "onClick", () => local.onConfirm);
202
- return _el0;
203
- }), _el2);
204
- setProp(_el0, "className", () => footClass);
302
+ () => hasFooter && (() => {
303
+ const _el0 = _tmpl4.cloneNode(true);
304
+ insert(_el0, () => footerContent);
305
+ setProp(_el0, "className", () => footerClass);
205
306
  return _el0;
206
307
  })
207
308
  ]
208
309
  }))
209
310
  }))] })) }));
210
311
  };
211
- var Dialog_default = Object.assign(Root, {
212
- ...Dialog,
213
- OriginalRoot: Root,
214
- Root: Preset
215
- });
312
+ Dialog$1.origin = {
313
+ Root: Dialog.Root,
314
+ Trigger: Dialog.Trigger,
315
+ Backdrop: Dialog.Backdrop,
316
+ Positioner: Dialog.Positioner,
317
+ Content: Dialog.Content,
318
+ Title: Dialog.Title,
319
+ Description: Dialog.Description,
320
+ CloseTrigger: Dialog.CloseTrigger
321
+ };
216
322
  //#endregion
217
- export { Dialog_default as default };
218
-
219
- //# sourceMappingURL=Dialog.js.map
323
+ export { Dialog$1 as default };
@@ -1,7 +1,172 @@
1
+ import Portal_default from "./Portal.js";
2
+ import Icon from "./Icon.js";
3
+ import { insert, jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
4
+ import { css } from "@emotion/css";
1
5
  import { Drawer } from "@plastic-js/ark";
6
+ import { mergeProps as mergeProps$2, splitProps } from "@plastic-js/plastic";
2
7
  //#region src/components/Drawer.jsx
3
- var Drawer_default = Drawer;
8
+ var _tmpl2 = template("<div><!><!></div>");
9
+ var _tmpl = template("<div><div><!><!></div><!></div>");
10
+ var backdropClass = css({
11
+ position: "fixed",
12
+ inset: 0,
13
+ background: "rgba(0, 0, 0, 0.6)",
14
+ backdropFilter: "blur(4px)",
15
+ "&[hidden]": { display: "none" }
16
+ });
17
+ var positionerClass = css({
18
+ position: "fixed",
19
+ inset: 0,
20
+ display: "flex",
21
+ justifyContent: "flex-end",
22
+ pointerEvents: "none",
23
+ "&[hidden]": { display: "none" }
24
+ });
25
+ var contentClass = css({
26
+ pointerEvents: "auto",
27
+ background: "var(--tsu-bg)",
28
+ borderLeft: "1px solid var(--tsu-neutral-7)",
29
+ width: "min(320px, calc(100vw - 24px))",
30
+ height: "100%",
31
+ display: "flex",
32
+ flexDirection: "column",
33
+ color: "var(--tsu-fg)",
34
+ boxShadow: "var(--tsu-shadow-lg)",
35
+ "&[hidden]": { display: "none" }
36
+ });
37
+ var headClass = css({
38
+ display: "flex",
39
+ alignItems: "center",
40
+ justifyContent: "space-between",
41
+ padding: "18px var(--tsu-container-padding-lg)",
42
+ borderBottom: "1px solid var(--tsu-neutral-7)",
43
+ flexShrink: 0
44
+ });
45
+ var titleWrapClass = css({
46
+ display: "flex",
47
+ alignItems: "center",
48
+ gap: "10px",
49
+ minWidth: 0
50
+ });
51
+ var titleIconClass = css({
52
+ flexShrink: 0,
53
+ color: "var(--tsu-accent-9)"
54
+ });
55
+ var titleClass = css({
56
+ fontSize: "18px",
57
+ fontWeight: 700,
58
+ margin: 0
59
+ });
60
+ var closeBtnClass = css({
61
+ width: "32px",
62
+ height: "32px",
63
+ borderRadius: "50%",
64
+ background: "transparent",
65
+ border: "none",
66
+ color: "var(--tsu-neutral-11)",
67
+ fontSize: "22px",
68
+ lineHeight: 1,
69
+ cursor: "pointer",
70
+ display: "flex",
71
+ alignItems: "center",
72
+ justifyContent: "center",
73
+ "&[hidden]": { display: "none" }
74
+ });
75
+ var bodyClass = css({
76
+ padding: "var(--tsu-container-padding-lg)",
77
+ overflowY: "auto",
78
+ flex: 1
79
+ });
80
+ var descClass = css({
81
+ margin: "8px 0 0",
82
+ fontSize: "var(--tsu-comp-font-size-sm)",
83
+ color: "var(--tsu-neutral-11)",
84
+ lineHeight: 1.5
85
+ });
86
+ var ArkRoot = Drawer.Root;
87
+ var Root = (props = {}) => {
88
+ const [local, rest] = splitProps(props, [
89
+ "onOpen",
90
+ "onClose",
91
+ "onOpenChange",
92
+ "closeOnInteractOutside",
93
+ "lazyMount",
94
+ "zIndex"
95
+ ]);
96
+ return jsx(ArkRoot, mergeProps(() => mergeProps$2(rest, {
97
+ placement: rest.placement ?? "right",
98
+ zIndex: local.zIndex ?? null,
99
+ closeOnInteractOutside: local.closeOnInteractOutside ?? false,
100
+ lazyMount: local.lazyMount ?? true,
101
+ onOpenChange: (open) => {
102
+ local.onOpenChange?.(open);
103
+ if (open) local.onOpen?.();
104
+ else local.onClose?.();
105
+ }
106
+ })));
107
+ };
108
+ var DrawerContent = (props) => {
109
+ const [local] = splitProps(props, [
110
+ "title",
111
+ "icon",
112
+ "description",
113
+ "children"
114
+ ]);
115
+ return jsx(Portal_default, mergeProps({ children: [jsx(Drawer.Backdrop, mergeProps({ className: backdropClass })), jsx(Drawer.Positioner, mergeProps({
116
+ className: positionerClass,
117
+ children: jsx(Drawer.Content, mergeProps({
118
+ className: contentClass,
119
+ children: [() => {
120
+ const _el0 = _tmpl.cloneNode(true);
121
+ const _el1 = _el0.firstChild;
122
+ const _el2 = _el1.firstChild;
123
+ const _el3 = _el1.firstChild.nextSibling;
124
+ const _el4 = _el0.firstChild.nextSibling;
125
+ insert(_el1, () => local.icon && jsx(Icon, mergeProps({
126
+ className: titleIconClass,
127
+ size: 20,
128
+ get svg() {
129
+ return local.icon;
130
+ }
131
+ })), _el2);
132
+ insert(_el1, () => jsx(Drawer.Title, mergeProps({
133
+ className: titleClass,
134
+ children: () => local.title
135
+ })), _el3);
136
+ setProp(_el1, "className", () => titleWrapClass);
137
+ insert(_el0, () => jsx(Drawer.CloseTrigger, mergeProps({
138
+ "aria-label": "Close",
139
+ className: closeBtnClass,
140
+ hidden: true,
141
+ children: "×"
142
+ })), _el4);
143
+ setProp(_el0, "className", () => headClass);
144
+ return _el0;
145
+ }, () => {
146
+ const _el0 = _tmpl2.cloneNode(true);
147
+ const _el1 = _el0.firstChild;
148
+ const _el2 = _el0.firstChild.nextSibling;
149
+ insert(_el0, () => local.description && jsx(Drawer.Description, mergeProps({
150
+ className: descClass,
151
+ children: () => local.description
152
+ })), _el1);
153
+ insert(_el0, () => local.children, _el2);
154
+ setProp(_el0, "className", () => bodyClass);
155
+ return _el0;
156
+ }]
157
+ }))
158
+ }))] }));
159
+ };
160
+ var DrawerTrigger = Drawer.Trigger;
161
+ Root.origin = {
162
+ Root: Drawer.Root,
163
+ Trigger: Drawer.Trigger,
164
+ Backdrop: Drawer.Backdrop,
165
+ Positioner: Drawer.Positioner,
166
+ Content: Drawer.Content,
167
+ Title: Drawer.Title,
168
+ Description: Drawer.Description,
169
+ CloseTrigger: Drawer.CloseTrigger
170
+ };
4
171
  //#endregion
5
- export { Drawer_default as default };
6
-
7
- //# sourceMappingURL=Drawer.js.map
172
+ export { DrawerContent, DrawerTrigger, Root as default };