django-npdatetime 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,746 @@
1
+ /* ===============================================
2
+ Nepali Date Picker - Modern Production Ready
3
+ =============================================== */
4
+
5
+ :root {
6
+ --npd-primary: #3b82f6;
7
+ --npd-primary-hover: #2563eb;
8
+ --npd-primary-light: #dbeafe;
9
+ --npd-secondary: #8b5cf6;
10
+ --npd-success: #10b981;
11
+ --npd-danger: #ef4444;
12
+ --npd-warning: #f59e0b;
13
+
14
+ --npd-bg: #ffffff;
15
+ --npd-bg-secondary: #f9fafb;
16
+ --npd-bg-hover: #f3f4f6;
17
+ --npd-text: #1f2937;
18
+ --npd-text-muted: #6b7280;
19
+ --npd-text-light: #9ca3af;
20
+
21
+ --npd-border: #e5e7eb;
22
+ --npd-border-focus: #3b82f6;
23
+ --npd-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
24
+ --npd-shadow:
25
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
26
+ --npd-shadow-lg:
27
+ 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
28
+
29
+ --npd-radius: 0.5rem;
30
+ --npd-radius-sm: 0.375rem;
31
+ --npd-radius-lg: 0.75rem;
32
+ --npd-radius-full: 9999px;
33
+
34
+ --npd-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
35
+ --npd-transition-fast: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
36
+
37
+ --npd-z-index: 1000;
38
+ }
39
+
40
+ /* Dark Mode */
41
+ @media (prefers-color-scheme: dark) {
42
+ :root {
43
+ --npd-bg: #1f2937;
44
+ --npd-bg-secondary: #111827;
45
+ --npd-bg-hover: #374151;
46
+ --npd-text: #f9fafb;
47
+ --npd-text-muted: #9ca3af;
48
+ --npd-text-light: #6b7280;
49
+ --npd-border: #374151;
50
+ --npd-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
51
+ --npd-shadow:
52
+ 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -1px rgba(0, 0, 0, 0.2);
53
+ --npd-shadow-lg:
54
+ 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.3);
55
+ }
56
+ }
57
+
58
+ [data-theme="dark"] {
59
+ --npd-bg: #1f2937;
60
+ --npd-bg-secondary: #111827;
61
+ --npd-bg-hover: #374151;
62
+ --npd-text: #f9fafb;
63
+ --npd-text-muted: #9ca3af;
64
+ --npd-text-light: #6b7280;
65
+ --npd-border: #374151;
66
+ }
67
+
68
+ /* ===============================================
69
+ Input Styling
70
+ =============================================== */
71
+
72
+ *,
73
+ *::before,
74
+ *::after {
75
+ box-sizing: border-box;
76
+ }
77
+
78
+ .npd-input {
79
+ display: block;
80
+ width: 100%;
81
+ padding: 0.625rem 1rem;
82
+ font-size: 0.875rem;
83
+ font-weight: 400;
84
+ line-height: 1.5;
85
+ color: var(--npd-text);
86
+ background-color: var(--npd-bg);
87
+ background-clip: padding-box;
88
+ border: 1px solid var(--npd-border);
89
+ border-radius: var(--npd-radius);
90
+ transition: var(--npd-transition);
91
+ cursor: pointer;
92
+ }
93
+
94
+ .npd-input:hover {
95
+ border-color: var(--npd-primary);
96
+ }
97
+
98
+ .npd-input:focus {
99
+ color: var(--npd-text);
100
+ background-color: var(--npd-bg);
101
+ border-color: var(--npd-border-focus);
102
+ outline: 0;
103
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
104
+ }
105
+
106
+ .npd-input::placeholder {
107
+ color: var(--npd-text-light);
108
+ opacity: 1;
109
+ }
110
+
111
+ /* ===============================================
112
+ Picker Container
113
+ =============================================== */
114
+
115
+ .npd-picker {
116
+ position: fixed;
117
+ display: flex;
118
+ flex-direction: column;
119
+ min-width: 320px;
120
+ background: var(--npd-bg);
121
+ border: 1px solid var(--npd-border);
122
+ border-radius: var(--npd-radius-lg);
123
+ box-shadow: var(--npd-shadow-lg);
124
+ padding: 1.25rem;
125
+ z-index: var(--npd-z-index);
126
+ opacity: 0;
127
+ visibility: hidden;
128
+ transform: translateY(-0.5rem) scale(0.95);
129
+ transition: var(--npd-transition);
130
+ font-family:
131
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
132
+ Arial, sans-serif;
133
+ }
134
+
135
+ .npd-picker.active {
136
+ opacity: 1;
137
+ visibility: visible;
138
+ transform: translateY(0) scale(1);
139
+ }
140
+
141
+ .npd-picker.npd-position-top {
142
+ transform: translateY(0.5rem) scale(0.95);
143
+ }
144
+
145
+ .npd-picker.npd-position-top.active {
146
+ transform: translateY(0) scale(1);
147
+ }
148
+
149
+ /* ===============================================
150
+ Header
151
+ =============================================== */
152
+
153
+ .npd-header {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ margin-bottom: 1rem;
158
+ gap: 1rem;
159
+ }
160
+
161
+ .npd-title {
162
+ display: flex;
163
+ align-items: center;
164
+ gap: 0.5rem;
165
+ padding: 0.5rem 0.75rem;
166
+ background: transparent;
167
+ border: none;
168
+ border-radius: var(--npd-radius);
169
+ font-size: 1rem;
170
+ font-weight: 600;
171
+ color: var(--npd-text);
172
+ cursor: pointer;
173
+ transition: var(--npd-transition-fast);
174
+ }
175
+
176
+ .npd-title:hover {
177
+ background: var(--npd-bg-hover);
178
+ }
179
+
180
+ .npd-title-icon {
181
+ width: 1rem;
182
+ height: 1rem;
183
+ transition: var(--npd-transition-fast);
184
+ }
185
+
186
+ .npd-title:hover .npd-title-icon {
187
+ transform: translateY(2px);
188
+ }
189
+
190
+ .npd-nav {
191
+ display: flex;
192
+ gap: 0.5rem;
193
+ }
194
+
195
+ .npd-nav-btn {
196
+ display: flex;
197
+ align-items: center;
198
+ justify-content: center;
199
+ width: 2rem;
200
+ height: 2rem;
201
+ padding: 0;
202
+ background: var(--npd-bg-secondary);
203
+ border: 1px solid var(--npd-border);
204
+ border-radius: var(--npd-radius);
205
+ cursor: pointer;
206
+ transition: var(--npd-transition-fast);
207
+ }
208
+
209
+ .npd-nav-btn svg {
210
+ width: 1rem;
211
+ height: 1rem;
212
+ color: var(--npd-text-muted);
213
+ transition: var(--npd-transition-fast);
214
+ }
215
+
216
+ .npd-nav-btn:hover {
217
+ background: var(--npd-primary);
218
+ border-color: var(--npd-primary);
219
+ }
220
+
221
+ .npd-nav-btn:hover svg {
222
+ color: white;
223
+ }
224
+
225
+ .npd-nav-btn:active {
226
+ transform: scale(0.95);
227
+ }
228
+
229
+ /* ===============================================
230
+ Body / Views
231
+ =============================================== */
232
+
233
+ .npd-body {
234
+ position: relative;
235
+ min-height: 280px;
236
+ margin-bottom: 1rem;
237
+ }
238
+
239
+ .npd-view {
240
+ position: absolute;
241
+ top: 0;
242
+ left: 0;
243
+ width: 100%;
244
+ opacity: 0;
245
+ visibility: hidden;
246
+ transform: scale(0.95);
247
+ transition: var(--npd-transition);
248
+ }
249
+
250
+ .npd-view.active {
251
+ opacity: 1;
252
+ visibility: visible;
253
+ transform: scale(1);
254
+ position: relative;
255
+ }
256
+
257
+ /* Days View */
258
+ .npd-days-grid {
259
+ display: grid;
260
+ grid-template-columns: repeat(7, 1fr);
261
+ gap: 0; /* Removed gap for continuous range look */
262
+ row-gap: 2px;
263
+ }
264
+
265
+ .npd-weekday {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ padding: 0.5rem 0;
270
+ font-size: 0.7rem;
271
+ font-weight: 700;
272
+ color: var(--npd-text-light);
273
+ text-transform: uppercase;
274
+ letter-spacing: 0.05em;
275
+ }
276
+
277
+ .npd-weekday.holiday {
278
+ color: var(--npd-danger);
279
+ }
280
+
281
+ /* Modern Day Styling */
282
+ .npd-day {
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ aspect-ratio: 1;
287
+ padding: 0;
288
+ background: transparent;
289
+ border: none;
290
+ border-radius: var(--npd-radius-sm); /* Default to slightly rounded square */
291
+ font-size: 0.85rem;
292
+ font-weight: 500;
293
+ color: var(--npd-text);
294
+ cursor: pointer;
295
+ transition: var(--npd-transition-fast);
296
+ position: relative;
297
+ margin: 1px 0; /* Tiny vertical margin */
298
+ }
299
+
300
+ /* Range Styling */
301
+ /* Start of Range */
302
+ .npd-day.range-start {
303
+ background: var(--npd-primary);
304
+ color: white;
305
+ border-radius: var(--npd-radius-full) 0 0 var(--npd-radius-full);
306
+ position: relative;
307
+ z-index: 2;
308
+ }
309
+
310
+ /* End of Range */
311
+ .npd-day.range-end {
312
+ background: var(--npd-primary);
313
+ color: white;
314
+ border-radius: 0 var(--npd-radius-full) var(--npd-radius-full) 0;
315
+ position: relative;
316
+ z-index: 2;
317
+ }
318
+
319
+ /* Middle of Range */
320
+ .npd-day.in-range:not(.range-start):not(.range-end) {
321
+ background: var(--npd-primary-light);
322
+ color: var(--npd-primary);
323
+ border-radius: 0;
324
+ position: relative;
325
+ z-index: 1;
326
+ }
327
+
328
+ /* Single Point Range OR Start=End */
329
+ .npd-day.range-only,
330
+ .npd-day.range-start.range-end {
331
+ border-radius: var(--npd-radius-full);
332
+ }
333
+
334
+ /* Selected State (Non-Range or Range Start/End) */
335
+ .npd-day.selected {
336
+ background: var(--npd-primary);
337
+ color: white !important;
338
+ font-weight: 700;
339
+ }
340
+
341
+ /* Hover States */
342
+ /* Range middle hover */
343
+ .npd-day.in-range:not(.range-start):not(.range-end):hover {
344
+ background: var(--npd-primary-light);
345
+ filter: brightness(0.95);
346
+ }
347
+
348
+ /* General hover for non-selected items */
349
+ .npd-day:not(.selected):not(.range-start):not(.range-end):not(.in-range):not(
350
+ .npd-empty
351
+ ):hover {
352
+ background: var(--npd-bg-secondary);
353
+ color: var(--npd-text);
354
+ }
355
+
356
+ .npd-day.holiday {
357
+ color: var(--npd-danger);
358
+ font-weight: 600;
359
+ }
360
+
361
+ .npd-day.npd-overflow {
362
+ color: var(--npd-text-light);
363
+ opacity: 0.5;
364
+ cursor: pointer;
365
+ }
366
+
367
+ .npd-day.npd-overflow:hover {
368
+ opacity: 0.8;
369
+ background: var(--npd-bg-secondary);
370
+ }
371
+
372
+ .npd-day.npd-empty {
373
+ cursor: default;
374
+ opacity: 0;
375
+ }
376
+
377
+ .npd-day:focus-visible {
378
+ outline: 2px solid var(--npd-primary);
379
+ outline-offset: 2px;
380
+ }
381
+
382
+ /* Today indicator */
383
+ .npd-day.today {
384
+ border: 1px solid var(--npd-primary);
385
+ font-weight: 700;
386
+ color: var(--npd-primary);
387
+ }
388
+
389
+ .npd-day.today.selected {
390
+ background: var(--npd-primary);
391
+ color: white;
392
+ border-color: var(--npd-primary);
393
+ }
394
+
395
+ .npd-day.today::before {
396
+ display: none;
397
+ }
398
+
399
+ .npd-day.today.selected {
400
+ background: var(--npd-primary);
401
+ color: white;
402
+ border-color: var(--npd-primary);
403
+ }
404
+
405
+ /* Months View */
406
+ .npd-months-grid {
407
+ display: grid;
408
+ grid-template-columns: repeat(3, 1fr);
409
+ gap: 0.5rem;
410
+ }
411
+
412
+ .npd-month {
413
+ display: flex;
414
+ align-items: center;
415
+ justify-content: center;
416
+ padding: 1rem;
417
+ background: var(--npd-bg-secondary);
418
+ border: 1px solid var(--npd-border);
419
+ border-radius: var(--npd-radius);
420
+ font-size: 0.875rem;
421
+ font-weight: 500;
422
+ color: var(--npd-text);
423
+ cursor: pointer;
424
+ transition: var(--npd-transition-fast);
425
+ }
426
+
427
+ .npd-month:hover {
428
+ background: var(--npd-primary-light);
429
+ border-color: var(--npd-primary);
430
+ color: var(--npd-primary);
431
+ transform: translateY(-2px);
432
+ }
433
+
434
+ .npd-month.selected {
435
+ background: var(--npd-primary);
436
+ border-color: var(--npd-primary);
437
+ color: white;
438
+ }
439
+
440
+ /* Years View */
441
+ .npd-years-grid {
442
+ display: grid;
443
+ grid-template-columns: repeat(3, 1fr);
444
+ gap: 0.5rem;
445
+ }
446
+
447
+ .npd-year {
448
+ display: flex;
449
+ align-items: center;
450
+ justify-content: center;
451
+ padding: 1rem;
452
+ background: var(--npd-bg-secondary);
453
+ border: 1px solid var(--npd-border);
454
+ border-radius: var(--npd-radius);
455
+ font-size: 0.875rem;
456
+ font-weight: 500;
457
+ color: var(--npd-text);
458
+ cursor: pointer;
459
+ transition: var(--npd-transition-fast);
460
+ }
461
+
462
+ .npd-year:hover {
463
+ background: var(--npd-primary-light);
464
+ border-color: var(--npd-primary);
465
+ color: var(--npd-primary);
466
+ transform: translateY(-2px);
467
+ }
468
+
469
+ .npd-year.selected {
470
+ background: var(--npd-primary);
471
+ border-color: var(--npd-primary);
472
+ color: white;
473
+ }
474
+
475
+ /* ===============================================
476
+ Footer
477
+ =============================================== */
478
+
479
+ .npd-footer {
480
+ display: flex;
481
+ flex-direction: column;
482
+ gap: 0.75rem;
483
+ padding-top: 0.75rem;
484
+ border-top: 1px solid var(--npd-border);
485
+ }
486
+
487
+ .npd-mode-toggle {
488
+ display: flex;
489
+ background: var(--npd-bg-secondary);
490
+ border: 1px solid var(--npd-border);
491
+ border-radius: var(--npd-radius);
492
+ padding: 0.25rem;
493
+ gap: 0.25rem;
494
+ }
495
+
496
+ .npd-mode-btn {
497
+ flex: 1;
498
+ padding: 0.5rem;
499
+ background: transparent;
500
+ border: none;
501
+ border-radius: var(--npd-radius-sm);
502
+ font-size: 0.75rem;
503
+ font-weight: 600;
504
+ color: var(--npd-text-muted);
505
+ cursor: pointer;
506
+ transition: var(--npd-transition-fast);
507
+ text-transform: uppercase;
508
+ letter-spacing: 0.05em;
509
+ }
510
+
511
+ .npd-mode-btn:hover {
512
+ color: var(--npd-text);
513
+ }
514
+
515
+ .npd-mode-btn.active {
516
+ background: white;
517
+ color: var(--npd-primary);
518
+ box-shadow: var(--npd-shadow-sm);
519
+ }
520
+
521
+ @media (prefers-color-scheme: dark) {
522
+ .npd-mode-btn.active {
523
+ background: var(--npd-bg);
524
+ }
525
+ }
526
+
527
+ .npd-actions {
528
+ display: flex;
529
+ gap: 0.25rem;
530
+ flex-wrap: wrap;
531
+ }
532
+
533
+ .npd-btn {
534
+ flex: 1;
535
+ padding: 0.4rem 0.6rem;
536
+ background: var(--npd-bg-secondary);
537
+ border: 1px solid var(--npd-border);
538
+ border-radius: var(--npd-radius-sm);
539
+ font-size: 0.75rem;
540
+ font-weight: 500;
541
+ color: var(--npd-text);
542
+ cursor: pointer;
543
+ transition: var(--npd-transition-fast);
544
+ white-space: nowrap;
545
+ }
546
+
547
+ .npd-btn:hover {
548
+ background: var(--npd-bg-hover);
549
+ border-color: var(--npd-text-muted);
550
+ }
551
+
552
+ .npd-btn:active {
553
+ transform: scale(0.98);
554
+ }
555
+
556
+ .npd-today {
557
+ background: var(--npd-primary);
558
+ border-color: var(--npd-primary);
559
+ color: white;
560
+ }
561
+
562
+ .npd-today:hover {
563
+ background: var(--npd-primary-hover);
564
+ border-color: var(--npd-primary-hover);
565
+ color: white;
566
+ }
567
+
568
+ .npd-clear:hover {
569
+ background: var(--npd-danger);
570
+ border-color: var(--npd-danger);
571
+ color: white;
572
+ }
573
+
574
+ /* ===============================================
575
+ Time Picker Styling
576
+ =============================================== */
577
+
578
+ .npd-time-picker {
579
+ margin-top: 0.75rem;
580
+ padding-top: 0.75rem;
581
+ border-top: 1px dashed var(--npd-border);
582
+ }
583
+
584
+ .npd-time-field {
585
+ display: flex;
586
+ align-items: center;
587
+ justify-content: space-between;
588
+ }
589
+
590
+ .npd-time-field label {
591
+ font-size: 0.8rem;
592
+ font-weight: 600;
593
+ color: var(--npd-text-muted);
594
+ }
595
+
596
+ .npd-time-inputs {
597
+ display: flex;
598
+ align-items: center;
599
+ gap: 0.25rem;
600
+ }
601
+
602
+ .npd-time-input {
603
+ width: 3rem;
604
+ padding: 0.25rem;
605
+ border: 1px solid var(--npd-border);
606
+ border-radius: var(--npd-radius-sm);
607
+ background: var(--npd-bg-secondary);
608
+ color: var(--npd-text);
609
+ font-size: 0.9rem;
610
+ text-align: center;
611
+ }
612
+
613
+ .npd-time-input:focus {
614
+ border-color: var(--npd-primary);
615
+ outline: none;
616
+ }
617
+
618
+ /* ===============================================
619
+ Responsive
620
+ =============================================== */
621
+
622
+ @media (max-width: 480px) {
623
+ .npd-picker {
624
+ left: 0 !important;
625
+ right: 0 !important;
626
+ bottom: 0 !important;
627
+ top: auto !important;
628
+ width: 100% !important;
629
+ border-radius: var(--npd-radius-lg) var(--npd-radius-lg) 0 0 !important;
630
+ transform: translateY(100%) !important;
631
+ padding-bottom: env(safe-area-inset-bottom, 1rem) !important;
632
+ min-width: 100% !important;
633
+ }
634
+
635
+ .npd-picker.active {
636
+ transform: translateY(0) !important;
637
+ }
638
+
639
+ .npd-body {
640
+ min-height: 250px;
641
+ }
642
+
643
+ .npd-day {
644
+ font-size: 1rem; /* Slightly larger targets for mobile */
645
+ }
646
+ }
647
+
648
+ /* ===============================================
649
+ Accessibility
650
+ =============================================== */
651
+
652
+ @media (prefers-reduced-motion: reduce) {
653
+ * {
654
+ animation-duration: 0.01ms !important;
655
+ animation-iteration-count: 1 !important;
656
+ transition-duration: 0.01ms !important;
657
+ }
658
+ }
659
+
660
+ .npd-picker:focus-visible,
661
+ .npd-btn:focus-visible,
662
+ .npd-mode-btn:focus-visible,
663
+ .npd-nav-btn:focus-visible {
664
+ outline: 2px solid var(--npd-primary);
665
+ outline-offset: 2px;
666
+ }
667
+
668
+ /* ===============================================
669
+ Custom Themes
670
+ =============================================== */
671
+
672
+ /* Purple Theme */
673
+ .npd-picker[data-theme="purple"] {
674
+ --npd-primary: #8b5cf6;
675
+ --npd-primary-hover: #7c3aed;
676
+ --npd-primary-light: #ede9fe;
677
+ }
678
+
679
+ /* Green Theme */
680
+ .npd-picker[data-theme="green"] {
681
+ --npd-primary: #10b981;
682
+ --npd-primary-hover: #059669;
683
+ --npd-primary-light: #d1fae5;
684
+ }
685
+
686
+ /* Orange Theme */
687
+ .npd-picker[data-theme="orange"] {
688
+ --npd-primary: #f59e0b;
689
+ --npd-primary-hover: #d97706;
690
+ --npd-primary-light: #fef3c7;
691
+ }
692
+
693
+ /* Red Theme */
694
+ .npd-picker[data-theme="red"] {
695
+ --npd-primary: #ef4444;
696
+ --npd-primary-hover: #dc2626;
697
+ --npd-primary-light: #fee2e2;
698
+ }
699
+
700
+ /* ===============================================
701
+ Print Styles
702
+ =============================================== */
703
+
704
+ @media print {
705
+ .npd-picker {
706
+ display: none !important;
707
+ }
708
+ }
709
+
710
+ /* Tooltip Styling */
711
+ .npd-tooltip {
712
+ position: absolute;
713
+ top: 0;
714
+ left: 0;
715
+ background: var(--npd-bg);
716
+ color: var(--npd-text);
717
+ padding: 0.5rem 0.75rem;
718
+ border-radius: var(--npd-radius);
719
+ box-shadow: var(--npd-shadow-lg);
720
+ border: 1px solid var(--npd-border);
721
+ font-size: 0.75rem;
722
+ font-weight: 500;
723
+ z-index: 2000;
724
+ opacity: 0;
725
+ visibility: hidden;
726
+ transition:
727
+ opacity 0.2s ease,
728
+ transform 0.2s ease;
729
+ pointer-events: none;
730
+ white-space: pre;
731
+ text-align: center;
732
+ line-height: 1.4;
733
+ transform: translateY(5px);
734
+ }
735
+
736
+ .npd-tooltip.active {
737
+ opacity: 1;
738
+ visibility: visible;
739
+ transform: translateY(0);
740
+ }
741
+
742
+ [data-theme="dark"] .npd-tooltip {
743
+ background: #374151;
744
+ border-color: #4b5563;
745
+ color: #f9fafb;
746
+ }