jourma-react-lib 0.1.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 ADDED
@@ -0,0 +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;
package/dist/index.mjs ADDED
@@ -0,0 +1,161 @@
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,
12
+ ...d
13
+ }) {
14
+ const u = [
15
+ "button",
16
+ `button--${i}`,
17
+ `button--${e}`,
18
+ `button--${o}`,
19
+ c
20
+ ].filter(Boolean).join(" ");
21
+ return /* @__PURE__ */ t(
22
+ "button",
23
+ {
24
+ type: r,
25
+ className: u,
26
+ disabled: l,
27
+ ...d,
28
+ children: n ?? s ?? "Button"
29
+ }
30
+ );
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
40
+ }) {
41
+ const n = [
42
+ "icon-button",
43
+ `icon-button--${i}`,
44
+ `icon-button--${e}`,
45
+ r
46
+ ].filter(Boolean).join(" ");
47
+ return /* @__PURE__ */ t(
48
+ "button",
49
+ {
50
+ type: s,
51
+ className: n,
52
+ disabled: c,
53
+ ...l,
54
+ children: /* @__PURE__ */ t("span", { className: "icon-button__icon", children: o })
55
+ }
56
+ );
57
+ }
58
+ const b = () => /* @__PURE__ */ a(
59
+ "svg",
60
+ {
61
+ viewBox: "0 0 17 17",
62
+ fill: "none",
63
+ xmlns: "http://www.w3.org/2000/svg",
64
+ className: "text-field__error-icon",
65
+ children: [
66
+ /* @__PURE__ */ t(
67
+ "circle",
68
+ {
69
+ cx: "8.5",
70
+ cy: "8.5",
71
+ r: "7.5",
72
+ stroke: "currentColor",
73
+ strokeWidth: "1.5"
74
+ }
75
+ ),
76
+ /* @__PURE__ */ t(
77
+ "line",
78
+ {
79
+ x1: "8.5",
80
+ y1: "4.5",
81
+ x2: "8.5",
82
+ y2: "9.5",
83
+ stroke: "currentColor",
84
+ strokeWidth: "1.5",
85
+ strokeLinecap: "round"
86
+ }
87
+ ),
88
+ /* @__PURE__ */ t("circle", { cx: "8.5", cy: "12", r: "0.75", fill: "currentColor" })
89
+ ]
90
+ }
91
+ ), $ = y(
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,
101
+ ...d
102
+ }, u) => {
103
+ const [w, m] = k(!1), p = N(
104
+ (x) => {
105
+ m(!0), l == null || l(x);
106
+ },
107
+ [l]
108
+ ), _ = N(
109
+ (x) => {
110
+ m(!1), n == null || n(x);
111
+ },
112
+ [n]
113
+ ), v = c ? "text-field--disabled" : w ? "text-field--focused" : "", h = [
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(
123
+ "input",
124
+ {
125
+ ref: u,
126
+ className: "text-field__input",
127
+ disabled: c,
128
+ onFocus: p,
129
+ onBlur: _,
130
+ ...d
131
+ }
132
+ ),
133
+ f && (s ?? /* @__PURE__ */ t(b, {}))
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(
140
+ "input",
141
+ {
142
+ ref: u,
143
+ className: "text-field__input",
144
+ disabled: c,
145
+ onFocus: p,
146
+ onBlur: _,
147
+ ...d
148
+ }
149
+ ),
150
+ f && (s ?? /* @__PURE__ */ t(b, {}))
151
+ ] }),
152
+ f && /* @__PURE__ */ t("p", { className: "text-field__error", children: o })
153
+ ] });
154
+ }
155
+ );
156
+ $.displayName = "TextField";
157
+ export {
158
+ C as Button,
159
+ g as IconButton,
160
+ $ as TextField
161
+ };
@@ -0,0 +1,18 @@
1
+ import { ButtonHTMLAttributes } from 'react';
2
+
3
+ export type ButtonStyle = "filled" | "outlined" | "text";
4
+ export type ButtonType = "normal" | "special" | "attention";
5
+ export type ButtonSize = "large" | "medium" | "small";
6
+ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> {
7
+ /** Visual style of the button */
8
+ variant?: ButtonStyle;
9
+ /** Color type / intent */
10
+ intent?: ButtonType;
11
+ /** Size variant */
12
+ size?: ButtonSize;
13
+ /** Label text */
14
+ label?: string;
15
+ /** HTML button type attribute */
16
+ htmlType?: ButtonHTMLAttributes<HTMLButtonElement>["type"];
17
+ }
18
+ export declare function Button({ variant, intent, size, label, htmlType, className, disabled, children, ...rest }: ButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { Button } from './Button';
3
+
4
+ declare const meta: Meta<typeof Button>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof Button>;
7
+ export declare const Playground: Story;
8
+ export declare const FilledNormal: Story;
9
+ export declare const FilledAttention: Story;
10
+ export declare const FilledSpecial: Story;
11
+ export declare const OutlinedNormal: Story;
12
+ export declare const OutlinedAttention: Story;
13
+ export declare const OutlinedSpecial: Story;
14
+ export declare const TextNormal: Story;
15
+ export declare const TextAttention: Story;
16
+ export declare const TextSpecial: Story;
17
+ export declare const Disabled: Story;
18
+ export declare const AllVariants: Story;
@@ -0,0 +1,2 @@
1
+ export { Button } from './Button';
2
+ export type { ButtonProps, ButtonStyle, ButtonType, ButtonSize } from './Button';
@@ -0,0 +1,17 @@
1
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
2
+
3
+ export type IconButtonStyle = "filled" | "outlined";
4
+ export type IconButtonIntent = "normal" | "special" | "attention" | "neutral";
5
+ export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "children"> {
6
+ /** Visual style */
7
+ variant?: IconButtonStyle;
8
+ /** Color type / intent */
9
+ intent?: IconButtonIntent;
10
+ /** Icon element (SVG or React node) */
11
+ icon: ReactNode;
12
+ /** Accessible label */
13
+ "aria-label": string;
14
+ /** HTML button type attribute */
15
+ htmlType?: ButtonHTMLAttributes<HTMLButtonElement>["type"];
16
+ }
17
+ export declare function IconButton({ variant, intent, icon, htmlType, className, disabled, ...rest }: IconButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { IconButton } from './IconButton';
3
+
4
+ declare const meta: Meta<typeof IconButton>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof IconButton>;
7
+ export declare const Playground: Story;
8
+ export declare const FilledNormal: Story;
9
+ export declare const FilledSpecial: Story;
10
+ export declare const FilledAttention: Story;
11
+ export declare const FilledNeutral: Story;
12
+ export declare const OutlinedNormal: Story;
13
+ export declare const Disabled: Story;
14
+ export declare const AllVariants: Story;
@@ -0,0 +1,2 @@
1
+ export { IconButton } from './IconButton';
2
+ export type { IconButtonProps, IconButtonStyle, IconButtonIntent, } from './IconButton';
@@ -0,0 +1,14 @@
1
+ import { InputHTMLAttributes, ReactNode } from 'react';
2
+
3
+ export type TextFieldSize = "large" | "compact";
4
+ export interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
5
+ /** Size variant */
6
+ size?: TextFieldSize;
7
+ /** Label text */
8
+ label?: string;
9
+ /** Error message (shows error state when provided) */
10
+ errorMessage?: string;
11
+ /** Custom error icon (defaults to built-in exclamation circle) */
12
+ errorIcon?: ReactNode;
13
+ }
14
+ export declare const TextField: import('react').ForwardRefExoticComponent<TextFieldProps & import('react').RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,14 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { TextField } from './TextField';
3
+
4
+ declare const meta: Meta<typeof TextField>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof TextField>;
7
+ export declare const Playground: Story;
8
+ export declare const Large: Story;
9
+ export declare const Compact: Story;
10
+ export declare const WithError: Story;
11
+ export declare const CompactWithError: Story;
12
+ export declare const Disabled: Story;
13
+ export declare const DisabledCompact: Story;
14
+ export declare const AllVariants: Story;
@@ -0,0 +1,2 @@
1
+ export { TextField } from './TextField';
2
+ export type { TextFieldProps, TextFieldSize } from './TextField';
@@ -0,0 +1,7 @@
1
+
2
+ export { Button } from './components/Button';
3
+ export type { ButtonProps, ButtonStyle, ButtonType, ButtonSize } from './components/Button';
4
+ export { IconButton } from './components/IconButton';
5
+ export type { IconButtonProps, IconButtonStyle, IconButtonIntent } from './components/IconButton';
6
+ export { TextField } from './components/TextField';
7
+ export type { TextFieldProps, TextFieldSize } from './components/TextField';
package/dist/style.css ADDED
@@ -0,0 +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)}
@@ -0,0 +1 @@
1
+ export * from '../index'
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "jourma-react-lib",
3
+ "version": "0.1.0",
4
+ "description": "Jourma UI component library for React",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/types/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.cjs",
13
+ "types": "./dist/types/index.d.ts"
14
+ },
15
+ "./styles.css": "./dist/style.css"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "vite build",
22
+ "dev": "vite build --watch",
23
+ "storybook": "storybook dev -p 6006",
24
+ "build-storybook": "storybook build"
25
+ },
26
+ "peerDependencies": {
27
+ "react": ">=18.0.0",
28
+ "react-dom": ">=18.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "@storybook/addon-essentials": "^8.6.18",
32
+ "@storybook/addon-interactions": "^8.6.18",
33
+ "@storybook/addon-onboarding": "^8.6.18",
34
+ "@storybook/blocks": "^8.6.18",
35
+ "@storybook/react": "^8.6.18",
36
+ "@storybook/react-vite": "^8.6.18",
37
+ "@storybook/test": "^8.6.18",
38
+ "@types/react": "^19.2.14",
39
+ "@types/react-dom": "^19.2.3",
40
+ "react": "^19.2.5",
41
+ "react-dom": "^19.2.5",
42
+ "storybook": "^8.6.18",
43
+ "typescript": "^6.0.2",
44
+ "vite": "^5.4.21",
45
+ "vite-plugin-dts": "^3.9.1"
46
+ },
47
+ "keywords": [
48
+ "jourma",
49
+ "ui",
50
+ "react",
51
+ "components"
52
+ ],
53
+ "license": "ISC"
54
+ }