winebox 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,271 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
6
+ <meta name="apple-mobile-web-app-capable" content="yes">
7
+ <meta name="mobile-web-app-capable" content="yes">
8
+ <meta name="theme-color" content="#722f37">
9
+ <title>WineBox - Wine Cellar Management</title>
10
+ <link rel="stylesheet" href="/static/css/style.css">
11
+ </head>
12
+ <body>
13
+ <header>
14
+ <div class="header-content">
15
+ <h1>WineBox</h1>
16
+ <nav id="main-nav">
17
+ <a href="#" data-page="dashboard" class="nav-link active">Dashboard</a>
18
+ <a href="#" data-page="checkin" class="nav-link">Check In</a>
19
+ <a href="#" data-page="cellar" class="nav-link">Cellar</a>
20
+ <a href="#" data-page="history" class="nav-link">History</a>
21
+ <a href="#" data-page="search" class="nav-link">Search</a>
22
+ </nav>
23
+ <div id="user-info" class="user-info" style="display: none;">
24
+ <span id="username-display"></span>
25
+ <button id="logout-btn" class="btn btn-small btn-secondary">Logout</button>
26
+ </div>
27
+ </div>
28
+ </header>
29
+
30
+ <!-- Login Page -->
31
+ <section id="page-login" class="login-page">
32
+ <div class="login-container">
33
+ <div class="login-card">
34
+ <h2>Welcome to WineBox</h2>
35
+ <p class="login-subtitle">Sign in to manage your wine cellar</p>
36
+ <form id="login-form">
37
+ <div class="form-group">
38
+ <label for="login-username">Username</label>
39
+ <input type="text" id="login-username" name="username" required autocomplete="username">
40
+ </div>
41
+ <div class="form-group">
42
+ <label for="login-password">Password</label>
43
+ <input type="password" id="login-password" name="password" required autocomplete="current-password">
44
+ </div>
45
+ <div id="login-error" class="login-error" style="display: none;"></div>
46
+ <button type="submit" class="btn btn-primary btn-full">Sign In</button>
47
+ </form>
48
+ </div>
49
+ </div>
50
+ </section>
51
+
52
+ <main id="main-content">
53
+ <!-- Dashboard Page -->
54
+ <section id="page-dashboard" class="page active">
55
+ <h2>Dashboard</h2>
56
+ <div class="stats-grid" id="stats-grid">
57
+ <div class="stat-card">
58
+ <div class="stat-value" id="stat-total-bottles">-</div>
59
+ <div class="stat-label">Total Bottles</div>
60
+ </div>
61
+ <div class="stat-card">
62
+ <div class="stat-value" id="stat-unique-wines">-</div>
63
+ <div class="stat-label">Unique Wines</div>
64
+ </div>
65
+ <div class="stat-card">
66
+ <div class="stat-value" id="stat-total-tracked">-</div>
67
+ <div class="stat-label">Wines Tracked</div>
68
+ </div>
69
+ </div>
70
+
71
+ <div class="dashboard-sections">
72
+ <div class="dashboard-section">
73
+ <h3>By Country</h3>
74
+ <div id="by-country" class="chart-list"></div>
75
+ </div>
76
+ <div class="dashboard-section">
77
+ <h3>By Grape Variety</h3>
78
+ <div id="by-grape" class="chart-list"></div>
79
+ </div>
80
+ <div class="dashboard-section">
81
+ <h3>By Vintage</h3>
82
+ <div id="by-vintage" class="chart-list"></div>
83
+ </div>
84
+ </div>
85
+
86
+ <h3>Recent Activity</h3>
87
+ <div id="recent-activity" class="activity-list"></div>
88
+ </section>
89
+
90
+ <!-- Check In Page -->
91
+ <section id="page-checkin" class="page">
92
+ <h2>Check In Wine</h2>
93
+ <form id="checkin-form" enctype="multipart/form-data">
94
+ <div class="form-section">
95
+ <h3>Label Images</h3>
96
+ <div class="image-upload-grid">
97
+ <div class="image-upload">
98
+ <label for="front-label">Front Label (Required)</label>
99
+ <input type="file" id="front-label" name="front_label" accept="image/*" capture="environment" required>
100
+ <div id="front-preview" class="image-preview">Tap to take photo or select image</div>
101
+ </div>
102
+ <div class="image-upload">
103
+ <label for="back-label">Back Label (Optional)</label>
104
+ <input type="file" id="back-label" name="back_label" accept="image/*" capture="environment">
105
+ <div id="back-preview" class="image-preview">Tap to take photo or select image</div>
106
+ </div>
107
+ </div>
108
+ </div>
109
+
110
+ <div class="form-section">
111
+ <h3>Wine Details</h3>
112
+ <p class="form-note">Leave fields blank to use OCR-detected values</p>
113
+
114
+ <div class="form-grid">
115
+ <div class="form-group">
116
+ <label for="wine-name">Wine Name</label>
117
+ <input type="text" id="wine-name" name="name" placeholder="Auto-detected from label">
118
+ </div>
119
+ <div class="form-group">
120
+ <label for="winery">Winery</label>
121
+ <input type="text" id="winery" name="winery" placeholder="Auto-detected from label">
122
+ </div>
123
+ <div class="form-group">
124
+ <label for="vintage">Vintage</label>
125
+ <input type="number" id="vintage" name="vintage" min="1900" max="2100" placeholder="Auto-detected">
126
+ </div>
127
+ <div class="form-group">
128
+ <label for="grape-variety">Grape Variety</label>
129
+ <input type="text" id="grape-variety" name="grape_variety" placeholder="Auto-detected">
130
+ </div>
131
+ <div class="form-group">
132
+ <label for="region">Region</label>
133
+ <input type="text" id="region" name="region" placeholder="Auto-detected">
134
+ </div>
135
+ <div class="form-group">
136
+ <label for="country">Country</label>
137
+ <input type="text" id="country" name="country" placeholder="Auto-detected">
138
+ </div>
139
+ <div class="form-group">
140
+ <label for="alcohol">Alcohol %</label>
141
+ <input type="number" id="alcohol" name="alcohol_percentage" min="0" max="100" step="0.1" placeholder="Auto-detected">
142
+ </div>
143
+ <div class="form-group">
144
+ <label for="quantity">Quantity (Bottles)</label>
145
+ <input type="number" id="quantity" name="quantity" min="1" value="1" required>
146
+ </div>
147
+ </div>
148
+
149
+ <div class="form-group full-width">
150
+ <label for="notes">Notes</label>
151
+ <textarea id="notes" name="notes" rows="3" placeholder="Purchase notes, occasion, etc."></textarea>
152
+ </div>
153
+ </div>
154
+
155
+ <div class="form-actions">
156
+ <button type="submit" class="btn btn-primary">Check In Wine</button>
157
+ <button type="reset" class="btn btn-secondary">Clear Form</button>
158
+ </div>
159
+ </form>
160
+ </section>
161
+
162
+ <!-- Cellar Page -->
163
+ <section id="page-cellar" class="page">
164
+ <h2>My Cellar</h2>
165
+ <div class="filter-bar">
166
+ <select id="cellar-filter">
167
+ <option value="all">All Wines</option>
168
+ <option value="in-stock">In Stock Only</option>
169
+ <option value="out-of-stock">Out of Stock</option>
170
+ </select>
171
+ <input type="text" id="cellar-search" placeholder="Quick search...">
172
+ </div>
173
+ <div id="cellar-list" class="wine-grid"></div>
174
+ </section>
175
+
176
+ <!-- Wine Detail Modal -->
177
+ <div id="wine-modal" class="modal">
178
+ <div class="modal-content">
179
+ <span class="modal-close">&times;</span>
180
+ <div id="wine-detail"></div>
181
+ </div>
182
+ </div>
183
+
184
+ <!-- History Page -->
185
+ <section id="page-history" class="page">
186
+ <h2>Transaction History</h2>
187
+ <div class="filter-bar">
188
+ <select id="history-filter">
189
+ <option value="all">All Transactions</option>
190
+ <option value="CHECK_IN">Check Ins Only</option>
191
+ <option value="CHECK_OUT">Check Outs Only</option>
192
+ </select>
193
+ </div>
194
+ <div id="history-list" class="transaction-list"></div>
195
+ </section>
196
+
197
+ <!-- Search Page -->
198
+ <section id="page-search" class="page">
199
+ <h2>Search Wines</h2>
200
+ <form id="search-form">
201
+ <div class="form-grid">
202
+ <div class="form-group">
203
+ <label for="search-q">Text Search</label>
204
+ <input type="text" id="search-q" name="q" placeholder="Search name, winery, region...">
205
+ </div>
206
+ <div class="form-group">
207
+ <label for="search-vintage">Vintage</label>
208
+ <input type="number" id="search-vintage" name="vintage" min="1900" max="2100">
209
+ </div>
210
+ <div class="form-group">
211
+ <label for="search-grape">Grape Variety</label>
212
+ <input type="text" id="search-grape" name="grape">
213
+ </div>
214
+ <div class="form-group">
215
+ <label for="search-winery">Winery</label>
216
+ <input type="text" id="search-winery" name="winery">
217
+ </div>
218
+ <div class="form-group">
219
+ <label for="search-region">Region</label>
220
+ <input type="text" id="search-region" name="region">
221
+ </div>
222
+ <div class="form-group">
223
+ <label for="search-country">Country</label>
224
+ <input type="text" id="search-country" name="country">
225
+ </div>
226
+ <div class="form-group">
227
+ <label for="search-in-stock">
228
+ <input type="checkbox" id="search-in-stock" name="in_stock">
229
+ In Stock Only
230
+ </label>
231
+ </div>
232
+ </div>
233
+ <div class="form-actions">
234
+ <button type="submit" class="btn btn-primary">Search</button>
235
+ <button type="reset" class="btn btn-secondary">Clear</button>
236
+ </div>
237
+ </form>
238
+ <div id="search-results" class="wine-grid"></div>
239
+ </section>
240
+ </main>
241
+
242
+ <!-- Checkout Modal -->
243
+ <div id="checkout-modal" class="modal">
244
+ <div class="modal-content modal-small">
245
+ <span class="modal-close">&times;</span>
246
+ <h3>Check Out Wine</h3>
247
+ <form id="checkout-form">
248
+ <input type="hidden" id="checkout-wine-id">
249
+ <div class="form-group">
250
+ <label for="checkout-quantity">Quantity</label>
251
+ <input type="number" id="checkout-quantity" name="quantity" min="1" value="1" required>
252
+ <span id="checkout-available"></span>
253
+ </div>
254
+ <div class="form-group">
255
+ <label for="checkout-notes">Notes</label>
256
+ <textarea id="checkout-notes" name="notes" rows="3" placeholder="Occasion, tasting notes..."></textarea>
257
+ </div>
258
+ <div class="form-actions">
259
+ <button type="submit" class="btn btn-primary">Check Out</button>
260
+ <button type="button" class="btn btn-secondary modal-cancel">Cancel</button>
261
+ </div>
262
+ </form>
263
+ </div>
264
+ </div>
265
+
266
+ <!-- Toast Notifications -->
267
+ <div id="toast-container"></div>
268
+
269
+ <script src="/static/js/app.js"></script>
270
+ </body>
271
+ </html>