jourma-react-lib 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),x=require("react");function y({variant:i="filled",intent:e="normal",size:n="large",label:o,htmlType:r="button",className:c,disabled:s,children:l,...a}){const d=["button",`button--${i}`,`button--${e}`,`button--${n}`,c].filter(Boolean).join(" ");return t.jsx("button",{type:r,className:d,disabled:s,...a,children:l??o??"Button"})}function v({variant:i="filled",intent:e="normal",icon:n,htmlType:o="button",className:r,disabled:c,...s}){const l=["icon-button",`icon-button--${i}`,`icon-button--${e}`,r].filter(Boolean).join(" ");return t.jsx("button",{type:o,className:l,disabled:c,...s,children:t.jsx("span",{className:"icon-button__icon",children:n})})}const h=()=>t.jsxs("svg",{viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"text-field__error-icon",children:[t.jsx("circle",{cx:"8.5",cy:"8.5",r:"7.5",stroke:"currentColor",strokeWidth:"1.5"}),t.jsx("line",{x1:"8.5",y1:"4.5",x2:"8.5",y2:"9.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),t.jsx("circle",{cx:"8.5",cy:"12",r:"0.75",fill:"currentColor"})]}),b=x.forwardRef(({size:i="large",label:e,errorMessage:n,errorIcon:o,className:r,disabled:c,onFocus:s,onBlur:l,...a},d)=>{const[N,j]=x.useState(!1),m=x.useCallback(f=>{j(!0),s==null||s(f)},[s]),p=x.useCallback(f=>{j(!1),l==null||l(f)},[l]),w=c?"text-field--disabled":N?"text-field--focused":"",_=["text-field",`text-field--${i}`,w,r].filter(Boolean).join(" "),u=!!n;return i==="compact"?t.jsxs("div",{className:_,children:[t.jsxs("div",{className:"text-field__input-wrapper",children:[e&&t.jsx("label",{className:"text-field__label",children:e}),t.jsx("input",{ref:d,className:"text-field__input",disabled:c,onFocus:m,onBlur:p,...a}),u&&(o??t.jsx(h,{}))]}),u&&t.jsx("p",{className:"text-field__error",children:n})]}):t.jsxs("div",{className:_,children:[e&&t.jsx("label",{className:"text-field__label",children:e}),t.jsxs("div",{className:"text-field__input-wrapper",children:[t.jsx("input",{ref:d,className:"text-field__input",disabled:c,onFocus:m,onBlur:p,...a}),u&&(o??t.jsx(h,{}))]}),u&&t.jsx("p",{className:"text-field__error",children:n})]})});b.displayName="TextField";exports.Button=y;exports.IconButton=v;exports.TextField=b;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),m=require("react");function w({variant:l="filled",intent:a="normal",size:o="large",label:c,htmlType:i="button",className:n,disabled:s,children:t,...r}){const d=["button",`button--${l}`,`button--${a}`,`button--${o}`,n].filter(Boolean).join(" ");return e.jsx("button",{type:i,className:d,disabled:s,...r,children:t??c??"Button"})}function g({variant:l="filled",intent:a="normal",icon:o,htmlType:c="button",className:i,disabled:n,...s}){const t=["icon-button",`icon-button--${l}`,`icon-button--${a}`,i].filter(Boolean).join(" ");return e.jsx("button",{type:c,className:t,disabled:n,...s,children:e.jsx("span",{className:"icon-button__icon",children:o})})}const N=()=>e.jsxs("svg",{viewBox:"0 0 17 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"text-field__error-icon",children:[e.jsx("circle",{cx:"8.5",cy:"8.5",r:"7.5",stroke:"currentColor",strokeWidth:"1.5"}),e.jsx("line",{x1:"8.5",y1:"4.5",x2:"8.5",y2:"9.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),e.jsx("circle",{cx:"8.5",cy:"12",r:"0.75",fill:"currentColor"})]}),v=m.forwardRef(({size:l="large",label:a,errorMessage:o,errorIcon:c,className:i,disabled:n,onFocus:s,onBlur:t,...r},d)=>{const[_,x]=m.useState(!1),h=m.useCallback(j=>{x(!0),s==null||s(j)},[s]),p=m.useCallback(j=>{x(!1),t==null||t(j)},[t]),b=n?"text-field--disabled":_?"text-field--focused":"",f=["text-field",`text-field--${l}`,b,i].filter(Boolean).join(" "),u=!!o;return l==="compact"?e.jsxs("div",{className:f,children:[e.jsxs("div",{className:"text-field__input-wrapper",children:[a&&e.jsx("label",{className:"text-field__label",children:a}),e.jsx("input",{ref:d,className:"text-field__input",disabled:n,onFocus:h,onBlur:p,...r}),u&&(c??e.jsx(N,{}))]}),u&&e.jsx("p",{className:"text-field__error",children:o})]}):e.jsxs("div",{className:f,children:[a&&e.jsx("label",{className:"text-field__label",children:a}),e.jsxs("div",{className:"text-field__input-wrapper",children:[e.jsx("input",{ref:d,className:"text-field__input",disabled:n,onFocus:h,onBlur:p,...r}),u&&(c??e.jsx(N,{}))]}),u&&e.jsx("p",{className:"text-field__error",children:o})]})});v.displayName="TextField";function C({imageSrc:l,imageAlt:a="",title:o,badgeCount:c,disabled:i=!1,className:n,...s}){const t=["collection-thumbnail",i?"collection-thumbnail--disabled":"",n].filter(Boolean).join(" ");return e.jsxs("div",{className:t,...s,children:[e.jsx("div",{className:"collection-thumbnail__image",children:e.jsx("img",{src:l,alt:a})}),e.jsx("p",{className:"collection-thumbnail__title",children:o}),c!=null&&e.jsx("div",{className:"collection-thumbnail__badge",children:e.jsx("span",{className:"collection-thumbnail__badge-text",children:c})})]})}function k({imageSrc:l,imageAlt:a="",title:o,price:c,priceTranslation:i,discountLabel:n,appIcon:s,className:t,...r}){const d=["product-teaser",t].filter(Boolean).join(" ");return e.jsxs("div",{className:d,...r,children:[e.jsx("div",{className:"product-teaser__image",children:e.jsx("img",{src:l,alt:a})}),e.jsxs("div",{className:"product-teaser__info",children:[e.jsx("p",{className:"product-teaser__title",children:o}),e.jsxs("div",{className:"product-teaser__price-row",children:[e.jsx("span",{className:"product-teaser__price",children:c}),i&&e.jsx("span",{className:"product-teaser__price-translation",children:i})]})]}),s&&e.jsx("div",{className:"product-teaser__app-icon",children:s}),n&&e.jsx("div",{className:"product-teaser__discount",children:n})]})}const B=({filled:l})=>e.jsx("svg",{viewBox:"0 0 24 21",fill:l?"currentColor":"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M12 19.5C12 19.5 1.5 13.5 1.5 6.75C1.5 3.5 4 1.5 6.75 1.5C9 1.5 11 3 12 4.5C13 3 15 1.5 17.25 1.5C20 1.5 22.5 3.5 22.5 6.75C22.5 13.5 12 19.5 12 19.5Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});function y({imageSrc:l,imageAlt:a="",title:o,tags:c=[],appIcon:i,showWishlistButton:n=!0,onWishlistClick:s,wishlisted:t=!1,className:r,...d}){const _=["location-teaser",r].filter(Boolean).join(" ");return e.jsxs("div",{className:_,...d,children:[e.jsx("div",{className:"location-teaser__image",children:e.jsx("img",{src:l,alt:a})}),e.jsxs("div",{className:"location-teaser__info",children:[e.jsx("p",{className:"location-teaser__title",children:o}),(c.length>0||i)&&e.jsxs("div",{className:"location-teaser__tags",children:[i&&e.jsx("div",{className:"location-teaser__app-icon-wrapper",children:e.jsx("div",{className:"location-teaser__app-icon",children:i})}),c.map(x=>e.jsx("div",{className:"location-teaser__tag",children:e.jsx("span",{className:"location-teaser__tag-text",children:x})},x))]})]}),n&&e.jsx("button",{className:"location-teaser__wishlist",onClick:s,"aria-label":t?"Remove from wishlist":"Add to wishlist",children:e.jsx(B,{filled:t})})]})}exports.Button=w;exports.CollectionThumbnail=C;exports.IconButton=g;exports.LocationTeaser=y;exports.ProductTeaser=k;exports.TextField=v;
package/dist/index.mjs CHANGED
@@ -1,61 +1,61 @@
1
- import { jsx as t, jsxs as a } from "react/jsx-runtime";
2
- import { forwardRef as y, useState as k, useCallback as N } from "react";
3
- function C({
4
- variant: i = "filled",
5
- intent: e = "normal",
6
- size: o = "large",
7
- label: s,
8
- htmlType: r = "button",
9
- className: c,
10
- disabled: l,
11
- children: n,
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import { forwardRef as g, useState as C, useCallback as v } from "react";
3
+ function $({
4
+ variant: a = "filled",
5
+ intent: i = "normal",
6
+ size: r = "large",
7
+ label: c,
8
+ htmlType: s = "button",
9
+ className: n,
10
+ disabled: t,
11
+ children: l,
12
12
  ...d
13
13
  }) {
14
- const u = [
14
+ const m = [
15
15
  "button",
16
+ `button--${a}`,
16
17
  `button--${i}`,
17
- `button--${e}`,
18
- `button--${o}`,
19
- c
18
+ `button--${r}`,
19
+ n
20
20
  ].filter(Boolean).join(" ");
21
- return /* @__PURE__ */ t(
21
+ return /* @__PURE__ */ e(
22
22
  "button",
23
23
  {
24
- type: r,
25
- className: u,
26
- disabled: l,
24
+ type: s,
25
+ className: m,
26
+ disabled: t,
27
27
  ...d,
28
- children: n ?? s ?? "Button"
28
+ children: l ?? c ?? "Button"
29
29
  }
30
30
  );
31
31
  }
32
- function g({
33
- variant: i = "filled",
34
- intent: e = "normal",
35
- icon: o,
36
- htmlType: s = "button",
37
- className: r,
38
- disabled: c,
39
- ...l
32
+ function T({
33
+ variant: a = "filled",
34
+ intent: i = "normal",
35
+ icon: r,
36
+ htmlType: c = "button",
37
+ className: s,
38
+ disabled: n,
39
+ ...t
40
40
  }) {
41
- const n = [
41
+ const l = [
42
42
  "icon-button",
43
+ `icon-button--${a}`,
43
44
  `icon-button--${i}`,
44
- `icon-button--${e}`,
45
- r
45
+ s
46
46
  ].filter(Boolean).join(" ");
47
- return /* @__PURE__ */ t(
47
+ return /* @__PURE__ */ e(
48
48
  "button",
49
49
  {
50
- type: s,
51
- className: n,
52
- disabled: c,
53
- ...l,
54
- children: /* @__PURE__ */ t("span", { className: "icon-button__icon", children: o })
50
+ type: c,
51
+ className: l,
52
+ disabled: n,
53
+ ...t,
54
+ children: /* @__PURE__ */ e("span", { className: "icon-button__icon", children: r })
55
55
  }
56
56
  );
57
57
  }
58
- const b = () => /* @__PURE__ */ a(
58
+ const b = () => /* @__PURE__ */ o(
59
59
  "svg",
60
60
  {
61
61
  viewBox: "0 0 17 17",
@@ -63,7 +63,7 @@ const b = () => /* @__PURE__ */ a(
63
63
  xmlns: "http://www.w3.org/2000/svg",
64
64
  className: "text-field__error-icon",
65
65
  children: [
66
- /* @__PURE__ */ t(
66
+ /* @__PURE__ */ e(
67
67
  "circle",
68
68
  {
69
69
  cx: "8.5",
@@ -73,7 +73,7 @@ const b = () => /* @__PURE__ */ a(
73
73
  strokeWidth: "1.5"
74
74
  }
75
75
  ),
76
- /* @__PURE__ */ t(
76
+ /* @__PURE__ */ e(
77
77
  "line",
78
78
  {
79
79
  x1: "8.5",
@@ -85,77 +85,176 @@ const b = () => /* @__PURE__ */ a(
85
85
  strokeLinecap: "round"
86
86
  }
87
87
  ),
88
- /* @__PURE__ */ t("circle", { cx: "8.5", cy: "12", r: "0.75", fill: "currentColor" })
88
+ /* @__PURE__ */ e("circle", { cx: "8.5", cy: "12", r: "0.75", fill: "currentColor" })
89
89
  ]
90
90
  }
91
- ), $ = y(
91
+ ), k = g(
92
92
  ({
93
- size: i = "large",
94
- label: e,
95
- errorMessage: o,
96
- errorIcon: s,
97
- className: r,
98
- disabled: c,
99
- onFocus: l,
100
- onBlur: n,
93
+ size: a = "large",
94
+ label: i,
95
+ errorMessage: r,
96
+ errorIcon: c,
97
+ className: s,
98
+ disabled: n,
99
+ onFocus: t,
100
+ onBlur: l,
101
101
  ...d
102
- }, u) => {
103
- const [w, m] = k(!1), p = N(
104
- (x) => {
105
- m(!0), l == null || l(x);
102
+ }, m) => {
103
+ const [h, u] = C(!1), f = v(
104
+ (p) => {
105
+ u(!0), t == null || t(p);
106
106
  },
107
- [l]
108
- ), _ = N(
109
- (x) => {
110
- m(!1), n == null || n(x);
107
+ [t]
108
+ ), N = v(
109
+ (p) => {
110
+ u(!1), l == null || l(p);
111
111
  },
112
- [n]
113
- ), v = c ? "text-field--disabled" : w ? "text-field--focused" : "", h = [
112
+ [l]
113
+ ), w = n ? "text-field--disabled" : h ? "text-field--focused" : "", x = [
114
114
  "text-field",
115
- `text-field--${i}`,
116
- v,
117
- r
118
- ].filter(Boolean).join(" "), f = !!o;
119
- return i === "compact" ? /* @__PURE__ */ a("div", { className: h, children: [
120
- /* @__PURE__ */ a("div", { className: "text-field__input-wrapper", children: [
121
- e && /* @__PURE__ */ t("label", { className: "text-field__label", children: e }),
122
- /* @__PURE__ */ t(
115
+ `text-field--${a}`,
116
+ w,
117
+ s
118
+ ].filter(Boolean).join(" "), _ = !!r;
119
+ return a === "compact" ? /* @__PURE__ */ o("div", { className: x, children: [
120
+ /* @__PURE__ */ o("div", { className: "text-field__input-wrapper", children: [
121
+ i && /* @__PURE__ */ e("label", { className: "text-field__label", children: i }),
122
+ /* @__PURE__ */ e(
123
123
  "input",
124
124
  {
125
- ref: u,
125
+ ref: m,
126
126
  className: "text-field__input",
127
- disabled: c,
128
- onFocus: p,
129
- onBlur: _,
127
+ disabled: n,
128
+ onFocus: f,
129
+ onBlur: N,
130
130
  ...d
131
131
  }
132
132
  ),
133
- f && (s ?? /* @__PURE__ */ t(b, {}))
133
+ _ && (c ?? /* @__PURE__ */ e(b, {}))
134
134
  ] }),
135
- f && /* @__PURE__ */ t("p", { className: "text-field__error", children: o })
136
- ] }) : /* @__PURE__ */ a("div", { className: h, children: [
137
- e && /* @__PURE__ */ t("label", { className: "text-field__label", children: e }),
138
- /* @__PURE__ */ a("div", { className: "text-field__input-wrapper", children: [
139
- /* @__PURE__ */ t(
135
+ _ && /* @__PURE__ */ e("p", { className: "text-field__error", children: r })
136
+ ] }) : /* @__PURE__ */ o("div", { className: x, children: [
137
+ i && /* @__PURE__ */ e("label", { className: "text-field__label", children: i }),
138
+ /* @__PURE__ */ o("div", { className: "text-field__input-wrapper", children: [
139
+ /* @__PURE__ */ e(
140
140
  "input",
141
141
  {
142
- ref: u,
142
+ ref: m,
143
143
  className: "text-field__input",
144
- disabled: c,
145
- onFocus: p,
146
- onBlur: _,
144
+ disabled: n,
145
+ onFocus: f,
146
+ onBlur: N,
147
147
  ...d
148
148
  }
149
149
  ),
150
- f && (s ?? /* @__PURE__ */ t(b, {}))
150
+ _ && (c ?? /* @__PURE__ */ e(b, {}))
151
151
  ] }),
152
- f && /* @__PURE__ */ t("p", { className: "text-field__error", children: o })
152
+ _ && /* @__PURE__ */ e("p", { className: "text-field__error", children: r })
153
153
  ] });
154
154
  }
155
155
  );
156
- $.displayName = "TextField";
156
+ k.displayName = "TextField";
157
+ function L({
158
+ imageSrc: a,
159
+ imageAlt: i = "",
160
+ title: r,
161
+ badgeCount: c,
162
+ disabled: s = !1,
163
+ className: n,
164
+ ...t
165
+ }) {
166
+ const l = [
167
+ "collection-thumbnail",
168
+ s ? "collection-thumbnail--disabled" : "",
169
+ n
170
+ ].filter(Boolean).join(" ");
171
+ return /* @__PURE__ */ o("div", { className: l, ...t, children: [
172
+ /* @__PURE__ */ e("div", { className: "collection-thumbnail__image", children: /* @__PURE__ */ e("img", { src: a, alt: i }) }),
173
+ /* @__PURE__ */ e("p", { className: "collection-thumbnail__title", children: r }),
174
+ c != null && /* @__PURE__ */ e("div", { className: "collection-thumbnail__badge", children: /* @__PURE__ */ e("span", { className: "collection-thumbnail__badge-text", children: c }) })
175
+ ] });
176
+ }
177
+ function W({
178
+ imageSrc: a,
179
+ imageAlt: i = "",
180
+ title: r,
181
+ price: c,
182
+ priceTranslation: s,
183
+ discountLabel: n,
184
+ appIcon: t,
185
+ className: l,
186
+ ...d
187
+ }) {
188
+ const m = ["product-teaser", l].filter(Boolean).join(" ");
189
+ return /* @__PURE__ */ o("div", { className: m, ...d, children: [
190
+ /* @__PURE__ */ e("div", { className: "product-teaser__image", children: /* @__PURE__ */ e("img", { src: a, alt: i }) }),
191
+ /* @__PURE__ */ o("div", { className: "product-teaser__info", children: [
192
+ /* @__PURE__ */ e("p", { className: "product-teaser__title", children: r }),
193
+ /* @__PURE__ */ o("div", { className: "product-teaser__price-row", children: [
194
+ /* @__PURE__ */ e("span", { className: "product-teaser__price", children: c }),
195
+ s && /* @__PURE__ */ e("span", { className: "product-teaser__price-translation", children: s })
196
+ ] })
197
+ ] }),
198
+ t && /* @__PURE__ */ e("div", { className: "product-teaser__app-icon", children: t }),
199
+ n && /* @__PURE__ */ e("div", { className: "product-teaser__discount", children: n })
200
+ ] });
201
+ }
202
+ const j = ({ filled: a }) => /* @__PURE__ */ e(
203
+ "svg",
204
+ {
205
+ viewBox: "0 0 24 21",
206
+ fill: a ? "currentColor" : "none",
207
+ xmlns: "http://www.w3.org/2000/svg",
208
+ children: /* @__PURE__ */ e(
209
+ "path",
210
+ {
211
+ d: "M12 19.5C12 19.5 1.5 13.5 1.5 6.75C1.5 3.5 4 1.5 6.75 1.5C9 1.5 11 3 12 4.5C13 3 15 1.5 17.25 1.5C20 1.5 22.5 3.5 22.5 6.75C22.5 13.5 12 19.5 12 19.5Z",
212
+ stroke: "currentColor",
213
+ strokeWidth: "1.5",
214
+ strokeLinecap: "round",
215
+ strokeLinejoin: "round"
216
+ }
217
+ )
218
+ }
219
+ );
220
+ function E({
221
+ imageSrc: a,
222
+ imageAlt: i = "",
223
+ title: r,
224
+ tags: c = [],
225
+ appIcon: s,
226
+ showWishlistButton: n = !0,
227
+ onWishlistClick: t,
228
+ wishlisted: l = !1,
229
+ className: d,
230
+ ...m
231
+ }) {
232
+ const h = ["location-teaser", d].filter(Boolean).join(" ");
233
+ return /* @__PURE__ */ o("div", { className: h, ...m, children: [
234
+ /* @__PURE__ */ e("div", { className: "location-teaser__image", children: /* @__PURE__ */ e("img", { src: a, alt: i }) }),
235
+ /* @__PURE__ */ o("div", { className: "location-teaser__info", children: [
236
+ /* @__PURE__ */ e("p", { className: "location-teaser__title", children: r }),
237
+ (c.length > 0 || s) && /* @__PURE__ */ o("div", { className: "location-teaser__tags", children: [
238
+ s && /* @__PURE__ */ e("div", { className: "location-teaser__app-icon-wrapper", children: /* @__PURE__ */ e("div", { className: "location-teaser__app-icon", children: s }) }),
239
+ c.map((u) => /* @__PURE__ */ e("div", { className: "location-teaser__tag", children: /* @__PURE__ */ e("span", { className: "location-teaser__tag-text", children: u }) }, u))
240
+ ] })
241
+ ] }),
242
+ n && /* @__PURE__ */ e(
243
+ "button",
244
+ {
245
+ className: "location-teaser__wishlist",
246
+ onClick: t,
247
+ "aria-label": l ? "Remove from wishlist" : "Add to wishlist",
248
+ children: /* @__PURE__ */ e(j, { filled: l })
249
+ }
250
+ )
251
+ ] });
252
+ }
157
253
  export {
158
- C as Button,
159
- g as IconButton,
160
- $ as TextField
254
+ $ as Button,
255
+ L as CollectionThumbnail,
256
+ T as IconButton,
257
+ E as LocationTeaser,
258
+ W as ProductTeaser,
259
+ k as TextField
161
260
  };
@@ -0,0 +1,15 @@
1
+ import { HTMLAttributes } from 'react';
2
+
3
+ export interface CollectionThumbnailProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
4
+ /** Image source URL */
5
+ imageSrc: string;
6
+ /** Image alt text */
7
+ imageAlt?: string;
8
+ /** Title text below the image */
9
+ title: string;
10
+ /** Badge count (shown in top-right corner) */
11
+ badgeCount?: number;
12
+ /** Whether the component is disabled */
13
+ disabled?: boolean;
14
+ }
15
+ export declare function CollectionThumbnail({ imageSrc, imageAlt, title, badgeCount, disabled, className, ...rest }: CollectionThumbnailProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { CollectionThumbnail } from './CollectionThumbnail';
3
+
4
+ declare const meta: Meta<typeof CollectionThumbnail>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof CollectionThumbnail>;
7
+ export declare const Playground: Story;
8
+ export declare const WithBadge: Story;
9
+ export declare const NoBadge: Story;
10
+ export declare const Disabled: Story;
11
+ export declare const AllStates: Story;
@@ -0,0 +1,2 @@
1
+ export { CollectionThumbnail } from './CollectionThumbnail';
2
+ export type { CollectionThumbnailProps } from './CollectionThumbnail';
@@ -0,0 +1,21 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+
3
+ export interface LocationTeaserProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
4
+ /** Location image source URL */
5
+ imageSrc: string;
6
+ /** Image alt text */
7
+ imageAlt?: string;
8
+ /** Location title */
9
+ title: string;
10
+ /** Tags displayed below the title (e.g. category, distance, open status) */
11
+ tags?: string[];
12
+ /** App icon element shown before the tags */
13
+ appIcon?: ReactNode;
14
+ /** Whether to show the wishlist/favorite button */
15
+ showWishlistButton?: boolean;
16
+ /** Callback when wishlist button is clicked */
17
+ onWishlistClick?: () => void;
18
+ /** Whether the item is wishlisted */
19
+ wishlisted?: boolean;
20
+ }
21
+ export declare function LocationTeaser({ imageSrc, imageAlt, title, tags, appIcon, showWishlistButton, onWishlistClick, wishlisted, className, ...rest }: LocationTeaserProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { LocationTeaser } from './LocationTeaser';
3
+
4
+ declare const meta: Meta<typeof LocationTeaser>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof LocationTeaser>;
7
+ export declare const Playground: Story;
8
+ export declare const Wishlisted: Story;
9
+ export declare const NoWishlistButton: Story;
10
+ export declare const WithoutTags: Story;
11
+ export declare const LongTitle: Story;
@@ -0,0 +1,2 @@
1
+ export { LocationTeaser } from './LocationTeaser';
2
+ export type { LocationTeaserProps } from './LocationTeaser';
@@ -0,0 +1,19 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+
3
+ export interface ProductTeaserProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
4
+ /** Product image source URL */
5
+ imageSrc: string;
6
+ /** Image alt text */
7
+ imageAlt?: string;
8
+ /** Product title */
9
+ title: string;
10
+ /** Price in local currency */
11
+ price: string;
12
+ /** Price in translated/secondary currency */
13
+ priceTranslation?: string;
14
+ /** Discount label text (e.g. "-5%") */
15
+ discountLabel?: string;
16
+ /** App icon element shown in top-left corner */
17
+ appIcon?: ReactNode;
18
+ }
19
+ export declare function ProductTeaser({ imageSrc, imageAlt, title, price, priceTranslation, discountLabel, appIcon, className, ...rest }: ProductTeaserProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { ProductTeaser } from './ProductTeaser';
3
+
4
+ declare const meta: Meta<typeof ProductTeaser>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof ProductTeaser>;
7
+ export declare const Playground: Story;
8
+ export declare const WithDiscount: Story;
9
+ export declare const NoDiscount: Story;
10
+ export declare const AllVariants: Story;
@@ -0,0 +1,2 @@
1
+ export { ProductTeaser } from './ProductTeaser';
2
+ export type { ProductTeaserProps } from './ProductTeaser';
@@ -5,3 +5,9 @@ export { IconButton } from './components/IconButton';
5
5
  export type { IconButtonProps, IconButtonStyle, IconButtonIntent } from './components/IconButton';
6
6
  export { TextField } from './components/TextField';
7
7
  export type { TextFieldProps, TextFieldSize } from './components/TextField';
8
+ export { CollectionThumbnail } from './components/CollectionThumbnail';
9
+ export type { CollectionThumbnailProps } from './components/CollectionThumbnail';
10
+ export { ProductTeaser } from './components/ProductTeaser';
11
+ export type { ProductTeaserProps } from './components/ProductTeaser';
12
+ export { LocationTeaser } from './components/LocationTeaser';
13
+ export type { LocationTeaserProps } from './components/LocationTeaser';
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- :root{--jourma-color-action: #00ff9f;--jourma-color-action-special: #ff46ff;--jourma-color-action-attention: #ff3d48;--jourma-color-action-pressed: white;--jourma-color-text-on-action: #00322f;--jourma-color-text-on-action-attention: black;--jourma-color-text-on-action-special: black;--jourma-color-text-on-surface-focused: black;--jourma-color-text-on-surface: white;--jourma-color-text-action: #00ff9f;--jourma-color-text-attention: #ff3d48;--jourma-color-text-special: #ff46ff;--jourma-color-text-primary: white;--jourma-color-text-secondary: rgba(255, 255, 255, .8);--jourma-color-text-tertiary: rgba(255, 255, 255, .6);--jourma-color-disabled-surface: rgba(255, 255, 255, .2);--jourma-color-disabled-text: rgba(255, 255, 255, .3);--jourma-color-disabled-text-on-surface: rgba(0, 0, 0, .5);--jourma-color-disabled-stroke: rgba(255, 255, 255, .1);--jourma-color-surface: rgba(255, 255, 255, .07);--jourma-color-surface-pressed: rgba(255, 255, 255, .2);--jourma-color-surface-focused: rgba(255, 255, 255, .8);--jourma-color-placeholder-text: rgba(255, 255, 255, .4);--jourma-color-label-on-surface: rgba(255, 255, 255, .6);--jourma-color-label-on-surface-focused: rgba(0, 0, 0, .6);--jourma-color-disabled-surface-text-on-surface: rgba(0, 0, 0, .5);--jourma-color-white-10: rgba(255, 255, 255, .1);--jourma-color-white-30: rgba(255, 255, 255, .3);--jourma-spacing-xxs: 2px;--jourma-spacing-xs: 4px;--jourma-spacing-m: 16px;--jourma-button-padding-top-large: 13px;--jourma-button-padding-bottom-large: 15px;--jourma-button-padding-round-end-large: 24px;--jourma-button-padding-sharp-end-large: 22px;--jourma-button-padding-top-medium: 10px;--jourma-button-padding-bottom-medium: 12px;--jourma-button-padding-round-end-medium: 18px;--jourma-button-padding-sharp-end-medium: 16px;--jourma-button-padding-top-small: 8px;--jourma-button-padding-bottom-small: 10px;--jourma-button-padding-round-end-small: 15px;--jourma-button-padding-sharp-end-small: 12px;--jourma-field-gap: 8px;--jourma-field-padding-ends: 16px;--jourma-field-padding-top-large: 13px;--jourma-field-padding-bottom-large: 15px;--jourma-field-padding-top-compact: 14px;--jourma-field-padding-bottom-compact: 15px;--jourma-field-radius: 12px;--jourma-field-radius-compact: 8px;--jourma-radius-m: 24px}.button{display:inline-flex;align-items:center;justify-content:center;overflow:clip;border:none;background:none;padding:0;font-family:Bugrino,sans-serif;line-height:1.1;white-space:nowrap;text-overflow:ellipsis;text-align:center;font-feature-settings:"dlig" 1}.button:not(:disabled){cursor:pointer}.button--filled{border-radius:0}.button--filled.button--large{border-bottom-left-radius:25px;border-top-left-radius:25px;padding:var(--jourma-button-padding-top-large) var(--jourma-button-padding-sharp-end-large) var(--jourma-button-padding-bottom-large) var(--jourma-button-padding-round-end-large);font-size:20px;font-weight:700}.button--filled.button--medium{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-medium) var(--jourma-button-padding-sharp-end-medium) var(--jourma-button-padding-bottom-medium) var(--jourma-button-padding-round-end-medium);font-size:20px;font-weight:700}.button--filled.button--small{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-small) var(--jourma-button-padding-sharp-end-small) var(--jourma-button-padding-bottom-small) var(--jourma-button-padding-round-end-small);font-size:18px;font-weight:700}.button--filled.button--normal{background-color:var(--jourma-color-action);color:var(--jourma-color-text-on-action)}.button--filled.button--attention{background-color:var(--jourma-color-action-attention);color:var(--jourma-color-text-on-action-attention)}.button--filled.button--special{background-color:var(--jourma-color-action-special);color:var(--jourma-color-text-on-action-special)}.button--filled:not(:disabled):active{background-color:var(--jourma-color-action-pressed);color:var(--jourma-color-text-on-surface-focused)}.button--filled:disabled{background-color:var(--jourma-color-disabled-surface);color:var(--jourma-color-disabled-text-on-surface);cursor:default}.button--outlined{background:transparent;border-style:solid;border-width:2px}.button--outlined.button--large{border-bottom-left-radius:25px;border-top-left-radius:25px;padding:var(--jourma-button-padding-top-large) var(--jourma-button-padding-sharp-end-large) var(--jourma-button-padding-bottom-large) var(--jourma-button-padding-round-end-large);font-size:20px;font-weight:500}.button--outlined.button--medium{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-medium) var(--jourma-button-padding-sharp-end-medium) var(--jourma-button-padding-bottom-medium) var(--jourma-button-padding-round-end-medium);font-size:20px;font-weight:500}.button--outlined.button--small{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-small) var(--jourma-button-padding-sharp-end-small) var(--jourma-button-padding-bottom-small) var(--jourma-button-padding-round-end-small);font-size:18px;font-weight:500}.button--outlined.button--normal{border-color:var(--jourma-color-action);color:var(--jourma-color-text-action)}.button--outlined.button--attention{border-color:var(--jourma-color-action-attention);color:var(--jourma-color-text-attention)}.button--outlined.button--special{border-color:var(--jourma-color-action-special);color:var(--jourma-color-text-special)}.button--outlined:not(:disabled):active{border-color:var(--jourma-color-action-pressed);color:var(--jourma-color-action-pressed)}.button--outlined:disabled{border-color:var(--jourma-color-disabled-stroke);color:var(--jourma-color-disabled-text);cursor:default}.button--text{background:transparent;border:none}.button--text.button--large{padding:var(--jourma-button-padding-top-large) var(--jourma-button-padding-sharp-end-large) var(--jourma-button-padding-bottom-large);font-size:20px;font-weight:500}.button--text.button--medium{padding:var(--jourma-button-padding-top-medium) var(--jourma-button-padding-sharp-end-medium) var(--jourma-button-padding-bottom-medium);font-size:20px;font-weight:500}.button--text.button--small{padding:var(--jourma-button-padding-top-small) var(--jourma-button-padding-sharp-end-small) var(--jourma-button-padding-bottom-small);font-size:18px;font-weight:500}.button--text.button--normal{color:var(--jourma-color-text-action)}.button--text.button--attention{color:var(--jourma-color-text-attention)}.button--text.button--special{color:var(--jourma-color-text-special)}.button--text:not(:disabled):active{color:var(--jourma-color-action-pressed)}.button--text:disabled{color:var(--jourma-color-disabled-text);cursor:default}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:var(--jourma-radius-m);border:none;padding:0;backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px)}.icon-button:not(:disabled){cursor:pointer}.icon-button--filled.icon-button--normal{background-color:var(--jourma-color-action)}.icon-button--filled.icon-button--special{background-color:var(--jourma-color-action-special)}.icon-button--filled.icon-button--attention{background-color:var(--jourma-color-action-attention)}.icon-button--filled.icon-button--neutral{background-color:var(--jourma-color-white-10)}.icon-button--filled.icon-button--pressed{background-color:var(--jourma-color-action-pressed)}.icon-button--filled:disabled{background-color:var(--jourma-color-disabled-surface);cursor:default}.icon-button--outlined{background:transparent;border-style:solid;border-width:2px}.icon-button--outlined.icon-button--normal{border-color:var(--jourma-color-action)}.icon-button--outlined.icon-button--special{border-color:var(--jourma-color-action-special)}.icon-button--outlined.icon-button--attention{border-color:var(--jourma-color-action-attention)}.icon-button--outlined.icon-button--neutral{border-color:var(--jourma-color-white-30)}.icon-button--outlined.icon-button--pressed{border-color:var(--jourma-color-action-pressed)}.icon-button--outlined:disabled{border-color:var(--jourma-color-disabled-stroke);cursor:default}.icon-button__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center}.icon-button__icon>svg{width:100%;height:100%}.text-field{display:flex;flex-direction:column;align-items:flex-start;width:100%;font-family:Bugrino,sans-serif;font-feature-settings:"dlig" 1}.text-field--large{gap:var(--jourma-spacing-xs)}.text-field__label{font-size:17px;font-weight:500;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.text-field--large .text-field__label{color:var(--jourma-color-text-secondary)}.text-field--large.text-field--disabled .text-field__label{color:var(--jourma-color-disabled-text)}.text-field--compact .text-field__label{color:var(--jourma-color-label-on-surface);width:100px;flex-shrink:0}.text-field--compact.text-field--focused .text-field__label{color:var(--jourma-color-label-on-surface-focused)}.text-field--compact.text-field--disabled .text-field__label{color:var(--jourma-color-disabled-text)}.text-field__input-wrapper{display:flex;align-items:center;gap:var(--jourma-field-gap);width:100%;overflow:clip;backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px)}.text-field--large .text-field__input-wrapper{padding:var(--jourma-field-padding-top-large) var(--jourma-field-padding-ends) var(--jourma-field-padding-bottom-large);border-radius:var(--jourma-field-radius)}.text-field--compact .text-field__input-wrapper{padding:var(--jourma-field-padding-top-compact) var(--jourma-field-padding-ends) var(--jourma-field-padding-bottom-compact);border-radius:var(--jourma-field-radius-compact)}.text-field__input-wrapper{background-color:var(--jourma-color-surface);border:2px solid transparent}.text-field--pressed .text-field__input-wrapper{background-color:var(--jourma-color-surface-pressed)}.text-field--focused .text-field__input-wrapper{background-color:var(--jourma-color-surface-focused)}.text-field--disabled .text-field__input-wrapper{background-color:#00000003;border-color:var(--jourma-color-disabled-stroke)}.text-field__input{flex:1 0 0;min-width:0;background:none;border:none;outline:none;padding:0;font-family:inherit;font-feature-settings:inherit;line-height:1.1}.text-field--large .text-field__input{font-size:20px}.text-field--compact .text-field__input{font-size:17px}.text-field__input{color:var(--jourma-color-text-on-surface)}.text-field__input::placeholder{color:var(--jourma-color-placeholder-text)}.text-field--focused .text-field__input{color:var(--jourma-color-text-on-surface-focused)}.text-field--focused .text-field__input::placeholder{color:var(--jourma-color-disabled-text-on-surface)}.text-field--disabled .text-field__input{color:var(--jourma-color-disabled-text)}.text-field--disabled .text-field__input::placeholder{color:var(--jourma-color-disabled-text);opacity:.5}.text-field__error-icon{flex-shrink:0;width:17px;height:17px;color:var(--jourma-color-text-attention)}.text-field__error{font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:1.4;letter-spacing:.24px;color:var(--jourma-color-text-attention);width:100%}.text-field--large .text-field__error{padding-right:var(--jourma-spacing-m)}.text-field--compact .text-field__error{padding:var(--jourma-spacing-xxs) var(--jourma-spacing-m) var(--jourma-spacing-xs) var(--jourma-spacing-xs)}
1
+ :root{--jourma-color-action: #00ff9f;--jourma-color-action-special: #ff46ff;--jourma-color-action-attention: #ff3d48;--jourma-color-action-pressed: white;--jourma-color-text-on-action: #00322f;--jourma-color-text-on-action-attention: black;--jourma-color-text-on-action-special: black;--jourma-color-text-on-surface-focused: black;--jourma-color-text-on-surface: white;--jourma-color-text-action: #00ff9f;--jourma-color-text-attention: #ff3d48;--jourma-color-text-special: #ff46ff;--jourma-color-text-primary: white;--jourma-color-text-secondary: rgba(255, 255, 255, .8);--jourma-color-text-tertiary: rgba(255, 255, 255, .6);--jourma-color-disabled-surface: rgba(255, 255, 255, .2);--jourma-color-disabled-text: rgba(255, 255, 255, .3);--jourma-color-disabled-text-on-surface: rgba(0, 0, 0, .5);--jourma-color-disabled-stroke: rgba(255, 255, 255, .1);--jourma-color-surface: rgba(255, 255, 255, .07);--jourma-color-surface-pressed: rgba(255, 255, 255, .2);--jourma-color-surface-focused: rgba(255, 255, 255, .8);--jourma-color-placeholder-text: rgba(255, 255, 255, .4);--jourma-color-label-on-surface: rgba(255, 255, 255, .6);--jourma-color-label-on-surface-focused: rgba(0, 0, 0, .6);--jourma-color-disabled-surface-text-on-surface: rgba(0, 0, 0, .5);--jourma-color-white-10: rgba(255, 255, 255, .1);--jourma-color-white-30: rgba(255, 255, 255, .3);--jourma-spacing-xxs: 2px;--jourma-spacing-xs: 4px;--jourma-spacing-m: 16px;--jourma-button-padding-top-large: 13px;--jourma-button-padding-bottom-large: 15px;--jourma-button-padding-round-end-large: 24px;--jourma-button-padding-sharp-end-large: 22px;--jourma-button-padding-top-medium: 10px;--jourma-button-padding-bottom-medium: 12px;--jourma-button-padding-round-end-medium: 18px;--jourma-button-padding-sharp-end-medium: 16px;--jourma-button-padding-top-small: 8px;--jourma-button-padding-bottom-small: 10px;--jourma-button-padding-round-end-small: 15px;--jourma-button-padding-sharp-end-small: 12px;--jourma-field-gap: 8px;--jourma-field-padding-ends: 16px;--jourma-field-padding-top-large: 13px;--jourma-field-padding-bottom-large: 15px;--jourma-field-padding-top-compact: 14px;--jourma-field-padding-bottom-compact: 15px;--jourma-field-radius: 12px;--jourma-field-radius-compact: 8px;--jourma-radius-m: 24px}.button{display:inline-flex;align-items:center;justify-content:center;overflow:clip;border:none;background:none;padding:0;font-family:Bugrino,sans-serif;line-height:1.1;white-space:nowrap;text-overflow:ellipsis;text-align:center;font-feature-settings:"dlig" 1}.button:not(:disabled){cursor:pointer}.button--filled{border-radius:0}.button--filled.button--large{border-bottom-left-radius:25px;border-top-left-radius:25px;padding:var(--jourma-button-padding-top-large) var(--jourma-button-padding-sharp-end-large) var(--jourma-button-padding-bottom-large) var(--jourma-button-padding-round-end-large);font-size:20px;font-weight:700}.button--filled.button--medium{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-medium) var(--jourma-button-padding-sharp-end-medium) var(--jourma-button-padding-bottom-medium) var(--jourma-button-padding-round-end-medium);font-size:20px;font-weight:700}.button--filled.button--small{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-small) var(--jourma-button-padding-sharp-end-small) var(--jourma-button-padding-bottom-small) var(--jourma-button-padding-round-end-small);font-size:18px;font-weight:700}.button--filled.button--normal{background-color:var(--jourma-color-action);color:var(--jourma-color-text-on-action)}.button--filled.button--attention{background-color:var(--jourma-color-action-attention);color:var(--jourma-color-text-on-action-attention)}.button--filled.button--special{background-color:var(--jourma-color-action-special);color:var(--jourma-color-text-on-action-special)}.button--filled:not(:disabled):active{background-color:var(--jourma-color-action-pressed);color:var(--jourma-color-text-on-surface-focused)}.button--filled:disabled{background-color:var(--jourma-color-disabled-surface);color:var(--jourma-color-disabled-text-on-surface);cursor:default}.button--outlined{background:transparent;border-style:solid;border-width:2px}.button--outlined.button--large{border-bottom-left-radius:25px;border-top-left-radius:25px;padding:var(--jourma-button-padding-top-large) var(--jourma-button-padding-sharp-end-large) var(--jourma-button-padding-bottom-large) var(--jourma-button-padding-round-end-large);font-size:20px;font-weight:500}.button--outlined.button--medium{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-medium) var(--jourma-button-padding-sharp-end-medium) var(--jourma-button-padding-bottom-medium) var(--jourma-button-padding-round-end-medium);font-size:20px;font-weight:500}.button--outlined.button--small{border-bottom-left-radius:22px;border-top-left-radius:22px;padding:var(--jourma-button-padding-top-small) var(--jourma-button-padding-sharp-end-small) var(--jourma-button-padding-bottom-small) var(--jourma-button-padding-round-end-small);font-size:18px;font-weight:500}.button--outlined.button--normal{border-color:var(--jourma-color-action);color:var(--jourma-color-text-action)}.button--outlined.button--attention{border-color:var(--jourma-color-action-attention);color:var(--jourma-color-text-attention)}.button--outlined.button--special{border-color:var(--jourma-color-action-special);color:var(--jourma-color-text-special)}.button--outlined:not(:disabled):active{border-color:var(--jourma-color-action-pressed);color:var(--jourma-color-action-pressed)}.button--outlined:disabled{border-color:var(--jourma-color-disabled-stroke);color:var(--jourma-color-disabled-text);cursor:default}.button--text{background:transparent;border:none}.button--text.button--large{padding:var(--jourma-button-padding-top-large) var(--jourma-button-padding-sharp-end-large) var(--jourma-button-padding-bottom-large);font-size:20px;font-weight:500}.button--text.button--medium{padding:var(--jourma-button-padding-top-medium) var(--jourma-button-padding-sharp-end-medium) var(--jourma-button-padding-bottom-medium);font-size:20px;font-weight:500}.button--text.button--small{padding:var(--jourma-button-padding-top-small) var(--jourma-button-padding-sharp-end-small) var(--jourma-button-padding-bottom-small);font-size:18px;font-weight:500}.button--text.button--normal{color:var(--jourma-color-text-action)}.button--text.button--attention{color:var(--jourma-color-text-attention)}.button--text.button--special{color:var(--jourma-color-text-special)}.button--text:not(:disabled):active{color:var(--jourma-color-action-pressed)}.button--text:disabled{color:var(--jourma-color-disabled-text);cursor:default}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:var(--jourma-radius-m);border:none;padding:0;backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px)}.icon-button:not(:disabled){cursor:pointer}.icon-button--filled.icon-button--normal{background-color:var(--jourma-color-action)}.icon-button--filled.icon-button--special{background-color:var(--jourma-color-action-special)}.icon-button--filled.icon-button--attention{background-color:var(--jourma-color-action-attention)}.icon-button--filled.icon-button--neutral{background-color:var(--jourma-color-white-10)}.icon-button--filled.icon-button--pressed{background-color:var(--jourma-color-action-pressed)}.icon-button--filled:disabled{background-color:var(--jourma-color-disabled-surface);cursor:default}.icon-button--outlined{background:transparent;border-style:solid;border-width:2px}.icon-button--outlined.icon-button--normal{border-color:var(--jourma-color-action)}.icon-button--outlined.icon-button--special{border-color:var(--jourma-color-action-special)}.icon-button--outlined.icon-button--attention{border-color:var(--jourma-color-action-attention)}.icon-button--outlined.icon-button--neutral{border-color:var(--jourma-color-white-30)}.icon-button--outlined.icon-button--pressed{border-color:var(--jourma-color-action-pressed)}.icon-button--outlined:disabled{border-color:var(--jourma-color-disabled-stroke);cursor:default}.icon-button__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center}.icon-button__icon>svg{width:100%;height:100%}.text-field{display:flex;flex-direction:column;align-items:flex-start;width:100%;font-family:Bugrino,sans-serif;font-feature-settings:"dlig" 1}.text-field--large{gap:var(--jourma-spacing-xs)}.text-field__label{font-size:17px;font-weight:500;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.text-field--large .text-field__label{color:var(--jourma-color-text-secondary)}.text-field--large.text-field--disabled .text-field__label{color:var(--jourma-color-disabled-text)}.text-field--compact .text-field__label{color:var(--jourma-color-label-on-surface);width:100px;flex-shrink:0}.text-field--compact.text-field--focused .text-field__label{color:var(--jourma-color-label-on-surface-focused)}.text-field--compact.text-field--disabled .text-field__label{color:var(--jourma-color-disabled-text)}.text-field__input-wrapper{display:flex;align-items:center;gap:var(--jourma-field-gap);width:100%;overflow:clip;backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px)}.text-field--large .text-field__input-wrapper{padding:var(--jourma-field-padding-top-large) var(--jourma-field-padding-ends) var(--jourma-field-padding-bottom-large);border-radius:var(--jourma-field-radius)}.text-field--compact .text-field__input-wrapper{padding:var(--jourma-field-padding-top-compact) var(--jourma-field-padding-ends) var(--jourma-field-padding-bottom-compact);border-radius:var(--jourma-field-radius-compact)}.text-field__input-wrapper{background-color:var(--jourma-color-surface);border:2px solid transparent}.text-field--pressed .text-field__input-wrapper{background-color:var(--jourma-color-surface-pressed)}.text-field--focused .text-field__input-wrapper{background-color:var(--jourma-color-surface-focused)}.text-field--disabled .text-field__input-wrapper{background-color:#00000003;border-color:var(--jourma-color-disabled-stroke)}.text-field__input{flex:1 0 0;min-width:0;background:none;border:none;outline:none;padding:0;font-family:inherit;font-feature-settings:inherit;line-height:1.1}.text-field--large .text-field__input{font-size:20px}.text-field--compact .text-field__input{font-size:17px}.text-field__input{color:var(--jourma-color-text-on-surface)}.text-field__input::placeholder{color:var(--jourma-color-placeholder-text)}.text-field--focused .text-field__input{color:var(--jourma-color-text-on-surface-focused)}.text-field--focused .text-field__input::placeholder{color:var(--jourma-color-disabled-text-on-surface)}.text-field--disabled .text-field__input{color:var(--jourma-color-disabled-text)}.text-field--disabled .text-field__input::placeholder{color:var(--jourma-color-disabled-text);opacity:.5}.text-field__error-icon{flex-shrink:0;width:17px;height:17px;color:var(--jourma-color-text-attention)}.text-field__error{font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:1.4;letter-spacing:.24px;color:var(--jourma-color-text-attention);width:100%}.text-field--large .text-field__error{padding-right:var(--jourma-spacing-m)}.text-field--compact .text-field__error{padding:var(--jourma-spacing-xxs) var(--jourma-spacing-m) var(--jourma-spacing-xs) var(--jourma-spacing-xs)}.collection-thumbnail{display:flex;flex-direction:column;align-items:flex-start;gap:8px;width:171px;position:relative;cursor:pointer;font-family:Bugrino,sans-serif;font-feature-settings:"dlig" 1}.collection-thumbnail--disabled{cursor:default}.collection-thumbnail__image{position:relative;width:171px;height:171px;border-top-left-radius:16px;border-bottom-left-radius:16px;overflow:hidden;flex-shrink:0}.collection-thumbnail--disabled .collection-thumbnail__image{opacity:.5}.collection-thumbnail__image img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;pointer-events:none}.collection-thumbnail__image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background-color:var(--jourma-color-surface-pressed)}.collection-thumbnail__title{font-size:17px;font-weight:500;line-height:1.1;color:var(--jourma-color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;flex-shrink:0}.collection-thumbnail--disabled .collection-thumbnail__title{color:var(--jourma-color-disabled-text)}.collection-thumbnail:active:not(.collection-thumbnail--disabled) .collection-thumbnail__title{color:var(--jourma-color-action-pressed)}.collection-thumbnail__badge{position:absolute;top:4px;right:4px;min-width:24px;display:flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:22px;background-color:#00000080;backdrop-filter:blur(15px);-webkit-backdrop-filter:blur(15px);overflow:clip}.collection-thumbnail__badge-text{font-size:13px;font-weight:700;line-height:1.2;letter-spacing:.26px;color:var(--jourma-color-text-primary);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.collection-thumbnail--disabled .collection-thumbnail__badge-text{color:var(--jourma-color-disabled-text)}.product-teaser{display:flex;flex-direction:column;align-items:center;gap:16px;position:relative;cursor:pointer;font-family:Bugrino,sans-serif;font-feature-settings:"dlig" 1}.product-teaser__image{position:relative;width:128px;height:128px;border-top-left-radius:12px;border-bottom-left-radius:12px;overflow:hidden;flex-shrink:0}.product-teaser__image img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;pointer-events:none}.product-teaser:active .product-teaser__image:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-color:var(--jourma-color-surface-pressed);border-radius:inherit}.product-teaser__info{display:flex;flex-direction:column;align-items:center;gap:2px;width:100%;text-align:center;white-space:nowrap}.product-teaser__title{font-size:14px;font-weight:500;line-height:1.1;letter-spacing:.28px;color:var(--jourma-color-text-primary);overflow:hidden;text-overflow:ellipsis}.product-teaser__price-row{display:flex;align-items:baseline;gap:8px}.product-teaser__price{font-size:14px;font-weight:500;line-height:1.1;letter-spacing:.28px;color:var(--jourma-color-text-action)}.product-teaser__price-translation{font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:1.4;letter-spacing:.24px;color:var(--jourma-color-text-tertiary)}.product-teaser__app-icon{position:absolute;top:4px;left:4px;width:24px;height:24px}.product-teaser__app-icon img{width:100%;height:100%;display:block}.product-teaser__discount{position:absolute;top:109px;right:0;display:flex;align-items:center;justify-content:center;padding:4px 8px;background-color:var(--jourma-color-action-attention);border-top-left-radius:16px;border-bottom-left-radius:16px;font-size:17px;font-weight:500;line-height:1.1;color:#fff;white-space:nowrap}.location-teaser{display:flex;flex-direction:column;align-items:flex-start;position:relative;overflow:clip;border-top-left-radius:24px;border-bottom-left-radius:24px;background-color:var(--jourma-color-action);font-family:Bugrino,sans-serif;font-feature-settings:"dlig" 1}.location-teaser__image{position:relative;width:100%;height:193px;border-bottom-left-radius:24px;overflow:hidden;flex-shrink:0}.location-teaser__image img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;pointer-events:none}.location-teaser__info{display:flex;flex-direction:column;gap:16px;align-items:flex-start;width:100%;padding:8px 16px 16px}.location-teaser__title{font-size:20px;font-weight:500;line-height:1.1;color:var(--jourma-color-text-on-action);padding-right:24px;width:100%}.location-teaser__tags{display:flex;flex-wrap:wrap;gap:2px;align-items:flex-start;width:100%}.location-teaser__tag{display:flex;align-items:center;justify-content:center;padding:4px 8px 4px 9px;background-color:#000;border-top-left-radius:22px;border-bottom-left-radius:22px;overflow:clip;flex-shrink:0}.location-teaser__tag-text{font-size:13px;font-weight:400;line-height:1.2;letter-spacing:.26px;color:var(--jourma-color-text-secondary);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.location-teaser__app-icon-wrapper{flex-shrink:0;padding-right:2px}.location-teaser__app-icon{width:24px;height:24px;border-radius:24px;border:2px solid var(--jourma-color-text-on-action);overflow:clip}.location-teaser__app-icon img{width:100%;height:100%;display:block}.location-teaser__wishlist{position:absolute;top:0;right:0;width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;padding:0}.location-teaser__wishlist svg{width:24px;height:21px}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jourma-react-lib",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Jourma UI component library for React",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",