@archpublicwebsite/rangepicker 1.0.9 → 1.0.13

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/README.md CHANGED
@@ -38,10 +38,47 @@ const dates = ref('')
38
38
  </script>
39
39
 
40
40
  <template>
41
- <RangepickerInput
42
- v-model="dates"
41
+ <RangepickerInput
42
+ v-model="dates"
43
+ primary-color="#3b82f6"
44
+ placeholder="Check in / Check out"
45
+ />
46
+ </template>
47
+ ```
48
+
49
+ ### TypeScript Support
50
+
51
+ Full TypeScript support with exported types for type-safe development:
52
+
53
+ ```vue
54
+ <script setup lang="ts">
55
+ import { ref } from 'vue'
56
+ import {
57
+ RangepickerInput,
58
+ type RangepickerProps,
59
+ type DateRange
60
+ } from '@archpublicwebsite/rangepicker'
61
+ import '@archpublicwebsite/rangepicker/style.css'
62
+
63
+ // Type-safe date range
64
+ const dates = ref<DateRange>({ startDate: '', endDate: '' })
65
+
66
+ // Type-safe props configuration
67
+ const pickerOptions: Partial<RangepickerProps> = {
68
+ format: 'DD/MM/YYYY',
69
+ autoApply: true,
70
+ minDays: 2,
71
+ maxDays: 30,
72
+ showTooltip: true
73
+ }
74
+ </script>
75
+
76
+ <template>
77
+ <RangepickerInput
78
+ v-model="dates"
79
+ v-bind="pickerOptions"
43
80
  primary-color="#3b82f6"
44
- placeholder="Check in / Check out"
81
+ placeholder="Check in / Check out"
45
82
  />
46
83
  </template>
47
84
  ```
@@ -161,6 +198,21 @@ const options = {
161
198
  ### Basic Usage
162
199
 
163
200
  ```vue
201
+ <script setup lang="ts">
202
+ import { ref, computed } from 'vue'
203
+ import { Rangepicker, type DateRange } from '@archpublicwebsite/rangepicker'
204
+ import '@archpublicwebsite/rangepicker/style.css'
205
+
206
+ const triggerRef = ref<HTMLElement | null>(null)
207
+ const isOpen = ref(false)
208
+ const dateRange = ref<DateRange>({ startDate: '', endDate: '' })
209
+
210
+ const dateRangeText = computed(() => {
211
+ if (!dateRange.value.startDate || !dateRange.value.endDate) return ''
212
+ return `${dateRange.value.startDate} - ${dateRange.value.endDate}`
213
+ })
214
+ </script>
215
+
164
216
  <template>
165
217
  <div>
166
218
  <input
@@ -177,25 +229,10 @@ const options = {
177
229
  v-model:is-open="isOpen"
178
230
  :trigger-element="triggerRef"
179
231
  :value-of-months="2"
180
- :format="'DD MMM YYYY'"
232
+ format="DD MMM YYYY"
181
233
  />
182
234
  </div>
183
235
  </template>
184
-
185
- <script setup lang="ts">
186
- import { ref, computed } from 'vue'
187
- import { Rangepicker } from '@archpublicwebsite/rangepicker'
188
- import '@archpublicwebsite/rangepicker/style.css'
189
-
190
- const triggerRef = ref<HTMLElement | null>(null)
191
- const isOpen = ref(false)
192
- const dateRange = ref({ startDate: '', endDate: '' })
193
-
194
- const dateRangeText = computed(() => {
195
- if (!dateRange.value.startDate || !dateRange.value.endDate) return ''
196
- return `${dateRange.value.startDate} - ${dateRange.value.endDate}`
197
- })
198
- </script>
199
236
  ```
200
237
 
201
238
  ### Using the Composable
@@ -203,67 +240,43 @@ const dateRangeText = computed(() => {
203
240
  ```vue
204
241
  <script setup lang="ts">
205
242
  import { ref } from 'vue'
206
- import { Rangepicker, useRangepicker } from '@archpublicwebsite/rangepicker'
243
+ import {
244
+ Rangepicker,
245
+ useRangepicker,
246
+ type RangepickerProps
247
+ } from '@archpublicwebsite/rangepicker'
207
248
  import '@archpublicwebsite/rangepicker/style.css'
208
249
 
209
250
  const triggerRef = ref<HTMLElement | null>(null)
210
- const { isOpen, dateRange, open, close, toggle } = useRangepicker(triggerRef, {
251
+
252
+ // Type-safe composable options
253
+ const options: Partial<RangepickerProps> = {
211
254
  valueOfMonths: 2,
212
255
  format: 'DD MMM YYYY',
213
256
  minDays: 1,
214
- })
215
- </script>
216
- ```
257
+ autoApply: true
258
+ }
217
259
 
218
- ### Hotel Booking Example
260
+ const { isOpen, dateRange, open, close, toggle } = useRangepicker(triggerRef, options)
261
+ </script>
219
262
 
220
- ```vue
221
263
  <template>
222
264
  <div>
223
- <input
224
- ref="bookingInputRef"
225
- type="text"
226
- :value="bookingText"
227
- placeholder="Check-in - Check-out"
228
- readonly
229
- @click="isBookingOpen = true"
230
- />
265
+ <button ref="triggerRef" @click="toggle">
266
+ {{ dateRange.startDate && dateRange.endDate
267
+ ? `${dateRange.startDate} - ${dateRange.endDate}`
268
+ : 'Select dates' }}
269
+ </button>
231
270
 
232
271
  <Rangepicker
233
- v-model="bookingDates"
234
- v-model:is-open="isBookingOpen"
235
- :trigger-element="bookingInputRef"
236
- :value-of-months="2"
237
- :value-of-columns="2"
238
- :min-days="1"
239
- :format="'DD MMM YYYY'"
240
- :show-tooltip="true"
241
- :holidays="holidays"
242
- :min-date="today"
243
- variant="desktop"
272
+ v-model="dateRange"
273
+ v-model:is-open="isOpen"
274
+ :trigger-element="triggerRef"
275
+ v-bind="options"
244
276
  />
245
277
  </div>
246
278
  </template>
247
-
248
- <script setup lang="ts">
249
- import { ref, computed } from 'vue'
250
- import { Rangepicker } from '@archpublicwebsite/rangepicker'
251
- import '@archpublicwebsite/rangepicker/style.css'
252
- import dayjs from 'dayjs'
253
-
254
- const bookingInputRef = ref<HTMLElement | null>(null)
255
- const isBookingOpen = ref(false)
256
- const bookingDates = ref({ startDate: '', endDate: '' })
257
- const today = dayjs().format('YYYY-MM-DD')
258
- const holidays = ref(['2025-12-25', '2025-01-01'])
259
-
260
- const bookingText = computed(() => {
261
- if (!bookingDates.value.startDate || !bookingDates.value.endDate) return ''
262
- return `${bookingDates.value.startDate} - ${bookingDates.value.endDate}`
263
- })
264
- </script>
265
279
  ```
266
-
267
280
  ## Props
268
281
 
269
282
  | Prop | Type | Default | Description |
@@ -299,6 +312,128 @@ const bookingText = computed(() => {
299
312
  | `dateSelected` | `Dayjs` | Emitted when a date is clicked |
300
313
  | `rangeSelected` | `{ start: Dayjs, end: Dayjs }` | Emitted when range is complete |
301
314
 
315
+ ## TypeScript Support
316
+
317
+ This package is built with TypeScript and provides full type definitions. All types are automatically exported for your convenience.
318
+
319
+ ### Available Types
320
+
321
+ ```typescript
322
+ import type {
323
+ RangepickerProps, // Component props interface
324
+ RangepickerEmits, // Event emitter interface
325
+ DateRange, // Date range object type
326
+ CalendarDay, // Internal calendar day type
327
+ CalendarMonth // Internal calendar month type
328
+ } from '@archpublicwebsite/rangepicker'
329
+ ```
330
+
331
+ ### Type Definitions
332
+
333
+ #### `RangepickerProps`
334
+ Complete props interface with JSDoc documentation. All props are optional with sensible defaults:
335
+
336
+ ```typescript
337
+ interface RangepickerProps {
338
+ modelValue?: { startDate?: string | Date | Dayjs; endDate?: string | Date | Dayjs }
339
+ isOpen?: boolean
340
+ variant?: 'desktop' | 'mobile'
341
+ minDate?: string | Date | Dayjs
342
+ maxDate?: string | Date | Dayjs
343
+ minDays?: number
344
+ maxDays?: number
345
+ close?: boolean
346
+ valueOfMonths?: number // default: 2
347
+ valueOfColumns?: number // default: 2
348
+ disabledDates?: (string | Date)[]
349
+ holidays?: (string | Date)[]
350
+ format?: string // default: 'YYYY-MM-DD'
351
+ delimiter?: string // default: ' - '
352
+ placeholder?: string
353
+ label?: string
354
+ showTooltip?: boolean // default: true
355
+ autoApply?: boolean // default: false
356
+ position?: 'auto' | 'top' | 'bottom'
357
+ triggerElement?: HTMLElement | null
358
+ colorStyles?: Record<string, string>
359
+ }
360
+ ```
361
+
362
+ #### `DateRange`
363
+ Type for the v-model binding:
364
+
365
+ ```typescript
366
+ interface DateRange {
367
+ startDate: string
368
+ endDate: string
369
+ }
370
+ ```
371
+
372
+ #### `RangepickerEmits`
373
+ Event emitter types for type-safe event handling:
374
+
375
+ ```typescript
376
+ interface RangepickerEmits {
377
+ 'update:modelValue': [value: { startDate: string; endDate: string }]
378
+ 'update:isOpen': [value: boolean]
379
+ 'dateSelected': [date: Dayjs]
380
+ 'rangeSelected': [start: Dayjs, end: Dayjs]
381
+ }
382
+ ```
383
+
384
+ ### Usage Examples
385
+
386
+ #### Type-Safe Component Props
387
+
388
+ ```typescript
389
+ import type { RangepickerProps } from '@archpublicwebsite/rangepicker'
390
+
391
+ // Define props with autocomplete support
392
+ const config: Partial<RangepickerProps> = {
393
+ format: 'DD/MM/YYYY',
394
+ minDays: 2,
395
+ maxDays: 30,
396
+ autoApply: true,
397
+ showTooltip: true
398
+ }
399
+ ```
400
+
401
+ #### Type-Safe Event Handlers
402
+
403
+ ```typescript
404
+ import type { Dayjs } from 'dayjs'
405
+
406
+ function handleDateSelected(date: Dayjs) {
407
+ console.log('Selected:', date.format('YYYY-MM-DD'))
408
+ }
409
+
410
+ function handleRangeSelected(start: Dayjs, end: Dayjs) {
411
+ const nights = end.diff(start, 'day')
412
+ console.log(`Booking: ${nights} nights`)
413
+ }
414
+ ```
415
+
416
+ #### Type-Safe Refs
417
+
418
+ ```typescript
419
+ import { ref } from 'vue'
420
+ import type { DateRange } from '@archpublicwebsite/rangepicker'
421
+
422
+ const dateRange = ref<DateRange>({ startDate: '', endDate: '' })
423
+ const holidays = ref<string[]>(['2025-12-25', '2025-01-01'])
424
+ const disabledDates = ref<Date[]>([new Date('2025-12-24')])
425
+ ```
426
+
427
+ ### IDE Support
428
+
429
+ With the exported types, you'll get:
430
+
431
+ - ✅ **Autocomplete** - IntelliSense for all props and events
432
+ - ✅ **Type Checking** - Compile-time error detection
433
+ - ✅ **Documentation** - Hover tooltips with prop descriptions and default values
434
+ - ✅ **Refactoring** - Safe rename and refactor operations
435
+ - ✅ **Error Prevention** - Catch typos and incorrect prop usage before runtime
436
+
302
437
  ## Development
303
438
 
304
439
  ```bash
@@ -318,31 +453,6 @@ pnpm type-check
318
453
  pnpm preview
319
454
  ```
320
455
 
321
- ## Package Structure
322
-
323
- ```
324
- packages/rangepicker/
325
- ├── dist/ # Built files (published to npm)
326
- │ ├── rangepicker.js # ES module (39.91 KB, gzipped: 9.42 KB)
327
- │ ├── rangepicker.umd.cjs # UMD module (20.18 KB, gzipped: 7.07 KB)
328
- │ ├── style.css # Compiled styles with arch- prefix (48.69 KB, gzipped: 5.29 KB)
329
- │ └── *.d.ts # TypeScript type definitions
330
- ├── src/
331
- │ ├── index.ts # Main entry point
332
- │ ├── Rangepicker.vue # Core calendar component
333
- │ ├── RangepickerInput.vue # Input wrapper component
334
- │ ├── types.ts # Type definitions
335
- │ ├── utils/
336
- │ │ ├── calendar.ts # Calendar generation logic
337
- │ │ ├── date.ts # Dayjs utilities
338
- │ │ └── position.ts # Smart positioning
339
- │ └── styles/
340
- │ └── rangepicker.scss # Tailwind CSS with arch- prefix
341
- ├── package.json
342
- ├── vite.config.ts
343
- └── tailwind.config.js # With prefix: 'arch-'
344
- ```
345
-
346
456
  ## CSS Architecture
347
457
 
348
458
  The component uses **Tailwind CSS with `arch-` prefix** to prevent conflicts with other frameworks:
@@ -1,31 +1,6 @@
1
1
  import { Dayjs } from 'dayjs';
2
- interface Props {
3
- modelValue?: {
4
- startDate?: string | Date | Dayjs;
5
- endDate?: string | Date | Dayjs;
6
- };
7
- isOpen?: boolean;
8
- variant?: 'desktop' | 'mobile';
9
- minDate?: string | Date | Dayjs;
10
- maxDate?: string | Date | Dayjs;
11
- minDays?: number;
12
- maxDays?: number;
13
- close?: boolean;
14
- valueOfMonths?: number;
15
- valueOfColumns?: number;
16
- disabledDates?: (string | Date)[];
17
- holidays?: (string | Date)[];
18
- format?: string;
19
- delimiter?: string;
20
- placeholder?: string;
21
- label?: string;
22
- showTooltip?: boolean;
23
- autoApply?: boolean;
24
- position?: 'auto' | 'top' | 'bottom';
25
- triggerElement?: HTMLElement | null;
26
- colorStyles?: Record<string, string>;
27
- }
28
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
2
+ import { RangepickerProps } from './types';
3
+ declare const _default: import('vue').DefineComponent<RangepickerProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
29
4
  "update:modelValue": (value: {
30
5
  startDate: string;
31
6
  endDate: string;
@@ -33,7 +8,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
33
8
  "update:isOpen": (value: boolean) => any;
34
9
  dateSelected: (date: Dayjs) => any;
35
10
  rangeSelected: (start: Dayjs, end: Dayjs) => any;
36
- }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
11
+ }, string, import('vue').PublicProps, Readonly<RangepickerProps> & Readonly<{
37
12
  "onUpdate:modelValue"?: (value: {
38
13
  startDate: string;
39
14
  endDate: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Rangepicker.vue.d.ts","sourceRoot":"","sources":["../src/Rangepicker.vue"],"names":[],"mappings":"AAmnBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAmClC,UAAU,KAAK;IACb,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;QACjC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;KAChC,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IACjC,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;IACpC,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;;;mBAvC2C,MAAM;iBAAW,MAAM;;;;;;;mBAAvB,MAAM;iBAAW,MAAM;;;;;;YAmBxD,OAAO;aACN,SAAS,GAAG,QAAQ;mBAMd,MAAM;oBACL,MAAM;YAGd,MAAM;eACH,MAAM;iBAGJ,OAAO;eACT,OAAO;cACR,MAAM,GAAG,KAAK,GAAG,QAAQ;;;;AA+oBtC,wBAUG"}
1
+ {"version":3,"file":"Rangepicker.vue.d.ts","sourceRoot":"","sources":["../src/Rangepicker.vue"],"names":[],"mappings":"AA0jBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAInC,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,SAAS,CAAC;;;mBAejB,MAAM;iBAAW,MAAM;;;;;;;mBAAvB,MAAM;iBAAW,MAAM;;;;;;;;;;;;;;;;;;AA8lBnE,wBAUG"}
@@ -1,74 +1,14 @@
1
- import type { Meta, StoryObj } from "@storybook/vue3-vite";
1
+ import type { Meta, StoryObj } from "@storybook/vue3";
2
2
  import RangepickerInput from "./RangepickerInput.vue";
3
- /**
4
- * RangepickerInput is a date range picker component that provides an intuitive
5
- * interface for selecting date ranges. It supports both desktop and mobile variants,
6
- * custom styling, and various configuration options.
7
- *
8
- * ## Features
9
- * - Desktop and mobile variants
10
- * - Custom color theming
11
- * - Date restrictions (min/max dates, min/max days)
12
- * - Multiple date formats
13
- * - Tooltip support showing number of nights
14
- * - Auto-apply or manual confirmation
15
- */
16
3
  declare const meta: Meta<typeof RangepickerInput>;
17
4
  export default meta;
18
5
  type Story = StoryObj<typeof RangepickerInput>;
19
- /**
20
- * Default state with no pre-selected dates.
21
- * Shows the basic usage with standard configuration.
22
- */
23
6
  export declare const Default: Story;
24
- /**
25
- * Desktop variant with 2 columns showing months side by side.
26
- * Best for larger screens and quick date range selection.
27
- */
28
- export declare const Desktop: Story;
29
- /**
30
- * Mobile variant with stacked calendar display.
31
- * Optimized for smaller screens and touch interactions.
32
- */
33
7
  export declare const Mobile: Story;
34
- /**
35
- * Pre-selected date range.
36
- * Useful for editing existing bookings or showing current selection.
37
- */
38
- export declare const WithPreselectedDates: Story;
39
- /**
40
- * Custom brand colors for theming.
41
- * Primary color is used for selected dates, secondary for hover states.
42
- */
43
- export declare const CustomColors: Story;
44
- /**
45
- * Date restrictions with minimum and maximum selectable dates.
46
- * Prevents users from selecting dates outside the allowed range.
47
- */
48
- export declare const WithDateRestrictions: Story;
49
- /**
50
- * Minimum and maximum stay duration restrictions.
51
- * Enforces booking rules like "minimum 3 nights" or "maximum 14 nights".
52
- */
53
- export declare const WithStayDurationLimits: Story;
54
- /**
55
- * Different date format (YYYY-MM-DD).
56
- * Useful for backend integration or regional preferences.
57
- */
58
- export declare const CustomDateFormat: Story;
59
- /**
60
- * Manual apply mode - requires user to click apply button.
61
- * Gives users a chance to review their selection before confirming.
62
- */
63
- export declare const ManualApply: Story;
64
- /**
65
- * Compact single column layout.
66
- * Saves space while still providing full functionality.
67
- */
68
- export declare const SingleColumn: Story;
69
- /**
70
- * Without tooltip display.
71
- * Cleaner interface when night count is not needed.
72
- */
73
- export declare const WithoutTooltip: Story;
8
+ export declare const CustomBlueColor: Story;
9
+ export declare const CustomPurpleColor: Story;
10
+ export declare const CustomRedColor: Story;
11
+ export declare const CustomGreenColor: Story;
12
+ export declare const CustomOrangeColor: Story;
13
+ export declare const CustomPinkColor: Story;
74
14
  //# sourceMappingURL=RangepickerInput.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RangepickerInput.stories.d.ts","sourceRoot":"","sources":["../src/RangepickerInput.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAItD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAoHvC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,KAKpB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAelC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAsBlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,KAmBpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAiB9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAkBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAiB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC"}
1
+ {"version":3,"file":"RangepickerInput.stories.d.ts","sourceRoot":"","sources":["../src/RangepickerInput.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CA4EvC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/C,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,MAAM,EAAE,KAIpB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAK9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAK7B,CAAC"}