@ember-eui/core 5.8.5 → 5.10.2

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.
Files changed (72) hide show
  1. package/addon/components/eui-checkbox-group/index.hbs +8 -0
  2. package/addon/components/eui-combo-box/index.hbs +1 -1
  3. package/addon/components/eui-combo-box/options/index.hbs +1 -0
  4. package/addon/components/eui-dual-range/index.ts +2 -2
  5. package/addon/components/eui-field-text/index.hbs +1 -0
  6. package/addon/components/eui-global-toast-list/index.ts +1 -1
  7. package/addon/components/eui-i18n/index.ts +9 -41
  8. package/addon/components/eui-icon/index.ts +2 -2
  9. package/addon/components/eui-markdown-editor/index.ts +2 -2
  10. package/addon/components/eui-portal/index.ts +2 -2
  11. package/addon/components/eui-range/index.ts +2 -2
  12. package/addon/components/eui-super-date-picker/date-popover/absolute-tab.hbs +42 -0
  13. package/addon/components/eui-super-date-picker/date-popover/absolute-tab.ts +79 -0
  14. package/addon/components/eui-super-date-picker/date-popover/datetime-picker.hbs +125 -0
  15. package/addon/components/eui-super-date-picker/date-popover/datetime-picker.ts +258 -0
  16. package/addon/components/eui-super-date-picker/date-popover/eui-date-popover-button.hbs +49 -0
  17. package/addon/components/eui-super-date-picker/date-popover/eui-date-popover-button.ts +49 -0
  18. package/addon/components/eui-super-date-picker/date-popover/eui-date-popover-content.hbs +42 -0
  19. package/addon/components/eui-super-date-picker/date-popover/eui-date-popover-content.ts +73 -0
  20. package/addon/components/eui-super-date-picker/date-popover/now-tab.hbs +45 -0
  21. package/addon/components/eui-super-date-picker/date-popover/relative-tab.hbs +47 -0
  22. package/addon/components/eui-super-date-picker/date-popover/relative-tab.ts +89 -0
  23. package/addon/components/eui-super-date-picker/eui-date-picker-range.hbs +22 -0
  24. package/addon/components/eui-super-date-picker/eui-quick-select-popover/eui-commonly-used-time-ranges.hbs +42 -0
  25. package/addon/components/eui-super-date-picker/eui-quick-select-popover/eui-quick-select.hbs +154 -0
  26. package/addon/components/eui-super-date-picker/eui-quick-select-popover/eui-quick-select.ts +103 -0
  27. package/addon/components/eui-super-date-picker/eui-quick-select-popover/eui-recently-used.hbs +48 -0
  28. package/addon/components/eui-super-date-picker/eui-quick-select-popover/index.hbs +60 -0
  29. package/addon/components/eui-super-date-picker/eui-quick-select-popover/index.ts +34 -0
  30. package/addon/components/eui-super-date-picker/eui-super-update-button.hbs +43 -0
  31. package/addon/components/eui-super-date-picker/index.hbs +123 -0
  32. package/addon/components/eui-super-date-picker/index.ts +220 -0
  33. package/addon/components/eui-super-date-picker/types/global.d.ts +52 -0
  34. package/addon/components/eui-super-date-picker/utils/date-utils.ts +59 -0
  35. package/addon/components/eui-super-date-picker/utils/index.ts +181 -0
  36. package/addon/components/eui-super-date-picker/utils/pretty-duration.ts +131 -0
  37. package/addon/components/eui-super-date-picker/utils/quick-select.ts +75 -0
  38. package/addon/components/eui-super-date-picker/utils/time-options.ts +216 -0
  39. package/addon/components/eui-tool-tip/index.ts +2 -2
  40. package/addon/components/text-block/index.hbs +25 -21
  41. package/addon/{components/eui-i18n → i18n}/util.ts +1 -6
  42. package/addon/modifiers/outside-click-detector.ts +2 -2
  43. package/addon/services/eui-i18n.ts +89 -0
  44. package/addon/utils/markdown/markdown-unified-plugins.d.ts +0 -14
  45. package/app/components/eui-super-date-picker/date-popover/absolute-tab.js +1 -0
  46. package/app/components/eui-super-date-picker/date-popover/datetime-picker.js +1 -0
  47. package/app/components/eui-super-date-picker/date-popover/eui-date-popover-button.js +1 -0
  48. package/app/components/eui-super-date-picker/date-popover/eui-date-popover-content.js +1 -0
  49. package/app/components/eui-super-date-picker/date-popover/now-tab.js +1 -0
  50. package/app/components/eui-super-date-picker/date-popover/relative-tab.js +1 -0
  51. package/app/components/eui-super-date-picker/eui-date-picker-range.js +1 -0
  52. package/app/components/eui-super-date-picker/eui-quick-select-popover/eui-commonly-used-time-ranges.js +1 -0
  53. package/app/components/eui-super-date-picker/eui-quick-select-popover/eui-quick-select.js +1 -0
  54. package/app/components/eui-super-date-picker/eui-quick-select-popover/eui-recently-used.js +1 -0
  55. package/app/components/eui-super-date-picker/eui-quick-select-popover/index.js +1 -0
  56. package/app/components/eui-super-date-picker/eui-super-update-button.js +1 -0
  57. package/app/components/eui-super-date-picker/index.js +1 -0
  58. package/app/services/eui-i18n.js +1 -0
  59. package/docs/forms/super-date-picker/demo/d01-picker.md +90 -0
  60. package/docs/forms/super-date-picker/index.md +16 -0
  61. package/package.json +7 -3
  62. package/tsconfig.json +1 -0
  63. package/addon/helpers/unique-id.ts +0 -23
  64. package/addon/i18n/index.ts +0 -8
  65. package/app/helpers/unique-id.js +0 -1
  66. package/app/i18n/index.js +0 -1
  67. package/docs/templates/super-date-picker/demo/d01-update-button.md +0 -10
  68. package/docs/templates/super-date-picker/demo/d02-quick-select-panels.md +0 -10
  69. package/docs/templates/super-date-picker/demo/d03-sizing.md +0 -10
  70. package/docs/templates/super-date-picker/demo/d04-auto-refresh.md +0 -11
  71. package/docs/templates/super-date-picker/demo/d05-elastic-pattern-with-kql.md +0 -10
  72. package/docs/templates/super-date-picker/index.md +0 -12
@@ -2,6 +2,14 @@
2
2
  (arg-or-default @valueKey "id")
3
3
  (arg-or-default @labelKey "label") as |valueKey labelKey|
4
4
  }}
5
+ {{!template-lint-disable}}
6
+ <input
7
+ tabindex="-1"
8
+ style="opacity: 0px; width:0px; height:0px; position: absolute; top: 40%; border:solid 1px transparent !important; margin:0px !important;"
9
+ class="fake-input-for-html-form-validity"
10
+ {{validatable-control @isInvalid}}
11
+ />
12
+ {{!template-lint-enable}}
5
13
  {{#if @legend}}
6
14
  <EuiFormFieldset @legend={{@legend}} @compressed={{@compressed}}>
7
15
  {{#each @options key=valueKey as |option|}}
@@ -63,7 +63,7 @@
63
63
  @beforeOptionsComponent={{@beforeOptionsComponent}}
64
64
  @placeholder={{@placeholder}}
65
65
  @searchPlaceholder={{@searchPlaceholder}}
66
- @optionsComponent={{component "eui-combo-box/options" rowHeight=@rowHeight}}
66
+ @optionsComponent={{component "eui-combo-box/options" rowHeight=@rowHeight class=@optionsClass}}
67
67
  @extra={{@extra}}
68
68
  @groupComponent={{component "eui-combo-box/group"}}
69
69
  @triggerClass={{class-names
@@ -25,6 +25,7 @@
25
25
  style="max-height: 200px; overflow-y: auto;"
26
26
  role="listbox"
27
27
  aria-controls="ember-power-select-trigger-{{@select.uniqueId}}"
28
+ class={{@class}}
28
29
  ...attributes
29
30
  {{did-insert this.addHandlers}}
30
31
  {{will-destroy this.removeHandlers}}
@@ -1,7 +1,7 @@
1
1
  import Component from '@glimmer/component';
2
2
  import { action } from '@ember/object';
3
3
  import { tracked } from '@glimmer/tracking';
4
- import { uniqueId } from '../../helpers/unique-id';
4
+ import { guidFor } from '@ember/object/internals';
5
5
  import { isWithinRange } from '../../utils/number';
6
6
 
7
7
  import { EuiRangeInputArgs } from '../eui-range-input/types';
@@ -87,7 +87,7 @@ export default class EuiDualRangeComponent extends Component<EuiDualRangeArgs> {
87
87
  @argOrDefault([]) levels!: EuiRangeLevel[];
88
88
 
89
89
  //State
90
- @tracked id: string = this.args.id || uniqueId();
90
+ @tracked id: string = this.args.id || guidFor({});
91
91
  @tracked hasFocus = false;
92
92
  @tracked rangeSliderRefAvailable = false;
93
93
  @tracked isPopoverOpen = false;
@@ -47,6 +47,7 @@
47
47
  disabled={{@disabled}}
48
48
  type="text"
49
49
  placeholder={{@placeholder}}
50
+ readonly={{@readOnly}}
50
51
  ...attributes
51
52
  {{validatable-control @isInvalid}}
52
53
  />
@@ -4,7 +4,7 @@ import { action } from '@ember/object';
4
4
  import { inject as service } from '@ember/service';
5
5
  import { sideMapping } from 'core/utils/css-mappings/eui-global-toast-list';
6
6
  import Timer from '../../utils/timer';
7
- import EuiToasterService, { EuiToastProps } from 'core/services/eui-toaster';
7
+ import EuiToasterService, { EuiToastProps } from '../../services/eui-toaster';
8
8
 
9
9
  type EuiToastSide = keyof typeof sideMapping;
10
10
  type ToastSide = EuiToastSide | string;
@@ -1,7 +1,6 @@
1
1
  import Component from '@glimmer/component';
2
- import { processStringToChildren } from './util';
3
- //@ts-ignore
4
- import { i18n, I18nShape } from '@ember-eui/core/i18n';
2
+ import { inject as service } from '@ember/service';
3
+ import type EuiI18n from '../../services/eui-i18n';
5
4
 
6
5
  interface Args {
7
6
  tokens?: string[];
@@ -9,62 +8,31 @@ interface Args {
9
8
  token?: string;
10
9
  default?: string;
11
10
  values?: { [key: string]: any };
12
- i18n?: I18nShape;
13
- }
14
-
15
- interface lookupTokenOptions {
16
- token: string;
17
- i18nMapping: I18nShape['mapping'];
18
- valueDefault: string;
19
- i18nMappingFunc?: (token: string) => string;
20
- values?: { [key: string]: any };
21
- render?: I18nShape['render'];
22
- }
23
-
24
- function lookupToken(options: lookupTokenOptions) {
25
- const {
26
- token,
27
- i18nMapping,
28
- valueDefault,
29
- i18nMappingFunc,
30
- values = {}
31
- } = options;
32
-
33
- let renderable = (i18nMapping && i18nMapping[token]) || valueDefault;
34
-
35
- const children = processStringToChildren(renderable, values, i18nMappingFunc);
36
- if (typeof children === 'string') {
37
- // likewise, `processStringToChildren` returns a string or ReactChild[] depending on
38
- // the type of `values`, so we will make the assumption that the default value is correct.
39
- return children;
40
- }
41
-
42
- // same reasons as above, we can't promise the transforms match the default's type
43
- return children;
11
+ i18n?: { mapping: { [key: string]: any } };
44
12
  }
45
13
 
46
14
  export default class EuiI18nComponent extends Component<Args> {
15
+ @service declare euiI18n: EuiI18n;
16
+
47
17
  get isI18nTokensShape() {
48
18
  return this.args.tokens != null;
49
19
  }
50
20
 
51
- get i18n() {
52
- return this.args.i18n || i18n;
53
- }
54
-
55
21
  get lookupedTokens() {
22
+ const lookupToken = this.euiI18n._lookupToken;
23
+
56
24
  if (this.isI18nTokensShape) {
57
25
  return this.args.tokens?.map((token, idx) =>
58
26
  lookupToken({
59
27
  token,
60
- i18nMapping: i18n.mapping,
28
+ i18nMapping: this.args.i18n?.mapping,
61
29
  valueDefault: this.args.defaults![idx]
62
30
  })
63
31
  );
64
32
  } else {
65
33
  return lookupToken({
66
34
  token: this.args.token!,
67
- i18nMapping: i18n.mapping,
35
+ i18nMapping: this.args.i18n?.mapping,
68
36
  valueDefault: this.args.default!,
69
37
  values: this.args.values
70
38
  });
@@ -6,7 +6,7 @@ import {
6
6
  colorToClassMap,
7
7
  typeToPathMap
8
8
  } from '../../utils/css-mappings/eui-icon';
9
- import { uniqueId } from '../../helpers/unique-id';
9
+ import { guidFor } from '@ember/object/internals';
10
10
  import { htmlSafe } from '@ember/template';
11
11
  import { getOwner } from '@ember/application';
12
12
 
@@ -178,7 +178,7 @@ export default class EuiIcon extends Component<EuiIconArgs> {
178
178
  // The svg aria-labelledby attribute gets this titleId
179
179
  // The svg title element gets this titleId as an id
180
180
  if (!this.args['aria-label'] && !this.args['aria-labelledby'] && title) {
181
- titleId = uniqueId();
181
+ titleId = guidFor({});
182
182
  }
183
183
  return titleId;
184
184
  }
@@ -11,7 +11,7 @@ import {
11
11
  defaultParsingPlugins,
12
12
  defaultProcessingPlugins
13
13
  } from '../../utils/markdown/plugins/markdown-default-plugins';
14
- import { uniqueId } from '../../helpers/unique-id';
14
+ import { guidFor } from '@ember/object/internals';
15
15
  import unified from 'unified';
16
16
  import * as MarkdownTooltipPlugin from '../../utils/markdown/plugins/markdown-tooltip';
17
17
  import {
@@ -121,7 +121,7 @@ export default class EuiMarkdownEditorComponent extends Component<EuiMarkdownEdi
121
121
  declare processingPluginList: typeof defaultProcessingPlugins;
122
122
 
123
123
  @tracked selectedNode: Node | null = null;
124
- @tracked editorId = this.args.editorId ?? uniqueId();
124
+ @tracked editorId = this.args.editorId ?? guidFor({});
125
125
  @tracked viewMode = this.args.initialViewMode || MODE_EDITING;
126
126
  @tracked textareaRef: HTMLTextAreaElement | null = null;
127
127
  @tracked previewRef: HTMLDivElement | null = null;
@@ -1,6 +1,6 @@
1
1
  import Component from '@glimmer/component';
2
2
  import { tracked } from '@glimmer/tracking';
3
- import { uniqueId } from '../../helpers/unique-id';
3
+ import { guidFor } from '@ember/object/internals';
4
4
  import { keysOf } from '../common';
5
5
 
6
6
  interface InsertPositionsMap {
@@ -32,7 +32,7 @@ export default class EuiPortal extends Component<EuiPortalArgs> {
32
32
  const { insert } = this.args;
33
33
 
34
34
  this.portalNode = document.createElement('div');
35
- this.portalNode.id = `${uniqueId()}-portal`;
35
+ this.portalNode.id = `${guidFor({})}-portal`;
36
36
 
37
37
  if (insert == null) {
38
38
  // no insertion defined, append to body
@@ -1,7 +1,7 @@
1
1
  import Component from '@glimmer/component';
2
2
  import { action } from '@ember/object';
3
3
  import { tracked } from '@glimmer/tracking';
4
- import { uniqueId } from '../../helpers/unique-id';
4
+ import { guidFor } from '@ember/object/internals';
5
5
  import { isWithinRange } from '../../utils/number';
6
6
  import { EuiRangeInputArgs } from '../eui-range-input/types';
7
7
  import { EuiRangeLevel } from '../eui-range-levels';
@@ -81,7 +81,7 @@ export default class EuiRangeComponent extends Component<EuiRangeArgs> {
81
81
  preventPopoverClose = false;
82
82
 
83
83
  //State
84
- @tracked id: string = this.args.id || uniqueId();
84
+ @tracked id: string = this.args.id || guidFor({});
85
85
  @tracked isPopoverOpen = false;
86
86
  ///
87
87
 
@@ -0,0 +1,42 @@
1
+ <div>
2
+ <EuiSuperDatePicker::DatePopover::DatetimePicker
3
+ @inline={{true}}
4
+ @showTimeSelect={{true}}
5
+ @shadow={{false}}
6
+ @onChange={{this.handleChange}}
7
+ @dateFormat={{@dateFormat}}
8
+ @timeFormat={{@timeFormat}}
9
+ @selected={{this.valueAsMoment}}
10
+ {{!--
11
+ locale={locale}
12
+ utcOffset={utcOffset} --}}
13
+ />
14
+ <EuiI18n
15
+ @token="euiAbsoluteTab.dateFormatError"
16
+ @default="Expected format: {dateFormat}"
17
+ @values={{@dateFormat}}
18
+ as |Token|
19
+ >
20
+ <Token as |dateFormatError|>
21
+ <EuiFormRow
22
+ class="euiSuperDatePicker__absoluteDateFormRow"
23
+ @isInvalid={{this.isTextInvalid}}
24
+ @error={{if this.isTextInvalid dateFormatError}}
25
+ >
26
+ <EuiFieldText
27
+ @isInvalid={{this.isTextInvalid}}
28
+ @value={{this.textInputValue}}
29
+ @compressed={{true}}
30
+ {{on "input" this.triggerChange}}
31
+ {{on "change" this.handleTextChange}}
32
+ >
33
+ <:prepend as |classes|>
34
+ <EuiFormLabel class={{classes}}>
35
+ {{@labelPrefix}}
36
+ </EuiFormLabel>
37
+ </:prepend>
38
+ </EuiFieldText>
39
+ </EuiFormRow>
40
+ </Token>
41
+ </EuiI18n>
42
+ </div>
@@ -0,0 +1,79 @@
1
+ import { action } from '@ember/object';
2
+ import Component from '@glimmer/component';
3
+ import moment, { LocaleSpecifier, Moment } from 'moment';
4
+ import dateMath from '@elastic/datemath';
5
+ import { tracked } from '@glimmer/tracking';
6
+
7
+ interface AbsoluteTabArgs {
8
+ dateFormat: string;
9
+ timeFormat: string;
10
+ locale?: LocaleSpecifier;
11
+ value: string;
12
+ onChange: (value: any) => void;
13
+ roundUp: boolean;
14
+ position: 'start' | 'end';
15
+ labelPrefix: string;
16
+ utcOffset?: number;
17
+ }
18
+
19
+ export default class AbsoluteTab extends Component<AbsoluteTabArgs> {
20
+ @tracked isTextInvalid: boolean;
21
+ @tracked textInputValue: string;
22
+ @tracked valueAsMoment: Moment | null;
23
+
24
+ constructor(owner: unknown, args: AbsoluteTabArgs) {
25
+ super(owner, args);
26
+
27
+ const parsedValue = dateMath.parse(this.args.value, {
28
+ roundUp: this.args.roundUp
29
+ });
30
+ const valueAsMoment =
31
+ parsedValue && parsedValue.isValid() ? parsedValue : moment();
32
+
33
+ const textInputValue = valueAsMoment
34
+ .locale(this.args.locale || 'en')
35
+ .format(this.args.dateFormat);
36
+
37
+ this.isTextInvalid = false;
38
+ this.textInputValue = textInputValue;
39
+ this.valueAsMoment = valueAsMoment;
40
+ }
41
+
42
+ @action handleChange(date: any) {
43
+ if (date === null) {
44
+ return;
45
+ }
46
+
47
+ this.args.onChange(date.toISOString());
48
+
49
+ const valueAsMoment = moment(date);
50
+ this.valueAsMoment = valueAsMoment;
51
+ this.textInputValue = valueAsMoment.format(this.args.dateFormat);
52
+ this.isTextInvalid = false;
53
+ }
54
+
55
+ @action handleTextChange(e: InputEvent) {
56
+ const valueAsMoment = moment(
57
+ (e.target as HTMLInputElement).value,
58
+ this.args.dateFormat,
59
+ true
60
+ );
61
+ const dateIsValid = valueAsMoment.isValid();
62
+ if (dateIsValid) {
63
+ this.args.onChange(valueAsMoment.toISOString());
64
+ }
65
+
66
+ this.textInputValue = (e.target as HTMLInputElement).value;
67
+ this.isTextInvalid = !dateIsValid;
68
+ this.valueAsMoment = dateIsValid ? valueAsMoment : null;
69
+ }
70
+
71
+ // `change` event on an input gets called after a `blur`
72
+ // blur the input and focus again to trigger the change event
73
+ // and call `handleTextChange` with the updated value
74
+ // and keep the field focused
75
+ @action triggerChange(e: InputEvent) {
76
+ (e.target as HTMLInputElement).blur();
77
+ (e.target as HTMLInputElement).focus();
78
+ }
79
+ }
@@ -0,0 +1,125 @@
1
+ <div class="euiDatePicker euiDatePicker--inline">
2
+ <EuiFormControlLayout
3
+ {{!-- @icon={{optionalIcon}}
4
+ @fullWidth={{fullWidth}}
5
+ @clear={selected && onClear ? { onClick: onClear } : undefined}
6
+ @isLoading={isLoading} --}}
7
+ >
8
+ <div class="react-datepicker">
9
+ <button
10
+ type="button"
11
+ class="react-datepicker__navigation react-datepicker__navigation--previous"
12
+ aria-label="Previous month"
13
+ {{on "click" this.decreaseMonth}}
14
+ >
15
+ <EuiIcon
16
+ @iconClasses="euiButtonIcon__icon"
17
+ @type="arrowLeft"
18
+ />
19
+ </button>
20
+ <button
21
+ type="button"
22
+ class="react-datepicker__navigation react-datepicker__navigation--next"
23
+ aria-label="Next month"
24
+ {{on "click" this.increaseMonth}}
25
+ >
26
+ <EuiIcon
27
+ @iconClasses="euiButtonIcon__icon {{@iconClasses}}"
28
+ @type="arrowRight"
29
+ />
30
+ </button>
31
+ <div class="react-datepicker__month-container">
32
+ <div class="react-datepicker__header">
33
+ <div class="react-datepicker__header__dropdown react-datepicker__header__dropdown--scroll">
34
+ <div class="react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--scroll">
35
+ {{!template-lint-disable}}
36
+ <div class="react-datepicker__month-read-view" style="padding: 0;">
37
+ <EuiFlexItem @grow="1">
38
+ <EuiSelect
39
+ @compressed={{true}}
40
+ @value={{this.month}}
41
+ @options={{this.monthNames}}
42
+ {{on "change" (pick "target.value" this.setMonth)}}
43
+ />
44
+ </EuiFlexItem>
45
+ </div>
46
+ </div>
47
+ <div class="react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--scroll">
48
+ {{!template-lint-disable}}
49
+ <div class="react-datepicker__year-read-view" style="padding: 0;">
50
+ <EuiFlexItem @grow="1">
51
+ <EuiSelect
52
+ @compressed={{true}}
53
+ @value={{this.year}}
54
+ @options={{this.years}}
55
+ {{on "change" (pick "target.value" (set this "year"))}}
56
+ />
57
+ </EuiFlexItem>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ <div class="react-datepicker__day-names">
62
+ <div class="react-datepicker__day-name">Su</div>
63
+ <div class="react-datepicker__day-name">Mo</div>
64
+ <div class="react-datepicker__day-name">Tu</div>
65
+ <div class="react-datepicker__day-name">We</div>
66
+ <div class="react-datepicker__day-name">Th</div>
67
+ <div class="react-datepicker__day-name">Fr</div>
68
+ <div class="react-datepicker__day-name">Sa</div>
69
+ </div>
70
+ </div>
71
+
72
+ <div class="react-datepicker__month react-datepicker__month--accessible">
73
+ {{#each this.days as |days|}}
74
+ <div class="react-datepicker__week">
75
+ {{#each days as |day|}}
76
+ <div
77
+ role="button"
78
+ class={{concat
79
+ "react-datepicker__day"
80
+ (if
81
+ (and
82
+ (not day.isOutside)
83
+ (this.isSameDayHelper this.year this.month day.day this.selectedDate)
84
+ )
85
+ " react-datepicker__day--selected"
86
+ )
87
+ (if
88
+ (this.isSameDayHelper this.year this.month day.day this.today)
89
+ " react-datepicker__day--today"
90
+ )
91
+ (if day.isOutside " react-datepicker__day--outside-month")
92
+ }}
93
+ {{on "click" (fn this.selectDate day)}}
94
+ >
95
+ <div class="react-datepicker__day-text">{{day.day}}</div>
96
+ </div>
97
+ {{/each}}
98
+ </div>
99
+ {{/each}}
100
+ </div>
101
+ </div>
102
+
103
+ <div class="react-datepicker__time-container">
104
+ <div class="react-datepicker__time">
105
+ <div class="react-datepicker__time-box react-datepicker__time-box--accessible">
106
+ <ul class="react-datepicker__time-list">
107
+ {{#each this.times as |time|}}
108
+ <li
109
+ role="option"
110
+ class={{concat
111
+ "react-datepicker__time-list-item"
112
+ (if (eq time this.selectedTime) " react-datepicker__time-list-item--selected")
113
+ }}
114
+ {{on "click" (fn this.selectTime time)}}
115
+ >
116
+ {{time}}
117
+ </li>
118
+ {{/each}}
119
+ </ul>
120
+ </div>
121
+ </div>
122
+ </div>
123
+ </div>
124
+ </EuiFormControlLayout>
125
+ </div>