@hadoku/task-ui-components 0.0.0-stage → 4.20.3
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/LICENSE +21 -0
- package/README.md +917 -2
- package/dist/app-header.css +288 -0
- package/dist/bento.css +143 -0
- package/dist/button.css +227 -0
- package/dist/components/AppHeader.d.ts +61 -0
- package/dist/components/AppHeader.d.ts.map +1 -0
- package/dist/components/AppHeader.js +23 -0
- package/dist/components/AppHeader.js.map +1 -0
- package/dist/components/BentoCard.d.ts +23 -0
- package/dist/components/BentoCard.d.ts.map +1 -0
- package/dist/components/BentoCard.js +49 -0
- package/dist/components/BentoCard.js.map +1 -0
- package/dist/components/BentoGrid.d.ts +24 -0
- package/dist/components/BentoGrid.d.ts.map +1 -0
- package/dist/components/BentoGrid.js +22 -0
- package/dist/components/BentoGrid.js.map +1 -0
- package/dist/components/Button.d.ts +28 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +51 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/ConnectedSettings.d.ts +53 -0
- package/dist/components/ConnectedSettings.d.ts.map +1 -0
- package/dist/components/ConnectedSettings.js +302 -0
- package/dist/components/ConnectedSettings.js.map +1 -0
- package/dist/components/ConnectedThemePicker.d.ts +52 -0
- package/dist/components/ConnectedThemePicker.d.ts.map +1 -0
- package/dist/components/ConnectedThemePicker.js +32 -0
- package/dist/components/ConnectedThemePicker.js.map +1 -0
- package/dist/components/ContextMenu.d.ts +22 -0
- package/dist/components/ContextMenu.d.ts.map +1 -0
- package/dist/components/ContextMenu.js +23 -0
- package/dist/components/ContextMenu.js.map +1 -0
- package/dist/components/HadokuThemePicker.d.ts +27 -0
- package/dist/components/HadokuThemePicker.d.ts.map +1 -0
- package/dist/components/HadokuThemePicker.js +19 -0
- package/dist/components/HadokuThemePicker.js.map +1 -0
- package/dist/components/LoadingSkeleton.d.ts +14 -0
- package/dist/components/LoadingSkeleton.d.ts.map +1 -0
- package/dist/components/LoadingSkeleton.js +62 -0
- package/dist/components/LoadingSkeleton.js.map +1 -0
- package/dist/components/Modal.d.ts +39 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +106 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/NumberInput.d.ts +26 -0
- package/dist/components/NumberInput.d.ts.map +1 -0
- package/dist/components/NumberInput.js +131 -0
- package/dist/components/NumberInput.js.map +1 -0
- package/dist/components/Select.d.ts +52 -0
- package/dist/components/Select.d.ts.map +1 -0
- package/dist/components/Select.js +281 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/SettingsModal.d.ts +69 -0
- package/dist/components/SettingsModal.d.ts.map +1 -0
- package/dist/components/SettingsModal.js +141 -0
- package/dist/components/SettingsModal.js.map +1 -0
- package/dist/components/ThemeIcons.d.ts +26 -0
- package/dist/components/ThemeIcons.d.ts.map +1 -0
- package/dist/components/ThemeIcons.js +74 -0
- package/dist/components/ThemeIcons.js.map +1 -0
- package/dist/components/ThemePicker.d.ts +28 -0
- package/dist/components/ThemePicker.d.ts.map +1 -0
- package/dist/components/ThemePicker.js +101 -0
- package/dist/components/ThemePicker.js.map +1 -0
- package/dist/components/Toast.d.ts +13 -0
- package/dist/components/Toast.d.ts.map +1 -0
- package/dist/components/Toast.js +70 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toaster.d.ts +19 -0
- package/dist/components/Toaster.d.ts.map +1 -0
- package/dist/components/Toaster.js +19 -0
- package/dist/components/Toaster.js.map +1 -0
- package/dist/components/Tooltip.d.ts +49 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +143 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/context-menu.css +11 -0
- package/dist/controls.css +137 -0
- package/dist/hooks/useReducedMotion.d.ts +7 -0
- package/dist/hooks/useReducedMotion.d.ts.map +1 -0
- package/dist/hooks/useReducedMotion.js +25 -0
- package/dist/hooks/useReducedMotion.js.map +1 -0
- package/dist/hooks/useToast.d.ts +18 -0
- package/dist/hooks/useToast.d.ts.map +1 -0
- package/dist/hooks/useToast.js +28 -0
- package/dist/hooks/useToast.js.map +1 -0
- package/dist/icon-btn.css +64 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/menuPlacement.d.ts +16 -0
- package/dist/lib/menuPlacement.d.ts.map +1 -0
- package/dist/lib/menuPlacement.js +19 -0
- package/dist/lib/menuPlacement.js.map +1 -0
- package/dist/lib/selectMenus.d.ts +30 -0
- package/dist/lib/selectMenus.d.ts.map +1 -0
- package/dist/lib/selectMenus.js +236 -0
- package/dist/lib/selectMenus.js.map +1 -0
- package/dist/lib/settingsClient.d.ts +120 -0
- package/dist/lib/settingsClient.d.ts.map +1 -0
- package/dist/lib/settingsClient.js +140 -0
- package/dist/lib/settingsClient.js.map +1 -0
- package/dist/lib/themeScope.d.ts +19 -0
- package/dist/lib/themeScope.d.ts.map +1 -0
- package/dist/lib/themeScope.js +10 -0
- package/dist/lib/themeScope.js.map +1 -0
- package/dist/lib/titleTooltips.d.ts +38 -0
- package/dist/lib/titleTooltips.d.ts.map +1 -0
- package/dist/lib/titleTooltips.js +166 -0
- package/dist/lib/titleTooltips.js.map +1 -0
- package/dist/lib/tooltipPlacement.d.ts +14 -0
- package/dist/lib/tooltipPlacement.d.ts.map +1 -0
- package/dist/lib/tooltipPlacement.js +34 -0
- package/dist/lib/tooltipPlacement.js.map +1 -0
- package/dist/modal.css +129 -0
- package/dist/number-input.css +131 -0
- package/dist/scrollbar.css +165 -0
- package/dist/select.css +251 -0
- package/dist/styles.css +1866 -0
- package/dist/task-ui-components.css +1866 -0
- package/dist/theme-picker.css +219 -0
- package/dist/toaster.css +159 -0
- package/dist/tooltip.css +103 -0
- package/dist/types/index.d.ts +37 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +60 -4
- package/src/app-header.css +288 -0
- package/src/bento.css +143 -0
- package/src/button.css +227 -0
- package/src/components/AppHeader.tsx +87 -0
- package/src/components/BentoCard.tsx +72 -0
- package/src/components/BentoGrid.tsx +48 -0
- package/src/components/Button.tsx +81 -0
- package/src/components/ConnectedSettings.tsx +465 -0
- package/src/components/ConnectedThemePicker.tsx +79 -0
- package/src/components/ContextMenu.tsx +48 -0
- package/src/components/HadokuThemePicker.tsx +39 -0
- package/src/components/LoadingSkeleton.tsx +84 -0
- package/src/components/Modal.tsx +171 -0
- package/src/components/NumberInput.tsx +161 -0
- package/src/components/Select.tsx +359 -0
- package/src/components/SettingsModal.tsx +235 -0
- package/src/components/ThemeIcons.tsx +127 -0
- package/src/components/ThemePicker.tsx +149 -0
- package/src/components/Toast.tsx +92 -0
- package/src/components/Toaster.tsx +43 -0
- package/src/components/Tooltip.tsx +212 -0
- package/src/context-menu.css +11 -0
- package/src/controls.css +137 -0
- package/src/hooks/useReducedMotion.ts +36 -0
- package/src/hooks/useToast.ts +57 -0
- package/src/icon-btn.css +64 -0
- package/src/index.ts +140 -0
- package/src/lib/menuPlacement.ts +31 -0
- package/src/lib/selectMenus.ts +303 -0
- package/src/lib/settingsClient.ts +377 -0
- package/src/lib/themeScope.ts +23 -0
- package/src/lib/titleTooltips.ts +236 -0
- package/src/lib/tooltipPlacement.ts +59 -0
- package/src/modal.css +129 -0
- package/src/number-input.css +131 -0
- package/src/scrollbar.css +165 -0
- package/src/select.css +251 -0
- package/src/theme-picker.css +219 -0
- package/src/toaster.css +159 -0
- package/src/tooltip.css +103 -0
- package/src/types/index.ts +43 -0
package/src/toaster.css
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toast Notification Styles
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
.toast-container {
|
|
6
|
+
position: fixed;
|
|
7
|
+
z-index: 10000;
|
|
8
|
+
display: flex;
|
|
9
|
+
gap: 12px;
|
|
10
|
+
pointer-events: none;
|
|
11
|
+
max-width: 500px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Position variants */
|
|
15
|
+
.toast-container--top-left {
|
|
16
|
+
top: 20px;
|
|
17
|
+
left: 20px;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.toast-container--top-center {
|
|
22
|
+
top: 20px;
|
|
23
|
+
left: 50%;
|
|
24
|
+
transform: translateX(-50%);
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
width: calc(100% - 40px);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.toast-container--top-right {
|
|
30
|
+
top: 20px;
|
|
31
|
+
right: 20px;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.toast-container--bottom-left {
|
|
36
|
+
bottom: 20px;
|
|
37
|
+
left: 20px;
|
|
38
|
+
flex-direction: column-reverse;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.toast-container--bottom-center {
|
|
42
|
+
bottom: 20px;
|
|
43
|
+
left: 50%;
|
|
44
|
+
transform: translateX(-50%);
|
|
45
|
+
flex-direction: column-reverse;
|
|
46
|
+
width: calc(100% - 40px);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.toast-container--bottom-right {
|
|
50
|
+
bottom: 20px;
|
|
51
|
+
right: 20px;
|
|
52
|
+
flex-direction: column-reverse;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.toast {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
gap: 12px;
|
|
59
|
+
padding: 14px 20px;
|
|
60
|
+
background: var(--color-bg-card);
|
|
61
|
+
border: 1px solid var(--color-border-light);
|
|
62
|
+
border-radius: var(--hdk-radius-lg);
|
|
63
|
+
box-shadow: var(--hdk-shadow-md);
|
|
64
|
+
min-width: 280px;
|
|
65
|
+
max-width: 100%;
|
|
66
|
+
opacity: 0;
|
|
67
|
+
transform: translateY(30px) scale(0.9);
|
|
68
|
+
transition:
|
|
69
|
+
opacity 0.5s ease-out,
|
|
70
|
+
transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
71
|
+
box-shadow 0.3s ease;
|
|
72
|
+
pointer-events: auto;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.toast--visible {
|
|
76
|
+
opacity: 1;
|
|
77
|
+
transform: translateY(0) scale(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.toast__icon {
|
|
81
|
+
flex-shrink: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.toast__message {
|
|
85
|
+
flex: 1;
|
|
86
|
+
font-size: 14px;
|
|
87
|
+
color: var(--color-text);
|
|
88
|
+
line-height: 1.4;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Toast type variants - using colored shadows for subtle emphasis */
|
|
92
|
+
.toast--success {
|
|
93
|
+
box-shadow:
|
|
94
|
+
0 0 0 1px var(--success-color, #10b981),
|
|
95
|
+
0 4px 12px rgba(16, 185, 129, 0.15),
|
|
96
|
+
0 2px 4px rgba(0, 0, 0, 0.1);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.toast--success .toast__icon {
|
|
100
|
+
color: var(--success-color, #10b981);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.toast--error {
|
|
104
|
+
box-shadow:
|
|
105
|
+
0 0 0 1px var(--error-color, #ef4444),
|
|
106
|
+
0 4px 12px rgba(239, 68, 68, 0.15),
|
|
107
|
+
0 2px 4px rgba(0, 0, 0, 0.1);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.toast--error .toast__icon {
|
|
111
|
+
color: var(--error-color, #ef4444);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.toast--warning {
|
|
115
|
+
box-shadow:
|
|
116
|
+
0 0 0 1px var(--warning-color, #f59e0b),
|
|
117
|
+
0 4px 12px rgba(245, 158, 11, 0.15),
|
|
118
|
+
0 2px 4px rgba(0, 0, 0, 0.1);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.toast--warning .toast__icon {
|
|
122
|
+
color: var(--warning-color, #f59e0b);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.toast--info {
|
|
126
|
+
box-shadow:
|
|
127
|
+
0 0 0 1px var(--info-color, var(--accent-color, #3b82f6)),
|
|
128
|
+
0 4px 12px rgba(59, 130, 246, 0.15),
|
|
129
|
+
0 2px 4px rgba(0, 0, 0, 0.1);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.toast--info .toast__icon {
|
|
133
|
+
color: var(--info-color, var(--accent-color, #3b82f6));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* Mobile adjustments */
|
|
137
|
+
@media (max-width: 768px) {
|
|
138
|
+
.toast-container {
|
|
139
|
+
max-width: none;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.toast-container--top-left,
|
|
143
|
+
.toast-container--top-right,
|
|
144
|
+
.toast-container--bottom-left,
|
|
145
|
+
.toast-container--bottom-right {
|
|
146
|
+
left: 10px;
|
|
147
|
+
right: 10px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.toast-container--top-center,
|
|
151
|
+
.toast-container--bottom-center {
|
|
152
|
+
width: calc(100% - 20px);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.toast {
|
|
156
|
+
min-width: unset;
|
|
157
|
+
padding: 12px 16px;
|
|
158
|
+
}
|
|
159
|
+
}
|
package/src/tooltip.css
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* Tooltip styles for @wolffm/task-ui-components.
|
|
2
|
+
*
|
|
3
|
+
* import '@wolffm/task-ui-components/tooltip.css'
|
|
4
|
+
*
|
|
5
|
+
* `inverse` paints body text colour as the surface and the page background
|
|
6
|
+
* as the text — the same pair as body copy, flipped, so its contrast is the
|
|
7
|
+
* theme's own text contrast in every theme.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.hdk-tooltip {
|
|
11
|
+
--_tip-bg: var(--color-text);
|
|
12
|
+
--_tip-fg: var(--color-bg);
|
|
13
|
+
--_tip-border: transparent;
|
|
14
|
+
/* Overwritten inline once placed: where the anchor's centre falls. */
|
|
15
|
+
--hdk-tooltip-arrow: 50%;
|
|
16
|
+
|
|
17
|
+
position: fixed;
|
|
18
|
+
z-index: 1100;
|
|
19
|
+
max-width: min(280px, calc(100vw - 16px));
|
|
20
|
+
padding: 6px 10px;
|
|
21
|
+
font-size: var(--hdk-text-xs);
|
|
22
|
+
font-weight: var(--font-weight-normal);
|
|
23
|
+
line-height: 1.4;
|
|
24
|
+
text-align: left;
|
|
25
|
+
white-space: normal;
|
|
26
|
+
overflow-wrap: break-word;
|
|
27
|
+
color: var(--_tip-fg);
|
|
28
|
+
background-color: var(--_tip-bg);
|
|
29
|
+
border: 1px solid var(--_tip-border);
|
|
30
|
+
border-radius: var(--hdk-radius);
|
|
31
|
+
box-shadow: var(--hdk-shadow-md);
|
|
32
|
+
/* A fade, never a slide: a transform puts the bubble on its own layer, so
|
|
33
|
+
* its 1px border smears across rows mid-slide and visibly snaps back into
|
|
34
|
+
* place when the transition ends. */
|
|
35
|
+
opacity: 0;
|
|
36
|
+
transition: opacity var(--transition-fast);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.hdk-tooltip--visible {
|
|
40
|
+
opacity: 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.hdk-tooltip--card {
|
|
44
|
+
--_tip-bg: var(--color-bg-card);
|
|
45
|
+
--_tip-fg: var(--color-text);
|
|
46
|
+
--_tip-border: var(--color-border);
|
|
47
|
+
|
|
48
|
+
box-shadow: var(--hdk-shadow-lg);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* A `title=` string from installTitleTooltips: plain text, and its line
|
|
52
|
+
* breaks are real (a native title shows them too). */
|
|
53
|
+
.hdk-tooltip--plain {
|
|
54
|
+
white-space: pre-line;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.hdk-tooltip--primary {
|
|
58
|
+
--_tip-bg: var(--color-primary);
|
|
59
|
+
--_tip-fg: var(--color-on-primary);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* ── arrow ────────────────────────────────────────────────────────────── */
|
|
63
|
+
|
|
64
|
+
/* A rotated square sharing the bubble's fill and border; only its two outer
|
|
65
|
+
* edges carry the border, so it reads as one shape with the bubble. */
|
|
66
|
+
.hdk-tooltip::after {
|
|
67
|
+
content: '';
|
|
68
|
+
position: absolute;
|
|
69
|
+
width: 8px;
|
|
70
|
+
height: 8px;
|
|
71
|
+
background-color: var(--_tip-bg);
|
|
72
|
+
border: 1px solid var(--_tip-border);
|
|
73
|
+
border-top-color: transparent;
|
|
74
|
+
border-left-color: transparent;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.hdk-tooltip--top::after {
|
|
78
|
+
top: 100%;
|
|
79
|
+
left: var(--hdk-tooltip-arrow);
|
|
80
|
+
translate: -50% -50%;
|
|
81
|
+
rotate: 45deg;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.hdk-tooltip--bottom::after {
|
|
85
|
+
bottom: 100%;
|
|
86
|
+
left: var(--hdk-tooltip-arrow);
|
|
87
|
+
translate: -50% 50%;
|
|
88
|
+
rotate: -135deg;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.hdk-tooltip--left::after {
|
|
92
|
+
left: 100%;
|
|
93
|
+
top: var(--hdk-tooltip-arrow);
|
|
94
|
+
translate: -50% -50%;
|
|
95
|
+
rotate: -45deg;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.hdk-tooltip--right::after {
|
|
99
|
+
right: 100%;
|
|
100
|
+
top: var(--hdk-tooltip-arrow);
|
|
101
|
+
translate: 50% -50%;
|
|
102
|
+
rotate: 135deg;
|
|
103
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for @wolffm/task-ui-components
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { ReactNode } from 'react'
|
|
6
|
+
// The theme MODEL lives in @wolffm/themes now; this file keeps only the types
|
|
7
|
+
// that describe THIS package's components. Re-exported so existing imports of
|
|
8
|
+
// ThemeName/ThemeFamily/ThemeMode from here keep resolving — to the same
|
|
9
|
+
// declarations, not copies.
|
|
10
|
+
export type { ThemeName, ThemeFamily, ThemeMode } from '@wolffm/themes'
|
|
11
|
+
import type { ThemeName, ThemeFamily } from '@wolffm/themes'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Dropdown placement direction
|
|
15
|
+
* - 'right': Opens to the right of the toggle button (default)
|
|
16
|
+
* - 'left': Opens to the left of the toggle button
|
|
17
|
+
* - 'auto': Automatically detects edge collisions and flips direction
|
|
18
|
+
*/
|
|
19
|
+
export type DropdownPlacement = 'left' | 'right' | 'auto'
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Theme picker component props
|
|
23
|
+
*/
|
|
24
|
+
export interface ThemePickerProps {
|
|
25
|
+
/** Current active theme */
|
|
26
|
+
currentTheme: ThemeName
|
|
27
|
+
/** Whether the theme picker dropdown is visible */
|
|
28
|
+
isOpen: boolean
|
|
29
|
+
/** Available theme families */
|
|
30
|
+
themeFamilies: ThemeFamily[]
|
|
31
|
+
/** Callback when theme is changed */
|
|
32
|
+
onThemeChange: (theme: ThemeName) => void
|
|
33
|
+
/** Callback to toggle picker visibility */
|
|
34
|
+
onToggle: () => void
|
|
35
|
+
/** Optional callback when settings icon is clicked */
|
|
36
|
+
onSettingsClick?: () => void
|
|
37
|
+
/** Optional: Function to get icon for current theme (for toggle button) */
|
|
38
|
+
getThemeIcon?: (theme: ThemeName) => ReactNode
|
|
39
|
+
/** Optional: CSS class name for the container */
|
|
40
|
+
className?: string
|
|
41
|
+
/** Optional: Direction the dropdown opens. Defaults to 'auto' (edge detection) */
|
|
42
|
+
dropdownPlacement?: DropdownPlacement
|
|
43
|
+
}
|