hijri-date-time-picker 1.0.2 → 1.0.31

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.
@@ -1,38 +1,13 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
1
  import { Component } from '@angular/core';
8
2
  import { bootstrapApplication } from '@angular/platform-browser';
9
3
  import { HijriDatePickerComponent } from './lib/hijri-date-picker.component';
10
- let DemoComponent = class DemoComponent {
11
- selectedDates = {};
12
- // Date range examples
13
- today = new Date();
14
- minDate = new Date(new Date().setDate(new Date().getDate() - 30)); // 30 days ago
15
- maxDate = new Date(); // Today
16
- maxFutureDate = new Date(new Date().setDate(new Date().getDate() + 60)); // 60 days from now
17
- customStyles = {
18
- primaryColor: '#059669',
19
- secondaryColor: '#34d399',
20
- selectedDateBackground: '#059669',
21
- todayColor: '#f59e0b',
22
- borderRadius: '12px',
23
- fontFamily: 'Inter, sans-serif'
24
- };
25
- onDateSelected(date, key) {
26
- this.selectedDates[key] = date;
27
- console.log(`Date selected for ${key}:`, date);
28
- }
29
- };
30
- DemoComponent = __decorate([
31
- Component({
32
- selector: 'app-demo',
33
- standalone: true,
34
- imports: [HijriDatePickerComponent],
35
- template: `
4
+ import { SelectedDate, DatePickerStyles } from './lib/hijri-date-picker.types';
5
+
6
+ @Component({
7
+ selector: 'app-demo',
8
+ standalone: true,
9
+ imports: [HijriDatePickerComponent],
10
+ template: `
36
11
  <div class="demo-container">
37
12
  <h1>Hijri Date Picker Demo</h1>
38
13
 
@@ -177,7 +152,7 @@ DemoComponent = __decorate([
177
152
  </div>
178
153
  </div>
179
154
  `,
180
- styles: [`
155
+ styles: [`
181
156
  .demo-container {
182
157
  max-width: 1400px;
183
158
  margin: 0 auto;
@@ -242,8 +217,30 @@ DemoComponent = __decorate([
242
217
  }
243
218
  }
244
219
  `]
245
- })
246
- ], DemoComponent);
247
- export { DemoComponent };
220
+ })
221
+ export class DemoComponent {
222
+ selectedDates: { [key: string]: any } = {};
223
+
224
+ // Date range examples
225
+ today: Date = new Date();
226
+ minDate: Date = new Date(new Date().setDate(new Date().getDate() - 30)); // 30 days ago
227
+ maxDate: Date = new Date(); // Today
228
+ maxFutureDate: Date = new Date(new Date().setDate(new Date().getDate() + 60)); // 60 days from now
229
+
230
+ customStyles: DatePickerStyles = {
231
+ primaryColor: '#059669',
232
+ secondaryColor: '#34d399',
233
+ selectedDateBackground: '#059669',
234
+ todayColor: '#f59e0b',
235
+ borderRadius: '12px',
236
+ fontFamily: 'Inter, sans-serif'
237
+ };
238
+
239
+ onDateSelected(date: SelectedDate | SelectedDate[], key: string) {
240
+ this.selectedDates[key] = date;
241
+ console.log(`Date selected for ${key}:`, date);
242
+ }
243
+ }
244
+
248
245
  // Bootstrap the demo application
249
246
  bootstrapApplication(DemoComponent);
@@ -0,0 +1,524 @@
1
+ /* Import Remix Icon */
2
+ @import 'remixicon/fonts/remixicon.css';
3
+
4
+ /* CSS Variables from Custom Styles */
5
+ .hijri-date-picker {
6
+ font-family: var(--font-family);
7
+ font-size: var(--font-size);
8
+ background-color: var(--background-color);
9
+ color: var(--text-color);
10
+ border: 1px solid var(--border-color);
11
+ border-radius: var(--border-radius);
12
+ padding: 20px;
13
+ max-width: 300px;
14
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
15
+ }
16
+
17
+ /* Header Section */
18
+ .picker-header {
19
+ display: flex;
20
+ justify-content: space-between;
21
+ align-items: center;
22
+ margin-bottom: 16px;
23
+ gap: 12px;
24
+ }
25
+
26
+ .mode-toggle-btn {
27
+ background-color: var(--secondary-color);
28
+ color: white;
29
+ border: none;
30
+ padding: 8px 16px;
31
+ border-radius: calc(var(--border-radius) / 2);
32
+ cursor: pointer;
33
+ font-size: 13px;
34
+ font-weight: 500;
35
+ transition: all 0.2s ease;
36
+ }
37
+
38
+ .mode-toggle-btn:hover {
39
+ opacity: 0.9;
40
+ transform: translateY(-1px);
41
+ }
42
+
43
+ .mode-toggle-btn:active {
44
+ transform: translateY(0);
45
+ }
46
+
47
+ .todays-date {
48
+ flex: 1;
49
+ display: flex;
50
+ justify-content: flex-end;
51
+ }
52
+
53
+ .today-btn {
54
+ background-color: var(--today-color);
55
+ color: white;
56
+ border: none;
57
+ padding: 8px 16px;
58
+ border-radius: calc(var(--border-radius) / 2);
59
+ cursor: pointer;
60
+ font-size: 13px;
61
+ font-weight: 500;
62
+ transition: all 0.2s ease;
63
+ }
64
+
65
+ .today-btn:hover {
66
+ opacity: 0.9;
67
+ transform: translateY(-1px);
68
+ }
69
+
70
+ /* Calendar Controls */
71
+ .calendar-controls {
72
+ display: flex;
73
+ flex-wrap: wrap;
74
+ gap: 12px;
75
+ margin-bottom: 16px;
76
+ align-items: flex-end;
77
+ }
78
+
79
+ .control-group {
80
+ flex: 1;
81
+ min-width: 120px;
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: 4px;
85
+ }
86
+
87
+ .control-group label {
88
+ font-size: 12px;
89
+ font-weight: 500;
90
+ color: var(--text-color);
91
+ opacity: 0.8;
92
+ }
93
+
94
+ .year-select,
95
+ .month-select {
96
+ padding: 8px 12px;
97
+ border: 1px solid var(--border-color);
98
+ border-radius: calc(var(--border-radius) / 2);
99
+ background-color: var(--background-color);
100
+ color: var(--text-color);
101
+ font-size: 14px;
102
+ cursor: pointer;
103
+ transition: border-color 0.2s ease;
104
+ }
105
+
106
+ .year-select:hover,
107
+ .month-select:hover {
108
+ border-color: var(--primary-color);
109
+ }
110
+
111
+ .year-select:focus,
112
+ .month-select:focus {
113
+ outline: none;
114
+ border-color: var(--primary-color);
115
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
116
+ }
117
+
118
+ .navigation-buttons {
119
+ display: flex;
120
+ gap: 8px;
121
+ }
122
+
123
+ .nav-btn {
124
+ background-color: var(--primary-color);
125
+ color: white;
126
+ border: none;
127
+ width: 36px;
128
+ height: 36px;
129
+ border-radius: calc(var(--border-radius) / 2);
130
+ cursor: pointer;
131
+ font-size: 18px;
132
+ display: flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ transition: all 0.2s ease;
136
+ }
137
+
138
+ .nav-btn:hover {
139
+ opacity: 0.9;
140
+ transform: scale(1.05);
141
+ }
142
+
143
+ .nav-btn:active {
144
+ transform: scale(0.95);
145
+ }
146
+
147
+ /* Calendar Grid */
148
+ .calendar-grid {
149
+ margin-bottom: 16px;
150
+ }
151
+
152
+ .weekday-header {
153
+ display: grid;
154
+ grid-template-columns: repeat(7, 1fr);
155
+ gap: 4px;
156
+ margin-bottom: 8px;
157
+ }
158
+
159
+ .weekday {
160
+ text-align: center;
161
+ font-size: 12px;
162
+ font-weight: 600;
163
+ color: var(--text-color);
164
+ opacity: 0.7;
165
+ padding: 8px 4px;
166
+ }
167
+
168
+ .calendar-days {
169
+ display: grid;
170
+ grid-template-columns: repeat(7, 1fr);
171
+ gap: 4px;
172
+ }
173
+
174
+ .day-cell {
175
+ aspect-ratio: 1;
176
+ display: flex;
177
+ align-items: center;
178
+ justify-content: center;
179
+ border-radius: calc(var(--border-radius) / 2);
180
+ cursor: pointer;
181
+ font-size: 14px;
182
+ font-weight: 500;
183
+ transition: all 0.2s ease;
184
+ position: relative;
185
+ width: 30px;
186
+ }
187
+
188
+ .day-cell:not(.empty):not(.disabled):hover {
189
+ background-color: var(--hover-color);
190
+ color: #000;
191
+ transform: scale(1.05);
192
+ }
193
+
194
+ .day-cell.empty {
195
+ cursor: default;
196
+ pointer-events: none;
197
+ }
198
+
199
+ .day-cell.today {
200
+ color: var(--today-color);
201
+ font-weight: 700;
202
+ }
203
+
204
+ .day-cell.today::after {
205
+ content: "";
206
+ position: absolute;
207
+ bottom: 4px;
208
+ left: 50%;
209
+ transform: translateX(-50%);
210
+ width: 4px;
211
+ height: 4px;
212
+ background-color: var(--today-color);
213
+ border-radius: 50%;
214
+ }
215
+
216
+ .day-cell.selected {
217
+ background-color: var(--selected-date-background);
218
+ color: var(--selected-date-color);
219
+ font-weight: 700;
220
+ }
221
+
222
+ .day-cell.disabled {
223
+ color: var(--disabled-color);
224
+ cursor: not-allowed;
225
+ opacity: 0.5;
226
+ }
227
+
228
+ .day-cell.disabled:hover {
229
+ background-color: transparent;
230
+ transform: none;
231
+ }
232
+
233
+ /* Selected Dates Display */
234
+ .selected-dates {
235
+ margin-bottom: 16px;
236
+ padding: 12px;
237
+ background-color: var(--hover-color);
238
+ border-radius: calc(var(--border-radius) / 2);
239
+ }
240
+
241
+ .selected-label {
242
+ font-size: 12px;
243
+ font-weight: 600;
244
+ margin-bottom: 8px;
245
+ color: var(--text-color);
246
+ opacity: 0.8;
247
+ }
248
+
249
+ .selected-list {
250
+ display: flex;
251
+ flex-wrap: wrap;
252
+ gap: 8px;
253
+ }
254
+
255
+ .selected-item {
256
+ background-color: var(--primary-color);
257
+ color: white;
258
+ padding: 6px 12px;
259
+ border-radius: calc(var(--border-radius) / 2);
260
+ font-size: 13px;
261
+ font-weight: 500;
262
+ }
263
+
264
+ /* Footer */
265
+ .picker-footer {
266
+ margin-bottom: 12px;
267
+ }
268
+
269
+ .submit-btn {
270
+ width: 100%;
271
+ background-color: var(--primary-color);
272
+ color: white;
273
+ border: none;
274
+ padding: 12px 24px;
275
+ border-radius: calc(var(--border-radius) / 2);
276
+ cursor: pointer;
277
+ font-size: 15px;
278
+ font-weight: 600;
279
+ transition: all 0.2s ease;
280
+ }
281
+
282
+ .submit-btn:hover:not(:disabled) {
283
+ opacity: 0.9;
284
+ transform: translateY(-2px);
285
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
286
+ }
287
+
288
+ .submit-btn:active:not(:disabled) {
289
+ transform: translateY(0);
290
+ }
291
+
292
+ .submit-btn:disabled {
293
+ opacity: 0.5;
294
+ cursor: not-allowed;
295
+ }
296
+
297
+ /* Calendar Type Label */
298
+ .calendar-type {
299
+ text-align: center;
300
+ color: var(--text-color);
301
+ opacity: 0.6;
302
+ font-size: 11px;
303
+ }
304
+
305
+ /* RTL Support */
306
+ .hijri-date-picker[dir="rtl"] {
307
+ direction: rtl;
308
+ }
309
+
310
+ .hijri-date-picker[dir="rtl"] .picker-header {
311
+ flex-direction: row-reverse;
312
+ }
313
+
314
+ .hijri-date-picker[dir="rtl"] .todays-date {
315
+ justify-content: flex-start;
316
+ }
317
+
318
+ /* Responsive Design */
319
+ @media (max-width: 480px) {
320
+ .hijri-date-picker {
321
+ padding: 16px;
322
+ max-width: 100%;
323
+ }
324
+
325
+ .calendar-controls {
326
+ flex-direction: column;
327
+ }
328
+
329
+ .control-group {
330
+ width: 100%;
331
+ }
332
+
333
+ .navigation-buttons {
334
+ width: 100%;
335
+ justify-content: space-between;
336
+ }
337
+
338
+ .weekday {
339
+ font-size: 11px;
340
+ padding: 6px 2px;
341
+ }
342
+
343
+ .day-cell {
344
+ font-size: 13px;
345
+ }
346
+ }
347
+
348
+ /* Dark Mode Support (Optional Enhancement) */
349
+ @media (prefers-color-scheme: dark) {
350
+ .hijri-date-picker {
351
+ --background-color: #1f2937;
352
+ --text-color: #f9fafb;
353
+ --border-color: #374151;
354
+ --hover-color: #374151;
355
+ }
356
+ }
357
+
358
+ /* Time Picker Section */
359
+ .time-picker {
360
+ margin-top: 10px;
361
+ /* margin-bottom: 20px; */
362
+ padding: 10px;
363
+ background: linear-gradient(135deg, var(--hover-color) 0%, transparent 100%);
364
+ border-radius: var(--border-radius);
365
+ /* border: 1px solid var(--border-color);
366
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05); */
367
+ }
368
+
369
+ .time-picker-label {
370
+ font-size: 13px;
371
+ font-weight: 600;
372
+ margin-bottom: 12px;
373
+ color: var(--text-color);
374
+ opacity: 0.9;
375
+ /* text-align: center; */
376
+ text-transform: uppercase;
377
+ letter-spacing: 0.5px;
378
+ }
379
+
380
+ .time-inputs {
381
+ display: flex;
382
+ align-items: center;
383
+ justify-content: center;
384
+ gap: 12px;
385
+ }
386
+
387
+ .time-input-group {
388
+ display: flex;
389
+ flex-direction: column;
390
+ align-items: center;
391
+ gap: 0;
392
+ position: relative;
393
+ }
394
+
395
+ .time-label {
396
+ font-size: 11px;
397
+ font-weight: 700;
398
+ color: var(--primary-color, #4f46e5);
399
+ text-transform: uppercase;
400
+ letter-spacing: 0.5px;
401
+ margin-bottom: 4px;
402
+ opacity: 0.8;
403
+ }
404
+
405
+ .time-btn {
406
+ background-color: transparent;
407
+ color: var(--text-color);
408
+ border: none;
409
+ width: 36px;
410
+ height: 28px;
411
+ border-radius: calc(var(--border-radius) / 3);
412
+ cursor: pointer;
413
+ font-size: 12px;
414
+ display: flex;
415
+ align-items: center;
416
+ justify-content: center;
417
+ transition: all 0.2s ease;
418
+ user-select: none;
419
+ }
420
+
421
+ img {
422
+ width: 16px;
423
+ height: 16px;
424
+ }
425
+
426
+ .time-btn:hover {
427
+ filter: brightness(1.1);
428
+ transform: scale(1.05);
429
+ }
430
+
431
+ .time-btn:active {
432
+ transform: scale(0.95);
433
+ }
434
+
435
+ .time-display {
436
+ width: 60px;
437
+ padding: 0;
438
+ text-align: center;
439
+ border: none;
440
+ border-radius: 0;
441
+ background: transparent;
442
+ color: var(--text-color, #1f2937);
443
+ font-size: 22px;
444
+ font-weight: 600;
445
+ font-family: "Courier New", "Consolas", monospace;
446
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
447
+ position: relative;
448
+ -webkit-user-select: none;
449
+ user-select: none;
450
+ cursor: default;
451
+ }
452
+
453
+ .time-display:hover {
454
+ color: var(--primary-color, #4f46e5);
455
+ transform: scale(1.05);
456
+ }
457
+
458
+ .time-separator {
459
+ font-size: 24px;
460
+ font-weight: 900;
461
+ color: var(--primary-color, #4f46e5);
462
+ opacity: 0.4;
463
+ padding-bottom: 4px;
464
+ }
465
+
466
+ .ampm-toggle {
467
+ display: flex;
468
+ flex-direction: column;
469
+ gap: 6px;
470
+ margin-left: 12px;
471
+ }
472
+
473
+ .ampm-btn {
474
+ background-color: var(--background-color);
475
+ color: var(--text-color);
476
+ border: 1px solid var(--border-color);
477
+ padding: 8px 14px;
478
+ border-radius: calc(var(--border-radius) / 3);
479
+ cursor: pointer;
480
+ font-size: 11px;
481
+ font-weight: 700;
482
+ transition: all 0.2s ease;
483
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
484
+ }
485
+
486
+ .ampm-btn.active {
487
+ background-color: var(--primary-color);
488
+ color: white;
489
+ border-color: var(--primary-color);
490
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15);
491
+ }
492
+
493
+ .ampm-btn:hover:not(.active) {
494
+ background-color: var(--hover-color);
495
+ border-color: var(--primary-color);
496
+ }
497
+
498
+ /* Update selected dates display to show time */
499
+ .selected-date-info {
500
+ display: flex;
501
+ flex-direction: column;
502
+ align-items: center;
503
+ gap: 2px;
504
+ }
505
+
506
+ .selected-item .time-text {
507
+ font-size: 11px;
508
+ opacity: 0.85;
509
+ font-weight: 500;
510
+ background-color: rgba(255, 255, 255, 0.2);
511
+ padding: 2px 8px;
512
+ border-radius: 10px;
513
+ margin-top: 2px;
514
+ }
515
+
516
+ /* Remix Icon Styling */
517
+ .time-btn i {
518
+ font-size: 18px;
519
+ display: flex;
520
+ align-items: center;
521
+ justify-content: center;
522
+ line-height: 1;
523
+ }
524
+