@wernfried/daterangepicker 5.4.9 → 5.5.1

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/API_Doc.md CHANGED
@@ -13,7 +13,7 @@
13
13
  <dt><a href="#daterangepicker">daterangepicker(element, options, callback)</a> ⇒ <code><a href="#DateRangePicker">DateRangePicker</a></code> | <code><a href="#DateRangePicker">Array.&lt;DateRangePicker&gt;</a></code></dt>
14
14
  <dd><p>Initiate a new DateRangePicker</p>
15
15
  </dd>
16
- <dt><a href="#getDateRangePicker">getDateRangePicker(target)</a> ⇒ <code><a href="#DateRangePicker">DateRangePicker</a></code></dt>
16
+ <dt><a href="#getDateRangePicker">getDateRangePicker(element)</a> ⇒ <code><a href="#DateRangePicker">DateRangePicker</a></code></dt>
17
17
  <dd><p>Returns the DateRangePicker. Equivalent to <code>element._daterangepicker</code></p>
18
18
  </dd>
19
19
  </dl>
@@ -118,6 +118,7 @@ Ranges are not validated against <code>minDate</code>, <code>maxDate</code>, <co
118
118
  * [.updateAltInput()](#DateRangePicker+updateAltInput)
119
119
  * [.remove()](#DateRangePicker+remove)
120
120
  * [.triggerEvent(ev, ...args)](#DateRangePicker+triggerEvent)
121
+ * [.addEventListener(type, listener, [options])](#DateRangePicker+addEventListener)
121
122
 
122
123
  <a name="new_DateRangePicker_new"></a>
123
124
 
@@ -359,6 +360,26 @@ Helper function to dispatch events
359
360
  | ev | <code>object</code> | Event template from this.#events |
360
361
  | ...args | <code>object</code> | Additional parameters if needed |
361
362
 
363
+ <a name="DateRangePicker+addEventListener"></a>
364
+
365
+ ### dateRangePicker.addEventListener(type, listener, [options])
366
+ Adds an event listener to the anchor element (e.g., `<input>`) the DateRangePicker is attached to.
367
+ This allows external code to subscribe to native DOM events such as 'click', 'focus', 'keyup', etc.
368
+
369
+ **Kind**: instance method of [<code>DateRangePicker</code>](#DateRangePicker)
370
+
371
+ | Param | Type | Description |
372
+ | --- | --- | --- |
373
+ | type | <code>string</code> | The event name (e.g., 'click', 'focus', 'keyup') |
374
+ | listener | <code>function</code> | The callback function invoked when the event fires |
375
+ | [options] | <code>boolean</code> \| <code>object</code> | Optional event options: - `boolean capture`: Whether to listen in the capture phase (default: `false`) - `object signal`: An `AbortSignal` for later removal of the listener (default: `undefined`) |
376
+
377
+ **Example**
378
+ ```js
379
+ daterangepicker.addEventListener('click', (e) => {
380
+ console.log('Picker element was clicked', e);
381
+ });
382
+ ```
362
383
  <a name="DateRangePickerEvent"></a>
363
384
 
364
385
  ## DateRangePickerEvent ⇐ <code>Event</code>
@@ -380,7 +401,7 @@ Initiate a new DateRangePicker
380
401
 
381
402
  <a name="getDateRangePicker"></a>
382
403
 
383
- ## getDateRangePicker(target) ⇒ [<code>DateRangePicker</code>](#DateRangePicker)
404
+ ## getDateRangePicker(element) ⇒ [<code>DateRangePicker</code>](#DateRangePicker)
384
405
  Returns the DateRangePicker. Equivalent to `element._daterangepicker`
385
406
 
386
407
  **Kind**: global function
@@ -388,7 +409,7 @@ Returns the DateRangePicker. Equivalent to `element._daterangepicker`
388
409
 
389
410
  | Param | Type | Description |
390
411
  | --- | --- | --- |
391
- | target | <code>HTMLElement</code> \| <code>string</code> | The HTMLElement or querySelector string where the DateRangePicker is attached. |
412
+ | element | <code>HTMLElement</code> \| <code>string</code> | The HTMLElement or querySelector string where the DateRangePicker is attached. |
392
413
 
393
414
  <a name="event_violate"></a>
394
415
 
@@ -653,6 +674,7 @@ Options for DateRangePicker
653
674
  | showISOWeekNumbers | <code>boolean</code> | <code>false</code> | Show **ISO** week numbers at the start of each week on the calendars.<br> Takes precedence over localized `showWeekNumbers` |
654
675
  | button | <code>string</code> \| [<code>HTMLButtonElement</code>](https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement) | <code>null</code> | A dedicated element to show the DateRangePicker on click.<br> Main reason of this option is to prevent hide/flicker of the picker on `outsideClick()` |
655
676
  | showOnClick | <code>boolean</code> | <code>true</code> | Shows/toggle the DateRangePicker on click or focus at `element`.<br> You may want to set it to `false` only when option `button` is provided or when you use `show()` programmatically. |
677
+ | stopPropagation | <code>boolean</code> | <code>true</code> | Set this option to `false` if you want to listen on DOM-Events outside this instance. |
656
678
  | timePicker | <code>boolean</code> | <code>false</code> | Adds select boxes to choose times in addition to dates |
657
679
  | timePicker24Hour | <code>boolean</code> | | Use 24-hour instead of 12-hour times, removing the AM/PM selection.<br> Default is derived from current locale [Intl.DateTimeFormat.resolvedOptions.hour12](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions#hour12). |
658
680
  | timePickerStepSize | [<code>Duration</code>](https://moment.github.io/luxon/api-docs/index.html#duration) \| <code>string</code> \| <code>number</code> | | Default: `Duration.fromObject({minutes:1})`<br>Set the time picker step size.<br> Must be a `luxon.Duration` or the number of seconds or a string according to [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) duration.<br> Valid values are 1,2,3,4,5,6,10,12,15,20,30 for `Duration.fromObject({seconds: ...})` and `Duration.fromObject({minutes: ...})` and 1,2,3,4,6,(8,12) for `Duration.fromObject({hours: ...})`.<br> Duration must be greater than `minSpan` and smaller than `maxSpan`.<br> For example `timePickerStepSize: 600` will disable time picker seconds and time picker minutes are set to step size of 10 Minutes. |
package/README.md CHANGED
@@ -19,8 +19,8 @@ Above samples are based on the [original repository](https://github.com/dangross
19
19
  #### Global import with `<script>` tags
20
20
  ```html
21
21
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/luxon@3.5.0/build/global/luxon.min.js"></script>
22
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/dist/global/daterangepicker.min.js"></script>
23
- <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/css/daterangepicker.min.css" rel="stylesheet" />
22
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/dist/global/daterangepicker.min.js"></script>
23
+ <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/css/daterangepicker.min.css" rel="stylesheet" />
24
24
 
25
25
  <input type="text" id="picker" />
26
26
 
@@ -40,11 +40,11 @@ Above samples are based on the [original repository](https://github.com/dangross
40
40
  {
41
41
  "imports": {
42
42
  "luxon": "https://cdn.jsdelivr.net/npm/luxon@3.7.2/+esm",
43
- "daterangepicker": "https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/+esm"
43
+ "daterangepicker": "https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/+esm"
44
44
  }
45
45
  }
46
46
  </script>
47
- <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/css/daterangepicker.min.css" rel="stylesheet" />
47
+ <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/css/daterangepicker.min.css" rel="stylesheet" />
48
48
 
49
49
  <input type="text" id="picker" />
50
50
 
@@ -63,9 +63,9 @@ Above samples are based on the [original repository](https://github.com/dangross
63
63
  #### Style with Bulma
64
64
  ```html
65
65
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/luxon@3.5.0/build/global/luxon.min.js"></script>
66
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/dist/global/daterangepicker.min.js"></script>
66
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/dist/global/daterangepicker.min.js"></script>
67
67
  <link type="text/css" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" rel="stylesheet" />
68
- <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/css/daterangepicker.bulma.min.css" rel="stylesheet" />
68
+ <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/css/daterangepicker.bulma.min.css" rel="stylesheet" />
69
69
 
70
70
  <input type="text" id="picker" />
71
71
 
@@ -121,8 +121,8 @@ Initialisation with jQuery is supported in version 5.x
121
121
  ```html
122
122
  <script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
123
123
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/luxon@3.5.0/build/global/luxon.min.js"></script>
124
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/dist/global/daterangepicker.min.js"></script>
125
- <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.4.9/css/daterangepicker.min.css" rel="stylesheet" />
124
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/dist/global/daterangepicker.min.js"></script>
125
+ <link type="text/css" href="https://cdn.jsdelivr.net/npm/@wernfried/daterangepicker@5.5.1/css/daterangepicker.min.css" rel="stylesheet" />
126
126
 
127
127
  <input type="text" id="picker" />
128
128
 
@@ -366,6 +366,7 @@ Options for DateRangePicker
366
366
  | showISOWeekNumbers | <code>boolean</code> | <code>false</code> | Show **ISO** week numbers at the start of each week on the calendars.<br> Takes precedence over localized `showWeekNumbers` |
367
367
  | button | <code>string</code> \| [<code>HTMLButtonElement</code>](https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement) | <code>null</code> | A dedicated element to show the DateRangePicker on click.<br> Main reason of this option is to prevent hide/flicker of the picker on `outsideClick()` |
368
368
  | showOnClick | <code>boolean</code> | <code>true</code> | Shows/toggle the DateRangePicker on click or focus at `element`.<br> You may want to set it to `false` only when option `button` is provided or when you use `show()` programmatically. |
369
+ | stopPropagation | <code>boolean</code> | <code>true</code> | Set this option to `false` if you want to listen on DOM-Events outside this instance. |
369
370
  | timePicker | <code>boolean</code> | <code>false</code> | Adds select boxes to choose times in addition to dates |
370
371
  | timePicker24Hour | <code>boolean</code> | | Use 24-hour instead of 12-hour times, removing the AM/PM selection.<br> Default is derived from current locale [Intl.DateTimeFormat.resolvedOptions.hour12](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions#hour12). |
371
372
  | timePickerStepSize | [<code>Duration</code>](https://moment.github.io/luxon/api-docs/index.html#duration) \| <code>string</code> \| <code>number</code> | | Default: `Duration.fromObject({minutes:1})`<br>Set the time picker step size.<br> Must be a `luxon.Duration` or the number of seconds or a string according to [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) duration.<br> Valid values are 1,2,3,4,5,6,10,12,15,20,30 for `Duration.fromObject({seconds: ...})` and `Duration.fromObject({minutes: ...})` and 1,2,3,4,6,(8,12) for `Duration.fromObject({hours: ...})`.<br> Duration must be greater than `minSpan` and smaller than `maxSpan`.<br> For example `timePickerStepSize: 600` will disable time picker seconds and time picker minutes are set to step size of 10 Minutes. |
@@ -40,6 +40,7 @@ class DateRangePicker {
40
40
  this.isInvalidTime = null;
41
41
  this.isCustomDate = null;
42
42
  this.onOutsideClick = "apply";
43
+ this.stopPropagation = true;
43
44
  this.opens = this.element?.classList.contains("pull-right") ? "left" : "right";
44
45
  this.drops = this.element?.classList.contains("dropup") ? "up" : "down";
45
46
  this.buttonClasses = "btn btn-sm";
@@ -221,7 +222,8 @@ class DateRangePicker {
221
222
  "autoApply",
222
223
  "autoUpdateInput",
223
224
  "showLabel",
224
- "showOnClick"
225
+ "showOnClick",
226
+ "stopPropagation"
225
227
  ]) {
226
228
  if (typeof options[key2] === "boolean")
227
229
  this[key2] = options[key2];
@@ -2320,14 +2322,37 @@ class DateRangePicker {
2320
2322
  * @private
2321
2323
  */
2322
2324
  addListener(element, eventName, selector, delegate) {
2325
+ const stopPropagation = this.stopPropagation;
2323
2326
  this.container.querySelectorAll(element).forEach((el) => {
2324
2327
  el.addEventListener(eventName, function(event) {
2325
2328
  const target = event.target.closest(selector);
2326
- if (target && el.contains(target))
2329
+ if (target && el.contains(target)) {
2330
+ if (stopPropagation)
2331
+ event.stopPropagation();
2327
2332
  delegate.call(target, event);
2333
+ }
2328
2334
  });
2329
2335
  });
2330
2336
  }
2337
+ /**
2338
+ * Adds an event listener to the anchor element (e.g., `<input>`) the DateRangePicker is attached to.
2339
+ * This allows external code to subscribe to native DOM events such as 'click', 'focus', 'keyup', etc.
2340
+ *
2341
+ * @param {string} type - The event name (e.g., 'click', 'focus', 'keyup')
2342
+ * @param {function} listener - The callback function invoked when the event fires
2343
+ * @param {boolean|object} [options] - Optional event options:
2344
+ * - `boolean capture`: Whether to listen in the capture phase (default: `false`)
2345
+ * - `object signal`: An `AbortSignal` for later removal of the listener (default: `undefined`)
2346
+ *
2347
+ * @example
2348
+ * daterangepicker.addEventListener('click', (e) => {
2349
+ * console.log('Picker element was clicked', e);
2350
+ * });
2351
+ *
2352
+ */
2353
+ addEventListener(type, listener, options) {
2354
+ this.element.addEventListener(type, listener, options);
2355
+ }
2331
2356
  }
2332
2357
  function createElementFromHTML(html) {
2333
2358
  const template = document.createElement("template");
@@ -2373,13 +2398,15 @@ function outerHeight(el, withMargin = false) {
2373
2398
  }
2374
2399
  function daterangepicker(element, options, callback) {
2375
2400
  if (element instanceof HTMLElement) {
2376
- return new DateRangePicker(element, options || {}, callback);
2377
- } else if (elements instanceof NodeList || element instanceof HTMLCollection) {
2401
+ element._daterangepicker = new DateRangePicker(element, options || {}, callback);
2402
+ return element._daterangepicker;
2403
+ } else if (element instanceof NodeList || element instanceof HTMLCollection) {
2378
2404
  const ret = [];
2379
2405
  for (const el of Array.from(element)) {
2380
2406
  if (el._daterangepicker && typeof el._daterangepicker.remove === "function")
2381
2407
  el._daterangepicker.remove();
2382
- ret.push(new DateRangePicker(el, options || {}, callback));
2408
+ el._daterangepicker = new DateRangePicker(el, options || {}, callback);
2409
+ ret.push(el._daterangepicker);
2383
2410
  }
2384
2411
  return ret;
2385
2412
  } else if (typeof element === "string") {
@@ -2388,22 +2415,29 @@ function daterangepicker(element, options, callback) {
2388
2415
  for (const el of Array.from(document.querySelectorAll(element))) {
2389
2416
  if (el._daterangepicker && typeof el._daterangepicker.remove === "function")
2390
2417
  el._daterangepicker.remove();
2391
- ret.push(new DateRangePicker(el, options || {}, callback));
2418
+ el._daterangepicker = new DateRangePicker(el, options || {}, callback);
2419
+ ret.push(el._daterangepicker);
2392
2420
  }
2393
2421
  return ret;
2394
2422
  } else if (document.querySelectorAll(element).length === 1) {
2395
- return new DateRangePicker(element, options || {}, callback);
2423
+ const picker = new DateRangePicker(element, options || {}, callback);
2424
+ document.querySelector(element)._daterangepicker = picker;
2425
+ return picker;
2396
2426
  } else {
2397
- return null;
2427
+ return void 0;
2398
2428
  }
2429
+ } else if (element == null) {
2430
+ return new DateRangePicker(element, options || {}, callback);
2399
2431
  } else {
2400
- return null;
2432
+ return void 0;
2401
2433
  }
2402
2434
  }
2403
- function getDateRangePicker(target) {
2404
- if (typeof target === "string")
2405
- target = document.querySelector(target);
2406
- return target instanceof HTMLElement ? target._daterangepicker : void 0;
2435
+ function getDateRangePicker(element) {
2436
+ if (typeof element === "string") {
2437
+ return document.querySelector(element)._daterangepicker;
2438
+ } else {
2439
+ return element instanceof HTMLElement ? element._daterangepicker : void 0;
2440
+ }
2407
2441
  }
2408
2442
  if (window.jQuery?.fn) {
2409
2443
  jQuery.fn.daterangepicker = function(options, callback) {