@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,7 +1,96 @@
1
+ import { jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
2
+ import { css } from "@emotion/css";
1
3
  import { Accordion } from "@plastic-js/ark";
4
+ import { splitProps } from "@plastic-js/plastic";
2
5
  //#region src/components/Accordion.jsx
3
- var Accordion_default = Accordion;
6
+ var _tmpl = template("<span aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M6 9l6 6 6-6\"></path></svg></span>");
7
+ var rootClass = css({
8
+ display: "flex",
9
+ flexDirection: "column",
10
+ borderTop: "1px solid var(--tsu-neutral-6)"
11
+ });
12
+ var itemClass = css({ borderBottom: "1px solid var(--tsu-neutral-6)" });
13
+ var triggerClass = css({
14
+ display: "flex",
15
+ alignItems: "center",
16
+ justifyContent: "space-between",
17
+ width: "100%",
18
+ padding: "var(--tsu-container-padding-md)",
19
+ border: "none",
20
+ background: "none",
21
+ color: "var(--tsu-fg)",
22
+ fontSize: "var(--tsu-comp-font-size-md)",
23
+ fontWeight: 500,
24
+ fontFamily: "inherit",
25
+ cursor: "pointer",
26
+ touchAction: "manipulation",
27
+ "&:active:not([disabled])": { backgroundColor: "var(--tsu-accent-3)" },
28
+ "&[disabled]": {
29
+ opacity: .4,
30
+ cursor: "not-allowed"
31
+ }
32
+ });
33
+ var chevronClass = css({
34
+ transition: "transform var(--tsu-transition-fast)",
35
+ color: "var(--tsu-neutral-11)",
36
+ "& svg": {
37
+ width: "1em",
38
+ height: "1em",
39
+ display: "block"
40
+ },
41
+ "[data-state=\"open\"] &": { transform: "rotate(180deg)" }
42
+ });
43
+ var contentClass = css({
44
+ padding: "0 var(--tsu-container-padding-md) var(--tsu-container-padding-md)",
45
+ fontSize: "var(--tsu-comp-font-size-sm)",
46
+ color: "var(--tsu-neutral-11)",
47
+ lineHeight: 1.5
48
+ });
49
+ var AccordionRoot = (props = {}) => {
50
+ const [local, rest] = splitProps(props, ["className", "children"]);
51
+ return jsx(Accordion.Root, mergeProps(rest, {
52
+ get className() {
53
+ return [rootClass, local.className].filter(Boolean).join(" ");
54
+ },
55
+ children: () => local.children
56
+ }));
57
+ };
58
+ var AccordionItem = (props = {}) => {
59
+ const [local, rest] = splitProps(props, ["className", "children"]);
60
+ return jsx(Accordion.Item, mergeProps(rest, {
61
+ get className() {
62
+ return [itemClass, local.className].filter(Boolean).join(" ");
63
+ },
64
+ children: () => local.children
65
+ }));
66
+ };
67
+ var AccordionTrigger = (props = {}) => {
68
+ const [local, rest] = splitProps(props, ["className", "children"]);
69
+ return jsx(Accordion.Trigger, mergeProps(rest, {
70
+ get className() {
71
+ return [triggerClass, local.className].filter(Boolean).join(" ");
72
+ },
73
+ children: [() => local.children, (() => {
74
+ const _el0 = _tmpl.cloneNode(true);
75
+ setProp(_el0, "className", () => chevronClass);
76
+ return _el0;
77
+ })()]
78
+ }));
79
+ };
80
+ var AccordionContent = (props = {}) => {
81
+ const [local, rest] = splitProps(props, ["className", "children"]);
82
+ return jsx(Accordion.Content, mergeProps(rest, {
83
+ get className() {
84
+ return [contentClass, local.className].filter(Boolean).join(" ");
85
+ },
86
+ children: () => local.children
87
+ }));
88
+ };
89
+ AccordionRoot.origin = {
90
+ Root: Accordion.Root,
91
+ Item: Accordion.Item,
92
+ Trigger: Accordion.Trigger,
93
+ Content: Accordion.Content
94
+ };
4
95
  //#endregion
5
- export { Accordion_default as default };
6
-
7
- //# sourceMappingURL=Accordion.js.map
96
+ export { AccordionContent, AccordionItem, AccordionTrigger, AccordionRoot as default };
@@ -1,7 +1,99 @@
1
+ import { Fragment, jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
1
2
  import { Avatar } from "@plastic-js/ark";
3
+ import { createContext, mergeProps as mergeProps$2, splitProps, useContext } from "@plastic-js/plastic";
2
4
  //#region src/components/Avatar.jsx
3
- var Avatar_default = Avatar;
5
+ var _tmpl = template("<svg width=\"40%\" height=\"40%\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"8\" r=\"4\"></circle><path d=\"M4 20c0-4 4-7 8-7s8 3 8 7\"></path></svg>");
6
+ var GenderCtx = createContext(() => "male");
7
+ var NameCtx = createContext(() => "");
8
+ var read = (v) => typeof v === "function" ? v() : v;
9
+ var genderStyles = {
10
+ male: {
11
+ backgroundColor: "var(--tsu-accent-3)",
12
+ color: "var(--tsu-accent-11)"
13
+ },
14
+ female: {
15
+ backgroundColor: "var(--red-3)",
16
+ color: "var(--red-11)"
17
+ }
18
+ };
19
+ var getInitials = (name) => {
20
+ if (!name || !name.trim()) return "";
21
+ const parts = name.trim().split(/\s+/);
22
+ if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();
23
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
24
+ };
25
+ var DefaultPlaceholder = () => (() => {
26
+ const _el0 = _tmpl.cloneNode(true);
27
+ setProp(_el0, "style", () => ({ opacity: .5 }));
28
+ return _el0;
29
+ })();
30
+ var AvatarImage = (props = {}) => {
31
+ return jsx(Avatar.Image, mergeProps(props));
32
+ };
33
+ var AvatarFallback = (props = {}) => {
34
+ const getGenderCtx = useContext(GenderCtx);
35
+ const getNameCtx = useContext(NameCtx);
36
+ const [local, rest] = splitProps(props, ["style", "children"]);
37
+ return () => {
38
+ const gStyle = genderStyles[getGenderCtx()] || genderStyles.male;
39
+ const name = getNameCtx();
40
+ const content = local.children !== void 0 ? local.children : getInitials(name) || jsx(DefaultPlaceholder, {});
41
+ return jsx(Avatar.Fallback, mergeProps(rest, {
42
+ get style() {
43
+ return {
44
+ ...gStyle,
45
+ display: "flex",
46
+ alignItems: "center",
47
+ justifyContent: "center",
48
+ width: "100%",
49
+ height: "100%",
50
+ fontWeight: 600,
51
+ ...local.style
52
+ };
53
+ },
54
+ children: content
55
+ }));
56
+ };
57
+ };
58
+ var Avatar$1 = (props = {}) => {
59
+ const [local, rest] = splitProps(mergeProps$2({
60
+ mode: "image",
61
+ name: "",
62
+ gender: "male",
63
+ src: "",
64
+ alt: ""
65
+ }, props), [
66
+ "mode",
67
+ "name",
68
+ "gender",
69
+ "children",
70
+ "src",
71
+ "alt"
72
+ ]);
73
+ return jsx(NameCtx.Provider, mergeProps({
74
+ value: () => read(local.name) || "",
75
+ children: () => jsx(GenderCtx.Provider, mergeProps({
76
+ value: () => read(local.gender),
77
+ children: () => jsx(Avatar.Root, mergeProps(rest, { children: () => local.children ? local.children : jsx(Fragment, { children: [() => read(local.mode) === "image" && !!read(local.src) && jsx(Avatar.Image, mergeProps({
78
+ get src() {
79
+ return read(local.src);
80
+ },
81
+ get alt() {
82
+ return read(local.alt) || read(local.name) || "avatar";
83
+ },
84
+ style: {
85
+ width: "100%",
86
+ height: "100%",
87
+ objectFit: "cover"
88
+ }
89
+ })), jsx(AvatarFallback, {})] }) }))
90
+ }))
91
+ }));
92
+ };
93
+ Avatar$1.origin = {
94
+ Root: Avatar.Root,
95
+ Image: Avatar.Image,
96
+ Fallback: Avatar.Fallback
97
+ };
4
98
  //#endregion
5
- export { Avatar_default as default };
6
-
7
- //# sourceMappingURL=Avatar.js.map
99
+ export { AvatarFallback, AvatarImage, Avatar$1 as default };
@@ -0,0 +1,131 @@
1
+ import Portal_default from "./Portal.js";
2
+ import { insert, jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
3
+ import { css } from "@emotion/css";
4
+ import { mergeProps as mergeProps$1, splitProps } from "@plastic-js/plastic";
5
+ //#region src/components/BottomSheet.jsx
6
+ var _tmpl3 = template("<div><h2></h2></div>");
7
+ var _tmpl2 = template("<div role=\"dialog\" aria-modal=\"true\"><!><div></div><!></div>");
8
+ var _tmpl = template("<div></div>");
9
+ var backdropClass = css({
10
+ position: "fixed",
11
+ inset: 0,
12
+ zIndex: 1400,
13
+ background: "rgba(0, 0, 0, 0.35)",
14
+ opacity: 0,
15
+ pointerEvents: "none",
16
+ transition: "opacity 200ms ease",
17
+ "&[data-open]": {
18
+ opacity: 1,
19
+ pointerEvents: "auto"
20
+ }
21
+ });
22
+ var backdropBlurClass = css({
23
+ backdropFilter: "blur(8px)",
24
+ WebkitBackdropFilter: "blur(8px)"
25
+ });
26
+ var sheetClass = css({
27
+ position: "fixed",
28
+ insetInline: 0,
29
+ bottom: 0,
30
+ zIndex: 1400,
31
+ background: "var(--tsu-bg)",
32
+ borderRadius: "var(--tsu-radius-l3-md) var(--tsu-radius-l3-md) 0 0",
33
+ maxHeight: "70vh",
34
+ display: "flex",
35
+ flexDirection: "column",
36
+ transform: "translateY(100%)",
37
+ pointerEvents: "none",
38
+ transition: "transform 250ms ease",
39
+ "&[data-open]": {
40
+ transform: "translateY(0)",
41
+ pointerEvents: "auto"
42
+ }
43
+ });
44
+ var headerClass = css({
45
+ display: "flex",
46
+ alignItems: "center",
47
+ justifyContent: "center",
48
+ padding: "var(--tsu-container-padding-lg)",
49
+ borderBottom: "1px solid var(--tsu-neutral-7)",
50
+ flexShrink: 0
51
+ });
52
+ var titleClass = css({
53
+ margin: 0,
54
+ fontSize: "var(--tsu-comp-font-size-lg)",
55
+ fontWeight: 600,
56
+ color: "var(--tsu-fg)",
57
+ textAlign: "center"
58
+ });
59
+ var bodyClass = css({
60
+ overflowY: "auto",
61
+ padding: "var(--tsu-container-padding-lg)",
62
+ flex: 1,
63
+ WebkitOverflowScrolling: "touch"
64
+ });
65
+ var bodyNoHeaderClass = css({ paddingTop: "calc(var(--tsu-container-padding-lg) * 2)" });
66
+ var footerClass = css({
67
+ display: "flex",
68
+ gap: "var(--tsu-spacing-sm)",
69
+ padding: "0 var(--tsu-container-padding-lg) var(--tsu-container-padding-lg)",
70
+ flexShrink: 0,
71
+ paddingTop: "var(--tsu-spacing-sm)"
72
+ });
73
+ var read = (v) => typeof v === "function" ? v() : v;
74
+ var BottomSheet = (props) => {
75
+ const [local] = splitProps(mergeProps$1({
76
+ dismissible: true,
77
+ backdropBlur: true
78
+ }, props), [
79
+ "open",
80
+ "onOpen",
81
+ "onClose",
82
+ "onOpenChange",
83
+ "title",
84
+ "dismissible",
85
+ "backdropBlur",
86
+ "footer",
87
+ "footerClass",
88
+ "class",
89
+ "children"
90
+ ]);
91
+ const handleBackdropClick = () => {
92
+ if (local.dismissible) {
93
+ local.onClose?.();
94
+ local.onOpenChange?.({ open: false });
95
+ }
96
+ };
97
+ return jsx(Portal_default, mergeProps({ children: [(() => {
98
+ const _el0 = _tmpl.cloneNode(true);
99
+ setProp(_el0, "className", () => local.backdropBlur ? `${backdropClass} ${backdropBlurClass}` : backdropClass);
100
+ setProp(_el0, "data-open", () => read(local.open) ? "" : void 0);
101
+ setProp(_el0, "onClick", () => handleBackdropClick);
102
+ return _el0;
103
+ })(), () => {
104
+ const _el0 = _tmpl2.cloneNode(true);
105
+ const _el1 = _el0.firstChild;
106
+ const _el2 = _el0.firstChild.nextSibling;
107
+ const _el3 = _el0.firstChild.nextSibling.nextSibling;
108
+ insert(_el0, () => local.title && (() => {
109
+ const _el0 = _tmpl3.cloneNode(true);
110
+ const _el1 = _el0.firstChild;
111
+ insert(_el1, () => local.title);
112
+ setProp(_el1, "className", () => titleClass);
113
+ setProp(_el0, "className", () => headerClass);
114
+ return _el0;
115
+ }), _el1);
116
+ insert(_el2, () => local.children);
117
+ setProp(_el2, "className", () => local.title ? bodyClass : `${bodyClass} ${bodyNoHeaderClass}`);
118
+ insert(_el0, () => local.footer && (() => {
119
+ const _el0 = _tmpl.cloneNode(true);
120
+ insert(_el0, () => local.footer);
121
+ setProp(_el0, "className", () => local.footerClass ? `${footerClass} ${local.footerClass}` : footerClass);
122
+ return _el0;
123
+ }), _el3);
124
+ setProp(_el0, "className", () => local.class ? `${sheetClass} ${local.class}` : sheetClass);
125
+ setProp(_el0, "data-open", () => read(local.open) ? "" : void 0);
126
+ setProp(_el0, "aria-label", () => local.title || "BottomSheet");
127
+ return _el0;
128
+ }] }));
129
+ };
130
+ //#endregion
131
+ export { BottomSheet as default };
@@ -0,0 +1,194 @@
1
+ import Spinner from "./Spinner.js";
2
+ import { insert, jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
3
+ import { css } from "@emotion/css";
4
+ import { mergeProps as mergeProps$1, splitProps } from "@plastic-js/plastic";
5
+ import { ark } from "@plastic-js/ark/factory";
6
+ //#region src/components/Button.jsx
7
+ var _tmpl = template("<span><span></span><span></span></span>");
8
+ var baseClass = css({
9
+ position: "relative",
10
+ display: "inline-flex",
11
+ alignItems: "center",
12
+ justifyContent: "center",
13
+ border: "1px solid transparent",
14
+ cursor: "pointer",
15
+ fontFamily: "inherit",
16
+ whiteSpace: "nowrap",
17
+ userSelect: "none",
18
+ touchAction: "manipulation",
19
+ WebkitTapHighlightColor: "transparent",
20
+ transition: "background-color var(--tsu-transition-fast), border-color var(--tsu-transition-fast), opacity var(--tsu-transition-fast)",
21
+ "&:disabled": {
22
+ backgroundColor: "var(--tsu-disabled-bg)",
23
+ borderColor: "var(--tsu-disabled-border)",
24
+ color: "var(--tsu-disabled-fg)",
25
+ cursor: "not-allowed"
26
+ }
27
+ });
28
+ var sizeClasses = {
29
+ xs: css({
30
+ height: "var(--tsu-comp-height-xs)",
31
+ lineHeight: "var(--tsu-comp-line-height-xs)",
32
+ padding: "var(--tsu-comp-padding-y-xs) var(--tsu-comp-padding-x-xs)",
33
+ fontSize: "var(--tsu-comp-font-size-xs)",
34
+ borderRadius: "var(--tsu-radius-l1-xs)"
35
+ }),
36
+ sm: css({
37
+ height: "var(--tsu-comp-height-sm)",
38
+ lineHeight: "var(--tsu-comp-line-height-sm)",
39
+ padding: "var(--tsu-comp-padding-y-sm) var(--tsu-comp-padding-x-sm)",
40
+ fontSize: "var(--tsu-comp-font-size-sm)",
41
+ borderRadius: "var(--tsu-radius-l1-sm)"
42
+ }),
43
+ md: css({
44
+ height: "var(--tsu-comp-height-md)",
45
+ lineHeight: "var(--tsu-comp-line-height-md)",
46
+ padding: "var(--tsu-comp-padding-y-md) var(--tsu-comp-padding-x-md)",
47
+ fontSize: "var(--tsu-comp-font-size-md)",
48
+ borderRadius: "var(--tsu-radius-l1-md)"
49
+ }),
50
+ lg: css({
51
+ height: "var(--tsu-comp-height-lg)",
52
+ lineHeight: "var(--tsu-comp-line-height-lg)",
53
+ padding: "var(--tsu-comp-padding-y-lg) var(--tsu-comp-padding-x-lg)",
54
+ fontSize: "var(--tsu-comp-font-size-lg)",
55
+ borderRadius: "var(--tsu-radius-l1-lg)"
56
+ }),
57
+ xl: css({
58
+ height: "var(--tsu-comp-height-xl)",
59
+ lineHeight: "var(--tsu-comp-line-height-xl)",
60
+ padding: "var(--tsu-comp-padding-y-xl) var(--tsu-comp-padding-x-xl)",
61
+ fontSize: "var(--tsu-comp-font-size-xl)",
62
+ borderRadius: "var(--tsu-radius-l1-xl)"
63
+ })
64
+ };
65
+ var variantClasses = {
66
+ solid: css({
67
+ backgroundColor: "var(--_btn-solid)",
68
+ borderColor: "var(--_btn-solid)",
69
+ color: "var(--tsu-bg)",
70
+ "&:active:not(:disabled)": {
71
+ backgroundColor: "var(--_btn-solid-active)",
72
+ borderColor: "var(--_btn-solid-active)"
73
+ }
74
+ }),
75
+ outline: css({
76
+ backgroundColor: "var(--tsu-bg)",
77
+ borderColor: "var(--_btn-border)",
78
+ color: "var(--tsu-fg)",
79
+ "&:active:not(:disabled)": {
80
+ backgroundColor: "var(--_btn-tint-bg)",
81
+ borderColor: "var(--_btn-border-active)"
82
+ }
83
+ })
84
+ };
85
+ var intentClasses = {
86
+ default: css({
87
+ "--_btn-solid": "var(--tsu-accent-9)",
88
+ "--_btn-solid-active": "var(--tsu-accent-8)",
89
+ "--_btn-border": "var(--tsu-accent-9)",
90
+ "--_btn-border-active": "var(--tsu-accent-10)",
91
+ "--_btn-tint-bg": "var(--tsu-accent-3)"
92
+ }),
93
+ danger: css({
94
+ "--_btn-solid": "var(--tsu-danger-9)",
95
+ "--_btn-solid-active": "var(--tsu-danger-8)",
96
+ "--_btn-border": "var(--tsu-danger-9)",
97
+ "--_btn-border-active": "var(--tsu-danger-10)",
98
+ "--_btn-tint-bg": "var(--tsu-danger-3)"
99
+ })
100
+ };
101
+ var loadingOverlayClass = css({
102
+ position: "absolute",
103
+ inset: 0,
104
+ display: "flex",
105
+ alignItems: "center",
106
+ justifyContent: "center",
107
+ borderRadius: "inherit",
108
+ pointerEvents: "auto"
109
+ });
110
+ var loadingMaskClass = css({
111
+ position: "absolute",
112
+ inset: 0,
113
+ backgroundColor: "var(--tsu-neutral-3)",
114
+ opacity: .6,
115
+ borderRadius: "inherit"
116
+ });
117
+ var loadingSpinnerClass = css({
118
+ position: "relative",
119
+ zIndex: 1
120
+ });
121
+ var loadingClass = css({ pointerEvents: "none" });
122
+ var read = (v) => typeof v === "function" ? v() : v;
123
+ var Button = (props = {}) => {
124
+ const [local, rest] = splitProps(mergeProps$1({
125
+ solid: false,
126
+ danger: false,
127
+ size: "md",
128
+ disabled: false,
129
+ loading: false
130
+ }, props), [
131
+ "solid",
132
+ "danger",
133
+ "size",
134
+ "loading",
135
+ "disabled",
136
+ "className",
137
+ "children"
138
+ ]);
139
+ return jsx(ark.button, mergeProps(rest, {
140
+ get disabled() {
141
+ return local.disabled;
142
+ },
143
+ get "aria-disabled"() {
144
+ return local.loading || local.disabled;
145
+ },
146
+ className: () => {
147
+ const size = read(local.size);
148
+ const solid = read(local.solid);
149
+ const danger = read(local.danger);
150
+ const loading = read(local.loading);
151
+ const variant = solid ? "solid" : "outline";
152
+ const intent = danger ? "danger" : "default";
153
+ return [
154
+ baseClass,
155
+ sizeClasses[size],
156
+ variantClasses[variant],
157
+ intentClasses[intent],
158
+ loading && loadingClass,
159
+ local.className
160
+ ].filter(Boolean).join(" ");
161
+ },
162
+ children: [() => local.children, () => {
163
+ if (!read(local.loading)) return null;
164
+ const solid = read(local.solid);
165
+ const size = read(local.size);
166
+ const spinnerSizeMap = {
167
+ xs: 14,
168
+ sm: 16,
169
+ md: 20,
170
+ lg: 24,
171
+ xl: 28
172
+ };
173
+ return () => {
174
+ const _el0 = _tmpl.cloneNode(true);
175
+ const _el1 = _el0.firstChild;
176
+ const _el2 = _el0.firstChild.nextSibling;
177
+ setProp(_el1, "className", () => loadingMaskClass);
178
+ insert(_el2, () => jsx(Spinner, mergeProps({
179
+ get size() {
180
+ return spinnerSizeMap[size];
181
+ },
182
+ strokeWidth: 3,
183
+ color: solid ? "var(--_btn-solid)" : "var(--_btn-border)"
184
+ })));
185
+ setProp(_el2, "className", () => loadingSpinnerClass);
186
+ setProp(_el0, "className", () => loadingOverlayClass);
187
+ return _el0;
188
+ };
189
+ }]
190
+ }));
191
+ };
192
+ Button.origin = { Root: ark.button };
193
+ //#endregion
194
+ export { Button as default };
@@ -1,36 +1,15 @@
1
- import { insert, jsx, mergeProps, setProp, template } from "@plastic-js/plastic/jsx-runtime";
1
+ import Input from "./Input.js";
2
+ import { jsx, mergeProps, template } from "@plastic-js/plastic/jsx-runtime";
2
3
  import { css } from "@emotion/css";
3
4
  import { splitProps } from "@plastic-js/plastic";
4
5
  //#region src/components/CardNumberInput.jsx
5
- var _tmpl = template("<div></div>");
6
- var wrapperClass = css({
7
- display: "flex",
8
- alignItems: "center",
9
- width: "100%",
10
- boxSizing: "border-box",
11
- height: "44px",
12
- background: "var(--bg, rgba(0,0,0,0.2))",
13
- border: "1px solid var(--border)",
14
- borderRadius: "10px",
15
- padding: "0 14px",
16
- "&:focus-within": { borderColor: "var(--accent)" }
17
- });
18
- var errorClass = css({ borderColor: "var(--danger) !important" });
6
+ var _tmpl = template("<svg fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" viewBox=\"0 0 24 24\"><rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\"></rect><line x1=\"2\" y1=\"10\" x2=\"22\" y2=\"10\"></line></svg>");
7
+ function CardIcon() {
8
+ return _tmpl.cloneNode(true);
9
+ }
19
10
  var inputClass = css({
20
- flex: 1,
21
- minWidth: 0,
22
- height: "100%",
23
- background: "transparent",
24
- border: "none",
25
- color: "var(--ink)",
26
- fontSize: "15px",
27
- fontFamily: "inherit",
28
- outline: "none",
29
11
  letterSpacing: "1.5px",
30
- "&::placeholder": {
31
- color: "var(--muted)",
32
- letterSpacing: "normal"
33
- }
12
+ "&::placeholder": { letterSpacing: "normal" }
34
13
  });
35
14
  var read = (value) => {
36
15
  return typeof value === "function" ? value() : value;
@@ -44,24 +23,29 @@ var CardNumberInput = (props) => {
44
23
  "value",
45
24
  "onValueChange",
46
25
  "invalid",
26
+ "disabled",
47
27
  "placeholder"
48
28
  ]);
49
- return (() => {
50
- const _el0 = _tmpl.cloneNode(true);
51
- insert(_el0, () => jsx("input", mergeProps({
52
- className: inputClass,
53
- inputMode: "numeric",
54
- onInput: (e) => local.onValueChange?.(e.target.value.replace(/\D/g, "")),
55
- get placeholder() {
56
- return local.placeholder ?? "0000-0000-0000-0000";
57
- },
58
- value: () => groupDigits(read(local.value))
59
- }, rest)));
60
- setProp(_el0, "className", () => `${wrapperClass} ${read(local.invalid) ? errorClass : ""}`);
61
- return _el0;
62
- })();
29
+ return jsx(Input, mergeProps({
30
+ size: "lg",
31
+ solid: true,
32
+ get invalid() {
33
+ return local.invalid;
34
+ },
35
+ get disabled() {
36
+ return local.disabled;
37
+ },
38
+ get placeholder() {
39
+ return local.placeholder ?? "0000-0000-0000-0000";
40
+ },
41
+ get prefix() {
42
+ return jsx(CardIcon, {});
43
+ },
44
+ inputClassName: inputClass,
45
+ value: () => groupDigits(read(local.value)),
46
+ onInput: (e) => local.onValueChange?.(e.target.value.replace(/\D/g, "")),
47
+ inputMode: "numeric"
48
+ }, rest));
63
49
  };
64
50
  //#endregion
65
51
  export { CardNumberInput as default };
66
-
67
- //# sourceMappingURL=CardNumberInput.js.map