@archpublicwebsite/rangepicker 1.0.13 → 1.0.18
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 +47 -0
- package/dist/Rangepicker.vue.d.ts.map +1 -1
- package/dist/RangepickerConstraints.stories.d.ts +34 -0
- package/dist/RangepickerConstraints.stories.d.ts.map +1 -0
- package/dist/RangepickerConstraints.stories.js +301 -0
- package/dist/RangepickerFormatting.stories.d.ts +42 -0
- package/dist/RangepickerFormatting.stories.d.ts.map +1 -0
- package/dist/RangepickerFormatting.stories.js +352 -0
- package/dist/RangepickerInput.stories.d.ts +42 -6
- package/dist/RangepickerInput.stories.d.ts.map +1 -1
- package/dist/RangepickerInput.stories.js +148 -47
- package/dist/RangepickerInput.vue.d.ts +1 -0
- package/dist/RangepickerInput.vue.d.ts.map +1 -1
- package/dist/RangepickerModes.stories.d.ts +35 -0
- package/dist/RangepickerModes.stories.d.ts.map +1 -0
- package/dist/RangepickerModes.stories.js +238 -0
- package/dist/RangepickerSpecialDates.stories.d.ts +31 -0
- package/dist/RangepickerSpecialDates.stories.d.ts.map +1 -0
- package/dist/RangepickerSpecialDates.stories.js +302 -0
- package/dist/RangepickerTheming.stories.d.ts +54 -0
- package/dist/RangepickerTheming.stories.d.ts.map +1 -0
- package/dist/RangepickerTheming.stories.js +379 -0
- package/dist/rangepicker.js +31 -32
- package/dist/rangepicker.js.map +1 -1
- package/dist/rangepicker.umd.cjs +1 -1
- package/dist/rangepicker.umd.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +4 -8
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { ref, watch } from "vue";
|
|
2
|
+
import RangepickerInput from "./RangepickerInput.vue";
|
|
3
|
+
/**
|
|
4
|
+
* Stories demonstrating formatting and display options
|
|
5
|
+
* for the Rangepicker component.
|
|
6
|
+
*/
|
|
7
|
+
const meta = {
|
|
8
|
+
title: "Components/Rangepicker/Formatting",
|
|
9
|
+
component: RangepickerInput,
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
parameters: {
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: `
|
|
15
|
+
## Formatting
|
|
16
|
+
|
|
17
|
+
Configure how dates are displayed in the input field and calendar.
|
|
18
|
+
The component uses [dayjs](https://day.js.org/docs/en/display/format) format tokens.
|
|
19
|
+
|
|
20
|
+
### Common Format Tokens
|
|
21
|
+
|
|
22
|
+
| Token | Output | Description |
|
|
23
|
+
|-------|--------|-------------|
|
|
24
|
+
| \`DD\` | 01-31 | Day of month (2 digits) |
|
|
25
|
+
| \`D\` | 1-31 | Day of month |
|
|
26
|
+
| \`MMM\` | Jan-Dec | Month abbreviation |
|
|
27
|
+
| \`MMMM\` | January-December | Full month name |
|
|
28
|
+
| \`MM\` | 01-12 | Month (2 digits) |
|
|
29
|
+
| \`YYYY\` | 2026 | 4-digit year |
|
|
30
|
+
| \`YY\` | 26 | 2-digit year |
|
|
31
|
+
`,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
argTypes: {
|
|
36
|
+
placeholder: {
|
|
37
|
+
control: "text",
|
|
38
|
+
description: "Placeholder text shown when no date is selected",
|
|
39
|
+
table: {
|
|
40
|
+
type: { summary: "string" },
|
|
41
|
+
defaultValue: { summary: "Select dates" },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
options: {
|
|
45
|
+
control: "object",
|
|
46
|
+
description: "Configuration options including format settings",
|
|
47
|
+
},
|
|
48
|
+
variant: {
|
|
49
|
+
control: "select",
|
|
50
|
+
options: ["desktop", "mobile"],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
args: {
|
|
54
|
+
id: "dates",
|
|
55
|
+
name: "dates",
|
|
56
|
+
variant: "desktop",
|
|
57
|
+
},
|
|
58
|
+
render: (args) => ({
|
|
59
|
+
components: { RangepickerInput },
|
|
60
|
+
setup() {
|
|
61
|
+
const modelValue = ref(args.modelValue ?? "");
|
|
62
|
+
watch(() => args.modelValue, (value) => {
|
|
63
|
+
const nextValue = value ?? "";
|
|
64
|
+
if (nextValue !== modelValue.value) {
|
|
65
|
+
modelValue.value = nextValue;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return { args, modelValue };
|
|
69
|
+
},
|
|
70
|
+
template: `
|
|
71
|
+
<div style="padding: 2rem; background: #f5f5f5; min-height: 400px;">
|
|
72
|
+
<RangepickerInput v-bind="args" v-model="modelValue" class="form-control mb-0 shadow-none text-black lg:pl-2 border-0 w-full" />
|
|
73
|
+
</div>
|
|
74
|
+
`
|
|
75
|
+
})
|
|
76
|
+
};
|
|
77
|
+
export default meta;
|
|
78
|
+
/**
|
|
79
|
+
* Default format: DD MMM YYYY (e.g., "26 Jan 2026")
|
|
80
|
+
*/
|
|
81
|
+
export const DefaultFormat = {
|
|
82
|
+
args: {
|
|
83
|
+
placeholder: "Check in / Check out",
|
|
84
|
+
options: {
|
|
85
|
+
autoApply: true,
|
|
86
|
+
minDate: new Date(),
|
|
87
|
+
format: 'DD MMM YYYY',
|
|
88
|
+
numberOfColumns: 2,
|
|
89
|
+
numberOfMonths: 2,
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
parameters: {
|
|
93
|
+
docs: {
|
|
94
|
+
description: {
|
|
95
|
+
story: `
|
|
96
|
+
### Default Format
|
|
97
|
+
|
|
98
|
+
The default date format: \`DD MMM YYYY\`
|
|
99
|
+
|
|
100
|
+
**Output**: \`26 Jan 2026 - 30 Jan 2026\`
|
|
101
|
+
|
|
102
|
+
\`\`\`typescript
|
|
103
|
+
options: {
|
|
104
|
+
format: 'DD MMM YYYY'
|
|
105
|
+
}
|
|
106
|
+
\`\`\`
|
|
107
|
+
`,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* ISO format: YYYY-MM-DD (e.g., "2026-01-26")
|
|
114
|
+
*/
|
|
115
|
+
export const ISOFormat = {
|
|
116
|
+
args: {
|
|
117
|
+
placeholder: "Select dates (ISO format)",
|
|
118
|
+
options: {
|
|
119
|
+
autoApply: true,
|
|
120
|
+
minDate: new Date(),
|
|
121
|
+
format: 'YYYY-MM-DD',
|
|
122
|
+
numberOfColumns: 2,
|
|
123
|
+
numberOfMonths: 2,
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
parameters: {
|
|
127
|
+
docs: {
|
|
128
|
+
description: {
|
|
129
|
+
story: `
|
|
130
|
+
### ISO Format
|
|
131
|
+
|
|
132
|
+
Standard ISO date format: \`YYYY-MM-DD\`
|
|
133
|
+
|
|
134
|
+
**Output**: \`2026-01-26 - 2026-01-30\`
|
|
135
|
+
|
|
136
|
+
Useful for APIs and databases that expect ISO format.
|
|
137
|
+
|
|
138
|
+
\`\`\`typescript
|
|
139
|
+
options: {
|
|
140
|
+
format: 'YYYY-MM-DD'
|
|
141
|
+
}
|
|
142
|
+
\`\`\`
|
|
143
|
+
`,
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* US format: MM/DD/YYYY (e.g., "01/26/2026")
|
|
150
|
+
*/
|
|
151
|
+
export const USFormat = {
|
|
152
|
+
args: {
|
|
153
|
+
placeholder: "Select dates (US format)",
|
|
154
|
+
options: {
|
|
155
|
+
autoApply: true,
|
|
156
|
+
minDate: new Date(),
|
|
157
|
+
format: 'MM/DD/YYYY',
|
|
158
|
+
numberOfColumns: 2,
|
|
159
|
+
numberOfMonths: 2,
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
parameters: {
|
|
163
|
+
docs: {
|
|
164
|
+
description: {
|
|
165
|
+
story: `
|
|
166
|
+
### US Format
|
|
167
|
+
|
|
168
|
+
American date format: \`MM/DD/YYYY\`
|
|
169
|
+
|
|
170
|
+
**Output**: \`01/26/2026 - 01/30/2026\`
|
|
171
|
+
|
|
172
|
+
\`\`\`typescript
|
|
173
|
+
options: {
|
|
174
|
+
format: 'MM/DD/YYYY'
|
|
175
|
+
}
|
|
176
|
+
\`\`\`
|
|
177
|
+
`,
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* European format: DD/MM/YYYY (e.g., "26/01/2026")
|
|
184
|
+
*/
|
|
185
|
+
export const EuropeanFormat = {
|
|
186
|
+
args: {
|
|
187
|
+
placeholder: "Select dates (EU format)",
|
|
188
|
+
options: {
|
|
189
|
+
autoApply: true,
|
|
190
|
+
minDate: new Date(),
|
|
191
|
+
format: 'DD/MM/YYYY',
|
|
192
|
+
numberOfColumns: 2,
|
|
193
|
+
numberOfMonths: 2,
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
parameters: {
|
|
197
|
+
docs: {
|
|
198
|
+
description: {
|
|
199
|
+
story: `
|
|
200
|
+
### European Format
|
|
201
|
+
|
|
202
|
+
European date format: \`DD/MM/YYYY\`
|
|
203
|
+
|
|
204
|
+
**Output**: \`26/01/2026 - 30/01/2026\`
|
|
205
|
+
|
|
206
|
+
\`\`\`typescript
|
|
207
|
+
options: {
|
|
208
|
+
format: 'DD/MM/YYYY'
|
|
209
|
+
}
|
|
210
|
+
\`\`\`
|
|
211
|
+
`,
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Full month name format: D MMMM YYYY (e.g., "26 January 2026")
|
|
218
|
+
*/
|
|
219
|
+
export const FullMonthFormat = {
|
|
220
|
+
args: {
|
|
221
|
+
placeholder: "Select dates",
|
|
222
|
+
options: {
|
|
223
|
+
autoApply: true,
|
|
224
|
+
minDate: new Date(),
|
|
225
|
+
format: 'D MMMM YYYY',
|
|
226
|
+
numberOfColumns: 2,
|
|
227
|
+
numberOfMonths: 2,
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
parameters: {
|
|
231
|
+
docs: {
|
|
232
|
+
description: {
|
|
233
|
+
story: `
|
|
234
|
+
### Full Month Name
|
|
235
|
+
|
|
236
|
+
Display full month name: \`D MMMM YYYY\`
|
|
237
|
+
|
|
238
|
+
**Output**: \`26 January 2026 - 30 January 2026\`
|
|
239
|
+
|
|
240
|
+
\`\`\`typescript
|
|
241
|
+
options: {
|
|
242
|
+
format: 'D MMMM YYYY'
|
|
243
|
+
}
|
|
244
|
+
\`\`\`
|
|
245
|
+
`,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
/**
|
|
251
|
+
* Short format without year: DD MMM (e.g., "26 Jan")
|
|
252
|
+
*/
|
|
253
|
+
export const ShortFormat = {
|
|
254
|
+
args: {
|
|
255
|
+
placeholder: "Select dates",
|
|
256
|
+
options: {
|
|
257
|
+
autoApply: true,
|
|
258
|
+
minDate: new Date(),
|
|
259
|
+
format: 'DD MMM',
|
|
260
|
+
numberOfColumns: 2,
|
|
261
|
+
numberOfMonths: 2,
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
parameters: {
|
|
265
|
+
docs: {
|
|
266
|
+
description: {
|
|
267
|
+
story: `
|
|
268
|
+
### Short Format (No Year)
|
|
269
|
+
|
|
270
|
+
Compact format without year: \`DD MMM\`
|
|
271
|
+
|
|
272
|
+
**Output**: \`26 Jan - 30 Jan\`
|
|
273
|
+
|
|
274
|
+
Useful for short-term bookings where the year is implied.
|
|
275
|
+
|
|
276
|
+
\`\`\`typescript
|
|
277
|
+
options: {
|
|
278
|
+
format: 'DD MMM'
|
|
279
|
+
}
|
|
280
|
+
\`\`\`
|
|
281
|
+
`,
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
/**
|
|
287
|
+
* Custom placeholder text
|
|
288
|
+
*/
|
|
289
|
+
export const CustomPlaceholder = {
|
|
290
|
+
args: {
|
|
291
|
+
placeholder: "When are you traveling?",
|
|
292
|
+
options: {
|
|
293
|
+
autoApply: true,
|
|
294
|
+
minDate: new Date(),
|
|
295
|
+
format: 'DD MMM YYYY',
|
|
296
|
+
numberOfColumns: 2,
|
|
297
|
+
numberOfMonths: 2,
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
parameters: {
|
|
301
|
+
docs: {
|
|
302
|
+
description: {
|
|
303
|
+
story: `
|
|
304
|
+
### Custom Placeholder
|
|
305
|
+
|
|
306
|
+
Set a custom placeholder text for the input field.
|
|
307
|
+
|
|
308
|
+
- **Type**: \`string\`
|
|
309
|
+
- **Default**: \`'Select dates'\`
|
|
310
|
+
|
|
311
|
+
\`\`\`vue
|
|
312
|
+
<RangepickerInput placeholder="When are you traveling?" />
|
|
313
|
+
\`\`\`
|
|
314
|
+
`,
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* Booking-style placeholder
|
|
321
|
+
*/
|
|
322
|
+
export const BookingPlaceholder = {
|
|
323
|
+
args: {
|
|
324
|
+
placeholder: "Check-in → Check-out",
|
|
325
|
+
options: {
|
|
326
|
+
autoApply: true,
|
|
327
|
+
minDate: new Date(),
|
|
328
|
+
format: 'ddd, DD MMM',
|
|
329
|
+
numberOfColumns: 2,
|
|
330
|
+
numberOfMonths: 2,
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
parameters: {
|
|
334
|
+
docs: {
|
|
335
|
+
description: {
|
|
336
|
+
story: `
|
|
337
|
+
### Booking Style
|
|
338
|
+
|
|
339
|
+
Format with day of week: \`ddd, DD MMM\`
|
|
340
|
+
|
|
341
|
+
**Output**: \`Sun, 26 Jan - Thu, 30 Jan\`
|
|
342
|
+
|
|
343
|
+
\`\`\`typescript
|
|
344
|
+
options: {
|
|
345
|
+
format: 'ddd, DD MMM'
|
|
346
|
+
}
|
|
347
|
+
\`\`\`
|
|
348
|
+
`,
|
|
349
|
+
},
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
};
|
|
@@ -1,14 +1,50 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/vue3";
|
|
2
2
|
import RangepickerInput from "./RangepickerInput.vue";
|
|
3
|
+
/**
|
|
4
|
+
* # Rangepicker
|
|
5
|
+
*
|
|
6
|
+
* A flexible date range picker component for Vue 3 applications.
|
|
7
|
+
*
|
|
8
|
+
* ## Features
|
|
9
|
+
*
|
|
10
|
+
* - 📅 Date range selection with visual calendar
|
|
11
|
+
* - 📱 Responsive design (desktop dropdown / mobile bottom sheet)
|
|
12
|
+
* - 🎨 Customizable colors via props
|
|
13
|
+
* - 🔒 Date constraints (min/max dates, min/max days)
|
|
14
|
+
* - 🎯 Holiday and disabled dates support
|
|
15
|
+
* - 🌍 Flexible date formatting via dayjs
|
|
16
|
+
*
|
|
17
|
+
* ## Quick Start
|
|
18
|
+
*
|
|
19
|
+
* ```vue
|
|
20
|
+
* <template>
|
|
21
|
+
* <RangepickerInput
|
|
22
|
+
* v-model="dates"
|
|
23
|
+
* placeholder="Check in / Check out"
|
|
24
|
+
* :options="{ minDate: new Date(), format: 'DD MMM YYYY' }"
|
|
25
|
+
* />
|
|
26
|
+
* </template>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* ## Props Documentation
|
|
30
|
+
*
|
|
31
|
+
* Explore the categorized stories in the sidebar:
|
|
32
|
+
* - **Modes** - Display variants and behavior modes
|
|
33
|
+
* - **Constraints** - Date limits and validation
|
|
34
|
+
* - **Formatting** - Date format patterns
|
|
35
|
+
* - **Theming** - Color customization
|
|
36
|
+
* - **Special Dates** - Holidays and disabled dates
|
|
37
|
+
*/
|
|
3
38
|
declare const meta: Meta<typeof RangepickerInput>;
|
|
4
39
|
export default meta;
|
|
5
40
|
type Story = StoryObj<typeof RangepickerInput>;
|
|
41
|
+
/**
|
|
42
|
+
* Default rangepicker with standard configuration.
|
|
43
|
+
* Click the input to open the calendar and select a date range.
|
|
44
|
+
*/
|
|
6
45
|
export declare const Default: Story;
|
|
46
|
+
/**
|
|
47
|
+
* Mobile variant displays the calendar as a bottom sheet overlay.
|
|
48
|
+
*/
|
|
7
49
|
export declare const Mobile: 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;
|
|
14
50
|
//# 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,iBAAiB,CAAC;AAEtD,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAyIvC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAmBrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,KAmBpB,CAAC"}
|
|
@@ -1,27 +1,123 @@
|
|
|
1
1
|
import { ref, watch } from "vue";
|
|
2
2
|
import RangepickerInput from "./RangepickerInput.vue";
|
|
3
|
+
/**
|
|
4
|
+
* # Rangepicker
|
|
5
|
+
*
|
|
6
|
+
* A flexible date range picker component for Vue 3 applications.
|
|
7
|
+
*
|
|
8
|
+
* ## Features
|
|
9
|
+
*
|
|
10
|
+
* - 📅 Date range selection with visual calendar
|
|
11
|
+
* - 📱 Responsive design (desktop dropdown / mobile bottom sheet)
|
|
12
|
+
* - 🎨 Customizable colors via props
|
|
13
|
+
* - 🔒 Date constraints (min/max dates, min/max days)
|
|
14
|
+
* - 🎯 Holiday and disabled dates support
|
|
15
|
+
* - 🌍 Flexible date formatting via dayjs
|
|
16
|
+
*
|
|
17
|
+
* ## Quick Start
|
|
18
|
+
*
|
|
19
|
+
* ```vue
|
|
20
|
+
* <template>
|
|
21
|
+
* <RangepickerInput
|
|
22
|
+
* v-model="dates"
|
|
23
|
+
* placeholder="Check in / Check out"
|
|
24
|
+
* :options="{ minDate: new Date(), format: 'DD MMM YYYY' }"
|
|
25
|
+
* />
|
|
26
|
+
* </template>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* ## Props Documentation
|
|
30
|
+
*
|
|
31
|
+
* Explore the categorized stories in the sidebar:
|
|
32
|
+
* - **Modes** - Display variants and behavior modes
|
|
33
|
+
* - **Constraints** - Date limits and validation
|
|
34
|
+
* - **Formatting** - Date format patterns
|
|
35
|
+
* - **Theming** - Color customization
|
|
36
|
+
* - **Special Dates** - Holidays and disabled dates
|
|
37
|
+
*/
|
|
3
38
|
const meta = {
|
|
4
|
-
title: "Components/Rangepicker",
|
|
39
|
+
title: "Components/Rangepicker/Overview",
|
|
5
40
|
component: RangepickerInput,
|
|
41
|
+
tags: ['autodocs'],
|
|
42
|
+
parameters: {
|
|
43
|
+
docs: {
|
|
44
|
+
description: {
|
|
45
|
+
component: `
|
|
46
|
+
A flexible date range picker component with responsive design,
|
|
47
|
+
customizable theming, and comprehensive date constraints.
|
|
48
|
+
|
|
49
|
+
See the **Props** categories in the sidebar for detailed documentation.
|
|
50
|
+
`,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
6
54
|
argTypes: {
|
|
7
55
|
modelValue: {
|
|
8
|
-
control: "text"
|
|
56
|
+
control: "text",
|
|
57
|
+
description: "Two-way binding for formatted date range string",
|
|
58
|
+
table: {
|
|
59
|
+
type: { summary: "string" },
|
|
60
|
+
defaultValue: { summary: '""' },
|
|
61
|
+
},
|
|
9
62
|
},
|
|
10
|
-
|
|
11
|
-
control: "
|
|
63
|
+
placeholder: {
|
|
64
|
+
control: "text",
|
|
65
|
+
description: "Placeholder text shown when no date is selected",
|
|
66
|
+
table: {
|
|
67
|
+
type: { summary: "string" },
|
|
68
|
+
defaultValue: { summary: "Select dates" },
|
|
69
|
+
},
|
|
12
70
|
},
|
|
13
71
|
variant: {
|
|
14
72
|
control: "select",
|
|
15
|
-
options: ["desktop", "mobile"]
|
|
73
|
+
options: ["desktop", "mobile"],
|
|
74
|
+
description: "Display variant - desktop shows dropdown, mobile shows bottom sheet",
|
|
75
|
+
table: {
|
|
76
|
+
type: { summary: "'desktop' | 'mobile'" },
|
|
77
|
+
defaultValue: { summary: "desktop" },
|
|
78
|
+
},
|
|
16
79
|
},
|
|
17
80
|
primaryColor: {
|
|
18
81
|
control: "color",
|
|
19
|
-
description: "Primary color for selected dates and highlights"
|
|
82
|
+
description: "Primary color for selected dates and highlights (HEX format)",
|
|
83
|
+
table: {
|
|
84
|
+
type: { summary: "string" },
|
|
85
|
+
},
|
|
20
86
|
},
|
|
21
87
|
secondaryColor: {
|
|
22
88
|
control: "color",
|
|
23
|
-
description: "Secondary color for hover states"
|
|
24
|
-
|
|
89
|
+
description: "Secondary color for hover states (HEX format)",
|
|
90
|
+
table: {
|
|
91
|
+
type: { summary: "string" },
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
options: {
|
|
95
|
+
control: "object",
|
|
96
|
+
description: "Configuration options for the rangepicker",
|
|
97
|
+
table: {
|
|
98
|
+
type: { summary: "LitepickerOptions" },
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
id: {
|
|
102
|
+
control: "text",
|
|
103
|
+
description: "HTML id attribute for the input",
|
|
104
|
+
},
|
|
105
|
+
name: {
|
|
106
|
+
control: "text",
|
|
107
|
+
description: "HTML name attribute for the input",
|
|
108
|
+
},
|
|
109
|
+
readonly: {
|
|
110
|
+
control: "boolean",
|
|
111
|
+
description: "Whether the input is readonly",
|
|
112
|
+
table: {
|
|
113
|
+
type: { summary: "boolean" },
|
|
114
|
+
defaultValue: { summary: "true" },
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
close: {
|
|
118
|
+
control: "boolean",
|
|
119
|
+
description: "Programmatic control to close the picker",
|
|
120
|
+
},
|
|
25
121
|
},
|
|
26
122
|
args: {
|
|
27
123
|
modelValue: "",
|
|
@@ -66,52 +162,57 @@ const meta = {
|
|
|
66
162
|
return { args, modelValue };
|
|
67
163
|
},
|
|
68
164
|
template: `
|
|
69
|
-
<div style="padding: 2rem; background: #f5f5f5; min-height:
|
|
165
|
+
<div style="padding: 2rem; background: #f5f5f5; min-height: 400px;">
|
|
70
166
|
<RangepickerInput v-bind="args" v-model="modelValue" class="form-control mb-0 shadow-none text-black lg:pl-2 border-0 w-full" />
|
|
71
167
|
</div>
|
|
72
168
|
`
|
|
73
169
|
})
|
|
74
170
|
};
|
|
75
171
|
export default meta;
|
|
76
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Default rangepicker with standard configuration.
|
|
174
|
+
* Click the input to open the calendar and select a date range.
|
|
175
|
+
*/
|
|
176
|
+
export const Default = {
|
|
177
|
+
parameters: {
|
|
178
|
+
docs: {
|
|
179
|
+
description: {
|
|
180
|
+
story: `
|
|
181
|
+
### Default Configuration
|
|
182
|
+
|
|
183
|
+
The default rangepicker setup with:
|
|
184
|
+
- Desktop variant (dropdown calendar)
|
|
185
|
+
- Auto-apply enabled
|
|
186
|
+
- 2-month view
|
|
187
|
+
- Format: DD MMM YYYY
|
|
188
|
+
- Min date: Today
|
|
189
|
+
|
|
190
|
+
Click the input field to open the calendar.
|
|
191
|
+
`,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Mobile variant displays the calendar as a bottom sheet overlay.
|
|
198
|
+
*/
|
|
77
199
|
export const Mobile = {
|
|
78
200
|
args: {
|
|
79
201
|
variant: "mobile"
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
primaryColor: "#ef4444",
|
|
97
|
-
secondaryColor: "#f87171"
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
export const CustomGreenColor = {
|
|
101
|
-
args: {
|
|
102
|
-
primaryColor: "#10b981",
|
|
103
|
-
secondaryColor: "#34d399"
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
export const CustomOrangeColor = {
|
|
107
|
-
args: {
|
|
108
|
-
primaryColor: "#f97316",
|
|
109
|
-
secondaryColor: "#fb923c"
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
export const CustomPinkColor = {
|
|
113
|
-
args: {
|
|
114
|
-
primaryColor: "#ec4899",
|
|
115
|
-
secondaryColor: "#f472b6"
|
|
116
|
-
}
|
|
202
|
+
},
|
|
203
|
+
parameters: {
|
|
204
|
+
docs: {
|
|
205
|
+
description: {
|
|
206
|
+
story: `
|
|
207
|
+
### Mobile Variant
|
|
208
|
+
|
|
209
|
+
Displays the calendar as a bottom sheet overlay, optimized for touch devices.
|
|
210
|
+
|
|
211
|
+
\`\`\`vue
|
|
212
|
+
<RangepickerInput variant="mobile" />
|
|
213
|
+
\`\`\`
|
|
214
|
+
`,
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
},
|
|
117
218
|
};
|
|
@@ -28,6 +28,7 @@ interface Props {
|
|
|
28
28
|
variant?: 'desktop' | 'mobile';
|
|
29
29
|
primaryColor?: string;
|
|
30
30
|
secondaryColor?: string;
|
|
31
|
+
fontFamily?: string;
|
|
31
32
|
}
|
|
32
33
|
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
33
34
|
"update:modelValue": (value: string) => any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RangepickerInput.vue.d.ts","sourceRoot":"","sources":["../src/RangepickerInput.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RangepickerInput.vue.d.ts","sourceRoot":"","sources":["../src/RangepickerInput.vue"],"names":[],"mappings":"AAqNA,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,GAAG,CAAA;IACjB,aAAa,CAAC,EAAE,GAAG,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,UAAU,KAAK;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;;;;;;;;aAJW,SAAS,GAAG,QAAQ;iBAJhB,MAAM;cACT,OAAO;;;;;AA6NpB,wBAUG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/vue3";
|
|
2
|
+
import RangepickerInput from "./RangepickerInput.vue";
|
|
3
|
+
/**
|
|
4
|
+
* Stories demonstrating different display modes and behaviors
|
|
5
|
+
* for the Rangepicker component.
|
|
6
|
+
*/
|
|
7
|
+
declare const meta: Meta<typeof RangepickerInput>;
|
|
8
|
+
export default meta;
|
|
9
|
+
type Story = StoryObj<typeof RangepickerInput>;
|
|
10
|
+
/**
|
|
11
|
+
* Desktop variant displays the calendar as a dropdown below the input field.
|
|
12
|
+
* Best for desktop/laptop screens with sufficient viewport space.
|
|
13
|
+
*/
|
|
14
|
+
export declare const DesktopVariant: Story;
|
|
15
|
+
/**
|
|
16
|
+
* Mobile variant displays the calendar as a bottom sheet overlay.
|
|
17
|
+
* Optimized for touch devices and smaller screens.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MobileVariant: Story;
|
|
20
|
+
/**
|
|
21
|
+
* Single date mode allows selecting only one date instead of a range.
|
|
22
|
+
* Useful for single date inputs like birth dates or event dates.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SingleMode: Story;
|
|
25
|
+
/**
|
|
26
|
+
* Auto Apply mode automatically confirms the selection when both dates are picked.
|
|
27
|
+
* No need to click an Apply/Confirm button.
|
|
28
|
+
*/
|
|
29
|
+
export declare const AutoApply: Story;
|
|
30
|
+
/**
|
|
31
|
+
* Manual Apply mode requires clicking an Apply button to confirm selection.
|
|
32
|
+
* Gives users a chance to review before confirming.
|
|
33
|
+
*/
|
|
34
|
+
export declare const ManualApply: Story;
|
|
35
|
+
//# sourceMappingURL=RangepickerModes.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangepickerModes.stories.d.ts","sourceRoot":"","sources":["../src/RangepickerModes.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD;;;GAGG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAuFvC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAoB5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAoB3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KA6BxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KA2BvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KA2BzB,CAAC"}
|