@citygross/components_v2 0.0.12 → 0.0.14

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 (73) hide show
  1. package/dist/components/AlertBox/AlertBox.css.ts.vanilla.css +24 -24
  2. package/dist/components/AlertBox/AlertBox.css.vanilla.js +1 -1
  3. package/dist/components/AlertBox/AlertBox.d.ts +1 -1
  4. package/dist/components/AlertBox/AlertBox.js +1 -1
  5. package/dist/components/Box/Box.css.ts.vanilla.css +4 -0
  6. package/dist/components/Box/Box.css.vanilla.js +9 -0
  7. package/dist/components/Box/Box.d.ts +1 -1
  8. package/dist/components/Box/Box.js +21 -2
  9. package/dist/components/BoxArrow/BoxArrow.css.ts.vanilla.css +48 -48
  10. package/dist/components/BoxArrow/BoxArrow.css.vanilla.js +1 -2
  11. package/dist/components/CartItemSummary/CartItemSummary.css.ts.vanilla.css +23 -0
  12. package/dist/components/CartItemSummary/CartItemSummary.css.vanilla.js +8 -0
  13. package/dist/components/CartItemSummary/CartItemSummary.d.ts +15 -0
  14. package/dist/components/CartItemSummary/CartItemSummary.js +31 -0
  15. package/dist/components/CartSummary/CartSummary.css.ts.vanilla.css +34 -0
  16. package/dist/components/CartSummary/CartSummary.css.vanilla.js +11 -0
  17. package/dist/components/CartSummary/CartSummary.d.ts +26 -0
  18. package/dist/components/CartSummary/CartSummary.js +60 -0
  19. package/dist/components/Divider/Divider.css.ts.vanilla.css +6 -0
  20. package/dist/components/Divider/Divider.css.vanilla.js +7 -0
  21. package/dist/components/Divider/Divider.d.ts +9 -0
  22. package/dist/components/Divider/Divider.js +10 -0
  23. package/dist/components/Dot/Dot.css.ts.vanilla.css +8 -0
  24. package/dist/components/Dot/Dot.css.vanilla.js +7 -0
  25. package/dist/components/Dot/Dot.d.ts +9 -0
  26. package/dist/components/Dot/Dot.js +16 -0
  27. package/dist/components/FormControl/FormControl.css.ts.vanilla.css +21 -0
  28. package/dist/components/FormControl/FormControl.css.vanilla.js +7 -0
  29. package/dist/components/FormControl/FormControl.d.ts +17 -0
  30. package/dist/components/FormControl/FormControl.js +21 -0
  31. package/dist/components/Input/Input.css.ts.vanilla.css +60 -0
  32. package/dist/components/Input/Input.css.vanilla.js +9 -0
  33. package/dist/components/Input/Input.d.ts +16 -0
  34. package/dist/components/Input/Input.js +49 -0
  35. package/dist/components/ListItem/ListItem.css.ts.vanilla.css +72 -0
  36. package/dist/components/ListItem/ListItem.css.vanilla.js +11 -0
  37. package/dist/components/ListItem/ListItem.d.ts +29 -0
  38. package/dist/components/ListItem/ListItem.js +92 -0
  39. package/dist/components/ListItem/assets/fallback_grocery.js +3 -0
  40. package/dist/components/Skeleton/Skeleton.css.ts.vanilla.css +164 -0
  41. package/dist/components/Skeleton/Skeleton.css.vanilla.js +7 -0
  42. package/dist/components/Skeleton/Skeleton.d.ts +10 -0
  43. package/dist/components/Skeleton/Skeleton.js +22 -0
  44. package/dist/components/Spacer/Spacer.css.ts.vanilla.css +3 -0
  45. package/dist/components/Spacer/Spacer.css.vanilla.js +7 -0
  46. package/dist/components/Spacer/Spacer.d.ts +9 -0
  47. package/dist/components/Spacer/Spacer.js +6 -0
  48. package/dist/components/Spinner/Spinner.css.ts.vanilla.css +171 -0
  49. package/dist/components/Spinner/Spinner.css.vanilla.js +7 -0
  50. package/dist/components/Spinner/Spinner.d.ts +10 -0
  51. package/dist/components/Spinner/Spinner.js +17 -0
  52. package/dist/components/TimeLine/TimeLine.css.ts.vanilla.css +178 -0
  53. package/dist/components/TimeLine/TimeLine.css.vanilla.js +9 -0
  54. package/dist/components/TimeLine/TimeLine.d.ts +25 -0
  55. package/dist/components/TimeLine/TimeLine.js +53 -0
  56. package/dist/cssUtils/border.css.d.ts +4 -0
  57. package/dist/cssUtils/border.css.vanilla.js +6 -0
  58. package/dist/cssUtils/color.css.d.ts +6 -0
  59. package/dist/cssUtils/color.css.vanilla.js +8 -0
  60. package/dist/cssUtils/spacings.css.d.ts +9 -0
  61. package/dist/cssUtils/spacings.css.ts.vanilla.css +0 -66
  62. package/dist/cssUtils/spacings.css.vanilla.js +11 -0
  63. package/dist/cssUtils/typography.css.d.ts +5 -0
  64. package/dist/cssUtils/typography.css.ts.vanilla.css +100 -0
  65. package/dist/index.d.ts +17 -2
  66. package/dist/index.js +20 -2
  67. package/dist/typography/BodyText/BodyText.css.vanilla.js +8 -0
  68. package/dist/typography/BodyText/BodyText.d.ts +16 -0
  69. package/dist/typography/BodyText/BodyText.js +28 -0
  70. package/dist/typography/H3/H3.css.ts.vanilla.css +4 -0
  71. package/dist/typography/H3/H3.css.vanilla.js +8 -0
  72. package/dist/typography/H3/H3.js +24 -0
  73. package/package.json +2 -2
@@ -0,0 +1,60 @@
1
+ import { formatPrice } from '@citygross/utils';
2
+ import React from 'react';
3
+ import { H3 } from '../../typography/H3/H3.js';
4
+ import { BodyText } from '../../typography/BodyText/BodyText.js';
5
+ import { cartPaymentContainer, cartSummaryTitle, cartSummaryHeader, cartLine, amountWrapper, cartSummaryFooter } from './CartSummary.css.vanilla.js';
6
+ import { Divider } from '../Divider/Divider.js';
7
+
8
+ const calculateSummaryLine = (items) => {
9
+ const sumOfItems = items?.reduce(
10
+ (prev, curr) => {
11
+ return {
12
+ cancelledQuantity: prev.cancelledQuantity + (curr?.cancelledQuantity ?? 0),
13
+ quantity: prev.quantity + curr.quantity,
14
+ amount: prev.amount + (curr?.amount ?? 0),
15
+ cancelledAmount: prev.cancelledAmount + (curr?.cancelledAmount ?? 0)
16
+ };
17
+ },
18
+ {
19
+ cancelledQuantity: 0,
20
+ quantity: 0,
21
+ amount: 0,
22
+ cancelledAmount: 0
23
+ }
24
+ );
25
+ return sumOfItems;
26
+ };
27
+ function CartSummary({
28
+ saveLabel = "rabatter",
29
+ shippingLabel = "frakt",
30
+ totalLabel = "totalt",
31
+ taxLabel = "varav moms",
32
+ ...cartSummary
33
+ }) {
34
+ const charges = cartSummary.charges ?? [];
35
+ const bags = cartSummary.bags ?? [];
36
+ const groceries = cartSummary.groceries ?? [];
37
+ const cateredMeals = cartSummary?.cateredMeals ?? [];
38
+ const sumOfBags = calculateSummaryLine(bags);
39
+ const sumOfGroceries = calculateSummaryLine(groceries);
40
+ const sumOfCateredMeals = calculateSummaryLine(cateredMeals);
41
+ return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: cartPaymentContainer }, cartSummary.title && /* @__PURE__ */ React.createElement("div", { className: cartSummaryTitle }, /* @__PURE__ */ React.createElement(H3, null, cartSummary.title), /* @__PURE__ */ React.createElement(BodyText, null, cartSummary.subTitle)), /* @__PURE__ */ React.createElement(
42
+ "div",
43
+ {
44
+ className: cartSummaryHeader({
45
+ title: Boolean(cartSummary.title)
46
+ })
47
+ },
48
+ (groceries?.length > 0 || cateredMeals?.length > 0) && /* @__PURE__ */ React.createElement("div", { className: cartLine }, /* @__PURE__ */ React.createElement(BodyText, null, "varor", " ", (sumOfGroceries?.quantity ?? 0) + (sumOfCateredMeals?.quantity ?? 0), " ", "st"), /* @__PURE__ */ React.createElement("div", { className: amountWrapper }, sumOfGroceries?.cancelledAmount > 0 && /* @__PURE__ */ React.createElement(BodyText, { textDecoration: "lineThrough", color: "dark" }, formatPrice(
49
+ (sumOfGroceries?.cancelledAmount ?? 0) + (sumOfCateredMeals?.cancelledAmount ?? 0)
50
+ )), /* @__PURE__ */ React.createElement(H3, { fontWeight: "semiBold" }, formatPrice(
51
+ sumOfGroceries.amount + sumOfCateredMeals.amount
52
+ )))),
53
+ bags.length > 0 && /* @__PURE__ */ React.createElement("div", { className: cartLine }, /* @__PURE__ */ React.createElement(BodyText, null, "matkassar ", sumOfBags.quantity, " st"), /* @__PURE__ */ React.createElement("div", { className: amountWrapper }, sumOfBags.cancelledAmount > 0 && /* @__PURE__ */ React.createElement(BodyText, { textDecoration: "lineThrough", color: "dark" }, formatPrice(sumOfBags.cancelledAmount)), /* @__PURE__ */ React.createElement(H3, { fontWeight: "semiBold" }, formatPrice(sumOfBags.amount)))),
54
+ charges?.length > 0 && /* @__PURE__ */ React.createElement(Divider, { marginVertical: "xs" }),
55
+ charges?.map((charge) => /* @__PURE__ */ React.createElement("div", { className: cartLine, key: charge.name }, /* @__PURE__ */ React.createElement(BodyText, null, charge?.name?.toLowerCase()), /* @__PURE__ */ React.createElement("div", { className: amountWrapper }, charge.cancelledAmount > 0 && /* @__PURE__ */ React.createElement(BodyText, { textDecoration: "lineThrough", color: "dark" }, formatPrice(charge.cancelledAmount)), /* @__PURE__ */ React.createElement(BodyText, null, formatPrice(charge.amount))))),
56
+ cartSummary.totalDiscount > 0 && /* @__PURE__ */ React.createElement("div", { className: cartLine }, /* @__PURE__ */ React.createElement(BodyText, { color: "alertRed" }, saveLabel), /* @__PURE__ */ React.createElement(BodyText, { color: "alertRed" }, formatPrice(cartSummary.totalDiscount)))
57
+ ), /* @__PURE__ */ React.createElement("div", { className: cartSummaryFooter }, cartSummary.deliveryFee?.amount && cartSummary.deliveryFee.amount > 0 && /* @__PURE__ */ React.createElement("div", { className: cartLine }, /* @__PURE__ */ React.createElement(BodyText, null, shippingLabel), /* @__PURE__ */ React.createElement(BodyText, null, formatPrice(cartSummary.deliveryFee.amount))), /* @__PURE__ */ React.createElement("div", { className: cartLine }, /* @__PURE__ */ React.createElement(H3, { fontWeight: "semiBold" }, totalLabel), /* @__PURE__ */ React.createElement(H3, { fontWeight: "semiBold" }, formatPrice(cartSummary.totalAmount))), /* @__PURE__ */ React.createElement("div", { className: cartLine }, /* @__PURE__ */ React.createElement(BodyText, null, taxLabel), /* @__PURE__ */ React.createElement(BodyText, null, formatPrice(cartSummary.totalTaxAmount))))));
58
+ }
59
+
60
+ export { CartSummary };
@@ -0,0 +1,6 @@
1
+ .Divider_divider__1ibthdh0 {
2
+ width: 100%;
3
+ height: 1px;
4
+ margin: 16px 0;
5
+ background: #E8E8E8;
6
+ }
@@ -0,0 +1,7 @@
1
+ import './../../cssUtils/spacings.css.ts.vanilla.css';
2
+ import './Divider.css.ts.vanilla.css';
3
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
4
+
5
+ var divider = createRuntimeFn({ defaultClassName: "Divider_divider__1ibthdh0", variantClassNames: { marginVertical: { xxxs: "spacings_marginVertical_xxxs__e0awtzo", xxs: "spacings_marginVertical_xxs__e0awtzp", xxs2: "spacings_marginVertical_xxs2__e0awtzq", xs: "spacings_marginVertical_xs__e0awtzr", xs2: "spacings_marginVertical_xs2__e0awtzs", sm: "spacings_marginVertical_sm__e0awtzt", sm2: "spacings_marginVertical_sm2__e0awtzu", md: "spacings_marginVertical_md__e0awtzv", lg: "spacings_marginVertical_lg__e0awtzw", xl: "spacings_marginVertical_xl__e0awtzx", xxl: "spacings_marginVertical_xxl__e0awtzy", false: "spacings_marginVertical_false__e0awtzz" } }, defaultVariants: {}, compoundVariants: [] });
6
+
7
+ export { divider };
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { TSpacingKeys } from '@citygross/design-tokens_v2';
3
+
4
+ declare type TDivider = {
5
+ marginVertical?: TSpacingKeys;
6
+ };
7
+ declare const Divider: React.FunctionComponent<TDivider>;
8
+
9
+ export { Divider, TDivider };
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { divider } from './Divider.css.vanilla.js';
3
+
4
+ const Divider = ({
5
+ marginVertical
6
+ }) => {
7
+ return /* @__PURE__ */ React.createElement("div", { className: divider({ marginVertical }) });
8
+ };
9
+
10
+ export { Divider };
@@ -0,0 +1,8 @@
1
+ .Dot_dot__37teiy0 {
2
+ height: 8px;
3
+ width: 8px;
4
+ min-width: 8px;
5
+ display: inline-block;
6
+ border-radius: 100%;
7
+ box-shadow: 0 0 0 2px;
8
+ }
@@ -0,0 +1,7 @@
1
+ import './../../cssUtils/color.css.ts.vanilla.css';
2
+ import './Dot.css.ts.vanilla.css';
3
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
4
+
5
+ var dot = createRuntimeFn({ defaultClassName: "Dot_dot__37teiy0", variantClassNames: { backgroundColor: { primary: "color_backgroundColor_primary__13rr0b21b", secondary: "color_backgroundColor_secondary__13rr0b21c", brandYellow: "color_backgroundColor_brandYellow__13rr0b21d", brandBlue: "color_backgroundColor_brandBlue__13rr0b21e", brandPurple: "color_backgroundColor_brandPurple__13rr0b21f", brandPrio: "color_backgroundColor_brandPrio__13rr0b21g", yellowLighter: "color_backgroundColor_yellowLighter__13rr0b21h", yellowLight: "color_backgroundColor_yellowLight__13rr0b21i", blueLight: "color_backgroundColor_blueLight__13rr0b21j", blueLighter: "color_backgroundColor_blueLighter__13rr0b21k", blueMedium: "color_backgroundColor_blueMedium__13rr0b21l", greenLight: "color_backgroundColor_greenLight__13rr0b21m", greenMedium: "color_backgroundColor_greenMedium__13rr0b21n", redLight: "color_backgroundColor_redLight__13rr0b21o", recipeVego: "color_backgroundColor_recipeVego__13rr0b21p", recipeLactose: "color_backgroundColor_recipeLactose__13rr0b21q", recipeGluten: "color_backgroundColor_recipeGluten__13rr0b21r", link: "color_backgroundColor_link__13rr0b21s", white: "color_backgroundColor_white__13rr0b21t", black: "color_backgroundColor_black__13rr0b21u", lightest: "color_backgroundColor_lightest__13rr0b21v", lighter: "color_backgroundColor_lighter__13rr0b21w", light: "color_backgroundColor_light__13rr0b21x", medium: "color_backgroundColor_medium__13rr0b21y", mediumDark: "color_backgroundColor_mediumDark__13rr0b21z", dark: "color_backgroundColor_dark__13rr0b220", darker: "color_backgroundColor_darker__13rr0b221", darkest: "color_backgroundColor_darkest__13rr0b222", buttonGray: "color_backgroundColor_buttonGray__13rr0b223", disabledGray: "color_backgroundColor_disabledGray__13rr0b224", disabledDarkGray: "color_backgroundColor_disabledDarkGray__13rr0b225", placeholder: "color_backgroundColor_placeholder__13rr0b226", border: "color_backgroundColor_border__13rr0b227", boxShadow: "color_backgroundColor_boxShadow__13rr0b228", boxShadowActive: "color_backgroundColor_boxShadowActive__13rr0b229", alertRed: "color_backgroundColor_alertRed__13rr0b22a", alertBlue: "color_backgroundColor_alertBlue__13rr0b22b", alertGreen: "color_backgroundColor_alertGreen__13rr0b22c", darkOverlay: "color_backgroundColor_darkOverlay__13rr0b22d", transparent: "color_backgroundColor_transparent__13rr0b22e", brandBlueHover: "color_backgroundColor_brandBlueHover__13rr0b22f", brandYellowHover: "color_backgroundColor_brandYellowHover__13rr0b22g", brandPrioHover: "color_backgroundColor_brandPrioHover__13rr0b22h", brandBlueActive: "color_backgroundColor_brandBlueActive__13rr0b22i", brandYellowActive: "color_backgroundColor_brandYellowActive__13rr0b22j", brandPrioActive: "color_backgroundColor_brandPrioActive__13rr0b22k", none: "color_backgroundColor_none__13rr0b22l" }, color: { primary: "color_color_primary__13rr0b20", secondary: "color_color_secondary__13rr0b21", brandYellow: "color_color_brandYellow__13rr0b22", brandBlue: "color_color_brandBlue__13rr0b23", brandPurple: "color_color_brandPurple__13rr0b24", brandPrio: "color_color_brandPrio__13rr0b25", yellowLighter: "color_color_yellowLighter__13rr0b26", yellowLight: "color_color_yellowLight__13rr0b27", blueLight: "color_color_blueLight__13rr0b28", blueLighter: "color_color_blueLighter__13rr0b29", blueMedium: "color_color_blueMedium__13rr0b2a", greenLight: "color_color_greenLight__13rr0b2b", greenMedium: "color_color_greenMedium__13rr0b2c", redLight: "color_color_redLight__13rr0b2d", recipeVego: "color_color_recipeVego__13rr0b2e", recipeLactose: "color_color_recipeLactose__13rr0b2f", recipeGluten: "color_color_recipeGluten__13rr0b2g", link: "color_color_link__13rr0b2h", white: "color_color_white__13rr0b2i", black: "color_color_black__13rr0b2j", lightest: "color_color_lightest__13rr0b2k", lighter: "color_color_lighter__13rr0b2l", light: "color_color_light__13rr0b2m", medium: "color_color_medium__13rr0b2n", mediumDark: "color_color_mediumDark__13rr0b2o", dark: "color_color_dark__13rr0b2p", darker: "color_color_darker__13rr0b2q", darkest: "color_color_darkest__13rr0b2r", buttonGray: "color_color_buttonGray__13rr0b2s", disabledGray: "color_color_disabledGray__13rr0b2t", disabledDarkGray: "color_color_disabledDarkGray__13rr0b2u", placeholder: "color_color_placeholder__13rr0b2v", border: "color_color_border__13rr0b2w", boxShadow: "color_color_boxShadow__13rr0b2x", boxShadowActive: "color_color_boxShadowActive__13rr0b2y", alertRed: "color_color_alertRed__13rr0b2z", alertBlue: "color_color_alertBlue__13rr0b210", alertGreen: "color_color_alertGreen__13rr0b211", darkOverlay: "color_color_darkOverlay__13rr0b212", transparent: "color_color_transparent__13rr0b213", brandBlueHover: "color_color_brandBlueHover__13rr0b214", brandYellowHover: "color_color_brandYellowHover__13rr0b215", brandPrioHover: "color_color_brandPrioHover__13rr0b216", brandBlueActive: "color_color_brandBlueActive__13rr0b217", brandYellowActive: "color_color_brandYellowActive__13rr0b218", brandPrioActive: "color_color_brandPrioActive__13rr0b219", none: "color_color_none__13rr0b21a" } }, defaultVariants: {}, compoundVariants: [] });
6
+
7
+ export { dot };
@@ -0,0 +1,9 @@
1
+ import { TPaletteKeys } from '@citygross/design-tokens_v2';
2
+
3
+ declare type TDot = {
4
+ color?: TPaletteKeys;
5
+ shadow?: TPaletteKeys;
6
+ };
7
+ declare function Dot({ color, shadow }: TDot): JSX.Element;
8
+
9
+ export { Dot, TDot };
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { dot } from './Dot.css.vanilla.js';
3
+
4
+ function Dot({ color = "white", shadow }) {
5
+ return /* @__PURE__ */ React.createElement(
6
+ "div",
7
+ {
8
+ className: dot({
9
+ color: shadow,
10
+ backgroundColor: color
11
+ })
12
+ }
13
+ );
14
+ }
15
+
16
+ export { Dot };
@@ -0,0 +1,21 @@
1
+ .FormControl_formControlWrapper__1fqhaql0 {
2
+ flex: 1;
3
+ max-width: 100%;
4
+ }
5
+ .FormControl_formControlElementWrapper__1fqhaql4 {
6
+ position: relative;
7
+ padding-bottom: 8px;
8
+ display: flex;
9
+ width: 100%;
10
+ }
11
+ @media screen and (min-width: 480px) {
12
+ .FormControl_screenWidth_1\/2__1fqhaql1 {
13
+ max-width: calc(50% - 12px);
14
+ }
15
+ .FormControl_screenWidth_1\/3__1fqhaql2 {
16
+ max-width: calc(33% - 12px);
17
+ }
18
+ .FormControl_screenWidth_1\/4__1fqhaql3 {
19
+ max-width: calc(25% - 12px);
20
+ }
21
+ }
@@ -0,0 +1,7 @@
1
+ import './FormControl.css.ts.vanilla.css';
2
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
+
4
+ var formControlElementWrapper = createRuntimeFn({ defaultClassName: "FormControl_formControlElementWrapper__1fqhaql4", variantClassNames: { screenWidth: { "1/2": "FormControl_screenWidth_1/2__1fqhaql1", "1/3": "FormControl_screenWidth_1/3__1fqhaql2", "1/4": "FormControl_screenWidth_1/4__1fqhaql3" } }, defaultVariants: {}, compoundVariants: [] });
5
+ var formControlWrapper = "FormControl_formControlWrapper__1fqhaql0";
6
+
7
+ export { formControlElementWrapper, formControlWrapper };
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+
3
+ declare enum TScreenWidth {
4
+ '1/2' = "calc(50% - 12px)",
5
+ '1/3' = "calc(33% - 12px)",
6
+ '1/4' = "calc(25% - 12px)"
7
+ }
8
+ declare type TFormControl = {
9
+ title?: string;
10
+ children: React.ReactNode;
11
+ errorMessage?: React.ReactNode;
12
+ isValid?: boolean;
13
+ screenWidth?: '1/2' | '1/3' | '1/4';
14
+ };
15
+ declare function FormControl({ title, children, errorMessage, isValid, screenWidth }: TFormControl): JSX.Element;
16
+
17
+ export { FormControl, TFormControl, TScreenWidth };
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { H3 } from '@citygross/typography';
3
+ import { formControlWrapper, formControlElementWrapper } from './FormControl.css.vanilla.js';
4
+
5
+ var TScreenWidth = /* @__PURE__ */ ((TScreenWidth2) => {
6
+ TScreenWidth2["1/2"] = "calc(50% - 12px)";
7
+ TScreenWidth2["1/3"] = "calc(33% - 12px)";
8
+ TScreenWidth2["1/4"] = "calc(25% - 12px)";
9
+ return TScreenWidth2;
10
+ })(TScreenWidth || {});
11
+ function FormControl({
12
+ title,
13
+ children,
14
+ errorMessage,
15
+ isValid = true,
16
+ screenWidth
17
+ }) {
18
+ return /* @__PURE__ */ React.createElement("div", { className: formControlWrapper }, title && /* @__PURE__ */ React.createElement("div", { className: formControlElementWrapper() }, /* @__PURE__ */ React.createElement(H3, null, title)), /* @__PURE__ */ React.createElement("div", { className: formControlElementWrapper({ screenWidth }) }, children), errorMessage && !isValid && errorMessage);
19
+ }
20
+
21
+ export { FormControl, TScreenWidth };
@@ -0,0 +1,60 @@
1
+ .Input_padding_small__oylrxv0 {
2
+ padding: 4px 8px;
3
+ }
4
+ .Input_padding_default__oylrxv1 {
5
+ padding: 8px 16px;
6
+ }
7
+ .Input_flexGrow_true__oylrxv2 {
8
+ flex-grow: 1;
9
+ }
10
+ .Input_inputWrapper__oylrxv3 {
11
+ position: relative;
12
+ display: inline-block;
13
+ }
14
+ .Input_input__oylrxv5 {
15
+ outline: none;
16
+ border-radius: 2px;
17
+ background-color: #FFFFFF;
18
+ color: #333333;
19
+ transition: box-shadow 250ms ease;
20
+ border-width: 1px;
21
+ border-style: solid;
22
+ border-color: #979797;
23
+ }
24
+ .Input_input__oylrxv5:focus, .Input_input__oylrxv5:hover {
25
+ border-color: #0069AE;
26
+ }
27
+ .Input_input__oylrxv5:focus {
28
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35);
29
+ }
30
+ .Input_input__oylrxv5::placeholder {
31
+ color: #979797;
32
+ }
33
+ .Input_input__oylrxv5:disabled::placeholder {
34
+ color: #DBDBDB;
35
+ }
36
+ .Input_input_withIcon_true__oylrxvi {
37
+ width: 100%;
38
+ padding-right: 45px;
39
+ }
40
+ .Input_input_inValid_true__oylrxvj {
41
+ border-color: #E02721;
42
+ }
43
+ .Input_input_inValid_true__oylrxvj:focus, .Input_input_inValid_true__oylrxvj:hover {
44
+ border-color: #E02721;
45
+ }
46
+ .Input_input_customFocus_false__oylrxvk:focus-visible:not(:hover) {
47
+ outline: none;
48
+ box-shadow: 0 0 0 2px #fff,0 0 0 4px #000,0 0 0 6px #fff;
49
+ transition: all 0.1s ease-in-out;
50
+ }
51
+ .Input_iconWrapper__oylrxvl {
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+ position: absolute;
56
+ height: 100%;
57
+ right: 16px;
58
+ top: 0;
59
+ cursor: pointer;
60
+ }
@@ -0,0 +1,9 @@
1
+ import './../../cssUtils/typography.css.ts.vanilla.css';
2
+ import './Input.css.ts.vanilla.css';
3
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
4
+
5
+ var iconWrapper = "Input_iconWrapper__oylrxvl";
6
+ var input = createRuntimeFn({ defaultClassName: "Input_input__oylrxv5", variantClassNames: { padding: { small: "Input_padding_small__oylrxv0", "default": "Input_padding_default__oylrxv1" }, fontSize: { xs: "typography_fontSize_xs__xithyt3", s1: "typography_fontSize_s1__xithyt4", s2: "typography_fontSize_s2__xithyt5", s3: "typography_fontSize_s3__xithyt6", s4: "typography_fontSize_s4__xithyt7", m1: "typography_fontSize_m1__xithyt8", m2: "typography_fontSize_m2__xithyt9", l1: "typography_fontSize_l1__xithyta", code: "typography_fontSize_code__xithytb" }, flexGrow: { true: "Input_flexGrow_true__oylrxv2" }, withIcon: { true: "Input_input_withIcon_true__oylrxvi" }, inValid: { true: "Input_input_inValid_true__oylrxvj" }, customFocus: { false: "Input_input_customFocus_false__oylrxvk" } }, defaultVariants: { padding: "default", fontSize: "s3" }, compoundVariants: [] });
7
+ var inputWrapper = createRuntimeFn({ defaultClassName: "Input_inputWrapper__oylrxv3", variantClassNames: { flexGrow: { true: "Input_flexGrow_true__oylrxv2" } }, defaultVariants: {}, compoundVariants: [] });
8
+
9
+ export { iconWrapper, input, inputWrapper };
@@ -0,0 +1,16 @@
1
+ import { TFontSizeKeys } from '@citygross/design-tokens_v2';
2
+ import React, { InputHTMLAttributes } from 'react';
3
+
4
+ declare type TInput = InputHTMLAttributes<HTMLInputElement> & {
5
+ icon?: JSX.Element;
6
+ iconOnClick?: () => void;
7
+ flexGrow?: boolean;
8
+ inValid?: boolean;
9
+ fontSize?: TFontSizeKeys;
10
+ inputSize?: 'small' | 'medium';
11
+ };
12
+ declare function Input({ icon, iconOnClick, flexGrow, inValid, fontSize, inputSize, inputRef, ...props }: TInput & {
13
+ inputRef?: React.RefObject<HTMLInputElement>;
14
+ }): JSX.Element;
15
+
16
+ export { Input, TInput };
@@ -0,0 +1,49 @@
1
+ import { inputWrapper, input, iconWrapper } from './Input.css.vanilla.js';
2
+ import React, { useState } from 'react';
3
+
4
+ function Input({
5
+ icon,
6
+ iconOnClick,
7
+ flexGrow,
8
+ inValid,
9
+ fontSize,
10
+ inputSize = "medium",
11
+ inputRef,
12
+ ...props
13
+ }) {
14
+ const [customFocus, setCustomFocus] = useState(false);
15
+ return icon ? /* @__PURE__ */ React.createElement("div", { className: inputWrapper({ flexGrow }) }, /* @__PURE__ */ React.createElement(
16
+ "input",
17
+ {
18
+ className: input({
19
+ flexGrow,
20
+ fontSize,
21
+ padding: inputSize === "small" ? "small" : "default",
22
+ withIcon: Boolean(icon),
23
+ inValid
24
+ }),
25
+ ref: inputRef,
26
+ ...props
27
+ }
28
+ ), /* @__PURE__ */ React.createElement("div", { className: iconWrapper, onClick: iconOnClick }, icon)) : /* @__PURE__ */ React.createElement(
29
+ "input",
30
+ {
31
+ className: input({
32
+ flexGrow,
33
+ fontSize,
34
+ padding: inputSize === "small" ? "small" : "default",
35
+ withIcon: Boolean(icon),
36
+ inValid,
37
+ customFocus
38
+ }),
39
+ ref: inputRef,
40
+ onMouseDown: () => {
41
+ setCustomFocus(true);
42
+ },
43
+ onBlur: () => setCustomFocus(false),
44
+ ...props
45
+ }
46
+ );
47
+ }
48
+
49
+ export { Input };
@@ -0,0 +1,72 @@
1
+ .ListItem_itemInformationContainer__60ftl90 {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: flex-start;
5
+ }
6
+ .ListItem_itemInformationContainer_padding_none__60ftl91 {
7
+ padding: 0;
8
+ }
9
+ .ListItem_itemInformationContainer_padding_default__60ftl92 {
10
+ padding: 8px;
11
+ }
12
+ .ListItem_listItemContainer__60ftl93 {
13
+ display: flex;
14
+ justify-content: space-between;
15
+ }
16
+ .ListItem_listItemContainer__60ftl93 > p {
17
+ padding: 1px 0px;
18
+ }
19
+ .ListItem_listLeft__60ftl94 {
20
+ display: flex;
21
+ gap: 16px;
22
+ }
23
+ .ListItem_listLeft_alignItems_inherit__60ftl95 {
24
+ align-items: inherit;
25
+ }
26
+ .ListItem_listLeft_alignItems_center__60ftl96 {
27
+ align-items: center;
28
+ }
29
+ .ListItem_listRight__60ftl97 {
30
+ display: flex;
31
+ gap: 16px;
32
+ }
33
+ .ListItem_listRight_alignItems_top__60ftl98 {
34
+ align-items: flex-start;
35
+ }
36
+ .ListItem_listRight_alignItems_center__60ftl99 {
37
+ align-items: center;
38
+ }
39
+ .ListItem_listImageContainer__60ftl9a {
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ flex-direction: row;
44
+ }
45
+ .ListItem_listImageContainer_size_small__60ftl9b {
46
+ width: 32px;
47
+ height: 32px;
48
+ }
49
+ .ListItem_listImageContainer_size_default__60ftl9c {
50
+ width: 64px;
51
+ height: 64px;
52
+ }
53
+ .ListItem_listImage__60ftl9d {
54
+ max-width: 100%;
55
+ }
56
+ .ListItem_listImage_height_auto__60ftl9e {
57
+ max-height: 100%;
58
+ }
59
+ .ListItem_listImage_height_small__60ftl9f {
60
+ max-height: 32px;
61
+ }
62
+ .ListItem_listImage_height_default__60ftl9g {
63
+ max-height: 50px;
64
+ }
65
+ @media screen and (min-width: 480px) {
66
+ .ListItem_listLeft__60ftl94 {
67
+ gap: 20px;
68
+ }
69
+ .ListItem_listRight__60ftl97 {
70
+ gap: 20px;
71
+ }
72
+ }
@@ -0,0 +1,11 @@
1
+ import './ListItem.css.ts.vanilla.css';
2
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
+
4
+ var itemInformationContainer = createRuntimeFn({ defaultClassName: "ListItem_itemInformationContainer__60ftl90", variantClassNames: { padding: { none: "ListItem_itemInformationContainer_padding_none__60ftl91", "default": "ListItem_itemInformationContainer_padding_default__60ftl92" } }, defaultVariants: { padding: "default" }, compoundVariants: [] });
5
+ var listImage = createRuntimeFn({ defaultClassName: "ListItem_listImage__60ftl9d", variantClassNames: { height: { auto: "ListItem_listImage_height_auto__60ftl9e", small: "ListItem_listImage_height_small__60ftl9f", "default": "ListItem_listImage_height_default__60ftl9g" } }, defaultVariants: { height: "default" }, compoundVariants: [] });
6
+ var listImageContainer = createRuntimeFn({ defaultClassName: "ListItem_listImageContainer__60ftl9a", variantClassNames: { size: { small: "ListItem_listImageContainer_size_small__60ftl9b", "default": "ListItem_listImageContainer_size_default__60ftl9c" } }, defaultVariants: { size: "default" }, compoundVariants: [] });
7
+ var listItemContainer = "ListItem_listItemContainer__60ftl93";
8
+ var listLeft = createRuntimeFn({ defaultClassName: "ListItem_listLeft__60ftl94", variantClassNames: { alignItems: { inherit: "ListItem_listLeft_alignItems_inherit__60ftl95", center: "ListItem_listLeft_alignItems_center__60ftl96" } }, defaultVariants: { alignItems: "center" }, compoundVariants: [] });
9
+ var listRight = createRuntimeFn({ defaultClassName: "ListItem_listRight__60ftl97", variantClassNames: { alignItems: { top: "ListItem_listRight_alignItems_top__60ftl98", center: "ListItem_listRight_alignItems_center__60ftl99" } }, defaultVariants: { alignItems: "center" }, compoundVariants: [] });
10
+
11
+ export { itemInformationContainer, listImage, listImageContainer, listItemContainer, listLeft, listRight };
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { TPaletteKeys } from '@citygross/design-tokens_v2';
3
+
4
+ declare type TItem = {
5
+ name?: string;
6
+ image?: string;
7
+ description?: string;
8
+ secondaryDescription?: React.ReactNode;
9
+ };
10
+ declare enum EListItemAlignment {
11
+ CENTER = "center",
12
+ TOP = "flex-start"
13
+ }
14
+ declare type TListItem = {
15
+ item?: TItem;
16
+ loading?: boolean;
17
+ children?: React.ReactNode;
18
+ fallBackImage?: string;
19
+ imageAutoHeight?: boolean;
20
+ boldHeader?: boolean;
21
+ smallSkeleton?: boolean;
22
+ isSmall?: boolean;
23
+ usedInSearch?: boolean;
24
+ alignment?: EListItemAlignment;
25
+ textColor?: TPaletteKeys;
26
+ };
27
+ declare function ListItem({ item, loading, isSmall, fallBackImage, imageAutoHeight, boldHeader, smallSkeleton, children, alignment, textColor, usedInSearch }: TListItem): JSX.Element;
28
+
29
+ export { EListItemAlignment, ListItem, TItem, TListItem };
@@ -0,0 +1,92 @@
1
+ import React from 'react';
2
+ import FallbackIcon from './assets/fallback_grocery.js';
3
+ import { listItemContainer, listLeft, listImageContainer, listImage, itemInformationContainer, listRight } from './ListItem.css.vanilla.js';
4
+ import { BodyText } from '../../typography/BodyText/BodyText.js';
5
+ import Skeleton from '../Skeleton/Skeleton.js';
6
+
7
+ var EListItemAlignment = /* @__PURE__ */ ((EListItemAlignment2) => {
8
+ EListItemAlignment2["CENTER"] = "center";
9
+ EListItemAlignment2["TOP"] = "flex-start";
10
+ return EListItemAlignment2;
11
+ })(EListItemAlignment || {});
12
+ function ListItem({
13
+ item,
14
+ loading,
15
+ isSmall,
16
+ fallBackImage,
17
+ imageAutoHeight,
18
+ boldHeader,
19
+ smallSkeleton,
20
+ children,
21
+ alignment = "center" /* CENTER */,
22
+ textColor,
23
+ usedInSearch
24
+ }) {
25
+ return /* @__PURE__ */ React.createElement("div", { className: listItemContainer }, /* @__PURE__ */ React.createElement(
26
+ "div",
27
+ {
28
+ className: listLeft({
29
+ alignItems: usedInSearch || alignment === "flex-start" /* TOP */ ? "inherit" : "center"
30
+ })
31
+ },
32
+ /* @__PURE__ */ React.createElement(
33
+ "div",
34
+ {
35
+ className: listImageContainer({
36
+ size: isSmall ? "small" : "default"
37
+ })
38
+ },
39
+ /* @__PURE__ */ React.createElement(
40
+ "img",
41
+ {
42
+ className: listImage({
43
+ height: imageAutoHeight ? "auto" : isSmall ? "small" : "default"
44
+ }),
45
+ src: item?.image || fallBackImage || FallbackIcon,
46
+ alt: item?.name,
47
+ onError: (e) => {
48
+ const target = e.target;
49
+ target.onerror = null;
50
+ target.src = fallBackImage || FallbackIcon;
51
+ }
52
+ }
53
+ )
54
+ ),
55
+ /* @__PURE__ */ React.createElement(
56
+ "div",
57
+ {
58
+ className: itemInformationContainer({
59
+ padding: usedInSearch || alignment === "flex-start" /* TOP */ ? "none" : "default"
60
+ })
61
+ },
62
+ /* @__PURE__ */ React.createElement(
63
+ BodyText,
64
+ {
65
+ fontWeight: boldHeader ? "semiBold" : "regular",
66
+ color: textColor || "darkest",
67
+ size: isSmall ? "extraSmall" : "default"
68
+ },
69
+ item?.name || /* @__PURE__ */ React.createElement(Skeleton, { width: smallSkeleton ? 152 : 192, height: 16 })
70
+ ),
71
+ loading ? /* @__PURE__ */ React.createElement(BodyText, { size: "small" }, /* @__PURE__ */ React.createElement(Skeleton, { width: smallSkeleton ? 152 : 192, height: 16 })) : item?.description ? /* @__PURE__ */ React.createElement(
72
+ BodyText,
73
+ {
74
+ size: isSmall ? "tiny" : "small",
75
+ color: textColor || "dark"
76
+ },
77
+ item?.description
78
+ ) : null,
79
+ item?.secondaryDescription && item.secondaryDescription
80
+ )
81
+ ), children && /* @__PURE__ */ React.createElement(
82
+ "div",
83
+ {
84
+ className: listRight({
85
+ alignItems: alignment === "flex-start" /* TOP */ ? "top" : "center"
86
+ })
87
+ },
88
+ children
89
+ ));
90
+ }
91
+
92
+ export { EListItemAlignment, ListItem };
@@ -0,0 +1,3 @@
1
+ var FallbackIcon = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"128px\" height=\"124px\" viewBox=\"0 0 128 124\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 52.4 (67378) - http://www.bohemiancoding.com/sketch -->\n <title>shopping_cart_loaded</title>\n <desc>Created with Sketch.</desc>\n <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"Artboard\" transform=\"translate(-100.000000, -53.000000)\">\n <g id=\"shopping_cart_loaded\" transform=\"translate(100.000000, 53.000000)\">\n <polygon id=\"Rectangle\" fill=\"#D8D8D8\" transform=\"translate(89.585472, 37.151291) rotate(45.000000) translate(-89.585472, -37.151291) \" points=\"69.9549199 17.5207389 109.199991 17.536771 109.216023 56.7818423 69.970952 56.7658102\"></polygon>\n <polygon id=\"Rectangle\" fill=\"#D1D1D1\" transform=\"translate(61.784256, 30.970598) rotate(45.000000) translate(-61.784256, -30.970598) \" points=\"39.9897062 9.17604823 83.5610058 9.19384764 83.5788052 52.7651473 40.0075056 52.7473478\"></polygon>\n <g id=\"Group\" transform=\"translate(6.000000, 12.000000)\" fill=\"#E8E8E8\">\n <path d=\"M40.2213256,80.6 C36.8179827,80.6 34.0334294,77.81 34.0334294,74.4 L34.0334294,43.4 L21.6576369,43.4 L21.6576369,74.4 C21.6576369,84.63 30.0112968,93 40.2213256,93 L99.0063401,93 L99.0063401,80.6 L40.2213256,80.6 Z\" id=\"Path\"></path>\n <path d=\"M24.1327954,12.4 L22.8952161,8.37 C21.0388473,3.41 16.3979251,0 11.1382133,0 L0,0 L0,12.4 L11.1382133,12.4 L28.154928,63.86 C29.0831124,66.34 31.2488761,68.2 34.0334294,68.2 L92.8184438,68.2 C95.2936023,68.2 97.459366,66.65 98.3875504,64.48 L121.901556,12.4 L24.1327954,12.4 Z\" id=\"Path\"></path>\n </g>\n <ellipse id=\"Oval\" fill=\"#D8D8D8\" cx=\"6\" cy=\"18.5\" rx=\"6\" ry=\"6.5\"></ellipse>\n <g id=\"Group\" transform=\"translate(40.000000, 105.000000)\" fill=\"#D8D8D8\">\n <ellipse id=\"Oval\" cx=\"55.7142857\" cy=\"9.5\" rx=\"9.28571429\" ry=\"9.5\"></ellipse>\n <ellipse id=\"Oval\" cx=\"9.28571429\" cy=\"9.5\" rx=\"9.28571429\" ry=\"9.5\"></ellipse>\n </g>\n <g id=\"Group\" transform=\"translate(46.000000, 112.000000)\" fill=\"#D1D1D1\">\n <ellipse id=\"Oval\" cx=\"49.8823529\" cy=\"3\" rx=\"3.11764706\" ry=\"3\"></ellipse>\n <ellipse id=\"Oval\" cx=\"3.11764706\" cy=\"3\" rx=\"3.11764706\" ry=\"3\"></ellipse>\n </g>\n </g>\n </g>\n </g>\n</svg>";
2
+
3
+ export { FallbackIcon as default };