jake-compoenents 1.0.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/.babelrc +3 -0
- package/LICENSE +201 -0
- package/README.md +5 -0
- package/dist/components/controls/audio-recorder/audio-recorder.js +107 -0
- package/dist/components/controls/button/button.css +67 -0
- package/dist/components/controls/button/button.js +29 -0
- package/dist/components/controls/select/select.css +15 -0
- package/dist/components/controls/select/select.js +32 -0
- package/dist/components/layout/grid/grid.css +15 -0
- package/dist/components/layout/grid/grid.js +166 -0
- package/dist/components/layout/modal/modal.css +27 -0
- package/dist/components/layout/modal/modal.js +56 -0
- package/dist/components/layout/tabs/tab/tab.js +32 -0
- package/dist/components/layout/tabs/tabmenu/tabmenu.js +19 -0
- package/dist/components/layout/tile/tile.css +29 -0
- package/dist/components/layout/tile/tile.js +32 -0
- package/dist/services/io.service.js +100 -0
- package/dist/services/pagination.service.js +18 -0
- package/dist/state/actions/set-active-image.js +13 -0
- package/dist/state/actions/set-active-tab.js +13 -0
- package/dist/state/actions/set-assets.js +13 -0
- package/dist/state/actions/set-batch-size.js +13 -0
- package/dist/state/actions/set-directories.js +13 -0
- package/dist/state/actions/set-offset.js +13 -0
- package/dist/state/middleware/logger.js +19 -0
- package/dist/state/reducers/album.js +43 -0
- package/dist/state/reducers/navigation.js +40 -0
- package/dist/style.css +224 -0
- package/jake-compoenents-1.0.0.tgz +0 -0
- package/package.json +26 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.navigation = exports.SET_OFFSET = exports.SET_DISPLAY_URI = exports.SET_BATCH_SIZE = exports.SET_ACTIVE_TAB = void 0;
|
|
7
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
8
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
11
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
12
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
13
|
+
var SET_ACTIVE_TAB = exports.SET_ACTIVE_TAB = "SET_ACTIVE_TAB";
|
|
14
|
+
var SET_BATCH_SIZE = exports.SET_BATCH_SIZE = 'SET_BATCH_SIZE';
|
|
15
|
+
var SET_DISPLAY_URI = exports.SET_DISPLAY_URI = 'SET_DISPLAY_URI';
|
|
16
|
+
var SET_OFFSET = exports.SET_OFFSET = 'SET_OFFSET';
|
|
17
|
+
var navigation = exports.navigation = function navigation(state, action) {
|
|
18
|
+
switch (action.type) {
|
|
19
|
+
case SET_ACTIVE_TAB:
|
|
20
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
21
|
+
activeTab: action.activeTab
|
|
22
|
+
});
|
|
23
|
+
case SET_BATCH_SIZE:
|
|
24
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
25
|
+
batchSize: action.batchSize
|
|
26
|
+
});
|
|
27
|
+
case SET_DISPLAY_URI:
|
|
28
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
29
|
+
displayUri: action.uri
|
|
30
|
+
});
|
|
31
|
+
case SET_OFFSET:
|
|
32
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
33
|
+
activeTab: _objectSpread(_objectSpread({}, state.activeTab), {}, {
|
|
34
|
+
offset: action.offset
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
default:
|
|
38
|
+
return _objectSpread({}, state);
|
|
39
|
+
}
|
|
40
|
+
};
|
package/dist/style.css
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/* Dark theme */
|
|
2
|
+
.view[data-theme="dark"],
|
|
3
|
+
:root[data-theme="dark"],
|
|
4
|
+
.dark-mode {
|
|
5
|
+
--bg: #0b0c0f;
|
|
6
|
+
--bg-elev: rgba(255,255,255,.06);
|
|
7
|
+
--glass: rgba(255,255,255,.08);
|
|
8
|
+
--fg: #f5f7fa;
|
|
9
|
+
--muted: rgba(245,247,250,.68);
|
|
10
|
+
--accent: #38bdf8;
|
|
11
|
+
--accent-contrast: #041118;
|
|
12
|
+
--border: rgba(255,255,255,.14);
|
|
13
|
+
--ring: rgba(56,189,248,.45);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* ==========================================================================
|
|
17
|
+
Global Theme Tokens (Sass-ready via CSS variables)
|
|
18
|
+
========================================================================== */
|
|
19
|
+
:root {
|
|
20
|
+
/* Font Sizes */
|
|
21
|
+
--font-small: 0.75rem;
|
|
22
|
+
|
|
23
|
+
/* Radii */
|
|
24
|
+
--radius-xs: 6px;
|
|
25
|
+
--radius-sm: 10px;
|
|
26
|
+
--radius-md: 14px;
|
|
27
|
+
--radius-lg: 20px;
|
|
28
|
+
--radius-xl: 28px;
|
|
29
|
+
|
|
30
|
+
/* Spacing scale */
|
|
31
|
+
--space-1: .25rem;
|
|
32
|
+
--space-2: .5rem;
|
|
33
|
+
--space-3: .75rem;
|
|
34
|
+
--space-4: 1rem;
|
|
35
|
+
--space-5: 1.25rem;
|
|
36
|
+
--space-6: 1.5rem;
|
|
37
|
+
--space-8: 2rem;
|
|
38
|
+
--space-10: 2.5rem;
|
|
39
|
+
|
|
40
|
+
/* Breakpoints */
|
|
41
|
+
--screen-sm: 480px;
|
|
42
|
+
--screen-md: 768px;
|
|
43
|
+
--screen-lg: 1280px;
|
|
44
|
+
--screen-xl: 1440px;
|
|
45
|
+
|
|
46
|
+
/* Shadows */
|
|
47
|
+
--shadow-sm: 0 1px 2px rgba(0,0,0,.08);
|
|
48
|
+
--shadow-md: 0 6px 20px rgba(0,0,0,.12);
|
|
49
|
+
--shadow-lg: 0 12px 40px rgba(0,0,0,.16);
|
|
50
|
+
|
|
51
|
+
/* Border */
|
|
52
|
+
--border-width: 1px;
|
|
53
|
+
|
|
54
|
+
/* Typography */
|
|
55
|
+
--font-sans: ui-sans-serif, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
|
56
|
+
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
57
|
+
|
|
58
|
+
/* Color tokens (defaults; overridden per theme) */
|
|
59
|
+
--bg: #0b0c0f;
|
|
60
|
+
--bg-elev: rgba(255,255,255,.06);
|
|
61
|
+
--glass: rgba(255,255,255,.08);
|
|
62
|
+
--fg: #f5f7fa;
|
|
63
|
+
--muted: rgba(245,247,250,.72);
|
|
64
|
+
--accent: #0ea5e9;
|
|
65
|
+
--accent-contrast: #00141c;
|
|
66
|
+
--border: rgba(255,255,255,.15);
|
|
67
|
+
--ring: rgba(14,165,233,.45);
|
|
68
|
+
|
|
69
|
+
/* Form controls */
|
|
70
|
+
--grid-controls__height: 35px;
|
|
71
|
+
--grid-controls__width: 55px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.dark-mode {
|
|
75
|
+
--bg: #0b0c0f;
|
|
76
|
+
--bg-elev: rgba(255,255,255,.06);
|
|
77
|
+
--glass: rgba(255,255,255,.08);
|
|
78
|
+
--fg: #f5f7fa;
|
|
79
|
+
--muted: rgba(245,247,250,.68);
|
|
80
|
+
--accent: #38bdf8;
|
|
81
|
+
--accent-contrast: #041118;
|
|
82
|
+
--border: rgba(255,255,255,.14);
|
|
83
|
+
--ring: rgba(56,189,248,.45);
|
|
84
|
+
color-scheme: dark;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Reset & Base */
|
|
88
|
+
*,
|
|
89
|
+
*::before,
|
|
90
|
+
*::after { box-sizing: border-box; }
|
|
91
|
+
|
|
92
|
+
html, body, #root { height: 100%; }
|
|
93
|
+
html { -webkit-text-size-adjust: 100%; }
|
|
94
|
+
|
|
95
|
+
body {
|
|
96
|
+
margin: 0;
|
|
97
|
+
font-family: var(--font-sans);
|
|
98
|
+
background: var(--bg);
|
|
99
|
+
color: var(--fg);
|
|
100
|
+
line-height: 1.5;
|
|
101
|
+
text-rendering: optimizeLegibility;
|
|
102
|
+
-webkit-font-smoothing: antialiased;
|
|
103
|
+
-moz-osx-font-smoothing: grayscale;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
a {
|
|
107
|
+
color: var(--accent);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
img, svg, video, canvas { display: block; max-width: 100%; }
|
|
111
|
+
button, textarea, select { font: inherit; color: inherit; }
|
|
112
|
+
|
|
113
|
+
input:focus { color: var(--fg)}
|
|
114
|
+
|
|
115
|
+
/* Focus */
|
|
116
|
+
:focus-visible {
|
|
117
|
+
outline: 2px solid var(--ring);
|
|
118
|
+
outline-offset: 2px;
|
|
119
|
+
border-radius: var(--radius-xs);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Selection */
|
|
123
|
+
::selection { background: var(--accent); color: var(--accent-contrast); }
|
|
124
|
+
|
|
125
|
+
/* Scrollbar (webkit) */
|
|
126
|
+
*::-webkit-scrollbar { width: 10px; height: 10px; }
|
|
127
|
+
*::-webkit-scrollbar-thumb {
|
|
128
|
+
background: linear-gradient(180deg, rgba(255,255,255,.25), rgba(0,0,0,.25));
|
|
129
|
+
border-radius: 999px;
|
|
130
|
+
border: 3px solid var(--border);
|
|
131
|
+
background-clip: padding-box;
|
|
132
|
+
}
|
|
133
|
+
*::-webkit-scrollbar-track { background: transparent; }
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
.inline-muted { color: var(--muted); }
|
|
137
|
+
.hidden { display: none !important; }
|
|
138
|
+
.sr-only {
|
|
139
|
+
position: absolute !important;
|
|
140
|
+
height: 1px; width: 1px; overflow: hidden;
|
|
141
|
+
clip: rect(1px, 1px, 1px, 1px);
|
|
142
|
+
white-space: nowrap; border: 0; padding: 0; margin: -1px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Form base; component variants refine this */
|
|
146
|
+
.input {
|
|
147
|
+
width: 100%;
|
|
148
|
+
border-radius: var(--radius-lg);
|
|
149
|
+
border: var(--border-width) solid var(--border);
|
|
150
|
+
background: linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,.02));
|
|
151
|
+
padding: .9rem 1rem;
|
|
152
|
+
color: var(--fg);
|
|
153
|
+
box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
|
|
154
|
+
}
|
|
155
|
+
.input::placeholder { color: var(--muted); }
|
|
156
|
+
.input:focus {
|
|
157
|
+
outline: none;
|
|
158
|
+
border-color: transparent;
|
|
159
|
+
box-shadow: 0 0 0 4px var(--ring);
|
|
160
|
+
}
|
|
161
|
+
.input--lg { padding: 1rem 1.1rem; font-size: 1rem; }
|
|
162
|
+
.input--with-icon { padding-left: 2.6rem; position: relative; }
|
|
163
|
+
|
|
164
|
+
/* Buttons base; component overrides add variants */
|
|
165
|
+
.btn {
|
|
166
|
+
appearance: none;
|
|
167
|
+
display: inline-flex;
|
|
168
|
+
align-items: center;
|
|
169
|
+
justify-content: center;
|
|
170
|
+
gap: .5rem;
|
|
171
|
+
border: var(--border-width) solid var(--border);
|
|
172
|
+
border-radius: var(--radius-xl);
|
|
173
|
+
padding: .7rem 1rem;
|
|
174
|
+
background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
|
|
175
|
+
color: var(--fg);
|
|
176
|
+
box-shadow: var(--shadow-sm);
|
|
177
|
+
cursor: pointer;
|
|
178
|
+
user-select: none;
|
|
179
|
+
transition: background-color .15s ease, transform .06s ease;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.btn--primary {
|
|
183
|
+
background: linear-gradient(180deg, var(--accent), color-mix(in oklab, var(--accent) 85%, black));
|
|
184
|
+
color: var(--accent-contrast);
|
|
185
|
+
border-color: color-mix(in oklab, var(--accent) 60%, black);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.btn--secondary {
|
|
189
|
+
background: linear-gradient(180deg, var(--muted), color-mix(in oklab, var(--muted) 85%, black));
|
|
190
|
+
border-color: color-mix(in oklab, var(--ring) 60%, black);
|
|
191
|
+
color: var(--accent-contrast);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* Layout helpers */
|
|
195
|
+
.row { display: flex; align-items: center; gap: var(--space-4); }
|
|
196
|
+
.row-right { display: flex; align-items: center; gap: var(--space-4); margin-left: auto; }
|
|
197
|
+
.space-between { justify-content: space-between; }
|
|
198
|
+
|
|
199
|
+
h1,
|
|
200
|
+
h2,
|
|
201
|
+
h3,
|
|
202
|
+
h4,
|
|
203
|
+
h5,
|
|
204
|
+
h6 {
|
|
205
|
+
color: var(--fg);
|
|
206
|
+
font-weight: 600;
|
|
207
|
+
margin-bottom: var(--space-2);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
label {
|
|
211
|
+
color: var(--fg);
|
|
212
|
+
display: block;
|
|
213
|
+
margin-bottom: .5rem;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.text-centered {
|
|
217
|
+
text-align: center;
|
|
218
|
+
margin-left: auto;
|
|
219
|
+
margin-right: auto;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.text-small {
|
|
223
|
+
font-size: var(--font-small);
|
|
224
|
+
}
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jake-compoenents",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A library of reusable React components to leverage across projects.",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "rm -rf ./dist && babel src --out-dir dist --copy-files",
|
|
7
|
+
"pack": "npm run build && npm pack"
|
|
8
|
+
},
|
|
9
|
+
"author": "Jake Poe",
|
|
10
|
+
"license": "ISC",
|
|
11
|
+
"peerDependencies": {
|
|
12
|
+
"react": "^19.2.4",
|
|
13
|
+
"react-dom": "^19.2.4",
|
|
14
|
+
"react-redux": "^9.2.0"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@babel/cli": "^7.28.6",
|
|
18
|
+
"@babel/core": "^7.29.0",
|
|
19
|
+
"@babel/preset-env": "^7.29.0",
|
|
20
|
+
"@babel/preset-react": "^7.28.5"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=24.0.0",
|
|
24
|
+
"npm": ">=11.0.0"
|
|
25
|
+
}
|
|
26
|
+
}
|