@aquera/nile-elements 0.0.96 → 0.0.97
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 +5 -0
- package/demo/filenames.txt +1 -1
- package/demo/variables.css +5 -0
- package/demo/variables_v2.css +3 -0
- package/dist/{angular-ts-a95c67aa.cjs.js → angular-ts-8eef275b.cjs.js} +2 -2
- package/dist/{angular-ts-a95c67aa.cjs.js.map → angular-ts-8eef275b.cjs.js.map} +1 -1
- package/dist/{asciidoc-b8046ce8.esm.js → asciidoc-45b24fbf.esm.js} +1 -1
- package/dist/{asciidoc-c0ae04c3.cjs.js → asciidoc-d9a554a9.cjs.js} +2 -2
- package/dist/{asciidoc-c0ae04c3.cjs.js.map → asciidoc-d9a554a9.cjs.js.map} +1 -1
- package/dist/coq-112048d4.cjs.js +2 -0
- package/dist/coq-112048d4.cjs.js.map +1 -0
- package/dist/coq-2b59f292.esm.js +1 -0
- package/dist/{edge-f122fee4.cjs.js → edge-117795ef.cjs.js} +2 -2
- package/dist/{edge-f122fee4.cjs.js.map → edge-117795ef.cjs.js.map} +1 -1
- package/dist/{fortran-fixed-form-48ce1631.cjs.js → fortran-fixed-form-04eb2c2b.cjs.js} +2 -2
- package/dist/{fortran-fixed-form-48ce1631.cjs.js.map → fortran-fixed-form-04eb2c2b.cjs.js.map} +1 -1
- package/dist/{fsharp-9f65d045.cjs.js → fsharp-b73adc59.cjs.js} +2 -2
- package/dist/{fsharp-9f65d045.cjs.js.map → fsharp-b73adc59.cjs.js.map} +1 -1
- package/dist/{gdresource-f69c4269.cjs.js → gdresource-165d80c9.cjs.js} +2 -2
- package/dist/{gdresource-f69c4269.cjs.js.map → gdresource-165d80c9.cjs.js.map} +1 -1
- package/dist/github-dark-high-contrast-7b0d7429.cjs.js +2 -0
- package/dist/github-dark-high-contrast-7b0d7429.cjs.js.map +1 -0
- package/dist/github-dark-high-contrast-bf87cfb0.esm.js +1 -0
- package/dist/github-light-high-contrast-3683d923.esm.js +1 -0
- package/dist/github-light-high-contrast-caee8ed6.cjs.js +2 -0
- package/dist/github-light-high-contrast-caee8ed6.cjs.js.map +1 -0
- package/dist/gleam-69ca4750.cjs.js +2 -0
- package/dist/gleam-69ca4750.cjs.js.map +1 -0
- package/dist/gleam-79f887fd.esm.js +1 -0
- package/dist/{haml-a62722ee.cjs.js → haml-bdfaf5bf.cjs.js} +2 -2
- package/dist/{haml-a62722ee.cjs.js.map → haml-bdfaf5bf.cjs.js.map} +1 -1
- package/dist/{http-243ce707.cjs.js → http-bdc26351.cjs.js} +2 -2
- package/dist/{http-243ce707.cjs.js.map → http-bdc26351.cjs.js.map} +1 -1
- package/dist/{hxml-36e954b2.cjs.js → hxml-ec409b05.cjs.js} +2 -2
- package/dist/{hxml-36e954b2.cjs.js.map → hxml-ec409b05.cjs.js.map} +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/{latex-1732805a.cjs.js → latex-13abd118.cjs.js} +2 -2
- package/dist/{latex-1732805a.cjs.js.map → latex-13abd118.cjs.js.map} +1 -1
- package/dist/{mdc-a3ab9285.cjs.js → mdc-31e30669.cjs.js} +2 -2
- package/dist/{mdc-a3ab9285.cjs.js.map → mdc-31e30669.cjs.js.map} +1 -1
- package/dist/nile-badge/index.cjs.js +1 -1
- package/dist/nile-badge/index.esm.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.esm.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.test.esm.js +1 -1
- package/dist/nile-button/index.cjs.js +1 -1
- package/dist/nile-button/index.esm.js +1 -1
- package/dist/nile-button/nile-button.cjs.js +1 -1
- package/dist/nile-button/nile-button.cjs.js.map +1 -1
- package/dist/nile-button/nile-button.esm.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js.map +1 -1
- package/dist/nile-button/nile-button.test.esm.js +1 -1
- package/dist/nile-calendar/index.cjs.js +1 -1
- package/dist/nile-calendar/index.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.esm.js +0 -5
- package/dist/nile-calendar/nile-calendar.esm.js +51 -53
- package/dist/nile-chip/nile-chip.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.esm.js +1 -1
- package/dist/nile-date-picker/nile-date-picker.cjs.js +1 -1
- package/dist/nile-date-picker/nile-date-picker.cjs.js.map +1 -1
- package/dist/nile-date-picker/nile-date-picker.css.cjs.js +1 -1
- package/dist/nile-date-picker/nile-date-picker.css.cjs.js.map +1 -1
- package/dist/nile-date-picker/nile-date-picker.css.esm.js +6 -2
- package/dist/nile-date-picker/nile-date-picker.esm.js +6 -6
- package/dist/nile-dialog/index.cjs.js +1 -1
- package/dist/nile-dialog/index.esm.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
- package/dist/nile-dialog/nile-dialog.esm.js +1 -1
- package/dist/nile-drawer/index.cjs.js +1 -1
- package/dist/nile-drawer/index.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.cjs.js.map +1 -1
- package/dist/nile-drawer/nile-drawer.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js.map +1 -1
- package/dist/nile-drawer/nile-drawer.test.esm.js +7 -7
- package/dist/nile-highlighter/nile-highlighter.cjs.js +1 -1
- package/dist/nile-highlighter/nile-highlighter.cjs.js.map +1 -1
- package/dist/nile-highlighter/nile-highlighter.esm.js +1 -1
- package/dist/nile-icon/icons/svg/compare.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/compare.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/compare.esm.js +1 -0
- package/dist/nile-icon/icons/svg/dock-to-right.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/dock-to-right.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/dock-to-right.esm.js +1 -0
- package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
- package/dist/nile-icon/icons/svg/index.esm.js +1 -1
- package/dist/nile-icon/index.cjs.js +1 -1
- package/dist/nile-icon/index.cjs.js.map +1 -1
- package/dist/nile-icon/index.esm.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js.map +1 -1
- package/dist/nile-icon/nile-icon.test.esm.js +1 -1
- package/dist/nile-icon-button/index.cjs.js +1 -1
- package/dist/nile-icon-button/index.esm.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
- package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
- package/dist/nile-inline-edit/index.cjs.js +2 -0
- package/dist/nile-inline-edit/index.cjs.js.map +1 -0
- package/dist/nile-inline-edit/index.esm.js +1 -0
- package/dist/nile-inline-edit/nile-inline-edit.cjs.js +2 -0
- package/dist/nile-inline-edit/nile-inline-edit.cjs.js.map +1 -0
- package/dist/nile-inline-edit/nile-inline-edit.css.cjs.js +2 -0
- package/dist/nile-inline-edit/nile-inline-edit.css.cjs.js.map +1 -0
- package/dist/nile-inline-edit/nile-inline-edit.css.esm.js +42 -0
- package/dist/nile-inline-edit/nile-inline-edit.esm.js +6 -0
- package/dist/nile-input/index.cjs.js +1 -1
- package/dist/nile-input/index.esm.js +1 -1
- package/dist/nile-input/nile-input.cjs.js +1 -1
- package/dist/nile-input/nile-input.cjs.js.map +1 -1
- package/dist/nile-input/nile-input.esm.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js.map +1 -1
- package/dist/nile-input/nile-input.test.esm.js +1 -1
- package/dist/nile-menu-item/index.cjs.js +1 -1
- package/dist/nile-menu-item/index.esm.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
- package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
- package/dist/nile-option/index.cjs.js +1 -1
- package/dist/nile-option/index.esm.js +1 -1
- package/dist/nile-option/nile-option.cjs.js +1 -1
- package/dist/nile-option/nile-option.cjs.js.map +1 -1
- package/dist/nile-option/nile-option.esm.js +1 -1
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.esm.js +1 -1
- package/dist/nile-tab/index.cjs.js +1 -1
- package/dist/nile-tab/index.esm.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
- package/dist/nile-tab/nile-tab.esm.js +1 -1
- package/dist/nile-tab-group/index.cjs.js +1 -1
- package/dist/nile-tab-group/index.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
- package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
- package/dist/nile-tag/index.cjs.js +1 -1
- package/dist/nile-tag/index.esm.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
- package/dist/nile-tag/nile-tag.esm.js +1 -1
- package/dist/nile-toast/index.cjs.js +1 -1
- package/dist/nile-toast/index.esm.js +1 -1
- package/dist/nile-toast/nile-toast.cjs.js +1 -1
- package/dist/nile-toast/nile-toast.cjs.js.map +1 -1
- package/dist/nile-toast/nile-toast.esm.js +1 -1
- package/dist/nile-tree/index.cjs.js +1 -1
- package/dist/nile-tree/index.esm.js +1 -1
- package/dist/nile-tree/nile-tree.cjs.js +1 -1
- package/dist/nile-tree/nile-tree.cjs.js.map +1 -1
- package/dist/nile-tree/nile-tree.esm.js +1 -1
- package/dist/nile-tree-item/index.cjs.js +1 -1
- package/dist/nile-tree-item/index.esm.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.cjs.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.cjs.js.map +1 -1
- package/dist/nile-tree-item/nile-tree-item.esm.js +1 -1
- package/dist/{nim-df5f9efe.cjs.js → nim-175a1e94.cjs.js} +2 -2
- package/dist/{nim-df5f9efe.cjs.js.map → nim-175a1e94.cjs.js.map} +1 -1
- package/dist/{proto-11466e41.esm.js → proto-7cb7fd99.esm.js} +1 -1
- package/dist/{proto-bdf8f839.cjs.js → proto-c0d38a59.cjs.js} +2 -2
- package/dist/{proto-bdf8f839.cjs.js.map → proto-c0d38a59.cjs.js.map} +1 -1
- package/dist/{rst-64e995dc.cjs.js → rst-939eae95.cjs.js} +2 -2
- package/dist/{rst-64e995dc.cjs.js.map → rst-939eae95.cjs.js.map} +1 -1
- package/dist/{shaderlab-8f7349ac.cjs.js → shaderlab-f1b8150d.cjs.js} +2 -2
- package/dist/{shaderlab-8f7349ac.cjs.js.map → shaderlab-f1b8150d.cjs.js.map} +1 -1
- package/dist/{sparql-cd3386f5.cjs.js → sparql-fa708d4c.cjs.js} +2 -2
- package/dist/{sparql-cd3386f5.cjs.js.map → sparql-fa708d4c.cjs.js.map} +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.css.js +0 -5
- package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.d.ts +94 -56
- package/dist/src/nile-calendar/nile-calendar.js +465 -490
- package/dist/src/nile-calendar/nile-calendar.js.map +1 -1
- package/dist/src/nile-chip/nile-chip.js +2 -2
- package/dist/src/nile-chip/nile-chip.js.map +1 -1
- package/dist/src/nile-date-picker/nile-date-picker.css.js +4 -0
- package/dist/src/nile-date-picker/nile-date-picker.css.js.map +1 -1
- package/dist/src/nile-date-picker/nile-date-picker.js +7 -6
- package/dist/src/nile-date-picker/nile-date-picker.js.map +1 -1
- package/dist/src/nile-icon/icons/svg/compare.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/compare.js +5 -0
- package/dist/src/nile-icon/icons/svg/compare.js.map +1 -0
- package/dist/src/nile-icon/icons/svg/dock-to-right.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/dock-to-right.js +5 -0
- package/dist/src/nile-icon/icons/svg/dock-to-right.js.map +1 -0
- package/dist/src/nile-icon/icons/svg/index.d.ts +2 -0
- package/dist/src/nile-icon/icons/svg/index.js +2 -0
- package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
- package/dist/src/nile-inline-edit/index.d.ts +1 -0
- package/dist/src/nile-inline-edit/index.js +2 -0
- package/dist/src/nile-inline-edit/index.js.map +1 -0
- package/dist/src/nile-inline-edit/nile-inline-edit.css.d.ts +12 -0
- package/dist/src/nile-inline-edit/nile-inline-edit.css.js +54 -0
- package/dist/src/nile-inline-edit/nile-inline-edit.css.js.map +1 -0
- package/dist/src/nile-inline-edit/nile-inline-edit.d.ts +41 -0
- package/dist/src/nile-inline-edit/nile-inline-edit.js +76 -0
- package/dist/src/nile-inline-edit/nile-inline-edit.js.map +1 -0
- package/dist/{svelte-eaee6dea.cjs.js → svelte-1c9200e6.cjs.js} +2 -2
- package/dist/{svelte-eaee6dea.cjs.js.map → svelte-1c9200e6.cjs.js.map} +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/{twig-ef3a2f8e.cjs.js → twig-e82a0f10.cjs.js} +2 -2
- package/dist/{twig-ef3a2f8e.cjs.js.map → twig-e82a0f10.cjs.js.map} +1 -1
- package/dist/{typespec-2408a2c5.esm.js → typespec-5b65452b.esm.js} +1 -1
- package/dist/{typespec-df7168c5.cjs.js → typespec-5f9c7522.cjs.js} +2 -2
- package/dist/{typespec-df7168c5.cjs.js.map → typespec-5f9c7522.cjs.js.map} +1 -1
- package/dist/vitesse-black-02f9013c.esm.js +1 -0
- package/dist/vitesse-black-c8b0af08.cjs.js +2 -0
- package/dist/vitesse-black-c8b0af08.cjs.js.map +1 -0
- package/dist/vitesse-dark-362560d8.esm.js +1 -0
- package/dist/vitesse-dark-4d62a96c.cjs.js +2 -0
- package/dist/vitesse-dark-4d62a96c.cjs.js.map +1 -0
- package/dist/vitesse-light-64c34e5b.esm.js +1 -0
- package/dist/vitesse-light-c347b81b.cjs.js +2 -0
- package/dist/vitesse-light-c347b81b.cjs.js.map +1 -0
- package/dist/{vue-711d75a4.esm.js → vue-8a11ba51.esm.js} +1 -1
- package/dist/{vue-d4c63178.cjs.js → vue-ec02ac11.cjs.js} +2 -2
- package/dist/{vue-d4c63178.cjs.js.map → vue-ec02ac11.cjs.js.map} +1 -1
- package/dist/{vue-html-b805e078.esm.js → vue-html-223d6d0d.esm.js} +1 -1
- package/dist/{vue-html-13711be2.cjs.js → vue-html-39fa1a8f.cjs.js} +2 -2
- package/dist/{vue-html-13711be2.cjs.js.map → vue-html-39fa1a8f.cjs.js.map} +1 -1
- package/dist/{wikitext-724303c6.esm.js → wikitext-194e2520.esm.js} +1 -1
- package/dist/{wikitext-d4ad7e43.cjs.js → wikitext-f8506da8.cjs.js} +2 -2
- package/dist/{wikitext-d4ad7e43.cjs.js.map → wikitext-f8506da8.cjs.js.map} +1 -1
- package/package.json +4 -3
- package/src/index.ts +2 -0
- package/src/nile-calendar/nile-calendar.css.ts +0 -5
- package/src/nile-calendar/nile-calendar.ts +481 -557
- package/src/nile-chip/nile-chip.ts +2 -2
- package/src/nile-date-picker/nile-date-picker.css.ts +4 -0
- package/src/nile-date-picker/nile-date-picker.ts +7 -7
- package/src/nile-icon/icons/svg/compare.ts +5 -0
- package/src/nile-icon/icons/svg/dock-to-right.ts +5 -0
- package/src/nile-icon/icons/svg/index.ts +2 -0
- package/src/nile-inline-edit/index.ts +1 -0
- package/src/nile-inline-edit/nile-inline-edit.css.ts +56 -0
- package/src/nile-inline-edit/nile-inline-edit.ts +80 -0
- package/dist/gleam-13d71b99.cjs.js +0 -2
- package/dist/gleam-13d71b99.cjs.js.map +0 -1
- package/dist/gleam-780849b8.esm.js +0 -1
- package/dist/vitesse-black-36f4f5ae.esm.js +0 -1
- package/dist/vitesse-black-8f7b8bf9.cjs.js +0 -2
- package/dist/vitesse-black-8f7b8bf9.cjs.js.map +0 -1
- package/dist/vitesse-dark-877d0b03.cjs.js +0 -2
- package/dist/vitesse-dark-877d0b03.cjs.js.map +0 -1
- package/dist/vitesse-dark-b177c06b.esm.js +0 -1
- package/dist/vitesse-light-1305bc40.esm.js +0 -1
- package/dist/vitesse-light-3f1d75bb.cjs.js +0 -2
- package/dist/vitesse-light-3f1d75bb.cjs.js.map +0 -1
@@ -6,7 +6,6 @@
|
|
6
6
|
*/
|
7
7
|
|
8
8
|
import {
|
9
|
-
LitElement,
|
10
9
|
html,
|
11
10
|
property,
|
12
11
|
CSSResultArray,
|
@@ -15,26 +14,13 @@ import {
|
|
15
14
|
} from 'lit-element';
|
16
15
|
import { customElement, state } from 'lit/decorators.js';
|
17
16
|
import { styles } from './nile-calendar.css';
|
18
|
-
import { animateTo, stopAnimations } from '../internal/animate';
|
19
17
|
import { classMap } from 'lit/directives/class-map.js';
|
20
18
|
import { query } from 'lit/decorators.js';
|
21
|
-
import {
|
22
|
-
getAnimation,
|
23
|
-
setDefaultAnimation,
|
24
|
-
} from '../utilities/animation-registry';
|
25
|
-
import { getTabbableBoundary } from '../internal/tabbable';
|
26
|
-
import { waitForEvent } from '../internal/event';
|
27
19
|
import { watch } from '../internal/watch';
|
28
20
|
import NileElement from '../internal/nile-element';
|
29
|
-
import type {
|
30
|
-
import type NileButton from '../nile-button/nile-button';
|
31
|
-
import type NileIconButton from '../nile-icon-button/nile-icon-button';
|
32
|
-
import type { NileMenu } from '../nile-menu';
|
33
|
-
import type { NilePopup } from '../nile-popup';
|
34
|
-
import '../nile-popup';
|
21
|
+
import type { PropertyValueMap } from 'lit';
|
35
22
|
import { NileDropdown } from '../nile-dropdown';
|
36
|
-
|
37
|
-
|
23
|
+
type NileCalendarDateRange={ startDate: string, endDate: string }
|
38
24
|
/**
|
39
25
|
* Nile icon component.
|
40
26
|
*
|
@@ -44,115 +30,107 @@ import { TIMEZONES } from './timezones';
|
|
44
30
|
@customElement('nile-calendar')
|
45
31
|
export class NileCalendar extends NileElement {
|
46
32
|
/**
|
47
|
-
* The styles for NileCalendar
|
33
|
+
* The styles for NileCalendar
|
48
34
|
* @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`
|
49
35
|
*/
|
50
36
|
public static get styles(): CSSResultArray {
|
51
37
|
return [styles];
|
52
38
|
}
|
53
39
|
|
54
|
-
|
40
|
+
@query('nile-dropdown') dropdown: NileDropdown;
|
55
41
|
|
56
|
-
|
42
|
+
@property({ type: String, attribute: 'value' }) valueAttribute: | string | null = null;
|
57
43
|
|
58
|
-
@
|
44
|
+
@property({ type: String, attribute:true, reflect:true }) allowedDates: string = JSON.stringify({});
|
59
45
|
|
60
|
-
@property({ type: Boolean
|
46
|
+
@property({ type: Boolean }) range = false;
|
61
47
|
|
62
|
-
@property({ type:
|
48
|
+
@property({ type: String }) type = 'absolute';
|
63
49
|
|
64
|
-
@property({ type:
|
65
|
-
allowedDates: any = {};
|
50
|
+
@property({ type: String }) selectedUnit: string;
|
66
51
|
|
67
|
-
@property({ type:
|
52
|
+
@property({ type: Number }) selectedValue: number;
|
68
53
|
|
69
|
-
@property({ type:
|
70
|
-
|
71
|
-
|
54
|
+
@property({ type: Array, attribute: 'hide-duration-fields' }) hideDurationFields: String[] = [];
|
55
|
+
|
56
|
+
@property({ type: Boolean}) showManualInputs :boolean=false;
|
72
57
|
|
73
|
-
@
|
74
|
-
null;
|
58
|
+
@state() startDate: Date | null = null;
|
75
59
|
|
76
|
-
@
|
60
|
+
@state() endDate: Date | null = null;
|
77
61
|
|
78
|
-
@
|
62
|
+
@state() isSelectingStart = true;
|
79
63
|
|
80
|
-
@
|
64
|
+
@state() hideInput: Boolean = false;
|
81
65
|
|
82
|
-
@
|
66
|
+
@state() value: Date | null;
|
83
67
|
|
84
|
-
@
|
68
|
+
@state() currentMonth: number = new Date().getMonth();
|
85
69
|
|
86
|
-
@
|
70
|
+
@state() currentYear: number = new Date().getFullYear();
|
87
71
|
|
88
|
-
@
|
72
|
+
@state() allowedDatesLocal: NileCalendarDateRange | any = null;
|
89
73
|
|
90
|
-
|
74
|
+
connectedCallback() {
|
75
|
+
super.connectedCallback();
|
76
|
+
this.initializeValue();
|
77
|
+
this.emit('nile-init');
|
78
|
+
}
|
91
79
|
|
92
|
-
|
80
|
+
disconnectedCallback() {
|
81
|
+
super.disconnectedCallback();
|
82
|
+
this.emit('nile-destroy');
|
83
|
+
}
|
93
84
|
|
94
|
-
|
95
|
-
|
85
|
+
protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {
|
86
|
+
super.updated(changedProperties);
|
96
87
|
|
97
|
-
if (
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
88
|
+
if (changedProperties.has('valueAttribute')) {
|
89
|
+
const date = new Date(this.valueAttribute || '');
|
90
|
+
if (!isNaN(date.getTime())) {
|
91
|
+
const offset = date.getTimezoneOffset();
|
92
|
+
this.value = new Date(date.getTime() - offset * 60 * 1000);
|
93
|
+
this.currentMonth = this.value.getMonth();
|
94
|
+
this.currentYear = this.value.getFullYear();
|
102
95
|
}
|
103
96
|
}
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
97
|
+
}
|
98
|
+
|
99
|
+
attributeChangedCallback(name: string, _old: string | null, newValue: string | null): void {
|
100
|
+
if (name === 'value') {
|
101
|
+
this.valueAttribute = newValue;
|
102
|
+
this.initializeValue();
|
103
|
+
}
|
108
104
|
}
|
109
105
|
|
110
106
|
@watch('allowedDates')
|
111
107
|
checkValidAllowedDate() {
|
112
|
-
|
113
|
-
|
108
|
+
let newDateRange: NileCalendarDateRange | null;
|
109
|
+
try {
|
110
|
+
newDateRange=JSON.parse(this.allowedDates);
|
111
|
+
} catch (error) {
|
112
|
+
newDateRange=null;
|
113
|
+
}
|
114
|
+
if (!newDateRange || Object.keys(newDateRange).length == 0) {
|
115
|
+
this.allowedDatesLocal=null;
|
114
116
|
return;
|
115
117
|
}
|
116
118
|
this.hideInput=true;
|
117
|
-
const startDate =
|
118
|
-
|
119
|
-
this.allowedDates?.startDate?.slice(0, 4),
|
120
|
-
this.allowedDates?.startDate?.slice(5, 7) - 1,
|
121
|
-
this.allowedDates?.startDate?.slice(8, 10)
|
122
|
-
)
|
123
|
-
);
|
124
|
-
const endDate = new Date(
|
125
|
-
Date.UTC(
|
126
|
-
this.allowedDates?.endDate?.slice(0, 4),
|
127
|
-
this.allowedDates?.endDate?.slice(5, 7) - 1,
|
128
|
-
this.allowedDates?.endDate?.slice(8, 10)
|
129
|
-
)
|
130
|
-
);
|
119
|
+
const startDate = this.getUTCDate(newDateRange.startDate)
|
120
|
+
const endDate = this.getUTCDate(newDateRange.endDate)
|
131
121
|
|
132
122
|
if (startDate > endDate) {
|
133
123
|
console.error('StartDate must be greater than endDate');
|
134
|
-
this.validAllowedDates=false;
|
135
124
|
}
|
136
125
|
else
|
137
126
|
{
|
138
|
-
this.
|
127
|
+
this.allowedDatesLocal=newDateRange;
|
139
128
|
}
|
140
129
|
}
|
141
|
-
|
142
|
-
@state() hideInput: Boolean = false;
|
143
|
-
|
144
|
-
|
145
|
-
@property({ type: Array, attribute: 'hide-duration-fields' })
|
146
|
-
hideDurationFields: String[] = [];
|
147
|
-
@property({ type: Boolean , attribute: 'hide-time-zone' }) hideTimeZone: Boolean = false;
|
148
|
-
|
149
|
-
@property({ type: Boolean , attribute: 'show-manual-inputs', reflect: true }) showManualInputs: Boolean = false;
|
150
|
-
|
130
|
+
|
151
131
|
@watch('value')
|
152
132
|
valueChanged() {
|
153
|
-
|
154
133
|
if (this.range && this.value) {
|
155
|
-
this.rangeValue = this.value;
|
156
134
|
this.value = null;
|
157
135
|
return;
|
158
136
|
}
|
@@ -162,230 +140,182 @@ export class NileCalendar extends NileElement {
|
|
162
140
|
const localDate = new Date(this.value.getTime() - offset * 60 * 1000);
|
163
141
|
if (!isNaN(localDate.getTime())) {
|
164
142
|
this.valueAttribute = localDate.toISOString().split('T')[0];
|
165
|
-
this.formattedDate = `${String(localDate.getDate()).padStart(
|
166
|
-
2,
|
167
|
-
'0'
|
168
|
-
)}/${String(localDate.getMonth() + 1).padStart(
|
169
|
-
2,
|
170
|
-
'0'
|
171
|
-
)}/${localDate.getFullYear()}`;
|
172
143
|
}
|
173
144
|
}
|
174
145
|
}
|
175
146
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
147
|
+
/**
|
148
|
+
* Render method
|
149
|
+
*/
|
150
|
+
render(): TemplateResult {
|
151
|
+
return html`
|
152
|
+
<div
|
153
|
+
class=${classMap({
|
154
|
+
base:true,
|
155
|
+
base__range:this.range,
|
156
|
+
})}
|
157
|
+
>
|
158
|
+
<div class="calendar-config ${!this.range ? 'hidden' : ''}">
|
159
|
+
<div class="calendar-switcher">
|
160
|
+
<nile-tab-group centered @nile-tab-show="${this.onTypeChange}">
|
161
|
+
<nile-tab slot="nav" panel="absolute">Absolute</nile-tab>
|
162
|
+
<nile-tab slot="nav" panel="relative">Relative</nile-tab>
|
163
|
+
</nile-tab-group>
|
164
|
+
</div>
|
165
|
+
</div>
|
189
166
|
|
190
|
-
|
191
|
-
|
192
|
-
}
|
167
|
+
${this.type == 'relative' ? this.renderRelativeCalendar():''}
|
168
|
+
${this.type == 'absolute' ? this.renderAbsoluteCalendar():''}
|
193
169
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
170
|
+
${!this.range?'':html`
|
171
|
+
<div class="button-container">
|
172
|
+
<nile-button
|
173
|
+
class="apply-button"
|
174
|
+
?disabled="${ !this.startDate || !this.endDate }"
|
175
|
+
@click="${this.confimRange}"
|
176
|
+
> Apply</nile-button>
|
177
|
+
</div>
|
178
|
+
`}
|
179
|
+
</div>
|
180
|
+
`;
|
201
181
|
}
|
202
182
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
183
|
+
/**
|
184
|
+
* @returns HTML content for absolute calendar
|
185
|
+
*/
|
186
|
+
renderAbsoluteCalendar(){
|
187
|
+
return html`
|
188
|
+
<div class="calendar-wrapper">
|
189
|
+
<div class="calendar-container">
|
190
|
+
${this.renderMonth(
|
191
|
+
this.currentYear,
|
192
|
+
this.currentMonth,
|
193
|
+
this.getDaysArray(this.currentYear, this.currentMonth)
|
194
|
+
)}
|
195
|
+
</div>
|
196
|
+
</div>
|
197
|
+
${this.range ? html`
|
198
|
+
<div class="calender-input ${this.showManualInputs ? '' : 'hidden'}" >
|
199
|
+
<div class="from">
|
200
|
+
<nile-input
|
201
|
+
label="From"
|
202
|
+
class="manual-input"
|
203
|
+
value="${this.formatTime(this.startDate)}"
|
204
|
+
placeholder="HH:MM:SS" @nile-change="${this.handleStartTimeInput}"
|
205
|
+
> </nile-input>
|
206
|
+
</div>
|
213
207
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
208
|
+
<div class="from">
|
209
|
+
<nile-input
|
210
|
+
label="To"
|
211
|
+
class="manual-input"
|
212
|
+
value="${this.formatTime(this.endDate)}"
|
213
|
+
placeholder="HH:MM:SS" @nile-change="${this.handleEndTimeInput}"
|
214
|
+
> </nile-input>
|
215
|
+
</div>
|
216
|
+
</div>
|
217
|
+
`:''}
|
218
|
+
`
|
219
|
+
}
|
225
220
|
|
226
|
-
|
221
|
+
/**
|
222
|
+
* @returns HTML content for relative calendar
|
223
|
+
*/
|
224
|
+
renderRelativeCalendar(){
|
225
|
+
return html`
|
226
|
+
<div class="units-wrapper">
|
227
|
+
<div class="unit-container">
|
228
|
+
${this.hideDurationFields?.includes('minutes')?'':html`
|
229
|
+
<div class="duration-name">Minutes</div>
|
230
|
+
<div class="duration-units">
|
231
|
+
${this.renderTimeValues('minutes', [1, 5, 15, 30, 45])}
|
232
|
+
</div>
|
233
|
+
`}
|
227
234
|
|
228
|
-
|
235
|
+
${this.hideDurationFields?.includes('hours')?'':html`
|
236
|
+
<div class="duration-name">Hours</div>
|
237
|
+
<div class="duration-units">
|
238
|
+
${this.renderTimeValues('hours', [1, 2, 3, 6, 8, 12])}
|
239
|
+
</div>
|
240
|
+
`}
|
241
|
+
|
242
|
+
${this.hideDurationFields?.includes('days')?'':html`
|
243
|
+
<div class="duration-name">Days</div>
|
244
|
+
<div class="duration-units">
|
245
|
+
${this.renderTimeValues('days', [1, 2, 3, 4, 5, 6])}
|
246
|
+
</div>
|
247
|
+
`}
|
248
|
+
|
249
|
+
${this.hideDurationFields?.includes('weeks')?'':html`
|
250
|
+
<div class="duration-name">Weeks</div>
|
251
|
+
<div class="duration-units">
|
252
|
+
${this.renderTimeValues('weeks', [1, 2, 4, 6])}
|
253
|
+
</div>
|
254
|
+
`}
|
255
|
+
|
256
|
+
${this.hideDurationFields?.includes('months')?'':html`
|
257
|
+
<div class="duration-name">Months</div>
|
258
|
+
<div class="duration-units">
|
259
|
+
${this.renderTimeValues('months', [3, 6, 12, 15])}
|
260
|
+
</div>
|
261
|
+
`}
|
262
|
+
</div>
|
263
|
+
</div>
|
264
|
+
|
265
|
+
${this.range ? html`
|
266
|
+
<div>
|
267
|
+
<div class="unit-input-container">
|
268
|
+
<nile-input
|
269
|
+
class="manual-input duration-input"
|
270
|
+
label="Duration"
|
271
|
+
value="${this.selectedValue}"
|
272
|
+
@nile-input="${this.handleDurationChange}"
|
273
|
+
placeholder="Enter Value"
|
274
|
+
></nile-input>
|
229
275
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
this.
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
276
|
+
<nile-select class="manual-input time-input"
|
277
|
+
label="Unit of time"
|
278
|
+
style="margin-top:3px"
|
279
|
+
value="${ this.selectedUnit }"
|
280
|
+
@nile-change="${this.handleUnitChange}"
|
281
|
+
>
|
282
|
+
<nile-option value="minutes" class="${this.hideDurationFields?.includes('minutes')?'hidden':''}">Minutes</nile-option>
|
283
|
+
<nile-option value="hours" class="${this.hideDurationFields?.includes('hours')?'hidden':''}"> Hours </nile-option>
|
284
|
+
<nile-option value="days" class="${this.hideDurationFields?.includes('days')?'hidden':''}">Days</nile-option>
|
285
|
+
<nile-option value="weeks" class="${this.hideDurationFields?.includes('weeks')?'hidden':''}">Weeks</nile-option>
|
286
|
+
<nile-option value="months" class="${this.hideDurationFields?.includes('months')?'hidden':''}"> Months </nile-option>
|
287
|
+
</nile-select>
|
288
|
+
</div>
|
289
|
+
</div>
|
290
|
+
`:''}
|
291
|
+
`
|
239
292
|
}
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
super.disconnectedCallback();
|
258
|
-
this.emit('nile-destroy');
|
259
|
-
}
|
260
|
-
|
261
|
-
private getDaysArray(year: number, month: number): number[] {
|
262
|
-
const daysInMonth = new Date(year, month + 1, 0).getDate();
|
263
|
-
return Array.from({ length: daysInMonth }, (_, i) => i + 1);
|
264
|
-
}
|
265
|
-
|
266
|
-
private nextMonth(): void {
|
267
|
-
if (this.currentMonth === 11) {
|
268
|
-
this.currentMonth = 0;
|
269
|
-
this.currentYear++;
|
270
|
-
} else {
|
271
|
-
this.currentMonth++;
|
272
|
-
}
|
273
|
-
this.requestUpdate();
|
274
|
-
}
|
275
|
-
|
276
|
-
private prevMonth(): void {
|
277
|
-
if (this.currentMonth === 0) {
|
278
|
-
this.currentMonth = 11;
|
279
|
-
this.currentYear--;
|
280
|
-
} else {
|
281
|
-
this.currentMonth--;
|
282
|
-
}
|
283
|
-
this.requestUpdate();
|
284
|
-
}
|
285
|
-
|
286
|
-
private selectDate(day: number, month: number, year: number): void {
|
287
|
-
const selectedDate = new Date(year, month, day);
|
288
|
-
|
289
|
-
if (this.range) {
|
290
|
-
if (this.startDate && this.endDate) {
|
291
|
-
this.startDate = null;
|
292
|
-
this.endDate = null;
|
293
|
-
}
|
294
|
-
|
295
|
-
if (this.isSelectingStart) {
|
296
|
-
this.startDate = selectedDate;
|
297
|
-
if (this.endDate && selectedDate > this.endDate) {
|
298
|
-
this.endDate = null;
|
299
|
-
}
|
300
|
-
this.isSelectingStart = false;
|
301
|
-
} else {
|
302
|
-
this.isSelectingStart = true;
|
303
|
-
|
304
|
-
if (this.startDate && selectedDate < this.startDate) {
|
305
|
-
this.startDate = selectedDate;
|
306
|
-
this.endDate = null;
|
307
|
-
this.isSelectingStart = false;
|
308
|
-
} else {
|
309
|
-
const endDate = selectedDate;
|
310
|
-
endDate.setHours(23, 59, 59, 999);
|
311
|
-
this.endDate = endDate;
|
312
|
-
}
|
313
|
-
}
|
314
|
-
} else {
|
315
|
-
this.value = selectedDate;
|
316
|
-
this.emit('nile-changed', { value: this.value });
|
317
|
-
if (this.dropdown) {
|
318
|
-
this.dropdown.hide();
|
319
|
-
}
|
320
|
-
}
|
321
|
-
|
322
|
-
this.requestUpdate();
|
323
|
-
}
|
324
|
-
|
325
|
-
private confimRange() {
|
326
|
-
if (this.startDate && this.endDate) {
|
327
|
-
if (this.selectedTimeZone !== 'local') {
|
328
|
-
this.startDate = this.convertTZ(this.startDate, this.selectedTimeZone);
|
329
|
-
this.endDate = this.convertTZ(this.endDate, this.selectedTimeZone);
|
330
|
-
}
|
331
|
-
|
332
|
-
this.emit('nile-changed', {
|
333
|
-
startDate: this.startDate,
|
334
|
-
endDate: this.endDate,
|
335
|
-
});
|
336
|
-
if (this.dropdown) {
|
337
|
-
this.dropdown.hide();
|
338
|
-
}
|
339
|
-
|
340
|
-
this.rangeValue = {
|
341
|
-
startDate: this.startDate,
|
342
|
-
endDate: this.endDate,
|
343
|
-
};
|
344
|
-
}
|
345
|
-
}
|
346
|
-
|
347
|
-
convertTZ(date: Date, tzString: any) {
|
348
|
-
return new Date(
|
349
|
-
(typeof date === 'string' ? new Date(date) : date).toLocaleString(
|
350
|
-
'en-US',
|
351
|
-
{ timeZone: tzString }
|
352
|
-
)
|
353
|
-
);
|
354
|
-
}
|
355
|
-
|
356
|
-
isCurrentDate(day: number, month: number, year: number) {
|
357
|
-
const today = new Date();
|
358
|
-
return (
|
359
|
-
day === today.getDate() &&
|
360
|
-
month + 1 === today.getMonth() + 1 &&
|
361
|
-
year === today.getFullYear()
|
362
|
-
);
|
363
|
-
}
|
364
|
-
|
365
|
-
isAllowedDate(day: number, month: number, year: number) {
|
366
|
-
if (!this.validAllowedDates) {
|
367
|
-
return true;
|
368
|
-
}
|
369
|
-
const dateToCheck = new Date(Date.UTC(year, month, day));
|
370
|
-
const startDate = new Date(
|
371
|
-
Date.UTC(
|
372
|
-
this.allowedDates?.startDate?.slice(0, 4),
|
373
|
-
this.allowedDates?.startDate?.slice(5, 7) - 1,
|
374
|
-
this.allowedDates?.startDate?.slice(8, 10)
|
375
|
-
)
|
376
|
-
);
|
377
|
-
const endDate = new Date(
|
378
|
-
Date.UTC(
|
379
|
-
this.allowedDates?.endDate?.slice(0, 4),
|
380
|
-
this.allowedDates?.endDate?.slice(5, 7) - 1,
|
381
|
-
this.allowedDates?.endDate?.slice(8, 10)
|
382
|
-
)
|
383
|
-
);
|
384
|
-
endDate.setUTCHours(23, 59, 59, 999);
|
385
|
-
const isWithinRange = dateToCheck >= startDate && dateToCheck <= endDate;
|
386
|
-
return isWithinRange;
|
293
|
+
|
294
|
+
/**
|
295
|
+
*
|
296
|
+
* @param unit
|
297
|
+
* @param values
|
298
|
+
* @returns html for the option
|
299
|
+
*/
|
300
|
+
renderTimeValues(unit: string, values: any[]) {
|
301
|
+
return values.map(
|
302
|
+
value =>
|
303
|
+
html`
|
304
|
+
<div
|
305
|
+
class="duration__value ${this.selectedUnit === unit && this.selectedValue === value ? 'duration__value--selected':''}"
|
306
|
+
@click=${(e: any) => this.handleTimeValueClick(unit, value, e)}
|
307
|
+
>${value}
|
308
|
+
</div>`
|
309
|
+
);
|
387
310
|
}
|
388
311
|
|
312
|
+
/**
|
313
|
+
*
|
314
|
+
* @param year
|
315
|
+
* @param month
|
316
|
+
* @param daysArray
|
317
|
+
* @returns HTML for rendered month
|
318
|
+
*/
|
389
319
|
private renderMonth(
|
390
320
|
year: number,
|
391
321
|
month: number,
|
@@ -451,6 +381,15 @@ export class NileCalendar extends NileElement {
|
|
451
381
|
return false;
|
452
382
|
};
|
453
383
|
|
384
|
+
const isCurrentDate = (day: number, month: number, year: number) => {
|
385
|
+
const today = new Date();
|
386
|
+
return (
|
387
|
+
day === today.getDate() &&
|
388
|
+
month + 1 === today.getMonth() + 1 &&
|
389
|
+
year === today.getFullYear()
|
390
|
+
);
|
391
|
+
};
|
392
|
+
|
454
393
|
return html`
|
455
394
|
<div class="calendar">
|
456
395
|
<div class="calendar-header">
|
@@ -493,7 +432,6 @@ export class NileCalendar extends NileElement {
|
|
493
432
|
'day_date' : true,
|
494
433
|
'not-allowed' : !this.isAllowedDate(day, month, year),
|
495
434
|
'in-range' : isInRange(day, month, year, isCurrentMonth) ,
|
496
|
-
// 'current-date' : this.isCurrentDate(day, month, year) && isCurrentMonth,
|
497
435
|
'filler' : !isCurrentMonth,
|
498
436
|
}
|
499
437
|
if(datePlacement) classMapObj[datePlacement]=true
|
@@ -505,7 +443,7 @@ export class NileCalendar extends NileElement {
|
|
505
443
|
>
|
506
444
|
<span style="position:relative;">
|
507
445
|
${day}
|
508
|
-
${
|
446
|
+
${isCurrentDate(day, month, year) && isCurrentMonth?html`<div class="current__date__dot"></div>`:nothing}
|
509
447
|
</span>
|
510
448
|
</div>`;
|
511
449
|
})}
|
@@ -514,90 +452,158 @@ export class NileCalendar extends NileElement {
|
|
514
452
|
`;
|
515
453
|
}
|
516
454
|
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
endDate: Date | null;
|
528
|
-
}): string {
|
529
|
-
if (!value) {
|
530
|
-
return value;
|
455
|
+
/**
|
456
|
+
* Function to validate if date is not in allowedDates range
|
457
|
+
* @param day
|
458
|
+
* @param month
|
459
|
+
* @param year
|
460
|
+
* @returns
|
461
|
+
*/
|
462
|
+
isAllowedDate(day: number, month: number, year: number) {
|
463
|
+
if (!this.allowedDatesLocal) {
|
464
|
+
return true;
|
531
465
|
}
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
)
|
466
|
+
const dateToCheck = new Date(Date.UTC(year, month, day));
|
467
|
+
const startDate = this.getUTCDate(this.allowedDatesLocal.startDate)
|
468
|
+
const endDate = this.getUTCDate(this.allowedDatesLocal.endDate)
|
469
|
+
endDate.setUTCHours(23, 59, 59, 999);
|
470
|
+
const isWithinRange = dateToCheck >= startDate && dateToCheck <= endDate;
|
471
|
+
return isWithinRange;
|
536
472
|
}
|
537
473
|
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
474
|
+
/**
|
475
|
+
* @function handle_date-click/select
|
476
|
+
* @param day
|
477
|
+
* @param month
|
478
|
+
* @param year
|
479
|
+
*/
|
480
|
+
selectDate(day: number, month: number, year: number): void {
|
481
|
+
const selectedDate = new Date(year, month, day);
|
482
|
+
|
483
|
+
if (this.range) {
|
484
|
+
if (this.startDate && this.endDate) {
|
485
|
+
this.startDate = null;
|
486
|
+
this.endDate = null;
|
487
|
+
}
|
488
|
+
|
489
|
+
if (this.isSelectingStart) {
|
490
|
+
this.startDate = selectedDate;
|
491
|
+
if (this.endDate && selectedDate > this.endDate) {
|
492
|
+
this.endDate = null;
|
493
|
+
}
|
494
|
+
this.isSelectingStart = false;
|
495
|
+
} else {
|
496
|
+
this.isSelectingStart = true;
|
497
|
+
|
498
|
+
if (this.startDate && selectedDate < this.startDate) {
|
499
|
+
this.startDate = selectedDate;
|
500
|
+
this.endDate = null;
|
501
|
+
this.isSelectingStart = false;
|
502
|
+
} else {
|
503
|
+
const endDate = selectedDate;
|
504
|
+
endDate.setHours(23, 59, 59, 999);
|
505
|
+
this.endDate = endDate;
|
506
|
+
}
|
507
|
+
}
|
545
508
|
} else {
|
546
|
-
this.
|
547
|
-
this.
|
509
|
+
this.value = selectedDate;
|
510
|
+
this.emitChangedData({ value: this.value });
|
511
|
+
if (this.dropdown) {
|
512
|
+
this.dropdown.hide();
|
513
|
+
}
|
548
514
|
}
|
549
|
-
this.requestUpdate();
|
550
515
|
}
|
551
516
|
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
517
|
+
/**
|
518
|
+
* Function to be called on initialization to set all other properties
|
519
|
+
*/
|
520
|
+
initializeValue() {
|
521
|
+
if (this.range) {
|
522
|
+
try {
|
523
|
+
const rangeValue = JSON.parse(this.valueAttribute || '');
|
524
|
+
this.startDate = new Date(rangeValue.startDate);
|
525
|
+
this.endDate = new Date(rangeValue.endDate);
|
526
|
+
|
527
|
+
// Convert to local time
|
528
|
+
this.startDate = new Date(this.startDate.getTime());
|
529
|
+
this.endDate = new Date(this.endDate.getTime());
|
530
|
+
|
531
|
+
this.value = null;
|
532
|
+
} catch (e) {
|
533
|
+
// console.error('Invalid range value');
|
534
|
+
}
|
559
535
|
} else {
|
560
|
-
this.
|
536
|
+
if (this.valueAttribute) {
|
537
|
+
let date: Date = new Date(this.valueAttribute);
|
538
|
+
|
539
|
+
date = new Date(date.getTime() - date.getTimezoneOffset() * 60000);
|
540
|
+
|
541
|
+
if (!isNaN(date.getTime())) {
|
542
|
+
this.value = date;
|
543
|
+
this.currentMonth = this.value.getMonth();
|
544
|
+
this.currentYear = this.value.getFullYear();
|
545
|
+
}
|
546
|
+
}
|
561
547
|
}
|
562
|
-
this.requestUpdate();
|
563
548
|
}
|
564
549
|
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
550
|
+
/**
|
551
|
+
* Function to handle relative date selection
|
552
|
+
*/
|
553
|
+
handleDurationChange(event: any) {
|
554
|
+
this.selectedValue = Number(event.detail.value);
|
555
|
+
if (this.selectedUnit && this.selectedValue) {
|
556
|
+
this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);
|
557
|
+
}
|
569
558
|
}
|
570
559
|
|
571
|
-
|
572
|
-
|
573
|
-
|
560
|
+
handleUnitChange(event: any) {
|
561
|
+
this.selectedUnit = event.detail.value;
|
562
|
+
if (this.selectedUnit && this.selectedValue) {
|
563
|
+
this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);
|
564
|
+
}
|
574
565
|
}
|
575
566
|
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
const seconds = String(date.getSeconds()).padStart(2, '0');
|
581
|
-
return `${hours}:${minutes}:${seconds}`;
|
567
|
+
handleTimeValueClick(unit: string, value: number, event: any) {
|
568
|
+
// const timestamps = this.createRelativePeriod(unit, value);
|
569
|
+
this.selectedUnit = unit;
|
570
|
+
this.selectedValue = value;
|
582
571
|
}
|
583
572
|
|
584
|
-
|
585
|
-
|
586
|
-
const
|
587
|
-
return regex.test(input);
|
588
|
-
}
|
573
|
+
createRelativePeriod(unit: String, value: number) {
|
574
|
+
const endTime = new Date();
|
575
|
+
const startTime = new Date();
|
589
576
|
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
577
|
+
switch (unit) {
|
578
|
+
case 'minutes':
|
579
|
+
startTime.setMinutes(startTime.getMinutes() - value);
|
580
|
+
break;
|
581
|
+
case 'hours':
|
582
|
+
startTime.setHours(startTime.getHours() - value);
|
583
|
+
break;
|
584
|
+
case 'days':
|
585
|
+
startTime.setDate(startTime.getDate() - value);
|
586
|
+
break;
|
587
|
+
case 'weeks':
|
588
|
+
startTime.setDate(startTime.getDate() - 7 * value); // Subtract weeks as days
|
589
|
+
break;
|
590
|
+
case 'months':
|
591
|
+
startTime.setMonth(startTime.getMonth() - value);
|
592
|
+
break;
|
594
593
|
}
|
595
|
-
const [hour, minute, second] = input.split(':').map(Number);
|
596
|
-
const newDate = new Date(date.getTime());
|
597
|
-
newDate.setHours(hour, minute, second);
|
598
|
-
return newDate;
|
599
|
-
}
|
600
594
|
|
595
|
+
this.startDate = new Date(startTime.getTime());
|
596
|
+
this.endDate = new Date(endTime.getTime());
|
597
|
+
|
598
|
+
return {
|
599
|
+
startDate: this.startDate,
|
600
|
+
endDate: this.endDate,
|
601
|
+
};
|
602
|
+
}
|
603
|
+
|
604
|
+
/**
|
605
|
+
* Function to handle start time selecion
|
606
|
+
*/
|
601
607
|
private handleStartTimeInput(event: CustomEvent): void {
|
602
608
|
if (!this.startDate) {
|
603
609
|
this.startDate = null;
|
@@ -611,7 +617,10 @@ export class NileCalendar extends NileElement {
|
|
611
617
|
}
|
612
618
|
this.requestUpdate();
|
613
619
|
}
|
614
|
-
|
620
|
+
|
621
|
+
/**
|
622
|
+
* Function to handle end time selecion
|
623
|
+
*/
|
615
624
|
private handleEndTimeInput(event: CustomEvent): void {
|
616
625
|
if (!this.endDate) {
|
617
626
|
this.endDate = null;
|
@@ -626,234 +635,149 @@ export class NileCalendar extends NileElement {
|
|
626
635
|
this.requestUpdate();
|
627
636
|
}
|
628
637
|
|
629
|
-
|
630
|
-
|
638
|
+
// Parse time string to a Date object
|
639
|
+
private parseTime(input: string, date: Date): Date | null {
|
640
|
+
if (!this.isValidTimeInput(input)) {
|
641
|
+
return null;
|
642
|
+
}
|
643
|
+
const [hour, minute, second] = input.split(':').map(Number);
|
644
|
+
const newDate = new Date(date.getTime());
|
645
|
+
newDate.setHours(hour, minute, second);
|
646
|
+
return newDate;
|
631
647
|
}
|
632
648
|
|
633
|
-
|
634
|
-
|
635
|
-
const
|
649
|
+
// Validate time in HH:MM:SS format
|
650
|
+
private isValidTimeInput(input: string): boolean {
|
651
|
+
const regex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;
|
652
|
+
return regex.test(input);
|
653
|
+
}
|
636
654
|
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
case 'weeks':
|
648
|
-
startTime.setDate(startTime.getDate() - 7 * value); // Subtract weeks as days
|
649
|
-
break;
|
650
|
-
case 'months':
|
651
|
-
startTime.setMonth(startTime.getMonth() - value);
|
652
|
-
break;
|
655
|
+
private handleStartDateInput(event: CustomEvent): void {
|
656
|
+
const date = this.parseDate(event.detail.value);
|
657
|
+
if (!this.isValidDateInput(date)) {
|
658
|
+
this.startDate = null;
|
659
|
+
}
|
660
|
+
if (date && (!this.endDate || date <= this.endDate)) {
|
661
|
+
this.startDate = date;
|
662
|
+
} else {
|
663
|
+
this.startDate = null;
|
664
|
+
this.endDate = null;
|
653
665
|
}
|
654
|
-
|
655
|
-
this.startDate = new Date(startTime.getTime());
|
656
|
-
this.endDate = new Date(endTime.getTime());
|
657
|
-
|
658
|
-
this.requestUpdate();
|
659
|
-
|
660
|
-
return {
|
661
|
-
startDate: this.startDate,
|
662
|
-
endDate: this.endDate,
|
663
|
-
};
|
664
666
|
}
|
665
667
|
|
666
|
-
|
667
|
-
const
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
668
|
+
private handleEndDateInput(event: CustomEvent): void {
|
669
|
+
const date = this.parseDate(event.detail.value);
|
670
|
+
if (!this.isValidDateInput(date)) {
|
671
|
+
this.endDate = null;
|
672
|
+
}
|
673
|
+
if (date && (!this.startDate || date >= this.startDate)) {
|
674
|
+
this.endDate = date;
|
675
|
+
} else {
|
676
|
+
this.endDate = null;
|
677
|
+
}
|
673
678
|
}
|
674
679
|
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
html`
|
679
|
-
<div
|
680
|
-
class="duration__value ${this.selectedUnit === unit && this.selectedValue === value ? 'duration__value--selected':''}"
|
681
|
-
@click=${(e: any) => this.handleTimeValueClick(unit, value, e)}
|
682
|
-
>
|
683
|
-
${value}
|
684
|
-
</div>
|
685
|
-
`
|
686
|
-
);
|
680
|
+
private isValidDateInput(input: any): boolean {
|
681
|
+
const regex = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/\d{4}$/;
|
682
|
+
return regex.test(input);
|
687
683
|
}
|
688
684
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
}
|
685
|
+
private parseDate(dateString: string): Date | null {
|
686
|
+
const [day, month, year] = dateString.split('/').map(Number);
|
687
|
+
const date = new Date(year, month - 1, day);
|
688
|
+
return !isNaN(date.getTime()) ? date : null;
|
694
689
|
}
|
695
690
|
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
691
|
+
private formatDateRange(value: {
|
692
|
+
startDate: Date | null;
|
693
|
+
endDate: Date | null;
|
694
|
+
}): string {
|
695
|
+
if (!value) {
|
696
|
+
return value;
|
700
697
|
}
|
698
|
+
if (!value.startDate || !value.endDate) return '';
|
699
|
+
return `${this.formatDate(value.startDate)} - ${this.formatDate(
|
700
|
+
value.endDate
|
701
|
+
)}`;
|
701
702
|
}
|
702
703
|
|
703
|
-
|
704
|
-
|
705
|
-
|
704
|
+
private formatDate(date: Date | null): string {
|
705
|
+
if (!date) return '';
|
706
|
+
const day = String(date.getDate()).padStart(2, '0');
|
707
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
708
|
+
const year = date.getFullYear();
|
709
|
+
return `${day}/${month}/${year}`;
|
706
710
|
}
|
707
711
|
|
708
|
-
|
709
|
-
|
712
|
+
private formatTime(date: Date | null): string {
|
713
|
+
if (!date) return '';
|
714
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
715
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
716
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
717
|
+
return `${hours}:${minutes}:${seconds}`;
|
710
718
|
}
|
711
719
|
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
base__range:this.range,
|
721
|
-
})}
|
722
|
-
>
|
723
|
-
<div class="calendar-config ${!this.range ? 'hidden' : ''}">
|
724
|
-
<div class="calendar-switcher">
|
725
|
-
<nile-tab-group centered @nile-tab-show="${this.onTypeChange}">
|
726
|
-
<nile-tab slot="nav" panel="absolute">Absolute</nile-tab>
|
727
|
-
<nile-tab slot="nav" panel="relative">Relative</nile-tab>
|
728
|
-
</nile-tab-group>
|
729
|
-
</div>
|
730
|
-
</div>
|
731
|
-
|
732
|
-
${this.type == 'relative' ? this.renderRelativeCalendar():''}
|
733
|
-
${this.type == 'absolute' ? this.renderAbsoluteCalendar():''}
|
720
|
+
private nextMonth(): void {
|
721
|
+
if (this.currentMonth === 11) {
|
722
|
+
this.currentMonth = 0;
|
723
|
+
this.currentYear++;
|
724
|
+
} else {
|
725
|
+
this.currentMonth++;
|
726
|
+
}
|
727
|
+
}
|
734
728
|
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
</div>
|
743
|
-
`}
|
744
|
-
</div>
|
745
|
-
`;
|
729
|
+
private prevMonth(): void {
|
730
|
+
if (this.currentMonth === 0) {
|
731
|
+
this.currentMonth = 11;
|
732
|
+
this.currentYear--;
|
733
|
+
} else {
|
734
|
+
this.currentMonth--;
|
735
|
+
}
|
746
736
|
}
|
747
737
|
|
748
|
-
|
749
|
-
|
750
|
-
*/
|
751
|
-
renderAbsoluteCalendar(){
|
752
|
-
return html`
|
753
|
-
<div class="calendar-wrapper">
|
754
|
-
<div class="calendar-container">
|
755
|
-
${this.renderMonth(
|
756
|
-
this.currentYear,
|
757
|
-
this.currentMonth,
|
758
|
-
this.getDaysArray(this.currentYear, this.currentMonth)
|
759
|
-
)}
|
760
|
-
</div>
|
761
|
-
</div>
|
762
|
-
${this.range ? html`
|
763
|
-
<div class="calender-input ${this.showManualInputs ? '' : 'hidden'}" >
|
764
|
-
<div class="from">
|
765
|
-
<nile-input
|
766
|
-
label="From"
|
767
|
-
class="manual-input"
|
768
|
-
value="${this.formatTime(this.startDate)}"
|
769
|
-
placeholder="HH:MM:SS" @nile-change="${this.handleStartTimeInput}"
|
770
|
-
> </nile-input>
|
771
|
-
</div>
|
738
|
+
private confimRange() {
|
739
|
+
if (this.startDate && this.endDate) {
|
772
740
|
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
</div>
|
782
|
-
`:''}
|
783
|
-
`
|
741
|
+
this.emitChangedData( {
|
742
|
+
startDate: this.startDate,
|
743
|
+
endDate: this.endDate,
|
744
|
+
});
|
745
|
+
if (this.dropdown) {
|
746
|
+
this.dropdown.hide();
|
747
|
+
}
|
748
|
+
}
|
784
749
|
}
|
785
750
|
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
<div class="duration-name">Minutes</div>
|
795
|
-
<div class="duration-units">
|
796
|
-
${this.renderTimeValues('minutes', [1, 5, 15, 30, 45])}
|
797
|
-
</div>
|
798
|
-
`}
|
751
|
+
convertTZ(date: Date, tzString: any) {
|
752
|
+
return new Date(
|
753
|
+
(typeof date === 'string' ? new Date(date) : date).toLocaleString(
|
754
|
+
'en-US',
|
755
|
+
{ timeZone: tzString }
|
756
|
+
)
|
757
|
+
);
|
758
|
+
}
|
799
759
|
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
`}
|
813
|
-
|
814
|
-
${this.hideDurationFields?.includes('weeks')?'':html`
|
815
|
-
<div class="duration-name">Weeks</div>
|
816
|
-
<div class="duration-units">
|
817
|
-
${this.renderTimeValues('weeks', [1, 2, 4, 6])}
|
818
|
-
</div>
|
819
|
-
`}
|
820
|
-
|
821
|
-
${this.hideDurationFields?.includes('months')?'':html`
|
822
|
-
<div class="duration-name">Months</div>
|
823
|
-
<div class="duration-units">
|
824
|
-
${this.renderTimeValues('months', [3, 6, 12, 15])}
|
825
|
-
</div>
|
826
|
-
`}
|
827
|
-
</div>
|
828
|
-
</div>
|
829
|
-
|
830
|
-
${this.range ? html`
|
831
|
-
<div>
|
832
|
-
<div class="unit-input-container">
|
833
|
-
<nile-input
|
834
|
-
class="manual-input duration-input"
|
835
|
-
label="Duration"
|
836
|
-
value="${this.selectedValue}"
|
837
|
-
@nile-input="${this.handleDurationChange}"
|
838
|
-
placeholder="Enter Value"
|
839
|
-
></nile-input>
|
760
|
+
onTypeChange(event: CustomEvent) {
|
761
|
+
this.type = event.detail.value;
|
762
|
+
}
|
763
|
+
getUTCDate(dateStr:any){
|
764
|
+
return new Date(
|
765
|
+
Date.UTC(
|
766
|
+
dateStr.slice(0, 4),
|
767
|
+
dateStr.slice(5, 7) - 1,
|
768
|
+
dateStr.slice(8, 10)
|
769
|
+
)
|
770
|
+
)
|
771
|
+
}
|
840
772
|
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
<nile-option value="days" class="${this.hideDurationFields?.includes('days')?'hidden':''}">Days</nile-option>
|
850
|
-
<nile-option value="weeks" class="${this.hideDurationFields?.includes('weeks')?'hidden':''}">Weeks</nile-option>
|
851
|
-
<nile-option value="months" class="${this.hideDurationFields?.includes('months')?'hidden':''}"> Months </nile-option>
|
852
|
-
</nile-select>
|
853
|
-
</div>
|
854
|
-
</div>
|
855
|
-
`:''}
|
856
|
-
`
|
773
|
+
emitChangedData(data:{startDate:Date,endDate:Date}|{value:any}){
|
774
|
+
this.emit('nile-changed',data);
|
775
|
+
this.emit('nile-change',data)
|
776
|
+
}
|
777
|
+
|
778
|
+
private getDaysArray(year: number, month: number): number[] {
|
779
|
+
const daysInMonth = new Date(year, month + 1, 0).getDate();
|
780
|
+
return Array.from({ length: daysInMonth }, (_, i) => i + 1);
|
857
781
|
}
|
858
782
|
}
|
859
783
|
|