lucentia-ui 0.1.8 → 0.1.9

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.
Binary file
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { ThemeProvider } from "./components/ThemeProvider";
2
2
  export type { Theme } from "./components/ThemeProvider";
3
3
  export * from "./components/Button";
4
4
  export * from "./components/Checkbox";
5
+ export * from "./components/Divider";
5
6
  export * from "./components/Radio";
6
7
  export * from "./components/Input";
7
8
  export * from "./components/Textarea";
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ export { ThemeProvider } from "./components/ThemeProvider";
3
3
  /* ===== Components ===== */
4
4
  export * from "./components/Button";
5
5
  export * from "./components/Checkbox";
6
+ export * from "./components/Divider";
6
7
  export * from "./components/Radio";
7
8
  export * from "./components/Input";
8
9
  export * from "./components/Textarea";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lucentia-ui",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "React UI design token and component system based on neumorphism, featuring two color themes: light and dark.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -23,7 +23,8 @@
23
23
  "react": ">=18"
24
24
  },
25
25
  "scripts": {
26
- "build": "tsc -p tsconfig.json && cpy 'src/**/*.css' dist"
26
+ "build": "tsc -p tsconfig.json && npm run copy:assets",
27
+ "copy:assets": "cpy 'src/styles/*.css' dist/styles && cpy 'src/fonts/*' dist/fonts"
27
28
  },
28
29
  "license": "MIT",
29
30
  "dependencies": {
@@ -32,4 +33,4 @@
32
33
  "devDependencies": {
33
34
  "cpy-cli": "^6.0.0"
34
35
  }
35
- }
36
+ }
@@ -1,82 +0,0 @@
1
- .button {
2
- font-family: var(--font);
3
- font-weight: 500;
4
- border: 2px solid transparent;
5
- cursor: pointer;
6
-
7
- border-radius: var(--radius-sm);
8
-
9
-
10
- transition: box-shadow 0.2s ease, opacity 0.2s ease,
11
- background 0.25s ease-in-out, color 0.25s ease;
12
- }
13
-
14
- /* ===== Variant ===== */
15
- .default {
16
- background: var(--color-surface-container);
17
- color: var(--color-on-surface);
18
- }
19
- .default:hover:not(:disabled) {
20
- border: 2px solid var(--color-border);
21
- box-shadow: 0 0 4px var(--color-border), 0 0 8px var(--color-border);
22
- }
23
-
24
- .primary {
25
- background: var(--color-primary-container);
26
- color: var(--color-on-primary-container);
27
- }
28
-
29
- .primary:hover:not(:disabled) {
30
- border: 2px solid var(--color-primary);
31
- box-shadow: 0 0 4px var(--color-primary), 0 0 8px var(--color-primary);
32
- }
33
-
34
- .secondary {
35
- background: var(--color-secondary-container);
36
- color: var(--color-on-secondary-container);
37
- }
38
-
39
- .secondary:hover:not(:disabled) {
40
- border: 2px solid var(--color-secondary);
41
- box-shadow: 0 0 4px var(--color-secondary), 0 0 8px var(--color-secondary);
42
- }
43
-
44
- .error {
45
- background: var(--color-error-container);
46
- color: var(--color-on-error-container);
47
- }
48
-
49
- .error:hover:not(:disabled) {
50
- border: 2px solid var(--color-error);
51
- box-shadow: 0 0 4px var(--color-error), 0 0 8px var(--color-error);
52
- }
53
-
54
- /* ===== Size ===== */
55
-
56
- .sm {
57
- padding: var(--space-xs) var(--space-lg);
58
- font-size: 0.875rem;
59
- box-shadow: var(--shadow-sm);
60
- }
61
-
62
- .md {
63
- padding: var(--space-sm) var(--space-2xl);
64
- font-size: 1rem;
65
- box-shadow: var(--shadow-md);
66
- }
67
-
68
- /* ===== State ===== */
69
-
70
- .button:active:not(:disabled),
71
- .button[data-state="pressed"] {
72
- box-shadow: none;
73
- }
74
-
75
- .button:focus-visible {
76
- outline: none;
77
- }
78
-
79
- .button:disabled {
80
- opacity: 0.5;
81
- cursor: not-allowed;
82
- }
@@ -1,53 +0,0 @@
1
- :root {
2
- --icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cpath fill='white' d='M28.6122 12.5595C29.4077 11.7934 30.6741 11.8169 31.4403 12.6122C32.2064 13.4078 32.1829 14.6742 31.3875 15.4404L17.8875 28.4404C17.1025 29.1963 15.8564 29.1846 15.0858 28.414L8.58579 21.914C7.80474 21.133 7.80474 19.8669 8.58579 19.0859C9.36684 18.3048 10.6329 18.3048 11.4139 19.0859L16.5252 24.1972L28.6122 12.5595Z'/%3E%3C/svg%3E");
3
- }
4
-
5
- .wrapper {
6
- display: inline-flex;
7
- align-items: center;
8
- gap: var(--space-sm);
9
- cursor: pointer;
10
- font-family: var(--font);
11
- font-weight: 500;
12
- color: var(--color-on-surface);
13
- }
14
-
15
- .input {
16
- position: absolute;
17
- opacity: 0;
18
- pointer-events: none;
19
- }
20
-
21
- .control {
22
- width: 32px;
23
- height: 32px;
24
- border-radius: var(--radius-sm);
25
- background: var(--color-surface-container);
26
- box-shadow: var(--shadow-md-in);
27
- position: relative;
28
- background-repeat: no-repeat;
29
- background-position: center;
30
- background-size: 32px 32px;
31
- transition: background-color 0.2s ease;
32
- }
33
-
34
- /* checked */
35
- .input:checked + .control {
36
- background-color: var(--color-primary);
37
- background-image: var(--icon-check);
38
- }
39
- /* focus */
40
- .input:focus-visible + .control {
41
- outline: 2px solid var(--color-primary-container);
42
- outline-offset: 2px;
43
- }
44
-
45
- /* disabled */
46
- .input:disabled + .control {
47
- opacity: 0.25;
48
- cursor: not-allowed;
49
- }
50
-
51
- .label {
52
- font-size: 1rem;
53
- }
@@ -1,28 +0,0 @@
1
- .divider {
2
- background: var(--color-border);
3
- flex-shrink: 0;
4
- }
5
-
6
- /* orientation */
7
- .divider[data-orientation="horizontal"] {
8
- width: 100%;
9
- height: 2px;
10
- }
11
-
12
- .divider[data-orientation="vertical"] {
13
- width: 2px;
14
- height: 100%;
15
- }
16
-
17
-
18
- /* variants */
19
-
20
- .divider[data-variant="groove"][data-orientation="horizontal"]{
21
- box-shadow: var(--shadow-sm-in);
22
- height: 4px;
23
- }
24
-
25
- .divider[data-variant="groove"][data-orientation="vertical"]{
26
- box-shadow: var(--shadow-sm-in);
27
- width: 4px;
28
- }
@@ -1,20 +0,0 @@
1
- .overlay {
2
- position: fixed;
3
- inset: 0;
4
- background: var(--color-scrim);
5
- backdrop-filter: var(--blur);
6
- display: flex;
7
- align-items: center;
8
- justify-content: center;
9
- z-index: 1000;
10
- }
11
-
12
- .modal {
13
- background: var(--color-surface);
14
- color: var(--color-on-surface);
15
- border-radius: var(--radius-md);
16
- box-shadow: var(--shadow-lg);
17
- padding: var(--space-lg);
18
- min-width: 320px;
19
- max-width: 90vw;
20
- }
@@ -1,52 +0,0 @@
1
- .input {
2
- font-family: var(--font);
3
- padding: var(--space-md) var(--space-lg);
4
- border-radius: var(--radius-sm);
5
- border: 2px solid var(--color-surface);
6
- outline: none;
7
- background: var(--color-surface-container);
8
- color: var(--color-on-surface);
9
-
10
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
11
- }
12
-
13
- /* ===== Focus ===== */
14
- .input:focus {
15
- outline: none;
16
- border: 2px solid var(--color-primary);
17
- }
18
-
19
-
20
- /* ===== Readonly ===== */
21
- .input:read-only:not(:disabled) {
22
- box-shadow: none;
23
- cursor: text;
24
- }
25
-
26
- .input:read-only:not(:disabled) :focus {
27
- border: 2px solid var(--color-surface);
28
- }
29
-
30
- /* ===== Error ===== */
31
- .error {
32
- border: 2px solid var(--color-error);
33
- }
34
-
35
- /* ===== Disabled ===== */
36
- .input:disabled {
37
- opacity: 0.5;
38
- cursor: not-allowed;
39
- }
40
-
41
- /* ===== size ===== */
42
- .sm {
43
- font-size: 0.875rem;
44
- padding: var(--space-sm) var(--space-md);
45
- box-shadow: var(--shadow-sm-in);
46
- }
47
-
48
- .md {
49
- font-size: 1rem;
50
- padding: var(--space-md) var(--space-lg);
51
- box-shadow: var(--shadow-md-in);
52
- }
@@ -1,49 +0,0 @@
1
- .wrapper {
2
- display: inline-flex;
3
- align-items: center;
4
- gap: var(--space-sm);
5
- cursor: pointer;
6
- font-family: var(--font);
7
- font-weight: 500;
8
- color: var(--color-on-surface);
9
- }
10
-
11
- .input {
12
- position: absolute;
13
- opacity: 0;
14
- pointer-events: none;
15
- }
16
-
17
- .control {
18
- width: 32px;
19
- height: 32px;
20
- border-radius: 50%;
21
- background: var(--color-surface);
22
- box-shadow: var(--shadow-md-in);
23
- position: relative;
24
- }
25
-
26
- /* checked */
27
- .input:checked + .control::after {
28
- content: "";
29
- position: absolute;
30
- inset: 6px;
31
- border-radius: 50%;
32
- background: var(--color-primary);
33
- }
34
-
35
- /* focus */
36
- .input:focus-visible + .control {
37
- outline: 2px solid var(--color-primary-container);
38
- outline-offset: 2px;
39
- }
40
-
41
- /* disabled */
42
- .input:disabled + .control {
43
- opacity: 0.5;
44
- cursor: not-allowed;
45
- }
46
-
47
- .label {
48
- font-size: 1rem;
49
- }
@@ -1,43 +0,0 @@
1
- .select {
2
- font-family: var(--font);
3
- padding: var(--space-sm) var(--space-md);
4
- border: 2px solid transparent;
5
- border-radius: var(--radius-sm);
6
- box-shadow: var(--shadow-md);
7
-
8
- background: var(--color-surface-container);
9
- color: var(--color-on-surface);
10
-
11
- appearance: none;
12
- -webkit-appearance: none;
13
-
14
- background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M6.5%209.5L12%2015L18%209.5%22%20fill%3D%22none%22%20stroke%3D%22currentColor%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E");
15
-
16
- background-repeat: no-repeat;
17
- background-position: right var(--space-sm) center;
18
- background-size: 24px;
19
-
20
- padding-right: calc(var(--space-md) + 32px + var(--space-sm));
21
-
22
- cursor: pointer;
23
- }
24
-
25
- select:has(option[value=""]:checked) {
26
- color: var(--color-on-surface);
27
- }
28
-
29
- /* focus */
30
- .select:focus {
31
- outline: none;
32
- }
33
-
34
- /* error */
35
- .error {
36
- border: 2px solid var(--color-error);
37
- }
38
-
39
- /* disabled */
40
- .select:disabled {
41
- opacity: 0.5;
42
- cursor: not-allowed;
43
- }
@@ -1,58 +0,0 @@
1
- .switch {
2
- position: relative;
3
- display: inline-block;
4
- width: 72px;
5
- height: 40px;
6
- }
7
-
8
- /* input は見えなくするが状態は保持 */
9
- .switch input {
10
- opacity: 0;
11
- width: 0;
12
- height: 0;
13
- }
14
-
15
- /* ===== Track ===== */
16
- .slider {
17
- position: absolute;
18
- inset: 0;
19
- background: var(--color-surface-container);
20
- border-radius: var(--radius-max);
21
- box-shadow: var(--shadow-md-in);
22
- transition: background 0.2s ease;
23
- cursor: pointer;
24
- }
25
-
26
- /* ===== Knob ===== */
27
- .slider::before {
28
- content: "";
29
- position: absolute;
30
- height: 24px;
31
- width: 24px;
32
- left: 8px;
33
- top: 8px;
34
- background: var(--color-on-primary);
35
- box-shadow: var(--shadow-md);
36
- border-radius: var(--radius-max);
37
- transition: transform 0.2s ease;
38
- }
39
-
40
- /* ===== Checked ===== */
41
- .switch input:checked + .slider {
42
- background: var(--color-primary);
43
- }
44
-
45
- .switch input:checked + .slider::before {
46
- transform: translateX(32px);
47
- }
48
-
49
- /* ===== Focus ===== */
50
- .switch input:focus-visible + .slider {
51
- outline: none;
52
- }
53
-
54
- /* ===== Disabled ===== */
55
- .switch input:disabled + .slider {
56
- opacity: 0.25;
57
- cursor: not-allowed;
58
- }
@@ -1,41 +0,0 @@
1
- .textarea {
2
- font-family: var(--font);
3
- padding: var(--space-md) var(--space-lg);
4
- border-radius: var(--radius-sm);
5
- border: 2px solid var(--color-surface);
6
- outline: none;
7
- box-shadow: var(--shadow-md-in);
8
-
9
- background: var(--color-surface-container);
10
- color: var(--color-on-surface);
11
- resize: none;
12
- scrollbar-width: none;
13
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
14
- }
15
-
16
- /* ===== Focus ===== */
17
- .textarea:focus {
18
- outline: none;
19
- border: 2px solid var(--color-primary);
20
- }
21
-
22
- /* ===== Error ===== */
23
- .error {
24
- border: 2px solid var(--color-error);
25
- }
26
-
27
- /* ===== Readonly ===== */
28
- .textarea:read-only {
29
- box-shadow: none;
30
- cursor: text;
31
- }
32
-
33
- .textarea:read-only:focus {
34
- border: 2px solid var(--color-surface);
35
- }
36
-
37
- /* ===== Disabled ===== */
38
- .textarea:disabled {
39
- opacity: 0.5;
40
- cursor: not-allowed;
41
- }
@@ -1,125 +0,0 @@
1
- .theme {
2
- min-height: 100%;
3
- /* font */
4
- --font: "Noto Sans JP", sans-serif;
5
-
6
- /* ===== Radius ===== */
7
- --radius-sm: 8px;
8
- --radius-md: 16px;
9
- --radius-max: 999px;
10
-
11
- /* ===== Space ===== */
12
- --space-xs: 4px;
13
- --space-sm: 8px;
14
- --space-md: 12px;
15
- --space-lg: 16px;
16
- --space-xl: 24px;
17
- --space-2xl: 32px;
18
- --space-3xl: 48px;
19
- --space-4xl: 64px;
20
- --space-5xl: 96px;
21
- --gap: 32px;
22
-
23
- /* ===== Layout ===== */
24
- --container: 1120px;
25
-
26
- }
27
-
28
- .light {
29
- /* ===== Color ===== */
30
- --color-primary: #00a1a1;
31
- --color-on-primary: #ffffff;
32
- --color-primary-container: #9cf1f0;
33
- --color-on-primary-container: #004f4f;
34
-
35
- --color-secondary: #7b9695;
36
- --color-on-secondary: #ffffff;
37
- --color-secondary-container: #cce8e7;
38
- --color-on-secondary-container: #324b4b;
39
-
40
- --color-error: #ff5449;
41
- --color-on-error: #ffffff;
42
- --color-error-container: #ffdad6;
43
- --color-on-error-container: #93000a;
44
-
45
- --color-background: #f4fbfa;
46
- --color-on-background: #161d1d;
47
-
48
- --color-surface: #f4fbfabf;
49
- --color-on-surface: #161d1d;
50
- --color-on-surface-variant: #161d1d80;
51
- --color-surface-container: #e9efeebf;
52
-
53
- --color-border: #bbcccc;
54
- --color-scrim: rgba(129, 129, 129, 0.25);
55
-
56
- --color-shadow-l: rgba(255, 255, 255, 1);
57
- --color-shadow-d: rgba(0, 0, 0, 0.2);
58
-
59
- /* ===== Effect ===== */
60
- --blur: blur(8px);
61
-
62
- --shadow-sm: -2px -2px 2px 1px var(--color-shadow-l),
63
- 2px 2px 2px 1px var(--color-shadow-d);
64
-
65
- --shadow-sm-in: inset -2px -2px 2px 1px var(--color-shadow-l),
66
- inset 2px 2px 2px 1px var(--color-shadow-d);
67
-
68
- --shadow-md: -2px -2px 4px 2px var(--color-shadow-l),
69
- 2px 2px 4px 2px var(--color-shadow-d);
70
-
71
- --shadow-md-in: inset -4px -4px 4px var(--color-shadow-l),
72
- inset 4px 4px 4px var(--color-shadow-d);
73
-
74
- --shadow-lg: -4px -4px 16px 8px var(--color-shadow-l),
75
- 4px 4px 16px 8px var(--color-shadow-d);
76
- }
77
-
78
- .dark {
79
- --color-primary: #80d5d4;
80
- --color-on-primary: #003737;
81
- --color-primary-container: #004f4f;
82
- --color-on-primary-container: #9cf1f0;
83
-
84
- --color-secondary: #b0cccb;
85
- --color-on-secondary: #1b3534;
86
- --color-secondary-container: #324b4b;
87
- --color-on-secondary-container: #cce8e7;
88
-
89
- --color-error: #ffb4ab;
90
- --color-on-error: #690005;
91
- --color-error-container: #93000a;
92
- --color-on-error-container: #ffdad6;
93
-
94
- --color-background: #2b3a38;
95
- --color-on-background: #dde4e3;
96
-
97
- --color-surface: #1a2120bf;
98
- --color-on-surface: #dde4e3;
99
- --color-on-surface-variant: #dde4e380;
100
- --color-surface-container: #262d2d;
101
-
102
- --color-border: #889392;
103
- --color-scrim: rgba(0, 0, 0, 0.25);
104
-
105
- --color-shadow-l: rgba(255, 255, 255, 0.25);
106
- --color-shadow-d: rgba(0, 0, 0, 1);
107
-
108
- /* ===== Effect ===== */
109
- --blur: blur(8px);
110
-
111
- --shadow-sm: -2px -2px 2px 1px var(--color-shadow-l),
112
- 2px 2px 2px 1px var(--color-shadow-d);
113
-
114
- --shadow-sm-in: inset -2px -2px 2px 1px var(--color-shadow-l),
115
- inset 2px 2px 2px 1px var(--color-shadow-d);
116
-
117
- --shadow-md: -2px -2px 4px 2px var(--color-shadow-l),
118
- 2px 2px 4px 2px var(--color-shadow-d);
119
-
120
- --shadow-md-in: inset -4px -4px 4px var(--color-shadow-l),
121
- inset 4px 4px 4px var(--color-shadow-d);
122
-
123
- --shadow-lg: -4px -4px 16px 8px var(--color-shadow-l),
124
- 4px 4px 16px 8px var(--color-shadow-d);
125
- }