@f1falcha/stimulus 1.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 (576) hide show
  1. package/accordion/accordion-config.scss +18 -0
  2. package/accordion/accordion-item/accordion-item.component.d.ts +11 -0
  3. package/accordion/accordion-item-body/accordion-item-body.component.d.ts +10 -0
  4. package/accordion/accordion-item-header/accordion-item-header.component.d.ts +15 -0
  5. package/accordion/accordion.d.ts +12 -0
  6. package/accordion/accordion.icon.d.ts +3 -0
  7. package/accordion/accordion.scss +41 -0
  8. package/account-card/account-card-config.scss +36 -0
  9. package/account-card/account-card-header/account-card-header-config.scss +9 -0
  10. package/account-card/account-card-header/account-card-header.component.d.ts +12 -0
  11. package/account-card/account-card-header/account-card-header.scss +11 -0
  12. package/account-card/account-card.component.d.ts +16 -0
  13. package/account-card/account-card.scss +19 -0
  14. package/alert/alert-animation.d.ts +6 -0
  15. package/alert/alert-config.d.ts +26 -0
  16. package/alert/alert-config.scss +43 -0
  17. package/alert/alert-icon.d.ts +3 -0
  18. package/alert/alert-ref.d.ts +11 -0
  19. package/alert/alert.d.ts +23 -0
  20. package/alert/alert.scss +91 -0
  21. package/alert/alert.service.d.ts +31 -0
  22. package/avatar/avatar-config.scss +12 -0
  23. package/avatar/avatar.d.ts +21 -0
  24. package/avatar/avatar.scss +2 -0
  25. package/badge/badge-config.scss +68 -0
  26. package/badge/badge.d.ts +17 -0
  27. package/badge/badge.scss +21 -0
  28. package/bank-logo.provider.d.ts +7 -0
  29. package/bordered-section/bordered-section-config.scss +24 -0
  30. package/bordered-section/bordered-section.d.ts +15 -0
  31. package/bordered-section/bordered-section.scss +22 -0
  32. package/box-shadow/box-shadow-config.scss +18 -0
  33. package/button/button-config.scss +342 -0
  34. package/button/button.d.ts +10 -0
  35. package/button/button.scss +62 -0
  36. package/button-group/button-group-config.scss +12 -0
  37. package/button-group/button-group-header/button-group-header-config.scss +9 -0
  38. package/button-group/button-group-header/button-group-header.d.ts +8 -0
  39. package/button-group/button-group-header/button-group-header.scss +5 -0
  40. package/button-group/button-group.d.ts +11 -0
  41. package/button-group/buttton-group.scss +19 -0
  42. package/button-spinner/button-spinner-config.scss +15 -0
  43. package/button-spinner/button-spinner.scss +30 -0
  44. package/card/card-config.scss +15 -0
  45. package/card/card.component.d.ts +8 -0
  46. package/card/card.scss +14 -0
  47. package/chart/chart-config.scss +21 -0
  48. package/chart/chart.component.d.ts +21 -0
  49. package/chart/chart.component.scss +34 -0
  50. package/checkbox/checkbox-config.scss +62 -0
  51. package/checkbox/checkbox.scss +45 -0
  52. package/checkbox-dropdown/checkbox-dropdown.component.d.ts +139 -0
  53. package/checkbox-dropdown/checkbox-dropdown.component.scss +11 -0
  54. package/checkbox-dropdown/checkbox-dropdown.icon.d.ts +3 -0
  55. package/clipboard/clipboard-config.scss +23 -0
  56. package/clipboard/clipboard.component.d.ts +15 -0
  57. package/clipboard/clipboard.component.scss +37 -0
  58. package/clipboard/clipboard.icon.d.ts +3 -0
  59. package/color/cherry.scss +19 -0
  60. package/color/chilli.scss +19 -0
  61. package/color/comet.scss +19 -0
  62. package/color/cotton-candy.scss +19 -0
  63. package/color/default.scss +154 -0
  64. package/color/emerald.scss +19 -0
  65. package/color/goblin.scss +19 -0
  66. package/color/jacaranda.scss +19 -0
  67. package/color/mars.scss +19 -0
  68. package/color/orchid.scss +19 -0
  69. package/color/spaceship.scss +19 -0
  70. package/color/summer.scss +19 -0
  71. package/color/tiger-lily.scss +19 -0
  72. package/color-wrapper/color-wrapper-config.scss +37 -0
  73. package/color-wrapper/color-wrapper.d.ts +17 -0
  74. package/color-wrapper/color-wrapper.scss +23 -0
  75. package/column-seperator/column-separator-config.scss +16 -0
  76. package/column-seperator/column-separator.d.ts +14 -0
  77. package/column-seperator/column-separator.scss +25 -0
  78. package/column-text/column-text.config.scss +12 -0
  79. package/column-text/column-text.d.ts +11 -0
  80. package/column-text/column-text.scss +22 -0
  81. package/container/container-config.scss +12 -0
  82. package/container/container.component.d.ts +12 -0
  83. package/container/container.scss +19 -0
  84. package/custom-datepicker/custom-datepicker-config.scss +50 -0
  85. package/custom-datepicker/custom-datepicker.component.d.ts +80 -0
  86. package/custom-datepicker/custom-datepicker.component.scss +127 -0
  87. package/custom-datepicker/custom-datepicker.model.d.ts +18 -0
  88. package/custom-datepicker/datepicker.icon.d.ts +3 -0
  89. package/custom-datepicker/timepicker/timepicker.component.d.ts +37 -0
  90. package/custom-datepicker/timepicker/timepicker.component.scss +79 -0
  91. package/data-list/data-list.config.scss +35 -0
  92. package/data-list/data-list.d.ts +13 -0
  93. package/data-list/data-list.scss +67 -0
  94. package/date-range-picker/date-range-picker.d.ts +40 -0
  95. package/datepicker/datepicker.config.scss +0 -0
  96. package/datepicker/datepicker.d.ts +45 -0
  97. package/datepicker/datepicker.scss +0 -0
  98. package/datepicker-icon/datepicker-icon-config.scss +10 -0
  99. package/datepicker-icon/datepicker-icon.d.ts +6 -0
  100. package/datepicker-icon/datepicker-icon.scss +7 -0
  101. package/datepicker.provider.d.ts +2 -0
  102. package/detail-panel/detail-panel-config.scss +16 -0
  103. package/detail-panel/detail-panel-row/detail-panel-column/detail-panel-column-config.scss +11 -0
  104. package/detail-panel/detail-panel-row/detail-panel-column/detail-panel-column.d.ts +6 -0
  105. package/detail-panel/detail-panel-row/detail-panel-column/detail-panel-column.scss +15 -0
  106. package/detail-panel/detail-panel-row/detail-panel-row.d.ts +6 -0
  107. package/detail-panel/detail-panel-row/detail-panel-row.scss +5 -0
  108. package/detail-panel/detail-panel-title/detail-panel-title-config.scss +14 -0
  109. package/detail-panel/detail-panel-title/detail-panel-title.d.ts +7 -0
  110. package/detail-panel/detail-panel-title/detail-panel-title.scss +16 -0
  111. package/detail-panel/detail-panel.d.ts +11 -0
  112. package/detail-panel/detail-panel.scss +50 -0
  113. package/dialog/dialog-body/dialog-body.component.d.ts +6 -0
  114. package/dialog/dialog-config.scss +24 -0
  115. package/dialog/dialog-container/dialog-container-config.scss +9 -0
  116. package/dialog/dialog-container/dialog-container.component.d.ts +6 -0
  117. package/dialog/dialog-container/dialog-container.scss +6 -0
  118. package/dialog/dialog-footer/dialog-footer.component.d.ts +6 -0
  119. package/dialog/dialog-footer/dialog-footer.scss +6 -0
  120. package/dialog/dialog-header/dialog-header-config.scss +14 -0
  121. package/dialog/dialog-header/dialog-header.component.d.ts +10 -0
  122. package/dialog/dialog-header/dialog-header.scss +16 -0
  123. package/dialog/dialog-icon.d.ts +3 -0
  124. package/dialog/dialog.component.d.ts +12 -0
  125. package/dialog/dialog.scss +27 -0
  126. package/dialog.provider.d.ts +3 -0
  127. package/dialog.ref.d.ts +4 -0
  128. package/dialog.service.d.ts +7 -0
  129. package/dropdown/context-menu-config.scss +23 -0
  130. package/dropdown/context-menu-content/context-menu-content.d.ts +9 -0
  131. package/dropdown/context-menu-item.d.ts +10 -0
  132. package/dropdown/context-menu-list/context-menu-list.d.ts +9 -0
  133. package/dropdown/context-menu.d.ts +19 -0
  134. package/dropdown/context-menu.scss +41 -0
  135. package/error-page-container/error-content/error-content-config.scss +29 -0
  136. package/error-page-container/error-content/error-content.d.ts +24 -0
  137. package/error-page-container/error-content/error-content.scss +58 -0
  138. package/error-page-container/error-page-container.d.ts +6 -0
  139. package/error-page-container/error-page-container.scss +15 -0
  140. package/esm2022/accordion/accordion-item/accordion-item.component.mjs +23 -0
  141. package/esm2022/accordion/accordion-item-body/accordion-item-body.component.mjs +18 -0
  142. package/esm2022/accordion/accordion-item-header/accordion-item-header.component.mjs +41 -0
  143. package/esm2022/accordion/accordion.icon.mjs +25 -0
  144. package/esm2022/accordion/accordion.mjs +14 -0
  145. package/esm2022/account-card/account-card-header/account-card-header.component.mjs +30 -0
  146. package/esm2022/account-card/account-card.component.mjs +64 -0
  147. package/esm2022/alert/alert-animation.mjs +9 -0
  148. package/esm2022/alert/alert-config.mjs +13 -0
  149. package/esm2022/alert/alert-icon.mjs +33 -0
  150. package/esm2022/alert/alert-ref.mjs +23 -0
  151. package/esm2022/alert/alert.mjs +50 -0
  152. package/esm2022/alert/alert.service.mjs +112 -0
  153. package/esm2022/avatar/avatar.mjs +91 -0
  154. package/esm2022/badge/badge.mjs +77 -0
  155. package/esm2022/bank-logo.provider.mjs +12 -0
  156. package/esm2022/bordered-section/bordered-section.mjs +70 -0
  157. package/esm2022/button/button.mjs +26 -0
  158. package/esm2022/button-group/button-group-header/button-group-header.mjs +24 -0
  159. package/esm2022/button-group/button-group.mjs +41 -0
  160. package/esm2022/card/card.component.mjs +28 -0
  161. package/esm2022/chart/chart.component.mjs +70 -0
  162. package/esm2022/checkbox-dropdown/checkbox-dropdown.component.mjs +232 -0
  163. package/esm2022/checkbox-dropdown/checkbox-dropdown.icon.mjs +14 -0
  164. package/esm2022/clipboard/clipboard.component.mjs +36 -0
  165. package/esm2022/clipboard/clipboard.icon.mjs +6 -0
  166. package/esm2022/color-wrapper/color-wrapper.mjs +82 -0
  167. package/esm2022/column-seperator/column-separator.mjs +62 -0
  168. package/esm2022/column-text/column-text.mjs +38 -0
  169. package/esm2022/container/container.component.mjs +46 -0
  170. package/esm2022/custom-datepicker/custom-datepicker.component.mjs +364 -0
  171. package/esm2022/custom-datepicker/custom-datepicker.model.mjs +12 -0
  172. package/esm2022/custom-datepicker/datepicker.icon.mjs +7 -0
  173. package/esm2022/custom-datepicker/timepicker/timepicker.component.mjs +195 -0
  174. package/esm2022/data-list/data-list.mjs +46 -0
  175. package/esm2022/date-range-picker/date-range-picker.mjs +207 -0
  176. package/esm2022/datepicker/datepicker.mjs +153 -0
  177. package/esm2022/datepicker-icon/datepicker-icon.mjs +18 -0
  178. package/esm2022/datepicker.provider.mjs +6 -0
  179. package/esm2022/detail-panel/detail-panel-row/detail-panel-column/detail-panel-column.mjs +15 -0
  180. package/esm2022/detail-panel/detail-panel-row/detail-panel-row.mjs +15 -0
  181. package/esm2022/detail-panel/detail-panel-title/detail-panel-title.mjs +19 -0
  182. package/esm2022/detail-panel/detail-panel.mjs +36 -0
  183. package/esm2022/dialog/dialog-body/dialog-body.component.mjs +16 -0
  184. package/esm2022/dialog/dialog-container/dialog-container.component.mjs +16 -0
  185. package/esm2022/dialog/dialog-footer/dialog-footer.component.mjs +16 -0
  186. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +25 -0
  187. package/esm2022/dialog/dialog-icon.mjs +8 -0
  188. package/esm2022/dialog/dialog.component.mjs +36 -0
  189. package/esm2022/dialog.provider.mjs +5 -0
  190. package/esm2022/dialog.ref.mjs +4 -0
  191. package/esm2022/dialog.service.mjs +15 -0
  192. package/esm2022/dropdown/context-menu-content/context-menu-content.mjs +18 -0
  193. package/esm2022/dropdown/context-menu-item.mjs +28 -0
  194. package/esm2022/dropdown/context-menu-list/context-menu-list.mjs +18 -0
  195. package/esm2022/dropdown/context-menu.mjs +61 -0
  196. package/esm2022/error-page-container/error-content/error-content.mjs +49 -0
  197. package/esm2022/error-page-container/error-page-container.mjs +18 -0
  198. package/esm2022/extract-inital/extract-initial.mjs +21 -0
  199. package/esm2022/f1softinternational-stimulus.mjs +5 -0
  200. package/esm2022/file-uploader/file-uploader-icon.mjs +13 -0
  201. package/esm2022/file-uploader/file-uploader.mjs +274 -0
  202. package/esm2022/file-uploader/file-uploader.ref.mjs +3 -0
  203. package/esm2022/file-uploader/file-uploader.service.mjs +26 -0
  204. package/esm2022/filter/filter.mjs +173 -0
  205. package/esm2022/form/form-control/form-control-action.mjs +18 -0
  206. package/esm2022/form/form-control/form-control-icon.mjs +18 -0
  207. package/esm2022/form/form-control/form-field.mjs +86 -0
  208. package/esm2022/form/form-control-wrapper/form-control-wrapper.component.mjs +22 -0
  209. package/esm2022/form/form-error-messages.mjs +43 -0
  210. package/esm2022/form/form-message/form-message.mjs +30 -0
  211. package/esm2022/form/select-input-field/select-input-field.mjs +14 -0
  212. package/esm2022/form/validate-and-submit.mjs +54 -0
  213. package/esm2022/full-container/full-container.component.mjs +30 -0
  214. package/esm2022/grid/grid-item.component.mjs +24 -0
  215. package/esm2022/grid/grid.component.mjs +56 -0
  216. package/esm2022/grid-row/grid-row.mjs +18 -0
  217. package/esm2022/icon/icons.mjs +619 -0
  218. package/esm2022/image-card/illustration.pipe.mjs +57 -0
  219. package/esm2022/image-card/image-card.component.mjs +22 -0
  220. package/esm2022/image-panel/image-panel.component.mjs +88 -0
  221. package/esm2022/info-column/info-column.mjs +18 -0
  222. package/esm2022/info-slider/info-slider.component.mjs +50 -0
  223. package/esm2022/inline-alert/inline-alert.mjs +51 -0
  224. package/esm2022/inline-group/inline-group.component.mjs +32 -0
  225. package/esm2022/input/input.mjs +25 -0
  226. package/esm2022/label/label.mjs +18 -0
  227. package/esm2022/layout/layout.component.mjs +23 -0
  228. package/esm2022/link/link.mjs +79 -0
  229. package/esm2022/media-preview/media-preview-icon.mjs +41 -0
  230. package/esm2022/media-preview/media-preview-modal/media-preview-modal.mjs +128 -0
  231. package/esm2022/media-preview/media-preview.mjs +131 -0
  232. package/esm2022/media-preview/media_preview.service.mjs +31 -0
  233. package/esm2022/menu/menu-icon.mjs +29 -0
  234. package/esm2022/menu/menu.component.mjs +151 -0
  235. package/esm2022/nebular-icon.mjs +179 -0
  236. package/esm2022/otp-input/otp-input.component.mjs +106 -0
  237. package/esm2022/otp-input/otp-input.icon.mjs +13 -0
  238. package/esm2022/page-container/page-container-info/page-container-info.component.mjs +28 -0
  239. package/esm2022/page-container/page-container.component.mjs +63 -0
  240. package/esm2022/page-header/page-header.component.mjs +47 -0
  241. package/esm2022/page-header/page-header.icons.mjs +8 -0
  242. package/esm2022/page-header/page-sub-heading/page-sub-heading.component.mjs +12 -0
  243. package/esm2022/page-loader/page-loader.component.mjs +47 -0
  244. package/esm2022/pagination/pagination.icon.mjs +11 -0
  245. package/esm2022/pagination/pagination.mjs +170 -0
  246. package/esm2022/popover-content/popover-content-item/popover-content-item.component.mjs +15 -0
  247. package/esm2022/popover-content/popover-content.component.mjs +23 -0
  248. package/esm2022/preview-box/preview-box.component.mjs +73 -0
  249. package/esm2022/progress-bar/progress-bar.component.mjs +31 -0
  250. package/esm2022/progress-chart/progress-chart.component.mjs +87 -0
  251. package/esm2022/public-api.mjs +141 -0
  252. package/esm2022/radio-card-group/radio-card/radio-card.component.mjs +86 -0
  253. package/esm2022/radio-card-group/radio-card-group.component.mjs +61 -0
  254. package/esm2022/regex-checker/regex-checker-icon.mjs +18 -0
  255. package/esm2022/regex-checker/regex-checker.mjs +77 -0
  256. package/esm2022/regex-checker/regex-validity-icon.pipe.mjs +25 -0
  257. package/esm2022/ribbon/ribbon-icon.mjs +8 -0
  258. package/esm2022/ribbon/ribbon.mjs +37 -0
  259. package/esm2022/round-checkbox/round-checkbox.component.mjs +43 -0
  260. package/esm2022/row/column/column.component.mjs +19 -0
  261. package/esm2022/row/row.component.mjs +32 -0
  262. package/esm2022/scrollable-content/scrollable-content.component.mjs +22 -0
  263. package/esm2022/section-header/section-header.component.mjs +29 -0
  264. package/esm2022/section-row/section-row.mjs +35 -0
  265. package/esm2022/section-separator/section-separator.mjs +69 -0
  266. package/esm2022/section-shell/section-shell.component.mjs +45 -0
  267. package/esm2022/select/select.component.mjs +137 -0
  268. package/esm2022/select-card/select-card-icon.mjs +24 -0
  269. package/esm2022/select-card/select-card.component.mjs +117 -0
  270. package/esm2022/select-country/select-country.component.mjs +86 -0
  271. package/esm2022/shell/checker-sidebar/checker-sidebar.component.mjs +19 -0
  272. package/esm2022/shell/maker-sidebar/maker-sidebar.component.mjs +19 -0
  273. package/esm2022/shell/nebular-icons.mjs +180 -0
  274. package/esm2022/shell/shell-icons.mjs +474 -0
  275. package/esm2022/shell/shell-sidebar/shell-sidebar.component.mjs +38 -0
  276. package/esm2022/shell/shell.component.mjs +77 -0
  277. package/esm2022/side-drawer/side-drawer.mjs +15 -0
  278. package/esm2022/side-drawer/side-drawer.service.mjs +71 -0
  279. package/esm2022/size/component-size.mjs +2 -0
  280. package/esm2022/spinner/spinner.mjs +32 -0
  281. package/esm2022/stepper/step/step.mjs +20 -0
  282. package/esm2022/stepper/step/step.pipe.mjs +21 -0
  283. package/esm2022/stepper/step-header/step-header.mjs +29 -0
  284. package/esm2022/stepper/stepper-button/stepper-next.mjs +21 -0
  285. package/esm2022/stepper/stepper-button/stepper-previous.mjs +21 -0
  286. package/esm2022/stepper/stepper.mjs +56 -0
  287. package/esm2022/stimulus.module.mjs +891 -0
  288. package/esm2022/table/table-column/scl-table-column.mjs +54 -0
  289. package/esm2022/table/table-icon.mjs +13 -0
  290. package/esm2022/table/table-text/scl-table-text.mjs +51 -0
  291. package/esm2022/table/table.config.mjs +15 -0
  292. package/esm2022/table/table.mjs +186 -0
  293. package/esm2022/table-action-control/table-action-control.component.mjs +20 -0
  294. package/esm2022/tabset/tab/tab.component.mjs +29 -0
  295. package/esm2022/tabset/tab-directive/tabset.directive.mjs +22 -0
  296. package/esm2022/tabset/tabset.component.mjs +40 -0
  297. package/esm2022/taglist/tag/tag.component.mjs +51 -0
  298. package/esm2022/taglist/tag/tag.directive.mjs +30 -0
  299. package/esm2022/taglist/taglist.component.mjs +39 -0
  300. package/esm2022/text-decoration/text-decoration.component.mjs +26 -0
  301. package/esm2022/text-editor/text-editor.mjs +263 -0
  302. package/esm2022/theme.provider.mjs +9 -0
  303. package/esm2022/timeline/timeline.component.mjs +66 -0
  304. package/esm2022/timepicker/timepicker.component.mjs +377 -0
  305. package/esm2022/timepicker/timepicker.icon.mjs +7 -0
  306. package/esm2022/timepicker/timepicker.model.mjs +6 -0
  307. package/esm2022/toggle/toggle-description/toggle-description.mjs +18 -0
  308. package/esm2022/toggle/toggle.mjs +75 -0
  309. package/esm2022/toggle-password/toggle-password.component.mjs +54 -0
  310. package/esm2022/toggle-password/toggle-password.directive.mjs +26 -0
  311. package/esm2022/toggle-password/toggle-password.icon.mjs +13 -0
  312. package/esm2022/treeview/treeview-header/treeview-header.mjs +26 -0
  313. package/esm2022/treeview/treeview.icon.mjs +53 -0
  314. package/esm2022/treeview/treeview.mjs +319 -0
  315. package/esm2022/truncate/truncate.component.mjs +53 -0
  316. package/esm2022/typography/typography.mjs +168 -0
  317. package/extract-inital/extract-initial.d.ts +8 -0
  318. package/f1softinternational-stimulus-1.0.0.tgz +0 -0
  319. package/fesm2022/f1softinternational-stimulus.mjs +10275 -0
  320. package/file-uploader/file-upload-config.scss +48 -0
  321. package/file-uploader/file-upload.scss +77 -0
  322. package/file-uploader/file-uploader-icon.d.ts +3 -0
  323. package/file-uploader/file-uploader.d.ts +84 -0
  324. package/file-uploader/file-uploader.ref.d.ts +6 -0
  325. package/file-uploader/file-uploader.service.d.ts +11 -0
  326. package/filter/filter.d.ts +48 -0
  327. package/flag/_flags.scss +9 -0
  328. package/form/form-config.scss +14 -0
  329. package/form/form-control/form-control-action.d.ts +6 -0
  330. package/form/form-control/form-control-config.scss +9 -0
  331. package/form/form-control/form-control-icon.d.ts +6 -0
  332. package/form/form-control/form-control.scss +17 -0
  333. package/form/form-control/form-field.d.ts +26 -0
  334. package/form/form-control-wrapper/form-control-wrapper-config.scss +11 -0
  335. package/form/form-control-wrapper/form-control-wrapper.component.d.ts +8 -0
  336. package/form/form-control-wrapper/form-control-wrapper.scss +17 -0
  337. package/form/form-error-messages.d.ts +8 -0
  338. package/form/form-message/form-message-config.scss +7 -0
  339. package/form/form-message/form-message.d.ts +15 -0
  340. package/form/form-message/form-message.scss +6 -0
  341. package/form/form.scss +22 -0
  342. package/form/select-input-field/select-input-field-config.scss +13 -0
  343. package/form/select-input-field/select-input-field.d.ts +6 -0
  344. package/form/select-input-field/select-input-field.scss +43 -0
  345. package/form/validate-and-submit.d.ts +14 -0
  346. package/full-container/full-container-config.scss +16 -0
  347. package/full-container/full-container.component.d.ts +11 -0
  348. package/full-container/full-container.component.scss +54 -0
  349. package/grid/grid-config.scss +14 -0
  350. package/grid/grid-item.component.d.ts +8 -0
  351. package/grid/grid.component.d.ts +10 -0
  352. package/grid/grid.component.scss +26 -0
  353. package/grid-row/grid-row.config.scss +9 -0
  354. package/grid-row/grid-row.d.ts +6 -0
  355. package/grid-row/grid-row.scss +7 -0
  356. package/icon/icon.config.scss +9 -0
  357. package/icon/icon.scss +9 -0
  358. package/icon/icons.d.ts +3 -0
  359. package/image-card/illustration.pipe.d.ts +8 -0
  360. package/image-card/image-card-config.scss +29 -0
  361. package/image-card/image-card.component.d.ts +8 -0
  362. package/image-card/image-card.scss +37 -0
  363. package/image-panel/image-panel-config.scss +30 -0
  364. package/image-panel/image-panel.component.d.ts +26 -0
  365. package/image-panel/image-panel.component.scss +80 -0
  366. package/index.d.ts +6 -0
  367. package/info-column/info-column-config.scss +14 -0
  368. package/info-column/info-column.d.ts +7 -0
  369. package/info-column/info-column.scss +17 -0
  370. package/info-slider/info-slider-config.scss +10 -0
  371. package/info-slider/info-slider.component.d.ts +16 -0
  372. package/info-slider/info-slider.component.scss +21 -0
  373. package/inline-alert/inline-alert-config.scss +12 -0
  374. package/inline-alert/inline-alert.d.ts +20 -0
  375. package/inline-alert/inline-alert.scss +16 -0
  376. package/inline-group/inline-group.component.d.ts +10 -0
  377. package/inline-group/inline-group.component.scss +15 -0
  378. package/input/input-config.scss +57 -0
  379. package/input/input.d.ts +10 -0
  380. package/input/input.scss +68 -0
  381. package/label/label-config.scss +13 -0
  382. package/label/label.d.ts +6 -0
  383. package/label/label.scss +10 -0
  384. package/layout/layout.component.d.ts +9 -0
  385. package/link/link-config.scss +89 -0
  386. package/link/link.d.ts +19 -0
  387. package/link/link.scss +157 -0
  388. package/media-preview/media-preview-config.scss +15 -0
  389. package/media-preview/media-preview-icon.d.ts +3 -0
  390. package/media-preview/media-preview-modal/media-preview-modal.d.ts +31 -0
  391. package/media-preview/media-preview-modal/media-preview-modal.scss +148 -0
  392. package/media-preview/media-preview-modal/media-previw-modal-config.scss +44 -0
  393. package/media-preview/media-preview.d.ts +48 -0
  394. package/media-preview/media-preview.scss +59 -0
  395. package/media-preview/media_preview.service.d.ts +16 -0
  396. package/menu/menu-config.scss +33 -0
  397. package/menu/menu-icon.d.ts +3 -0
  398. package/menu/menu.component.d.ts +47 -0
  399. package/menu/menu.component.scss +80 -0
  400. package/nebular-icon.d.ts +3 -0
  401. package/otp-input/otp-input-config.scss +22 -0
  402. package/otp-input/otp-input.component.d.ts +33 -0
  403. package/otp-input/otp-input.component.scss +52 -0
  404. package/otp-input/otp-input.icon.d.ts +3 -0
  405. package/package.json +57 -0
  406. package/page-container/page-container-config.scss +9 -0
  407. package/page-container/page-container-info/page-container-info-config.scss +9 -0
  408. package/page-container/page-container-info/page-container-info.component.d.ts +10 -0
  409. package/page-container/page-container-info/page-container-info.scss +6 -0
  410. package/page-container/page-container.component.d.ts +14 -0
  411. package/page-container/page-container.component.scss +11 -0
  412. package/page-header/page-header-config.scss +28 -0
  413. package/page-header/page-header.component.d.ts +18 -0
  414. package/page-header/page-header.component.scss +37 -0
  415. package/page-header/page-header.icons.d.ts +3 -0
  416. package/page-header/page-sub-heading/page-sub-heading.component.d.ts +6 -0
  417. package/page-loader/page-loader-config.scss +23 -0
  418. package/page-loader/page-loader.component.d.ts +13 -0
  419. package/page-loader/page-loader.component.scss +44 -0
  420. package/pagination/pagination-config.scss +24 -0
  421. package/pagination/pagination.d.ts +47 -0
  422. package/pagination/pagination.icon.d.ts +3 -0
  423. package/pagination/pagination.scss +67 -0
  424. package/popover-content/popover-content-item/popover-content-item-config.scss +22 -0
  425. package/popover-content/popover-content-item/popover-content-item.component.d.ts +6 -0
  426. package/popover-content/popover-content-item/popover-content-item.scss +36 -0
  427. package/popover-content/popover-content.component.d.ts +14 -0
  428. package/preview-box/preview-box-config.scss +52 -0
  429. package/preview-box/preview-box.component.d.ts +31 -0
  430. package/preview-box/preview-box.component.scss +101 -0
  431. package/progress-bar/progress-bar-config.scss +14 -0
  432. package/progress-bar/progress-bar.component.d.ts +10 -0
  433. package/progress-bar/progress-bar.component.scss +13 -0
  434. package/progress-chart/progress-chart-config.scss +15 -0
  435. package/progress-chart/progress-chart.component.d.ts +21 -0
  436. package/progress-chart/progress-chart.component.scss +41 -0
  437. package/public-api.d.ts +135 -0
  438. package/radio-button/radio-button-config.scss +47 -0
  439. package/radio-button/radio-button.scss +89 -0
  440. package/radio-card-group/radio-card/radio-card-config.scss +31 -0
  441. package/radio-card-group/radio-card/radio-card.component.d.ts +30 -0
  442. package/radio-card-group/radio-card/radio-card.component.scss +88 -0
  443. package/radio-card-group/radio-card-group-config.scss +9 -0
  444. package/radio-card-group/radio-card-group.component.d.ts +20 -0
  445. package/radio-card-group/radio-card-group.scss +7 -0
  446. package/regex-checker/regex-checker-config.scss +24 -0
  447. package/regex-checker/regex-checker-icon.d.ts +3 -0
  448. package/regex-checker/regex-checker.d.ts +29 -0
  449. package/regex-checker/regex-checker.scss +38 -0
  450. package/regex-checker/regex-validity-icon.pipe.d.ts +8 -0
  451. package/ribbon/ribbon-config.scss +21 -0
  452. package/ribbon/ribbon-icon.d.ts +3 -0
  453. package/ribbon/ribbon.d.ts +14 -0
  454. package/ribbon/ribbon.scss +29 -0
  455. package/round-checkbox/round-checkbox-config.scss +15 -0
  456. package/round-checkbox/round-checkbox.component.d.ts +16 -0
  457. package/round-checkbox/round-checkbox.component.scss +23 -0
  458. package/row/column/column.component.d.ts +9 -0
  459. package/row/row-config.scss +10 -0
  460. package/row/row.component.d.ts +9 -0
  461. package/row/row.scss +22 -0
  462. package/scrollable-content/scrollable-content-config.scss +11 -0
  463. package/scrollable-content/scrollable-content.component.d.ts +8 -0
  464. package/scrollable-content/scrollable-content.component.scss +28 -0
  465. package/section-header/section-header-config.scss +18 -0
  466. package/section-header/section-header.component.d.ts +9 -0
  467. package/section-header/section-header.component.scss +32 -0
  468. package/section-row/section-row-config.scss +9 -0
  469. package/section-row/section-row.d.ts +9 -0
  470. package/section-row/section-row.scss +23 -0
  471. package/section-separator/section-separator-config.scss +19 -0
  472. package/section-separator/section-separator.d.ts +15 -0
  473. package/section-separator/section-separator.scss +28 -0
  474. package/section-shell/section-shell-config.scss +23 -0
  475. package/section-shell/section-shell.component.d.ts +12 -0
  476. package/section-shell/section-shell.component.scss +30 -0
  477. package/select/select-config.scss +78 -0
  478. package/select/select.component.d.ts +44 -0
  479. package/select/select.scss +174 -0
  480. package/select-card/select-card-config.scss +32 -0
  481. package/select-card/select-card-icon.d.ts +3 -0
  482. package/select-card/select-card.component.d.ts +38 -0
  483. package/select-card/select-card.component.scss +66 -0
  484. package/select-country/select-country-config.scss +10 -0
  485. package/select-country/select-country.component.d.ts +33 -0
  486. package/select-country/select-country.component.scss +34 -0
  487. package/shell/checker-sidebar/checker-sidebar-config.scss +21 -0
  488. package/shell/checker-sidebar/checker-sidebar.component.d.ts +8 -0
  489. package/shell/checker-sidebar/checker-sidebar.component.scss +34 -0
  490. package/shell/maker-sidebar/maker-sidebar-config.scss +21 -0
  491. package/shell/maker-sidebar/maker-sidebar.component.d.ts +8 -0
  492. package/shell/maker-sidebar/maker-sidebar.component.scss +34 -0
  493. package/shell/nebular-icons.d.ts +3 -0
  494. package/shell/shell-config.component.scss +25 -0
  495. package/shell/shell-icons.d.ts +3 -0
  496. package/shell/shell-sidebar/shell-sidebar-config.scss +43 -0
  497. package/shell/shell-sidebar/shell-sidebar.component.d.ts +14 -0
  498. package/shell/shell-sidebar/shell-sidebar.component.scss +106 -0
  499. package/shell/shell-sidebar-menu/shell-sidebar-menu-config.scss +56 -0
  500. package/shell/shell-sidebar-menu/shell-sidebar-menu.scss +76 -0
  501. package/shell/shell.component.d.ts +21 -0
  502. package/shell/shell.component.scss +55 -0
  503. package/side-drawer/side-drawer-config.scss +20 -0
  504. package/side-drawer/side-drawer.d.ts +8 -0
  505. package/side-drawer/side-drawer.scss +52 -0
  506. package/side-drawer/side-drawer.service.d.ts +20 -0
  507. package/size/component-size.d.ts +2 -0
  508. package/spinner/spinner.d.ts +11 -0
  509. package/stepper/step/step.d.ts +8 -0
  510. package/stepper/step/step.pipe.d.ts +8 -0
  511. package/stepper/step-header/step-header.d.ts +12 -0
  512. package/stepper/stepper-button/stepper-next.d.ts +7 -0
  513. package/stepper/stepper-button/stepper-previous.d.ts +7 -0
  514. package/stepper/stepper.config.scss +37 -0
  515. package/stepper/stepper.d.ts +19 -0
  516. package/stepper/stepper.scss +149 -0
  517. package/stimulus-config.scss +98 -0
  518. package/stimulus.module.d.ts +136 -0
  519. package/stimulus.scss +107 -0
  520. package/table/table-column/scl-table-column.d.ts +26 -0
  521. package/table/table-config.scss +63 -0
  522. package/table/table-icon.d.ts +3 -0
  523. package/table/table-text/scl-table-text.d.ts +13 -0
  524. package/table/table.config.d.ts +19 -0
  525. package/table/table.d.ts +58 -0
  526. package/table/table.scss +232 -0
  527. package/table-action-control/table-action-control-config.scss +12 -0
  528. package/table-action-control/table-action-control.component.d.ts +8 -0
  529. package/table-action-control/table-action-control.component.scss +14 -0
  530. package/tabset/route-tab/route-tab-config.scss +30 -0
  531. package/tabset/route-tab/route-tab.scss +44 -0
  532. package/tabset/tab/tab.component.d.ts +9 -0
  533. package/tabset/tab-directive/tabset-config.scss +49 -0
  534. package/tabset/tab-directive/tabset.directive.d.ts +7 -0
  535. package/tabset/tab-directive/tabset.scss +154 -0
  536. package/tabset/tabset.component.d.ts +14 -0
  537. package/tabset/tabset.component.scss +79 -0
  538. package/taglist/tag/tag-config.scss +30 -0
  539. package/taglist/tag/tag.component.d.ts +17 -0
  540. package/taglist/tag/tag.directive.d.ts +16 -0
  541. package/taglist/tag/tag.scss +43 -0
  542. package/taglist/taglist.component.d.ts +12 -0
  543. package/text-decoration/text-decoration.component.d.ts +9 -0
  544. package/text-decoration/text-decoration.scss +7 -0
  545. package/text-editor/text-editor.config.scss +23 -0
  546. package/text-editor/text-editor.d.ts +60 -0
  547. package/text-editor/text-editor.scss +74 -0
  548. package/theme.provider.d.ts +2 -0
  549. package/timeline/timeline-config.scss +49 -0
  550. package/timeline/timeline.component.d.ts +26 -0
  551. package/timeline/timeline.component.scss +126 -0
  552. package/timepicker/timepicker-config.scss +41 -0
  553. package/timepicker/timepicker.component.d.ts +74 -0
  554. package/timepicker/timepicker.component.scss +111 -0
  555. package/timepicker/timepicker.icon.d.ts +3 -0
  556. package/timepicker/timepicker.model.d.ts +13 -0
  557. package/toggle/toggle-config.scss +51 -0
  558. package/toggle/toggle-description/toggle-description.d.ts +6 -0
  559. package/toggle/toggle.d.ts +19 -0
  560. package/toggle/toggle.scss +31 -0
  561. package/toggle-password/toggle-password-config.scss +12 -0
  562. package/toggle-password/toggle-password.component.d.ts +21 -0
  563. package/toggle-password/toggle-password.directive.d.ts +13 -0
  564. package/toggle-password/toggle-password.icon.d.ts +3 -0
  565. package/toggle-password/toggle-password.scss +16 -0
  566. package/treeview/treeview-config.scss +86 -0
  567. package/treeview/treeview-header/treeview-header.d.ts +12 -0
  568. package/treeview/treeview.d.ts +66 -0
  569. package/treeview/treeview.icon.d.ts +3 -0
  570. package/treeview/treeview.scss +278 -0
  571. package/truncate/truncate.component.d.ts +16 -0
  572. package/truncate/truncate.scss +18 -0
  573. package/typography/font.scss +28 -0
  574. package/typography/typography-config.scss +73 -0
  575. package/typography/typography.d.ts +37 -0
  576. package/typography/typography.scss +47 -0
@@ -0,0 +1,377 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { CommonModule } from '@angular/common';
3
+ import { Component, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild, ViewChildren } from '@angular/core';
4
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
5
+ import { NbButtonModule, NbCardModule, NbIconModule, NbInputModule, NbPopoverDirective, NbPopoverModule } from '@nebular/theme';
6
+ import * as moment from 'moment';
7
+ import { SclButtonGroup } from '../button-group/button-group';
8
+ import { SclTimepickerIcons } from './timepicker.icon';
9
+ import { TIME_FORMAT } from './timepicker.model';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/forms";
12
+ import * as i2 from "@nebular/theme";
13
+ import * as i3 from "@angular/common";
14
+ class SclTimepickerComponent {
15
+ // For tweleve hour format
16
+ // @Input() set twelveHoursFormat(value: string | boolean) {
17
+ // this.isTwelveHoursFormat = coerceBooleanProperty(value);
18
+ // this.timeFormat = TIME_FORMAT.TWELVE_HR;
19
+ // this.hours = ['12', ...Array.from({ length: 11 }, (_, i) => (i + 1).toString().padStart(2, '0'))];
20
+ // }
21
+ set timeValues(value) {
22
+ if (value) {
23
+ this.selectedTime = value;
24
+ }
25
+ }
26
+ set format(value) {
27
+ if (value) {
28
+ this.timeFormat = value;
29
+ }
30
+ }
31
+ set min(value) {
32
+ if (value) {
33
+ this.minTime = value;
34
+ this.minTime.setSeconds(0, 0);
35
+ }
36
+ }
37
+ set max(value) {
38
+ if (value) {
39
+ this.maxTime = value;
40
+ this.maxTime.setSeconds(0, 0);
41
+ }
42
+ }
43
+ set readonly(value) {
44
+ this.isReadonly = coerceBooleanProperty(value);
45
+ }
46
+ get isFormValid() {
47
+ return this.timePickerForm.valid;
48
+ }
49
+ get formValue() {
50
+ return this.timePickerForm.value;
51
+ }
52
+ constructor(formBuilder, iconLibraries) {
53
+ this.formBuilder = formBuilder;
54
+ this.iconLibraries = iconLibraries;
55
+ this.timeChange = new EventEmitter();
56
+ this.placeholder = 'Select a time';
57
+ this.time = '';
58
+ this.timePickerOptions = [];
59
+ this.hours = Array.from({ length: 24 }, (_, i) => i.toString().padStart(2, '0'));
60
+ this.selectedHour = '00';
61
+ this.minutes = Array.from({ length: 60 }, (_, i) => i.toString().padStart(2, '0'));
62
+ this.selectedMinute = '00';
63
+ this.periods = ['AM', 'PM'];
64
+ this.selectedPeriod = 'AM';
65
+ this.defaultSeconds = '00';
66
+ this.isTwelveHoursFormat = false;
67
+ this.selectedTime = '';
68
+ this.timeFormat = TIME_FORMAT.DEFAULT_TIME;
69
+ this.isRequired = false;
70
+ this.touched = false;
71
+ this.isSelectingTime = false;
72
+ this.isReadonly = false;
73
+ this.onChange = () => { };
74
+ this.onTouch = () => { };
75
+ this.iconLibraries.registerSvgPack('scl-datepicker-icon', SclTimepickerIcons);
76
+ this.timePickerForm = this.formBuilder.group({
77
+ timePicker: [null],
78
+ });
79
+ }
80
+ ngOnInit() {
81
+ this.formValueChange();
82
+ this.setTimePickerOptions();
83
+ if (this.selectedTime) {
84
+ this.extractTimeParts();
85
+ }
86
+ }
87
+ handleKeyboardEvents(event) {
88
+ if (!this.popover.isShown || event.key !== 'Enter')
89
+ return;
90
+ this.touched = true;
91
+ this.onTouch();
92
+ const errors = this.getValidationErrors(this.time);
93
+ if (errors)
94
+ return;
95
+ this.onConfirm();
96
+ }
97
+ writeValue(obj) {
98
+ if (obj) {
99
+ this.time = obj;
100
+ this.selectedTime = this.time;
101
+ this.extractTimeParts();
102
+ this.setTimePickerForm();
103
+ }
104
+ else {
105
+ this.reset();
106
+ }
107
+ }
108
+ registerOnChange(fn) {
109
+ this.onChange = fn;
110
+ }
111
+ registerOnTouched(fn) {
112
+ this.onTouch = () => {
113
+ this.touched = true;
114
+ fn();
115
+ };
116
+ }
117
+ onBlur() {
118
+ if (!this.isSelectingTime) {
119
+ this.touched = true;
120
+ this.onTouch();
121
+ }
122
+ }
123
+ onSelect(data, unit) {
124
+ this.isSelectingTime = true;
125
+ this.setSelectedValues(data, unit);
126
+ this.isSelectingTime = false;
127
+ this.updateFormattedTime();
128
+ }
129
+ onConfirm() {
130
+ this.touched = true;
131
+ this.setTimePickerForm();
132
+ this.onChange(this.time);
133
+ this.updateFormattedTime();
134
+ this.timeChange.emit(this.time);
135
+ this.closePopover();
136
+ }
137
+ validate(control) {
138
+ if (this.isSelectingTime)
139
+ return null;
140
+ if (control?.errors?.['required']) {
141
+ this.isRequired = true;
142
+ }
143
+ return this.getValidationErrors(control?.value);
144
+ }
145
+ getItemId(unit, label) {
146
+ return `${unit}-${label}`;
147
+ }
148
+ getValidationErrors(controlTime) {
149
+ if (!controlTime) {
150
+ return this.getRequiredError();
151
+ }
152
+ if (!this.isValidTimeFormat(controlTime)) {
153
+ return { invalidDateFormat: this.timeFormat };
154
+ }
155
+ if (controlTime) {
156
+ return this.getDateRangeErrors(controlTime);
157
+ }
158
+ return null;
159
+ }
160
+ isValidTimeFormat(time) {
161
+ return moment(time, this.timeFormat, true).isValid();
162
+ }
163
+ getRequiredError() {
164
+ return this.touched && this.isRequired ? { required: true } : null;
165
+ }
166
+ getDateRangeErrors(controlTime) {
167
+ const controlTotalSeconds = this.convertTimeToSeconds(controlTime);
168
+ if (this.minTime) {
169
+ const minTotalSeconds = this.convertTimeToSeconds(this.minTime.toTimeString());
170
+ if (controlTotalSeconds < minTotalSeconds) {
171
+ return { minTime: this.minTime };
172
+ }
173
+ }
174
+ if (this.maxTime) {
175
+ const maxTotalSeconds = this.convertTimeToSeconds(this.maxTime.toTimeString());
176
+ if (controlTotalSeconds > maxTotalSeconds) {
177
+ return { maxTime: this.maxTime };
178
+ }
179
+ }
180
+ return null;
181
+ }
182
+ convertTimeToSeconds(time) {
183
+ const [hours, minutes, seconds] = time.split(':').map(num => parseInt(num, 10));
184
+ return hours * 3600 + minutes * 60 + (seconds || 0);
185
+ }
186
+ setTimePickerForm() {
187
+ this.timePickerForm.get('timePicker')?.patchValue(this.time);
188
+ }
189
+ setTimePickerOptions() {
190
+ this.timePickerOptions = [
191
+ { unit: 'Hours', data: this.hours.map(hr => ({ label: hr, isSelected: false })) },
192
+ { unit: 'Minutes', data: this.minutes.map(min => ({ label: min, isSelected: false })) },
193
+ ];
194
+ if (this.isTwelveHoursFormat) {
195
+ this.timePickerOptions = [
196
+ ...this.timePickerOptions.filter(option => option.unit !== 'Periods'),
197
+ {
198
+ unit: 'Periods',
199
+ data: this.periods.map(period => ({ label: period, isSelected: period === this.selectedPeriod })),
200
+ },
201
+ ];
202
+ }
203
+ }
204
+ setSelectedValues(data, unit) {
205
+ const group = this.timePickerOptions.find(item => item.unit === unit);
206
+ if (group) {
207
+ group.data.forEach(item => (item.isSelected = false));
208
+ data.isSelected = true;
209
+ switch (unit) {
210
+ case 'Hours':
211
+ this.selectedHour = data.label;
212
+ break;
213
+ case 'Minutes':
214
+ this.selectedMinute = data.label;
215
+ break;
216
+ case 'Seconds':
217
+ this.defaultSeconds = data.label;
218
+ break;
219
+ case 'Periods':
220
+ this.selectedPeriod = data.label;
221
+ break;
222
+ default:
223
+ return;
224
+ }
225
+ }
226
+ }
227
+ updateFormattedTime() {
228
+ let formattedTime = '';
229
+ if (this.isTwelveHoursFormat) {
230
+ formattedTime =
231
+ `${this.selectedHour.padStart(2, '0')}:${this.selectedMinute.padStart(2, '0')}` +
232
+ (this.timeFormat.includes(':ss') ? `:${this.defaultSeconds}` : '') +
233
+ ` ${this.selectedPeriod}`;
234
+ }
235
+ else {
236
+ formattedTime =
237
+ `${this.selectedHour.padStart(2, '0')}:${this.selectedMinute.padStart(2, '0')}` +
238
+ (this.timeFormat.includes(':ss') ? `:${this.defaultSeconds}` : '');
239
+ }
240
+ this.time = formattedTime;
241
+ }
242
+ extractTimeParts() {
243
+ if (!this.selectedTime || !this.timePickerOptions.length) {
244
+ return;
245
+ }
246
+ const [timeOnly, selectedPeriod] = this.isTwelveHoursFormat ? this.selectedTime.split(' ') : [this.selectedTime, ''];
247
+ const [hours, minutes, seconds] = timeOnly.split(':');
248
+ this.selectTimePart('Hours', hours);
249
+ this.selectTimePart('Minutes', minutes);
250
+ this.selectTimePart('Seconds', seconds);
251
+ this.selectTimePart('Periods', selectedPeriod);
252
+ }
253
+ selectTimePart(unit, selectedValue) {
254
+ if (selectedValue) {
255
+ const group = this.timePickerOptions.find(item => item.unit === unit);
256
+ if (group) {
257
+ group.data.forEach(item => (item.isSelected = false));
258
+ const selectedItem = group.unit === 'Periods'
259
+ ? group.data.find(item => item.label.includes(selectedValue))
260
+ : group.data.find(item => item.label === selectedValue);
261
+ if (selectedItem) {
262
+ selectedItem.isSelected = true;
263
+ switch (unit) {
264
+ case 'Hours':
265
+ this.selectedHour = selectedItem.label;
266
+ break;
267
+ case 'Minutes':
268
+ this.selectedMinute = selectedItem.label;
269
+ break;
270
+ case 'Seconds':
271
+ this.defaultSeconds = selectedItem.label;
272
+ break;
273
+ case 'Periods':
274
+ this.selectedPeriod = selectedItem.label;
275
+ break;
276
+ default:
277
+ return;
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ closePopover() {
284
+ this.popover.hide();
285
+ }
286
+ reset() {
287
+ this.timePickerForm.reset();
288
+ this.isSelectingTime = false;
289
+ this.time = this.getCurrentTime();
290
+ this.selectedTime = this.time;
291
+ this.extractTimeParts();
292
+ }
293
+ convertToDate(timeString) {
294
+ const [hours, minutes] = timeString?.split(':').map(num => parseInt(num, 10));
295
+ const date = new Date();
296
+ date.setHours(hours, minutes, 0, 0);
297
+ return date;
298
+ }
299
+ getCurrentTime() {
300
+ const time = new Date();
301
+ time.setSeconds(0, 0);
302
+ return this.isTwelveHoursFormat ? moment(time).format(this.timeFormat) : moment(time).format(this.timeFormat).replace('12:00', '00:00');
303
+ }
304
+ scrollToSelectedItems({ isShown }) {
305
+ if (!isShown)
306
+ return;
307
+ this.timePickerOptions.forEach(option => {
308
+ const selectedItem = option.data.find(item => item.isSelected);
309
+ if (selectedItem) {
310
+ const itemId = this.getItemId(option.unit, selectedItem.label);
311
+ const element = document.getElementById(itemId);
312
+ if (element) {
313
+ element.scrollIntoView({ behavior: 'auto', block: 'start' });
314
+ }
315
+ }
316
+ });
317
+ }
318
+ formValueChange() {
319
+ this.timePickerForm.get('timePicker')?.valueChanges.subscribe((value) => {
320
+ if (value === null) {
321
+ return;
322
+ }
323
+ this.time = value;
324
+ this.selectedTime = this.time;
325
+ this.extractTimeParts();
326
+ this.scrollToSelectedItems({ isShown: this.popover?.isShown });
327
+ this.onChange(value);
328
+ });
329
+ }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SclTimepickerComponent, deps: [{ token: i1.FormBuilder }, { token: i2.NbIconLibraries }], target: i0.ɵɵFactoryTarget.Component }); }
331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: SclTimepickerComponent, isStandalone: true, selector: "scl-timepicker", inputs: { placeholder: "placeholder", timeValues: "timeValues", format: "format", min: "min", max: "max", readonly: "readonly" }, outputs: { timeChange: "timeChange" }, host: { listeners: { "keydown": "handleKeyboardEvents($event)" }, classAttribute: "scl-timepicker" }, providers: [
332
+ {
333
+ provide: NG_VALUE_ACCESSOR,
334
+ useExisting: forwardRef(() => SclTimepickerComponent),
335
+ multi: true,
336
+ },
337
+ { provide: NG_VALIDATORS, useExisting: SclTimepickerComponent, multi: true },
338
+ ], viewQueries: [{ propertyName: "popover", first: true, predicate: NbPopoverDirective, descendants: true }, { propertyName: "timepickerItems", predicate: ["timepickerItem"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"timePickerForm\">\n <input\n class=\"scl-custom-datepicker__input\"\n nbInput\n type=\"text\"\n formControlName=\"timePicker\"\n [placeholder]=\"placeholder\"\n [nbPopover]=\"timePicker\"\n nbPopoverPlacement=\"right\"\n nbPopoverSize=\"large\"\n [nbPopoverTrigger]=\"isReadonly ? 'noop' : 'focus'\"\n [readOnly]=\"isReadonly\"\n (blur)=\"onBlur()\"\n (nbPopoverShowStateChange)=\"scrollToSelectedItems($event)\" />\n\n <div class=\"scl-custom-datepicker__icon\">\n <nb-icon icon=\"calendar\" pack=\"scl-datepicker-icon\"></nb-icon>\n </div>\n\n <ng-template #timePicker>\n <div class=\"scl-timepicker__popover\" (mousedown)=\"$event.preventDefault()\">\n <section class=\"scl-timepicker__content\">\n <div class=\"scl-timepicker__data\" *ngFor=\"let option of timePickerOptions\">\n <div class=\"scl-timepicker__column-header\" sclText textType=\"bodyMedium\">{{ option.unit }}</div>\n <div class=\"scl-timepicker__columns\">\n <button\n #timepickerItem\n *ngFor=\"let item of option.data\"\n [class.selected]=\"item.isSelected\"\n (click)=\"onSelect(item, option.unit)\"\n sclText\n textType=\"bodyMedium\"\n class=\"scl-timepicker__item\"\n [id]=\"getItemId(option.unit, item.label)\">\n {{ item.label }}\n </button>\n </div>\n </div>\n </section>\n <div class=\"scl-timepicker__footer\">\n <scl-button-group alignment=\"right\">\n <button nbButton status=\"primary\" (click)=\"onConfirm()\">Confirm</button>\n </scl-button-group>\n </div>\n </div>\n </ng-template>\n</form>\n", styles: ["/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */.scl-timepicker__popover{background-color:var(--scl-timepicker-popover-background-color)}.scl-timepicker__input[nbInput].size-medium:not(.input-full-width){width:100%;max-width:100%;position:relative}.scl-timepicker__input[nbInput].status-basic:focus:read-only{background-color:var(--scl-timepicker-input-readonly-background-color)}.scl-timepicker__icon{position:absolute;top:10px;right:14px;pointer-events:none}.scl-timepicker__content{display:flex}.scl-timepicker__data{display:grid;grid-template-rows:auto 1fr;height:var(--scl-timepicker-data-height);border-right:var(--scl-timepicker-border-width) solid var(--scl-timepicker-border-color)}.scl-timepicker__data:last-child{border-right:none}.scl-timepicker__column-header{width:var(--scl-timepicker-column-header-width);height:var(--scl-timepicker-column-header-height);text-align:center;padding:var(--scl-timepicker-column-header-padding)}.scl-timepicker__columns{padding:var(--scl-timepicker-columns-padding);overflow-y:scroll;border-top:var(--scl-timepicker-border-width) solid var(--scl-timepicker-border-color)}.scl-timepicker__columns::-webkit-scrollbar{width:var(--scl-timepicker-columns-scrollbar-width)}.scl-timepicker__columns::-webkit-scrollbar-thumb{color:transparent;background-color:transparent;border-radius:var(--scl-timepicker-columns-scrollbar-border-radius);cursor:pointer}.scl-timepicker__columns:hover::-webkit-scrollbar-thumb{color:var(--scl-timepicker-columns-scrollbar-color);background-color:var(--scl-timepicker-columns-scrollbar-background-color)}.scl-timepicker__item{width:var(--scl-timepicker-item-width);padding:var(--scl-timepicker-item-padding);text-align:center;cursor:pointer;display:block;background-color:#fff;border:none}.scl-timepicker__item:hover{background-color:var(--scl-timepicker-item-hover-background-color)}.scl-timepicker__item.selected{background-color:var(--scl-timepicker-item-selected-background-color);border-radius:var(--scl-timepicker-item-selected-border-radius);position:relative}.scl-timepicker__item.selected:after{content:\"\";position:absolute;top:.875rem;left:.75rem;transform:rotate(-45deg);width:var(--scl-timepicker-check-icon-width);height:var(--scl-timepicker-check-icon-height);border-bottom:var(--scl-timepicker-check-icon-border-width) solid var(--scl-timepicker-check-icon-border-color);border-left:var(--scl-timepicker-check-icon-border-width) solid var(--scl-timepicker-check-icon-border-color)}.scl-timepicker__footer{display:flex;border-top:1px solid #e5e7eb;padding:var(--scl-timepicker-footer-padding);justify-content:end}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NbPopoverModule }, { kind: "directive", type: i2.NbPopoverDirective, selector: "[nbPopover]", inputs: ["nbPopover", "nbPopoverContext", "nbPopoverPlacement", "nbPopoverAdjustment", "nbPopoverTrigger", "nbPopoverOffset", "nbTooltipDisabled", "nbPopoverClass"], outputs: ["nbPopoverShowStateChange"], exportAs: ["nbPopover"] }, { kind: "ngmodule", type: NbButtonModule }, { kind: "component", type: i2.NbButtonComponent, selector: "button[nbButton],a[nbButton],input[type=\"button\"][nbButton],input[type=\"submit\"][nbButton]", inputs: ["hero"] }, { kind: "ngmodule", type: NbInputModule }, { kind: "directive", type: i2.NbInputDirective, selector: "input[nbInput],textarea[nbInput]", inputs: ["fieldSize", "status", "shape", "fullWidth"] }, { kind: "component", type: SclButtonGroup, selector: "scl-button-group", inputs: ["wrap", "alignment"] }, { kind: "ngmodule", type: NbCardModule }, { kind: "ngmodule", type: NbIconModule }, { kind: "component", type: i2.NbIconComponent, selector: "nb-icon", inputs: ["icon", "pack", "options", "status", "config"] }] }); }
339
+ }
340
+ export { SclTimepickerComponent };
341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SclTimepickerComponent, decorators: [{
342
+ type: Component,
343
+ args: [{ selector: 'scl-timepicker', standalone: true, imports: [CommonModule, ReactiveFormsModule, NbPopoverModule, NbButtonModule, NbInputModule, SclButtonGroup, NbCardModule, NbIconModule], host: {
344
+ class: 'scl-timepicker',
345
+ }, providers: [
346
+ {
347
+ provide: NG_VALUE_ACCESSOR,
348
+ useExisting: forwardRef(() => SclTimepickerComponent),
349
+ multi: true,
350
+ },
351
+ { provide: NG_VALIDATORS, useExisting: SclTimepickerComponent, multi: true },
352
+ ], template: "<form [formGroup]=\"timePickerForm\">\n <input\n class=\"scl-custom-datepicker__input\"\n nbInput\n type=\"text\"\n formControlName=\"timePicker\"\n [placeholder]=\"placeholder\"\n [nbPopover]=\"timePicker\"\n nbPopoverPlacement=\"right\"\n nbPopoverSize=\"large\"\n [nbPopoverTrigger]=\"isReadonly ? 'noop' : 'focus'\"\n [readOnly]=\"isReadonly\"\n (blur)=\"onBlur()\"\n (nbPopoverShowStateChange)=\"scrollToSelectedItems($event)\" />\n\n <div class=\"scl-custom-datepicker__icon\">\n <nb-icon icon=\"calendar\" pack=\"scl-datepicker-icon\"></nb-icon>\n </div>\n\n <ng-template #timePicker>\n <div class=\"scl-timepicker__popover\" (mousedown)=\"$event.preventDefault()\">\n <section class=\"scl-timepicker__content\">\n <div class=\"scl-timepicker__data\" *ngFor=\"let option of timePickerOptions\">\n <div class=\"scl-timepicker__column-header\" sclText textType=\"bodyMedium\">{{ option.unit }}</div>\n <div class=\"scl-timepicker__columns\">\n <button\n #timepickerItem\n *ngFor=\"let item of option.data\"\n [class.selected]=\"item.isSelected\"\n (click)=\"onSelect(item, option.unit)\"\n sclText\n textType=\"bodyMedium\"\n class=\"scl-timepicker__item\"\n [id]=\"getItemId(option.unit, item.label)\">\n {{ item.label }}\n </button>\n </div>\n </div>\n </section>\n <div class=\"scl-timepicker__footer\">\n <scl-button-group alignment=\"right\">\n <button nbButton status=\"primary\" (click)=\"onConfirm()\">Confirm</button>\n </scl-button-group>\n </div>\n </div>\n </ng-template>\n</form>\n", styles: ["/**\n * @license\n * Copyright Akveo. All Rights Reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n */.scl-timepicker__popover{background-color:var(--scl-timepicker-popover-background-color)}.scl-timepicker__input[nbInput].size-medium:not(.input-full-width){width:100%;max-width:100%;position:relative}.scl-timepicker__input[nbInput].status-basic:focus:read-only{background-color:var(--scl-timepicker-input-readonly-background-color)}.scl-timepicker__icon{position:absolute;top:10px;right:14px;pointer-events:none}.scl-timepicker__content{display:flex}.scl-timepicker__data{display:grid;grid-template-rows:auto 1fr;height:var(--scl-timepicker-data-height);border-right:var(--scl-timepicker-border-width) solid var(--scl-timepicker-border-color)}.scl-timepicker__data:last-child{border-right:none}.scl-timepicker__column-header{width:var(--scl-timepicker-column-header-width);height:var(--scl-timepicker-column-header-height);text-align:center;padding:var(--scl-timepicker-column-header-padding)}.scl-timepicker__columns{padding:var(--scl-timepicker-columns-padding);overflow-y:scroll;border-top:var(--scl-timepicker-border-width) solid var(--scl-timepicker-border-color)}.scl-timepicker__columns::-webkit-scrollbar{width:var(--scl-timepicker-columns-scrollbar-width)}.scl-timepicker__columns::-webkit-scrollbar-thumb{color:transparent;background-color:transparent;border-radius:var(--scl-timepicker-columns-scrollbar-border-radius);cursor:pointer}.scl-timepicker__columns:hover::-webkit-scrollbar-thumb{color:var(--scl-timepicker-columns-scrollbar-color);background-color:var(--scl-timepicker-columns-scrollbar-background-color)}.scl-timepicker__item{width:var(--scl-timepicker-item-width);padding:var(--scl-timepicker-item-padding);text-align:center;cursor:pointer;display:block;background-color:#fff;border:none}.scl-timepicker__item:hover{background-color:var(--scl-timepicker-item-hover-background-color)}.scl-timepicker__item.selected{background-color:var(--scl-timepicker-item-selected-background-color);border-radius:var(--scl-timepicker-item-selected-border-radius);position:relative}.scl-timepicker__item.selected:after{content:\"\";position:absolute;top:.875rem;left:.75rem;transform:rotate(-45deg);width:var(--scl-timepicker-check-icon-width);height:var(--scl-timepicker-check-icon-height);border-bottom:var(--scl-timepicker-check-icon-border-width) solid var(--scl-timepicker-check-icon-border-color);border-left:var(--scl-timepicker-check-icon-border-width) solid var(--scl-timepicker-check-icon-border-color)}.scl-timepicker__footer{display:flex;border-top:1px solid #e5e7eb;padding:var(--scl-timepicker-footer-padding);justify-content:end}\n"] }]
353
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.NbIconLibraries }]; }, propDecorators: { popover: [{
354
+ type: ViewChild,
355
+ args: [NbPopoverDirective]
356
+ }], timepickerItems: [{
357
+ type: ViewChildren,
358
+ args: ['timepickerItem']
359
+ }], timeChange: [{
360
+ type: Output
361
+ }], placeholder: [{
362
+ type: Input
363
+ }], timeValues: [{
364
+ type: Input
365
+ }], format: [{
366
+ type: Input
367
+ }], min: [{
368
+ type: Input
369
+ }], max: [{
370
+ type: Input
371
+ }], readonly: [{
372
+ type: Input
373
+ }], handleKeyboardEvents: [{
374
+ type: HostListener,
375
+ args: ['keydown', ['$event']]
376
+ }] } });
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFja2FnZXMvdGltZXBpY2tlci90aW1lcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9wYWNrYWdlcy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pKLE9BQU8sRUFBMkMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFtQixZQUFZLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pKLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFvQyxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUVuRixNQWtCYSxzQkFBc0I7SUFPL0IsMEJBQTBCO0lBQzFCLDREQUE0RDtJQUM1RCwrREFBK0Q7SUFDL0QsK0NBQStDO0lBQy9DLHlHQUF5RztJQUN6RyxJQUFJO0lBRUosSUFBYSxVQUFVLENBQUMsS0FBYTtRQUNqQyxJQUFJLEtBQUssRUFBRTtZ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QzdCakMsMGlFQStDQSxtdEZEaENjLFlBQVksMkpBQUUsbUJBQW1CLDQ4QkFBRSxlQUFlLGlWQUFFLGNBQWMsK01BQUUsYUFBYSxzTEFBRSxjQUFjLDJGQUFFLFlBQVksOEJBQUUsWUFBWTs7U0FhOUgsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBbEJsQyxTQUFTOytCQUNJLGdCQUFnQixjQUdkLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxRQUNsSTt3QkFDRixLQUFLLEVBQUUsZ0JBQWdCO3FCQUMxQixhQUNVO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDOzRCQUNyRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3FCQUMvRTtnSUFHOEIsT0FBTztzQkFBckMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ0csZUFBZTtzQkFBOUMsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBQ3BCLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUUsV0FBVztzQkFBbkIsS0FBSztnQkFTTyxVQUFVO3NCQUF0QixLQUFLO2dCQU1PLE1BQU07c0JBQWxCLEtBQUs7Z0JBTU8sR0FBRztzQkFBZixLQUFLO2dCQU9PLEdBQUc7c0JBQWYsS0FBSztnQkFPTyxRQUFRO3NCQUFwQixLQUFLO2dCQTRETixvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOYkJ1dHRvbk1vZHVsZSwgTmJDYXJkTW9kdWxlLCBOYkljb25MaWJyYXJpZXMsIE5iSWNvbk1vZHVsZSwgTmJJbnB1dE1vZHVsZSwgTmJQb3BvdmVyRGlyZWN0aXZlLCBOYlBvcG92ZXJNb2R1bGUgfSBmcm9tICdAbmVidWxhci90aGVtZSc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFNjbEJ1dHRvbkdyb3VwIH0gZnJvbSAnLi4vYnV0dG9uLWdyb3VwL2J1dHRvbi1ncm91cCc7XG5pbXBvcnQgeyBTY2xUaW1lcGlja2VySWNvbnMgfSBmcm9tICcuL3RpbWVwaWNrZXIuaWNvbic7XG5pbXBvcnQgeyBUSU1FX0ZPUk1BVCwgVGltZXBpY2tlckRhdGEsIFRpbWVwaWNrZXJPcHRpb24gfSBmcm9tICcuL3RpbWVwaWNrZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjbC10aW1lcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmJQb3BvdmVyTW9kdWxlLCBOYkJ1dHRvbk1vZHVsZSwgTmJJbnB1dE1vZHVsZSwgU2NsQnV0dG9uR3JvdXAsIE5iQ2FyZE1vZHVsZSwgTmJJY29uTW9kdWxlXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnc2NsLXRpbWVwaWNrZXInLFxuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2NsVGltZXBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogU2NsVGltZXBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTY2xUaW1lcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKE5iUG9wb3ZlckRpcmVjdGl2ZSkgcG9wb3ZlciE6IE5iUG9wb3ZlckRpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkcmVuKCd0aW1lcGlja2VySXRlbScpIHRpbWVwaWNrZXJJdGVtcyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgICBAT3V0cHV0KCkgdGltZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgYSB0aW1lJztcblxuICAgIC8vIEZvciB0d2VsZXZlIGhvdXIgZm9ybWF0XG4gICAgLy8gQElucHV0KCkgc2V0IHR3ZWx2ZUhvdXJzRm9ybWF0KHZhbHVlOiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgLy8gICAgIHRoaXMuaXNUd2VsdmVIb3Vyc0Zvcm1hdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgLy8gICAgIHRoaXMudGltZUZvcm1hdCA9IFRJTUVfRk9STUFULlRXRUxWRV9IUjtcbiAgICAvLyAgICAgdGhpcy5ob3VycyA9IFsnMTInLCAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gKGkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykpXTtcbiAgICAvLyB9XG5cbiAgICBASW5wdXQoKSBzZXQgdGltZVZhbHVlcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmb3JtYXQodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudGltZUZvcm1hdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pbih2YWx1ZTogRGF0ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWluVGltZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5taW5UaW1lLnNldFNlY29uZHMoMCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWF4KHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXhUaW1lID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm1heFRpbWUuc2V0U2Vjb25kcygwLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzUmVhZG9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIHRpbWVQaWNrZXJGb3JtITogRm9ybUdyb3VwO1xuICAgIHRpbWU6IHN0cmluZyA9ICcnO1xuICAgIHRpbWVQaWNrZXJPcHRpb25zOiBUaW1lcGlja2VyT3B0aW9uW10gPSBbXTtcbiAgICBob3Vyczogc3RyaW5nW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykpO1xuICAgIHNlbGVjdGVkSG91cjogc3RyaW5nID0gJzAwJztcblxuICAgIG1pbnV0ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+IGkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgICBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gJzAwJztcblxuICAgIHBlcmlvZHM6IHN0cmluZ1tdID0gWydBTScsICdQTSddO1xuICAgIHNlbGVjdGVkUGVyaW9kOiBzdHJpbmcgPSAnQU0nO1xuXG4gICAgZGVmYXVsdFNlY29uZHM6IHN0cmluZyA9ICcwMCc7XG5cbiAgICBpc1R3ZWx2ZUhvdXJzRm9ybWF0ID0gZmFsc2U7XG4gICAgc2VsZWN0ZWRUaW1lID0gJyc7XG5cbiAgICB0aW1lRm9ybWF0OiBzdHJpbmcgPSBUSU1FX0ZPUk1BVC5ERUZBVUxUX1RJTUU7XG4gICAgaXNSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgbWluVGltZSE6IERhdGU7XG4gICAgbWF4VGltZSE6IERhdGU7XG5cbiAgICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgICBpc1NlbGVjdGluZ1RpbWUgPSBmYWxzZTtcblxuICAgIGlzUmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIGdldCBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZVBpY2tlckZvcm0udmFsaWQ7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1WYWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lUGlja2VyRm9ybS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgaWNvbkxpYnJhcmllczogTmJJY29uTGlicmFyaWVzXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaWNvbkxpYnJhcmllcy5yZWdpc3RlclN2Z1BhY2soJ3NjbC1kYXRlcGlja2VyLWljb24nLCBTY2xUaW1lcGlja2VySWNvbnMpO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXJGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICB0aW1lUGlja2VyOiBbbnVsbF0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJPcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RUaW1lUGFydHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleWJvYXJkRXZlbnRzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wb3BvdmVyLmlzU2hvd24gfHwgZXZlbnQua2V5ICE9PSAnRW50ZXInKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZ2V0VmFsaWRhdGlvbkVycm9ycyh0aGlzLnRpbWUpO1xuXG4gICAgICAgIGlmIChlcnJvcnMpIHJldHVybjtcbiAgICAgICAgdGhpcy5vbkNvbmZpcm0oKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZTogKHZhbDogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWUgPSBvYmo7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHRoaXMudGltZTtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdFRpbWVQYXJ0cygpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyRm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0aW5nVGltZSkge1xuICAgICAgICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWxlY3QoZGF0YTogVGltZXBpY2tlckRhdGEsIHVuaXQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2VsZWN0aW5nVGltZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMoZGF0YSwgdW5pdCk7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RpbmdUaW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGVkVGltZSgpO1xuICAgIH1cblxuICAgIG9uQ29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyRm9ybSgpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudGltZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGVkVGltZSgpO1xuICAgICAgICB0aGlzLnRpbWVDaGFuZ2UuZW1pdCh0aGlzLnRpbWUpO1xuICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4pOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nVGltZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGNvbnRyb2w/LmVycm9ycz8uWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICB0aGlzLmlzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsaWRhdGlvbkVycm9ycyhjb250cm9sPy52YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUlkKHVuaXQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt1bml0fS0ke2xhYmVsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZGF0aW9uRXJyb3JzKGNvbnRyb2xUaW1lOiBzdHJpbmcpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlcXVpcmVkRXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkVGltZUZvcm1hdChjb250cm9sVGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGludmFsaWREYXRlRm9ybWF0OiB0aGlzLnRpbWVGb3JtYXQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250cm9sVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVJhbmdlRXJyb3JzKGNvbnRyb2xUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZFRpbWVGb3JtYXQodGltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBtb21lbnQodGltZSwgdGhpcy50aW1lRm9ybWF0LCB0cnVlKS5pc1ZhbGlkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXF1aXJlZEVycm9yKCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG91Y2hlZCAmJiB0aGlzLmlzUmVxdWlyZWQgPyB7IHJlcXVpcmVkOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRXJyb3JzKGNvbnRyb2xUaW1lOiBzdHJpbmcpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xUb3RhbFNlY29uZHMgPSB0aGlzLmNvbnZlcnRUaW1lVG9TZWNvbmRzKGNvbnRyb2xUaW1lKTtcblxuICAgICAgICBpZiAodGhpcy5taW5UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5Ub3RhbFNlY29uZHMgPSB0aGlzLmNvbnZlcnRUaW1lVG9TZWNvbmRzKHRoaXMubWluVGltZS50b1RpbWVTdHJpbmcoKSk7XG4gICAgICAgICAgICBpZiAoY29udHJvbFRvdGFsU2Vjb25kcyA8IG1pblRvdGFsU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG1pblRpbWU6IHRoaXMubWluVGltZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4VGltZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4VG90YWxTZWNvbmRzID0gdGhpcy5jb252ZXJ0VGltZVRvU2Vjb25kcyh0aGlzLm1heFRpbWUudG9UaW1lU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xUb3RhbFNlY29uZHMgPiBtYXhUb3RhbFNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtYXhUaW1lOiB0aGlzLm1heFRpbWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRpbWVUb1NlY29uZHModGltZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAobnVtID0+IHBhcnNlSW50KG51bSwgMTApKTtcbiAgICAgICAgcmV0dXJuIGhvdXJzICogMzYwMCArIG1pbnV0ZXMgKiA2MCArIChzZWNvbmRzIHx8IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGltZVBpY2tlckZvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGltZVBpY2tlckZvcm0uZ2V0KCd0aW1lUGlja2VyJyk/LnBhdGNoVmFsdWUodGhpcy50aW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRpbWVQaWNrZXJPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXJPcHRpb25zID0gW1xuICAgICAgICAgICAgeyB1bml0OiAnSG91cnMnLCBkYXRhOiB0aGlzLmhvdXJzLm1hcChociA9PiAoeyBsYWJlbDogaHIsIGlzU2VsZWN0ZWQ6IGZhbHNlIH0pKSB9LFxuICAgICAgICAgICAgeyB1bml0OiAnTWludXRlcycsIGRhdGE6IHRoaXMubWludXRlcy5tYXAobWluID0+ICh7IGxhYmVsOiBtaW4sIGlzU2VsZWN0ZWQ6IGZhbHNlIH0pKSB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzVHdlbHZlSG91cnNGb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy50aW1lUGlja2VyT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi51bml0ICE9PSAnUGVyaW9kcycpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdDogJ1BlcmlvZHMnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnBlcmlvZHMubWFwKHBlcmlvZCA9PiAoeyBsYWJlbDogcGVyaW9kLCBpc1NlbGVjdGVkOiBwZXJpb2QgPT09IHRoaXMuc2VsZWN0ZWRQZXJpb2QgfSkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyhkYXRhOiBUaW1lcGlja2VyRGF0YSwgdW5pdDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy50aW1lUGlja2VyT3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS51bml0ID09PSB1bml0KTtcblxuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwLmRhdGEuZm9yRWFjaChpdGVtID0+IChpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgICAgICAgZGF0YS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBkYXRhLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IGRhdGEubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWNvbmRzID0gZGF0YS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnUGVyaW9kcyc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQZXJpb2QgPSBkYXRhLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZvcm1hdHRlZFRpbWUoKTogdm9pZCB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWRUaW1lID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNUd2VsdmVIb3Vyc0Zvcm1hdCkge1xuICAgICAgICAgICAgZm9ybWF0dGVkVGltZSA9XG4gICAgICAgICAgICAgICAgYCR7dGhpcy5zZWxlY3RlZEhvdXIucGFkU3RhcnQoMiwgJzAnKX06JHt0aGlzLnNlbGVjdGVkTWludXRlLnBhZFN0YXJ0KDIsICcwJyl9YCArXG4gICAgICAgICAgICAgICAgKHRoaXMudGltZUZvcm1hdC5pbmNsdWRlcygnOnNzJykgPyBgOiR7dGhpcy5kZWZhdWx0U2Vjb25kc31gIDogJycpICtcbiAgICAgICAgICAgICAgICBgICR7dGhpcy5zZWxlY3RlZFBlcmlvZH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0dGVkVGltZSA9XG4gICAgICAgICAgICAgICAgYCR7dGhpcy5zZWxlY3RlZEhvdXIucGFkU3RhcnQoMiwgJzAnKX06JHt0aGlzLnNlbGVjdGVkTWludXRlLnBhZFN0YXJ0KDIsICcwJyl9YCArXG4gICAgICAgICAgICAgICAgKHRoaXMudGltZUZvcm1hdC5pbmNsdWRlcygnOnNzJykgPyBgOiR7dGhpcy5kZWZhdWx0U2Vjb25kc31gIDogJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aW1lID0gZm9ybWF0dGVkVGltZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RUaW1lUGFydHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFRpbWUgfHwgIXRoaXMudGltZVBpY2tlck9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbdGltZU9ubHksIHNlbGVjdGVkUGVyaW9kXSA9IHRoaXMuaXNUd2VsdmVIb3Vyc0Zvcm1hdCA/IHRoaXMuc2VsZWN0ZWRUaW1lLnNwbGl0KCcgJykgOiBbdGhpcy5zZWxlY3RlZFRpbWUsICcnXTtcblxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXMsIHNlY29uZHNdID0gdGltZU9ubHkuc3BsaXQoJzonKTtcblxuICAgICAgICB0aGlzLnNlbGVjdFRpbWVQYXJ0KCdIb3VycycsIGhvdXJzKTtcbiAgICAgICAgdGhpcy5zZWxlY3RUaW1lUGFydCgnTWludXRlcycsIG1pbnV0ZXMpO1xuICAgICAgICB0aGlzLnNlbGVjdFRpbWVQYXJ0KCdTZWNvbmRzJywgc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0VGltZVBhcnQoJ1BlcmlvZHMnLCBzZWxlY3RlZFBlcmlvZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RUaW1lUGFydCh1bml0OiBzdHJpbmcsIHNlbGVjdGVkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnRpbWVQaWNrZXJPcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnVuaXQgPT09IHVuaXQpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cC5kYXRhLmZvckVhY2goaXRlbSA9PiAoaXRlbS5pc1NlbGVjdGVkID0gZmFsc2UpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwLnVuaXQgPT09ICdQZXJpb2RzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBncm91cC5kYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmxhYmVsLmluY2x1ZGVzKHNlbGVjdGVkVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBncm91cC5kYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmxhYmVsID09PSBzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHNlbGVjdGVkSXRlbS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBzZWxlY3RlZEl0ZW0ubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTZWNvbmRzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWNvbmRzID0gc2VsZWN0ZWRJdGVtLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGVyaW9kcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBlcmlvZCA9IHNlbGVjdGVkSXRlbS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9wb3Zlci5oaWRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyRm9ybS5yZXNldCgpO1xuICAgICAgICB0aGlzLmlzU2VsZWN0aW5nVGltZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWUgPSB0aGlzLmdldEN1cnJlbnRUaW1lKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lID0gdGhpcy50aW1lO1xuICAgICAgICB0aGlzLmV4dHJhY3RUaW1lUGFydHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRUb0RhdGUodGltZVN0cmluZzogc3RyaW5nKTogRGF0ZSB7XG4gICAgICAgIGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lU3RyaW5nPy5zcGxpdCgnOicpLm1hcChudW0gPT4gcGFyc2VJbnQobnVtLCAxMCkpO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFRpbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRpbWUuc2V0U2Vjb25kcygwLCAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUd2VsdmVIb3Vyc0Zvcm1hdCA/IG1vbWVudCh0aW1lKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KSA6IG1vbWVudCh0aW1lKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS5yZXBsYWNlKCcxMjowMCcsICcwMDowMCcpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvU2VsZWN0ZWRJdGVtcyh7IGlzU2hvd24gfTogeyBpc1Nob3duOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc1Nob3duKSByZXR1cm47XG4gICAgICAgIHRoaXMudGltZVBpY2tlck9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gb3B0aW9uLmRhdGEuZmluZChpdGVtID0+IGl0ZW0uaXNTZWxlY3RlZCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQob3B0aW9uLnVuaXQsIHNlbGVjdGVkSXRlbS5sYWJlbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGl0ZW1JZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycsIGJsb2NrOiAnc3RhcnQnIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtVmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGltZVBpY2tlckZvcm0uZ2V0KCd0aW1lUGlja2VyJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB0aGlzLnRpbWU7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RUaW1lUGFydHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZEl0ZW1zKHsgaXNTaG93bjogdGhpcy5wb3BvdmVyPy5pc1Nob3duIH0pO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwidGltZVBpY2tlckZvcm1cIj5cbiAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJzY2wtY3VzdG9tLWRhdGVwaWNrZXJfX2lucHV0XCJcbiAgICAgICAgbmJJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpbWVQaWNrZXJcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbbmJQb3BvdmVyXT1cInRpbWVQaWNrZXJcIlxuICAgICAgICBuYlBvcG92ZXJQbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgIG5iUG9wb3ZlclNpemU9XCJsYXJnZVwiXG4gICAgICAgIFtuYlBvcG92ZXJUcmlnZ2VyXT1cImlzUmVhZG9ubHkgPyAnbm9vcCcgOiAnZm9jdXMnXCJcbiAgICAgICAgW3JlYWRPbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIChuYlBvcG92ZXJTaG93U3RhdGVDaGFuZ2UpPVwic2Nyb2xsVG9TZWxlY3RlZEl0ZW1zKCRldmVudClcIiAvPlxuXG4gICAgPGRpdiBjbGFzcz1cInNjbC1jdXN0b20tZGF0ZXBpY2tlcl9faWNvblwiPlxuICAgICAgICA8bmItaWNvbiBpY29uPVwiY2FsZW5kYXJcIiBwYWNrPVwic2NsLWRhdGVwaWNrZXItaWNvblwiPjwvbmItaWNvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdGltZVBpY2tlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNjbC10aW1lcGlja2VyX19wb3BvdmVyXCIgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzY2wtdGltZXBpY2tlcl9fY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY2wtdGltZXBpY2tlcl9fZGF0YVwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdGltZVBpY2tlck9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjbC10aW1lcGlja2VyX19jb2x1bW4taGVhZGVyXCIgc2NsVGV4dCB0ZXh0VHlwZT1cImJvZHlNZWRpdW1cIj57eyBvcHRpb24udW5pdCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NsLXRpbWVwaWNrZXJfX2NvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGltZXBpY2tlckl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb24uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIml0ZW0uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KGl0ZW0sIG9wdGlvbi51bml0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NsVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUeXBlPVwiYm9keU1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzY2wtdGltZXBpY2tlcl9faXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChvcHRpb24udW5pdCwgaXRlbS5sYWJlbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NsLXRpbWVwaWNrZXJfX2Zvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxzY2wtYnV0dG9uLWdyb3VwIGFsaWdubWVudD1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmJCdXR0b24gc3RhdHVzPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiPkNvbmZpcm08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3NjbC1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export const SclTimepickerIcons = {
2
+ calendar: `
3
+ <svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
4
+ <path d="M15.128 2.5a2.708 2.708 0 0 1 2.708 2.708v9.584a2.708 2.708 0 0 1-2.708 2.708H5.544a2.708 2.708 0 0 1-2.708-2.708V5.208A2.708 2.708 0 0 1 5.544 2.5h9.584zm1.458 4.583h-12.5v7.709c0 .805.653 1.458 1.458 1.458h9.584c.805 0 1.458-.653 1.458-1.458V7.083zm-9.792 5a1.042 1.042 0 1 1 0 2.084 1.042 1.042 0 0 1 0-2.084zm3.542 0a1.042 1.042 0 1 1 0 2.084 1.042 1.042 0 0 1 0-2.084zM6.794 8.75a1.042 1.042 0 1 1 0 2.083 1.042 1.042 0 0 1 0-2.083zm3.542 0a1.042 1.042 0 1 1 0 2.083 1.042 1.042 0 0 1 0-2.083zm3.542 0a1.042 1.042 0 1 1 0 2.083 1.042 1.042 0 0 1 0-2.083zm1.25-5H5.544c-.805 0-1.458.653-1.458 1.458v.625h12.5v-.625c0-.805-.653-1.458-1.458-1.458z" fill="#4B5563"/>
5
+ </svg>`,
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5pY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhY2thZ2VzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5pY29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFZO0lBQ3ZDLFFBQVEsRUFBRTs7O2VBR0M7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmJJY29ucyB9IGZyb20gJ0BuZWJ1bGFyL3RoZW1lJztcblxuZXhwb3J0IGNvbnN0IFNjbFRpbWVwaWNrZXJJY29uczogTmJJY29ucyA9IHtcbiAgICBjYWxlbmRhcjogYFxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuMTI4IDIuNWEyLjcwOCAyLjcwOCAwIDAgMSAyLjcwOCAyLjcwOHY5LjU4NGEyLjcwOCAyLjcwOCAwIDAgMS0yLjcwOCAyLjcwOEg1LjU0NGEyLjcwOCAyLjcwOCAwIDAgMS0yLjcwOC0yLjcwOFY1LjIwOEEyLjcwOCAyLjcwOCAwIDAgMSA1LjU0NCAyLjVoOS41ODR6bTEuNDU4IDQuNTgzaC0xMi41djcuNzA5YzAgLjgwNS42NTMgMS40NTggMS40NTggMS40NThoOS41ODRjLjgwNSAwIDEuNDU4LS42NTMgMS40NTgtMS40NThWNy4wODN6bS05Ljc5MiA1YTEuMDQyIDEuMDQyIDAgMSAxIDAgMi4wODQgMS4wNDIgMS4wNDIgMCAwIDEgMC0yLjA4NHptMy41NDIgMGExLjA0MiAxLjA0MiAwIDEgMSAwIDIuMDg0IDEuMDQyIDEuMDQyIDAgMCAxIDAtMi4wODR6TTYuNzk0IDguNzVhMS4wNDIgMS4wNDIgMCAxIDEgMCAyLjA4MyAxLjA0MiAxLjA0MiAwIDAgMSAwLTIuMDgzem0zLjU0MiAwYTEuMDQyIDEuMDQyIDAgMSAxIDAgMi4wODMgMS4wNDIgMS4wNDIgMCAwIDEgMC0yLjA4M3ptMy41NDIgMGExLjA0MiAxLjA0MiAwIDEgMSAwIDIuMDgzIDEuMDQyIDEuMDQyIDAgMCAxIDAtMi4wODN6bTEuMjUtNUg1LjU0NGMtLjgwNSAwLTEuNDU4LjY1My0xLjQ1OCAxLjQ1OHYuNjI1aDEyLjV2LS42MjVjMC0uODA1LS42NTMtMS40NTgtMS40NTgtMS40NTh6XCIgZmlsbD1cIiM0QjU1NjNcIi8+XG4gICAgICAgIDwvc3ZnPmAsXG59O1xuIl19
@@ -0,0 +1,6 @@
1
+ export var TIME_FORMAT;
2
+ (function (TIME_FORMAT) {
3
+ TIME_FORMAT["DEFAULT_TIME"] = "HH:mm:ss";
4
+ TIME_FORMAT["TWELVE_HR"] = "hh:mm A";
5
+ })(TIME_FORMAT || (TIME_FORMAT = {}));
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWNrYWdlcy90aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNuQix3Q0FBeUIsQ0FBQTtJQUN6QixvQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFRpbWVwaWNrZXJPcHRpb24ge1xuICAgIHVuaXQ6IHN0cmluZztcbiAgICBkYXRhOiBUaW1lcGlja2VyRGF0YVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVwaWNrZXJEYXRhIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBUSU1FX0ZPUk1BVCB7XG4gICAgREVGQVVMVF9USU1FID0gJ0hIOm1tOnNzJyxcbiAgICBUV0VMVkVfSFIgPSAnaGg6bW0gQScsXG59XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ class SclToggleDescription {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SclToggleDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
5
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: SclToggleDescription, isStandalone: true, selector: "[sclToggleDescription]", host: { classAttribute: "scl-toggle-description" }, ngImport: i0 }); }
6
+ }
7
+ export { SclToggleDescription };
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SclToggleDescription, decorators: [{
9
+ type: Directive,
10
+ args: [{
11
+ selector: '[sclToggleDescription]',
12
+ standalone: true,
13
+ host: {
14
+ class: 'scl-toggle-description'
15
+ }
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLWRlc2NyaXB0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3BhY2thZ2VzL3RvZ2dsZS90b2dnbGUtZGVzY3JpcHRpb24vdG9nZ2xlLWRlc2NyaXB0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBRXpDLE1BT2Esb0JBQW9COzhHQUFwQixvQkFBb0I7a0dBQXBCLG9CQUFvQjs7U0FBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBUGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsd0JBQXdCO3FCQUNoQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzY2xUb2dnbGVEZXNjcmlwdGlvbl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdzY2wtdG9nZ2xlLWRlc2NyaXB0aW9uJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIFNjbFRvZ2dsZURlc2NyaXB0aW9uICB7XG5cbn1cbiJdfQ==
@@ -0,0 +1,75 @@
1
+ import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { NbToggleModule } from '@nebular/theme';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@nebular/theme";
6
+ class SclToggle {
7
+ constructor() {
8
+ this.status = 'basic';
9
+ this.disabled = false;
10
+ this.checkedChange = new EventEmitter();
11
+ this.checked = false;
12
+ this.onChange = () => { };
13
+ this.onTouch = () => { };
14
+ }
15
+ onCheckedChange(event) {
16
+ this.checked = event;
17
+ this.onChange(event);
18
+ this.onTouch();
19
+ this.checkedChange.emit(event);
20
+ }
21
+ writeValue(value) {
22
+ this.checked = value;
23
+ }
24
+ registerOnChange(fn) {
25
+ this.onChange = fn;
26
+ }
27
+ registerOnTouched(fn) {
28
+ this.onTouch = fn;
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SclToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: SclToggle, isStandalone: true, selector: "scl-toggle", inputs: { status: "status", disabled: "disabled", checked: "checked" }, outputs: { checkedChange: "checkedChange" }, host: { classAttribute: "scl-toggle" }, providers: [
32
+ {
33
+ provide: NG_VALUE_ACCESSOR,
34
+ useExisting: forwardRef(() => SclToggle),
35
+ multi: true,
36
+ },
37
+ ], ngImport: i0, template: `
38
+ <nb-toggle [status]="status" [checked]="checked" [disabled]="disabled" (checkedChange)="onCheckedChange($event)">
39
+ <ng-content></ng-content>
40
+ </nb-toggle>
41
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: NbToggleModule }, { kind: "component", type: i1.NbToggleComponent, selector: "nb-toggle", inputs: ["checked", "disabled", "status", "labelPosition"], outputs: ["checkedChange"] }] }); }
42
+ }
43
+ export { SclToggle };
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SclToggle, decorators: [{
45
+ type: Component,
46
+ args: [{
47
+ selector: 'scl-toggle',
48
+ template: `
49
+ <nb-toggle [status]="status" [checked]="checked" [disabled]="disabled" (checkedChange)="onCheckedChange($event)">
50
+ <ng-content></ng-content>
51
+ </nb-toggle>
52
+ `,
53
+ imports: [NbToggleModule],
54
+ standalone: true,
55
+ host: {
56
+ class: 'scl-toggle',
57
+ },
58
+ providers: [
59
+ {
60
+ provide: NG_VALUE_ACCESSOR,
61
+ useExisting: forwardRef(() => SclToggle),
62
+ multi: true,
63
+ },
64
+ ],
65
+ }]
66
+ }], propDecorators: { status: [{
67
+ type: Input
68
+ }], disabled: [{
69
+ type: Input
70
+ }], checkedChange: [{
71
+ type: Output
72
+ }], checked: [{
73
+ type: Input
74
+ }] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhY2thZ2VzL3RvZ2dsZS90b2dnbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBNkIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUUzRSxNQW9CYSxTQUFTO0lBcEJ0QjtRQXFCYSxXQUFNLEdBQThCLE9BQU8sQ0FBQztRQUM1QyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGtCQUFhLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0QsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVsQyxhQUFRLEdBQTJCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM1QyxZQUFPLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0tBb0JsQztJQWxCRyxlQUFlLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOzhHQTVCUSxTQUFTO2tHQUFULFNBQVMsc05BUlA7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDeEMsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKLDBCQWhCUzs7OztLQUlULDJEQUNTLGNBQWM7O1NBYWYsU0FBUzsyRkFBVCxTQUFTO2tCQXBCckIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFOzs7O0tBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSxZQUFZO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDOzRCQUN4QyxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjtpQkFDSjs4QkFFWSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOYkNvbXBvbmVudE9yQ3VzdG9tU3RhdHVzLCBOYlRvZ2dsZU1vZHVsZSB9IGZyb20gJ0BuZWJ1bGFyL3RoZW1lJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzY2wtdG9nZ2xlJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmItdG9nZ2xlIFtzdGF0dXNdPVwic3RhdHVzXCIgW2NoZWNrZWRdPVwiY2hlY2tlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2hlY2tlZENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmItdG9nZ2xlPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05iVG9nZ2xlTW9kdWxlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdzY2wtdG9nZ2xlJyxcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNjbFRvZ2dsZSksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTY2xUb2dnbGUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgQElucHV0KCkgc3RhdHVzOiBOYkNvbXBvbmVudE9yQ3VzdG9tU3RhdHVzID0gJ2Jhc2ljJztcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGNoZWNrZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIGNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG9uQ2hhbmdlOiAodmFsOiBib29sZWFuKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgb25Ub3VjaDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgb25DaGVja2VkQ2hhbmdlKGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IGV2ZW50O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgICAgIHRoaXMuY2hlY2tlZENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgICB9XG59XG4iXX0=