winebox 0.1.3__py3-none-any.whl → 0.1.4__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.
winebox/static/index.html CHANGED
@@ -22,7 +22,7 @@
22
22
  <a href="#" data-page="search" class="nav-link">Search</a>
23
23
  </nav>
24
24
  <div id="user-info" class="user-info" style="display: none;">
25
- <span id="username-display"></span>
25
+ <a href="#" id="username-display" data-page="settings" class="username-link"></a>
26
26
  <button id="logout-btn" class="btn btn-small btn-secondary">Logout</button>
27
27
  </div>
28
28
  </div>
@@ -269,6 +269,122 @@
269
269
  </form>
270
270
  <div id="search-results" class="wine-grid"></div>
271
271
  </section>
272
+
273
+ <!-- Settings Page -->
274
+ <section id="page-settings" class="page">
275
+ <h2>Settings</h2>
276
+
277
+ <!-- Profile Section -->
278
+ <div class="settings-section">
279
+ <h3>Profile</h3>
280
+ <form id="profile-form">
281
+ <div class="form-group">
282
+ <label for="settings-username">Username</label>
283
+ <input type="text" id="settings-username" disabled>
284
+ </div>
285
+ <div class="form-group">
286
+ <label for="settings-fullname">Full Name</label>
287
+ <input type="text" id="settings-fullname" name="full_name" placeholder="Enter your full name">
288
+ </div>
289
+ <div class="form-actions">
290
+ <button type="submit" class="btn btn-primary">Save Profile</button>
291
+ </div>
292
+ </form>
293
+ </div>
294
+
295
+ <!-- Password Section -->
296
+ <div class="settings-section">
297
+ <h3>Change Password</h3>
298
+ <form id="password-form">
299
+ <div class="form-group">
300
+ <label for="current-password">Current Password</label>
301
+ <div class="password-input-wrapper">
302
+ <input type="password" id="current-password" name="current_password" required autocomplete="current-password">
303
+ <button type="button" class="password-toggle" aria-label="Show password">
304
+ <svg class="eye-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
305
+ <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
306
+ <circle cx="12" cy="12" r="3"></circle>
307
+ </svg>
308
+ <svg class="eye-off-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
309
+ <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
310
+ <line x1="1" y1="1" x2="23" y2="23"></line>
311
+ </svg>
312
+ </button>
313
+ </div>
314
+ </div>
315
+ <div class="form-group">
316
+ <label for="new-password">New Password</label>
317
+ <div class="password-input-wrapper">
318
+ <input type="password" id="new-password" name="new_password" required autocomplete="new-password">
319
+ <button type="button" class="password-toggle" aria-label="Show password">
320
+ <svg class="eye-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
321
+ <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
322
+ <circle cx="12" cy="12" r="3"></circle>
323
+ </svg>
324
+ <svg class="eye-off-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
325
+ <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
326
+ <line x1="1" y1="1" x2="23" y2="23"></line>
327
+ </svg>
328
+ </button>
329
+ </div>
330
+ </div>
331
+ <div class="form-group">
332
+ <label for="confirm-password">Confirm New Password</label>
333
+ <div class="password-input-wrapper">
334
+ <input type="password" id="confirm-password" name="confirm_password" required autocomplete="new-password">
335
+ <button type="button" class="password-toggle" aria-label="Show password">
336
+ <svg class="eye-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
337
+ <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
338
+ <circle cx="12" cy="12" r="3"></circle>
339
+ </svg>
340
+ <svg class="eye-off-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
341
+ <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
342
+ <line x1="1" y1="1" x2="23" y2="23"></line>
343
+ </svg>
344
+ </button>
345
+ </div>
346
+ </div>
347
+ <div class="form-actions">
348
+ <button type="submit" class="btn btn-primary">Change Password</button>
349
+ </div>
350
+ </form>
351
+ </div>
352
+
353
+ <!-- API Key Section -->
354
+ <div class="settings-section">
355
+ <h3>Anthropic API Key</h3>
356
+ <p class="settings-description">
357
+ Add your Anthropic API key for Claude Vision wine label scanning.
358
+ Once saved, the key cannot be viewed again for security reasons.
359
+ </p>
360
+ <div id="api-key-status" class="api-key-status">
361
+ <span class="status-indicator"></span>
362
+ <span class="status-text">Loading...</span>
363
+ </div>
364
+ <form id="api-key-form">
365
+ <div class="form-group">
366
+ <label for="api-key">API Key</label>
367
+ <div class="password-input-wrapper">
368
+ <input type="password" id="api-key" name="api_key" placeholder="sk-ant-..." autocomplete="off">
369
+ <button type="button" class="password-toggle" aria-label="Show API key">
370
+ <svg class="eye-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
371
+ <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
372
+ <circle cx="12" cy="12" r="3"></circle>
373
+ </svg>
374
+ <svg class="eye-off-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="display: none;">
375
+ <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
376
+ <line x1="1" y1="1" x2="23" y2="23"></line>
377
+ </svg>
378
+ </button>
379
+ </div>
380
+ </div>
381
+ <div class="form-actions">
382
+ <button type="submit" class="btn btn-primary">Save API Key</button>
383
+ <button type="button" id="delete-api-key-btn" class="btn btn-danger" style="display: none;">Delete API Key</button>
384
+ </div>
385
+ </form>
386
+ </div>
387
+ </section>
272
388
  </main>
273
389
 
274
390
  <!-- Checkout Modal -->
@@ -297,36 +413,77 @@
297
413
 
298
414
  <!-- Checkin Confirmation Modal -->
299
415
  <div id="checkin-confirm-modal" class="modal">
300
- <div class="modal-content">
416
+ <div class="modal-content modal-large">
301
417
  <span class="modal-close">&times;</span>
302
418
  <div class="checkin-confirm">
303
419
  <div class="checkin-confirm-header">
304
- <div class="checkin-confirm-icon">&#10003;</div>
305
- <h3>Wine Checked In Successfully</h3>
420
+ <h3>Confirm Wine Details</h3>
421
+ <p class="checkin-confirm-subtitle">Review and edit the details before saving</p>
306
422
  </div>
307
423
  <div class="checkin-confirm-content">
308
424
  <div class="checkin-confirm-image" id="checkin-confirm-image"></div>
309
- <div class="checkin-confirm-details">
310
- <h4 id="checkin-confirm-name"></h4>
311
- <div class="checkin-confirm-fields" id="checkin-confirm-fields"></div>
425
+ <div class="checkin-confirm-form">
426
+ <div class="form-grid">
427
+ <div class="form-group">
428
+ <label for="confirm-wine-name">Wine Name</label>
429
+ <input type="text" id="confirm-wine-name" required>
430
+ </div>
431
+ <div class="form-group">
432
+ <label for="confirm-winery">Winery</label>
433
+ <input type="text" id="confirm-winery">
434
+ </div>
435
+ <div class="form-group">
436
+ <label for="confirm-vintage">Vintage</label>
437
+ <input type="number" id="confirm-vintage" min="1900" max="2100">
438
+ </div>
439
+ <div class="form-group">
440
+ <label for="confirm-grape-variety">Grape Variety</label>
441
+ <input type="text" id="confirm-grape-variety">
442
+ </div>
443
+ <div class="form-group">
444
+ <label for="confirm-region">Region</label>
445
+ <input type="text" id="confirm-region">
446
+ </div>
447
+ <div class="form-group">
448
+ <label for="confirm-country">Country</label>
449
+ <input type="text" id="confirm-country">
450
+ </div>
451
+ <div class="form-group">
452
+ <label for="confirm-alcohol">Alcohol %</label>
453
+ <input type="number" id="confirm-alcohol" min="0" max="100" step="0.1">
454
+ </div>
455
+ <div class="form-group">
456
+ <label for="confirm-quantity">Quantity</label>
457
+ <input type="number" id="confirm-quantity" min="1" value="1" required>
458
+ </div>
459
+ </div>
460
+ <div class="form-group full-width">
461
+ <label for="confirm-notes">Notes</label>
462
+ <textarea id="confirm-notes" rows="2"></textarea>
463
+ </div>
312
464
  </div>
313
465
  </div>
314
- <div class="checkin-confirm-ocr">
315
- <h5>Extracted Label Text</h5>
316
- <div class="ocr-text-container">
317
- <div class="ocr-section">
318
- <strong>Front Label:</strong>
319
- <pre id="checkin-confirm-front-ocr"></pre>
320
- </div>
321
- <div class="ocr-section" id="checkin-confirm-back-ocr-section" style="display: none;">
322
- <strong>Back Label:</strong>
323
- <pre id="checkin-confirm-back-ocr"></pre>
466
+ <div class="checkin-confirm-ocr collapsible" id="confirm-ocr-section" style="display: none;">
467
+ <div class="collapsible-header" id="confirm-ocr-toggle">
468
+ <span class="label">Show Raw Label Text</span>
469
+ <span class="collapse-icon">+</span>
470
+ </div>
471
+ <div class="collapsible-content" id="confirm-ocr-content" style="display: none;">
472
+ <div class="ocr-text-container">
473
+ <div class="ocr-section">
474
+ <strong>Front Label:</strong>
475
+ <pre id="checkin-confirm-front-ocr"></pre>
476
+ </div>
477
+ <div class="ocr-section" id="checkin-confirm-back-ocr-section" style="display: none;">
478
+ <strong>Back Label:</strong>
479
+ <pre id="checkin-confirm-back-ocr"></pre>
480
+ </div>
324
481
  </div>
325
482
  </div>
326
483
  </div>
327
484
  <div class="form-actions">
328
- <button type="button" class="btn btn-primary" id="checkin-confirm-done">Done</button>
329
- <button type="button" class="btn btn-secondary" id="checkin-confirm-another">Check In Another</button>
485
+ <button type="button" class="btn btn-primary" id="checkin-confirm-btn">Confirm</button>
486
+ <button type="button" class="btn btn-secondary" id="checkin-cancel-btn">Cancel</button>
330
487
  </div>
331
488
  </div>
332
489
  </div>