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 +1 -0
- package/dist/index.mjs +161 -0
- package/dist/src/components/Button/Button.d.ts +18 -0
- package/dist/src/components/Button/Button.stories.d.ts +18 -0
- package/dist/src/components/Button/index.d.ts +2 -0
- package/dist/src/components/IconButton/IconButton.d.ts +17 -0
- package/dist/src/components/IconButton/IconButton.stories.d.ts +14 -0
- package/dist/src/components/IconButton/index.d.ts +2 -0
- package/dist/src/components/TextField/TextField.d.ts +14 -0
- package/dist/src/components/TextField/TextField.stories.d.ts +14 -0
- package/dist/src/components/TextField/index.d.ts +2 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/style.css +1 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +54 -0
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,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,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,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
|
+
}
|