timered-counter 0.0.0
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/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/custom-elements.json +8484 -0
- package/dist/src/counter-adapter.d.ts +38 -0
- package/dist/src/counter-adapter.js +69 -0
- package/dist/src/counter-adapter.js.map +1 -0
- package/dist/src/easing/cubic-bezier.d.ts +5 -0
- package/dist/src/easing/cubic-bezier.js +35 -0
- package/dist/src/easing/cubic-bezier.js.map +1 -0
- package/dist/src/easing/easing-functions.d.ts +1 -0
- package/dist/src/easing/easing-functions.js +10 -0
- package/dist/src/easing/easing-functions.js.map +1 -0
- package/dist/src/easing/index.d.ts +2 -0
- package/dist/src/easing/index.js +3 -0
- package/dist/src/easing/index.js.map +1 -0
- package/dist/src/easing/penner-easing-functions.d.ts +33 -0
- package/dist/src/easing/penner-easing-functions.js +82 -0
- package/dist/src/easing/penner-easing-functions.js.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mixins/counter-aira.d.ts +9 -0
- package/dist/src/mixins/counter-aira.js +41 -0
- package/dist/src/mixins/counter-aira.js.map +1 -0
- package/dist/src/mixins/counter-animation.d.ts +13 -0
- package/dist/src/mixins/counter-animation.js +55 -0
- package/dist/src/mixins/counter-animation.js.map +1 -0
- package/dist/src/mixins/counter-base.d.ts +21 -0
- package/dist/src/mixins/counter-base.js +152 -0
- package/dist/src/mixins/counter-base.js.map +1 -0
- package/dist/src/mixins/counter-parts.d.ts +42 -0
- package/dist/src/mixins/counter-parts.js +180 -0
- package/dist/src/mixins/counter-parts.js.map +1 -0
- package/dist/src/mixins/counter-styles.d.ts +17 -0
- package/dist/src/mixins/counter-styles.js +93 -0
- package/dist/src/mixins/counter-styles.js.map +1 -0
- package/dist/src/number-adapter/build-in-bigint.d.ts +6 -0
- package/dist/src/number-adapter/build-in-bigint.js +92 -0
- package/dist/src/number-adapter/build-in-bigint.js.map +1 -0
- package/dist/src/number-adapter/build-in-number.d.ts +3 -0
- package/dist/src/number-adapter/build-in-number.js +84 -0
- package/dist/src/number-adapter/build-in-number.js.map +1 -0
- package/dist/src/number-adapter/decimal-js.d.ts +4 -0
- package/dist/src/number-adapter/decimal-js.js +87 -0
- package/dist/src/number-adapter/decimal-js.js.map +1 -0
- package/dist/src/number-adapter/index.d.ts +4 -0
- package/dist/src/number-adapter/index.js +5 -0
- package/dist/src/number-adapter/index.js.map +1 -0
- package/dist/src/number-adapter/types.d.ts +34 -0
- package/dist/src/number-adapter/types.js +2 -0
- package/dist/src/number-adapter/types.js.map +1 -0
- package/dist/src/string-adapter/build-in-intl-segmenter.d.ts +10 -0
- package/dist/src/string-adapter/build-in-intl-segmenter.js +18 -0
- package/dist/src/string-adapter/build-in-intl-segmenter.js.map +1 -0
- package/dist/src/string-adapter/build-in-string.d.ts +12 -0
- package/dist/src/string-adapter/build-in-string.js +16 -0
- package/dist/src/string-adapter/build-in-string.js.map +1 -0
- package/dist/src/string-adapter/grapheme-splitter.d.ts +8 -0
- package/dist/src/string-adapter/grapheme-splitter.js +16 -0
- package/dist/src/string-adapter/grapheme-splitter.js.map +1 -0
- package/dist/src/string-adapter/index.d.ts +4 -0
- package/dist/src/string-adapter/index.js +5 -0
- package/dist/src/string-adapter/index.js.map +1 -0
- package/dist/src/string-adapter/types.d.ts +19 -0
- package/dist/src/string-adapter/types.js +2 -0
- package/dist/src/string-adapter/types.js.map +1 -0
- package/dist/src/styles/timered-counter-datetime-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-datetime-styles.js +8 -0
- package/dist/src/styles/timered-counter-datetime-styles.js.map +1 -0
- package/dist/src/styles/timered-counter-number-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-number-styles.js +3 -0
- package/dist/src/styles/timered-counter-number-styles.js.map +1 -0
- package/dist/src/styles/timered-counter-string-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-string-styles.js +3 -0
- package/dist/src/styles/timered-counter-string-styles.js.map +1 -0
- package/dist/src/styles/timered-counter-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-styles.js +25 -0
- package/dist/src/styles/timered-counter-styles.js.map +1 -0
- package/dist/src/timered-counter-datetime-duration.d.ts +37 -0
- package/dist/src/timered-counter-datetime-duration.js +186 -0
- package/dist/src/timered-counter-datetime-duration.js.map +1 -0
- package/dist/src/timered-counter-number.d.ts +23 -0
- package/dist/src/timered-counter-number.js +114 -0
- package/dist/src/timered-counter-number.js.map +1 -0
- package/dist/src/timered-counter-string.d.ts +30 -0
- package/dist/src/timered-counter-string.js +138 -0
- package/dist/src/timered-counter-string.js.map +1 -0
- package/dist/src/timered-counter.d.ts +15 -0
- package/dist/src/timered-counter.js +80 -0
- package/dist/src/timered-counter.js.map +1 -0
- package/dist/src/transitions/roller/index.d.ts +1 -0
- package/dist/src/transitions/roller/index.js +2 -0
- package/dist/src/transitions/roller/index.js.map +1 -0
- package/dist/src/transitions/roller/roller-digit.d.ts +28 -0
- package/dist/src/transitions/roller/roller-digit.js +259 -0
- package/dist/src/transitions/roller/roller-digit.js.map +1 -0
- package/dist/src/transitions/roller/roller.d.ts +42 -0
- package/dist/src/transitions/roller/roller.js +235 -0
- package/dist/src/transitions/roller/roller.js.map +1 -0
- package/dist/src/transitions/roller/styles.d.ts +2 -0
- package/dist/src/transitions/roller/styles.js +77 -0
- package/dist/src/transitions/roller/styles.js.map +1 -0
- package/dist/src/types/duration.d.ts +33 -0
- package/dist/src/types/duration.js +35 -0
- package/dist/src/types/duration.js.map +1 -0
- package/dist/src/types/group.d.ts +67 -0
- package/dist/src/types/group.js +2 -0
- package/dist/src/types/group.js.map +1 -0
- package/dist/src/utils/any-base.d.ts +6 -0
- package/dist/src/utils/any-base.js +56 -0
- package/dist/src/utils/any-base.js.map +1 -0
- package/dist/src/utils/duration.d.ts +15 -0
- package/dist/src/utils/duration.js +66 -0
- package/dist/src/utils/duration.js.map +1 -0
- package/dist/src/utils/extract-group-option.d.ts +9 -0
- package/dist/src/utils/extract-group-option.js +81 -0
- package/dist/src/utils/extract-group-option.js.map +1 -0
- package/dist/src/utils/iso8601-duration.d.ts +4 -0
- package/dist/src/utils/iso8601-duration.js +32 -0
- package/dist/src/utils/iso8601-duration.js.map +1 -0
- package/dist/src/utils/localized-date-time-fields.d.ts +2 -0
- package/dist/src/utils/localized-date-time-fields.js +24 -0
- package/dist/src/utils/localized-date-time-fields.js.map +1 -0
- package/dist/src/utils/parse-json-string.d.ts +1 -0
- package/dist/src/utils/parse-json-string.js +9 -0
- package/dist/src/utils/parse-json-string.js.map +1 -0
- package/dist/src/utils/polyfill-keyframes.d.ts +1 -0
- package/dist/src/utils/polyfill-keyframes.js +19 -0
- package/dist/src/utils/polyfill-keyframes.js.map +1 -0
- package/dist/src/utils/preprocess-part-data.d.ts +25 -0
- package/dist/src/utils/preprocess-part-data.js +59 -0
- package/dist/src/utils/preprocess-part-data.js.map +1 -0
- package/dist/src/utils/transition-digit.d.ts +2 -0
- package/dist/src/utils/transition-digit.js +51 -0
- package/dist/src/utils/transition-digit.js.map +1 -0
- package/dist/src/utils/uuid.d.ts +1 -0
- package/dist/src/utils/uuid.js +7 -0
- package/dist/src/utils/uuid.js.map +1 -0
- package/dist/stories/story-parts/animation-events.d.ts +9 -0
- package/dist/stories/story-parts/animation-events.js +35 -0
- package/dist/stories/story-parts/animation-events.js.map +1 -0
- package/dist/stories/story-parts/animation-options.d.ts +8 -0
- package/dist/stories/story-parts/animation-options.js +25 -0
- package/dist/stories/story-parts/animation-options.js.map +1 -0
- package/dist/stories/story-parts/big-number.d.ts +8 -0
- package/dist/stories/story-parts/big-number.js +25 -0
- package/dist/stories/story-parts/big-number.js.map +1 -0
- package/dist/stories/story-parts/datetime-locale.d.ts +8 -0
- package/dist/stories/story-parts/datetime-locale.js +30 -0
- package/dist/stories/story-parts/datetime-locale.js.map +1 -0
- package/dist/stories/story-parts/datetime-precision.d.ts +8 -0
- package/dist/stories/story-parts/datetime-precision.js +82 -0
- package/dist/stories/story-parts/datetime-precision.js.map +1 -0
- package/dist/stories/story-parts/edge-case.d.ts +8 -0
- package/dist/stories/story-parts/edge-case.js +12 -0
- package/dist/stories/story-parts/edge-case.js.map +1 -0
- package/dist/stories/story-parts/emoji.d.ts +9 -0
- package/dist/stories/story-parts/emoji.js +20 -0
- package/dist/stories/story-parts/emoji.js.map +1 -0
- package/dist/stories/story-parts/locale-number.d.ts +7 -0
- package/dist/stories/story-parts/locale-number.js +23 -0
- package/dist/stories/story-parts/locale-number.js.map +1 -0
- package/dist/stories/story-parts/slots.d.ts +10 -0
- package/dist/stories/story-parts/slots.js +29 -0
- package/dist/stories/story-parts/slots.js.map +1 -0
- package/dist/stories/story-parts/styles.d.ts +7 -0
- package/dist/stories/story-parts/styles.js +34 -0
- package/dist/stories/story-parts/styles.js.map +1 -0
- package/dist/stories/story-parts/value-change.d.ts +9 -0
- package/dist/stories/story-parts/value-change.js +20 -0
- package/dist/stories/story-parts/value-change.js.map +1 -0
- package/dist/stories/timered-counter/decimaljs.stories.d.ts +6 -0
- package/dist/stories/timered-counter/decimaljs.stories.js +34 -0
- package/dist/stories/timered-counter/decimaljs.stories.js.map +1 -0
- package/dist/stories/timered-counter/index.stories.d.ts +9 -0
- package/dist/stories/timered-counter/index.stories.js +180 -0
- package/dist/stories/timered-counter/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-datetime-duration/index.stories.d.ts +7 -0
- package/dist/stories/timered-counter-datetime-duration/index.stories.js +95 -0
- package/dist/stories/timered-counter-datetime-duration/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-number/decimaljs.stories.d.ts +6 -0
- package/dist/stories/timered-counter-number/decimaljs.stories.js +34 -0
- package/dist/stories/timered-counter-number/decimaljs.stories.js.map +1 -0
- package/dist/stories/timered-counter-number/index.stories.d.ts +9 -0
- package/dist/stories/timered-counter-number/index.stories.js +188 -0
- package/dist/stories/timered-counter-number/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/decimaljs.stories.d.ts +7 -0
- package/dist/stories/timered-counter-string/decimaljs.stories.js +55 -0
- package/dist/stories/timered-counter-string/decimaljs.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.d.ts +7 -0
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.js +56 -0
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/index.stories.d.ts +9 -0
- package/dist/stories/timered-counter-string/index.stories.js +126 -0
- package/dist/stories/timered-counter-string/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/intl-segmenter.stories.d.ts +7 -0
- package/dist/stories/timered-counter-string/intl-segmenter.stories.js +56 -0
- package/dist/stories/timered-counter-string/intl-segmenter.stories.js.map +1 -0
- package/dist/stories/utils/index.d.ts +8 -0
- package/dist/stories/utils/index.js +20 -0
- package/dist/stories/utils/index.js.map +1 -0
- package/dist/test/td-counter.test.d.ts +1 -0
- package/dist/test/td-counter.test.js +25 -0
- package/dist/test/td-counter.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +128 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
import { equal as _equal, sleep } from '../utils/index.js';
|
2
|
+
export async function bigNumber(context, { counter, setBy, equal = _equal, }) {
|
3
|
+
const { step, args } = context;
|
4
|
+
const list = [
|
5
|
+
'0',
|
6
|
+
'179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
7
|
+
'359538626972463140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
8
|
+
'539307940458694710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
9
|
+
];
|
10
|
+
await step('Incrementing the value', async () => {
|
11
|
+
for await (const value of list) {
|
12
|
+
setBy(counter, 'value', value);
|
13
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
14
|
+
await equal(counter, counter.value, value);
|
15
|
+
}
|
16
|
+
});
|
17
|
+
await step('Decrementing the value', async () => {
|
18
|
+
for await (const value of list.reverse()) {
|
19
|
+
setBy(counter, 'value', value);
|
20
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
21
|
+
await equal(counter, counter.value, value);
|
22
|
+
}
|
23
|
+
});
|
24
|
+
}
|
25
|
+
//# sourceMappingURL=big-number.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"big-number.js","sourceRoot":"","sources":["../../../stories/story-parts/big-number.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,MAAM,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAA0D,EAC1D,EACE,OAAO,EACP,KAAK,EACL,KAAK,GAAG,MAAM,GAKf;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,IAAI,GAAG;QACX,GAAG;QACH,uTAAuT;QACvT,uTAAuT;QACvT,uTAAuT;KACxT,CAAC;IAEF,MAAM,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAE1D,MAAM,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAE1D,MAAM,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { TimeredCounter } from '../../src/index.js';\nimport { equal as _equal, NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function bigNumber<TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n setBy,\n equal = _equal,\n }: {\n counter: TC;\n setBy: (counter: TC, key: string, value: string) => void;\n equal?: (counter: TimeredCounter, a: any, b: any) => Promise<void>;\n },\n) {\n const { step, args } = context;\n\n const list = [\n '0',\n '179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n '359538626972463140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n '539307940458694710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n ];\n\n await step('Incrementing the value', async () => {\n for await (const value of list) {\n setBy(counter, 'value', value);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await equal(counter, counter.value, value);\n }\n });\n\n await step('Decrementing the value', async () => {\n for await (const value of list.reverse()) {\n setBy(counter, 'value', value);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await equal(counter, counter.value, value);\n }\n });\n}\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function datetimeLocale<TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, setBy, }: {
|
5
|
+
counter: TC;
|
6
|
+
setBy: (counter: TC, key: string, value: Date[] | string) => void;
|
7
|
+
equal: (counter: TimeredCounter, a: any, b: Date[]) => Promise<void>;
|
8
|
+
}): Promise<void>;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { expect } from '@storybook/test';
|
2
|
+
import { sleep } from '../utils/index.js';
|
3
|
+
export async function datetimeLocale(context, { counter, setBy, }) {
|
4
|
+
const { step, args } = context;
|
5
|
+
const locales = [
|
6
|
+
['zh-CN', ['日', '小时', '分钟', '秒']],
|
7
|
+
['zh-HK', ['日', '小時', '分鐘', '秒']],
|
8
|
+
['zh-TW', ['日', '小時', '分鐘', '秒']],
|
9
|
+
['en-US', ['day', 'hour', 'minute', 'second']],
|
10
|
+
['en-GB', ['day', 'hour', 'minute', 'second']],
|
11
|
+
['fr-FR', ['jour', 'heure', 'minute', 'seconde']],
|
12
|
+
['de-DE', ['Tag', 'Stunde', 'Minute', 'Sekunde']],
|
13
|
+
['ja-JP', ['日', '時', '分', '秒']],
|
14
|
+
['ko-KR', ['일', '시', '분', '초']],
|
15
|
+
];
|
16
|
+
await step('Test different locale', async () => {
|
17
|
+
for await (const [locale, testTarget] of locales) {
|
18
|
+
await step(`Locale: ${locale}`, async () => {
|
19
|
+
setBy(counter, 'locale', locale);
|
20
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
21
|
+
const partSuffixes = Array.from((counter.shadowRoot
|
22
|
+
?.querySelector('timered-counter-roller')
|
23
|
+
?.shadowRoot?.querySelectorAll('.roller-part__suffix slot') ??
|
24
|
+
[])).map(el => el.assignedElements()[0].textContent?.trim());
|
25
|
+
await expect(partSuffixes).toEqual(testTarget);
|
26
|
+
});
|
27
|
+
}
|
28
|
+
});
|
29
|
+
}
|
30
|
+
//# sourceMappingURL=datetime-locale.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"datetime-locale.js","sourceRoot":"","sources":["../../../stories/story-parts/datetime-locale.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA0D,EAC1D,EACE,OAAO,EACP,KAAK,GAKN;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,OAAO,GAAG;QACd,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;KACvB,CAAC;IAEX,MAAM,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QAC7C,IAAI,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,CAAC,WAAW,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;gBACzC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAEjC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAE1D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,CAAC,OAAO,CAAC,UAAU;oBACjB,EAAE,aAAa,CAAC,wBAAwB,CAAC;oBACzC,EAAE,UAAU,EAAE,gBAAgB,CAAC,2BAA2B,CAAC;oBAC3D,EAAE,CAAsB,CAC3B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE1D,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { expect } from '@storybook/test';\nimport { TimeredCounter } from '../../src/index.js';\nimport { NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function datetimeLocale<TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n setBy,\n }: {\n counter: TC;\n setBy: (counter: TC, key: string, value: Date[] | string) => void;\n equal: (counter: TimeredCounter, a: any, b: Date[]) => Promise<void>;\n },\n) {\n const { step, args } = context;\n\n const locales = [\n ['zh-CN', ['日', '小时', '分钟', '秒']],\n ['zh-HK', ['日', '小時', '分鐘', '秒']],\n ['zh-TW', ['日', '小時', '分鐘', '秒']],\n ['en-US', ['day', 'hour', 'minute', 'second']],\n ['en-GB', ['day', 'hour', 'minute', 'second']],\n ['fr-FR', ['jour', 'heure', 'minute', 'seconde']],\n ['de-DE', ['Tag', 'Stunde', 'Minute', 'Sekunde']],\n ['ja-JP', ['日', '時', '分', '秒']],\n ['ko-KR', ['일', '시', '분', '초']],\n ] as const;\n\n await step('Test different locale', async () => {\n for await (const [locale, testTarget] of locales) {\n await step(`Locale: ${locale}`, async () => {\n setBy(counter, 'locale', locale);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n const partSuffixes = Array.from(\n (counter.shadowRoot\n ?.querySelector('timered-counter-roller')\n ?.shadowRoot?.querySelectorAll('.roller-part__suffix slot') ??\n []) as HTMLSlotElement[],\n ).map(el => el.assignedElements()[0].textContent?.trim());\n\n await expect(partSuffixes).toEqual(testTarget);\n });\n }\n });\n}\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function datetimePrecision<TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, setBy, }: {
|
5
|
+
counter: TC;
|
6
|
+
setBy: (counter: TC, key: string, value: Date[] | string) => void;
|
7
|
+
equal: (counter: TimeredCounter, a: any, b: Date[]) => Promise<void>;
|
8
|
+
}): Promise<void>;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { addMilliseconds } from 'date-fns';
|
2
|
+
import { expect } from '@storybook/test';
|
3
|
+
import { sleep } from '../utils/index.js';
|
4
|
+
import { DurationPartMillisecond, DurationPartType, } from '../../src/types/duration.js';
|
5
|
+
export async function datetimePrecision(context, { counter, setBy, }) {
|
6
|
+
const { step, args } = context;
|
7
|
+
const precisionTable = [
|
8
|
+
[
|
9
|
+
DurationPartType.Second,
|
10
|
+
[DurationPartType.Second, DurationPartType.Second],
|
11
|
+
[DurationPartType.Second, DurationPartType.Minute],
|
12
|
+
[DurationPartType.Second, DurationPartType.Hour],
|
13
|
+
[DurationPartType.Second, DurationPartType.Day],
|
14
|
+
[DurationPartType.Second, DurationPartType.Month],
|
15
|
+
[DurationPartType.Second, DurationPartType.Year],
|
16
|
+
],
|
17
|
+
[
|
18
|
+
DurationPartType.Minute,
|
19
|
+
[DurationPartType.Minute, DurationPartType.Minute],
|
20
|
+
[DurationPartType.Minute, DurationPartType.Hour],
|
21
|
+
[DurationPartType.Minute, DurationPartType.Day],
|
22
|
+
[DurationPartType.Minute, DurationPartType.Month],
|
23
|
+
[DurationPartType.Minute, DurationPartType.Year],
|
24
|
+
],
|
25
|
+
[
|
26
|
+
DurationPartType.Hour,
|
27
|
+
[DurationPartType.Hour, DurationPartType.Hour],
|
28
|
+
[DurationPartType.Hour, DurationPartType.Day],
|
29
|
+
[DurationPartType.Hour, DurationPartType.Month],
|
30
|
+
[DurationPartType.Hour, DurationPartType.Year],
|
31
|
+
],
|
32
|
+
[
|
33
|
+
DurationPartType.Day,
|
34
|
+
[DurationPartType.Day, DurationPartType.Day],
|
35
|
+
[DurationPartType.Day, DurationPartType.Month],
|
36
|
+
[DurationPartType.Day, DurationPartType.Year],
|
37
|
+
],
|
38
|
+
[
|
39
|
+
DurationPartType.Month,
|
40
|
+
[DurationPartType.Month, DurationPartType.Month],
|
41
|
+
[DurationPartType.Month, DurationPartType.Year],
|
42
|
+
],
|
43
|
+
[DurationPartType.Year, [DurationPartType.Year, DurationPartType.Year]],
|
44
|
+
];
|
45
|
+
const DurationPartTypeLevelMap = {
|
46
|
+
[DurationPartType.Millisecond]: 0,
|
47
|
+
[DurationPartType.Second]: 1,
|
48
|
+
[DurationPartType.Minute]: 2,
|
49
|
+
[DurationPartType.Hour]: 3,
|
50
|
+
[DurationPartType.Day]: 4,
|
51
|
+
[DurationPartType.Week]: 5,
|
52
|
+
[DurationPartType.Month]: 6,
|
53
|
+
[DurationPartType.Quarter]: 7,
|
54
|
+
[DurationPartType.Year]: 8,
|
55
|
+
};
|
56
|
+
await step('Test different precision', async () => {
|
57
|
+
for await (const [singlePrecision, ...pairPrecisions] of precisionTable) {
|
58
|
+
await step(`Single parameter: ${singlePrecision}`, async () => {
|
59
|
+
setBy(counter, 'precision', singlePrecision);
|
60
|
+
setBy(counter, 'value', [
|
61
|
+
new Date(),
|
62
|
+
addMilliseconds(new Date(), DurationPartMillisecond[singlePrecision]),
|
63
|
+
]);
|
64
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
65
|
+
await expect(counter.parts.length).toBe(1);
|
66
|
+
});
|
67
|
+
await step(`Pair precision: ${singlePrecision}`, async () => {
|
68
|
+
for await (const pairPrecision of pairPrecisions) {
|
69
|
+
const [min, max] = pairPrecision;
|
70
|
+
setBy(counter, 'precision', JSON.stringify([min, max]));
|
71
|
+
setBy(counter, 'value', [
|
72
|
+
new Date(),
|
73
|
+
addMilliseconds(new Date(), DurationPartMillisecond[max] + 1),
|
74
|
+
]);
|
75
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
76
|
+
await expect(counter.parts.length).toBe(DurationPartTypeLevelMap[max] - DurationPartTypeLevelMap[min] + 1);
|
77
|
+
}
|
78
|
+
});
|
79
|
+
}
|
80
|
+
});
|
81
|
+
}
|
82
|
+
//# sourceMappingURL=datetime-precision.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"datetime-precision.js","sourceRoot":"","sources":["../../../stories/story-parts/datetime-precision.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA0D,EAC1D,EACE,OAAO,EACP,KAAK,GAKN;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,cAAc,GAAG;QACrB;YACE,gBAAgB,CAAC,MAAM;YACvB,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAClD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAClD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;YAChD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC;YAC/C,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC;YACjD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;SACjD;QACD;YACE,gBAAgB,CAAC,MAAM;YACvB,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAClD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;YAChD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC;YAC/C,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC;YACjD,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;SACjD;QACD;YACE,gBAAgB,CAAC,IAAI;YACrB,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;YAC9C,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC;YAC7C,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC;YAC/C,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;SAC/C;QACD;YACE,gBAAgB,CAAC,GAAG;YACpB,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC;YAC5C,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC;YAC9C,CAAC,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC;SAC9C;QACD;YACE,gBAAgB,CAAC,KAAK;YACtB,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC;YAChD,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC;SAChD;QACD,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;KACxE,CAAC;IACF,MAAM,wBAAwB,GAAqC;QACjE,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;KAC3B,CAAC;IAEF,MAAM,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAChD,IAAI,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,GAAG,cAAc,CAAC,IAAI,cAAc,EAAE,CAAC;YACxE,MAAM,IAAI,CAAC,qBAAqB,eAAe,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC5D,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,eAAmC,CAAC,CAAC;gBACjE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;oBACtB,IAAI,IAAI,EAAE;oBACV,eAAe,CACb,IAAI,IAAI,EAAE,EACV,uBAAuB,CAAC,eAAmC,CAAC,CAC7D;iBACF,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAE1D,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,mBAAmB,eAAe,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC1D,IAAI,KAAK,EAAE,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;oBACjD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,aAGlB,CAAC;oBACF,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;wBACtB,IAAI,IAAI,EAAE;wBACV,eAAe,CAAC,IAAI,IAAI,EAAE,EAAE,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAC9D,CAAC,CAAC;oBAEH,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;oBAE1D,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CACrC,wBAAwB,CAAC,GAAG,CAAC,GAAG,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAClE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { addMilliseconds } from 'date-fns';\nimport { expect } from '@storybook/test';\nimport { TimeredCounter } from '../../src/index.js';\nimport { NoUndefinedField, sleep } from '../utils/index.js';\nimport {\n DurationPartMillisecond,\n DurationPartType,\n} from '../../src/types/duration.js';\n\nexport async function datetimePrecision<TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n setBy,\n }: {\n counter: TC;\n setBy: (counter: TC, key: string, value: Date[] | string) => void;\n equal: (counter: TimeredCounter, a: any, b: Date[]) => Promise<void>;\n },\n) {\n const { step, args } = context;\n\n const precisionTable = [\n [\n DurationPartType.Second,\n [DurationPartType.Second, DurationPartType.Second],\n [DurationPartType.Second, DurationPartType.Minute],\n [DurationPartType.Second, DurationPartType.Hour],\n [DurationPartType.Second, DurationPartType.Day],\n [DurationPartType.Second, DurationPartType.Month],\n [DurationPartType.Second, DurationPartType.Year],\n ],\n [\n DurationPartType.Minute,\n [DurationPartType.Minute, DurationPartType.Minute],\n [DurationPartType.Minute, DurationPartType.Hour],\n [DurationPartType.Minute, DurationPartType.Day],\n [DurationPartType.Minute, DurationPartType.Month],\n [DurationPartType.Minute, DurationPartType.Year],\n ],\n [\n DurationPartType.Hour,\n [DurationPartType.Hour, DurationPartType.Hour],\n [DurationPartType.Hour, DurationPartType.Day],\n [DurationPartType.Hour, DurationPartType.Month],\n [DurationPartType.Hour, DurationPartType.Year],\n ],\n [\n DurationPartType.Day,\n [DurationPartType.Day, DurationPartType.Day],\n [DurationPartType.Day, DurationPartType.Month],\n [DurationPartType.Day, DurationPartType.Year],\n ],\n [\n DurationPartType.Month,\n [DurationPartType.Month, DurationPartType.Month],\n [DurationPartType.Month, DurationPartType.Year],\n ],\n [DurationPartType.Year, [DurationPartType.Year, DurationPartType.Year]],\n ];\n const DurationPartTypeLevelMap: Record<DurationPartType, number> = {\n [DurationPartType.Millisecond]: 0,\n [DurationPartType.Second]: 1,\n [DurationPartType.Minute]: 2,\n [DurationPartType.Hour]: 3,\n [DurationPartType.Day]: 4,\n [DurationPartType.Week]: 5,\n [DurationPartType.Month]: 6,\n [DurationPartType.Quarter]: 7,\n [DurationPartType.Year]: 8,\n };\n\n await step('Test different precision', async () => {\n for await (const [singlePrecision, ...pairPrecisions] of precisionTable) {\n await step(`Single parameter: ${singlePrecision}`, async () => {\n setBy(counter, 'precision', singlePrecision as DurationPartType);\n setBy(counter, 'value', [\n new Date(),\n addMilliseconds(\n new Date(),\n DurationPartMillisecond[singlePrecision as DurationPartType],\n ),\n ]);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await expect(counter.parts.length).toBe(1);\n });\n\n await step(`Pair precision: ${singlePrecision}`, async () => {\n for await (const pairPrecision of pairPrecisions) {\n const [min, max] = pairPrecision as [\n DurationPartType,\n DurationPartType,\n ];\n setBy(counter, 'precision', JSON.stringify([min, max]));\n setBy(counter, 'value', [\n new Date(),\n addMilliseconds(new Date(), DurationPartMillisecond[max] + 1),\n ]);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await expect(counter.parts.length).toBe(\n DurationPartTypeLevelMap[max] - DurationPartTypeLevelMap[min] + 1,\n );\n }\n });\n }\n });\n}\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function edgeCase<T, TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, list, setBy, }: {
|
5
|
+
counter: TC;
|
6
|
+
list: [label: string, value: T, expectedValue: T][];
|
7
|
+
setBy: (counter: TC, key: string, value: T) => void;
|
8
|
+
}): Promise<void>;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { equal, sleep } from '../utils/index.js';
|
2
|
+
export async function edgeCase(context, { counter, list, setBy, }) {
|
3
|
+
const { step, args } = context;
|
4
|
+
for await (const [label, value, expectedValue] of list) {
|
5
|
+
await step(label, async () => {
|
6
|
+
setBy(counter, 'value', value);
|
7
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
8
|
+
await equal(counter, counter.value, expectedValue);
|
9
|
+
});
|
10
|
+
}
|
11
|
+
}
|
12
|
+
//# sourceMappingURL=edge-case.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"edge-case.js","sourceRoot":"","sources":["../../../stories/story-parts/edge-case.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAA0D,EAC1D,EACE,OAAO,EACP,IAAI,EACJ,KAAK,GAKN;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,IAAI,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC;QACvD,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAC3B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { TimeredCounter } from '../../src/index.js';\nimport { equal, NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function edgeCase<T, TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n list,\n setBy,\n }: {\n counter: TC;\n list: [label: string, value: T, expectedValue: T][];\n setBy: (counter: TC, key: string, value: T) => void;\n },\n) {\n const { step, args } = context;\n\n for await (const [label, value, expectedValue] of list) {\n await step(label, async () => {\n setBy(counter, 'value', value);\n await sleep((args.animationOptions.duration ?? 100) + 10);\n await equal(counter, counter.value, expectedValue);\n });\n }\n}\n"]}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function emoji<TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, setBy, list, }: {
|
5
|
+
counter: TC;
|
6
|
+
list: string[];
|
7
|
+
setBy: (counter: TC, key: string, value: string) => void;
|
8
|
+
equal?: (counter: TimeredCounter, a: any, b: string) => Promise<void>;
|
9
|
+
}): Promise<void>;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { expect } from '@storybook/test';
|
2
|
+
import { sleep } from '../utils/index.js';
|
3
|
+
export async function emoji(context, { counter, setBy, list, }) {
|
4
|
+
const { step, args } = context;
|
5
|
+
await step('Test difference emoji', async () => {
|
6
|
+
for await (const value of list) {
|
7
|
+
setBy(counter, 'value', value);
|
8
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
9
|
+
await expect(counter.parts.map(({ digits }) => digits).flat().length).toBe(counter.stringAdapter.stringToChars(value).length);
|
10
|
+
}
|
11
|
+
});
|
12
|
+
await step('Decrementing the value', async () => {
|
13
|
+
for await (const value of list.slice().reverse()) {
|
14
|
+
setBy(counter, 'value', value);
|
15
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
16
|
+
await expect(counter.parts.map(({ digits }) => digits).flat().length).toBe(counter.stringAdapter.stringToChars(value).length);
|
17
|
+
}
|
18
|
+
});
|
19
|
+
}
|
20
|
+
//# sourceMappingURL=emoji.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"emoji.js","sourceRoot":"","sources":["../../../stories/story-parts/emoji.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAA0D,EAC1D,EACE,OAAO,EACP,KAAK,EACL,IAAI,GAML;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QAC7C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAE1D,MAAM,MAAM,CACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CACxD,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAE1D,MAAM,MAAM,CACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CACxD,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { expect } from '@storybook/test';\nimport { TimeredCounter } from '../../src/index.js';\nimport { NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function emoji<TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n setBy,\n list,\n }: {\n counter: TC;\n list: string[];\n setBy: (counter: TC, key: string, value: string) => void;\n equal?: (counter: TimeredCounter, a: any, b: string) => Promise<void>;\n },\n) {\n const { step, args } = context;\n\n await step('Test difference emoji', async () => {\n for await (const value of list) {\n setBy(counter, 'value', value);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await expect(\n counter.parts.map(({ digits }) => digits).flat().length,\n ).toBe(counter.stringAdapter.stringToChars(value).length);\n }\n });\n\n await step('Decrementing the value', async () => {\n for await (const value of list.slice().reverse()) {\n setBy(counter, 'value', value);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await expect(\n counter.parts.map(({ digits }) => digits).flat().length,\n ).toBe(counter.stringAdapter.stringToChars(value).length);\n }\n });\n}\n"]}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function localeNumber<TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, setBy, }: {
|
5
|
+
counter: TC;
|
6
|
+
setBy: (counter: TC, key: string, value: string) => void;
|
7
|
+
}): Promise<void>;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { expect } from '@storybook/test';
|
2
|
+
import { sleep } from '../utils/index.js';
|
3
|
+
export async function localeNumber(context, { counter, setBy, }) {
|
4
|
+
const { step, args } = context;
|
5
|
+
const locales = [
|
6
|
+
['en-US', '123,456.789'],
|
7
|
+
['de-DE', '123.456,789'],
|
8
|
+
['zh-CN', '123,456.789'],
|
9
|
+
['ja-JP', '123,456.789'],
|
10
|
+
['ko-KR', '123,456.789'],
|
11
|
+
['fr-FR', '123 456,789'],
|
12
|
+
];
|
13
|
+
await step('Testing with different locales', async () => {
|
14
|
+
setBy(counter, 'locale-number', 'true');
|
15
|
+
setBy(counter, 'value', '123456.789');
|
16
|
+
for await (const [locale, expectedValue] of locales) {
|
17
|
+
setBy(counter, 'locale', locale);
|
18
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
19
|
+
await expect(counter.getAttribute('aria-label')?.replaceAll(/\s/g, ' ')).toBe(expectedValue);
|
20
|
+
}
|
21
|
+
});
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=locale-number.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"locale-number.js","sourceRoot":"","sources":["../../../stories/story-parts/locale-number.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA0D,EAC1D,EACE,OAAO,EACP,KAAK,GAIN;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,OAAO,GAAG;QACd,CAAC,OAAO,EAAE,aAAa,CAAC;QACxB,CAAC,OAAO,EAAE,aAAa,CAAC;QACxB,CAAC,OAAO,EAAE,aAAa,CAAC;QACxB,CAAC,OAAO,EAAE,aAAa,CAAC;QACxB,CAAC,OAAO,EAAE,aAAa,CAAC;QACxB,CAAC,OAAO,EAAE,aAAa,CAAC;KACzB,CAAC;IAEF,MAAM,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QACtD,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QACxC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAEtC,IAAI,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,OAAO,EAAE,CAAC;YACpD,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAE1D,MAAM,MAAM,CACV,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAC3D,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { expect } from '@storybook/test';\nimport { TimeredCounter } from '../../src/index.js';\nimport { NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function localeNumber<TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n setBy,\n }: {\n counter: TC;\n setBy: (counter: TC, key: string, value: string) => void;\n },\n) {\n const { step, args } = context;\n\n const locales = [\n ['en-US', '123,456.789'],\n ['de-DE', '123.456,789'],\n ['zh-CN', '123,456.789'],\n ['ja-JP', '123,456.789'],\n ['ko-KR', '123,456.789'],\n ['fr-FR', '123 456,789'],\n ];\n\n await step('Testing with different locales', async () => {\n setBy(counter, 'locale-number', 'true');\n setBy(counter, 'value', '123456.789');\n\n for await (const [locale, expectedValue] of locales) {\n setBy(counter, 'locale', locale);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await expect(\n counter.getAttribute('aria-label')?.replaceAll(/\\s/g, ' '),\n ).toBe(expectedValue);\n }\n });\n}\n"]}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare const render: (args: any) => import("lit-html").TemplateResult<1>;
|
5
|
+
export declare function slots<T, TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, }: {
|
6
|
+
counter: TC;
|
7
|
+
list?: T[];
|
8
|
+
setBy?: (counter: TC, key: string, value: T) => void;
|
9
|
+
equal?: (counter: TimeredCounter, a: any, b: T) => Promise<void>;
|
10
|
+
}): Promise<void>;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { html } from 'lit';
|
2
|
+
import { classMap } from 'lit/directives/class-map.js';
|
3
|
+
import { expect } from '@storybook/test';
|
4
|
+
export const render = (args) => html `<timered-counter
|
5
|
+
value=${args.value}
|
6
|
+
class=${classMap({ [args.className]: true })}
|
7
|
+
>
|
8
|
+
<span slot="prefix">prefix</span>
|
9
|
+
<span slot="suffix">suffix</span>
|
10
|
+
<span slot="part-suffix-0">suffix</span>
|
11
|
+
</timered-counter>`;
|
12
|
+
export async function slots(context, { counter, }) {
|
13
|
+
const { step } = context;
|
14
|
+
await step('Check slots are rendered', async () => {
|
15
|
+
const prefix = counter.shadowRoot
|
16
|
+
?.querySelector('timered-counter-roller')
|
17
|
+
?.shadowRoot?.querySelector('.roller__prefix slot');
|
18
|
+
const suffix = counter.shadowRoot
|
19
|
+
?.querySelector('timered-counter-roller')
|
20
|
+
?.shadowRoot?.querySelector('.roller__suffix slot');
|
21
|
+
await expect((prefix?.assignedElements()[0])
|
22
|
+
.assignedElements()[0]
|
23
|
+
.textContent?.trim()).toBe('prefix');
|
24
|
+
await expect((suffix?.assignedElements()[0])
|
25
|
+
.assignedElements()[0]
|
26
|
+
.textContent?.trim()).toBe('suffix');
|
27
|
+
});
|
28
|
+
}
|
29
|
+
//# sourceMappingURL=slots.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../../stories/story-parts/slots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAS,EAAE,EAAE,CAClC,IAAI,CAAA;YACM,IAAI,CAAC,KAAK;YACV,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;;;;;qBAK3B,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,OAA0D,EAC1D,EACE,OAAO,GAMR;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,MAAM,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU;YAC/B,EAAE,aAAa,CAAC,wBAAwB,CAAC;YACzC,EAAE,UAAU,EAAE,aAAa,CAAC,sBAAsB,CAAoB,CAAC;QACzE,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU;YAC/B,EAAE,aAAa,CAAC,wBAAwB,CAAC;YACzC,EAAE,UAAU,EAAE,aAAa,CAAC,sBAAsB,CAAoB,CAAC;QAEzE,MAAM,MAAM,CACV,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAqB,CAAA;aAC/C,gBAAgB,EAAE,CAAC,CAAC,CAAC;aACrB,WAAW,EAAE,IAAI,EAAE,CACvB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjB,MAAM,MAAM,CACV,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAqB,CAAA;aAC/C,gBAAgB,EAAE,CAAC,CAAC,CAAC;aACrB,WAAW,EAAE,IAAI,EAAE,CACvB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { html } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { expect } from '@storybook/test';\nimport { TimeredCounter } from '../../src/index.js';\nimport { NoUndefinedField } from '../utils/index.js';\n\nexport const render = (args: any) =>\n html`<timered-counter\n value=${args.value}\n class=${classMap({ [args.className]: true })}\n >\n <span slot=\"prefix\">prefix</span>\n <span slot=\"suffix\">suffix</span>\n <span slot=\"part-suffix-0\">suffix</span>\n </timered-counter>`;\n\nexport async function slots<T, TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n }: {\n counter: TC;\n list?: T[];\n setBy?: (counter: TC, key: string, value: T) => void;\n equal?: (counter: TimeredCounter, a: any, b: T) => Promise<void>;\n },\n) {\n const { step } = context;\n\n await step('Check slots are rendered', async () => {\n const prefix = counter.shadowRoot\n ?.querySelector('timered-counter-roller')\n ?.shadowRoot?.querySelector('.roller__prefix slot') as HTMLSlotElement;\n const suffix = counter.shadowRoot\n ?.querySelector('timered-counter-roller')\n ?.shadowRoot?.querySelector('.roller__suffix slot') as HTMLSlotElement;\n\n await expect(\n (prefix?.assignedElements()[0] as HTMLSlotElement)\n .assignedElements()[0]\n .textContent?.trim(),\n ).toBe('prefix');\n await expect(\n (suffix?.assignedElements()[0] as HTMLSlotElement)\n .assignedElements()[0]\n .textContent?.trim(),\n ).toBe('suffix');\n });\n}\n"]}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function styles<TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, setBy, }: {
|
5
|
+
counter: TC;
|
6
|
+
setBy: (counter: TC, key: string, value: string) => void;
|
7
|
+
}): Promise<void>;
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { expect } from '@storybook/test';
|
2
|
+
import { sleep } from '../utils/index.js';
|
3
|
+
export async function styles(context, { counter, setBy, }) {
|
4
|
+
const { step, args } = context;
|
5
|
+
setBy(counter, 'value', '114514');
|
6
|
+
await step('Test property color with different values', async () => {
|
7
|
+
const colorList = [
|
8
|
+
'rgb(255, 0, 0)',
|
9
|
+
'rgb(0, 255, 0)',
|
10
|
+
'rgb(0, 0, 255)',
|
11
|
+
'linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet)',
|
12
|
+
`url("https://picsum.photos/400/300")`,
|
13
|
+
`linear-gradient(rgba(255, 0, 0, 0.4), rgba(0, 0, 255, 0.4)), url("https://picsum.photos/400/300")`,
|
14
|
+
];
|
15
|
+
for await (const color of colorList) {
|
16
|
+
setBy(counter, 'color', color);
|
17
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
18
|
+
await expect(counter.color).toBe(color);
|
19
|
+
const roller = counter.shadowRoot.querySelector('timered-counter-roller');
|
20
|
+
const digits = roller.shadowRoot.querySelectorAll('timered-counter-roller-digit');
|
21
|
+
const spans = Array.from(digits).map(digit => digit.shadowRoot.querySelector('.roll-item > span'));
|
22
|
+
for await (const span of spans) {
|
23
|
+
const { style } = span;
|
24
|
+
if (CSS.supports('color', color)) {
|
25
|
+
await expect(style.color).toBe(color);
|
26
|
+
}
|
27
|
+
else if (CSS.supports('background-image', color)) {
|
28
|
+
await expect(style.backgroundImage).toBe(color);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
});
|
33
|
+
}
|
34
|
+
//# sourceMappingURL=styles.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../stories/story-parts/styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAA0D,EAC1D,EACE,OAAO,EACP,KAAK,GAIN;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAElC,MAAM,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,SAAS,GAAG;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,6EAA6E;YAC7E,sCAAsC;YACtC,mGAAmG;SACpG,CAAC;QAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAE1D,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAW,CAAC,aAAa,CAC9C,wBAAwB,CACzB,CAAC;YACF,MAAM,MAAM,GAAG,MAAO,CAAC,UAAW,CAAC,gBAAgB,CACjD,8BAA8B,CAC/B,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC3C,KAAK,CAAC,UAAW,CAAC,aAAa,CAAC,mBAAmB,CAAC,CACrD,CAAC;YAEF,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAuB,CAAC;gBAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;oBACjC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxC,CAAC;qBAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC;oBACnD,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { expect } from '@storybook/test';\nimport { TimeredCounter } from '../../src/index.js';\nimport { NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function styles<TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n setBy,\n }: {\n counter: TC;\n setBy: (counter: TC, key: string, value: string) => void;\n },\n) {\n const { step, args } = context;\n\n setBy(counter, 'value', '114514');\n\n await step('Test property color with different values', async () => {\n const colorList = [\n 'rgb(255, 0, 0)',\n 'rgb(0, 255, 0)',\n 'rgb(0, 0, 255)',\n 'linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet)',\n `url(\"https://picsum.photos/400/300\")`,\n `linear-gradient(rgba(255, 0, 0, 0.4), rgba(0, 0, 255, 0.4)), url(\"https://picsum.photos/400/300\")`,\n ];\n\n for await (const color of colorList) {\n setBy(counter, 'color', color);\n\n await sleep((args.animationOptions.duration ?? 100) + 10);\n\n await expect(counter.color).toBe(color);\n\n const roller = counter.shadowRoot!.querySelector(\n 'timered-counter-roller',\n );\n const digits = roller!.shadowRoot!.querySelectorAll(\n 'timered-counter-roller-digit',\n );\n const spans = Array.from(digits).map(digit =>\n digit.shadowRoot!.querySelector('.roll-item > span'),\n );\n\n for await (const span of spans) {\n const { style } = span as HTMLSpanElement;\n if (CSS.supports('color', color)) {\n await expect(style.color).toBe(color);\n } else if (CSS.supports('background-image', color)) {\n await expect(style.backgroundImage).toBe(color);\n }\n }\n }\n });\n}\n"]}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
import { NoUndefinedField } from '../utils/index.js';
|
4
|
+
export declare function valueChange<T, TC extends TimeredCounter>(context: Parameters<NoUndefinedField<StoryObj>['play']>[0], { counter, list, setBy, equal, }: {
|
5
|
+
counter: TC;
|
6
|
+
list?: T[];
|
7
|
+
setBy: (counter: TC, key: string, value: T) => void;
|
8
|
+
equal?: (counter: TimeredCounter, a: any, b: T) => Promise<void>;
|
9
|
+
}): Promise<void>;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { range } from 'remeda';
|
2
|
+
import { equal as _equal, sleep } from '../utils/index.js';
|
3
|
+
export async function valueChange(context, { counter, list = range(0, 5).map(v => v * 10), setBy, equal = _equal, }) {
|
4
|
+
const { step, args } = context;
|
5
|
+
await step('Incrementing the value', async () => {
|
6
|
+
for await (const value of list) {
|
7
|
+
setBy(counter, 'value', value);
|
8
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
9
|
+
await equal(counter, counter.value, value);
|
10
|
+
}
|
11
|
+
});
|
12
|
+
await step('Decrementing the value', async () => {
|
13
|
+
for await (const value of list.slice().reverse()) {
|
14
|
+
setBy(counter, 'value', value);
|
15
|
+
await sleep((args.animationOptions.duration ?? 100) + 10);
|
16
|
+
await equal(counter, counter.value, value);
|
17
|
+
}
|
18
|
+
});
|
19
|
+
}
|
20
|
+
//# sourceMappingURL=value-change.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"value-change.js","sourceRoot":"","sources":["../../../stories/story-parts/value-change.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,KAAK,IAAI,MAAM,EAAoB,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA0D,EAC1D,EACE,OAAO,EACP,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAQ,EAC1C,KAAK,EACL,KAAK,GAAG,MAAM,GAMf;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { StoryObj } from '@storybook/web-components';\nimport { range } from 'remeda';\nimport { TimeredCounter } from '../../src/index.js';\nimport { equal as _equal, NoUndefinedField, sleep } from '../utils/index.js';\n\nexport async function valueChange<T, TC extends TimeredCounter>(\n context: Parameters<NoUndefinedField<StoryObj>['play']>[0],\n {\n counter,\n list = range(0, 5).map(v => v * 10) as T[],\n setBy,\n equal = _equal,\n }: {\n counter: TC;\n list?: T[];\n setBy: (counter: TC, key: string, value: T) => void;\n equal?: (counter: TimeredCounter, a: any, b: T) => Promise<void>;\n },\n) {\n const { step, args } = context;\n\n await step('Incrementing the value', async () => {\n for await (const value of list) {\n setBy(counter, 'value', value);\n await sleep((args.animationOptions.duration ?? 100) + 10);\n await equal(counter, counter.value, value);\n }\n });\n\n await step('Decrementing the value', async () => {\n for await (const value of list.slice().reverse()) {\n setBy(counter, 'value', value);\n await sleep((args.animationOptions.duration ?? 100) + 10);\n await equal(counter, counter.value, value);\n }\n });\n}\n"]}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/web-components';
|
2
|
+
import { type TimeredCounter } from '../../src/index.js';
|
3
|
+
declare const meta: Meta;
|
4
|
+
export default meta;
|
5
|
+
export { Basic, Events, AnimationOptions, Slots, Styles, } from './index.stories.js';
|
6
|
+
export declare const BigNumber: StoryObj<TimeredCounter>;
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { setCustomElementsManifest, } from '@storybook/web-components';
|
2
|
+
import customElementsManifest from '../../custom-elements.json' with { type: 'json' };
|
3
|
+
import { setNumberAdapter } from '../../src/index.js';
|
4
|
+
import { bigNumber } from '../story-parts/big-number.js';
|
5
|
+
import { setByAttr, setByProp } from '../utils/index.js';
|
6
|
+
setCustomElementsManifest(customElementsManifest);
|
7
|
+
const meta = {
|
8
|
+
title: 'TimeredCounter/with decimal.js',
|
9
|
+
component: 'timered-counter',
|
10
|
+
tags: ['autodocs', 'timered-counter'],
|
11
|
+
parameters: {
|
12
|
+
controls: { expanded: true },
|
13
|
+
},
|
14
|
+
beforeEach: () => {
|
15
|
+
setNumberAdapter('decimal.js');
|
16
|
+
},
|
17
|
+
};
|
18
|
+
export default meta;
|
19
|
+
export { Basic, Events, AnimationOptions, Slots, Styles, } from './index.stories.js';
|
20
|
+
export const BigNumber = {
|
21
|
+
args: {
|
22
|
+
className: 'test-target',
|
23
|
+
animationOptions: {
|
24
|
+
duration: 100,
|
25
|
+
},
|
26
|
+
},
|
27
|
+
async play(context) {
|
28
|
+
const { canvasElement, step } = context;
|
29
|
+
const counter = canvasElement.querySelector('.test-target');
|
30
|
+
await step('Testing with attribute', async () => bigNumber(context, { counter, setBy: setByAttr }));
|
31
|
+
await step('Testing with property', async () => bigNumber(context, { counter, setBy: setByProp }));
|
32
|
+
},
|
33
|
+
};
|
34
|
+
//# sourceMappingURL=decimaljs.stories.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"decimaljs.stories.js","sourceRoot":"","sources":["../../../stories/timered-counter/decimaljs.stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,yBAAyB,GAE1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,sBAAsB,MAAM,4BAA4B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAuB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEzD,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;AAElD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,gCAAgC;IACvC,SAAS,EAAE,iBAAiB;IAC5B,IAAI,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACrC,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC7B;IACD,UAAU,EAAE,GAAG,EAAE;QACf,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,OAAO,EACL,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,KAAK,EACL,MAAM,GACP,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,IAAI,EAAE;QACJ,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE;YAChB,QAAQ,EAAE,GAAG;SACd;KACF;IACD,KAAK,CAAC,IAAI,CAAC,OAAO;QAChB,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACxC,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CACzC,cAAc,CACG,CAAC;QAEpB,MAAM,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAC9C,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAClD,CAAC;QAEF,MAAM,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAC7C,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAClD,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import {\n Meta,\n setCustomElementsManifest,\n StoryObj,\n} from '@storybook/web-components';\nimport customElementsManifest from '../../custom-elements.json' with { type: 'json' };\nimport { setNumberAdapter, type TimeredCounter } from '../../src/index.js';\nimport { bigNumber } from '../story-parts/big-number.js';\nimport { setByAttr, setByProp } from '../utils/index.js';\n\nsetCustomElementsManifest(customElementsManifest);\n\nconst meta: Meta = {\n title: 'TimeredCounter/with decimal.js',\n component: 'timered-counter',\n tags: ['autodocs', 'timered-counter'],\n parameters: {\n controls: { expanded: true },\n },\n beforeEach: () => {\n setNumberAdapter('decimal.js');\n },\n};\nexport default meta;\n\nexport {\n Basic,\n Events,\n AnimationOptions,\n Slots,\n Styles,\n} from './index.stories.js';\n\nexport const BigNumber: StoryObj<TimeredCounter> = {\n args: {\n className: 'test-target',\n animationOptions: {\n duration: 100,\n },\n },\n async play(context) {\n const { canvasElement, step } = context;\n const counter = canvasElement.querySelector(\n '.test-target',\n ) as TimeredCounter;\n\n await step('Testing with attribute', async () =>\n bigNumber(context, { counter, setBy: setByAttr }),\n );\n\n await step('Testing with property', async () =>\n bigNumber(context, { counter, setBy: setByProp }),\n );\n },\n};\n"]}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/web-components';
|
2
|
+
import { TimeredCounter } from '../../src/index.js';
|
3
|
+
declare const meta: Meta;
|
4
|
+
export default meta;
|
5
|
+
export declare const Basic: StoryObj<TimeredCounter>;
|
6
|
+
export declare const Events: StoryObj<TimeredCounter>;
|
7
|
+
export declare const AnimationOptions: StoryObj<TimeredCounter>;
|
8
|
+
export declare const Styles: StoryObj<TimeredCounter>;
|
9
|
+
export declare const Slots: StoryObj<TimeredCounter>;
|