Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(input-time-picker, time-picker): add time-picker and input-time-picker components #1736

Merged
merged 232 commits into from
Jun 7, 2021
Merged
Show file tree
Hide file tree
Changes from 224 commits
Commits
Show all changes
232 commits
Select commit Hold shift + click to select a range
b96c84d
feat(calcite-time): basic time input using calcite-input
eriklharper Sep 8, 2020
f8785ee
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Sep 9, 2020
af5f32a
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Sep 18, 2020
9328d86
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Sep 22, 2020
24d2df3
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Sep 23, 2020
9e608af
wip: fleshing out more UI
eriklharper Sep 23, 2020
468420c
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Oct 12, 2020
5e704ec
time picker styling, start to keydown functionality
eriklharper Oct 15, 2020
502d43f
typing am and pm completes
eriklharper Oct 15, 2020
4667b05
feat(calcite-time): up and down arrows and zero padding of single-dig…
eriklharper Oct 15, 2020
2f57c8f
feat(calcite-time): up and down buttons function for hour and am/pm
eriklharper Oct 16, 2020
8d1594d
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Dec 30, 2020
e715226
adding guid support
eriklharper Dec 30, 2020
cb1ae8a
renaming to calcite-time-picker
eriklharper Dec 31, 2020
4be659f
refactor: splitting calcite-time into calcite-time-picker and calcite…
eriklharper Dec 31, 2020
066fd9d
feat(calcite-time-picker): increment/decrement minute
eriklharper Dec 31, 2020
244e2df
fixing hour decrement behavior to match native date input and refacto…
eriklharper Dec 31, 2020
6fde242
restoring tab behavior
eriklharper Jan 4, 2021
609e119
layout refactor
eriklharper Jan 7, 2021
b8950e6
small scale hour and minute focus and hover styles
eriklharper Jan 8, 2021
7240257
medium and large scales
eriklharper Jan 8, 2021
47e9649
minute keydown constraints and behavior
eriklharper Jan 11, 2021
0d77a30
refactor: using a div for colons like the native time input does to g…
eriklharper Jan 13, 2021
cc670bc
fixing minuteKey down logic
eriklharper Jan 13, 2021
b2305d3
refactor(calcite-time-picker): taking colon out of the document flow …
eriklharper Jan 14, 2021
cba46d8
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Jan 14, 2021
bfd47e2
refactor(time-picker): putting colon back into the document flow
eriklharper Jan 15, 2021
0995c1e
refactor(time-picker): switching from row-based layout to column-base…
eriklharper Jan 15, 2021
8318887
adding step prop and setting name on calcite-input to get native form…
eriklharper Jan 20, 2021
6492862
reflecting changes in time-picker up to input-time-picker
eriklharper Jan 21, 2021
cfbc742
matching aria attribute behavior with native time input
eriklharper Jan 21, 2021
d5a81d2
DRYing up increment and decrement logic for minutes and seconds since…
eriklharper Jan 22, 2021
3c6594b
correcting time picker width for seconds
eriklharper Jan 22, 2021
8df516d
converting hour to 24 format. Next step is to display 12-hour with b…
eriklharper Jan 26, 2021
45080ec
24 hour support
eriklharper Jan 27, 2021
78f9c8c
renaming hourFormat to hourDisplay so as not to confuse the internal …
eriklharper Jan 27, 2021
195befb
fixing up demo
eriklharper Jan 27, 2021
3345d94
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Jan 27, 2021
18486e1
correcting paths for demo assets
eriklharper Jan 28, 2021
e32575e
fixing increment/decrement hour logic to match native. Emitting chan…
eriklharper Jan 28, 2021
ceb0b26
correcting hour down key logic to work for both 12 and 24 hour formats
eriklharper Jan 28, 2021
47f48c4
changing name to hour-display-format
eriklharper Jan 29, 2021
7cc84a1
allowing zero to be typed for hour in 12 hour mode but displaying 12 …
eriklharper Jan 29, 2021
4966514
allowing user to type 00 for hour in 12 hour format, but switching di…
eriklharper Jan 30, 2021
ec77573
12-hour am/pm formatting
eriklharper Jan 30, 2021
7f179dd
left/right arrow key support
eriklharper Feb 1, 2021
cc0307e
clearing prop warnings and other cleanup
eriklharper Feb 2, 2021
1475a39
clearing prop warnings on calcite-input
eriklharper Feb 2, 2021
950172f
fixing input-time-picker change listener
eriklharper Feb 2, 2021
547bc53
refactoring to only emit change events from time-picker when the Time…
eriklharper Feb 3, 2021
95b96d6
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Feb 3, 2021
d1aadc8
testing removing eslint line from command line
eriklharper Feb 3, 2021
320a30c
changing new eslint rules affecting code on this branch to warn
eriklharper Feb 3, 2021
f3319d0
typing the LOC affected by strict-mutable lint rule
eriklharper Feb 3, 2021
23c0d8f
correcting eslint issues in calcite-input
eriklharper Feb 3, 2021
6bc234d
removing id on calcite-input and typing step prop
eriklharper Feb 3, 2021
4fb6f7d
refactoring to use a setTime method that ampm can also use to consoli…
eriklharper Feb 4, 2021
f362bc6
label support
eriklharper Feb 4, 2021
ab50cdc
removing unneeded state from input-time-picker and just calculating t…
eriklharper Feb 4, 2021
a4e3c8b
fixing bug when switching am/pm when initial value is 00:00 resulting…
eriklharper Feb 4, 2021
3be6fb3
feat(input-time-picker): calcite-popover support
eriklharper Feb 5, 2021
3ac7a04
fleshing out dark demos
eriklharper Feb 5, 2021
e958159
fine tuning popover click interaction. Clicking input shows the time…
eriklharper Feb 6, 2021
e0c42c3
closing time picker popup on blur
eriklharper Feb 9, 2021
d19757e
closing popup on keyboard input blur
eriklharper Feb 10, 2021
496c32a
preventing chromium's default time picker ui from popping up when the…
eriklharper Feb 10, 2021
aeab095
theme support for calcite-time-picker
eriklharper Feb 10, 2021
0d91643
fixing label clicks and dark mode on input-time-picker
eriklharper Feb 11, 2021
f674c31
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Feb 16, 2021
76c1e83
getting closer to handling browsers that don't support the time input
eriklharper Feb 20, 2021
4599c25
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Feb 24, 2021
62f4b8d
setting text input's value back to the last valid value on blur if th…
eriklharper Feb 24, 2021
f15c587
setFocus method
eriklharper Feb 24, 2021
ef3641d
safari support
eriklharper Feb 26, 2021
3419b87
feat(time-picker): setFocus method
eriklharper Mar 1, 2021
ec5a994
fixing safari/firefox issue where clicking the incr/decr buttons clos…
eriklharper Mar 2, 2021
fe6e392
couple fixes: displaying parsed time value on initial load and settin…
eriklharper Mar 2, 2021
f1f7a84
fixing super basic tests for time-picker
eriklharper Mar 2, 2021
cfc1766
focusable test for time-picker
eriklharper Mar 2, 2021
d671aaa
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 2, 2021
52a4c8a
lots of keyboard tests
eriklharper Mar 3, 2021
3610746
hour display format tests and cleanup
eriklharper Mar 3, 2021
b59832e
time behavior and button tests
eriklharper Mar 4, 2021
49ab9e9
finally got letter tests passing
eriklharper Mar 5, 2021
f34a904
single digit zero padding test
eriklharper Mar 5, 2021
8239298
same test but for 12 hour format
eriklharper Mar 5, 2021
3482936
valid hour typing test for 12 hour format
eriklharper Mar 5, 2021
b327da2
double digit typing tests for hour, minute, second
eriklharper Mar 5, 2021
408bcf6
typing 00 and ampm typing tests
eriklharper Mar 5, 2021
101c1bf
formatting tweaks to time-picker demo
eriklharper Mar 6, 2021
139318a
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 6, 2021
29d4763
fix: preventing negative numbers and numbers out of range from being …
eriklharper Mar 6, 2021
5a18bf5
real fix for the last bug and corresponding test
eriklharper Mar 6, 2021
c81f972
basic tests for input-time-picker
eriklharper Mar 8, 2021
9028b0e
restoring demo-form
eriklharper Mar 8, 2021
d47804d
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 8, 2021
eaaa3a5
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 8, 2021
112aa49
finally got the comprehensive test of all time values working
eriklharper Mar 11, 2021
c5fa565
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 11, 2021
78fac0e
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 11, 2021
20913b1
reconciling unrelated diffs on master
eriklharper Mar 11, 2021
2642b60
removing theme defaults
eriklharper Mar 11, 2021
f9033b5
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 11, 2021
3a26f2b
refactoring hour, minute, second test so that it doesn't timeout but …
eriklharper Mar 11, 2021
52b5b02
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 11, 2021
138f9d3
12-hour time changing test
eriklharper Mar 12, 2021
c2b2709
a decent start to the stories
eriklharper Mar 12, 2021
ec7f7f9
fix(time-picker): formatting hour, minute and second correctly on ini…
eriklharper Mar 12, 2021
751e5df
real fix for displaying correct values on load in time-picker
eriklharper Mar 12, 2021
783050a
review fix: https://github.com/Esri/calcite-components/pull/1736#disc…
eriklharper Mar 12, 2021
530e862
good story baseline
eriklharper Mar 12, 2021
ef3ac11
refactor: removing corner-appearance prop from calcite-popover and ju…
eriklharper Mar 12, 2021
393c338
pr review: https://github.com/Esri/calcite-components/pull/1736#discu…
eriklharper Mar 12, 2021
a8ce07f
refactor: moving time-picker utils to main utils dir https://github.c…
eriklharper Mar 12, 2021
0949754
pr review: https://github.com/Esri/calcite-components/pull/1736#discu…
eriklharper Mar 12, 2021
6fec99a
feat(time-picker): intl props for aria-labels https://github.com/Esri…
eriklharper Mar 12, 2021
86fbc4a
removing mistakenly added import
eriklharper Mar 12, 2021
6b079d1
pr review fix https://github.com/Esri/calcite-components/pull/1736#di…
eriklharper Mar 13, 2021
3fe5cbf
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 13, 2021
f991edb
making guid internal https://github.com/Esri/calcite-components/pull/…
eriklharper Mar 13, 2021
fa43eb5
Resources file for CSS classes
eriklharper Mar 15, 2021
e47f79c
updating tests to use css resources and tailwindify-ing the css
eriklharper Mar 15, 2021
ade03f3
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 15, 2021
96042a6
renaming ampm to meridiem and updating time-picker tests to use CSS r…
eriklharper Mar 15, 2021
84e12ba
fixing icon names
eriklharper Mar 15, 2021
21d8348
pr review: https://github.com/Esri/calcite-components/pull/1736#discu…
eriklharper Mar 15, 2021
73b7afc
pr review changes, mostly stylistic and cleanup for simplicity
eriklharper Mar 15, 2021
1963c98
fine-tuning aria roles
eriklharper Mar 16, 2021
cbecf51
removing unneeded click listener on calcite-input and restoring origi…
eriklharper Mar 16, 2021
e87e458
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 16, 2021
ba932e2
refactor(calcite-input): using an explicit click handler on the host …
eriklharper Mar 16, 2021
017cfb8
beefing up accessibility with appropriate aria roles, misc fixes
eriklharper Mar 18, 2021
384d201
removing guid and id from calcite-input and updating the accessible t…
eriklharper Mar 18, 2021
bc4be64
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 18, 2021
a388267
refactor(time-picker): replacing "--" with null for all time values
eriklharper Mar 18, 2021
92a343e
refactoring out all null checks
eriklharper Mar 19, 2021
77b3bbe
fixing broken time-picker tests introduced by previous commit
eriklharper Mar 19, 2021
d77c6e3
using plain text input instead of time input
eriklharper Mar 19, 2021
0e76fc7
consolidating focus calls to setFocus
eriklharper Mar 19, 2021
58a6a5b
using padStart to format time values less than 10
eriklharper Mar 19, 2021
3cfe1fd
fixing test
eriklharper Mar 19, 2021
a85e666
renaming utils: formatNumberAsTimeString > zeroPadNumber, convertStri…
eriklharper Mar 19, 2021
509e976
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 19, 2021
492d16d
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper Mar 19, 2021
3f1f0b8
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Mar 19, 2021
e6f547b
checking out popover.scss from master
eriklharper Mar 19, 2021
b7353ed
restoring popover change
eriklharper Mar 19, 2021
c37ea02
input time picker change event. Need to refactor calcite-input to re…
eriklharper Mar 20, 2021
cbd5afb
pr review changes
eriklharper Mar 23, 2021
43f58a5
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Apr 5, 2021
7bcc37c
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Apr 9, 2021
b3d0fe1
tailwinding font sizes
eriklharper Apr 9, 2021
96adaba
review changes
eriklharper Apr 9, 2021
9cd8d3a
moving getMeridem to time util
eriklharper Apr 9, 2021
f5d4d66
getMeridiemHour util function
eriklharper Apr 9, 2021
5e5dd8c
using textContent in demo
eriklharper Apr 9, 2021
12dbc17
adding intl props to input-time-picker for eventual passing through
eriklharper Apr 9, 2021
46c9f5c
swapping open state for an active prop and other review changes
eriklharper Apr 16, 2021
c468c35
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Apr 16, 2021
f06e735
cleaning up and removing console warning
eriklharper Apr 16, 2021
7f6fb1a
adding preventdefault support, fixing some broken tests and moving th…
eriklharper Apr 19, 2021
a9c20e8
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Apr 20, 2021
bc6af66
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Apr 20, 2021
b72b0da
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Apr 20, 2021
6a472cc
removing name reflect test
eriklharper Apr 21, 2021
3c70f67
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper May 3, 2021
2b62450
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 3, 2021
bef19b2
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 4, 2021
e8c6520
updating input-time-picker's value in response to programmatic change…
eriklharper May 5, 2021
ae9aad5
input-time-picker only emits change events once each time the actual …
eriklharper May 6, 2021
8e113e5
correcting event test
eriklharper May 6, 2021
c4000e2
simplifying blur handler logic
eriklharper May 6, 2021
8a05665
adding additional blur tests
eriklharper May 6, 2021
06d8dfa
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 6, 2021
bea1bae
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper May 6, 2021
a52c2d2
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper May 6, 2021
7f22e92
fixing broken input test. This change was an artifact from a previou…
eriklharper May 6, 2021
b7ecf3b
input-time-picker now correctly responds to external changes on its i…
eriklharper May 7, 2021
3c254c3
Merge branch '407/calcite-time' of github.com:Esri/calcite-components…
eriklharper May 7, 2021
0718d0f
removing restore prev value test since we want to honor the user's ty…
eriklharper May 7, 2021
26212c7
squelching step prop warnings in calcite-input
eriklharper May 8, 2021
e183a27
restoring step prop types back to what it was since it doesn't get ri…
eriklharper May 8, 2021
e10363c
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 8, 2021
4ec4e99
fixing up input-time-picker to respond to direct value changes. Emit…
eriklharper May 10, 2021
f5c3f8a
fixing bug where one two many external change events were emitted whe…
eriklharper May 10, 2021
a3d3e8b
changing step type to number for calcite-input to suppress type chang…
eriklharper May 11, 2021
400bc1d
adding additional checks in input
eriklharper May 11, 2021
7435576
fixing issue where a freshly typed new value wasn't showing up after …
eriklharper May 11, 2021
51de68d
walking back input step changes and moving the step mutation into com…
eriklharper May 11, 2021
1b8f009
restoring step-related input tests
eriklharper May 11, 2021
fae9411
adding preventDefault test and changes to make it work
eriklharper May 12, 2021
efcf98c
adding additional test detail to preventDefault case
eriklharper May 12, 2021
977b4bd
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 20, 2021
bf4a185
resolving diff in src/index.html
eriklharper May 20, 2021
095fb99
using numberKeys from key.ts instead of time.ts
eriklharper May 20, 2021
c413c20
nesting reduction in getMeridiemHour
eriklharper May 20, 2021
0723d2d
deprecating stringIsValidNumber in favor of isValidNumber from number…
eriklharper May 20, 2021
1de2a07
more meaningful function names
eriklharper May 20, 2021
a79ed48
removing unnecessary reflection of props
eriklharper May 20, 2021
b87e274
creating HourDisplayFormat type
eriklharper May 20, 2021
616fac4
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 20, 2021
be6efdd
correcting reflect tests, moving intl props into resources.ts
eriklharper May 20, 2021
9db0aea
enterKeyPressed helper method
eriklharper May 20, 2021
832d86d
handling enter and space interaction for a11y compliance. Prevents s…
eriklharper May 21, 2021
188529f
getting rid of stencil console warning
eriklharper May 21, 2021
2681434
variable rename
eriklharper May 24, 2021
c7509a1
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper May 24, 2021
4800a47
deprecating theme attributes
eriklharper May 24, 2021
a8c79dc
removing unsupported use case from time-picker demo
eriklharper May 24, 2021
ddfe2fb
removing invalid workflow from demo
eriklharper May 24, 2021
e973858
deprecating external value change event behavior since it is not a va…
eriklharper May 24, 2021
e0ebfad
prefixing referenceElementId guid with some text to keep it from bomb…
eriklharper May 24, 2021
fa07ce5
resetting where this.step is being set because it doesn't make the st…
eriklharper May 25, 2021
8b8a172
commenting out tests that need refactor
eriklharper May 25, 2021
ea653b4
restoring external value changing behavior in input-time-picker. fix…
eriklharper May 25, 2021
86c019e
adding back in external value changing tests
eriklharper May 25, 2021
a4f07eb
deprecating setInputElValue method on input
eriklharper May 25, 2021
c43be98
deprecating public setValue method on input
eriklharper May 25, 2021
dbbdc83
fixing bug where setting the value programmatically doesn't work the …
eriklharper May 25, 2021
c0cf6d0
fixing error on console caused by last commit
eriklharper May 25, 2021
93e0d45
removing windowClickHandler
eriklharper May 25, 2021
4f88027
converting input-time-picker to shadow dom, tests passing
eriklharper Jun 1, 2021
fbba56f
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Jun 1, 2021
bec792a
adding new components to config as a single bundle
eriklharper Jun 2, 2021
fbcf0a7
boolean defaults, intl rename, removing event detail
eriklharper Jun 4, 2021
968a8ba
using BEM to name css resources
eriklharper Jun 5, 2021
36a8be7
moar review comments
eriklharper Jun 7, 2021
1c2944a
using getKey helper
eriklharper Jun 7, 2021
c2a3799
adding isActivationKey and isSpacebar key util helpers
eriklharper Jun 7, 2021
0fa401e
using connectedCallback where possible
eriklharper Jun 7, 2021
c652e51
Merge branch 'master' of github.com:Esri/calcite-components into 407/…
eriklharper Jun 7, 2021
e3f97ea
fixing dark theme usage
eriklharper Jun 7, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,318 @@
import { newE2EPage } from "@stencil/core/testing";
import { accessible, defaults, focusable, reflects, renders } from "../../tests/commonTests";
import { formatTimePart } from "../../utils/time";

describe("calcite-input-time-picker", () => {
it("renders", async () => renders("calcite-input-time-picker"));

it("is accessible", async () =>
accessible(`
<label>
Input Time Picker
<calcite-input-time-picker name="test"></calcite-input-time-picker>
</label>
`));

it("has defaults", async () =>
defaults("calcite-input-time-picker", [
{ propertyName: "scale", defaultValue: "m" },
{ propertyName: "step", defaultValue: 60 }
]));

it("reflects", async () =>
reflects(`calcite-input-time-picker`, [
{ propertyName: "active", value: true },
{ propertyName: "disabled", value: true },
{ propertyName: "scale", value: "m" }
]));

it("should focus the input when setFocus is called", async () =>
focusable(`calcite-input-time-picker`, {
shadowFocusTargetSelector: "input"
}));

it("opens the time picker on input keyboard focus", async () => {
const page = await newE2EPage({
html: `<calcite-input-time-picker></calcite-input-time-picker>`
});
const popover = await page.find("calcite-input-time-picker >>> calcite-popover");

await page.keyboard.press("Tab");
await page.waitForChanges();

expect(await popover.getProperty("open")).toBe(true);
});

it("opens the time picker on input click", async () => {
const page = await newE2EPage({
html: `<calcite-input-time-picker></calcite-input-time-picker>`
});
const input = await page.find("calcite-input-time-picker >>> calcite-input");
const popover = await page.find("calcite-input-time-picker >>> calcite-popover");

await input.click();
await page.waitForChanges();

expect(await popover.getProperty("open")).toBe(true);
});

it("changing hour, minute and second values reflects in the input, input-time-picker and time-picker for 24-hour display format", async () => {
const page = await newE2EPage({
html: `<calcite-input-time-picker hour-display-format="24" step="1"></calcite-input-time-picker>`
});

const inputTimePicker = await page.find("calcite-input-time-picker");
const input = await page.find("calcite-input-time-picker >>> calcite-input");
const timePicker = await page.find("calcite-input-time-picker >>> calcite-time-picker");

for (let second = 0; second < 10; second++) {
const date = new Date(0);
date.setSeconds(second);

const expectedValue = date.toISOString().substr(11, 8);
const expectedHour = expectedValue.substr(0, 2);
const expectedMinute = expectedValue.substr(3, 2);
const expectedSecond = expectedValue.substr(6, 2);

inputTimePicker.setProperty("value", expectedValue);

await page.waitForChanges();

const inputValue = await input.getProperty("value");
const inputTimePickerValue = await inputTimePicker.getProperty("value");
const timePickerHourValue = await timePicker.getProperty("hour");
const timePickerMinuteValue = await timePicker.getProperty("minute");
const timePickerSecondValue = await timePicker.getProperty("second");

expect(inputValue).toBe(expectedValue);
expect(inputTimePickerValue).toBe(expectedValue);
expect(timePickerHourValue).toBe(expectedHour);
expect(timePickerMinuteValue).toBe(expectedMinute);
expect(timePickerSecondValue).toBe(expectedSecond);
}

for (let minute = 0; minute < 10; minute++) {
const date = new Date(0);
date.setMinutes(minute);

const expectedValue = date.toISOString().substr(11, 8);
const expectedHour = expectedValue.substr(0, 2);
const expectedMinute = expectedValue.substr(3, 2);
const expectedSecond = expectedValue.substr(6, 2);

inputTimePicker.setProperty("value", expectedValue);

await page.waitForChanges();

const inputValue = await input.getProperty("value");
const inputTimePickerValue = await inputTimePicker.getProperty("value");
const timePickerHourValue = await timePicker.getProperty("hour");
const timePickerMinuteValue = await timePicker.getProperty("minute");
const timePickerSecondValue = await timePicker.getProperty("second");

expect(inputValue).toBe(expectedValue);
expect(inputTimePickerValue).toBe(expectedValue);
expect(timePickerHourValue).toBe(expectedHour);
expect(timePickerMinuteValue).toBe(expectedMinute);
expect(timePickerSecondValue).toBe(expectedSecond);
}

for (let hour = 0; hour < 10; hour++) {
const date = new Date(0);
date.setHours(hour);

const expectedValue = date.toISOString().substr(11, 8);
const expectedHour = expectedValue.substr(0, 2);
const expectedMinute = expectedValue.substr(3, 2);
const expectedSecond = expectedValue.substr(6, 2);

inputTimePicker.setProperty("value", expectedValue);

await page.waitForChanges();

const inputValue = await input.getProperty("value");
const inputTimePickerValue = await inputTimePicker.getProperty("value");
const timePickerHourValue = await timePicker.getProperty("hour");
const timePickerMinuteValue = await timePicker.getProperty("minute");
const timePickerSecondValue = await timePicker.getProperty("second");

expect(inputValue).toBe(expectedValue);
expect(inputTimePickerValue).toBe(expectedValue);
expect(timePickerHourValue).toBe(expectedHour);
expect(timePickerMinuteValue).toBe(expectedMinute);
expect(timePickerSecondValue).toBe(expectedSecond);
}
});

it("changing hour, minute and second values reflects in the input, input-time-picker and time-picker for 12-hour display format", async () => {
const page = await newE2EPage({
html: `<calcite-input-time-picker hour-display-format="12" step="1"></calcite-input-time-picker>`
});

const inputTimePicker = await page.find("calcite-input-time-picker");
const input = await page.find("calcite-input-time-picker >>> calcite-input");
const timePicker = await page.find("calcite-input-time-picker >>> calcite-time-picker");

for (let second = 0; second < 10; second++) {
const date = new Date(0);
date.setSeconds(second);

const expectedValue = date.toISOString().substr(11, 8);
const expectedHour = expectedValue.substr(0, 2);
const expectedHourAsNumber = parseInt(expectedValue.substr(0, 2));
const expectedDisplayHour =
expectedHourAsNumber > 12
? formatTimePart(expectedHourAsNumber - 12)
: expectedHourAsNumber === 0
? "12"
: formatTimePart(expectedHourAsNumber);
const expectedMinute = expectedValue.substr(3, 2);
const expectedSecond = expectedValue.substr(6, 2);

inputTimePicker.setProperty("value", expectedValue);

await page.waitForChanges();

const inputValue = await input.getProperty("value");
const inputTimePickerValue = await inputTimePicker.getProperty("value");
const timePickerHourValue = await timePicker.getProperty("hour");
const timePickerMinuteValue = await timePicker.getProperty("minute");
const timePickerSecondValue = await timePicker.getProperty("second");

expect(inputValue).toBe(expectedValue);
expect(inputTimePickerValue).toBe(expectedValue);
expect(timePickerHourValue).toBe(expectedHour);
expect(timePickerMinuteValue).toBe(expectedMinute);
expect(timePickerSecondValue).toBe(expectedSecond);
}

for (let minute = 0; minute < 10; minute++) {
const date = new Date(0);
date.setMinutes(minute);

const expectedValue = date.toISOString().substr(11, 8);
const expectedHour = expectedValue.substr(0, 2);
const expectedHourAsNumber = parseInt(expectedValue.substr(0, 2));
const expectedDisplayHour =
expectedHourAsNumber > 12
? formatTimePart(expectedHourAsNumber - 12)
: expectedHourAsNumber === 0
? "12"
: formatTimePart(expectedHourAsNumber);
const expectedMinute = expectedValue.substr(3, 2);
const expectedSecond = expectedValue.substr(6, 2);

inputTimePicker.setProperty("value", expectedValue);

await page.waitForChanges();

const inputValue = await input.getProperty("value");
const inputTimePickerValue = await inputTimePicker.getProperty("value");
const timePickerHourValue = await timePicker.getProperty("hour");
const timePickerMinuteValue = await timePicker.getProperty("minute");
const timePickerSecondValue = await timePicker.getProperty("second");

expect(inputValue).toBe(expectedValue);
expect(inputTimePickerValue).toBe(expectedValue);
expect(timePickerHourValue).toBe(expectedHour);
expect(timePickerMinuteValue).toBe(expectedMinute);
expect(timePickerSecondValue).toBe(expectedSecond);
}

for (let hour = 0; hour < 10; hour++) {
const date = new Date(0);
date.setHours(hour);

const expectedValue = date.toISOString().substr(11, 8);
const expectedHour = expectedValue.substr(0, 2);
const expectedHourAsNumber = parseInt(expectedValue.substr(0, 2));
const expectedDisplayHour =
expectedHourAsNumber > 12
? formatTimePart(expectedHourAsNumber - 12)
: expectedHourAsNumber === 0
? "12"
: formatTimePart(expectedHourAsNumber);
const expectedMinute = expectedValue.substr(3, 2);
const expectedSecond = expectedValue.substr(6, 2);

inputTimePicker.setProperty("value", expectedValue);

await page.waitForChanges();

const inputValue = await input.getProperty("value");
const inputTimePickerValue = await inputTimePicker.getProperty("value");
const timePickerHourValue = await timePicker.getProperty("hour");
const timePickerMinuteValue = await timePicker.getProperty("minute");
const timePickerSecondValue = await timePicker.getProperty("second");

expect(inputValue).toBe(expectedValue);
expect(inputTimePickerValue).toBe(expectedValue);
expect(timePickerHourValue).toBe(expectedHour);
expect(timePickerMinuteValue).toBe(expectedMinute);
expect(timePickerSecondValue).toBe(expectedSecond);
}
});

it("appropriately triggers calciteInputTimePickerChange event when the user types a value", async () => {
const page = await newE2EPage();
await page.setContent(`<calcite-input-time-picker step="1"></calcite-input-time-picker>`);

const inputTimePicker = await page.find("calcite-input-time-picker");
const changeEvent = await inputTimePicker.spyOnEvent("calciteInputTimePickerChange");

expect(changeEvent).toHaveReceivedEventTimes(0);

await page.keyboard.press("Tab");
await page.keyboard.press("1");
await page.keyboard.press(":");
await page.keyboard.press("2");

await page.waitForChanges();

expect(changeEvent).toHaveReceivedEventTimes(1);

await page.keyboard.press(":");
await page.keyboard.press("3");

await page.waitForChanges();

expect(changeEvent).toHaveReceivedEventTimes(2);
});

it("formats valid typed time value appropriately on blur", async () => {
const page = await newE2EPage();
await page.setContent(`<calcite-input-time-picker step="1"></calcite-input-time-picker><input>`);

const inputTimePicker = await page.find("calcite-input-time-picker");

await page.keyboard.press("Tab");
await page.keyboard.type("2:3:4");
await page.keyboard.press("Tab");
await page.waitForChanges();

expect(await inputTimePicker.getProperty("value")).toBe("02:03:04");
});

it("resets to previous value when default event behavior is prevented", async () => {
const page = await newE2EPage({
html: `<calcite-input-time-picker value="14:59"></calcite-input-time-picker>`
});
const inputTimePicker = await page.find("calcite-input-time-picker");

await page.evaluate(() => {
const inputTimePicker = document.querySelector("calcite-input-time-picker");
inputTimePicker.addEventListener("calciteInputTimePickerChange", (event) => {
event.preventDefault();
});
});

expect(await inputTimePicker.getProperty("value")).toBe("14:59");

await page.keyboard.press("Tab");
await page.keyboard.press(":");
await page.keyboard.press("5");
await page.waitForChanges();

expect(await inputTimePicker.getProperty("value")).toBe("14:59");
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
:host {
@apply inline-block
select-none;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { number, select, text } from "@storybook/addon-knobs";
import { boolean } from "../../../.storybook/helpers";
import { darkBackground } from "../../../.storybook/utils";
import readme from "./readme.md";
import { html } from "../../tests/utils";

export default {
title: "Components/Controls/Time/Input Time Picker",

parameters: {
notes: readme
}
};

export const LightTheme = (): string => html`
<calcite-input-time-picker
${boolean("disabled", false)}
${boolean("hidden", false)}
hour-display-format="${select("hour-display-format", ["12", "24"], "12")}"
name="${text("name", "light")}"
scale="${select("scale", ["s", "m", "l"], "m")}"
step="${number("step", 1)}"
value="${text("value", "10:37")}"
>
</calcite-input-time-picker>
`;

export const DarkTheme = (): string => html`
<calcite-input-time-picker
${boolean("disabled", false)}
${boolean("hidden", false)}
hour-display-format="${select("hour-display-format", ["12", "24"], "12")}"
name="${text("name", "dark")}"
scale="${select("scale", ["s", "m", "l"], "m")}"
step="${number("step", 1)}"
theme="dark"
value="${text("value", "22:37")}"
>
</calcite-input-time-picker>
`;

DarkTheme.story = {
parameters: { backgrounds: darkBackground }
};
Loading