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.
Files changed (206) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/custom-elements.json +8484 -0
  4. package/dist/src/counter-adapter.d.ts +38 -0
  5. package/dist/src/counter-adapter.js +69 -0
  6. package/dist/src/counter-adapter.js.map +1 -0
  7. package/dist/src/easing/cubic-bezier.d.ts +5 -0
  8. package/dist/src/easing/cubic-bezier.js +35 -0
  9. package/dist/src/easing/cubic-bezier.js.map +1 -0
  10. package/dist/src/easing/easing-functions.d.ts +1 -0
  11. package/dist/src/easing/easing-functions.js +10 -0
  12. package/dist/src/easing/easing-functions.js.map +1 -0
  13. package/dist/src/easing/index.d.ts +2 -0
  14. package/dist/src/easing/index.js +3 -0
  15. package/dist/src/easing/index.js.map +1 -0
  16. package/dist/src/easing/penner-easing-functions.d.ts +33 -0
  17. package/dist/src/easing/penner-easing-functions.js +82 -0
  18. package/dist/src/easing/penner-easing-functions.js.map +1 -0
  19. package/dist/src/index.d.ts +18 -0
  20. package/dist/src/index.js +13 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/mixins/counter-aira.d.ts +9 -0
  23. package/dist/src/mixins/counter-aira.js +41 -0
  24. package/dist/src/mixins/counter-aira.js.map +1 -0
  25. package/dist/src/mixins/counter-animation.d.ts +13 -0
  26. package/dist/src/mixins/counter-animation.js +55 -0
  27. package/dist/src/mixins/counter-animation.js.map +1 -0
  28. package/dist/src/mixins/counter-base.d.ts +21 -0
  29. package/dist/src/mixins/counter-base.js +152 -0
  30. package/dist/src/mixins/counter-base.js.map +1 -0
  31. package/dist/src/mixins/counter-parts.d.ts +42 -0
  32. package/dist/src/mixins/counter-parts.js +180 -0
  33. package/dist/src/mixins/counter-parts.js.map +1 -0
  34. package/dist/src/mixins/counter-styles.d.ts +17 -0
  35. package/dist/src/mixins/counter-styles.js +93 -0
  36. package/dist/src/mixins/counter-styles.js.map +1 -0
  37. package/dist/src/number-adapter/build-in-bigint.d.ts +6 -0
  38. package/dist/src/number-adapter/build-in-bigint.js +92 -0
  39. package/dist/src/number-adapter/build-in-bigint.js.map +1 -0
  40. package/dist/src/number-adapter/build-in-number.d.ts +3 -0
  41. package/dist/src/number-adapter/build-in-number.js +84 -0
  42. package/dist/src/number-adapter/build-in-number.js.map +1 -0
  43. package/dist/src/number-adapter/decimal-js.d.ts +4 -0
  44. package/dist/src/number-adapter/decimal-js.js +87 -0
  45. package/dist/src/number-adapter/decimal-js.js.map +1 -0
  46. package/dist/src/number-adapter/index.d.ts +4 -0
  47. package/dist/src/number-adapter/index.js +5 -0
  48. package/dist/src/number-adapter/index.js.map +1 -0
  49. package/dist/src/number-adapter/types.d.ts +34 -0
  50. package/dist/src/number-adapter/types.js +2 -0
  51. package/dist/src/number-adapter/types.js.map +1 -0
  52. package/dist/src/string-adapter/build-in-intl-segmenter.d.ts +10 -0
  53. package/dist/src/string-adapter/build-in-intl-segmenter.js +18 -0
  54. package/dist/src/string-adapter/build-in-intl-segmenter.js.map +1 -0
  55. package/dist/src/string-adapter/build-in-string.d.ts +12 -0
  56. package/dist/src/string-adapter/build-in-string.js +16 -0
  57. package/dist/src/string-adapter/build-in-string.js.map +1 -0
  58. package/dist/src/string-adapter/grapheme-splitter.d.ts +8 -0
  59. package/dist/src/string-adapter/grapheme-splitter.js +16 -0
  60. package/dist/src/string-adapter/grapheme-splitter.js.map +1 -0
  61. package/dist/src/string-adapter/index.d.ts +4 -0
  62. package/dist/src/string-adapter/index.js +5 -0
  63. package/dist/src/string-adapter/index.js.map +1 -0
  64. package/dist/src/string-adapter/types.d.ts +19 -0
  65. package/dist/src/string-adapter/types.js +2 -0
  66. package/dist/src/string-adapter/types.js.map +1 -0
  67. package/dist/src/styles/timered-counter-datetime-styles.d.ts +1 -0
  68. package/dist/src/styles/timered-counter-datetime-styles.js +8 -0
  69. package/dist/src/styles/timered-counter-datetime-styles.js.map +1 -0
  70. package/dist/src/styles/timered-counter-number-styles.d.ts +1 -0
  71. package/dist/src/styles/timered-counter-number-styles.js +3 -0
  72. package/dist/src/styles/timered-counter-number-styles.js.map +1 -0
  73. package/dist/src/styles/timered-counter-string-styles.d.ts +1 -0
  74. package/dist/src/styles/timered-counter-string-styles.js +3 -0
  75. package/dist/src/styles/timered-counter-string-styles.js.map +1 -0
  76. package/dist/src/styles/timered-counter-styles.d.ts +1 -0
  77. package/dist/src/styles/timered-counter-styles.js +25 -0
  78. package/dist/src/styles/timered-counter-styles.js.map +1 -0
  79. package/dist/src/timered-counter-datetime-duration.d.ts +37 -0
  80. package/dist/src/timered-counter-datetime-duration.js +186 -0
  81. package/dist/src/timered-counter-datetime-duration.js.map +1 -0
  82. package/dist/src/timered-counter-number.d.ts +23 -0
  83. package/dist/src/timered-counter-number.js +114 -0
  84. package/dist/src/timered-counter-number.js.map +1 -0
  85. package/dist/src/timered-counter-string.d.ts +30 -0
  86. package/dist/src/timered-counter-string.js +138 -0
  87. package/dist/src/timered-counter-string.js.map +1 -0
  88. package/dist/src/timered-counter.d.ts +15 -0
  89. package/dist/src/timered-counter.js +80 -0
  90. package/dist/src/timered-counter.js.map +1 -0
  91. package/dist/src/transitions/roller/index.d.ts +1 -0
  92. package/dist/src/transitions/roller/index.js +2 -0
  93. package/dist/src/transitions/roller/index.js.map +1 -0
  94. package/dist/src/transitions/roller/roller-digit.d.ts +28 -0
  95. package/dist/src/transitions/roller/roller-digit.js +259 -0
  96. package/dist/src/transitions/roller/roller-digit.js.map +1 -0
  97. package/dist/src/transitions/roller/roller.d.ts +42 -0
  98. package/dist/src/transitions/roller/roller.js +235 -0
  99. package/dist/src/transitions/roller/roller.js.map +1 -0
  100. package/dist/src/transitions/roller/styles.d.ts +2 -0
  101. package/dist/src/transitions/roller/styles.js +77 -0
  102. package/dist/src/transitions/roller/styles.js.map +1 -0
  103. package/dist/src/types/duration.d.ts +33 -0
  104. package/dist/src/types/duration.js +35 -0
  105. package/dist/src/types/duration.js.map +1 -0
  106. package/dist/src/types/group.d.ts +67 -0
  107. package/dist/src/types/group.js +2 -0
  108. package/dist/src/types/group.js.map +1 -0
  109. package/dist/src/utils/any-base.d.ts +6 -0
  110. package/dist/src/utils/any-base.js +56 -0
  111. package/dist/src/utils/any-base.js.map +1 -0
  112. package/dist/src/utils/duration.d.ts +15 -0
  113. package/dist/src/utils/duration.js +66 -0
  114. package/dist/src/utils/duration.js.map +1 -0
  115. package/dist/src/utils/extract-group-option.d.ts +9 -0
  116. package/dist/src/utils/extract-group-option.js +81 -0
  117. package/dist/src/utils/extract-group-option.js.map +1 -0
  118. package/dist/src/utils/iso8601-duration.d.ts +4 -0
  119. package/dist/src/utils/iso8601-duration.js +32 -0
  120. package/dist/src/utils/iso8601-duration.js.map +1 -0
  121. package/dist/src/utils/localized-date-time-fields.d.ts +2 -0
  122. package/dist/src/utils/localized-date-time-fields.js +24 -0
  123. package/dist/src/utils/localized-date-time-fields.js.map +1 -0
  124. package/dist/src/utils/parse-json-string.d.ts +1 -0
  125. package/dist/src/utils/parse-json-string.js +9 -0
  126. package/dist/src/utils/parse-json-string.js.map +1 -0
  127. package/dist/src/utils/polyfill-keyframes.d.ts +1 -0
  128. package/dist/src/utils/polyfill-keyframes.js +19 -0
  129. package/dist/src/utils/polyfill-keyframes.js.map +1 -0
  130. package/dist/src/utils/preprocess-part-data.d.ts +25 -0
  131. package/dist/src/utils/preprocess-part-data.js +59 -0
  132. package/dist/src/utils/preprocess-part-data.js.map +1 -0
  133. package/dist/src/utils/transition-digit.d.ts +2 -0
  134. package/dist/src/utils/transition-digit.js +51 -0
  135. package/dist/src/utils/transition-digit.js.map +1 -0
  136. package/dist/src/utils/uuid.d.ts +1 -0
  137. package/dist/src/utils/uuid.js +7 -0
  138. package/dist/src/utils/uuid.js.map +1 -0
  139. package/dist/stories/story-parts/animation-events.d.ts +9 -0
  140. package/dist/stories/story-parts/animation-events.js +35 -0
  141. package/dist/stories/story-parts/animation-events.js.map +1 -0
  142. package/dist/stories/story-parts/animation-options.d.ts +8 -0
  143. package/dist/stories/story-parts/animation-options.js +25 -0
  144. package/dist/stories/story-parts/animation-options.js.map +1 -0
  145. package/dist/stories/story-parts/big-number.d.ts +8 -0
  146. package/dist/stories/story-parts/big-number.js +25 -0
  147. package/dist/stories/story-parts/big-number.js.map +1 -0
  148. package/dist/stories/story-parts/datetime-locale.d.ts +8 -0
  149. package/dist/stories/story-parts/datetime-locale.js +30 -0
  150. package/dist/stories/story-parts/datetime-locale.js.map +1 -0
  151. package/dist/stories/story-parts/datetime-precision.d.ts +8 -0
  152. package/dist/stories/story-parts/datetime-precision.js +82 -0
  153. package/dist/stories/story-parts/datetime-precision.js.map +1 -0
  154. package/dist/stories/story-parts/edge-case.d.ts +8 -0
  155. package/dist/stories/story-parts/edge-case.js +12 -0
  156. package/dist/stories/story-parts/edge-case.js.map +1 -0
  157. package/dist/stories/story-parts/emoji.d.ts +9 -0
  158. package/dist/stories/story-parts/emoji.js +20 -0
  159. package/dist/stories/story-parts/emoji.js.map +1 -0
  160. package/dist/stories/story-parts/locale-number.d.ts +7 -0
  161. package/dist/stories/story-parts/locale-number.js +23 -0
  162. package/dist/stories/story-parts/locale-number.js.map +1 -0
  163. package/dist/stories/story-parts/slots.d.ts +10 -0
  164. package/dist/stories/story-parts/slots.js +29 -0
  165. package/dist/stories/story-parts/slots.js.map +1 -0
  166. package/dist/stories/story-parts/styles.d.ts +7 -0
  167. package/dist/stories/story-parts/styles.js +34 -0
  168. package/dist/stories/story-parts/styles.js.map +1 -0
  169. package/dist/stories/story-parts/value-change.d.ts +9 -0
  170. package/dist/stories/story-parts/value-change.js +20 -0
  171. package/dist/stories/story-parts/value-change.js.map +1 -0
  172. package/dist/stories/timered-counter/decimaljs.stories.d.ts +6 -0
  173. package/dist/stories/timered-counter/decimaljs.stories.js +34 -0
  174. package/dist/stories/timered-counter/decimaljs.stories.js.map +1 -0
  175. package/dist/stories/timered-counter/index.stories.d.ts +9 -0
  176. package/dist/stories/timered-counter/index.stories.js +180 -0
  177. package/dist/stories/timered-counter/index.stories.js.map +1 -0
  178. package/dist/stories/timered-counter-datetime-duration/index.stories.d.ts +7 -0
  179. package/dist/stories/timered-counter-datetime-duration/index.stories.js +95 -0
  180. package/dist/stories/timered-counter-datetime-duration/index.stories.js.map +1 -0
  181. package/dist/stories/timered-counter-number/decimaljs.stories.d.ts +6 -0
  182. package/dist/stories/timered-counter-number/decimaljs.stories.js +34 -0
  183. package/dist/stories/timered-counter-number/decimaljs.stories.js.map +1 -0
  184. package/dist/stories/timered-counter-number/index.stories.d.ts +9 -0
  185. package/dist/stories/timered-counter-number/index.stories.js +188 -0
  186. package/dist/stories/timered-counter-number/index.stories.js.map +1 -0
  187. package/dist/stories/timered-counter-string/decimaljs.stories.d.ts +7 -0
  188. package/dist/stories/timered-counter-string/decimaljs.stories.js +55 -0
  189. package/dist/stories/timered-counter-string/decimaljs.stories.js.map +1 -0
  190. package/dist/stories/timered-counter-string/grapheme-splitter.stories.d.ts +7 -0
  191. package/dist/stories/timered-counter-string/grapheme-splitter.stories.js +56 -0
  192. package/dist/stories/timered-counter-string/grapheme-splitter.stories.js.map +1 -0
  193. package/dist/stories/timered-counter-string/index.stories.d.ts +9 -0
  194. package/dist/stories/timered-counter-string/index.stories.js +126 -0
  195. package/dist/stories/timered-counter-string/index.stories.js.map +1 -0
  196. package/dist/stories/timered-counter-string/intl-segmenter.stories.d.ts +7 -0
  197. package/dist/stories/timered-counter-string/intl-segmenter.stories.js +56 -0
  198. package/dist/stories/timered-counter-string/intl-segmenter.stories.js.map +1 -0
  199. package/dist/stories/utils/index.d.ts +8 -0
  200. package/dist/stories/utils/index.js +20 -0
  201. package/dist/stories/utils/index.js.map +1 -0
  202. package/dist/test/td-counter.test.d.ts +1 -0
  203. package/dist/test/td-counter.test.js +25 -0
  204. package/dist/test/td-counter.test.js.map +1 -0
  205. package/dist/tsconfig.tsbuildinfo +1 -0
  206. 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":"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","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>;